ontimize-web-ngx 15.0.4 → 15.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/esm2020/lib/components/app-sidenav/menu-group/o-app-sidenav-menu-group.component.mjs +3 -3
  2. package/esm2020/lib/components/app-sidenav/o-app-sidenav.component.mjs +15 -13
  3. package/esm2020/lib/components/bar-menu/menu-nested/o-bar-menu-nested.component.mjs +3 -3
  4. package/esm2020/lib/components/bar-menu/o-bar-menu.component.mjs +10 -1
  5. package/esm2020/lib/components/button/o-button.component.mjs +27 -11
  6. package/esm2020/lib/components/form/index.mjs +2 -1
  7. package/esm2020/lib/components/form/o-form-tokens.mjs +3 -0
  8. package/esm2020/lib/components/form/o-form.component.mjs +42 -15
  9. package/esm2020/lib/components/grid/o-grid.component.mjs +7 -3
  10. package/esm2020/lib/components/input/combo/combo-search/o-combo-search.component.mjs +4 -1
  11. package/esm2020/lib/components/input/combo/o-combo.component.mjs +10 -3
  12. package/esm2020/lib/components/list/o-list.component.mjs +8 -4
  13. package/esm2020/lib/components/list/renderers/o-list-item-text-renderer.class.mjs +13 -4
  14. package/esm2020/lib/components/o-service-base-component.class.mjs +11 -5
  15. package/esm2020/lib/components/o-service-component.class.mjs +64 -1
  16. package/esm2020/lib/components/table/column/cell-editor/real/o-table-cell-editor-real.component.mjs +2 -2
  17. package/esm2020/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.mjs +2 -4
  18. package/esm2020/lib/components/table/extensions/skeleton/o-table-skeleton.component.mjs +8 -7
  19. package/esm2020/lib/components/table/extensions/sort/o-mat-sort.mjs +2 -4
  20. package/esm2020/lib/components/table/o-table.component.mjs +27 -11
  21. package/esm2020/lib/components/tree/o-tree.component.mjs +7 -3
  22. package/esm2020/lib/interfaces/app-menu.interface.mjs +1 -1
  23. package/esm2020/lib/interfaces/service-data-component.interface.mjs +1 -1
  24. package/esm2020/lib/layouts/app-layout/o-app-layout.component.mjs +1 -1
  25. package/esm2020/lib/layouts/form-layout/o-form-layout-manager.component.mjs +17 -1
  26. package/esm2020/lib/services/app-menu.service.mjs +36 -2
  27. package/esm2020/lib/services/o-auth.service.mjs +7 -1
  28. package/esm2020/lib/services/permissions/permissions.service.mjs +40 -6
  29. package/esm2020/lib/types/form/index.mjs +2 -0
  30. package/esm2020/lib/types/form/o-form-global-config.type.mjs +2 -0
  31. package/esm2020/lib/types/index.mjs +3 -1
  32. package/esm2020/lib/types/o-component-permissions-by-route.type.mjs +2 -0
  33. package/esm2020/lib/types/o-form-permissions.type.mjs +1 -1
  34. package/esm2020/lib/types/o-global-config.type.mjs +3 -0
  35. package/esm2020/lib/types/o-grid-permissions.type.mjs +2 -0
  36. package/esm2020/lib/types/o-list-permissions.type.mjs +2 -0
  37. package/esm2020/lib/types/o-service-base-permissions.type.mjs +2 -0
  38. package/esm2020/lib/types/o-tree-permissions.type.mjs +2 -0
  39. package/esm2020/lib/types/table/o-table-global-config.type.mjs +1 -1
  40. package/esm2020/lib/types/table/o-table-permissions.type.mjs +1 -1
  41. package/esm2020/lib/util/codes.mjs +9 -1
  42. package/esm2020/lib/util/util.mjs +16 -1
  43. package/fesm2015/ontimize-web-ngx.mjs +1284 -1012
  44. package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
  45. package/fesm2020/ontimize-web-ngx.mjs +1283 -1012
  46. package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
  47. package/lib/components/app-sidenav/o-app-sidenav.component.d.ts +4 -4
  48. package/lib/components/bar-menu/o-bar-menu.component.d.ts +4 -0
  49. package/lib/components/button/o-button.component.d.ts +11 -2
  50. package/lib/components/form/index.d.ts +1 -0
  51. package/lib/components/form/o-form-tokens.d.ts +3 -0
  52. package/lib/components/form/o-form.component.d.ts +11 -4
  53. package/lib/components/grid/o-grid.component.d.ts +4 -0
  54. package/lib/components/input/combo/combo-search/o-combo-search.component.d.ts +1 -0
  55. package/lib/components/input/combo/o-combo.component.d.ts +2 -0
  56. package/lib/components/list/o-list.component.d.ts +4 -0
  57. package/lib/components/list/renderers/o-list-item-text-renderer.class.d.ts +4 -1
  58. package/lib/components/o-service-base-component.class.d.ts +2 -0
  59. package/lib/components/o-service-component.class.d.ts +11 -0
  60. package/lib/components/table/extensions/skeleton/o-table-skeleton.component.d.ts +1 -1
  61. package/lib/components/table/o-table.component.d.ts +3 -3
  62. package/lib/components/tree/o-tree.component.d.ts +4 -0
  63. package/lib/interfaces/app-menu.interface.d.ts +1 -0
  64. package/lib/interfaces/service-data-component.interface.d.ts +1 -0
  65. package/lib/layouts/form-layout/o-form-layout-manager.component.d.ts +1 -0
  66. package/lib/services/app-menu.service.d.ts +7 -1
  67. package/lib/services/o-auth.service.d.ts +1 -0
  68. package/lib/services/permissions/permissions.service.d.ts +14 -3
  69. package/lib/types/form/index.d.ts +1 -0
  70. package/lib/types/form/o-form-global-config.type.d.ts +3 -0
  71. package/lib/types/index.d.ts +2 -0
  72. package/lib/types/o-component-permissions-by-route.type.d.ts +5 -0
  73. package/lib/types/o-form-permissions.type.d.ts +2 -7
  74. package/lib/types/o-global-config.type.d.ts +5 -0
  75. package/lib/types/o-grid-permissions.type.d.ts +2 -0
  76. package/lib/types/o-list-permissions.type.d.ts +2 -0
  77. package/lib/types/o-service-base-permissions.type.d.ts +7 -0
  78. package/lib/types/o-tree-permissions.type.d.ts +2 -0
  79. package/lib/types/table/o-table-global-config.type.d.ts +5 -0
  80. package/lib/types/table/o-table-permissions.type.d.ts +2 -4
  81. package/lib/util/codes.d.ts +8 -1
  82. package/lib/util/util.d.ts +2 -0
  83. package/package.json +1 -1
  84. package/theme.scss +72 -71
  85. package/theming/ontimize-style.scss +1 -30
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, EventEmitter, Directive, Host, Self, Optional, Input, HostListener, Output, Injectable, Injector, Component, forwardRef, ContentChildren, ChangeDetectorRef, Pipe, NgModule, ViewChild, ElementRef, ViewEncapsulation, ViewContainerRef, Inject, NgZone, HostBinding, ViewChildren, ChangeDetectionStrategy, CUSTOM_ELEMENTS_SCHEMA, TemplateRef, SkipSelf, isDevMode, inject, ContentChild, Renderer2, APP_INITIALIZER } from '@angular/core';
2
+ import { InjectionToken, EventEmitter, Directive, Host, Self, Optional, Input, HostListener, Output, Injectable, Injector, Component, forwardRef, ContentChildren, ChangeDetectorRef, Pipe, NgModule, ViewChild, ElementRef, ViewEncapsulation, ViewContainerRef, Inject, NgZone, HostBinding, ViewChildren, ChangeDetectionStrategy, inject, CUSTOM_ELEMENTS_SCHEMA, TemplateRef, SkipSelf, isDevMode, ContentChild, Renderer2, APP_INITIALIZER } from '@angular/core';
3
3
  import moment from 'moment';
4
4
  import { isObservable, from, of, Subscription, Subject, Observable, timer, combineLatest, BehaviorSubject, ReplaySubject, merge, fromEvent, map as map$1 } from 'rxjs';
5
5
  export { Observable, Subject } from 'rxjs';
@@ -23,7 +23,7 @@ import { __decorate, __metadata } from 'tslib';
23
23
  import { coerceNumberProperty } from '@angular/cdk/coercion';
24
24
  import * as i1$1 from '@angular/material/dialog';
25
25
  import { MatDialog, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
26
- import { map, share, filter, debounceTime, distinctUntilChanged, takeUntil, take, catchError } from 'rxjs/operators';
26
+ import { map, share, filter, catchError, debounceTime, distinctUntilChanged, takeUntil, take } from 'rxjs/operators';
27
27
  import { MatSnackBar, MatSnackBarRef, MatSnackBarModule } from '@angular/material/snack-bar';
28
28
  import * as i2 from '@angular/flex-layout/flex';
29
29
  import * as i4 from '@angular/material/button';
@@ -91,6 +91,7 @@ import * as i6 from '@angular/material/tabs';
91
91
  import { MatTabsModule, MatTabGroup, MatTab } from '@angular/material/tabs';
92
92
  import { MatMomentDateModule, MomentDateAdapter } from '@angular/material-moment-adapter';
93
93
  import * as i4$2 from '@angular/flex-layout/extended';
94
+ import { TranslateHttpLoader } from '@ngx-translate/http-loader';
94
95
  import * as i7$2 from '@angular/cdk/drag-drop';
95
96
  import { moveItemInArray, transferArrayItem, DragDropModule } from '@angular/cdk/drag-drop';
96
97
  import * as i4$3 from 'angular-resizable-element';
@@ -108,7 +109,6 @@ import * as i5$4 from '@angular/cdk/table';
108
109
  import { CdkTableModule } from '@angular/cdk/table';
109
110
  import * as i3$5 from '@angular/cdk/a11y';
110
111
  import { FlatTreeControl, CdkTreeModule } from '@angular/cdk/tree';
111
- import { TranslateHttpLoader } from '@ngx-translate/http-loader';
112
112
  import * as i10$2 from '@angular/material/tree';
113
113
  import { MatTreeModule } from '@angular/material/tree';
114
114
 
@@ -205,6 +205,12 @@ class Codes {
205
205
  }
206
206
  return !((e.keyCode < 48 || e.keyCode > 57) && (e.keyCode < 96 || e.keyCode > 105));
207
207
  }
208
+ static isValidEditionMode(editionMode) {
209
+ return Codes.AVAILABLE_MODES.indexOf(editionMode) !== -1;
210
+ }
211
+ static isValidDetailMode(detailMode) {
212
+ return Codes.AVAILABLE_DETAIL_MODES.indexOf(detailMode) !== -1;
213
+ }
208
214
  }
209
215
  Codes.PAGINATED_QUERY_METHOD = 'advancedQuery';
210
216
  Codes.DELETE_METHOD = 'delete';
@@ -220,9 +226,11 @@ Codes.AVAILABLE_ROW_HEIGHTS_VALUES = ['small', 'medium', 'large'];
220
226
  Codes.DETAIL_MODE_NONE = 'none';
221
227
  Codes.DETAIL_MODE_CLICK = 'click';
222
228
  Codes.DETAIL_MODE_DBLCLICK_VALUES = ['dblclick', 'doubleclick'];
229
+ Codes.AVAILABLE_DETAIL_MODES = [Codes.DETAIL_MODE_NONE, Codes.DETAIL_MODE_CLICK, ...Codes.DETAIL_MODE_DBLCLICK_VALUES];
223
230
  Codes.EDITION_MODE_NONE = 'none';
224
231
  Codes.EDITION_MODE_CLICK = 'click';
225
232
  Codes.EDITION_MODE_DBLCLICK_VALUES = ['dblclick', 'doubleclick'];
233
+ Codes.AVAILABLE_MODES = [Codes.EDITION_MODE_NONE, Codes.EDITION_MODE_CLICK, ...Codes.EDITION_MODE_DBLCLICK_VALUES];
226
234
  Codes.SELECTION_MODE_NONE = 'none';
227
235
  Codes.SELECTION_MODE_SINGLE = 'single';
228
236
  Codes.SELECTION_MODE_MULTIPLE = 'multiple';
@@ -708,6 +716,21 @@ class Util {
708
716
  cache = null;
709
717
  return str;
710
718
  }
719
+ static sortFunction(propertyA, propertyB, activeSortDirection) {
720
+ let valueA = '';
721
+ let valueB = '';
722
+ if (Util.isDefined(propertyA)) {
723
+ valueA = isNaN(+propertyA) ? propertyA.toString().trim().toLowerCase() : +propertyA;
724
+ }
725
+ if (Util.isDefined(propertyB)) {
726
+ valueB = isNaN(+propertyB) ? propertyB.toString().trim().toLowerCase() : +propertyB;
727
+ }
728
+ return (valueA <= valueB ? -1 : 1) * (activeSortDirection === 'asc' ? 1 : -1);
729
+ }
730
+ static cloneArray(arr) {
731
+ const clonedArray = arr.map((x) => Object.assign({}, x));
732
+ return clonedArray;
733
+ }
711
734
  }
712
735
  Util.columnAggregates = ['sum', 'count', 'avg', 'min', 'max'];
713
736
 
@@ -2641,6 +2664,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
2641
2664
  class PermissionsService {
2642
2665
  constructor(injector) {
2643
2666
  this.injector = injector;
2667
+ this.onChangePermissions = new Subject();
2644
2668
  const appConfig = this.injector.get(AppConfig).getConfiguration();
2645
2669
  if (Util.isDefined(appConfig.permissionsConfiguration)) {
2646
2670
  this.ontimizePermissionsConfig = appConfig.permissionsConfiguration;
@@ -2665,6 +2689,7 @@ class PermissionsService {
2665
2689
  }
2666
2690
  restart() {
2667
2691
  this.permissions = undefined;
2692
+ this.onChangePermissions.next(this.permissions);
2668
2693
  }
2669
2694
  hasPermissions() {
2670
2695
  return this.permissions !== undefined;
@@ -2698,6 +2723,7 @@ class PermissionsService {
2698
2723
  const dataObservable = new Observable(innerObserver => {
2699
2724
  self.permissionsService.loadPermissions().subscribe((res) => {
2700
2725
  self.permissions = res;
2726
+ self.onChangePermissions.next(self.permissions);
2701
2727
  innerObserver.next(res);
2702
2728
  }, (err) => {
2703
2729
  console.error('[Permissions.queryPermissions]: error', err);
@@ -2709,6 +2735,9 @@ class PermissionsService {
2709
2735
  return dataObservable.pipe(share());
2710
2736
  }
2711
2737
  getPermissionIdFromActRoute(actRoute) {
2738
+ if (!Util.isDefined(actRoute)) {
2739
+ return undefined;
2740
+ }
2712
2741
  let result;
2713
2742
  let snapshot = actRoute.snapshot;
2714
2743
  result = ((snapshot.data || {})['oPermission'] || {})['permissionId'];
@@ -2743,10 +2772,11 @@ class PermissionsService {
2743
2772
  if (attrPermissions && attrPermissions.selector === selector) {
2744
2773
  compPermissions = attrPermissions;
2745
2774
  }
2746
- return {
2775
+ const permissions = {
2747
2776
  route: routePermissions,
2748
2777
  component: compPermissions
2749
2778
  };
2779
+ return permissions;
2750
2780
  }
2751
2781
  getTablePermissions(attr, actRoute) {
2752
2782
  if (!Util.isDefined(this.permissions)) {
@@ -2768,24 +2798,36 @@ class PermissionsService {
2768
2798
  };
2769
2799
  return permissions;
2770
2800
  }
2771
- getFormPermissions(attr, actRoute) {
2801
+ getServiceBasePermissions(attr, actRoute, selector) {
2772
2802
  if (!Util.isDefined(this.permissions)) {
2773
2803
  return undefined;
2774
2804
  }
2775
- const perm = this.getOComponentPermissions(attr, actRoute, 'o-form');
2805
+ const perm = this.getOComponentPermissions(attr, actRoute, selector);
2776
2806
  const routePerm = perm.route;
2777
2807
  const compPerm = perm.component;
2778
2808
  if (!Util.isDefined(routePerm) || !Util.isDefined(compPerm)) {
2779
2809
  return compPerm || routePerm;
2780
2810
  }
2781
2811
  const permissions = {
2782
- selector: 'o-form',
2812
+ selector: selector,
2783
2813
  attr: routePerm.attr,
2784
2814
  components: this.mergeOPermissionsArrays(compPerm.components, routePerm.components),
2785
2815
  actions: this.mergeOPermissionsArrays(compPerm.actions, routePerm.actions)
2786
2816
  };
2787
2817
  return permissions;
2788
2818
  }
2819
+ getFormPermissions(attr, actRoute) {
2820
+ return this.getServiceBasePermissions(attr, actRoute, 'o-form');
2821
+ }
2822
+ getListPermissions(attr, actRoute) {
2823
+ return this.getServiceBasePermissions(attr, actRoute, 'o-list');
2824
+ }
2825
+ getGridPermissions(attr, actRoute) {
2826
+ return this.getServiceBasePermissions(attr, actRoute, 'o-grid');
2827
+ }
2828
+ getTreePermissions(attr, actRoute) {
2829
+ return this.getServiceBasePermissions(attr, actRoute, 'o-tree');
2830
+ }
2789
2831
  getMenuPermissions(attr) {
2790
2832
  let permissions;
2791
2833
  if (!Util.isDefined(this.permissions)) {
@@ -2795,6 +2837,21 @@ class PermissionsService {
2795
2837
  permissions = allMenu.find(comp => comp.attr === attr);
2796
2838
  return permissions;
2797
2839
  }
2840
+ getAllMenuPermissions() {
2841
+ if (!Util.isDefined(this.permissions)) {
2842
+ return undefined;
2843
+ }
2844
+ const permissions = this.permissions.menu || [];
2845
+ return permissions;
2846
+ }
2847
+ getOButtonPermissions(attr, actRoute) {
2848
+ let permissions;
2849
+ if (!Util.isDefined(this.permissions)) {
2850
+ return undefined;
2851
+ }
2852
+ permissions = this.getOComponentPermissions(attr, actRoute, 'o-button');
2853
+ return permissions.component;
2854
+ }
2798
2855
  mergeOPermissionsArrays(permissionsA, permissionsB) {
2799
2856
  if (!Util.isDefined(permissionsA) || !Util.isDefined(permissionsB)) {
2800
2857
  return permissionsA || permissionsB;
@@ -3268,12 +3325,14 @@ class OntimizeAuthService extends AuthService {
3268
3325
  onLogoutSuccess(sessionId) {
3269
3326
  if (sessionId === 0) {
3270
3327
  this.clearSessionData();
3328
+ this.restartPermission();
3271
3329
  this.redirectLogin(false);
3272
3330
  }
3273
3331
  }
3274
3332
  onLogoutError(error) {
3275
3333
  console.error('Error on logout');
3276
3334
  this.clearSessionData();
3335
+ this.restartPermission();
3277
3336
  this.redirectLogin(false);
3278
3337
  }
3279
3338
  clearSessionData() {
@@ -3295,6 +3354,10 @@ class OntimizeAuthService extends AuthService {
3295
3354
  extras[Codes.QUERY_PARAMS] = arg;
3296
3355
  this.router.navigate([Codes.LOGIN_ROUTE], extras);
3297
3356
  }
3357
+ restartPermission() {
3358
+ const permissionsService = this.injector.get(PermissionsService);
3359
+ permissionsService.restart();
3360
+ }
3298
3361
  }
3299
3362
  OntimizeAuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OntimizeAuthService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
3300
3363
  OntimizeAuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OntimizeAuthService });
@@ -6841,12 +6904,6 @@ class OFormCacheClass {
6841
6904
  }
6842
6905
  }
6843
6906
 
6844
- class OFormBase {
6845
- constructor() {
6846
- this._pKeysEquiv = {};
6847
- }
6848
- }
6849
-
6850
6907
  class OFormConfirmExitService {
6851
6908
  constructor(dialogService) {
6852
6909
  this.dialogService = dialogService;
@@ -7464,6 +7521,14 @@ class OFormNavigationClass {
7464
7521
  }
7465
7522
  }
7466
7523
 
7524
+ class OFormBase {
7525
+ constructor() {
7526
+ this._pKeysEquiv = {};
7527
+ }
7528
+ }
7529
+
7530
+ const O_FORM_GLOBAL_CONFIG = new InjectionToken('o-form-config');
7531
+
7467
7532
  class OFormMessageService {
7468
7533
  getQueryErrorMessage() {
7469
7534
  return 'MESSAGES.ERROR_QUERY';
@@ -8128,6 +8193,7 @@ const DEFAULT_INPUTS_O_FORM = [
8128
8193
  'queryFallbackFunction: query-fallback-function',
8129
8194
  'ignoreDefaultNavigation: ignore-default-navigation',
8130
8195
  'messageServiceType : message-service-type',
8196
+ 'setValueOrder: set-value-order'
8131
8197
  ];
8132
8198
  const DEFAULT_OUTPUTS_O_FORM = [
8133
8199
  'onDataLoaded',
@@ -8184,6 +8250,7 @@ class OFormComponent {
8184
8250
  this.showHeaderActionsText = 'yes';
8185
8251
  this.keys = '';
8186
8252
  this.columns = '';
8253
+ this.setValueOrder = '';
8187
8254
  this.stayInRecordAfterEdit = false;
8188
8255
  this.afterInsertMode = 'close';
8189
8256
  this.queryOnInit = true;
@@ -8261,6 +8328,18 @@ class OFormComponent {
8261
8328
  }
8262
8329
  catch (e) {
8263
8330
  }
8331
+ this.getGlobalConfig();
8332
+ }
8333
+ getGlobalConfig() {
8334
+ try {
8335
+ const oFormGlobalConfig = this.injector.get(O_FORM_GLOBAL_CONFIG);
8336
+ if (Util.isDefined(oFormGlobalConfig.headerActions)) {
8337
+ this.headeractions = oFormGlobalConfig.headerActions;
8338
+ }
8339
+ ;
8340
+ }
8341
+ catch (error) {
8342
+ }
8264
8343
  }
8265
8344
  registerFormComponent(comp) {
8266
8345
  if (comp) {
@@ -8530,6 +8609,7 @@ class OFormComponent {
8530
8609
  const pkArray = Util.parseArray(this.parentKeys);
8531
8610
  this._pKeysEquiv = Util.parseParentKeysEquivalences(pkArray);
8532
8611
  this.keysSqlTypesArray = Util.parseArray(this.keysSqlTypes);
8612
+ this.setValueOrderArray = Util.parseArray(this.setValueOrder);
8533
8613
  this.configureService();
8534
8614
  this.formNavigation.subscribeToQueryParams();
8535
8615
  this.formNavigation.subscribeToUrlParams();
@@ -9253,24 +9333,35 @@ class OFormComponent {
9253
9333
  this.zone.run(() => {
9254
9334
  this.formData = newFormData;
9255
9335
  const components = this.getComponents();
9256
- if (components) {
9257
- Object.keys(components).forEach(key => {
9336
+ const keyComponents = [...Object.keys(components)];
9337
+ if (!Util.isArrayEmpty(this.setValueOrderArray)) {
9338
+ keyComponents.sort((a, b) => {
9339
+ const indexA = this.setValueOrderArray.indexOf(a) === -1 ? 1 : 0;
9340
+ const indexB = this.setValueOrderArray.indexOf(b) === -1 ? 1 : 0;
9341
+ return indexA - indexB;
9342
+ });
9343
+ }
9344
+ if (!Util.isArrayEmpty(keyComponents)) {
9345
+ keyComponents.forEach(key => {
9258
9346
  const comp = components[key];
9259
- if (Util.isFormDataComponent(comp)) {
9260
- try {
9261
- if (comp.isAutomaticBinding()) {
9262
- comp.data = self.getDataValue(key);
9263
- }
9264
- }
9265
- catch (error) {
9266
- console.error(error);
9267
- }
9268
- }
9347
+ this.setDataInFormDataComponent(comp, key);
9269
9348
  });
9270
9349
  self.initializeFields();
9271
9350
  }
9272
9351
  });
9273
9352
  }
9353
+ setDataInFormDataComponent(comp, attr) {
9354
+ if (Util.isFormDataComponent(comp)) {
9355
+ try {
9356
+ if (comp.isAutomaticBinding()) {
9357
+ comp.data = this.getDataValue(attr);
9358
+ }
9359
+ }
9360
+ catch (error) {
9361
+ console.error(error);
9362
+ }
9363
+ }
9364
+ }
9274
9365
  initializeFields() {
9275
9366
  Object.keys(this.formGroup.controls).forEach(control => {
9276
9367
  this.formGroup.controls[control].markAsPristine();
@@ -9370,7 +9461,7 @@ class OFormComponent {
9370
9461
  OFormComponent.DEFAULT_LAYOUT_DIRECTION = 'column';
9371
9462
  OFormComponent.guardClassName = 'CanDeactivateFormGuard';
9372
9463
  OFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OFormComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
9373
- OFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OFormComponent, selector: "o-form", inputs: { showHeader: ["show-header", "showHeader"], headerMode: ["header-mode", "headerMode"], headerPosition: ["header-position", "headerPosition"], labelheader: ["label-header", "labelheader"], labelHeaderAlign: ["label-header-align", "labelHeaderAlign"], headeractions: ["header-actions", "headeractions"], showHeaderActionsText: ["show-header-actions-text", "showHeaderActionsText"], entity: "entity", keys: "keys", columns: "columns", service: "service", stayInRecordAfterEdit: ["stay-in-record-after-edit", "stayInRecordAfterEdit"], afterInsertMode: ["after-insert-mode", "afterInsertMode"], serviceType: ["service-type", "serviceType"], queryOnInit: ["query-on-init", "queryOnInit"], parentKeys: ["parent-keys", "parentKeys"], queryMethod: ["query-method", "queryMethod"], insertMethod: ["insert-method", "insertMethod"], updateMethod: ["update-method", "updateMethod"], deleteMethod: ["delete-method", "deleteMethod"], layoutDirection: ["layout-direction", "layoutDirection"], layoutAlign: ["layout-align", "layoutAlign"], editableDetail: ["editable-detail", "editableDetail"], keysSqlTypes: ["keys-sql-types", "keysSqlTypes"], undoButton: ["undo-button", "undoButton"], showHeaderNavigation: ["show-header-navigation", "showHeaderNavigation"], oattr: ["attr", "oattr"], includeBreadcrumb: ["include-breadcrumb", "includeBreadcrumb"], detectChangesOnBlur: ["detect-changes-on-blur", "detectChangesOnBlur"], confirmExit: ["confirm-exit", "confirmExit"], ignoreOnExit: ["ignore-on-exit", "ignoreOnExit"], queryFallbackFunction: ["query-fallback-function", "queryFallbackFunction"], ignoreDefaultNavigation: ["ignore-default-navigation", "ignoreDefaultNavigation"], messageServiceType: ["message-service-type", "messageServiceType"] }, outputs: { onDataLoaded: "onDataLoaded", beforeCloseDetail: "beforeCloseDetail", beforeGoEditMode: "beforeGoEditMode", onFormModeChange: "onFormModeChange", onBeforeInsert: "onBeforeInsert", onBeforeUpdate: "onBeforeUpdate", onBeforeDelete: "onBeforeDelete", onInsert: "onInsert", onUpdate: "onUpdate", onDelete: "onDelete", beforeInsertMode: "beforeInsertMode", beforeUpdateMode: "beforeUpdateMode", beforeInitialMode: "beforeInitialMode", onInsertMode: "onInsertMode", onUpdateMode: "onUpdateMode", onInitialMode: "onInitialMode", onCancel: "onCancel" }, host: { properties: { "class.o-form": "true" } }, providers: [
9464
+ OFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OFormComponent, selector: "o-form", inputs: { showHeader: ["show-header", "showHeader"], headerMode: ["header-mode", "headerMode"], headerPosition: ["header-position", "headerPosition"], labelheader: ["label-header", "labelheader"], labelHeaderAlign: ["label-header-align", "labelHeaderAlign"], headeractions: ["header-actions", "headeractions"], showHeaderActionsText: ["show-header-actions-text", "showHeaderActionsText"], entity: "entity", keys: "keys", columns: "columns", service: "service", stayInRecordAfterEdit: ["stay-in-record-after-edit", "stayInRecordAfterEdit"], afterInsertMode: ["after-insert-mode", "afterInsertMode"], serviceType: ["service-type", "serviceType"], queryOnInit: ["query-on-init", "queryOnInit"], parentKeys: ["parent-keys", "parentKeys"], queryMethod: ["query-method", "queryMethod"], insertMethod: ["insert-method", "insertMethod"], updateMethod: ["update-method", "updateMethod"], deleteMethod: ["delete-method", "deleteMethod"], layoutDirection: ["layout-direction", "layoutDirection"], layoutAlign: ["layout-align", "layoutAlign"], editableDetail: ["editable-detail", "editableDetail"], keysSqlTypes: ["keys-sql-types", "keysSqlTypes"], undoButton: ["undo-button", "undoButton"], showHeaderNavigation: ["show-header-navigation", "showHeaderNavigation"], oattr: ["attr", "oattr"], includeBreadcrumb: ["include-breadcrumb", "includeBreadcrumb"], detectChangesOnBlur: ["detect-changes-on-blur", "detectChangesOnBlur"], confirmExit: ["confirm-exit", "confirmExit"], ignoreOnExit: ["ignore-on-exit", "ignoreOnExit"], queryFallbackFunction: ["query-fallback-function", "queryFallbackFunction"], ignoreDefaultNavigation: ["ignore-default-navigation", "ignoreDefaultNavigation"], messageServiceType: ["message-service-type", "messageServiceType"], setValueOrder: ["set-value-order", "setValueOrder"] }, outputs: { onDataLoaded: "onDataLoaded", beforeCloseDetail: "beforeCloseDetail", beforeGoEditMode: "beforeGoEditMode", onFormModeChange: "onFormModeChange", onBeforeInsert: "onBeforeInsert", onBeforeUpdate: "onBeforeUpdate", onBeforeDelete: "onBeforeDelete", onInsert: "onInsert", onUpdate: "onUpdate", onDelete: "onDelete", beforeInsertMode: "beforeInsertMode", beforeUpdateMode: "beforeUpdateMode", beforeInitialMode: "beforeInitialMode", onInsertMode: "onInsertMode", onUpdateMode: "onUpdateMode", onInitialMode: "onInitialMode", onCancel: "onCancel" }, host: { properties: { "class.o-form": "true" } }, providers: [
9374
9465
  { provide: OFormBase, useExisting: forwardRef(() => OFormComponent) },
9375
9466
  OntimizeServiceProvider,
9376
9467
  OFormMessageService
@@ -11703,20 +11794,50 @@ class AppMenuService {
11703
11794
  constructor(injector) {
11704
11795
  this.injector = injector;
11705
11796
  this.onClick = new Subject;
11797
+ this.onPermissionMenuChanged = new Subject();
11706
11798
  this._config = this.injector.get(AppConfig);
11707
- this.MENU_ROOTS = this._config.getMenuConfiguration();
11708
11799
  this.router = this.injector.get(Router);
11709
11800
  this.router.events.subscribe((event) => {
11710
11801
  if (event instanceof NavigationEnd) {
11711
11802
  this.setActiveItem();
11712
11803
  }
11713
11804
  });
11805
+ this.setMenuItemsByMenuConfiguration();
11806
+ this.permissionsService = this.injector.get(PermissionsService);
11807
+ this.permissionsService.onChangePermissions.subscribe(x => {
11808
+ this.mergeMenuItemsWithPermissions();
11809
+ this.onPermissionMenuChanged.next();
11810
+ });
11811
+ }
11812
+ setMenuItemsByMenuConfiguration() {
11813
+ const defaultMenuConfiguration = Util.cloneArray(this._config.getMenuConfiguration());
11814
+ this.MENU_ROOTS = defaultMenuConfiguration;
11714
11815
  this.ALL_MENU_ITEMS = [];
11715
11816
  for (let i = 0, len = this.MENU_ROOTS.length; i < len; i++) {
11716
11817
  const item = this.MENU_ROOTS[i];
11717
11818
  this.ALL_MENU_ITEMS = this.ALL_MENU_ITEMS.concat(this.getMenuItems(item));
11718
11819
  }
11719
11820
  }
11821
+ mergeMenuItemsWithPermissions() {
11822
+ this.setMenuItemsByMenuConfiguration();
11823
+ const permissionsMenu = this.permissionsService.getAllMenuPermissions();
11824
+ if (Util.isDefined(permissionsMenu)) {
11825
+ this.MENU_ROOTS = [...this.MENU_ROOTS.map(menu => {
11826
+ const indexPermission = permissionsMenu.findIndex(permission => permission.attr === menu.id);
11827
+ if (indexPermission > -1) {
11828
+ menu.visible = permissionsMenu[indexPermission].visible;
11829
+ }
11830
+ return menu;
11831
+ })];
11832
+ this.ALL_MENU_ITEMS = [...this.ALL_MENU_ITEMS.map(menu => {
11833
+ const indexPermission = permissionsMenu.findIndex(permission => permission.attr === menu.id);
11834
+ if (indexPermission > -1) {
11835
+ menu.visible = permissionsMenu[indexPermission].visible;
11836
+ }
11837
+ return menu;
11838
+ })];
11839
+ }
11840
+ }
11720
11841
  getMenuRoots() {
11721
11842
  return this.MENU_ROOTS;
11722
11843
  }
@@ -11765,6 +11886,9 @@ class AppMenuService {
11765
11886
  isRouteItem(item) {
11766
11887
  return Util.isDefined(item.route);
11767
11888
  }
11889
+ isVisible(item) {
11890
+ return !Util.isDefined(item.visible) || (Util.isDefined(item.visible) && item.visible);
11891
+ }
11768
11892
  getMenuItems(item) {
11769
11893
  const menuGroup = item;
11770
11894
  const items = menuGroup.items;
@@ -11808,10 +11932,10 @@ class OBarMenuNestedComponent {
11808
11932
  }
11809
11933
  }
11810
11934
  OBarMenuNestedComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OBarMenuNestedComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
11811
- OBarMenuNestedComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OBarMenuNestedComponent, selector: "o-bar-menu-nested", inputs: { items: "items" }, ngImport: i0, template: "<ng-container *ngFor=\"let item of items\">\n <ng-container [ngSwitch]=\"appMenuService.getMenuItemType(item)\">\n\n <o-bar-menu-group *ngSwitchCase=\"'group'\" [title]=\"item.name\" [attr]=\"item.id\" [tooltip]=\"item.tooltip\" [icon]=\"item.icon\" [ngClass]=\"item.class\">\n <o-bar-menu-nested [items]=\"item.items\"> </o-bar-menu-nested>\n </o-bar-menu-group>\n\n <o-locale-bar-menu-item *ngSwitchCase=\"'locale'\" [title]=\"item.name\" [attr]=\"item.id\" [tooltip]=\"item.tooltip\" [icon]=\"item.icon\"\n [locale]=\"item.locale\" [ngClass]=\"item.class\">\n </o-locale-bar-menu-item>\n\n <o-bar-menu-item *ngSwitchDefault [title]=\"item.name\" [attr]=\"item.id\" [tooltip]=\"item.tooltip\" [icon]=\"item.icon\" [route]=\"item.route\"\n [ngClass]=\"item.class\"></o-bar-menu-item>\n\n </ng-container>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1$2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i4$2.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "component", type: OBarMenuItemComponent, selector: "o-bar-menu-item", inputs: ["route", "action"] }, { kind: "component", type: OBarMenuGroupComponent, selector: "o-bar-menu-group" }, { kind: "component", type: OLocaleBarMenuItemComponent, selector: "o-locale-bar-menu-item", inputs: ["locale"] }, { kind: "component", type: OBarMenuNestedComponent, selector: "o-bar-menu-nested", inputs: ["items"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
11935
+ OBarMenuNestedComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OBarMenuNestedComponent, selector: "o-bar-menu-nested", inputs: { items: "items" }, ngImport: i0, template: "<ng-container *ngFor=\"let item of items\">\n <ng-container [ngSwitch]=\"appMenuService.getMenuItemType(item)\" *ngIf=\"appMenuService.isVisible(item)\">\n\n <o-bar-menu-group *ngSwitchCase=\"'group'\" [title]=\"item.name\" [attr]=\"item.id\" [tooltip]=\"item.tooltip\" [icon]=\"item.icon\" [ngClass]=\"item.class\">\n <o-bar-menu-nested [items]=\"item.items\"> </o-bar-menu-nested>\n </o-bar-menu-group>\n\n <o-locale-bar-menu-item *ngSwitchCase=\"'locale'\" [title]=\"item.name\" [attr]=\"item.id\" [tooltip]=\"item.tooltip\" [icon]=\"item.icon\"\n [locale]=\"item.locale\" [ngClass]=\"item.class\">\n </o-locale-bar-menu-item>\n\n <o-bar-menu-item *ngSwitchDefault [title]=\"item.name\" [attr]=\"item.id\" [tooltip]=\"item.tooltip\" [icon]=\"item.icon\" [route]=\"item.route\"\n [ngClass]=\"item.class\"></o-bar-menu-item>\n\n </ng-container>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1$2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i4$2.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "component", type: OBarMenuItemComponent, selector: "o-bar-menu-item", inputs: ["route", "action"] }, { kind: "component", type: OBarMenuGroupComponent, selector: "o-bar-menu-group" }, { kind: "component", type: OLocaleBarMenuItemComponent, selector: "o-locale-bar-menu-item", inputs: ["locale"] }, { kind: "component", type: OBarMenuNestedComponent, selector: "o-bar-menu-nested", inputs: ["items"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
11812
11936
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OBarMenuNestedComponent, decorators: [{
11813
11937
  type: Component,
11814
- args: [{ selector: 'o-bar-menu-nested', inputs: DEFAULT_INPUTS_O_BAR_MENU_NESTED, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngFor=\"let item of items\">\n <ng-container [ngSwitch]=\"appMenuService.getMenuItemType(item)\">\n\n <o-bar-menu-group *ngSwitchCase=\"'group'\" [title]=\"item.name\" [attr]=\"item.id\" [tooltip]=\"item.tooltip\" [icon]=\"item.icon\" [ngClass]=\"item.class\">\n <o-bar-menu-nested [items]=\"item.items\"> </o-bar-menu-nested>\n </o-bar-menu-group>\n\n <o-locale-bar-menu-item *ngSwitchCase=\"'locale'\" [title]=\"item.name\" [attr]=\"item.id\" [tooltip]=\"item.tooltip\" [icon]=\"item.icon\"\n [locale]=\"item.locale\" [ngClass]=\"item.class\">\n </o-locale-bar-menu-item>\n\n <o-bar-menu-item *ngSwitchDefault [title]=\"item.name\" [attr]=\"item.id\" [tooltip]=\"item.tooltip\" [icon]=\"item.icon\" [route]=\"item.route\"\n [ngClass]=\"item.class\"></o-bar-menu-item>\n\n </ng-container>\n</ng-container>\n" }]
11938
+ args: [{ selector: 'o-bar-menu-nested', inputs: DEFAULT_INPUTS_O_BAR_MENU_NESTED, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngFor=\"let item of items\">\n <ng-container [ngSwitch]=\"appMenuService.getMenuItemType(item)\" *ngIf=\"appMenuService.isVisible(item)\">\n\n <o-bar-menu-group *ngSwitchCase=\"'group'\" [title]=\"item.name\" [attr]=\"item.id\" [tooltip]=\"item.tooltip\" [icon]=\"item.icon\" [ngClass]=\"item.class\">\n <o-bar-menu-nested [items]=\"item.items\"> </o-bar-menu-nested>\n </o-bar-menu-group>\n\n <o-locale-bar-menu-item *ngSwitchCase=\"'locale'\" [title]=\"item.name\" [attr]=\"item.id\" [tooltip]=\"item.tooltip\" [icon]=\"item.icon\"\n [locale]=\"item.locale\" [ngClass]=\"item.class\">\n </o-locale-bar-menu-item>\n\n <o-bar-menu-item *ngSwitchDefault [title]=\"item.name\" [attr]=\"item.id\" [tooltip]=\"item.tooltip\" [icon]=\"item.icon\" [route]=\"item.route\"\n [ngClass]=\"item.class\"></o-bar-menu-item>\n\n </ng-container>\n</ng-container>\n" }]
11815
11939
  }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
11816
11940
 
11817
11941
  class OBarMenuSeparatorComponent {
@@ -11833,10 +11957,12 @@ class OBarMenuComponent {
11833
11957
  constructor(elRef, injector) {
11834
11958
  this.elRef = elRef;
11835
11959
  this.injector = injector;
11960
+ this.subscription = new Subscription();
11836
11961
  this.id = 'm_' + String((new Date()).getTime() + Util.randomNumber().toString());
11837
11962
  this.permissionsService = this.injector.get(PermissionsService);
11838
11963
  this.translateService = this.injector.get(OTranslateService);
11839
11964
  this.appMenuService = this.injector.get(AppMenuService);
11965
+ this.subscription.add(this.appMenuService.onPermissionMenuChanged.subscribe(() => this.refreshMenuRoots()));
11840
11966
  this.menuRoots = this.appMenuService.getMenuRoots();
11841
11967
  }
11842
11968
  ngOnInit() {
@@ -11892,6 +12018,12 @@ class OBarMenuComponent {
11892
12018
  get menuItems() {
11893
12019
  return this.menuRoots;
11894
12020
  }
12021
+ refreshMenuRoots() {
12022
+ this.menuRoots = [...this.appMenuService.getMenuRoots()];
12023
+ }
12024
+ ngOnDestroy() {
12025
+ this.subscription.unsubscribe();
12026
+ }
11895
12027
  }
11896
12028
  OBarMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OBarMenuComponent, deps: [{ token: i0.ElementRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
11897
12029
  OBarMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OBarMenuComponent, selector: "o-bar-menu", inputs: { menuTitle: ["title", "menuTitle"], tooltip: "tooltip" }, host: { properties: { "class.o-bar-menu": "true" } }, providers: [{ provide: OBarMenuBase, useExisting: forwardRef(() => OBarMenuComponent) }], ngImport: i0, template: "<mat-toolbar color=\"primary\">\n <nav>\n <mat-icon class=\"mat-24 menu-icon toggle\" (click)=\"input.checked = !input.checked\" svgIcon=\"ontimize:menu\"></mat-icon>\n <label [attr.for]=\"id\" class=\"toggle title-label\">{{ menuTitle | oTranslate }}</label>\n <input #input [attr.id]=\"id\" type=\"checkbox\" />\n <div class=\"fake-ul mat-primary menu\">\n <ng-container>\n <o-bar-menu-nested [items]=\"menuItems\"></o-bar-menu-nested>\n </ng-container>\n <ng-content></ng-content>\n </div>\n </nav>\n</mat-toolbar>", styles: [".o-bar-menu .toggle,.o-bar-menu input{display:none}.o-bar-menu nav{margin:0;padding:0}.o-bar-menu nav:after{content:\"\";display:table;clear:both}.o-bar-menu nav .fake-li a{cursor:pointer}.o-bar-menu nav .fake-ul{float:right;padding:0;margin:0;list-style:none;position:relative}.o-bar-menu nav .fake-ul.menu>.o-bar-menu-item .o-bar-menu-item-title{top:0;padding-left:0}.o-bar-menu nav .fake-ul .fake-li{margin:0;display:inline-block}.o-bar-menu nav .fake-ul .fake-ul{display:none;position:absolute;top:60px}.o-bar-menu nav .fake-ul .fake-ul .fake-li{min-width:250px;width:250px;float:none;display:list-item;position:relative;white-space:nowrap}.o-bar-menu nav .fake-ul .fake-ul .fake-ul{top:0}.o-bar-menu nav .fake-ul .fake-ul .fake-ul .fake-li{position:relative;top:0;left:0}.o-bar-menu nav a{display:flex;align-items:center;padding:0 20px;font-size:20px;line-height:60px;text-decoration:none}.o-bar-menu .fake-li>a:only-child:after{content:\"\"}@media all and (min-width: 768px){.o-bar-menu nav .fake-ul .fake-li-hover>.fake-ul{display:inline-block;z-index:1000}.o-bar-menu nav .fake-ul .fake-ul .fake-li-hover>.fake-ul{display:inline-block;z-index:1000;left:250px}}@media all and (max-width: 767px){.o-bar-menu .mat-toolbar{height:auto!important}.o-bar-menu nav{margin:10px 0;width:100%}.o-bar-menu nav .o-bar-menu-group,.o-bar-menu nav .o-bar-menu-item,.o-bar-menu nav .o-bar-menu-separator,.o-bar-menu nav .o-locale-bar-menu-item{display:flex}.o-bar-menu nav .o-bar-menu-group .mat-mdc-list-item,.o-bar-menu nav .o-bar-menu-item .mat-mdc-list-item,.o-bar-menu nav .o-bar-menu-separator .mat-mdc-list-item,.o-bar-menu nav .o-locale-bar-menu-item .mat-mdc-list-item{display:flex;justify-content:flex-start;align-items:center}.o-bar-menu nav .fake-ul{width:100%}.o-bar-menu nav .fake-ul .fake-li{width:100%}.o-bar-menu nav .fake-ul .fake-ul{float:none;position:static;width:100%}.o-bar-menu nav .fake-ul .fake-ul .fake-li{padding-left:20px;width:100%}.o-bar-menu nav .fake-ul .fake-ul .mat-elevation-z4{box-shadow:none}.o-bar-menu .toggle{display:inline-block;padding:0 20px;font-size:20px;line-height:60px;text-decoration:none;border:none;cursor:pointer}.o-bar-menu .toggle+a{display:none!important}.o-bar-menu .menu{display:none;float:left!important}.o-bar-menu label.title-label{display:inline-block}.o-bar-menu .mat-icon.menu-icon{vertical-align:middle;display:inline-block;line-height:1;padding:0 4px}.o-bar-menu input:checked+.fake-ul{display:block}}@media all and (max-width: 330px){.o-bar-menu nav .fake-ul .fake-li{width:94%}}\n"], dependencies: [{ kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3$1.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: OBarMenuNestedComponent, selector: "o-bar-menu-nested", inputs: ["items"] }, { kind: "pipe", type: OTranslatePipe, name: "oTranslate" }], encapsulation: i0.ViewEncapsulation.None });
@@ -12132,6 +12264,936 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
12132
12264
  }]
12133
12265
  }] });
12134
12266
 
12267
+ class AppConfigFactory {
12268
+ constructor(injector) {
12269
+ this.injector = injector;
12270
+ this.config = this.injector.get(APP_CONFIG);
12271
+ }
12272
+ factory() {
12273
+ return new AppConfig(this.config);
12274
+ }
12275
+ }
12276
+ function appConfigFactory(injector) {
12277
+ return new AppConfigFactory(injector).factory();
12278
+ }
12279
+
12280
+ class OUserInfoService {
12281
+ constructor(injector) {
12282
+ this.injector = injector;
12283
+ this.subject = new Subject();
12284
+ }
12285
+ setUserInfo(info) {
12286
+ this.storedInfo = info;
12287
+ this.subject.next(info);
12288
+ }
12289
+ getUserInfo() {
12290
+ return this.storedInfo;
12291
+ }
12292
+ getUserInfoObservable() {
12293
+ return this.subject.asObservable();
12294
+ }
12295
+ }
12296
+ OUserInfoService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OUserInfoService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
12297
+ OUserInfoService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OUserInfoService, providedIn: 'root' });
12298
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OUserInfoService, decorators: [{
12299
+ type: Injectable,
12300
+ args: [{
12301
+ providedIn: 'root'
12302
+ }]
12303
+ }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
12304
+
12305
+ class AuthGuardService {
12306
+ constructor(injector) {
12307
+ this.injector = injector;
12308
+ this.router = this.injector.get(Router);
12309
+ this.authService = this.injector.get(AuthService);
12310
+ this.oUserInfoService = this.injector.get(OUserInfoService);
12311
+ this.permissionsService = this.injector.get(PermissionsService);
12312
+ }
12313
+ canActivate(next, state) {
12314
+ const isLoggedIn = this.authService.isLoggedIn();
12315
+ let result = isLoggedIn;
12316
+ if (!isLoggedIn) {
12317
+ this.permissionsService.restart();
12318
+ this.router.navigate([Codes.LOGIN_ROUTE]);
12319
+ }
12320
+ if (isLoggedIn) {
12321
+ this.setUserInformation();
12322
+ if (!this.permissionsService.hasPermissions()) {
12323
+ result = this.permissionsService.getUserPermissionsAsPromise();
12324
+ }
12325
+ }
12326
+ return result;
12327
+ }
12328
+ setUserInformation() {
12329
+ const sessionInfo = this.authService.getSessionInfo();
12330
+ this.oUserInfoService.setUserInfo({
12331
+ username: sessionInfo.user,
12332
+ avatar: './assets/images/user_profile.png'
12333
+ });
12334
+ }
12335
+ }
12336
+ AuthGuardService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthGuardService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
12337
+ AuthGuardService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthGuardService, providedIn: 'root' });
12338
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthGuardService, decorators: [{
12339
+ type: Injectable,
12340
+ args: [{
12341
+ providedIn: 'root'
12342
+ }]
12343
+ }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
12344
+
12345
+ class OFormLayoutManagerService {
12346
+ constructor(injector) {
12347
+ this.injector = injector;
12348
+ this.registeredFormLayoutManagers = {};
12349
+ }
12350
+ registerFormLayoutManager(comp) {
12351
+ this.registeredFormLayoutManagers[comp.getAttribute()] = comp;
12352
+ }
12353
+ removeFormLayoutManager(comp) {
12354
+ delete this.registeredFormLayoutManagers[comp.getAttribute()];
12355
+ }
12356
+ get activeFormLayoutManager() {
12357
+ return this._activeFormLayoutManager;
12358
+ }
12359
+ set activeFormLayoutManager(arg) {
12360
+ this._activeFormLayoutManager = arg;
12361
+ }
12362
+ }
12363
+ OFormLayoutManagerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OFormLayoutManagerService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
12364
+ OFormLayoutManagerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OFormLayoutManagerService, providedIn: 'root' });
12365
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OFormLayoutManagerService, decorators: [{
12366
+ type: Injectable,
12367
+ args: [{
12368
+ providedIn: 'root'
12369
+ }]
12370
+ }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
12371
+
12372
+ class OModulesInfoService {
12373
+ constructor(injector, router) {
12374
+ this.injector = injector;
12375
+ this.router = router;
12376
+ this.subject = new ReplaySubject();
12377
+ this.router = this.injector.get(Router);
12378
+ }
12379
+ getModuleChangeObservable() {
12380
+ this.router.events
12381
+ .pipe(filter(e => e instanceof NavigationEnd), map(() => {
12382
+ let route = this.router.routerState.root;
12383
+ let routeTitle = '';
12384
+ while (route.firstChild) {
12385
+ route = route.firstChild;
12386
+ }
12387
+ if (route.snapshot.data['oAppHeaderTitle']) {
12388
+ routeTitle = route.snapshot.data['oAppHeaderTitle'];
12389
+ }
12390
+ return routeTitle;
12391
+ }))
12392
+ .subscribe((title) => {
12393
+ if (title) {
12394
+ this.subject.next(title);
12395
+ }
12396
+ else {
12397
+ this.subject.next("");
12398
+ }
12399
+ });
12400
+ return this.subject.asObservable();
12401
+ }
12402
+ }
12403
+ OModulesInfoService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OModulesInfoService, deps: [{ token: i0.Injector }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
12404
+ OModulesInfoService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OModulesInfoService, providedIn: 'root' });
12405
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OModulesInfoService, decorators: [{
12406
+ type: Injectable,
12407
+ args: [{
12408
+ providedIn: 'root'
12409
+ }]
12410
+ }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.Router }]; } });
12411
+
12412
+ class ShareCanActivateChildService {
12413
+ constructor(injector) {
12414
+ this.injector = injector;
12415
+ this.router = this.injector.get(Router);
12416
+ this.permissionsService = this.injector.get(PermissionsService);
12417
+ }
12418
+ setPermissionsGuard(guard) {
12419
+ this.permissionsGuard = guard;
12420
+ }
12421
+ canActivateChildUsingPermissions(childRoute, state) {
12422
+ if (this.permissionsGuard) {
12423
+ return this.permissionsGuard.canActivateChild(childRoute, state);
12424
+ }
12425
+ return true;
12426
+ }
12427
+ }
12428
+ ShareCanActivateChildService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ShareCanActivateChildService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
12429
+ ShareCanActivateChildService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ShareCanActivateChildService, providedIn: 'root' });
12430
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ShareCanActivateChildService, decorators: [{
12431
+ type: Injectable,
12432
+ args: [{
12433
+ providedIn: 'root'
12434
+ }]
12435
+ }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
12436
+
12437
+ class PermissionsGuardService {
12438
+ constructor(injector) {
12439
+ this.injector = injector;
12440
+ this.router = this.injector.get(Router);
12441
+ this.permissionsService = this.injector.get(PermissionsService);
12442
+ this.snackBarService = this.injector.get(SnackBarService);
12443
+ this.shareCanActivateChildService = this.injector.get(ShareCanActivateChildService);
12444
+ this.shareCanActivateChildService.setPermissionsGuard(this);
12445
+ }
12446
+ canActivateChild(childRoute, state) {
12447
+ let restricted = false;
12448
+ const oPermission = childRoute.data ? childRoute.data['oPermission'] : undefined;
12449
+ const permissionId = (oPermission || {})['permissionId'];
12450
+ if (Util.isDefined(permissionId)) {
12451
+ restricted = this.permissionsService.isPermissionIdRouteRestricted(permissionId);
12452
+ if (restricted) {
12453
+ let msg = 'MESSAGES.NAVIGATION_NOT_ALLOWED_PERMISSION';
12454
+ const route = oPermission['restrictedPermissionsRedirect'];
12455
+ if (Util.isDefined(route)) {
12456
+ msg = 'MESSAGES.NAVIGATION_REDIRECTED_PERMISSION';
12457
+ this.router.navigate([route]);
12458
+ }
12459
+ this.snackBarService.open(msg);
12460
+ }
12461
+ }
12462
+ return !restricted;
12463
+ }
12464
+ }
12465
+ PermissionsGuardService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PermissionsGuardService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
12466
+ PermissionsGuardService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PermissionsGuardService });
12467
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PermissionsGuardService, decorators: [{
12468
+ type: Injectable
12469
+ }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
12470
+
12471
+ function getPermissionsServiceProvider(injector) {
12472
+ return new PermissionsService(injector);
12473
+ }
12474
+ class OPermissionsModule {
12475
+ }
12476
+ OPermissionsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OPermissionsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
12477
+ OPermissionsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: OPermissionsModule, imports: [CommonModule] });
12478
+ OPermissionsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OPermissionsModule, providers: [
12479
+ { provide: PermissionsGuardService, useClass: PermissionsGuardService },
12480
+ { provide: OntimizePermissionsService, useFactory: permissionsServiceFactory, deps: [Injector] }
12481
+ ], imports: [CommonModule] });
12482
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OPermissionsModule, decorators: [{
12483
+ type: NgModule,
12484
+ args: [{
12485
+ imports: [CommonModule],
12486
+ providers: [
12487
+ { provide: PermissionsGuardService, useClass: PermissionsGuardService },
12488
+ { provide: OntimizePermissionsService, useFactory: permissionsServiceFactory, deps: [Injector] }
12489
+ ]
12490
+ }]
12491
+ }] });
12492
+
12493
+ class OFormLayoutManagerComponentStateClass extends DefaultComponentStateClass {
12494
+ }
12495
+
12496
+ class OFormLayoutManagerComponentStateService extends AbstractComponentStateService {
12497
+ initialize(component) {
12498
+ this.state = new OFormLayoutManagerComponentStateClass();
12499
+ super.initialize(component);
12500
+ }
12501
+ initializeState(state) {
12502
+ super.initializeState(state);
12503
+ }
12504
+ }
12505
+ OFormLayoutManagerComponentStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OFormLayoutManagerComponentStateService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
12506
+ OFormLayoutManagerComponentStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OFormLayoutManagerComponentStateService });
12507
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OFormLayoutManagerComponentStateService, decorators: [{
12508
+ type: Injectable
12509
+ }] });
12510
+
12511
+ class OGridComponentStateClass extends DefaultServiceComponentStateClass {
12512
+ get sortColumn() {
12513
+ return this['sort-column'];
12514
+ }
12515
+ set sortColumn(value) {
12516
+ this['sort-column'] = value;
12517
+ }
12518
+ }
12519
+
12520
+ class OGridComponentStateService extends AbstractComponentStateService {
12521
+ initialize(component) {
12522
+ this.state = new OGridComponentStateClass();
12523
+ super.initialize(component);
12524
+ }
12525
+ initializeState(state) {
12526
+ super.initializeState(state);
12527
+ }
12528
+ getDataToStore() {
12529
+ const dataToStore = Object.assign({}, this.state);
12530
+ dataToStore['query-rows'] = this.component.queryRows;
12531
+ dataToStore['currentPage'] = this.component.currentPage;
12532
+ if (this.component.storePaginationState) {
12533
+ dataToStore['queryRecordOffset'] = Math.max((this.state.queryRecordOffset - this.component.dataArray.length), (this.state.queryRecordOffset - this.component.queryRows));
12534
+ }
12535
+ else {
12536
+ delete dataToStore['queryRecordOffset'];
12537
+ }
12538
+ if (Util.isDefined(this.component.sortColumnOrder)) {
12539
+ dataToStore['sort-column'] = this.component.sortColumnOrder.columnName + Codes.COLUMNS_ALIAS_SEPARATOR +
12540
+ (this.component.sortColumnOrder.ascendent ? Codes.ASC_SORT : Codes.DESC_SORT);
12541
+ }
12542
+ dataToStore['filter-case-sensitive'] = this.component.isFilterCaseSensitive();
12543
+ if (this.component.quickFilter && Util.isDefined(this.component.quickFilterComponent)) {
12544
+ dataToStore['quickFilterActiveColumns'] = this.component.quickFilterComponent.getActiveColumns().join(Codes.ARRAY_INPUT_SEPARATOR);
12545
+ }
12546
+ return dataToStore;
12547
+ }
12548
+ }
12549
+ OGridComponentStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OGridComponentStateService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
12550
+ OGridComponentStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OGridComponentStateService });
12551
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OGridComponentStateService, decorators: [{
12552
+ type: Injectable
12553
+ }] });
12554
+
12555
+ class OListComponentStateClass extends DefaultServiceComponentStateClass {
12556
+ get sortColumns() {
12557
+ return this['sort-columns'];
12558
+ }
12559
+ set sortColumns(value) {
12560
+ this['sort-columns'] = value;
12561
+ }
12562
+ }
12563
+
12564
+ class OListComponentStateService extends AbstractComponentStateService {
12565
+ initialize(component) {
12566
+ this.state = new OListComponentStateClass();
12567
+ super.initialize(component);
12568
+ }
12569
+ initializeState(state) {
12570
+ super.initializeState(state);
12571
+ }
12572
+ getDataToStore() {
12573
+ let dataToStore = Object.assign({}, this.state);
12574
+ dataToStore['query-rows'] = this.component.queryRows;
12575
+ if (!this.component.storePaginationState) {
12576
+ delete dataToStore['queryRecordOffset'];
12577
+ }
12578
+ if (this.component.quickFilter && Util.isDefined(this.component.quickFilterComponent)) {
12579
+ dataToStore['quickFilterActiveColumns'] = this.component.quickFilterComponent.getActiveColumns().join(Codes.ARRAY_INPUT_SEPARATOR);
12580
+ }
12581
+ dataToStore['filter-case-sensitive'] = this.component.isFilterCaseSensitive();
12582
+ dataToStore.selection = this.state.selection;
12583
+ return dataToStore;
12584
+ }
12585
+ refreshSelection() {
12586
+ this.state.selection = this.getSelectionState();
12587
+ }
12588
+ getSelectionState() {
12589
+ const selection = [];
12590
+ if (this.component) {
12591
+ const keys = this.component.getKeys();
12592
+ this.component.getSelectedItems().forEach(item => {
12593
+ const data = {};
12594
+ keys.forEach(key => {
12595
+ data[key] = item[key];
12596
+ });
12597
+ selection.push(data);
12598
+ });
12599
+ }
12600
+ return selection;
12601
+ }
12602
+ }
12603
+ OListComponentStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OListComponentStateService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
12604
+ OListComponentStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OListComponentStateService });
12605
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OListComponentStateService, decorators: [{
12606
+ type: Injectable
12607
+ }] });
12608
+
12609
+ class OTableComponentStateClass extends DefaultServiceComponentStateClass {
12610
+ constructor() {
12611
+ super(...arguments);
12612
+ this['grouped-column-types'] = [];
12613
+ }
12614
+ get filterBuilderValues() {
12615
+ return this['filter-builder-values'];
12616
+ }
12617
+ set filterBuilderValues(value) {
12618
+ this['filter-builder-values'] = value;
12619
+ }
12620
+ get selectColumnVisible() {
12621
+ return this['select-column-visible'];
12622
+ }
12623
+ set selectColumnVisible(value) {
12624
+ this['select-column-visible'] = value;
12625
+ }
12626
+ get quickFilterValue() {
12627
+ return this['filter'];
12628
+ }
12629
+ set quickFilterValue(value) {
12630
+ this['filter'] = value;
12631
+ }
12632
+ get columnsDisplay() {
12633
+ return this['oColumns-display'];
12634
+ }
12635
+ set columnsDisplay(value) {
12636
+ this['oColumns-display'] = value;
12637
+ }
12638
+ getColumnDisplay(oCol) {
12639
+ return (this.columnsDisplay || []).find(col => col.attr === oCol.attr);
12640
+ }
12641
+ get initialConfiguration() {
12642
+ return this['initial-configuration'];
12643
+ }
12644
+ set initialConfiguration(value) {
12645
+ this['initial-configuration'] = value;
12646
+ }
12647
+ get sortColumns() {
12648
+ return this['sort-columns'];
12649
+ }
12650
+ set sortColumns(value) {
12651
+ this['sort-columns'] = value;
12652
+ }
12653
+ get groupedColumnTypes() {
12654
+ return this['grouped-column-types'];
12655
+ }
12656
+ set groupedColumnTypes(value) {
12657
+ this['grouped-column-types'] = value;
12658
+ }
12659
+ get filterColumns() {
12660
+ return this['filter-columns'];
12661
+ }
12662
+ set filterColumns(value) {
12663
+ this['filter-columns'] = value;
12664
+ }
12665
+ get filterColumnActiveByDefault() {
12666
+ return this['filter-column-active-by-default'];
12667
+ }
12668
+ get groupedColumns() {
12669
+ return this['grouped-columns'];
12670
+ }
12671
+ set groupedColumns(value) {
12672
+ this['grouped-columns'] = value;
12673
+ }
12674
+ get columnValueFilters() {
12675
+ return this['column-value-filters'] || [];
12676
+ }
12677
+ set columnValueFilters(value) {
12678
+ this['column-value-filters'] = value;
12679
+ }
12680
+ get storedFilters() {
12681
+ return this['user-stored-filters'] || [];
12682
+ }
12683
+ addStoredFilter(filter) {
12684
+ if (!Util.isDefined(this['user-stored-filters'])) {
12685
+ this['user-stored-filters'] = [];
12686
+ }
12687
+ this.storedFilters.push(filter);
12688
+ }
12689
+ deleteStoredFilter(filterName) {
12690
+ const index = this.storedFilters.findIndex((item) => item.name === filterName);
12691
+ if (index >= 0) {
12692
+ this.storedFilters.splice(index, 1);
12693
+ }
12694
+ }
12695
+ getStoredFilter(filterName) {
12696
+ let result;
12697
+ const filter = this.storedFilters.find((item) => item.name === filterName);
12698
+ if (filter) {
12699
+ result = filter['stored-filter'];
12700
+ }
12701
+ return result;
12702
+ }
12703
+ applyFilter(filterName) {
12704
+ const filter = this.getStoredFilter(filterName);
12705
+ if (filter) {
12706
+ this.columnValueFilters = filter['column-value-filters'];
12707
+ this.quickFilterValue = filter['filter'];
12708
+ this.filterCaseSensitive = filter['filter-case-sensitive'];
12709
+ this.filterBuilderValues = filter['filter-builder-values'];
12710
+ this.oColumns = filter['oColumns'];
12711
+ }
12712
+ }
12713
+ get storedConfigurations() {
12714
+ return this['user-stored-configurations'] || [];
12715
+ }
12716
+ addStoredConfiguration(configuration) {
12717
+ if (!Util.isDefined(this['user-stored-configurations'])) {
12718
+ this['user-stored-configurations'] = [];
12719
+ }
12720
+ this.storedConfigurations.push(configuration);
12721
+ }
12722
+ deleteStoredConfiguration(configurationName) {
12723
+ const index = this.storedConfigurations.findIndex((item) => item.name === configurationName);
12724
+ if (index >= 0) {
12725
+ this.storedConfigurations.splice(index, 1);
12726
+ }
12727
+ }
12728
+ getStoredConfiguration(configurationName) {
12729
+ return this.storedConfigurations.find((item) => item.name === configurationName);
12730
+ }
12731
+ applyConfiguration(configurationName) {
12732
+ const configuration = this.getStoredConfiguration(configurationName);
12733
+ if (configuration) {
12734
+ const properties = configuration['stored-properties'] || [];
12735
+ const conf = configuration['stored-configuration'];
12736
+ this.copyPropertiesFromConfiguration(properties, conf);
12737
+ }
12738
+ }
12739
+ reset(pageable) {
12740
+ const result = {
12741
+ 'user-stored-filters': this.storedFilters,
12742
+ 'user-stored-configurations': this.storedConfigurations
12743
+ };
12744
+ if (pageable) {
12745
+ result['totalQueryRecordsNumber'] = this.totalQueryRecordsNumber;
12746
+ }
12747
+ result['currentPage'] = 0;
12748
+ Object.assign(this, {});
12749
+ Object.assign(this, result);
12750
+ }
12751
+ copyPropertiesFromConfiguration(properties, configuration) {
12752
+ properties.forEach(property => {
12753
+ switch (property) {
12754
+ case 'sort-columns':
12755
+ this.sortColumns = configuration['sort-columns'];
12756
+ break;
12757
+ case 'oColumns-display':
12758
+ this.columnsDisplay = configuration['oColumns-display'];
12759
+ this.selectColumnVisible = configuration['select-column-visible'];
12760
+ break;
12761
+ case 'quick-filter':
12762
+ case 'columns-filter':
12763
+ this.columnValueFilters = configuration['column-value-filters'];
12764
+ break;
12765
+ case 'grouped-columns':
12766
+ this.groupedColumns = configuration['grouped-columns'];
12767
+ break;
12768
+ case 'page':
12769
+ this.currentPage = configuration['currentPage'];
12770
+ this.totalQueryRecordsNumber = configuration['totalQueryRecordsNumber'];
12771
+ this.queryRecordOffset = configuration['queryRecordOffset'];
12772
+ this.queryRows = configuration['query-rows'];
12773
+ break;
12774
+ case 'filter-builder':
12775
+ this.filterBuilderValues = configuration['filter-builder'];
12776
+ break;
12777
+ }
12778
+ });
12779
+ }
12780
+ }
12781
+
12782
+ class OTableComponentStateService extends AbstractComponentStateService {
12783
+ initialize(component) {
12784
+ this.state = new OTableComponentStateClass();
12785
+ super.initialize(component);
12786
+ }
12787
+ initializeState(state) {
12788
+ super.initializeState(state);
12789
+ const initialConfigurationRawObj = state.initialConfiguration || {};
12790
+ state.initialConfiguration = new OTableComponentStateClass();
12791
+ state.initialConfiguration.setData(initialConfigurationRawObj);
12792
+ }
12793
+ refreshSelection() {
12794
+ this.state.selection = this.getSelectionState();
12795
+ }
12796
+ getDataToStore() {
12797
+ const dataToStore = {};
12798
+ const propertiesKeys = [
12799
+ 'sort-columns',
12800
+ 'oColumns-display',
12801
+ 'columns-filter',
12802
+ 'quick-filter',
12803
+ 'page',
12804
+ 'selection',
12805
+ 'initial-configuration',
12806
+ 'filter-columns',
12807
+ 'filter-column-active',
12808
+ 'grouped-columns',
12809
+ 'grouped-column-types',
12810
+ 'user-stored-filters',
12811
+ 'user-stored-configurations'
12812
+ ];
12813
+ Object.assign(dataToStore, this.getTablePropertiesToStore(propertiesKeys));
12814
+ return dataToStore;
12815
+ }
12816
+ storeFilter(filter) {
12817
+ let newFilter = { name: filter.name, description: filter.description };
12818
+ const storedFilter = {};
12819
+ Object.assign(storedFilter, this.getColumnFiltersState());
12820
+ Object.assign(storedFilter, this.getColumnsQuickFilterState());
12821
+ Object.assign(storedFilter, this.getFilterBuilderState());
12822
+ newFilter['stored-filter'] = storedFilter;
12823
+ this.state.addStoredFilter(newFilter);
12824
+ }
12825
+ storeConfiguration(configurationAgs, tableProperties) {
12826
+ const newConfiguration = {};
12827
+ this.component.storePaginationState = true;
12828
+ const storedConfiguration = this.getTablePropertiesToStore(tableProperties);
12829
+ this.component.storePaginationState = false;
12830
+ newConfiguration['stored-configuration'] = storedConfiguration;
12831
+ Object.assign(newConfiguration, configurationAgs);
12832
+ newConfiguration['stored-properties'] = tableProperties;
12833
+ this.state.addStoredConfiguration(newConfiguration);
12834
+ }
12835
+ getTablePropertiesToStore(properties) {
12836
+ const result = {};
12837
+ properties.forEach(prop => {
12838
+ Object.assign(result, this.getTablePropertyToStore(prop));
12839
+ });
12840
+ return result;
12841
+ }
12842
+ getTablePropertyToStore(property) {
12843
+ let result = {};
12844
+ switch (property) {
12845
+ case 'sort-columns':
12846
+ result = this.getSortState();
12847
+ break;
12848
+ case 'oColumns-display':
12849
+ result = this.getColumnsDisplayState();
12850
+ break;
12851
+ case 'quick-filter':
12852
+ result = this.getColumnsQuickFilterState();
12853
+ break;
12854
+ case 'columns-filter':
12855
+ result = this.getColumnFiltersState();
12856
+ break;
12857
+ case 'page':
12858
+ result = this.getPageState();
12859
+ break;
12860
+ case 'selection':
12861
+ result['selection'] = this.getSelectionState();
12862
+ break;
12863
+ case 'initial-configuration':
12864
+ result = this.getInitialConfigurationState();
12865
+ break;
12866
+ case 'filter-column-active':
12867
+ result['filter-column-active'] = this.component.isColumnFiltersActive;
12868
+ break;
12869
+ case 'filter-columns':
12870
+ result['filter-columns'] = this.component.filterColumns;
12871
+ break;
12872
+ case 'grouped-columns':
12873
+ result['grouped-columns'] = this.component.groupedColumnsArray;
12874
+ break;
12875
+ case 'grouped-column-types':
12876
+ result['grouped-column-types'] = this.component.groupedColumnTypes;
12877
+ break;
12878
+ case 'user-stored-filters':
12879
+ result['user-stored-filters'] = this.state.storedFilters;
12880
+ break;
12881
+ case 'user-stored-configurations':
12882
+ result['user-stored-configurations'] = this.state.storedConfigurations;
12883
+ break;
12884
+ case 'filter-builder':
12885
+ if (this.component.filterBuilder) {
12886
+ result['filter-builder'] = this.component.filterBuilder.getFilterValues();
12887
+ }
12888
+ break;
12889
+ }
12890
+ return result;
12891
+ }
12892
+ getColumnsDisplayState() {
12893
+ const oColumnsData = [];
12894
+ this.component.oTableOptions.columns.forEach((oCol) => {
12895
+ oColumnsData.push({
12896
+ attr: oCol.attr,
12897
+ visible: oCol.visible,
12898
+ width: oCol.getWidthToStore()
12899
+ });
12900
+ });
12901
+ return {
12902
+ 'oColumns-display': oColumnsData,
12903
+ 'select-column-visible': this.component.oTableOptions.selectColumn.visible
12904
+ };
12905
+ }
12906
+ getColumnsQuickFilterState() {
12907
+ const tableOptions = this.component.oTableOptions;
12908
+ const oColumnsData = [];
12909
+ tableOptions.columns.forEach((oCol) => {
12910
+ oColumnsData.push({
12911
+ attr: oCol.attr,
12912
+ searchable: oCol.searchable,
12913
+ searching: oCol.searching
12914
+ });
12915
+ });
12916
+ return {
12917
+ 'oColumns': oColumnsData,
12918
+ 'filter-case-sensitive': tableOptions.filterCaseSensitive,
12919
+ 'filter': this.component.oTableQuickFilterComponent ? this.component.oTableQuickFilterComponent.value : ''
12920
+ };
12921
+ }
12922
+ getFilterBuilderState() {
12923
+ const result = {};
12924
+ if (this.component.filterBuilder) {
12925
+ let filterBuilder = this.component.filterBuilder.getFilterValues();
12926
+ if (!Util.isObjectEmpty(filterBuilder)) {
12927
+ result['filter-builder-values'] = filterBuilder;
12928
+ }
12929
+ }
12930
+ return result;
12931
+ }
12932
+ getColumnFiltersState() {
12933
+ const result = {};
12934
+ if (this.component.dataSource) {
12935
+ const columnValueFilters = this.component.dataSource.getColumnValueFilters();
12936
+ if (columnValueFilters.length > 0) {
12937
+ result['column-value-filters'] = columnValueFilters;
12938
+ }
12939
+ }
12940
+ return result;
12941
+ }
12942
+ getPageState() {
12943
+ const result = {
12944
+ 'query-rows': this.component.matpaginator ? this.component.matpaginator.pageSize : ''
12945
+ };
12946
+ if (this.component.currentPage > 0 && this.component.storePaginationState) {
12947
+ result.currentPage = this.component.currentPage;
12948
+ }
12949
+ if (this.component.pageable && this.component.storePaginationState) {
12950
+ result.totalQueryRecordsNumber = this.component.state.totalQueryRecordsNumber;
12951
+ result.queryRecordOffset = Math.max((this.component.state.queryRecordOffset - this.component.dataSource.renderedData.length), (this.component.state.queryRecordOffset - this.component.queryRows));
12952
+ }
12953
+ return result;
12954
+ }
12955
+ getSelectionState() {
12956
+ const selection = [];
12957
+ if (this.component && this.component.keepSelectedItems) {
12958
+ const tableKeys = this.component.getKeys();
12959
+ this.component.getSelectedItems().forEach(item => {
12960
+ const data = {};
12961
+ tableKeys.forEach(key => {
12962
+ data[key] = item[key];
12963
+ });
12964
+ selection.push(data);
12965
+ });
12966
+ }
12967
+ return selection;
12968
+ }
12969
+ getInitialConfigurationState() {
12970
+ const oColumnsData = [];
12971
+ Util.parseArray(this.component.visibleColumns, true).forEach((columnAttr) => {
12972
+ let oCol = this.component.getOColumn(columnAttr);
12973
+ oColumnsData.push({
12974
+ attr: oCol.attr,
12975
+ visible: true,
12976
+ width: oCol.definition ? oCol.definition.originalWidth : undefined
12977
+ });
12978
+ });
12979
+ return {
12980
+ 'initial-configuration': {
12981
+ 'oColumns-display': oColumnsData,
12982
+ 'sort-columns': this.component.sortColumns,
12983
+ 'select-column-visible': this.component.oTableOptions.selectColumn.visible,
12984
+ 'filter-case-sensitive': this.component.filterCaseSensitive,
12985
+ 'query-rows': this.component.originalQueryRows,
12986
+ 'filter-column-active-by-default': this.component.filterColumnActiveByDefault,
12987
+ 'filter-columns': this.component.originalFilterColumns,
12988
+ 'grouped-columns': this.component.originalGroupedColumnsArray
12989
+ }
12990
+ };
12991
+ }
12992
+ getSortState() {
12993
+ const sortColumns = [];
12994
+ this.component.sort.getSortColumns().forEach(sortData => {
12995
+ sortColumns.push(sortData.id + Codes.COLUMNS_ALIAS_SEPARATOR + sortData.direction);
12996
+ });
12997
+ return {
12998
+ 'sort-columns': sortColumns.join(Codes.ARRAY_INPUT_SEPARATOR)
12999
+ };
13000
+ }
13001
+ }
13002
+ OTableComponentStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableComponentStateService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
13003
+ OTableComponentStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableComponentStateService });
13004
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableComponentStateService, decorators: [{
13005
+ type: Injectable
13006
+ }] });
13007
+
13008
+ class OTranslateHttpLoader extends TranslateHttpLoader {
13009
+ constructor(httpClient, prefix = OTranslateService.ASSETS_PATH, suffix = OTranslateService.ASSETS_EXTENSION, injector) {
13010
+ super(httpClient, prefix, suffix);
13011
+ this.injector = injector;
13012
+ this.appConfig = this.injector.get(AppConfig);
13013
+ this.httpClient = httpClient;
13014
+ }
13015
+ getAssetsPath() {
13016
+ return this.prefix;
13017
+ }
13018
+ getAssetsExtension() {
13019
+ return this.suffix;
13020
+ }
13021
+ getLocalTranslation(lang) {
13022
+ let innerObserver;
13023
+ const dataObservable = new Observable(observer => innerObserver = observer).pipe(share());
13024
+ super.getTranslation(lang)
13025
+ .subscribe((res) => {
13026
+ innerObserver.next(res);
13027
+ innerObserver.complete();
13028
+ }, error => {
13029
+ innerObserver.next(undefined);
13030
+ }, () => innerObserver.complete());
13031
+ return dataObservable;
13032
+ }
13033
+ getTranslation(lang) {
13034
+ const translationOrigins = [];
13035
+ translationOrigins.push(this.getLocalTranslation(lang));
13036
+ if (this.appConfig.useRemoteBundle()) {
13037
+ translationOrigins.push(this.getRemoteBundle(lang));
13038
+ }
13039
+ let innerObserver;
13040
+ const dataObservable = new Observable(observer => innerObserver = observer).pipe(share());
13041
+ combineLatest(translationOrigins).subscribe((res) => {
13042
+ const staticBundle = res[0] || {};
13043
+ const remoteBundle = res[1] || {};
13044
+ const allBundles = Object.assign(staticBundle, remoteBundle);
13045
+ innerObserver.next(allBundles);
13046
+ });
13047
+ return dataObservable;
13048
+ }
13049
+ getRemoteBundle(lang) {
13050
+ const bundleEndpoint = this.appConfig.getBundleEndpoint();
13051
+ if (!bundleEndpoint) {
13052
+ return of([]);
13053
+ }
13054
+ const url = bundleEndpoint + '?lang=' + lang;
13055
+ return this.httpClient.get(url).pipe(map((resp) => {
13056
+ if (resp.code === Codes.ONTIMIZE_SUCCESSFUL_CODE) {
13057
+ return this.parseBundleResponse(resp.data);
13058
+ }
13059
+ return resp;
13060
+ }), catchError(err => {
13061
+ console.log('Remote Bundle service is not available', err);
13062
+ return of([]);
13063
+ }));
13064
+ }
13065
+ parseBundleResponse(data) {
13066
+ const result = {};
13067
+ if (data) {
13068
+ data.forEach((item) => {
13069
+ result[item[OTranslateHttpLoader.BUNDLE_KEY]] = item[OTranslateHttpLoader.BUNDLE_VALUE];
13070
+ });
13071
+ }
13072
+ return result;
13073
+ }
13074
+ }
13075
+ OTranslateHttpLoader.BUNDLE_KEY = 'key';
13076
+ OTranslateHttpLoader.BUNDLE_VALUE = 'value';
13077
+
13078
+ class OTranslateParser extends TranslateDefaultParser {
13079
+ constructor() {
13080
+ super(...arguments);
13081
+ this.templateMatcher = /{\s?([0-9][^{}\s]*)\s?}/g;
13082
+ }
13083
+ interpolate(expr, params) {
13084
+ if (typeof expr !== 'string' || !params) {
13085
+ return expr;
13086
+ }
13087
+ return expr.replace(this.templateMatcher, (substring, index) => {
13088
+ const argValue = Util.isDefined(params[index]) ? params[index] : '';
13089
+ return !isNaN(parseInt(index, 10)) ? argValue : substring;
13090
+ });
13091
+ }
13092
+ }
13093
+ OTranslateParser.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTranslateParser, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
13094
+ OTranslateParser.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTranslateParser });
13095
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTranslateParser, decorators: [{
13096
+ type: Injectable
13097
+ }] });
13098
+
13099
+ class AppearanceService {
13100
+ constructor(injector) {
13101
+ this.injector = injector;
13102
+ this.darkThemeClass = 'o-dark';
13103
+ this.isDarkModeSubject = new BehaviorSubject(false);
13104
+ this.isDarkMode$ = this.isDarkModeSubject.asObservable();
13105
+ this.localStorageService = this.injector.get(LocalStorageService);
13106
+ this._document = inject(DOCUMENT);
13107
+ const config = this.localStorageService.getStoredData();
13108
+ this.isDarkMode$.subscribe(x => this.updateThemeClass(x));
13109
+ if (config && config["theme"] && typeof config["theme"].isDark === 'boolean') {
13110
+ const isDark = config["theme"].isDark;
13111
+ this.isDarkModeSubject.next(isDark);
13112
+ }
13113
+ }
13114
+ setDarkMode(isDarkMode) {
13115
+ const config = this.localStorageService.getStoredData();
13116
+ if (config) {
13117
+ config["theme"] = config["theme"] || {};
13118
+ config["theme"].isDark = isDarkMode;
13119
+ }
13120
+ this.localStorageService.setLocalStorage(config);
13121
+ this.isDarkModeSubject.next(isDarkMode);
13122
+ }
13123
+ isDarkMode() {
13124
+ return this.isDarkModeSubject.value;
13125
+ }
13126
+ updateThemeClass(isDark) {
13127
+ if (isDark) {
13128
+ this._document.body.classList.add(this.darkThemeClass);
13129
+ }
13130
+ else {
13131
+ this._document.body.classList.remove(this.darkThemeClass);
13132
+ }
13133
+ }
13134
+ }
13135
+ AppearanceService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AppearanceService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
13136
+ AppearanceService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AppearanceService, providedIn: 'root' });
13137
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AppearanceService, decorators: [{
13138
+ type: Injectable,
13139
+ args: [{
13140
+ providedIn: 'root',
13141
+ }]
13142
+ }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
13143
+
13144
+ class CurrencyUtil {
13145
+ static getCurrencyCode(language) {
13146
+ const code = this.languageToCurrencyCode[language];
13147
+ if (code) {
13148
+ return code;
13149
+ }
13150
+ else {
13151
+ return 'EUR';
13152
+ }
13153
+ }
13154
+ static getCurrencyCodeFromSymbol(symbol) {
13155
+ const currencyCode = Object.keys(this.currencyCodeToSymbol).find(code => this.currencyCodeToSymbol[code] === symbol);
13156
+ return currencyCode;
13157
+ }
13158
+ }
13159
+ CurrencyUtil.languageToCurrencyCode = {
13160
+ 'es': 'EUR',
13161
+ 'en': 'USD',
13162
+ 'pt': 'BRL',
13163
+ 'fr': 'EUR',
13164
+ 'de': 'EUR',
13165
+ 'it': 'EUR',
13166
+ 'ja': 'JPY',
13167
+ 'zh': 'CNY',
13168
+ 'ru': 'RUB',
13169
+ 'ar': 'AED',
13170
+ 'cr': 'CRC',
13171
+ 'ng': 'NGN',
13172
+ 'ph': 'PHP',
13173
+ 'pl': 'PLN',
13174
+ 'py': 'PYG',
13175
+ 'th': 'THB',
13176
+ 'ua': 'UAH',
13177
+ 'vn': 'VND',
13178
+ };
13179
+ CurrencyUtil.currencyCodeToSymbol = {
13180
+ EUR: '€',
13181
+ USD: '$',
13182
+ BRL: 'R$',
13183
+ JPY: '¥',
13184
+ CNY: '¥',
13185
+ RUB: '₽',
13186
+ AED: 'د.إ',
13187
+ CRC: '₡',
13188
+ NGN: '₦',
13189
+ PHP: '₱',
13190
+ PLN: 'zł',
13191
+ PYG: '₲',
13192
+ THB: '฿',
13193
+ UAH: '₴',
13194
+ VND: '₫',
13195
+ };
13196
+
12135
13197
  const DEFAULT_INPUTS_O_BUTTON = [
12136
13198
  'oattr: attr',
12137
13199
  'olabel: label',
@@ -12148,17 +13210,26 @@ const DEFAULT_OUTPUTS_O_BUTTON = [
12148
13210
  'click'
12149
13211
  ];
12150
13212
  class OButtonComponent {
12151
- constructor() {
13213
+ constructor(injector, actRoute) {
13214
+ this.injector = injector;
13215
+ this.actRoute = actRoute;
12152
13216
  this.iconPosition = Codes.ICON_POSITION_LEFT;
12153
13217
  this.enabled = true;
13218
+ this.visible = true;
12154
13219
  this.onClick = new EventEmitter();
12155
13220
  this.click = new EventEmitter();
12156
13221
  this.otype = OButtonComponent.DEFAULT_TYPE;
13222
+ this.permissionsService = this.injector.get(PermissionsService);
12157
13223
  }
12158
13224
  ngOnInit() {
12159
13225
  if (this.otype) {
12160
13226
  this.otype = this.otype.toUpperCase();
12161
13227
  }
13228
+ this.permissions = this.permissionsService.getOButtonPermissions(this.oattr, this.actRoute);
13229
+ if (Util.isDefined(this.permissions)) {
13230
+ this.enabled = this.permissions.enabled;
13231
+ this.visible = this.permissions.visible;
13232
+ }
12162
13233
  }
12163
13234
  onButtonClick(event) {
12164
13235
  event.stopPropagation();
@@ -12191,10 +13262,13 @@ class OButtonComponent {
12191
13262
  isIconButton() {
12192
13263
  return this.otype === 'ICON';
12193
13264
  }
13265
+ isVisible() {
13266
+ return this.visible;
13267
+ }
12194
13268
  }
12195
13269
  OButtonComponent.DEFAULT_TYPE = 'STROKED';
12196
- OButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12197
- OButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OButtonComponent, selector: "o-button", inputs: { oattr: ["attr", "oattr"], olabel: ["label", "olabel"], otype: ["type", "otype"], icon: "icon", svgIcon: ["svg-icon", "svgIcon"], iconPosition: ["icon-position", "iconPosition"], image: "image", enabled: "enabled", color: "color" }, outputs: { onClick: "onClick", click: "click" }, host: { properties: { "class.o-button": "true", "class.o-button-icon-position-top": "iconPosition===\"top\"", "class.o-button-icon-position-bottom": "iconPosition===\"bottom\"" } }, ngImport: i0, template: "<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isBasic()\" mat-button [class.mat-icon-button]=\"needsIconButtonClass\"\n [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isRaised()\" mat-raised-button class=\"mat-raised-button\"\n [class.mat-icon-button]=\"needsIconButtonClass\" [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isStroked()\" mat-stroked-button [class.mat-icon-button]=\"needsIconButtonClass\"\n [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isFlat()\" mat-flat-button [class.mat-icon-button]=\"needsIconButtonClass\"\n [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isIconButton()\" mat-icon-button [class.mat-icon-button]=\"needsIconButtonClass\"\n [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isFab()\" mat-fab [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isMiniFab()\" mat-mini-fab [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n\n<ng-template #iconTemplate>\n <img src=\"{{ image }}\" class=\"o-button-image\" *ngIf=\"image!=undefined\" alt=\"button image\" />\n <mat-icon class=\"material-icons o-button-icon\" *ngIf=\"icon!==undefined\" style=\"vertical-align:middle\">{{ icon }}\n </mat-icon>\n <mat-icon class=\"material-icons o-button-icon\" *ngIf=\"svgIcon!==undefined\" style=\"vertical-align:middle\" [svgIcon]=\"svgIcon\"></mat-icon>\n</ng-template>\n\n<ng-template #buttonTemplate>\n\n <ng-container *ngIf=\"iconPosition==='left' || iconPosition==='top' \">\n <ng-container *ngTemplateOutlet=\"iconTemplate\"></ng-container>\n </ng-container>\n\n <br *ngIf=\"iconPosition==='top'\" />\n\n {{ olabel | oTranslate }}\n\n <br *ngIf=\"iconPosition==='bottom'\" />\n\n <ng-container *ngIf=\"iconPosition==='right' || iconPosition==='bottom'\">\n <ng-container *ngTemplateOutlet=\"iconTemplate\"></ng-container>\n </ng-container>\n</ng-template>\n", styles: [".o-button{display:inline-block;pointer-events:none}.o-button.o-button-icon-position-bottom .mat-mdc-button,.o-button.o-button-icon-position-bottom .mat-mdc-unelevated-button,.o-button.o-button-icon-position-bottom .mat-mdc-raised-button,.o-button.o-button-icon-position-bottom .mat-mdc-outlined-button,.o-button.o-button-icon-position-top .mat-mdc-button,.o-button.o-button-icon-position-top .mat-mdc-unelevated-button,.o-button.o-button-icon-position-top .mat-mdc-raised-button,.o-button.o-button-icon-position-top .mat-mdc-outlined-button{height:auto;line-height:normal}.o-button button{pointer-events:auto}.o-button button.mat-mdc-button,.o-button button.mat-mdc-unelevated-button,.o-button button.mat-mdc-raised-button,.o-button button.mat-mdc-outlined-button{width:100%}.o-button button *{pointer-events:none}.o-button button .o-button-image{max-height:24px;vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatMiniFabButton, selector: "button[mat-mini-fab]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatFabButton, selector: "button[mat-fab]", inputs: ["disabled", "disableRipple", "color", "tabIndex", "extended"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: OTranslatePipe, name: "oTranslate" }], encapsulation: i0.ViewEncapsulation.None });
13270
+ OButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OButtonComponent, deps: [{ token: i0.Injector }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
13271
+ OButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OButtonComponent, selector: "o-button", inputs: { oattr: ["attr", "oattr"], olabel: ["label", "olabel"], otype: ["type", "otype"], icon: "icon", svgIcon: ["svg-icon", "svgIcon"], iconPosition: ["icon-position", "iconPosition"], image: "image", enabled: "enabled", color: "color" }, outputs: { onClick: "onClick", click: "click" }, host: { properties: { "class.o-button": "true", "class.o-button-icon-position-top": "iconPosition===\"top\"", "class.o-button-icon-position-bottom": "iconPosition===\"bottom\"" } }, ngImport: i0, template: "<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isBasic() && isVisible()\" mat-button [class.mat-icon-button]=\"needsIconButtonClass\"\n [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isRaised() && isVisible()\" mat-raised-button class=\"mat-raised-button\"\n [class.mat-icon-button]=\"needsIconButtonClass\" [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isStroked() && isVisible()\" mat-stroked-button\n [class.mat-icon-button]=\"needsIconButtonClass\" [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isFlat() && isVisible()\" mat-flat-button [class.mat-icon-button]=\"needsIconButtonClass\"\n [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isIconButton() && isVisible()\" mat-icon-button\n [class.mat-icon-button]=\"needsIconButtonClass\" [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isFab() && isVisible()\" mat-fab [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isMiniFab() && isVisible()\" mat-mini-fab [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n\n<ng-template #iconTemplate>\n <img src=\"{{ image }}\" class=\"o-button-image\" *ngIf=\"image!=undefined\" alt=\"button image\" />\n <mat-icon class=\"material-icons o-button-icon\" *ngIf=\"icon!==undefined\" style=\"vertical-align:middle\">{{ icon }}\n </mat-icon>\n <mat-icon class=\"material-icons o-button-icon\" *ngIf=\"svgIcon!==undefined\" style=\"vertical-align:middle\" [svgIcon]=\"svgIcon\"></mat-icon>\n</ng-template>\n\n<ng-template #buttonTemplate>\n\n <ng-container *ngIf=\"iconPosition==='left' || iconPosition==='top' \">\n <ng-container *ngTemplateOutlet=\"iconTemplate\"></ng-container>\n </ng-container>\n\n <br *ngIf=\"iconPosition==='top'\" />\n\n {{ olabel | oTranslate }}\n\n <br *ngIf=\"iconPosition==='bottom'\" />\n\n <ng-container *ngIf=\"iconPosition==='right' || iconPosition==='bottom'\">\n <ng-container *ngTemplateOutlet=\"iconTemplate\"></ng-container>\n </ng-container>\n</ng-template>\n", styles: [".o-button{display:inline-block;pointer-events:none}.o-button.o-button-icon-position-bottom .mat-mdc-button,.o-button.o-button-icon-position-bottom .mat-mdc-unelevated-button,.o-button.o-button-icon-position-bottom .mat-mdc-raised-button,.o-button.o-button-icon-position-bottom .mat-mdc-outlined-button,.o-button.o-button-icon-position-top .mat-mdc-button,.o-button.o-button-icon-position-top .mat-mdc-unelevated-button,.o-button.o-button-icon-position-top .mat-mdc-raised-button,.o-button.o-button-icon-position-top .mat-mdc-outlined-button{height:auto;line-height:normal}.o-button button{pointer-events:auto}.o-button button.mat-mdc-button,.o-button button.mat-mdc-unelevated-button,.o-button button.mat-mdc-raised-button,.o-button button.mat-mdc-outlined-button{width:100%}.o-button button *{pointer-events:none}.o-button button .o-button-image{max-height:24px;vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatMiniFabButton, selector: "button[mat-mini-fab]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatFabButton, selector: "button[mat-fab]", inputs: ["disabled", "disableRipple", "color", "tabIndex", "extended"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: OTranslatePipe, name: "oTranslate" }], encapsulation: i0.ViewEncapsulation.None });
12198
13272
  __decorate([
12199
13273
  BooleanInputConverter(),
12200
13274
  __metadata("design:type", Boolean)
@@ -12205,8 +13279,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
12205
13279
  '[class.o-button]': 'true',
12206
13280
  '[class.o-button-icon-position-top]': 'iconPosition==="top"',
12207
13281
  '[class.o-button-icon-position-bottom]': 'iconPosition==="bottom"'
12208
- }, template: "<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isBasic()\" mat-button [class.mat-icon-button]=\"needsIconButtonClass\"\n [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isRaised()\" mat-raised-button class=\"mat-raised-button\"\n [class.mat-icon-button]=\"needsIconButtonClass\" [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isStroked()\" mat-stroked-button [class.mat-icon-button]=\"needsIconButtonClass\"\n [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isFlat()\" mat-flat-button [class.mat-icon-button]=\"needsIconButtonClass\"\n [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isIconButton()\" mat-icon-button [class.mat-icon-button]=\"needsIconButtonClass\"\n [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isFab()\" mat-fab [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isMiniFab()\" mat-mini-fab [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n\n<ng-template #iconTemplate>\n <img src=\"{{ image }}\" class=\"o-button-image\" *ngIf=\"image!=undefined\" alt=\"button image\" />\n <mat-icon class=\"material-icons o-button-icon\" *ngIf=\"icon!==undefined\" style=\"vertical-align:middle\">{{ icon }}\n </mat-icon>\n <mat-icon class=\"material-icons o-button-icon\" *ngIf=\"svgIcon!==undefined\" style=\"vertical-align:middle\" [svgIcon]=\"svgIcon\"></mat-icon>\n</ng-template>\n\n<ng-template #buttonTemplate>\n\n <ng-container *ngIf=\"iconPosition==='left' || iconPosition==='top' \">\n <ng-container *ngTemplateOutlet=\"iconTemplate\"></ng-container>\n </ng-container>\n\n <br *ngIf=\"iconPosition==='top'\" />\n\n {{ olabel | oTranslate }}\n\n <br *ngIf=\"iconPosition==='bottom'\" />\n\n <ng-container *ngIf=\"iconPosition==='right' || iconPosition==='bottom'\">\n <ng-container *ngTemplateOutlet=\"iconTemplate\"></ng-container>\n </ng-container>\n</ng-template>\n", styles: [".o-button{display:inline-block;pointer-events:none}.o-button.o-button-icon-position-bottom .mat-mdc-button,.o-button.o-button-icon-position-bottom .mat-mdc-unelevated-button,.o-button.o-button-icon-position-bottom .mat-mdc-raised-button,.o-button.o-button-icon-position-bottom .mat-mdc-outlined-button,.o-button.o-button-icon-position-top .mat-mdc-button,.o-button.o-button-icon-position-top .mat-mdc-unelevated-button,.o-button.o-button-icon-position-top .mat-mdc-raised-button,.o-button.o-button-icon-position-top .mat-mdc-outlined-button{height:auto;line-height:normal}.o-button button{pointer-events:auto}.o-button button.mat-mdc-button,.o-button button.mat-mdc-unelevated-button,.o-button button.mat-mdc-raised-button,.o-button button.mat-mdc-outlined-button{width:100%}.o-button button *{pointer-events:none}.o-button button .o-button-image{max-height:24px;vertical-align:middle}\n"] }]
12209
- }], ctorParameters: function () { return []; }, propDecorators: { enabled: [] } });
13282
+ }, template: "<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isBasic() && isVisible()\" mat-button [class.mat-icon-button]=\"needsIconButtonClass\"\n [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isRaised() && isVisible()\" mat-raised-button class=\"mat-raised-button\"\n [class.mat-icon-button]=\"needsIconButtonClass\" [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isStroked() && isVisible()\" mat-stroked-button\n [class.mat-icon-button]=\"needsIconButtonClass\" [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isFlat() && isVisible()\" mat-flat-button [class.mat-icon-button]=\"needsIconButtonClass\"\n [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isIconButton() && isVisible()\" mat-icon-button\n [class.mat-icon-button]=\"needsIconButtonClass\" [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isFab() && isVisible()\" mat-fab [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n<button type=\"button\" (click)=\"onButtonClick($event)\" *ngIf=\"isMiniFab() && isVisible()\" mat-mini-fab [disabled]=\"!enabled\" [color]=\"color\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n</button>\n\n\n<ng-template #iconTemplate>\n <img src=\"{{ image }}\" class=\"o-button-image\" *ngIf=\"image!=undefined\" alt=\"button image\" />\n <mat-icon class=\"material-icons o-button-icon\" *ngIf=\"icon!==undefined\" style=\"vertical-align:middle\">{{ icon }}\n </mat-icon>\n <mat-icon class=\"material-icons o-button-icon\" *ngIf=\"svgIcon!==undefined\" style=\"vertical-align:middle\" [svgIcon]=\"svgIcon\"></mat-icon>\n</ng-template>\n\n<ng-template #buttonTemplate>\n\n <ng-container *ngIf=\"iconPosition==='left' || iconPosition==='top' \">\n <ng-container *ngTemplateOutlet=\"iconTemplate\"></ng-container>\n </ng-container>\n\n <br *ngIf=\"iconPosition==='top'\" />\n\n {{ olabel | oTranslate }}\n\n <br *ngIf=\"iconPosition==='bottom'\" />\n\n <ng-container *ngIf=\"iconPosition==='right' || iconPosition==='bottom'\">\n <ng-container *ngTemplateOutlet=\"iconTemplate\"></ng-container>\n </ng-container>\n</ng-template>\n", styles: [".o-button{display:inline-block;pointer-events:none}.o-button.o-button-icon-position-bottom .mat-mdc-button,.o-button.o-button-icon-position-bottom .mat-mdc-unelevated-button,.o-button.o-button-icon-position-bottom .mat-mdc-raised-button,.o-button.o-button-icon-position-bottom .mat-mdc-outlined-button,.o-button.o-button-icon-position-top .mat-mdc-button,.o-button.o-button-icon-position-top .mat-mdc-unelevated-button,.o-button.o-button-icon-position-top .mat-mdc-raised-button,.o-button.o-button-icon-position-top .mat-mdc-outlined-button{height:auto;line-height:normal}.o-button button{pointer-events:auto}.o-button button.mat-mdc-button,.o-button button.mat-mdc-unelevated-button,.o-button button.mat-mdc-raised-button,.o-button button.mat-mdc-outlined-button{width:100%}.o-button button *{pointer-events:none}.o-button button .o-button-image{max-height:24px;vertical-align:middle}\n"] }]
13283
+ }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.ActivatedRoute }]; }, propDecorators: { enabled: [] } });
12210
13284
 
12211
13285
  class OButtonModule {
12212
13286
  }
@@ -13934,119 +15008,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
13934
15008
  args: ['mouseenter']
13935
15009
  }] } });
13936
15010
 
13937
- class OGridComponentStateClass extends DefaultServiceComponentStateClass {
13938
- get sortColumn() {
13939
- return this['sort-column'];
13940
- }
13941
- set sortColumn(value) {
13942
- this['sort-column'] = value;
13943
- }
13944
- }
13945
-
13946
- class OGridComponentStateService extends AbstractComponentStateService {
13947
- initialize(component) {
13948
- this.state = new OGridComponentStateClass();
13949
- super.initialize(component);
13950
- }
13951
- initializeState(state) {
13952
- super.initializeState(state);
13953
- }
13954
- getDataToStore() {
13955
- const dataToStore = Object.assign({}, this.state);
13956
- dataToStore['query-rows'] = this.component.queryRows;
13957
- dataToStore['currentPage'] = this.component.currentPage;
13958
- if (this.component.storePaginationState) {
13959
- dataToStore['queryRecordOffset'] = Math.max((this.state.queryRecordOffset - this.component.dataArray.length), (this.state.queryRecordOffset - this.component.queryRows));
13960
- }
13961
- else {
13962
- delete dataToStore['queryRecordOffset'];
13963
- }
13964
- if (Util.isDefined(this.component.sortColumnOrder)) {
13965
- dataToStore['sort-column'] = this.component.sortColumnOrder.columnName + Codes.COLUMNS_ALIAS_SEPARATOR +
13966
- (this.component.sortColumnOrder.ascendent ? Codes.ASC_SORT : Codes.DESC_SORT);
13967
- }
13968
- dataToStore['filter-case-sensitive'] = this.component.isFilterCaseSensitive();
13969
- if (this.component.quickFilter && Util.isDefined(this.component.quickFilterComponent)) {
13970
- dataToStore['quickFilterActiveColumns'] = this.component.quickFilterComponent.getActiveColumns().join(Codes.ARRAY_INPUT_SEPARATOR);
13971
- }
13972
- return dataToStore;
13973
- }
13974
- }
13975
- OGridComponentStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OGridComponentStateService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
13976
- OGridComponentStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OGridComponentStateService });
13977
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OGridComponentStateService, decorators: [{
13978
- type: Injectable
13979
- }] });
13980
-
13981
- class OFormLayoutManagerService {
13982
- constructor(injector) {
13983
- this.injector = injector;
13984
- this.registeredFormLayoutManagers = {};
13985
- }
13986
- registerFormLayoutManager(comp) {
13987
- this.registeredFormLayoutManagers[comp.getAttribute()] = comp;
13988
- }
13989
- removeFormLayoutManager(comp) {
13990
- delete this.registeredFormLayoutManagers[comp.getAttribute()];
13991
- }
13992
- get activeFormLayoutManager() {
13993
- return this._activeFormLayoutManager;
13994
- }
13995
- set activeFormLayoutManager(arg) {
13996
- this._activeFormLayoutManager = arg;
13997
- }
13998
- }
13999
- OFormLayoutManagerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OFormLayoutManagerService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
14000
- OFormLayoutManagerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OFormLayoutManagerService, providedIn: 'root' });
14001
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OFormLayoutManagerService, decorators: [{
14002
- type: Injectable,
14003
- args: [{
14004
- providedIn: 'root'
14005
- }]
14006
- }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
14007
-
14008
- class OFormLayoutManagerComponentStateClass extends DefaultComponentStateClass {
14009
- }
14010
-
14011
- class OFormLayoutManagerComponentStateService extends AbstractComponentStateService {
14012
- initialize(component) {
14013
- this.state = new OFormLayoutManagerComponentStateClass();
14014
- super.initialize(component);
14015
- }
14016
- initializeState(state) {
14017
- super.initializeState(state);
14018
- }
14019
- }
14020
- OFormLayoutManagerComponentStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OFormLayoutManagerComponentStateService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
14021
- OFormLayoutManagerComponentStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OFormLayoutManagerComponentStateService });
14022
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OFormLayoutManagerComponentStateService, decorators: [{
14023
- type: Injectable
14024
- }] });
14025
-
14026
- class ShareCanActivateChildService {
14027
- constructor(injector) {
14028
- this.injector = injector;
14029
- this.router = this.injector.get(Router);
14030
- this.permissionsService = this.injector.get(PermissionsService);
14031
- }
14032
- setPermissionsGuard(guard) {
14033
- this.permissionsGuard = guard;
14034
- }
14035
- canActivateChildUsingPermissions(childRoute, state) {
14036
- if (this.permissionsGuard) {
14037
- return this.permissionsGuard.canActivateChild(childRoute, state);
14038
- }
14039
- return true;
14040
- }
14041
- }
14042
- ShareCanActivateChildService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ShareCanActivateChildService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
14043
- ShareCanActivateChildService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ShareCanActivateChildService, providedIn: 'root' });
14044
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ShareCanActivateChildService, decorators: [{
14045
- type: Injectable,
14046
- args: [{
14047
- providedIn: 'root'
14048
- }]
14049
- }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
15011
+ const O_GLOBAL_CONFIG = new InjectionToken('o-global-config');
14050
15012
 
14051
15013
  class CanActivateFormLayoutChildGuard {
14052
15014
  constructor(injector) {
@@ -14731,6 +15693,21 @@ class OFormLayoutManagerComponent {
14731
15693
  this.updateStateStorage();
14732
15694
  }));
14733
15695
  }
15696
+ this.getInjectionTokenConfig();
15697
+ }
15698
+ getInjectionTokenConfig() {
15699
+ try {
15700
+ const oGlobalConfig = this.injector.get(O_GLOBAL_CONFIG);
15701
+ if (Util.isDefined(oGlobalConfig.storeState)) {
15702
+ this.storeState = oGlobalConfig.storeState;
15703
+ if (!this.storeState) {
15704
+ this.subscription.unsubscribe();
15705
+ }
15706
+ }
15707
+ ;
15708
+ }
15709
+ catch (error) {
15710
+ }
14734
15711
  }
14735
15712
  get state() {
14736
15713
  return this.componentStateService.state;
@@ -15263,8 +16240,12 @@ class AbstractOServiceBaseComponent {
15263
16240
  this.queryOnEventSubscription.unsubscribe();
15264
16241
  }
15265
16242
  }
16243
+ canSetStaticData(staticData) {
16244
+ return Util.isDefined(staticData);
16245
+ }
15266
16246
  ngOnChanges(changes) {
15267
- if (Util.isDefined(changes.staticData)) {
16247
+ var _a;
16248
+ if (this.canSetStaticData((_a = changes.staticData) === null || _a === void 0 ? void 0 : _a.currentValue)) {
15268
16249
  this.setData(changes.staticData.currentValue);
15269
16250
  }
15270
16251
  }
@@ -15330,6 +16311,11 @@ class AbstractOServiceBaseComponent {
15330
16311
  }
15331
16312
  return result;
15332
16313
  }
16314
+ clearData() {
16315
+ this.state.queryRecordOffset = 0;
16316
+ this.state.totalQueryRecordsNumber = 0;
16317
+ this.setData([], []);
16318
+ }
15333
16319
  queryData(filter, ovrrArgs) {
15334
16320
  const queryMethodName = this.pageable ? this.paginatedQueryMethod : this.queryMethod;
15335
16321
  if (!this.dataService || !(queryMethodName in this.dataService) || !this.entity) {
@@ -15347,9 +16333,7 @@ class AbstractOServiceBaseComponent {
15347
16333
  this.abortQuery.next(false);
15348
16334
  this.queryArguments = this.getQueryArguments(filter, ovrrArgs);
15349
16335
  if (this.abortQuery.value) {
15350
- this.state.queryRecordOffset = 0;
15351
- this.state.totalQueryRecordsNumber = 0;
15352
- this.setData([], []);
16336
+ this.clearData();
15353
16337
  this.cd.detectChanges();
15354
16338
  this.loadingSubject.next(false);
15355
16339
  return;
@@ -15627,6 +16611,9 @@ class AbstractOServiceComponent extends AbstractOServiceBaseComponent {
15627
16611
  this.clickDelay = 200;
15628
16612
  this.clickPrevent = false;
15629
16613
  this._quickFilterAppearance = 'outline';
16614
+ this.mutationObservers = [];
16615
+ this.enabledInsertButton = true;
16616
+ this.enabledRefreshButton = true;
15630
16617
  this._currentPage = 0;
15631
16618
  this.permissionsService = this.injector.get(PermissionsService);
15632
16619
  this.translateService = this.injector.get(OTranslateService);
@@ -15642,6 +16629,18 @@ class AbstractOServiceComponent extends AbstractOServiceBaseComponent {
15642
16629
  }
15643
16630
  catch (e) {
15644
16631
  }
16632
+ this.getGlobalInjectionTokenConfig();
16633
+ }
16634
+ getGlobalInjectionTokenConfig() {
16635
+ try {
16636
+ const oGlobalConfig = this.injector.get(O_GLOBAL_CONFIG);
16637
+ if (Util.isDefined(oGlobalConfig.storeState)) {
16638
+ this.storeState = oGlobalConfig.storeState;
16639
+ }
16640
+ ;
16641
+ }
16642
+ catch (error) {
16643
+ }
15645
16644
  }
15646
16645
  initialize() {
15647
16646
  super.initialize();
@@ -15756,6 +16755,52 @@ class AbstractOServiceComponent extends AbstractOServiceBaseComponent {
15756
16755
  }
15757
16756
  }
15758
16757
  }
16758
+ setButtonPermissions(actionsPermissions) {
16759
+ if (Util.isDefined(actionsPermissions)) {
16760
+ this.setPermission('insert', 'insertButton', 'enabledInsertButton', actionsPermissions);
16761
+ this.setPermission('refresh', 'refreshButton', 'enabledRefreshButton', actionsPermissions);
16762
+ this.setPermission('delete', 'deleteButton', 'enabledDeleteButton', actionsPermissions);
16763
+ }
16764
+ }
16765
+ setPermission(attr, visibleProp, enabledProp, actionsPermissions) {
16766
+ const perm = this.getPermissionByAttr(attr, actionsPermissions);
16767
+ if (Util.isDefined(perm)) {
16768
+ this[visibleProp] = perm.visible;
16769
+ this[enabledProp] = perm.enabled;
16770
+ }
16771
+ }
16772
+ manageCustomPermissions(actionsPermissions, selector) {
16773
+ const customPermissions = actionsPermissions.filter(perm => !['insert', 'refresh', 'delete'].includes(perm.attr));
16774
+ customPermissions.forEach(permission => {
16775
+ this.managePermission(this.elRef, permission, this.mutationObservers, selector);
16776
+ });
16777
+ }
16778
+ getActionsPermissions(permissions) {
16779
+ return Util.isDefined(permissions) ? (permissions.actions || []) : [];
16780
+ }
16781
+ getPermissionByAttr(attr, actionsPermissions) {
16782
+ return actionsPermissions.find((perm) => perm.attr === attr);
16783
+ }
16784
+ managePermission(elementRef, permission, mutationObservers, selector, attr) {
16785
+ let elementByAction;
16786
+ const attrAction = Util.isDefined(attr) ? attr : permission.attr;
16787
+ const allElements = elementRef.nativeElement.querySelectorAll(selector);
16788
+ allElements.forEach(element => {
16789
+ if (element.getAttribute('attr') === attrAction) {
16790
+ elementByAction = element;
16791
+ }
16792
+ });
16793
+ if (Util.isDefined(elementByAction)) {
16794
+ if (!permission.visible) {
16795
+ elementByAction.remove();
16796
+ }
16797
+ else if (!permission.enabled) {
16798
+ elementByAction.disabled = true;
16799
+ const mutationObserver = PermissionsUtils.registerDisabledChangesInDom(elementByAction);
16800
+ mutationObservers.push(mutationObserver);
16801
+ }
16802
+ }
16803
+ }
15759
16804
  getEncodedParentKeys() {
15760
16805
  let encoded;
15761
16806
  if (Object.keys(this._pKeysEquiv).length > 0) {
@@ -16429,9 +17474,7 @@ class OMatSort extends MatSort {
16429
17474
  let propertyA = '';
16430
17475
  let propertyB = '';
16431
17476
  [propertyA, propertyB] = [a[this.activeSortColumn], b[this.activeSortColumn]];
16432
- const valueA = typeof propertyA === 'undefined' ? '' : propertyA === '' ? propertyA : isNaN(+propertyA) ? propertyA.toString().trim().toLowerCase() : +propertyA;
16433
- const valueB = typeof propertyB === 'undefined' ? '' : propertyB === '' ? propertyB : isNaN(+propertyB) ? propertyB.toString().trim().toLowerCase() : +propertyB;
16434
- return (valueA <= valueB ? -1 : 1) * (this.activeSortDirection === 'asc' ? 1 : -1);
17477
+ return Util.sortFunction(propertyA, propertyB, this.activeSortDirection);
16435
17478
  }
16436
17479
  }
16437
17480
  OMatSort.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OMatSort, deps: null, target: i0.ɵɵFactoryTarget.Directive });
@@ -16448,51 +17491,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
16448
17491
  args: ['matSortChange']
16449
17492
  }] } });
16450
17493
 
16451
- class AppearanceService {
16452
- constructor(injector) {
16453
- this.injector = injector;
16454
- this.darkThemeClass = 'o-dark';
16455
- this.isDarkModeSubject = new BehaviorSubject(false);
16456
- this.isDarkMode$ = this.isDarkModeSubject.asObservable();
16457
- this.localStorageService = this.injector.get(LocalStorageService);
16458
- this._document = inject(DOCUMENT);
16459
- const config = this.localStorageService.getStoredData();
16460
- this.isDarkMode$.subscribe(x => this.updateThemeClass(x));
16461
- if (config && config["theme"] && typeof config["theme"].isDark === 'boolean') {
16462
- const isDark = config["theme"].isDark;
16463
- this.isDarkModeSubject.next(isDark);
16464
- }
16465
- }
16466
- setDarkMode(isDarkMode) {
16467
- const config = this.localStorageService.getStoredData();
16468
- if (config) {
16469
- config["theme"] = config["theme"] || {};
16470
- config["theme"].isDark = isDarkMode;
16471
- }
16472
- this.localStorageService.setLocalStorage(config);
16473
- this.isDarkModeSubject.next(isDarkMode);
16474
- }
16475
- isDarkMode() {
16476
- return this.isDarkModeSubject.value;
16477
- }
16478
- updateThemeClass(isDark) {
16479
- if (isDark) {
16480
- this._document.body.classList.add(this.darkThemeClass);
16481
- }
16482
- else {
16483
- this._document.body.classList.remove(this.darkThemeClass);
16484
- }
16485
- }
16486
- }
16487
- AppearanceService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AppearanceService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
16488
- AppearanceService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AppearanceService, providedIn: 'root' });
16489
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AppearanceService, decorators: [{
16490
- type: Injectable,
16491
- args: [{
16492
- providedIn: 'root',
16493
- }]
16494
- }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
16495
-
16496
17494
  class OSkeletonComponent {
16497
17495
  constructor(injector) {
16498
17496
  this.injector = injector;
@@ -16602,6 +17600,9 @@ class OGridComponent extends AbstractOServiceComponent {
16602
17600
  }
16603
17601
  ngOnInit() {
16604
17602
  this.initialize();
17603
+ this.permissions = this.permissionsService.getGridPermissions(this.oattr, this.actRoute);
17604
+ this.actionsPermissions = this.getActionsPermissions(this.permissions);
17605
+ this.setButtonPermissions(this.actionsPermissions);
16605
17606
  }
16606
17607
  initialize() {
16607
17608
  super.initialize();
@@ -16636,6 +17637,7 @@ class OGridComponent extends AbstractOServiceComponent {
16636
17637
  if (this.queryOnInit) {
16637
17638
  this.queryData();
16638
17639
  }
17640
+ this.manageCustomPermissions(this.actionsPermissions, '[o-grid-toolbar]');
16639
17641
  }
16640
17642
  ngAfterContentInit() {
16641
17643
  this.gridItems = this.inputGridItems.toArray();
@@ -16830,7 +17832,7 @@ OGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version
16830
17832
  OntimizeServiceProvider,
16831
17833
  ComponentStateServiceProvider,
16832
17834
  { provide: O_COMPONENT_STATE_SERVICE, useClass: OGridComponentStateService },
16833
- ], queries: [{ propertyName: "inputGridItems", predicate: i0.forwardRef(function () { return OGridItemComponent; }) }], viewQueries: [{ propertyName: "matpaginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "gridItemDirectives", predicate: OGridItemDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div [style.display]=\"isVisible()? '' : 'none'\" class=\"o-grid-container\" fxLayout=\"column\" fxLayoutAlign=\"start stretch\">\n\n <!--TOOLBAR-->\n <o-data-toolbar *ngIf=\"hasControls()\" class=\"o-grid-toolbar\" [title]=\"title\" [show-title]=\"hasTitle()\">\n <ng-container o-data-toolbar-projection-start>\n <ng-container *ngIf=\"showButtonsText;else showButtonsWithoutText\">\n <!-- button new-->\n <button *ngIf=\"insertButton && !insertButtonFloatable\" type=\"button\" class=\"o-grid-add-button o-grid-button text\" mat-stroked-button\n aria-label=\"Insert\" (click)=\"add()\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n <span>{{ 'ADD' | oTranslate }}</span>\n </button>\n\n <!--button refresh-->\n <button type=\"button\" mat-stroked-button aria-label=\"Refresh\" (click)=\"reloadData()\" *ngIf=\"refreshButton\" class=\"o-grid-button text\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n <span>{{ 'REFRESH' | oTranslate }}</span>\n </button>\n </ng-container>\n\n <ng-template #showButtonsWithoutText>\n <!-- button new-->\n <button *ngIf=\"insertButton && !insertButtonFloatable\" type=\"button\" class=\"o-grid-button o-grid-add-button no-text\" mat-icon-button\n aria-label=\"Insert\" (click)=\"add()\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n </button>\n\n <!--button refresh-->\n <button type=\"button\" mat-icon-button aria-label=\"Refresh\" (click)=\"reloadData()\" *ngIf=\"refreshButton\" class=\"o-grid-button no-text\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n </button>\n </ng-template>\n\n <!--O-GRID-PAGINATOR-->\n <div class=\"o-grid-paginator\" *ngIf=\"showPageSize\">\n <div class=\"o-grid-page-size-label\">{{ 'GRID.ITEMS_PER_PAGE' | oTranslate }}:</div>\n <mat-form-field class=\"o-grid-select-page\">\n <mat-select placeholder=\"\" #pageSizeSelect [(value)]=\"queryRows\" (selectionChange)=\"pageSizeChanged()\">\n <mat-option *ngFor=\"let page of pageSizeOptions\" [value]=\"page\">\n {{ page }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!--O-GRID-SORT-->\n <div class=\"o-grid-sort\" *ngIf=\"showSort && sortableColumns.length > 0\">\n <mat-form-field class=\"o-grid-select-sort\">\n <mat-icon matPrefix>sort</mat-icon>\n <mat-select #sortSelect [value]=\"currentOrderColumn\" (selectionChange)=\"sortColumnChanged($event)\"\n placeholder=\" {{ 'GRID.SORT_BY' | oTranslate }}\">\n <mat-option *ngFor=\"let column of sortableColumns; let i = index\" [value]=\"i\">\n {{ getSortOptionText(column) }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n </ng-container>\n <ng-content select=\"[o-grid-toolbar][position=start]\" ngProjectAs=\"[o-data-toolbar-custom-projection-start]\">\n </ng-content>\n <ng-content select=\"[o-grid-toolbar][position=end]\" ngProjectAs=\"[o-data-toolbar-custom-projection-end]\">\n </ng-content>\n <ng-content select=\"[o-grid-toolbar]\" ngProjectAs=\"[o-data-toolbar-custom-projection-start]\">\n </ng-content>\n <ng-container o-data-toolbar-projection-end>\n <o-search-input *ngIf=\"quickFilter\" [columns]=\"quickFilterColumns\" [filter-case-sensitive]=\"filterCaseSensitive\"\n [show-case-sensitive-checkbox]=\"showCaseSensitiveCheckbox()\" [placeholder]=\"quickFilterPlaceholder\" [appearance]=\"quickFilterAppearance\"\n float-label=\"never\"></o-search-input>\n </ng-container>\n </o-data-toolbar>\n\n <ng-container *ngIf=\"(loading | async)===false\">\n <!--no results-->\n <div class=\"o-grid-no-results fill-remaining\" *ngIf=\"gridItems.length === 0\" fxLayoutAlign=\"center start\" layout-padding>\n {{'GRID.EMPTY' | oTranslate}}\n <ng-container *ngIf=\"quickFilter && searchInputComponent && searchInputComponent.getValue() && searchInputComponent.getValue().length > 0\">\n {{ 'GRID.EMPTY_USING_FILTER' | oTranslate : { values: [ searchInputComponent.getValue()] } }}\n </ng-container>\n </div>\n\n\n <!--MAT-GRID-LIST-->\n <mat-grid-list [cols]=\"cols\" [gutterSize]=\"gutterSize\" [rowHeight]=\"gridItemHeight\" class=\"o-mat-grid-list fill-remaining\"\n *ngIf=\"gridItems.length > 0\">\n <mat-grid-tile o-grid-item *ngFor=\"let item of gridItems\" [colspan]=\"item.colspan\" [rowspan]=\"item.rowspan\">\n <ng-container *ngTemplateOutlet=\"item.template\"></ng-container>\n </mat-grid-tile>\n </mat-grid-list>\n\n <button type=\"button\" aria-label=\"Insert\" *ngIf=\"insertButton && insertButtonFloatable\" mat-fab (click)=\"add()\"\n class=\"o-grid-add-floatable-button\" [class.o-grid-add-bottom-floatable-button]=\"insertButtonPosition ==='bottom'\"\n [class.o-grid-add-top-floatable-button]=\"insertButtonPosition ==='top'\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n </button>\n\n <!-- GRID FOOTER -->\n <div *ngIf=\"!paginationControls && showFooter && (loading | async)===false\" fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"o-grid-footer\">\n <button type=\"button\" mat-button *ngIf=\"getDataArray().length < totalRecords && getDataArray().length>0\" (click)=\"loadMore()\"\n class=\"mat-raised-button\">\n {{ 'GRID.BUTTON_NEXT' | oTranslate }}\n </button>\n <span fxFlex></span>\n <span class=\"o-grid-totals\">{{ 'GRID.TEXT_SHOWN_ITEMS' | oTranslate :{values: [getDataArray().length, totalRecords]}\n }}</span>\n </div>\n\n <mat-paginator class=\"o-mat-paginator\" #paginator *ngIf=\"paginationControls && showFooter\" [length]=\"totalRecords\" [pageSize]=\"queryRows\"\n [pageSizeOptions]=\"pageSizeOptions\" [pageIndex]=\"currentPage\" [showFirstLastButtons]=\"true\" (page)=\"onChangePage($event)\"></mat-paginator>\n </ng-container>\n <div *ngIf=\"loading | async\" fxLayout=\"row\" fxLayoutAlign=\"center end\" class=\"o-loading-blocker\">\n <div fxLayoutAlign=\"center center\" [class.o-spinner-container-controls]=\"hasControls()\" class=\"o-spinner-container\">\n <o-grid-skeleton></o-grid-skeleton>\n </div>\n </div>\n\n\n</div>\n", styles: [".o-grid{height:100%}.o-grid .o-grid-container{position:relative;height:100%;display:flex}.o-grid .o-grid-container .o-grid-toolbar .mat-mdc-form-field-subscript-wrapper{display:none}.o-grid .o-grid-container .o-grid-no-results{padding:16px}.o-grid .o-grid-container .o-grid-paginator,.o-grid .o-grid-container .o-grid-sort{margin-right:1em}.o-grid .o-grid-container .o-grid-paginator{display:flex}.o-grid .o-grid-container .o-grid-paginator .o-grid-select-page{width:60px}.o-grid .o-grid-container .o-grid-paginator .o-grid-page-size-label{margin:0 4px 0 8px;align-self:center}.o-grid .o-grid-container .o-grid-footer .o-grid-totals{margin-right:8px;font-size:14px}.o-grid .o-grid-container .o-grid-footer,.o-grid .o-grid-container .o-mat-paginator{flex-shrink:0}.o-grid .o-grid-container .o-loading-blocker{position:absolute;top:0;left:0;right:0;bottom:0;z-index:500;visibility:visible;opacity:1;transition:opacity .25s linear}.o-grid .o-grid-container .o-loading-blocker .o-spinner-container{width:100%;height:100%}.o-grid .o-grid-container .o-loading-blocker .o-spinner-container.o-spinner-container-controls{height:calc(100% - 64px)}.o-grid.o-grid-fixed,.o-grid.o-grid-fixed .o-grid-container{max-height:100%;height:100%}.o-grid.o-grid-fixed .o-mat-grid-list{overflow:auto;padding-bottom:0!important}.o-grid.o-grid-fixed .o-grid-footer,.o-grid.o-grid-fixed .o-mat-paginator{flex:0 0 auto}.o-grid .o-grid-add-floatable-button{right:12px;position:absolute}.o-grid .o-grid-add-floatable-button.o-grid-add-bottom-floatable-button{bottom:36px}.o-grid .o-grid-add-floatable-button.o-grid-add-top-floatable-button{top:66px}\n"], dependencies: [{ kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: OSearchInputComponent, selector: "o-search-input", inputs: ["placeholder", "label", "width", "float-label", "appearance", "columns", "filter-case-sensitive", "show-case-sensitive-checkbox", "show-menu"], outputs: ["onSearch"] }, { kind: "directive", type: i2.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i2.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "component", type: i1$4.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatFabButton, selector: "button[mat-fab]", inputs: ["disabled", "disableRipple", "color", "tabIndex", "extended"], exportAs: ["matButton"] }, { kind: "component", type: i6$1.MatGridList, selector: "mat-grid-list", inputs: ["cols", "gutterSize", "rowHeight"], exportAs: ["matGridList"] }, { kind: "component", type: i6$1.MatGridTile, selector: "mat-grid-tile", inputs: ["rowspan", "colspan"], exportAs: ["matGridTile"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "component", type: i9$1.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i10.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: ODataToolbarComponent, selector: "o-data-toolbar", inputs: ["show-title", "title"] }, { kind: "directive", type: OGridItemDirective, selector: "mat-grid-tile[o-grid-item]" }, { kind: "component", type: OGridSkeletonComponent, selector: "o-grid-skeleton" }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "pipe", type: OTranslatePipe, name: "oTranslate" }], encapsulation: i0.ViewEncapsulation.None });
17835
+ ], queries: [{ propertyName: "inputGridItems", predicate: i0.forwardRef(function () { return OGridItemComponent; }) }], viewQueries: [{ propertyName: "matpaginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "gridItemDirectives", predicate: OGridItemDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div [style.display]=\"isVisible()? '' : 'none'\" class=\"o-grid-container\" fxLayout=\"column\" fxLayoutAlign=\"start stretch\">\n\n <!--TOOLBAR-->\n <o-data-toolbar *ngIf=\"hasControls()\" class=\"o-grid-toolbar\" [title]=\"title\" [show-title]=\"hasTitle()\">\n <ng-container o-data-toolbar-projection-start>\n <ng-container *ngIf=\"showButtonsText;else showButtonsWithoutText\">\n <!-- button new-->\n <button *ngIf=\"insertButton && !insertButtonFloatable\" type=\"button\" [disabled]=\"!enabledInsertButton\"\n class=\"o-grid-add-button o-grid-button text\" mat-stroked-button aria-label=\"Insert\" (click)=\"add()\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n <span>{{ 'ADD' | oTranslate }}</span>\n </button>\n\n <!--button refresh-->\n <button type=\"button\" mat-stroked-button aria-label=\"Refresh\" [disabled]=\"!enabledRefreshButton\" (click)=\"reloadData()\" *ngIf=\"refreshButton\"\n class=\"o-grid-button text\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n <span>{{ 'REFRESH' | oTranslate }}</span>\n </button>\n </ng-container>\n\n <ng-template #showButtonsWithoutText>\n <!-- button new-->\n <button *ngIf=\"insertButton && !insertButtonFloatable\" [disabled]=\"!enabledInsertButton\" type=\"button\"\n class=\"o-grid-button o-grid-add-button no-text\" mat-icon-button aria-label=\"Insert\" (click)=\"add()\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n </button>\n\n <!--button refresh-->\n <button type=\"button\" mat-icon-button aria-label=\"Refresh\" [disabled]=\"!enabledRefreshButton\" (click)=\"reloadData()\" *ngIf=\"refreshButton\"\n class=\"o-grid-button no-text\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n </button>\n </ng-template>\n\n <!--O-GRID-PAGINATOR-->\n <div class=\"o-grid-paginator\" *ngIf=\"showPageSize\">\n <div class=\"o-grid-page-size-label\">{{ 'GRID.ITEMS_PER_PAGE' | oTranslate }}:</div>\n <mat-form-field class=\"o-grid-select-page\">\n <mat-select placeholder=\"\" #pageSizeSelect [(value)]=\"queryRows\" (selectionChange)=\"pageSizeChanged()\">\n <mat-option *ngFor=\"let page of pageSizeOptions\" [value]=\"page\">\n {{ page }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!--O-GRID-SORT-->\n <div class=\"o-grid-sort\" *ngIf=\"showSort && sortableColumns.length > 0\">\n <mat-form-field class=\"o-grid-select-sort\">\n <mat-icon matPrefix>sort</mat-icon>\n <mat-select #sortSelect [value]=\"currentOrderColumn\" (selectionChange)=\"sortColumnChanged($event)\"\n placeholder=\" {{ 'GRID.SORT_BY' | oTranslate }}\">\n <mat-option *ngFor=\"let column of sortableColumns; let i = index\" [value]=\"i\">\n {{ getSortOptionText(column) }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n </ng-container>\n <ng-content select=\"[o-grid-toolbar][position=start]\" ngProjectAs=\"[o-data-toolbar-custom-projection-start]\">\n </ng-content>\n <ng-content select=\"[o-grid-toolbar][position=end]\" ngProjectAs=\"[o-data-toolbar-custom-projection-end]\">\n </ng-content>\n <ng-content select=\"[o-grid-toolbar]\" ngProjectAs=\"[o-data-toolbar-custom-projection-start]\">\n </ng-content>\n <ng-container o-data-toolbar-projection-end>\n <o-search-input *ngIf=\"quickFilter\" [columns]=\"quickFilterColumns\" [filter-case-sensitive]=\"filterCaseSensitive\"\n [show-case-sensitive-checkbox]=\"showCaseSensitiveCheckbox()\" [placeholder]=\"quickFilterPlaceholder\" [appearance]=\"quickFilterAppearance\"\n float-label=\"never\"></o-search-input>\n </ng-container>\n </o-data-toolbar>\n\n <ng-container *ngIf=\"(loading | async)===false\">\n <!--no results-->\n <div class=\"o-grid-no-results fill-remaining\" *ngIf=\"gridItems.length === 0\" fxLayoutAlign=\"center start\" layout-padding>\n {{'GRID.EMPTY' | oTranslate}}\n <ng-container *ngIf=\"quickFilter && searchInputComponent && searchInputComponent.getValue() && searchInputComponent.getValue().length > 0\">\n {{ 'GRID.EMPTY_USING_FILTER' | oTranslate : { values: [ searchInputComponent.getValue()] } }}\n </ng-container>\n </div>\n\n\n <!--MAT-GRID-LIST-->\n <mat-grid-list [cols]=\"cols\" [gutterSize]=\"gutterSize\" [rowHeight]=\"gridItemHeight\" class=\"o-mat-grid-list fill-remaining\"\n *ngIf=\"gridItems.length > 0\">\n <mat-grid-tile o-grid-item *ngFor=\"let item of gridItems\" [colspan]=\"item.colspan\" [rowspan]=\"item.rowspan\">\n <ng-container *ngTemplateOutlet=\"item.template\"></ng-container>\n </mat-grid-tile>\n </mat-grid-list>\n <button type=\"button\" aria-label=\"Insert\" *ngIf=\"insertButton && insertButtonFloatable\" [disabled]=\"!enabledInsertButton\" mat-fab (click)=\"add()\"\n class=\"o-grid-add-floatable-button\" [class.o-grid-add-bottom-floatable-button]=\"insertButtonPosition ==='bottom'\"\n [class.o-grid-add-top-floatable-button]=\"insertButtonPosition ==='top'\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n </button>\n\n <!-- GRID FOOTER -->\n <div *ngIf=\"!paginationControls && showFooter && (loading | async)===false\" fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"o-grid-footer\">\n <button type=\"button\" mat-button *ngIf=\"getDataArray().length < totalRecords && getDataArray().length>0\" (click)=\"loadMore()\"\n class=\"mat-raised-button\">\n {{ 'GRID.BUTTON_NEXT' | oTranslate }}\n </button>\n <span fxFlex></span>\n <span class=\"o-grid-totals\">{{ 'GRID.TEXT_SHOWN_ITEMS' | oTranslate :{values: [getDataArray().length, totalRecords]}\n }}</span>\n </div>\n\n <mat-paginator class=\"o-mat-paginator\" #paginator *ngIf=\"paginationControls && showFooter\" [length]=\"totalRecords\" [pageSize]=\"queryRows\"\n [pageSizeOptions]=\"pageSizeOptions\" [pageIndex]=\"currentPage\" [showFirstLastButtons]=\"true\" (page)=\"onChangePage($event)\"></mat-paginator>\n </ng-container>\n <div *ngIf=\"loading | async\" fxLayout=\"row\" fxLayoutAlign=\"center end\" class=\"o-loading-blocker\">\n <div fxLayoutAlign=\"center center\" [class.o-spinner-container-controls]=\"hasControls()\" class=\"o-spinner-container\">\n <o-grid-skeleton></o-grid-skeleton>\n </div>\n </div>\n\n\n</div>\n", styles: [".o-grid{height:100%}.o-grid .o-grid-container{position:relative;height:100%;display:flex}.o-grid .o-grid-container .o-grid-toolbar .mat-mdc-form-field-subscript-wrapper{display:none}.o-grid .o-grid-container .o-grid-no-results{padding:16px}.o-grid .o-grid-container .o-grid-paginator,.o-grid .o-grid-container .o-grid-sort{margin-right:1em}.o-grid .o-grid-container .o-grid-paginator{display:flex}.o-grid .o-grid-container .o-grid-paginator .o-grid-select-page{width:60px}.o-grid .o-grid-container .o-grid-paginator .o-grid-page-size-label{margin:0 4px 0 8px;align-self:center}.o-grid .o-grid-container .o-grid-footer .o-grid-totals{margin-right:8px;font-size:14px}.o-grid .o-grid-container .o-grid-footer,.o-grid .o-grid-container .o-mat-paginator{flex-shrink:0}.o-grid .o-grid-container .o-loading-blocker{position:absolute;top:0;left:0;right:0;bottom:0;z-index:500;visibility:visible;opacity:1;transition:opacity .25s linear}.o-grid .o-grid-container .o-loading-blocker .o-spinner-container{width:100%;height:100%}.o-grid .o-grid-container .o-loading-blocker .o-spinner-container.o-spinner-container-controls{height:calc(100% - 64px)}.o-grid.o-grid-fixed,.o-grid.o-grid-fixed .o-grid-container{max-height:100%;height:100%}.o-grid.o-grid-fixed .o-mat-grid-list{overflow:auto;padding-bottom:0!important}.o-grid.o-grid-fixed .o-grid-footer,.o-grid.o-grid-fixed .o-mat-paginator{flex:0 0 auto}.o-grid .o-grid-add-floatable-button{right:12px;position:absolute}.o-grid .o-grid-add-floatable-button.o-grid-add-bottom-floatable-button{bottom:36px}.o-grid .o-grid-add-floatable-button.o-grid-add-top-floatable-button{top:66px}\n"], dependencies: [{ kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: OSearchInputComponent, selector: "o-search-input", inputs: ["placeholder", "label", "width", "float-label", "appearance", "columns", "filter-case-sensitive", "show-case-sensitive-checkbox", "show-menu"], outputs: ["onSearch"] }, { kind: "directive", type: i2.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i2.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "component", type: i1$4.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatFabButton, selector: "button[mat-fab]", inputs: ["disabled", "disableRipple", "color", "tabIndex", "extended"], exportAs: ["matButton"] }, { kind: "component", type: i6$1.MatGridList, selector: "mat-grid-list", inputs: ["cols", "gutterSize", "rowHeight"], exportAs: ["matGridList"] }, { kind: "component", type: i6$1.MatGridTile, selector: "mat-grid-tile", inputs: ["rowspan", "colspan"], exportAs: ["matGridTile"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "component", type: i9$1.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i10.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: ODataToolbarComponent, selector: "o-data-toolbar", inputs: ["show-title", "title"] }, { kind: "directive", type: OGridItemDirective, selector: "mat-grid-tile[o-grid-item]" }, { kind: "component", type: OGridSkeletonComponent, selector: "o-grid-skeleton" }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "pipe", type: OTranslatePipe, name: "oTranslate" }], encapsulation: i0.ViewEncapsulation.None });
16834
17836
  __decorate([
16835
17837
  BooleanInputConverter(),
16836
17838
  __metadata("design:type", Boolean)
@@ -16872,7 +17874,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
16872
17874
  ], inputs: DEFAULT_INPUTS_O_GRID, encapsulation: ViewEncapsulation.None, host: {
16873
17875
  '[class.o-grid]': 'true',
16874
17876
  '[class.o-grid-fixed]': 'fixedHeader'
16875
- }, template: "<div [style.display]=\"isVisible()? '' : 'none'\" class=\"o-grid-container\" fxLayout=\"column\" fxLayoutAlign=\"start stretch\">\n\n <!--TOOLBAR-->\n <o-data-toolbar *ngIf=\"hasControls()\" class=\"o-grid-toolbar\" [title]=\"title\" [show-title]=\"hasTitle()\">\n <ng-container o-data-toolbar-projection-start>\n <ng-container *ngIf=\"showButtonsText;else showButtonsWithoutText\">\n <!-- button new-->\n <button *ngIf=\"insertButton && !insertButtonFloatable\" type=\"button\" class=\"o-grid-add-button o-grid-button text\" mat-stroked-button\n aria-label=\"Insert\" (click)=\"add()\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n <span>{{ 'ADD' | oTranslate }}</span>\n </button>\n\n <!--button refresh-->\n <button type=\"button\" mat-stroked-button aria-label=\"Refresh\" (click)=\"reloadData()\" *ngIf=\"refreshButton\" class=\"o-grid-button text\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n <span>{{ 'REFRESH' | oTranslate }}</span>\n </button>\n </ng-container>\n\n <ng-template #showButtonsWithoutText>\n <!-- button new-->\n <button *ngIf=\"insertButton && !insertButtonFloatable\" type=\"button\" class=\"o-grid-button o-grid-add-button no-text\" mat-icon-button\n aria-label=\"Insert\" (click)=\"add()\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n </button>\n\n <!--button refresh-->\n <button type=\"button\" mat-icon-button aria-label=\"Refresh\" (click)=\"reloadData()\" *ngIf=\"refreshButton\" class=\"o-grid-button no-text\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n </button>\n </ng-template>\n\n <!--O-GRID-PAGINATOR-->\n <div class=\"o-grid-paginator\" *ngIf=\"showPageSize\">\n <div class=\"o-grid-page-size-label\">{{ 'GRID.ITEMS_PER_PAGE' | oTranslate }}:</div>\n <mat-form-field class=\"o-grid-select-page\">\n <mat-select placeholder=\"\" #pageSizeSelect [(value)]=\"queryRows\" (selectionChange)=\"pageSizeChanged()\">\n <mat-option *ngFor=\"let page of pageSizeOptions\" [value]=\"page\">\n {{ page }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!--O-GRID-SORT-->\n <div class=\"o-grid-sort\" *ngIf=\"showSort && sortableColumns.length > 0\">\n <mat-form-field class=\"o-grid-select-sort\">\n <mat-icon matPrefix>sort</mat-icon>\n <mat-select #sortSelect [value]=\"currentOrderColumn\" (selectionChange)=\"sortColumnChanged($event)\"\n placeholder=\" {{ 'GRID.SORT_BY' | oTranslate }}\">\n <mat-option *ngFor=\"let column of sortableColumns; let i = index\" [value]=\"i\">\n {{ getSortOptionText(column) }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n </ng-container>\n <ng-content select=\"[o-grid-toolbar][position=start]\" ngProjectAs=\"[o-data-toolbar-custom-projection-start]\">\n </ng-content>\n <ng-content select=\"[o-grid-toolbar][position=end]\" ngProjectAs=\"[o-data-toolbar-custom-projection-end]\">\n </ng-content>\n <ng-content select=\"[o-grid-toolbar]\" ngProjectAs=\"[o-data-toolbar-custom-projection-start]\">\n </ng-content>\n <ng-container o-data-toolbar-projection-end>\n <o-search-input *ngIf=\"quickFilter\" [columns]=\"quickFilterColumns\" [filter-case-sensitive]=\"filterCaseSensitive\"\n [show-case-sensitive-checkbox]=\"showCaseSensitiveCheckbox()\" [placeholder]=\"quickFilterPlaceholder\" [appearance]=\"quickFilterAppearance\"\n float-label=\"never\"></o-search-input>\n </ng-container>\n </o-data-toolbar>\n\n <ng-container *ngIf=\"(loading | async)===false\">\n <!--no results-->\n <div class=\"o-grid-no-results fill-remaining\" *ngIf=\"gridItems.length === 0\" fxLayoutAlign=\"center start\" layout-padding>\n {{'GRID.EMPTY' | oTranslate}}\n <ng-container *ngIf=\"quickFilter && searchInputComponent && searchInputComponent.getValue() && searchInputComponent.getValue().length > 0\">\n {{ 'GRID.EMPTY_USING_FILTER' | oTranslate : { values: [ searchInputComponent.getValue()] } }}\n </ng-container>\n </div>\n\n\n <!--MAT-GRID-LIST-->\n <mat-grid-list [cols]=\"cols\" [gutterSize]=\"gutterSize\" [rowHeight]=\"gridItemHeight\" class=\"o-mat-grid-list fill-remaining\"\n *ngIf=\"gridItems.length > 0\">\n <mat-grid-tile o-grid-item *ngFor=\"let item of gridItems\" [colspan]=\"item.colspan\" [rowspan]=\"item.rowspan\">\n <ng-container *ngTemplateOutlet=\"item.template\"></ng-container>\n </mat-grid-tile>\n </mat-grid-list>\n\n <button type=\"button\" aria-label=\"Insert\" *ngIf=\"insertButton && insertButtonFloatable\" mat-fab (click)=\"add()\"\n class=\"o-grid-add-floatable-button\" [class.o-grid-add-bottom-floatable-button]=\"insertButtonPosition ==='bottom'\"\n [class.o-grid-add-top-floatable-button]=\"insertButtonPosition ==='top'\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n </button>\n\n <!-- GRID FOOTER -->\n <div *ngIf=\"!paginationControls && showFooter && (loading | async)===false\" fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"o-grid-footer\">\n <button type=\"button\" mat-button *ngIf=\"getDataArray().length < totalRecords && getDataArray().length>0\" (click)=\"loadMore()\"\n class=\"mat-raised-button\">\n {{ 'GRID.BUTTON_NEXT' | oTranslate }}\n </button>\n <span fxFlex></span>\n <span class=\"o-grid-totals\">{{ 'GRID.TEXT_SHOWN_ITEMS' | oTranslate :{values: [getDataArray().length, totalRecords]}\n }}</span>\n </div>\n\n <mat-paginator class=\"o-mat-paginator\" #paginator *ngIf=\"paginationControls && showFooter\" [length]=\"totalRecords\" [pageSize]=\"queryRows\"\n [pageSizeOptions]=\"pageSizeOptions\" [pageIndex]=\"currentPage\" [showFirstLastButtons]=\"true\" (page)=\"onChangePage($event)\"></mat-paginator>\n </ng-container>\n <div *ngIf=\"loading | async\" fxLayout=\"row\" fxLayoutAlign=\"center end\" class=\"o-loading-blocker\">\n <div fxLayoutAlign=\"center center\" [class.o-spinner-container-controls]=\"hasControls()\" class=\"o-spinner-container\">\n <o-grid-skeleton></o-grid-skeleton>\n </div>\n </div>\n\n\n</div>\n", styles: [".o-grid{height:100%}.o-grid .o-grid-container{position:relative;height:100%;display:flex}.o-grid .o-grid-container .o-grid-toolbar .mat-mdc-form-field-subscript-wrapper{display:none}.o-grid .o-grid-container .o-grid-no-results{padding:16px}.o-grid .o-grid-container .o-grid-paginator,.o-grid .o-grid-container .o-grid-sort{margin-right:1em}.o-grid .o-grid-container .o-grid-paginator{display:flex}.o-grid .o-grid-container .o-grid-paginator .o-grid-select-page{width:60px}.o-grid .o-grid-container .o-grid-paginator .o-grid-page-size-label{margin:0 4px 0 8px;align-self:center}.o-grid .o-grid-container .o-grid-footer .o-grid-totals{margin-right:8px;font-size:14px}.o-grid .o-grid-container .o-grid-footer,.o-grid .o-grid-container .o-mat-paginator{flex-shrink:0}.o-grid .o-grid-container .o-loading-blocker{position:absolute;top:0;left:0;right:0;bottom:0;z-index:500;visibility:visible;opacity:1;transition:opacity .25s linear}.o-grid .o-grid-container .o-loading-blocker .o-spinner-container{width:100%;height:100%}.o-grid .o-grid-container .o-loading-blocker .o-spinner-container.o-spinner-container-controls{height:calc(100% - 64px)}.o-grid.o-grid-fixed,.o-grid.o-grid-fixed .o-grid-container{max-height:100%;height:100%}.o-grid.o-grid-fixed .o-mat-grid-list{overflow:auto;padding-bottom:0!important}.o-grid.o-grid-fixed .o-grid-footer,.o-grid.o-grid-fixed .o-mat-paginator{flex:0 0 auto}.o-grid .o-grid-add-floatable-button{right:12px;position:absolute}.o-grid .o-grid-add-floatable-button.o-grid-add-bottom-floatable-button{bottom:36px}.o-grid .o-grid-add-floatable-button.o-grid-add-top-floatable-button{top:66px}\n"] }]
17877
+ }, template: "<div [style.display]=\"isVisible()? '' : 'none'\" class=\"o-grid-container\" fxLayout=\"column\" fxLayoutAlign=\"start stretch\">\n\n <!--TOOLBAR-->\n <o-data-toolbar *ngIf=\"hasControls()\" class=\"o-grid-toolbar\" [title]=\"title\" [show-title]=\"hasTitle()\">\n <ng-container o-data-toolbar-projection-start>\n <ng-container *ngIf=\"showButtonsText;else showButtonsWithoutText\">\n <!-- button new-->\n <button *ngIf=\"insertButton && !insertButtonFloatable\" type=\"button\" [disabled]=\"!enabledInsertButton\"\n class=\"o-grid-add-button o-grid-button text\" mat-stroked-button aria-label=\"Insert\" (click)=\"add()\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n <span>{{ 'ADD' | oTranslate }}</span>\n </button>\n\n <!--button refresh-->\n <button type=\"button\" mat-stroked-button aria-label=\"Refresh\" [disabled]=\"!enabledRefreshButton\" (click)=\"reloadData()\" *ngIf=\"refreshButton\"\n class=\"o-grid-button text\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n <span>{{ 'REFRESH' | oTranslate }}</span>\n </button>\n </ng-container>\n\n <ng-template #showButtonsWithoutText>\n <!-- button new-->\n <button *ngIf=\"insertButton && !insertButtonFloatable\" [disabled]=\"!enabledInsertButton\" type=\"button\"\n class=\"o-grid-button o-grid-add-button no-text\" mat-icon-button aria-label=\"Insert\" (click)=\"add()\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n </button>\n\n <!--button refresh-->\n <button type=\"button\" mat-icon-button aria-label=\"Refresh\" [disabled]=\"!enabledRefreshButton\" (click)=\"reloadData()\" *ngIf=\"refreshButton\"\n class=\"o-grid-button no-text\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n </button>\n </ng-template>\n\n <!--O-GRID-PAGINATOR-->\n <div class=\"o-grid-paginator\" *ngIf=\"showPageSize\">\n <div class=\"o-grid-page-size-label\">{{ 'GRID.ITEMS_PER_PAGE' | oTranslate }}:</div>\n <mat-form-field class=\"o-grid-select-page\">\n <mat-select placeholder=\"\" #pageSizeSelect [(value)]=\"queryRows\" (selectionChange)=\"pageSizeChanged()\">\n <mat-option *ngFor=\"let page of pageSizeOptions\" [value]=\"page\">\n {{ page }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!--O-GRID-SORT-->\n <div class=\"o-grid-sort\" *ngIf=\"showSort && sortableColumns.length > 0\">\n <mat-form-field class=\"o-grid-select-sort\">\n <mat-icon matPrefix>sort</mat-icon>\n <mat-select #sortSelect [value]=\"currentOrderColumn\" (selectionChange)=\"sortColumnChanged($event)\"\n placeholder=\" {{ 'GRID.SORT_BY' | oTranslate }}\">\n <mat-option *ngFor=\"let column of sortableColumns; let i = index\" [value]=\"i\">\n {{ getSortOptionText(column) }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n </ng-container>\n <ng-content select=\"[o-grid-toolbar][position=start]\" ngProjectAs=\"[o-data-toolbar-custom-projection-start]\">\n </ng-content>\n <ng-content select=\"[o-grid-toolbar][position=end]\" ngProjectAs=\"[o-data-toolbar-custom-projection-end]\">\n </ng-content>\n <ng-content select=\"[o-grid-toolbar]\" ngProjectAs=\"[o-data-toolbar-custom-projection-start]\">\n </ng-content>\n <ng-container o-data-toolbar-projection-end>\n <o-search-input *ngIf=\"quickFilter\" [columns]=\"quickFilterColumns\" [filter-case-sensitive]=\"filterCaseSensitive\"\n [show-case-sensitive-checkbox]=\"showCaseSensitiveCheckbox()\" [placeholder]=\"quickFilterPlaceholder\" [appearance]=\"quickFilterAppearance\"\n float-label=\"never\"></o-search-input>\n </ng-container>\n </o-data-toolbar>\n\n <ng-container *ngIf=\"(loading | async)===false\">\n <!--no results-->\n <div class=\"o-grid-no-results fill-remaining\" *ngIf=\"gridItems.length === 0\" fxLayoutAlign=\"center start\" layout-padding>\n {{'GRID.EMPTY' | oTranslate}}\n <ng-container *ngIf=\"quickFilter && searchInputComponent && searchInputComponent.getValue() && searchInputComponent.getValue().length > 0\">\n {{ 'GRID.EMPTY_USING_FILTER' | oTranslate : { values: [ searchInputComponent.getValue()] } }}\n </ng-container>\n </div>\n\n\n <!--MAT-GRID-LIST-->\n <mat-grid-list [cols]=\"cols\" [gutterSize]=\"gutterSize\" [rowHeight]=\"gridItemHeight\" class=\"o-mat-grid-list fill-remaining\"\n *ngIf=\"gridItems.length > 0\">\n <mat-grid-tile o-grid-item *ngFor=\"let item of gridItems\" [colspan]=\"item.colspan\" [rowspan]=\"item.rowspan\">\n <ng-container *ngTemplateOutlet=\"item.template\"></ng-container>\n </mat-grid-tile>\n </mat-grid-list>\n <button type=\"button\" aria-label=\"Insert\" *ngIf=\"insertButton && insertButtonFloatable\" [disabled]=\"!enabledInsertButton\" mat-fab (click)=\"add()\"\n class=\"o-grid-add-floatable-button\" [class.o-grid-add-bottom-floatable-button]=\"insertButtonPosition ==='bottom'\"\n [class.o-grid-add-top-floatable-button]=\"insertButtonPosition ==='top'\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n </button>\n\n <!-- GRID FOOTER -->\n <div *ngIf=\"!paginationControls && showFooter && (loading | async)===false\" fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"o-grid-footer\">\n <button type=\"button\" mat-button *ngIf=\"getDataArray().length < totalRecords && getDataArray().length>0\" (click)=\"loadMore()\"\n class=\"mat-raised-button\">\n {{ 'GRID.BUTTON_NEXT' | oTranslate }}\n </button>\n <span fxFlex></span>\n <span class=\"o-grid-totals\">{{ 'GRID.TEXT_SHOWN_ITEMS' | oTranslate :{values: [getDataArray().length, totalRecords]}\n }}</span>\n </div>\n\n <mat-paginator class=\"o-mat-paginator\" #paginator *ngIf=\"paginationControls && showFooter\" [length]=\"totalRecords\" [pageSize]=\"queryRows\"\n [pageSizeOptions]=\"pageSizeOptions\" [pageIndex]=\"currentPage\" [showFirstLastButtons]=\"true\" (page)=\"onChangePage($event)\"></mat-paginator>\n </ng-container>\n <div *ngIf=\"loading | async\" fxLayout=\"row\" fxLayoutAlign=\"center end\" class=\"o-loading-blocker\">\n <div fxLayoutAlign=\"center center\" [class.o-spinner-container-controls]=\"hasControls()\" class=\"o-spinner-container\">\n <o-grid-skeleton></o-grid-skeleton>\n </div>\n </div>\n\n\n</div>\n", styles: [".o-grid{height:100%}.o-grid .o-grid-container{position:relative;height:100%;display:flex}.o-grid .o-grid-container .o-grid-toolbar .mat-mdc-form-field-subscript-wrapper{display:none}.o-grid .o-grid-container .o-grid-no-results{padding:16px}.o-grid .o-grid-container .o-grid-paginator,.o-grid .o-grid-container .o-grid-sort{margin-right:1em}.o-grid .o-grid-container .o-grid-paginator{display:flex}.o-grid .o-grid-container .o-grid-paginator .o-grid-select-page{width:60px}.o-grid .o-grid-container .o-grid-paginator .o-grid-page-size-label{margin:0 4px 0 8px;align-self:center}.o-grid .o-grid-container .o-grid-footer .o-grid-totals{margin-right:8px;font-size:14px}.o-grid .o-grid-container .o-grid-footer,.o-grid .o-grid-container .o-mat-paginator{flex-shrink:0}.o-grid .o-grid-container .o-loading-blocker{position:absolute;top:0;left:0;right:0;bottom:0;z-index:500;visibility:visible;opacity:1;transition:opacity .25s linear}.o-grid .o-grid-container .o-loading-blocker .o-spinner-container{width:100%;height:100%}.o-grid .o-grid-container .o-loading-blocker .o-spinner-container.o-spinner-container-controls{height:calc(100% - 64px)}.o-grid.o-grid-fixed,.o-grid.o-grid-fixed .o-grid-container{max-height:100%;height:100%}.o-grid.o-grid-fixed .o-mat-grid-list{overflow:auto;padding-bottom:0!important}.o-grid.o-grid-fixed .o-grid-footer,.o-grid.o-grid-fixed .o-mat-paginator{flex:0 0 auto}.o-grid .o-grid-add-floatable-button{right:12px;position:absolute}.o-grid .o-grid-add-floatable-button.o-grid-add-bottom-floatable-button{bottom:36px}.o-grid .o-grid-add-floatable-button.o-grid-add-top-floatable-button{top:66px}\n"] }]
16876
17878
  }], ctorParameters: function () {
16877
17879
  return [{ type: i0.Injector }, { type: i0.ElementRef }, { type: OFormComponent, decorators: [{
16878
17880
  type: Optional
@@ -17503,6 +18505,9 @@ class OComboSearchComponent {
17503
18505
  }
17504
18506
  });
17505
18507
  }
18508
+ resetSelectedValues() {
18509
+ this.previousSelectedValues = [];
18510
+ }
17506
18511
  }
17507
18512
  OComboSearchComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OComboSearchComponent, deps: [{ token: MatSelect }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
17508
18513
  OComboSearchComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OComboSearchComponent, selector: "o-combo-search", host: { properties: { "class.o-combo-search": "true" } }, providers: [
@@ -17657,6 +18662,9 @@ class OComboComponent extends OFormServiceComponent {
17657
18662
  if (this.multiple) {
17658
18663
  this.setValue(this.defaultValue, options, setDirty);
17659
18664
  this.value.value = [];
18665
+ if (Util.isDefined(this.comboSearch)) {
18666
+ this.comboSearch.resetSelectedValues();
18667
+ }
17660
18668
  }
17661
18669
  else {
17662
18670
  super.clearValue(options, setDirty);
@@ -17777,7 +18785,7 @@ OComboComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version:
17777
18785
  OComboComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OComboComponent, selector: "o-combo", inputs: { multiple: "multiple", nullSelection: ["null-selection", "nullSelection"], multipleTriggerLabel: ["multiple-trigger-label", "multipleTriggerLabel"], searchable: "searchable", nullSelectionLabel: ["null-selection-label", "nullSelectionLabel"] }, host: { properties: { "class.o-combo": "true" } }, providers: [
17778
18786
  OntimizeServiceProvider,
17779
18787
  { provide: OFormServiceComponent, useExisting: forwardRef(() => OComboComponent) }
17780
- ], viewQueries: [{ propertyName: "inputModel", first: true, predicate: ["inputModel"], descendants: true }, { propertyName: "selectModel", first: true, predicate: ["selectModel"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div [formGroup]=\"getFormGroup()\" [matTooltip]=\"tooltip\" [matTooltipClass]=\"tooltipClass\" [matTooltipPosition]=\"tooltipPosition\"\n [matTooltipShowDelay]=\"tooltipShowDelay\" [matTooltipHideDelay]=\"tooltipHideDelay\" [oContextMenu]=\"oContextMenu\">\n\n <mat-form-field [appearance]=\"appearance\" [floatLabel]=\"floatLabel\" [class.read-only]=\"isReadOnly\" [class.custom-width]=\"hasCustomWidth\"\n [hideRequiredMarker]=\"hideRequiredMarker\" fxFill [subscriptSizing]=\"subscriptSizing\">\n <mat-label *ngIf=\"labelVisible\">{{ olabel | oTranslate }}</mat-label>\n <mat-select [value]=\"getValue()\" #selectModel [id]=\"getAttribute()\" fxFill [formControlName]=\"getAttribute()\" [placeholder]=\"placeHolder\"\n [multiple]=\"getMultiple()\" [required]=\"isRequired\" [panelClass]=\"{ 'o-combo-panel': true, 'o-combo-panel-search': searchable }\"\n (selectionChange)=\"onSelectionChange($event)\" (closed)=\"innerOnBlur($event)\">\n <o-combo-search *ngIf=\"searchable\" [formControl]=\"searchControl\"></o-combo-search>\n\n <mat-select-trigger *ngIf=\"multiple && multipleTriggerLabel\">\n {{ selectModel.selected[0] ? getFirstSelectedValue(): '' }}\n <span *ngIf=\"!isEmpty()\">\n {{ 'INPUT.COMBO.MESSAGE_TRIGGER' | oTranslate: { values: [getFormControl().value.length -1] } }}\n </span>\n </mat-select-trigger>\n\n <mat-select-trigger *ngIf=\"!multiple && !multipleTriggerLabel\">\n <ng-container *ngFor=\"let item of filteredDataArray\">\n <ng-container *ngIf=\"renderer && item[valueColumn] == getValue()\">\n <ng-template *ngTemplateOutlet=\"renderer?.templateref; context:{ value: item }\">\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!renderer && item[valueColumn] == getValue()\">\n {{ getOptionDescriptionValue(item) }}\n </ng-container>\n </ng-container>\n </mat-select-trigger>\n\n <div class=\"o-combo-options-container\">\n <mat-option *ngIf=\"hasNullSelection()\" [value]=\"null\">{{translate ?\n (nullSelectionLabel|oTranslate): nullSelectionLabel}}\n </mat-option>\n <mat-option *ngFor=\"let item of filteredDataArray\" [value]=\"getValueColumn(item)\">\n <ng-container *ngIf=\"renderer\">\n <ng-template *ngTemplateOutlet=\"renderer?.templateref; context:{ value: item }\">\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!renderer\">\n {{ getOptionDescriptionValue(item) }}\n </ng-container>\n </mat-option>\n </div>\n </mat-select>\n\n <button type=\"button\" *ngIf=\"showClearButton\" matSuffix mat-icon-button (click)=\"onClickClearValue($event)\">\n <mat-icon svgIcon=\"ontimize:close\"></mat-icon>\n </button>\n\n <mat-error *oMatError=\"hasError('required')\">\n {{ 'FORM_VALIDATION.REQUIRED' | oTranslate }}\n </mat-error>\n <mat-error *ngFor=\"let oError of getActiveOErrors()\">\n {{ oError.text | oTranslate }}\n </mat-error>\n </mat-form-field>\n\n <o-context-menu *ngIf=\"!this.isReadOnly && this.enabled\">\n <o-context-menu-item attr=\"refresh\" label=\"FORM_SERVICE_COMPONENT.REFRESH\" svg-icon=\"ontimize:autorenew\" (execute)=\"refresh()\">\n </o-context-menu-item>\n </o-context-menu>\n</div>\n", styles: [".o-combo .read-only .mat-mdc-select-arrow-wrapper{visibility:hidden}.o-combo-panel.o-combo-panel-search{height:100%}.o-combo-panel.o-combo-panel-search .o-combo-options-container{height:calc(100% - 3em);overflow:auto}\n"], dependencies: [{ kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i3$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: OMatErrorDirective, selector: "[oMatError]", inputs: ["oMatError"] }, { kind: "component", type: i1$4.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "directive", type: i8.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i8.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i9$1.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "directive", type: i9$1.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: OContextMenuDirective, selector: "[oContextMenu]", inputs: ["oContextMenu", "oContextMenuData"] }, { kind: "component", type: OContextMenuComponent, selector: "o-context-menu", outputs: ["onShow", "onClose"] }, { kind: "component", type: OContextMenuItemComponent, selector: "o-context-menu-item", outputs: ["execute"] }, { kind: "component", type: OComboSearchComponent, selector: "o-combo-search" }, { kind: "pipe", type: OTranslatePipe, name: "oTranslate" }], encapsulation: i0.ViewEncapsulation.None });
18788
+ ], viewQueries: [{ propertyName: "inputModel", first: true, predicate: ["inputModel"], descendants: true }, { propertyName: "selectModel", first: true, predicate: ["selectModel"], descendants: true }, { propertyName: "comboSearch", first: true, predicate: ["comboSearch"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div [formGroup]=\"getFormGroup()\" [matTooltip]=\"tooltip\" [matTooltipClass]=\"tooltipClass\" [matTooltipPosition]=\"tooltipPosition\"\n [matTooltipShowDelay]=\"tooltipShowDelay\" [matTooltipHideDelay]=\"tooltipHideDelay\" [oContextMenu]=\"oContextMenu\">\n\n <mat-form-field [appearance]=\"appearance\" [floatLabel]=\"floatLabel\" [class.read-only]=\"isReadOnly\" [class.custom-width]=\"hasCustomWidth\"\n [hideRequiredMarker]=\"hideRequiredMarker\" fxFill [subscriptSizing]=\"subscriptSizing\">\n <mat-label *ngIf=\"labelVisible\">{{ olabel | oTranslate }}</mat-label>\n <mat-select [value]=\"getValue()\" #selectModel [id]=\"getAttribute()\" fxFill [formControlName]=\"getAttribute()\" [placeholder]=\"placeHolder\"\n [multiple]=\"getMultiple()\" [required]=\"isRequired\" [panelClass]=\"{ 'o-combo-panel': true, 'o-combo-panel-search': searchable }\"\n (selectionChange)=\"onSelectionChange($event)\" (closed)=\"innerOnBlur($event)\">\n <o-combo-search #comboSearch *ngIf=\"searchable\" [formControl]=\"searchControl\"></o-combo-search>\n\n <mat-select-trigger *ngIf=\"multiple && multipleTriggerLabel\">\n {{ selectModel.selected[0] ? getFirstSelectedValue(): '' }}\n <span *ngIf=\"!isEmpty()\">\n {{ 'INPUT.COMBO.MESSAGE_TRIGGER' | oTranslate: { values: [getFormControl().value.length -1] } }}\n </span>\n </mat-select-trigger>\n\n <mat-select-trigger *ngIf=\"!multiple && !multipleTriggerLabel\">\n <ng-container *ngFor=\"let item of filteredDataArray\">\n <ng-container *ngIf=\"renderer && item[valueColumn] == getValue()\">\n <ng-template *ngTemplateOutlet=\"renderer?.templateref; context:{ value: item }\">\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!renderer && item[valueColumn] == getValue()\">\n {{ getOptionDescriptionValue(item) }}\n </ng-container>\n </ng-container>\n </mat-select-trigger>\n\n <div class=\"o-combo-options-container\">\n <mat-option *ngIf=\"hasNullSelection()\" [value]=\"null\">{{translate ?\n (nullSelectionLabel|oTranslate): nullSelectionLabel}}\n </mat-option>\n <mat-option *ngFor=\"let item of filteredDataArray\" [value]=\"getValueColumn(item)\">\n <ng-container *ngIf=\"renderer\">\n <ng-template *ngTemplateOutlet=\"renderer?.templateref; context:{ value: item }\">\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!renderer\">\n {{ getOptionDescriptionValue(item) }}\n </ng-container>\n </mat-option>\n </div>\n </mat-select>\n\n <button type=\"button\" *ngIf=\"showClearButton\" matSuffix mat-icon-button (click)=\"onClickClearValue($event)\">\n <mat-icon svgIcon=\"ontimize:close\"></mat-icon>\n </button>\n\n <mat-error *oMatError=\"hasError('required')\">\n {{ 'FORM_VALIDATION.REQUIRED' | oTranslate }}\n </mat-error>\n <mat-error *ngFor=\"let oError of getActiveOErrors()\">\n {{ oError.text | oTranslate }}\n </mat-error>\n </mat-form-field>\n\n <o-context-menu *ngIf=\"!this.isReadOnly && this.enabled\">\n <o-context-menu-item attr=\"refresh\" label=\"FORM_SERVICE_COMPONENT.REFRESH\" svg-icon=\"ontimize:autorenew\" (execute)=\"refresh()\">\n </o-context-menu-item>\n </o-context-menu>\n</div>\n", styles: [".o-combo .read-only .mat-mdc-select-arrow-wrapper{visibility:hidden}.o-combo-panel.o-combo-panel-search{height:100%}.o-combo-panel.o-combo-panel-search .o-combo-options-container{height:calc(100% - 3em);overflow:auto}\n"], dependencies: [{ kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i3$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: OMatErrorDirective, selector: "[oMatError]", inputs: ["oMatError"] }, { kind: "component", type: i1$4.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "directive", type: i8.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i8.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i9$1.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "directive", type: i9$1.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: OContextMenuDirective, selector: "[oContextMenu]", inputs: ["oContextMenu", "oContextMenuData"] }, { kind: "component", type: OContextMenuComponent, selector: "o-context-menu", outputs: ["onShow", "onClose"] }, { kind: "component", type: OContextMenuItemComponent, selector: "o-context-menu-item", outputs: ["execute"] }, { kind: "component", type: OComboSearchComponent, selector: "o-combo-search" }, { kind: "pipe", type: OTranslatePipe, name: "oTranslate" }], encapsulation: i0.ViewEncapsulation.None });
17781
18789
  __decorate([
17782
18790
  BooleanInputConverter(),
17783
18791
  __metadata("design:type", Boolean)
@@ -17801,7 +18809,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
17801
18809
  { provide: OFormServiceComponent, useExisting: forwardRef(() => OComboComponent) }
17802
18810
  ], inputs: DEFAULT_INPUTS_O_COMBO, encapsulation: ViewEncapsulation.None, host: {
17803
18811
  '[class.o-combo]': 'true'
17804
- }, template: "<div [formGroup]=\"getFormGroup()\" [matTooltip]=\"tooltip\" [matTooltipClass]=\"tooltipClass\" [matTooltipPosition]=\"tooltipPosition\"\n [matTooltipShowDelay]=\"tooltipShowDelay\" [matTooltipHideDelay]=\"tooltipHideDelay\" [oContextMenu]=\"oContextMenu\">\n\n <mat-form-field [appearance]=\"appearance\" [floatLabel]=\"floatLabel\" [class.read-only]=\"isReadOnly\" [class.custom-width]=\"hasCustomWidth\"\n [hideRequiredMarker]=\"hideRequiredMarker\" fxFill [subscriptSizing]=\"subscriptSizing\">\n <mat-label *ngIf=\"labelVisible\">{{ olabel | oTranslate }}</mat-label>\n <mat-select [value]=\"getValue()\" #selectModel [id]=\"getAttribute()\" fxFill [formControlName]=\"getAttribute()\" [placeholder]=\"placeHolder\"\n [multiple]=\"getMultiple()\" [required]=\"isRequired\" [panelClass]=\"{ 'o-combo-panel': true, 'o-combo-panel-search': searchable }\"\n (selectionChange)=\"onSelectionChange($event)\" (closed)=\"innerOnBlur($event)\">\n <o-combo-search *ngIf=\"searchable\" [formControl]=\"searchControl\"></o-combo-search>\n\n <mat-select-trigger *ngIf=\"multiple && multipleTriggerLabel\">\n {{ selectModel.selected[0] ? getFirstSelectedValue(): '' }}\n <span *ngIf=\"!isEmpty()\">\n {{ 'INPUT.COMBO.MESSAGE_TRIGGER' | oTranslate: { values: [getFormControl().value.length -1] } }}\n </span>\n </mat-select-trigger>\n\n <mat-select-trigger *ngIf=\"!multiple && !multipleTriggerLabel\">\n <ng-container *ngFor=\"let item of filteredDataArray\">\n <ng-container *ngIf=\"renderer && item[valueColumn] == getValue()\">\n <ng-template *ngTemplateOutlet=\"renderer?.templateref; context:{ value: item }\">\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!renderer && item[valueColumn] == getValue()\">\n {{ getOptionDescriptionValue(item) }}\n </ng-container>\n </ng-container>\n </mat-select-trigger>\n\n <div class=\"o-combo-options-container\">\n <mat-option *ngIf=\"hasNullSelection()\" [value]=\"null\">{{translate ?\n (nullSelectionLabel|oTranslate): nullSelectionLabel}}\n </mat-option>\n <mat-option *ngFor=\"let item of filteredDataArray\" [value]=\"getValueColumn(item)\">\n <ng-container *ngIf=\"renderer\">\n <ng-template *ngTemplateOutlet=\"renderer?.templateref; context:{ value: item }\">\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!renderer\">\n {{ getOptionDescriptionValue(item) }}\n </ng-container>\n </mat-option>\n </div>\n </mat-select>\n\n <button type=\"button\" *ngIf=\"showClearButton\" matSuffix mat-icon-button (click)=\"onClickClearValue($event)\">\n <mat-icon svgIcon=\"ontimize:close\"></mat-icon>\n </button>\n\n <mat-error *oMatError=\"hasError('required')\">\n {{ 'FORM_VALIDATION.REQUIRED' | oTranslate }}\n </mat-error>\n <mat-error *ngFor=\"let oError of getActiveOErrors()\">\n {{ oError.text | oTranslate }}\n </mat-error>\n </mat-form-field>\n\n <o-context-menu *ngIf=\"!this.isReadOnly && this.enabled\">\n <o-context-menu-item attr=\"refresh\" label=\"FORM_SERVICE_COMPONENT.REFRESH\" svg-icon=\"ontimize:autorenew\" (execute)=\"refresh()\">\n </o-context-menu-item>\n </o-context-menu>\n</div>\n", styles: [".o-combo .read-only .mat-mdc-select-arrow-wrapper{visibility:hidden}.o-combo-panel.o-combo-panel-search{height:100%}.o-combo-panel.o-combo-panel-search .o-combo-options-container{height:calc(100% - 3em);overflow:auto}\n"] }]
18812
+ }, template: "<div [formGroup]=\"getFormGroup()\" [matTooltip]=\"tooltip\" [matTooltipClass]=\"tooltipClass\" [matTooltipPosition]=\"tooltipPosition\"\n [matTooltipShowDelay]=\"tooltipShowDelay\" [matTooltipHideDelay]=\"tooltipHideDelay\" [oContextMenu]=\"oContextMenu\">\n\n <mat-form-field [appearance]=\"appearance\" [floatLabel]=\"floatLabel\" [class.read-only]=\"isReadOnly\" [class.custom-width]=\"hasCustomWidth\"\n [hideRequiredMarker]=\"hideRequiredMarker\" fxFill [subscriptSizing]=\"subscriptSizing\">\n <mat-label *ngIf=\"labelVisible\">{{ olabel | oTranslate }}</mat-label>\n <mat-select [value]=\"getValue()\" #selectModel [id]=\"getAttribute()\" fxFill [formControlName]=\"getAttribute()\" [placeholder]=\"placeHolder\"\n [multiple]=\"getMultiple()\" [required]=\"isRequired\" [panelClass]=\"{ 'o-combo-panel': true, 'o-combo-panel-search': searchable }\"\n (selectionChange)=\"onSelectionChange($event)\" (closed)=\"innerOnBlur($event)\">\n <o-combo-search #comboSearch *ngIf=\"searchable\" [formControl]=\"searchControl\"></o-combo-search>\n\n <mat-select-trigger *ngIf=\"multiple && multipleTriggerLabel\">\n {{ selectModel.selected[0] ? getFirstSelectedValue(): '' }}\n <span *ngIf=\"!isEmpty()\">\n {{ 'INPUT.COMBO.MESSAGE_TRIGGER' | oTranslate: { values: [getFormControl().value.length -1] } }}\n </span>\n </mat-select-trigger>\n\n <mat-select-trigger *ngIf=\"!multiple && !multipleTriggerLabel\">\n <ng-container *ngFor=\"let item of filteredDataArray\">\n <ng-container *ngIf=\"renderer && item[valueColumn] == getValue()\">\n <ng-template *ngTemplateOutlet=\"renderer?.templateref; context:{ value: item }\">\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!renderer && item[valueColumn] == getValue()\">\n {{ getOptionDescriptionValue(item) }}\n </ng-container>\n </ng-container>\n </mat-select-trigger>\n\n <div class=\"o-combo-options-container\">\n <mat-option *ngIf=\"hasNullSelection()\" [value]=\"null\">{{translate ?\n (nullSelectionLabel|oTranslate): nullSelectionLabel}}\n </mat-option>\n <mat-option *ngFor=\"let item of filteredDataArray\" [value]=\"getValueColumn(item)\">\n <ng-container *ngIf=\"renderer\">\n <ng-template *ngTemplateOutlet=\"renderer?.templateref; context:{ value: item }\">\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!renderer\">\n {{ getOptionDescriptionValue(item) }}\n </ng-container>\n </mat-option>\n </div>\n </mat-select>\n\n <button type=\"button\" *ngIf=\"showClearButton\" matSuffix mat-icon-button (click)=\"onClickClearValue($event)\">\n <mat-icon svgIcon=\"ontimize:close\"></mat-icon>\n </button>\n\n <mat-error *oMatError=\"hasError('required')\">\n {{ 'FORM_VALIDATION.REQUIRED' | oTranslate }}\n </mat-error>\n <mat-error *ngFor=\"let oError of getActiveOErrors()\">\n {{ oError.text | oTranslate }}\n </mat-error>\n </mat-form-field>\n\n <o-context-menu *ngIf=\"!this.isReadOnly && this.enabled\">\n <o-context-menu-item attr=\"refresh\" label=\"FORM_SERVICE_COMPONENT.REFRESH\" svg-icon=\"ontimize:autorenew\" (execute)=\"refresh()\">\n </o-context-menu-item>\n </o-context-menu>\n</div>\n", styles: [".o-combo .read-only .mat-mdc-select-arrow-wrapper{visibility:hidden}.o-combo-panel.o-combo-panel-search{height:100%}.o-combo-panel.o-combo-panel-search .o-combo-options-container{height:calc(100% - 3em);overflow:auto}\n"] }]
17805
18813
  }], ctorParameters: function () {
17806
18814
  return [{ type: OFormComponent, decorators: [{
17807
18815
  type: Optional
@@ -17815,6 +18823,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
17815
18823
  }], selectModel: [{
17816
18824
  type: ViewChild,
17817
18825
  args: ['selectModel']
18826
+ }], comboSearch: [{
18827
+ type: ViewChild,
18828
+ args: ['comboSearch', { static: false }]
17818
18829
  }] } });
17819
18830
 
17820
18831
  const DEFAULT_INPUTS_O_COMBO_RENDERER = [];
@@ -18804,59 +19815,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
18804
19815
  }]
18805
19816
  }] });
18806
19817
 
18807
- class CurrencyUtil {
18808
- static getCurrencyCode(language) {
18809
- const code = this.languageToCurrencyCode[language];
18810
- if (code) {
18811
- return code;
18812
- }
18813
- else {
18814
- return 'EUR';
18815
- }
18816
- }
18817
- static getCurrencyCodeFromSymbol(symbol) {
18818
- const currencyCode = Object.keys(this.currencyCodeToSymbol).find(code => this.currencyCodeToSymbol[code] === symbol);
18819
- return currencyCode;
18820
- }
18821
- }
18822
- CurrencyUtil.languageToCurrencyCode = {
18823
- 'es': 'EUR',
18824
- 'en': 'USD',
18825
- 'pt': 'BRL',
18826
- 'fr': 'EUR',
18827
- 'de': 'EUR',
18828
- 'it': 'EUR',
18829
- 'ja': 'JPY',
18830
- 'zh': 'CNY',
18831
- 'ru': 'RUB',
18832
- 'ar': 'AED',
18833
- 'cr': 'CRC',
18834
- 'ng': 'NGN',
18835
- 'ph': 'PHP',
18836
- 'pl': 'PLN',
18837
- 'py': 'PYG',
18838
- 'th': 'THB',
18839
- 'ua': 'UAH',
18840
- 'vn': 'VND',
18841
- };
18842
- CurrencyUtil.currencyCodeToSymbol = {
18843
- EUR: '€',
18844
- USD: '$',
18845
- BRL: 'R$',
18846
- JPY: '¥',
18847
- CNY: '¥',
18848
- RUB: '₽',
18849
- AED: 'د.إ',
18850
- CRC: '₡',
18851
- NGN: '₦',
18852
- PHP: '₱',
18853
- PLN: 'zł',
18854
- PYG: '₲',
18855
- THB: '฿',
18856
- UAH: '₴',
18857
- VND: '₫',
18858
- };
18859
-
18860
19818
  const DEFAULT_INPUTS_O_CURRENCY_INPUT = [
18861
19819
  'currencySymbol: currency-symbol',
18862
19820
  'currencySymbolPosition: currency-symbol-position'
@@ -25393,60 +26351,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
25393
26351
  }]
25394
26352
  }] });
25395
26353
 
25396
- class OListComponentStateClass extends DefaultServiceComponentStateClass {
25397
- get sortColumns() {
25398
- return this['sort-columns'];
25399
- }
25400
- set sortColumns(value) {
25401
- this['sort-columns'] = value;
25402
- }
25403
- }
25404
-
25405
- class OListComponentStateService extends AbstractComponentStateService {
25406
- initialize(component) {
25407
- this.state = new OListComponentStateClass();
25408
- super.initialize(component);
25409
- }
25410
- initializeState(state) {
25411
- super.initializeState(state);
25412
- }
25413
- getDataToStore() {
25414
- let dataToStore = Object.assign({}, this.state);
25415
- dataToStore['query-rows'] = this.component.queryRows;
25416
- if (!this.component.storePaginationState) {
25417
- delete dataToStore['queryRecordOffset'];
25418
- }
25419
- if (this.component.quickFilter && Util.isDefined(this.component.quickFilterComponent)) {
25420
- dataToStore['quickFilterActiveColumns'] = this.component.quickFilterComponent.getActiveColumns().join(Codes.ARRAY_INPUT_SEPARATOR);
25421
- }
25422
- dataToStore['filter-case-sensitive'] = this.component.isFilterCaseSensitive();
25423
- dataToStore.selection = this.state.selection;
25424
- return dataToStore;
25425
- }
25426
- refreshSelection() {
25427
- this.state.selection = this.getSelectionState();
25428
- }
25429
- getSelectionState() {
25430
- const selection = [];
25431
- if (this.component) {
25432
- const keys = this.component.getKeys();
25433
- this.component.getSelectedItems().forEach(item => {
25434
- const data = {};
25435
- keys.forEach(key => {
25436
- data[key] = item[key];
25437
- });
25438
- selection.push(data);
25439
- });
25440
- }
25441
- return selection;
25442
- }
25443
- }
25444
- OListComponentStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OListComponentStateService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
25445
- OListComponentStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OListComponentStateService });
25446
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OListComponentStateService, decorators: [{
25447
- type: Injectable
25448
- }] });
25449
-
25450
26354
  class OListSkeletonComponent extends OSkeletonComponent {
25451
26355
  constructor(elRef, injector) {
25452
26356
  super(injector);
@@ -25509,7 +26413,9 @@ class OListComponent extends AbstractOServiceComponent {
25509
26413
  }
25510
26414
  ngOnInit() {
25511
26415
  this.initialize();
25512
- this.subscription.add(this.selection.changed.subscribe(() => this.enabledDeleteButton = !this.selection.isEmpty()));
26416
+ this.permissions = this.permissionsService.getListPermissions(this.oattr, this.actRoute);
26417
+ this.actionsPermissions = this.getActionsPermissions(this.permissions);
26418
+ this.setButtonPermissions(this.actionsPermissions);
25513
26419
  }
25514
26420
  ngAfterViewInit() {
25515
26421
  super.afterViewInit();
@@ -25521,6 +26427,7 @@ class OListComponent extends AbstractOServiceComponent {
25521
26427
  if (this.queryOnInit) {
25522
26428
  this.queryData();
25523
26429
  }
26430
+ this.manageCustomPermissions(this.actionsPermissions, '[o-list-toolbar]');
25524
26431
  }
25525
26432
  ngAfterContentInit() {
25526
26433
  this.setListItemDirectivesData();
@@ -25544,6 +26451,7 @@ class OListComponent extends AbstractOServiceComponent {
25544
26451
  if (!Util.isDefined(this.state.totalQueryRecordsNumber)) {
25545
26452
  this.state.totalQueryRecordsNumber = 0;
25546
26453
  }
26454
+ this.permissions = this.permissionsService.getListPermissions(this.oattr, this.actRoute);
25547
26455
  }
25548
26456
  reinitialize(options) {
25549
26457
  super.reinitialize(options);
@@ -25703,7 +26611,7 @@ OListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version
25703
26611
  OntimizeServiceProvider,
25704
26612
  ComponentStateServiceProvider,
25705
26613
  { provide: O_COMPONENT_STATE_SERVICE, useClass: OListComponentStateService },
25706
- ], queries: [{ propertyName: "listItemDirectives", predicate: OListItemDirective }], usesInheritance: true, ngImport: i0, template: "<div class=\"o-list-container\" [style.display]=\"isVisible()? '' : 'none'\" fxFill>\n <div *ngIf=\"loading | async\" fxLayoutAlign=\"center center\" [class.pageable-loading]=\"pageable && state.queryRecordOffset > 0\"\n class=\"spinner-container\">\n <o-list-skeleton></o-list-skeleton>\n </div>\n <o-data-toolbar *ngIf=\"hasControls()\" [title]=\"title\" [show-title]=\"hasTitle()\" class=\"o-list-toolbar\">\n <ng-container o-data-toolbar-projection-start>\n <ng-container *ngIf=\"showButtonsText;else showButtonsWithoutText\">\n <button *ngIf=\"insertButton && !insertButtonFloatable\" class=\"o-list-button text\" type=\"button\" mat-stroked-button aria-label=\"Insert\"\n (click)=\"add($event)\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n <span>{{ 'ADD' | oTranslate }}</span>\n </button>\n\n <button type=\"button\" mat-stroked-button class=\"o-list-button text\" aria-label=\"Refresh\" (click)=\"reloadData()\" *ngIf=\"refreshButton\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n <span>{{ 'REFRESH' | oTranslate }}</span>\n </button>\n\n <button *ngIf=\"deleteButton\" type=\"button\" class=\"o-list-button text\" mat-stroked-button aria-label=\"Delete\" [disabled]=\"!enabledDeleteButton\"\n [class.disabled]=\"!enabledDeleteButton\" (click)=\"remove()\">\n <mat-icon svgIcon=\"ontimize:delete\"></mat-icon>\n <span>{{ 'DELETE' | oTranslate }}</span>\n </button>\n </ng-container>\n <ng-template #showButtonsWithoutText>\n <button *ngIf=\"insertButton && !insertButtonFloatable\" type=\"button\" class=\"o-list-button no-text\" mat-icon-button aria-label=\"Insert\"\n (click)=\"add($event)\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n </button>\n\n <button type=\"button\" mat-icon-button aria-label=\"Refresh\" class=\"o-list-button no-text\" (click)=\"reloadData()\" *ngIf=\"refreshButton\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n </button>\n\n <button *ngIf=\"deleteButton\" type=\"button\" class=\"o-list-button no-text\" mat-icon-button aria-label=\"Delete\" [disabled]=\"!enabledDeleteButton\"\n [class.disabled]=\"!enabledDeleteButton\" (click)=\"remove()\">\n <mat-icon svgIcon=\"ontimize:delete\"></mat-icon>\n </button>\n </ng-template>\n </ng-container>\n <ng-content select=\"[o-list-toolbar][position=start]\" ngProjectAs=\"[o-data-toolbar-custom-projection-start]\">\n </ng-content>\n <ng-content select=\"[o-list-toolbar][position=end]\" ngProjectAs=\"[o-data-toolbar-custom-projection-end]\">\n </ng-content>\n <ng-content select=\"[o-list-toolbar]\" ngProjectAs=\"[o-data-toolbar-custom-projection-start]\">\n </ng-content>\n <ng-container o-data-toolbar-projection-end>\n <o-search-input *ngIf=\"quickFilter\" [filter-case-sensitive]=\"filterCaseSensitive\" [show-case-sensitive-checkbox]=\"showCaseSensitiveCheckbox()\"\n [columns]=\"quickFilterColumns\" [placeholder]=\"quickFilterPlaceholder\" [appearance]=\"quickFilterAppearance\" float-label=\"never\">\n </o-search-input>\n </ng-container>\n </o-data-toolbar>\n <ng-container *ngIf=\"(loading | async) === false\">\n <div fxLayout=\"column\" class=\"o-list-content\" fxFlex=\"1 1 100%\" >\n <!--MAT-LIST-->\n <mat-list (scroll)=\"onScroll($event)\" [class.selectable]=\"selectable\"\n [class.o-list-item-has-buttons]=\"insertButton && (editButtonInRow || detailButtonInRow)\">\n\n <mat-list-item *ngIf=\"!getDataArray().length\" fxLayout=\"row\" fxLayoutAlign=\"center center\" style=\"cursor: default;\">\n <h3 matListItemTitle fxLayout=\"row\" fxLayoutAlign=\"center center\">\n {{ 'TABLE.EMPTY' | oTranslate }}\n <ng-container *ngIf=\"getQuickFilterValue().length > 0\">\n {{ 'TABLE.EMPTY_USING_FILTER' | oTranslate : {values: [getQuickFilterValue()]} }}\n </ng-container>\n </h3>\n </mat-list-item>\n <ng-content></ng-content>\n </mat-list>\n </div>\n <mat-paginator fxFlex=\"0 1 auto\" class=\"o-mat-paginator\" #paginator *ngIf=\"paginationControls\" [length]=\"totalRecords\" [pageSize]=\"queryRows\"\n [pageSizeOptions]=\"pageSizeOptions\" [pageIndex]=\"currentPage\" [showFirstLastButtons]=\"true\" (page)=\"onChangePage($event)\"></mat-paginator>\n\n <!--INSERT BUTTON -->\n <button type=\"button\" *ngIf=\"insertButton && insertButtonFloatable\" mat-fab (click)=\"add($event)\" class=\"add-button add-button-bottom\"\n [class.add-button-bottom]=\"insertButtonPosition ==='bottom'\" [class.add-button-top]=\"insertButtonPosition ==='top'\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n </button>\n</ng-container>\n</div>\n", styles: ["::-webkit-input-placeholder{color:#8e0c39}:-moz-placeholder{color:#8e0c39;opacity:1}::-moz-placeholder{color:#8e0c39;opacity:1}:-ms-input-placeholder{color:#8e0c39}:placeholder-shown{color:#8e0c39}.o-list-container{position:relative;flex-direction:column}.o-list-container .spinner-container{position:absolute;top:0;bottom:0;left:0;right:0;z-index:500}.o-list-container .spinner-container:not(.pageable-loading){top:0}.o-list-container .spinner-container path{stroke-width:5px!important}.o-list-container .mat-mdc-list{overflow:auto}.o-list-container .mat-mdc-list .mdc-list-item--with-three-lines .o-custom-list-item{position:relative}.o-list-container .mat-mdc-list .o-custom-list-item{max-width:100%;width:100%}.o-list-container .mat-mdc-list .o-custom-list-item .o-list-item-icon{cursor:pointer;padding-right:6px}.o-list-container .mat-mdc-list.o-list-item-has-buttons .o-list-item .mat-mdc-list-item{padding-right:72px}.o-list-container .mat-mdc-list .o-list-item.mat-mdc-card{margin:6px 0;padding-bottom:16px}.o-list-container .mat-mdc-list .o-list-item .mat-mdc-list-item .mat-mdc-list-item-unscoped-content{display:flex;align-items:center}.o-list-container .add-button{right:12px;position:absolute}.o-list-container .add-button.add-button-bottom{bottom:12px}.o-list-container .add-button.add-button-top{top:88px}.o-list-container .o-mat-paginator~.add-button.add-button-bottom{bottom:68px}\n"], dependencies: [{ kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: OSearchInputComponent, selector: "o-search-input", inputs: ["placeholder", "label", "width", "float-label", "appearance", "columns", "filter-case-sensitive", "show-case-sensitive-checkbox", "show-menu"], outputs: ["onSearch"] }, { kind: "directive", type: i2.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i2.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i2.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatFabButton, selector: "button[mat-fab]", inputs: ["disabled", "disableRipple", "color", "tabIndex", "extended"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5$1.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i5$1.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i5$1.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "component", type: i10.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: ODataToolbarComponent, selector: "o-data-toolbar", inputs: ["show-title", "title"] }, { kind: "component", type: OListSkeletonComponent, selector: "o-list-skeleton" }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "pipe", type: OTranslatePipe, name: "oTranslate" }], encapsulation: i0.ViewEncapsulation.None });
26614
+ ], queries: [{ propertyName: "listItemDirectives", predicate: OListItemDirective }], usesInheritance: true, ngImport: i0, template: "<div class=\"o-list-container\" [style.display]=\"isVisible()? '' : 'none'\" fxFill>\n <div *ngIf=\"loading | async\" fxLayoutAlign=\"center center\" [class.pageable-loading]=\"pageable && state.queryRecordOffset > 0\"\n class=\"spinner-container\">\n <o-list-skeleton></o-list-skeleton>\n </div>\n <o-data-toolbar *ngIf=\"hasControls()\" [title]=\"title\" [show-title]=\"hasTitle()\" class=\"o-list-toolbar\">\n <ng-container o-data-toolbar-projection-start>\n <ng-container *ngIf=\"showButtonsText;else showButtonsWithoutText\">\n <button *ngIf=\"insertButton && !insertButtonFloatable\" [disabled]=\"!enabledInsertButton\" class=\"o-list-button text\" type=\"button\" mat-stroked-button aria-label=\"Insert\" (click)=\"add($event)\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n <span>{{ 'ADD' | oTranslate }}</span>\n </button>\n\n <button type=\"button\" mat-stroked-button class=\"o-list-button text\" [disabled]=\"!enabledRefreshButton\" aria-label=\"Refresh\" (click)=\"reloadData()\" *ngIf=\"refreshButton\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n <span>{{ 'REFRESH' | oTranslate }}</span>\n </button>\n\n <button *ngIf=\"deleteButton\" type=\"button\" class=\"o-list-button text\" mat-stroked-button aria-label=\"Delete\" [disabled]=\"!enabledDeleteButton\"\n [class.disabled]=\"!enabledDeleteButton\" (click)=\"remove()\">\n <mat-icon svgIcon=\"ontimize:delete\"></mat-icon>\n <span>{{ 'DELETE' | oTranslate }}</span>\n </button>\n </ng-container>\n <ng-template #showButtonsWithoutText>\n <button *ngIf=\"insertButton && !insertButtonFloatable\" type=\"button\" [disabled]=\"!enabledInsertButton\" class=\"o-list-button no-text\" mat-icon-button aria-label=\"Insert\" (click)=\"add($event)\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n </button>\n\n <button type=\"button\" mat-icon-button aria-label=\"Refresh\" [disabled]=\"!enabledRefreshButton\" class=\"o-list-button no-text\" (click)=\"reloadData()\" *ngIf=\"refreshButton\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n </button>\n\n <button *ngIf=\"deleteButton\" type=\"button\" class=\"o-list-button no-text\" mat-icon-button aria-label=\"Delete\" [disabled]=\"!enabledDeleteButton\"\n [class.disabled]=\"!enabledDeleteButton\" (click)=\"remove()\">\n <mat-icon svgIcon=\"ontimize:delete\"></mat-icon>\n </button>\n </ng-template>\n </ng-container>\n <ng-content select=\"[o-list-toolbar][position=start]\" ngProjectAs=\"[o-data-toolbar-custom-projection-start]\">\n </ng-content>\n <ng-content select=\"[o-list-toolbar][position=end]\" ngProjectAs=\"[o-data-toolbar-custom-projection-end]\">\n </ng-content>\n <ng-content select=\"[o-list-toolbar]\" ngProjectAs=\"[o-data-toolbar-custom-projection-start]\">\n </ng-content>\n <ng-container o-data-toolbar-projection-end>\n <o-search-input *ngIf=\"quickFilter\" [filter-case-sensitive]=\"filterCaseSensitive\" [show-case-sensitive-checkbox]=\"showCaseSensitiveCheckbox()\"\n [columns]=\"quickFilterColumns\" [placeholder]=\"quickFilterPlaceholder\" [appearance]=\"quickFilterAppearance\" float-label=\"never\">\n </o-search-input>\n </ng-container>\n </o-data-toolbar>\n <ng-container *ngIf=\"(loading | async) === false\">\n <div fxLayout=\"column\" class=\"o-list-content\" fxFlex=\"1 1 100%\" >\n <!--MAT-LIST-->\n <mat-list (scroll)=\"onScroll($event)\" [class.selectable]=\"selectable\"\n [class.o-list-item-has-buttons]=\"insertButton && (editButtonInRow || detailButtonInRow)\">\n\n <mat-list-item *ngIf=\"!getDataArray().length\" fxLayout=\"row\" fxLayoutAlign=\"center center\" style=\"cursor: default;\">\n <h3 matListItemTitle fxLayout=\"row\" fxLayoutAlign=\"center center\">\n {{ 'TABLE.EMPTY' | oTranslate }}\n <ng-container *ngIf=\"getQuickFilterValue().length > 0\">\n {{ 'TABLE.EMPTY_USING_FILTER' | oTranslate : {values: [getQuickFilterValue()]} }}\n </ng-container>\n </h3>\n </mat-list-item>\n <ng-content></ng-content>\n </mat-list>\n </div>\n <mat-paginator fxFlex=\"0 1 auto\" class=\"o-mat-paginator\" #paginator *ngIf=\"paginationControls\" [length]=\"totalRecords\" [pageSize]=\"queryRows\"\n [pageSizeOptions]=\"pageSizeOptions\" [pageIndex]=\"currentPage\" [showFirstLastButtons]=\"true\" (page)=\"onChangePage($event)\"></mat-paginator>\n\n <!--INSERT BUTTON -->\n <button type=\"button\" *ngIf=\"insertButton && insertButtonFloatable\" mat-fab (click)=\"add($event)\" class=\"add-button add-button-bottom\"\n [class.add-button-bottom]=\"insertButtonPosition ==='bottom'\" [class.add-button-top]=\"insertButtonPosition ==='top'\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n </button>\n</ng-container>\n</div>\n", styles: ["::-webkit-input-placeholder{color:#8e0c39}:-moz-placeholder{color:#8e0c39;opacity:1}::-moz-placeholder{color:#8e0c39;opacity:1}:-ms-input-placeholder{color:#8e0c39}:placeholder-shown{color:#8e0c39}.o-list-container{position:relative;flex-direction:column}.o-list-container .spinner-container{position:absolute;top:0;bottom:0;left:0;right:0;z-index:500}.o-list-container .spinner-container:not(.pageable-loading){top:0}.o-list-container .spinner-container path{stroke-width:5px!important}.o-list-container .mat-mdc-list{overflow:auto}.o-list-container .mat-mdc-list .mdc-list-item--with-three-lines .o-custom-list-item{position:relative}.o-list-container .mat-mdc-list .o-custom-list-item{max-width:100%;width:100%}.o-list-container .mat-mdc-list .o-custom-list-item .o-list-item-icon{cursor:pointer;padding-right:6px}.o-list-container .mat-mdc-list.o-list-item-has-buttons .o-list-item .mat-mdc-list-item{padding-right:72px}.o-list-container .mat-mdc-list .o-list-item.mat-mdc-card{margin:6px 0;padding-bottom:16px}.o-list-container .mat-mdc-list .o-list-item .mat-mdc-list-item .mat-mdc-list-item-unscoped-content{display:flex;align-items:center}.o-list-container .add-button{right:12px;position:absolute}.o-list-container .add-button.add-button-bottom{bottom:12px}.o-list-container .add-button.add-button-top{top:88px}.o-list-container .o-mat-paginator~.add-button.add-button-bottom{bottom:68px}\n"], dependencies: [{ kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: OSearchInputComponent, selector: "o-search-input", inputs: ["placeholder", "label", "width", "float-label", "appearance", "columns", "filter-case-sensitive", "show-case-sensitive-checkbox", "show-menu"], outputs: ["onSearch"] }, { kind: "directive", type: i2.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i2.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i2.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatFabButton, selector: "button[mat-fab]", inputs: ["disabled", "disableRipple", "color", "tabIndex", "extended"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5$1.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i5$1.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i5$1.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "component", type: i10.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: ODataToolbarComponent, selector: "o-data-toolbar", inputs: ["show-title", "title"] }, { kind: "component", type: OListSkeletonComponent, selector: "o-list-skeleton" }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "pipe", type: OTranslatePipe, name: "oTranslate" }], encapsulation: i0.ViewEncapsulation.None });
25707
26615
  __decorate([
25708
26616
  BooleanInputConverter(),
25709
26617
  __metadata("design:type", Boolean)
@@ -25732,7 +26640,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
25732
26640
  { provide: O_COMPONENT_STATE_SERVICE, useClass: OListComponentStateService },
25733
26641
  ], inputs: DEFAULT_INPUTS_O_LIST, outputs: DEFAULT_OUTPUTS_O_LIST, encapsulation: ViewEncapsulation.None, host: {
25734
26642
  '[class.o-list]': 'true'
25735
- }, template: "<div class=\"o-list-container\" [style.display]=\"isVisible()? '' : 'none'\" fxFill>\n <div *ngIf=\"loading | async\" fxLayoutAlign=\"center center\" [class.pageable-loading]=\"pageable && state.queryRecordOffset > 0\"\n class=\"spinner-container\">\n <o-list-skeleton></o-list-skeleton>\n </div>\n <o-data-toolbar *ngIf=\"hasControls()\" [title]=\"title\" [show-title]=\"hasTitle()\" class=\"o-list-toolbar\">\n <ng-container o-data-toolbar-projection-start>\n <ng-container *ngIf=\"showButtonsText;else showButtonsWithoutText\">\n <button *ngIf=\"insertButton && !insertButtonFloatable\" class=\"o-list-button text\" type=\"button\" mat-stroked-button aria-label=\"Insert\"\n (click)=\"add($event)\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n <span>{{ 'ADD' | oTranslate }}</span>\n </button>\n\n <button type=\"button\" mat-stroked-button class=\"o-list-button text\" aria-label=\"Refresh\" (click)=\"reloadData()\" *ngIf=\"refreshButton\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n <span>{{ 'REFRESH' | oTranslate }}</span>\n </button>\n\n <button *ngIf=\"deleteButton\" type=\"button\" class=\"o-list-button text\" mat-stroked-button aria-label=\"Delete\" [disabled]=\"!enabledDeleteButton\"\n [class.disabled]=\"!enabledDeleteButton\" (click)=\"remove()\">\n <mat-icon svgIcon=\"ontimize:delete\"></mat-icon>\n <span>{{ 'DELETE' | oTranslate }}</span>\n </button>\n </ng-container>\n <ng-template #showButtonsWithoutText>\n <button *ngIf=\"insertButton && !insertButtonFloatable\" type=\"button\" class=\"o-list-button no-text\" mat-icon-button aria-label=\"Insert\"\n (click)=\"add($event)\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n </button>\n\n <button type=\"button\" mat-icon-button aria-label=\"Refresh\" class=\"o-list-button no-text\" (click)=\"reloadData()\" *ngIf=\"refreshButton\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n </button>\n\n <button *ngIf=\"deleteButton\" type=\"button\" class=\"o-list-button no-text\" mat-icon-button aria-label=\"Delete\" [disabled]=\"!enabledDeleteButton\"\n [class.disabled]=\"!enabledDeleteButton\" (click)=\"remove()\">\n <mat-icon svgIcon=\"ontimize:delete\"></mat-icon>\n </button>\n </ng-template>\n </ng-container>\n <ng-content select=\"[o-list-toolbar][position=start]\" ngProjectAs=\"[o-data-toolbar-custom-projection-start]\">\n </ng-content>\n <ng-content select=\"[o-list-toolbar][position=end]\" ngProjectAs=\"[o-data-toolbar-custom-projection-end]\">\n </ng-content>\n <ng-content select=\"[o-list-toolbar]\" ngProjectAs=\"[o-data-toolbar-custom-projection-start]\">\n </ng-content>\n <ng-container o-data-toolbar-projection-end>\n <o-search-input *ngIf=\"quickFilter\" [filter-case-sensitive]=\"filterCaseSensitive\" [show-case-sensitive-checkbox]=\"showCaseSensitiveCheckbox()\"\n [columns]=\"quickFilterColumns\" [placeholder]=\"quickFilterPlaceholder\" [appearance]=\"quickFilterAppearance\" float-label=\"never\">\n </o-search-input>\n </ng-container>\n </o-data-toolbar>\n <ng-container *ngIf=\"(loading | async) === false\">\n <div fxLayout=\"column\" class=\"o-list-content\" fxFlex=\"1 1 100%\" >\n <!--MAT-LIST-->\n <mat-list (scroll)=\"onScroll($event)\" [class.selectable]=\"selectable\"\n [class.o-list-item-has-buttons]=\"insertButton && (editButtonInRow || detailButtonInRow)\">\n\n <mat-list-item *ngIf=\"!getDataArray().length\" fxLayout=\"row\" fxLayoutAlign=\"center center\" style=\"cursor: default;\">\n <h3 matListItemTitle fxLayout=\"row\" fxLayoutAlign=\"center center\">\n {{ 'TABLE.EMPTY' | oTranslate }}\n <ng-container *ngIf=\"getQuickFilterValue().length > 0\">\n {{ 'TABLE.EMPTY_USING_FILTER' | oTranslate : {values: [getQuickFilterValue()]} }}\n </ng-container>\n </h3>\n </mat-list-item>\n <ng-content></ng-content>\n </mat-list>\n </div>\n <mat-paginator fxFlex=\"0 1 auto\" class=\"o-mat-paginator\" #paginator *ngIf=\"paginationControls\" [length]=\"totalRecords\" [pageSize]=\"queryRows\"\n [pageSizeOptions]=\"pageSizeOptions\" [pageIndex]=\"currentPage\" [showFirstLastButtons]=\"true\" (page)=\"onChangePage($event)\"></mat-paginator>\n\n <!--INSERT BUTTON -->\n <button type=\"button\" *ngIf=\"insertButton && insertButtonFloatable\" mat-fab (click)=\"add($event)\" class=\"add-button add-button-bottom\"\n [class.add-button-bottom]=\"insertButtonPosition ==='bottom'\" [class.add-button-top]=\"insertButtonPosition ==='top'\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n </button>\n</ng-container>\n</div>\n", styles: ["::-webkit-input-placeholder{color:#8e0c39}:-moz-placeholder{color:#8e0c39;opacity:1}::-moz-placeholder{color:#8e0c39;opacity:1}:-ms-input-placeholder{color:#8e0c39}:placeholder-shown{color:#8e0c39}.o-list-container{position:relative;flex-direction:column}.o-list-container .spinner-container{position:absolute;top:0;bottom:0;left:0;right:0;z-index:500}.o-list-container .spinner-container:not(.pageable-loading){top:0}.o-list-container .spinner-container path{stroke-width:5px!important}.o-list-container .mat-mdc-list{overflow:auto}.o-list-container .mat-mdc-list .mdc-list-item--with-three-lines .o-custom-list-item{position:relative}.o-list-container .mat-mdc-list .o-custom-list-item{max-width:100%;width:100%}.o-list-container .mat-mdc-list .o-custom-list-item .o-list-item-icon{cursor:pointer;padding-right:6px}.o-list-container .mat-mdc-list.o-list-item-has-buttons .o-list-item .mat-mdc-list-item{padding-right:72px}.o-list-container .mat-mdc-list .o-list-item.mat-mdc-card{margin:6px 0;padding-bottom:16px}.o-list-container .mat-mdc-list .o-list-item .mat-mdc-list-item .mat-mdc-list-item-unscoped-content{display:flex;align-items:center}.o-list-container .add-button{right:12px;position:absolute}.o-list-container .add-button.add-button-bottom{bottom:12px}.o-list-container .add-button.add-button-top{top:88px}.o-list-container .o-mat-paginator~.add-button.add-button-bottom{bottom:68px}\n"] }]
26643
+ }, template: "<div class=\"o-list-container\" [style.display]=\"isVisible()? '' : 'none'\" fxFill>\n <div *ngIf=\"loading | async\" fxLayoutAlign=\"center center\" [class.pageable-loading]=\"pageable && state.queryRecordOffset > 0\"\n class=\"spinner-container\">\n <o-list-skeleton></o-list-skeleton>\n </div>\n <o-data-toolbar *ngIf=\"hasControls()\" [title]=\"title\" [show-title]=\"hasTitle()\" class=\"o-list-toolbar\">\n <ng-container o-data-toolbar-projection-start>\n <ng-container *ngIf=\"showButtonsText;else showButtonsWithoutText\">\n <button *ngIf=\"insertButton && !insertButtonFloatable\" [disabled]=\"!enabledInsertButton\" class=\"o-list-button text\" type=\"button\" mat-stroked-button aria-label=\"Insert\" (click)=\"add($event)\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n <span>{{ 'ADD' | oTranslate }}</span>\n </button>\n\n <button type=\"button\" mat-stroked-button class=\"o-list-button text\" [disabled]=\"!enabledRefreshButton\" aria-label=\"Refresh\" (click)=\"reloadData()\" *ngIf=\"refreshButton\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n <span>{{ 'REFRESH' | oTranslate }}</span>\n </button>\n\n <button *ngIf=\"deleteButton\" type=\"button\" class=\"o-list-button text\" mat-stroked-button aria-label=\"Delete\" [disabled]=\"!enabledDeleteButton\"\n [class.disabled]=\"!enabledDeleteButton\" (click)=\"remove()\">\n <mat-icon svgIcon=\"ontimize:delete\"></mat-icon>\n <span>{{ 'DELETE' | oTranslate }}</span>\n </button>\n </ng-container>\n <ng-template #showButtonsWithoutText>\n <button *ngIf=\"insertButton && !insertButtonFloatable\" type=\"button\" [disabled]=\"!enabledInsertButton\" class=\"o-list-button no-text\" mat-icon-button aria-label=\"Insert\" (click)=\"add($event)\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n </button>\n\n <button type=\"button\" mat-icon-button aria-label=\"Refresh\" [disabled]=\"!enabledRefreshButton\" class=\"o-list-button no-text\" (click)=\"reloadData()\" *ngIf=\"refreshButton\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n </button>\n\n <button *ngIf=\"deleteButton\" type=\"button\" class=\"o-list-button no-text\" mat-icon-button aria-label=\"Delete\" [disabled]=\"!enabledDeleteButton\"\n [class.disabled]=\"!enabledDeleteButton\" (click)=\"remove()\">\n <mat-icon svgIcon=\"ontimize:delete\"></mat-icon>\n </button>\n </ng-template>\n </ng-container>\n <ng-content select=\"[o-list-toolbar][position=start]\" ngProjectAs=\"[o-data-toolbar-custom-projection-start]\">\n </ng-content>\n <ng-content select=\"[o-list-toolbar][position=end]\" ngProjectAs=\"[o-data-toolbar-custom-projection-end]\">\n </ng-content>\n <ng-content select=\"[o-list-toolbar]\" ngProjectAs=\"[o-data-toolbar-custom-projection-start]\">\n </ng-content>\n <ng-container o-data-toolbar-projection-end>\n <o-search-input *ngIf=\"quickFilter\" [filter-case-sensitive]=\"filterCaseSensitive\" [show-case-sensitive-checkbox]=\"showCaseSensitiveCheckbox()\"\n [columns]=\"quickFilterColumns\" [placeholder]=\"quickFilterPlaceholder\" [appearance]=\"quickFilterAppearance\" float-label=\"never\">\n </o-search-input>\n </ng-container>\n </o-data-toolbar>\n <ng-container *ngIf=\"(loading | async) === false\">\n <div fxLayout=\"column\" class=\"o-list-content\" fxFlex=\"1 1 100%\" >\n <!--MAT-LIST-->\n <mat-list (scroll)=\"onScroll($event)\" [class.selectable]=\"selectable\"\n [class.o-list-item-has-buttons]=\"insertButton && (editButtonInRow || detailButtonInRow)\">\n\n <mat-list-item *ngIf=\"!getDataArray().length\" fxLayout=\"row\" fxLayoutAlign=\"center center\" style=\"cursor: default;\">\n <h3 matListItemTitle fxLayout=\"row\" fxLayoutAlign=\"center center\">\n {{ 'TABLE.EMPTY' | oTranslate }}\n <ng-container *ngIf=\"getQuickFilterValue().length > 0\">\n {{ 'TABLE.EMPTY_USING_FILTER' | oTranslate : {values: [getQuickFilterValue()]} }}\n </ng-container>\n </h3>\n </mat-list-item>\n <ng-content></ng-content>\n </mat-list>\n </div>\n <mat-paginator fxFlex=\"0 1 auto\" class=\"o-mat-paginator\" #paginator *ngIf=\"paginationControls\" [length]=\"totalRecords\" [pageSize]=\"queryRows\"\n [pageSizeOptions]=\"pageSizeOptions\" [pageIndex]=\"currentPage\" [showFirstLastButtons]=\"true\" (page)=\"onChangePage($event)\"></mat-paginator>\n\n <!--INSERT BUTTON -->\n <button type=\"button\" *ngIf=\"insertButton && insertButtonFloatable\" mat-fab (click)=\"add($event)\" class=\"add-button add-button-bottom\"\n [class.add-button-bottom]=\"insertButtonPosition ==='bottom'\" [class.add-button-top]=\"insertButtonPosition ==='top'\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n </button>\n</ng-container>\n</div>\n", styles: ["::-webkit-input-placeholder{color:#8e0c39}:-moz-placeholder{color:#8e0c39;opacity:1}::-moz-placeholder{color:#8e0c39;opacity:1}:-ms-input-placeholder{color:#8e0c39}:placeholder-shown{color:#8e0c39}.o-list-container{position:relative;flex-direction:column}.o-list-container .spinner-container{position:absolute;top:0;bottom:0;left:0;right:0;z-index:500}.o-list-container .spinner-container:not(.pageable-loading){top:0}.o-list-container .spinner-container path{stroke-width:5px!important}.o-list-container .mat-mdc-list{overflow:auto}.o-list-container .mat-mdc-list .mdc-list-item--with-three-lines .o-custom-list-item{position:relative}.o-list-container .mat-mdc-list .o-custom-list-item{max-width:100%;width:100%}.o-list-container .mat-mdc-list .o-custom-list-item .o-list-item-icon{cursor:pointer;padding-right:6px}.o-list-container .mat-mdc-list.o-list-item-has-buttons .o-list-item .mat-mdc-list-item{padding-right:72px}.o-list-container .mat-mdc-list .o-list-item.mat-mdc-card{margin:6px 0;padding-bottom:16px}.o-list-container .mat-mdc-list .o-list-item .mat-mdc-list-item .mat-mdc-list-item-unscoped-content{display:flex;align-items:center}.o-list-container .add-button{right:12px;position:absolute}.o-list-container .add-button.add-button-bottom{bottom:12px}.o-list-container .add-button.add-button-top{top:88px}.o-list-container .o-mat-paginator~.add-button.add-button-bottom{bottom:68px}\n"] }]
25736
26644
  }], ctorParameters: function () {
25737
26645
  return [{ type: i0.Injector }, { type: i0.ElementRef }, { type: OFormComponent, decorators: [{
25738
26646
  type: Optional
@@ -25855,6 +26763,8 @@ class OListItemTextRenderer {
25855
26763
  if (this.secondaryText === undefined) {
25856
26764
  linesNo--;
25857
26765
  }
26766
+ this._listItem._innerListItem._lines = this.lines;
26767
+ this._listItem._innerListItem._titles = this.titles;
25858
26768
  this._listItem._innerListItem.lines = linesNo;
25859
26769
  listItem.querySelector('.mat-mdc-list-item').remove();
25860
26770
  }
@@ -25891,14 +26801,20 @@ class OListItemTextRenderer {
25891
26801
  }
25892
26802
  }
25893
26803
  OListItemTextRenderer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OListItemTextRenderer, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.Injector }, { token: OListItemComponent }], target: i0.ɵɵFactoryTarget.Directive });
25894
- OListItemTextRenderer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: OListItemTextRenderer, inputs: { title: "title", primaryText: ["primary-text", "primaryText"], secondaryText: ["secondary-text", "secondaryText"], icon: "icon" }, outputs: { onIconClick: "icon-action" }, ngImport: i0 });
26804
+ OListItemTextRenderer.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: OListItemTextRenderer, inputs: { title: "title", primaryText: ["primary-text", "primaryText"], secondaryText: ["secondary-text", "secondaryText"], icon: "icon" }, outputs: { onIconClick: "icon-action" }, viewQueries: [{ propertyName: "titles", predicate: MatListItemTitle, descendants: true }, { propertyName: "lines", predicate: MatListItemLine, descendants: true }], ngImport: i0 });
25895
26805
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OListItemTextRenderer, decorators: [{
25896
26806
  type: Directive,
25897
26807
  args: [{
25898
26808
  inputs: DEFAULT_INPUTS_O_TEXT_RENDERER,
25899
26809
  outputs: DEFAULT_OUTPUTS_O_TEXT_RENDERER
25900
26810
  }]
25901
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.Injector }, { type: OListItemComponent }]; } });
26811
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.Injector }, { type: OListItemComponent }]; }, propDecorators: { titles: [{
26812
+ type: ViewChildren,
26813
+ args: [MatListItemTitle]
26814
+ }], lines: [{
26815
+ type: ViewChildren,
26816
+ args: [MatListItemLine]
26817
+ }] } });
25902
26818
 
25903
26819
  const DEFAULT_INPUTS_O_LIST_ITEM_AVATAR = [
25904
26820
  'avatar',
@@ -26229,405 +27145,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
26229
27145
  }]
26230
27146
  }] });
26231
27147
 
26232
- class OTableComponentStateClass extends DefaultServiceComponentStateClass {
26233
- constructor() {
26234
- super(...arguments);
26235
- this['grouped-column-types'] = [];
26236
- }
26237
- get filterBuilderValues() {
26238
- return this['filter-builder-values'];
26239
- }
26240
- set filterBuilderValues(value) {
26241
- this['filter-builder-values'] = value;
26242
- }
26243
- get selectColumnVisible() {
26244
- return this['select-column-visible'];
26245
- }
26246
- set selectColumnVisible(value) {
26247
- this['select-column-visible'] = value;
26248
- }
26249
- get quickFilterValue() {
26250
- return this['filter'];
26251
- }
26252
- set quickFilterValue(value) {
26253
- this['filter'] = value;
26254
- }
26255
- get columnsDisplay() {
26256
- return this['oColumns-display'];
26257
- }
26258
- set columnsDisplay(value) {
26259
- this['oColumns-display'] = value;
26260
- }
26261
- getColumnDisplay(oCol) {
26262
- return (this.columnsDisplay || []).find(col => col.attr === oCol.attr);
26263
- }
26264
- get initialConfiguration() {
26265
- return this['initial-configuration'];
26266
- }
26267
- set initialConfiguration(value) {
26268
- this['initial-configuration'] = value;
26269
- }
26270
- get sortColumns() {
26271
- return this['sort-columns'];
26272
- }
26273
- set sortColumns(value) {
26274
- this['sort-columns'] = value;
26275
- }
26276
- get groupedColumnTypes() {
26277
- return this['grouped-column-types'];
26278
- }
26279
- set groupedColumnTypes(value) {
26280
- this['grouped-column-types'] = value;
26281
- }
26282
- get filterColumns() {
26283
- return this['filter-columns'];
26284
- }
26285
- set filterColumns(value) {
26286
- this['filter-columns'] = value;
26287
- }
26288
- get filterColumnActiveByDefault() {
26289
- return this['filter-column-active-by-default'];
26290
- }
26291
- get groupedColumns() {
26292
- return this['grouped-columns'];
26293
- }
26294
- set groupedColumns(value) {
26295
- this['grouped-columns'] = value;
26296
- }
26297
- get columnValueFilters() {
26298
- return this['column-value-filters'] || [];
26299
- }
26300
- set columnValueFilters(value) {
26301
- this['column-value-filters'] = value;
26302
- }
26303
- get storedFilters() {
26304
- return this['user-stored-filters'] || [];
26305
- }
26306
- addStoredFilter(filter) {
26307
- if (!Util.isDefined(this['user-stored-filters'])) {
26308
- this['user-stored-filters'] = [];
26309
- }
26310
- this.storedFilters.push(filter);
26311
- }
26312
- deleteStoredFilter(filterName) {
26313
- const index = this.storedFilters.findIndex((item) => item.name === filterName);
26314
- if (index >= 0) {
26315
- this.storedFilters.splice(index, 1);
26316
- }
26317
- }
26318
- getStoredFilter(filterName) {
26319
- let result;
26320
- const filter = this.storedFilters.find((item) => item.name === filterName);
26321
- if (filter) {
26322
- result = filter['stored-filter'];
26323
- }
26324
- return result;
26325
- }
26326
- applyFilter(filterName) {
26327
- const filter = this.getStoredFilter(filterName);
26328
- if (filter) {
26329
- this.columnValueFilters = filter['column-value-filters'];
26330
- this.quickFilterValue = filter['filter'];
26331
- this.filterCaseSensitive = filter['filter-case-sensitive'];
26332
- this.filterBuilderValues = filter['filter-builder-values'];
26333
- this.oColumns = filter['oColumns'];
26334
- }
26335
- }
26336
- get storedConfigurations() {
26337
- return this['user-stored-configurations'] || [];
26338
- }
26339
- addStoredConfiguration(configuration) {
26340
- if (!Util.isDefined(this['user-stored-configurations'])) {
26341
- this['user-stored-configurations'] = [];
26342
- }
26343
- this.storedConfigurations.push(configuration);
26344
- }
26345
- deleteStoredConfiguration(configurationName) {
26346
- const index = this.storedConfigurations.findIndex((item) => item.name === configurationName);
26347
- if (index >= 0) {
26348
- this.storedConfigurations.splice(index, 1);
26349
- }
26350
- }
26351
- getStoredConfiguration(configurationName) {
26352
- return this.storedConfigurations.find((item) => item.name === configurationName);
26353
- }
26354
- applyConfiguration(configurationName) {
26355
- const configuration = this.getStoredConfiguration(configurationName);
26356
- if (configuration) {
26357
- const properties = configuration['stored-properties'] || [];
26358
- const conf = configuration['stored-configuration'];
26359
- this.copyPropertiesFromConfiguration(properties, conf);
26360
- }
26361
- }
26362
- reset(pageable) {
26363
- const result = {
26364
- 'user-stored-filters': this.storedFilters,
26365
- 'user-stored-configurations': this.storedConfigurations
26366
- };
26367
- if (pageable) {
26368
- result['totalQueryRecordsNumber'] = this.totalQueryRecordsNumber;
26369
- }
26370
- result['currentPage'] = 0;
26371
- Object.assign(this, {});
26372
- Object.assign(this, result);
26373
- }
26374
- copyPropertiesFromConfiguration(properties, configuration) {
26375
- properties.forEach(property => {
26376
- switch (property) {
26377
- case 'sort-columns':
26378
- this.sortColumns = configuration['sort-columns'];
26379
- break;
26380
- case 'oColumns-display':
26381
- this.columnsDisplay = configuration['oColumns-display'];
26382
- this.selectColumnVisible = configuration['select-column-visible'];
26383
- break;
26384
- case 'quick-filter':
26385
- case 'columns-filter':
26386
- this.columnValueFilters = configuration['column-value-filters'];
26387
- break;
26388
- case 'grouped-columns':
26389
- this.groupedColumns = configuration['grouped-columns'];
26390
- break;
26391
- case 'page':
26392
- this.currentPage = configuration['currentPage'];
26393
- this.totalQueryRecordsNumber = configuration['totalQueryRecordsNumber'];
26394
- this.queryRecordOffset = configuration['queryRecordOffset'];
26395
- this.queryRows = configuration['query-rows'];
26396
- break;
26397
- case 'filter-builder':
26398
- this.filterBuilderValues = configuration['filter-builder'];
26399
- break;
26400
- }
26401
- });
26402
- }
26403
- }
26404
-
26405
- class OTableComponentStateService extends AbstractComponentStateService {
26406
- initialize(component) {
26407
- this.state = new OTableComponentStateClass();
26408
- super.initialize(component);
26409
- }
26410
- initializeState(state) {
26411
- super.initializeState(state);
26412
- const initialConfigurationRawObj = state.initialConfiguration || {};
26413
- state.initialConfiguration = new OTableComponentStateClass();
26414
- state.initialConfiguration.setData(initialConfigurationRawObj);
26415
- }
26416
- refreshSelection() {
26417
- this.state.selection = this.getSelectionState();
26418
- }
26419
- getDataToStore() {
26420
- const dataToStore = {};
26421
- const propertiesKeys = [
26422
- 'sort-columns',
26423
- 'oColumns-display',
26424
- 'columns-filter',
26425
- 'quick-filter',
26426
- 'page',
26427
- 'selection',
26428
- 'initial-configuration',
26429
- 'filter-columns',
26430
- 'filter-column-active',
26431
- 'grouped-columns',
26432
- 'grouped-column-types',
26433
- 'user-stored-filters',
26434
- 'user-stored-configurations'
26435
- ];
26436
- Object.assign(dataToStore, this.getTablePropertiesToStore(propertiesKeys));
26437
- return dataToStore;
26438
- }
26439
- storeFilter(filter) {
26440
- let newFilter = { name: filter.name, description: filter.description };
26441
- const storedFilter = {};
26442
- Object.assign(storedFilter, this.getColumnFiltersState());
26443
- Object.assign(storedFilter, this.getColumnsQuickFilterState());
26444
- Object.assign(storedFilter, this.getFilterBuilderState());
26445
- newFilter['stored-filter'] = storedFilter;
26446
- this.state.addStoredFilter(newFilter);
26447
- }
26448
- storeConfiguration(configurationAgs, tableProperties) {
26449
- const newConfiguration = {};
26450
- this.component.storePaginationState = true;
26451
- const storedConfiguration = this.getTablePropertiesToStore(tableProperties);
26452
- this.component.storePaginationState = false;
26453
- newConfiguration['stored-configuration'] = storedConfiguration;
26454
- Object.assign(newConfiguration, configurationAgs);
26455
- newConfiguration['stored-properties'] = tableProperties;
26456
- this.state.addStoredConfiguration(newConfiguration);
26457
- }
26458
- getTablePropertiesToStore(properties) {
26459
- const result = {};
26460
- properties.forEach(prop => {
26461
- Object.assign(result, this.getTablePropertyToStore(prop));
26462
- });
26463
- return result;
26464
- }
26465
- getTablePropertyToStore(property) {
26466
- let result = {};
26467
- switch (property) {
26468
- case 'sort-columns':
26469
- result = this.getSortState();
26470
- break;
26471
- case 'oColumns-display':
26472
- result = this.getColumnsDisplayState();
26473
- break;
26474
- case 'quick-filter':
26475
- result = this.getColumnsQuickFilterState();
26476
- break;
26477
- case 'columns-filter':
26478
- result = this.getColumnFiltersState();
26479
- break;
26480
- case 'page':
26481
- result = this.getPageState();
26482
- break;
26483
- case 'selection':
26484
- result['selection'] = this.getSelectionState();
26485
- break;
26486
- case 'initial-configuration':
26487
- result = this.getInitialConfigurationState();
26488
- break;
26489
- case 'filter-column-active':
26490
- result['filter-column-active'] = this.component.isColumnFiltersActive;
26491
- break;
26492
- case 'filter-columns':
26493
- result['filter-columns'] = this.component.filterColumns;
26494
- break;
26495
- case 'grouped-columns':
26496
- result['grouped-columns'] = this.component.groupedColumnsArray;
26497
- break;
26498
- case 'grouped-column-types':
26499
- result['grouped-column-types'] = this.component.groupedColumnTypes;
26500
- break;
26501
- case 'user-stored-filters':
26502
- result['user-stored-filters'] = this.state.storedFilters;
26503
- break;
26504
- case 'user-stored-configurations':
26505
- result['user-stored-configurations'] = this.state.storedConfigurations;
26506
- break;
26507
- case 'filter-builder':
26508
- if (this.component.filterBuilder) {
26509
- result['filter-builder'] = this.component.filterBuilder.getFilterValues();
26510
- }
26511
- break;
26512
- }
26513
- return result;
26514
- }
26515
- getColumnsDisplayState() {
26516
- const oColumnsData = [];
26517
- this.component.oTableOptions.columns.forEach((oCol) => {
26518
- oColumnsData.push({
26519
- attr: oCol.attr,
26520
- visible: oCol.visible,
26521
- width: oCol.getWidthToStore()
26522
- });
26523
- });
26524
- return {
26525
- 'oColumns-display': oColumnsData,
26526
- 'select-column-visible': this.component.oTableOptions.selectColumn.visible
26527
- };
26528
- }
26529
- getColumnsQuickFilterState() {
26530
- const tableOptions = this.component.oTableOptions;
26531
- const oColumnsData = [];
26532
- tableOptions.columns.forEach((oCol) => {
26533
- oColumnsData.push({
26534
- attr: oCol.attr,
26535
- searchable: oCol.searchable,
26536
- searching: oCol.searching
26537
- });
26538
- });
26539
- return {
26540
- 'oColumns': oColumnsData,
26541
- 'filter-case-sensitive': tableOptions.filterCaseSensitive,
26542
- 'filter': this.component.oTableQuickFilterComponent ? this.component.oTableQuickFilterComponent.value : ''
26543
- };
26544
- }
26545
- getFilterBuilderState() {
26546
- const result = {};
26547
- if (this.component.filterBuilder) {
26548
- let filterBuilder = this.component.filterBuilder.getFilterValues();
26549
- if (!Util.isObjectEmpty(filterBuilder)) {
26550
- result['filter-builder-values'] = filterBuilder;
26551
- }
26552
- }
26553
- return result;
26554
- }
26555
- getColumnFiltersState() {
26556
- const result = {};
26557
- if (this.component.dataSource) {
26558
- const columnValueFilters = this.component.dataSource.getColumnValueFilters();
26559
- if (columnValueFilters.length > 0) {
26560
- result['column-value-filters'] = columnValueFilters;
26561
- }
26562
- }
26563
- return result;
26564
- }
26565
- getPageState() {
26566
- const result = {
26567
- 'query-rows': this.component.matpaginator ? this.component.matpaginator.pageSize : ''
26568
- };
26569
- if (this.component.currentPage > 0 && this.component.storePaginationState) {
26570
- result.currentPage = this.component.currentPage;
26571
- }
26572
- if (this.component.pageable && this.component.storePaginationState) {
26573
- result.totalQueryRecordsNumber = this.component.state.totalQueryRecordsNumber;
26574
- result.queryRecordOffset = Math.max((this.component.state.queryRecordOffset - this.component.dataSource.renderedData.length), (this.component.state.queryRecordOffset - this.component.queryRows));
26575
- }
26576
- return result;
26577
- }
26578
- getSelectionState() {
26579
- const selection = [];
26580
- if (this.component && this.component.keepSelectedItems) {
26581
- const tableKeys = this.component.getKeys();
26582
- this.component.getSelectedItems().forEach(item => {
26583
- const data = {};
26584
- tableKeys.forEach(key => {
26585
- data[key] = item[key];
26586
- });
26587
- selection.push(data);
26588
- });
26589
- }
26590
- return selection;
26591
- }
26592
- getInitialConfigurationState() {
26593
- const oColumnsData = [];
26594
- Util.parseArray(this.component.visibleColumns, true).forEach((columnAttr) => {
26595
- let oCol = this.component.getOColumn(columnAttr);
26596
- oColumnsData.push({
26597
- attr: oCol.attr,
26598
- visible: true,
26599
- width: oCol.definition ? oCol.definition.originalWidth : undefined
26600
- });
26601
- });
26602
- return {
26603
- 'initial-configuration': {
26604
- 'oColumns-display': oColumnsData,
26605
- 'sort-columns': this.component.sortColumns,
26606
- 'select-column-visible': this.component.oTableOptions.selectColumn.visible,
26607
- 'filter-case-sensitive': this.component.filterCaseSensitive,
26608
- 'query-rows': this.component.originalQueryRows,
26609
- 'filter-column-active-by-default': this.component.filterColumnActiveByDefault,
26610
- 'filter-columns': this.component.originalFilterColumns,
26611
- 'grouped-columns': this.component.originalGroupedColumnsArray
26612
- }
26613
- };
26614
- }
26615
- getSortState() {
26616
- const sortColumns = [];
26617
- this.component.sort.getSortColumns().forEach(sortData => {
26618
- sortColumns.push(sortData.id + Codes.COLUMNS_ALIAS_SEPARATOR + sortData.direction);
26619
- });
26620
- return {
26621
- 'sort-columns': sortColumns.join(Codes.ARRAY_INPUT_SEPARATOR)
26622
- };
26623
- }
26624
- }
26625
- OTableComponentStateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableComponentStateService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
26626
- OTableComponentStateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableComponentStateService });
26627
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableComponentStateService, decorators: [{
26628
- type: Injectable
26629
- }] });
26630
-
26631
27148
  var ColumnValueFilterOperator;
26632
27149
  (function (ColumnValueFilterOperator) {
26633
27150
  ColumnValueFilterOperator[ColumnValueFilterOperator["IN"] = 0] = "IN";
@@ -27551,9 +28068,7 @@ class OTableFilterByColumnDataDialogComponent {
27551
28068
  let propertyA = '';
27552
28069
  let propertyB = '';
27553
28070
  [propertyA, propertyB] = [a['value'], b['value']];
27554
- const valueA = typeof propertyA === 'undefined' ? '' : propertyA === '' ? propertyA : isNaN(+propertyA) ? propertyA.toString().trim().toLowerCase() : +propertyA;
27555
- const valueB = typeof propertyB === 'undefined' ? '' : propertyB === '' ? propertyB : isNaN(+propertyB) ? propertyB.toString().trim().toLowerCase() : +propertyB;
27556
- return (valueA <= valueB ? -1 : 1) * (this.activeSortDirection === 'asc' ? 1 : -1);
28071
+ return Util.sortFunction(propertyA, propertyB, this.activeSortDirection);
27557
28072
  }
27558
28073
  onSlideChange(e) {
27559
28074
  this.isCustomFilterSubject.next(e.checked);
@@ -30783,17 +31298,17 @@ class OTableSkeletonComponent extends OSkeletonComponent {
30783
31298
  }
30784
31299
  get count() {
30785
31300
  const parentElement = this.elRef.nativeElement.parentElement;
30786
- const parentHeight = parentElement.offsetHeight - 50;
30787
- return Math.floor(parentHeight / 30);
31301
+ const parentHeight = parentElement.offsetHeight - 60;
31302
+ return Array.from(new Array(Math.floor(parentHeight / 30)), (x, i) => i + 1);
30788
31303
  }
30789
31304
  }
30790
31305
  OTableSkeletonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableSkeletonComponent, deps: [{ token: i0.ElementRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
30791
- OTableSkeletonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OTableSkeletonComponent, selector: "o-table-skeleton", host: { properties: { "class.o-table-skeleton": "true" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"o-table-skeleton-header\" fxLayoutGap=\"10px\">\n</div>\n<div class=\"o-table-skeleton-item\" fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\">\n <div fxFlex=\"20%\">\n <ngx-skeleton-loader fxFlex count=\"{{count}}\" animation=\"{{isDarkMode?'progress-dark':'progress'}}\"\n [theme]=\"{height:'20px','border-radius': '0', 'margin': '0'}\"></ngx-skeleton-loader>\n </div>\n <div fxFlex=\"20%\">\n <ngx-skeleton-loader count=\"{{count}}\" animation=\"{{isDarkMode?'progress-dark':'progress'}}\"\n [theme]=\"{height:'20px','border-radius': '0', 'margin': '0'}\"></ngx-skeleton-loader>\n </div>\n <div fxFlex=\"20\">\n <ngx-skeleton-loader count=\"{{count}}\" animation=\"{{isDarkMode?'progress-dark':'progress'}}\"\n [theme]=\"{height:'20px','border-radius': '0', 'margin': '0'}\"></ngx-skeleton-loader>\n </div>\n <div fxFlex=\"20%\">\n <ngx-skeleton-loader count=\"{{count}}\" animation=\"{{isDarkMode?'progress-dark':'progress'}}\"\n [theme]=\"{height:'20px','border-radius': '0', 'margin': '0'}\"></ngx-skeleton-loader>\n </div>\n <div fxFlex=\"20%\">\n <ngx-skeleton-loader count=\"{{count}}\" animation=\"{{isDarkMode?'progress-dark':'progress'}}\"\n [theme]=\"{height:'20px','border-radius': '0', 'margin': '0'}\"></ngx-skeleton-loader>\n </div>\n</div>\n\n", styles: [".o-table-skeleton{height:100%;width:100%;position:relative;padding:10px}.o-table-skeleton .o-table-skeleton-header{height:40px;margin:0 10px 10px}.o-table-skeleton .o-table-skeleton-item{margin:0 10px}\n"], dependencies: [{ kind: "directive", type: i2.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i2.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "component", type: i3$4.NgxSkeletonLoaderComponent, selector: "ngx-skeleton-loader", inputs: ["count", "loadingText", "appearance", "animation", "ariaLabel", "theme"] }], encapsulation: i0.ViewEncapsulation.None });
31306
+ OTableSkeletonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OTableSkeletonComponent, selector: "o-table-skeleton", host: { properties: { "class.o-table-skeleton": "true" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"o-table-skeleton-header\" fxLayoutGap=\"10px\">\n</div>\n<div class=\"o-table-skeleton-item\" fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\" *ngFor=\"let row of count\">\n <div fxFlex=\"20%\">\n <ngx-skeleton-loader fxFlex count=\"1\" animation=\"{{isDarkMode?'progress-dark':'progress'}}\"\n [theme]=\"{height:'20px','border-radius': '0', 'margin': '0'}\"></ngx-skeleton-loader>\n </div>\n <div fxFlex=\"20%\">\n <ngx-skeleton-loader count=\"1\" animation=\"{{isDarkMode?'progress-dark':'progress'}}\"\n [theme]=\"{height:'20px','border-radius': '0', 'margin': '0'}\"></ngx-skeleton-loader>\n </div>\n <div fxFlex=\"20\">\n <ngx-skeleton-loader count=\"1\" animation=\"{{isDarkMode?'progress-dark':'progress'}}\"\n [theme]=\"{height:'20px','border-radius': '0', 'margin': '0'}\"></ngx-skeleton-loader>\n </div>\n <div fxFlex=\"20%\">\n <ngx-skeleton-loader count=\"1\" animation=\"{{isDarkMode?'progress-dark':'progress'}}\"\n [theme]=\"{height:'20px','border-radius': '0', 'margin': '0'}\"></ngx-skeleton-loader>\n </div>\n <div fxFlex=\"20%\">\n <ngx-skeleton-loader count=\"1\" animation=\"{{isDarkMode?'progress-dark':'progress'}}\"\n [theme]=\"{height:'20px','border-radius': '0', 'margin': '0'}\"></ngx-skeleton-loader>\n </div>\n</div>\n", styles: [".o-table-skeleton{height:100%;width:100%;position:relative}.o-table-skeleton .o-table-skeleton-header{height:40px;margin:10px}.o-table-skeleton .o-table-skeleton-item{margin:5px 10px}\n"], dependencies: [{ kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i2.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "component", type: i3$4.NgxSkeletonLoaderComponent, selector: "ngx-skeleton-loader", inputs: ["count", "loadingText", "appearance", "animation", "ariaLabel", "theme"] }], encapsulation: i0.ViewEncapsulation.None });
30792
31307
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTableSkeletonComponent, decorators: [{
30793
31308
  type: Component,
30794
31309
  args: [{ selector: 'o-table-skeleton', encapsulation: ViewEncapsulation.None, host: {
30795
31310
  '[class.o-table-skeleton]': 'true'
30796
- }, template: "<div class=\"o-table-skeleton-header\" fxLayoutGap=\"10px\">\n</div>\n<div class=\"o-table-skeleton-item\" fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\">\n <div fxFlex=\"20%\">\n <ngx-skeleton-loader fxFlex count=\"{{count}}\" animation=\"{{isDarkMode?'progress-dark':'progress'}}\"\n [theme]=\"{height:'20px','border-radius': '0', 'margin': '0'}\"></ngx-skeleton-loader>\n </div>\n <div fxFlex=\"20%\">\n <ngx-skeleton-loader count=\"{{count}}\" animation=\"{{isDarkMode?'progress-dark':'progress'}}\"\n [theme]=\"{height:'20px','border-radius': '0', 'margin': '0'}\"></ngx-skeleton-loader>\n </div>\n <div fxFlex=\"20\">\n <ngx-skeleton-loader count=\"{{count}}\" animation=\"{{isDarkMode?'progress-dark':'progress'}}\"\n [theme]=\"{height:'20px','border-radius': '0', 'margin': '0'}\"></ngx-skeleton-loader>\n </div>\n <div fxFlex=\"20%\">\n <ngx-skeleton-loader count=\"{{count}}\" animation=\"{{isDarkMode?'progress-dark':'progress'}}\"\n [theme]=\"{height:'20px','border-radius': '0', 'margin': '0'}\"></ngx-skeleton-loader>\n </div>\n <div fxFlex=\"20%\">\n <ngx-skeleton-loader count=\"{{count}}\" animation=\"{{isDarkMode?'progress-dark':'progress'}}\"\n [theme]=\"{height:'20px','border-radius': '0', 'margin': '0'}\"></ngx-skeleton-loader>\n </div>\n</div>\n\n", styles: [".o-table-skeleton{height:100%;width:100%;position:relative;padding:10px}.o-table-skeleton .o-table-skeleton-header{height:40px;margin:0 10px 10px}.o-table-skeleton .o-table-skeleton-item{margin:0 10px}\n"] }]
31311
+ }, template: "<div class=\"o-table-skeleton-header\" fxLayoutGap=\"10px\">\n</div>\n<div class=\"o-table-skeleton-item\" fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\" *ngFor=\"let row of count\">\n <div fxFlex=\"20%\">\n <ngx-skeleton-loader fxFlex count=\"1\" animation=\"{{isDarkMode?'progress-dark':'progress'}}\"\n [theme]=\"{height:'20px','border-radius': '0', 'margin': '0'}\"></ngx-skeleton-loader>\n </div>\n <div fxFlex=\"20%\">\n <ngx-skeleton-loader count=\"1\" animation=\"{{isDarkMode?'progress-dark':'progress'}}\"\n [theme]=\"{height:'20px','border-radius': '0', 'margin': '0'}\"></ngx-skeleton-loader>\n </div>\n <div fxFlex=\"20\">\n <ngx-skeleton-loader count=\"1\" animation=\"{{isDarkMode?'progress-dark':'progress'}}\"\n [theme]=\"{height:'20px','border-radius': '0', 'margin': '0'}\"></ngx-skeleton-loader>\n </div>\n <div fxFlex=\"20%\">\n <ngx-skeleton-loader count=\"1\" animation=\"{{isDarkMode?'progress-dark':'progress'}}\"\n [theme]=\"{height:'20px','border-radius': '0', 'margin': '0'}\"></ngx-skeleton-loader>\n </div>\n <div fxFlex=\"20%\">\n <ngx-skeleton-loader count=\"1\" animation=\"{{isDarkMode?'progress-dark':'progress'}}\"\n [theme]=\"{height:'20px','border-radius': '0', 'margin': '0'}\"></ngx-skeleton-loader>\n </div>\n</div>\n", styles: [".o-table-skeleton{height:100%;width:100%;position:relative}.o-table-skeleton .o-table-skeleton-header{height:40px;margin:10px}.o-table-skeleton .o-table-skeleton-item{margin:5px 10px}\n"] }]
30797
31312
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Injector }]; } });
30798
31313
 
30799
31314
  class OTableRowClassPipe {
@@ -30937,7 +31452,7 @@ class OTableComponent extends AbstractOServiceComponent {
30937
31452
  return this._visibleColArray;
30938
31453
  }
30939
31454
  set visibleColArray(arg) {
30940
- const permissionsBlocked = this.permissions ? this.permissions.columns.filter(col => col.visible === false).map(col => col.attr) : [];
31455
+ const permissionsBlocked = this.permissions && this.permissions.columns ? this.permissions.columns.filter(col => col.visible === false).map(col => col.attr) : [];
30941
31456
  const permissionsChecked = arg.filter(value => permissionsBlocked.indexOf(value) === -1);
30942
31457
  this._visibleColArray = permissionsChecked;
30943
31458
  if (this._oTableOptions) {
@@ -31079,18 +31594,31 @@ class OTableComponent extends AbstractOServiceComponent {
31079
31594
  catch (error) {
31080
31595
  }
31081
31596
  this.snackBarService = this.injector.get(SnackBarService);
31082
- this.getGlobalConfig();
31597
+ this.getInjectionTokenConfig();
31083
31598
  }
31084
- getGlobalConfig() {
31599
+ getInjectionTokenConfig() {
31085
31600
  try {
31086
- this.oTableGlobalConfig = this.injector.get(O_TABLE_GLOBAL_CONFIG);
31087
- if (Util.isDefined(this.oTableGlobalConfig.autoAdjust)) {
31088
- this.autoAdjust = this.oTableGlobalConfig.autoAdjust;
31601
+ const oTableGlobalConfig = this.injector.get(O_TABLE_GLOBAL_CONFIG);
31602
+ if (Util.isDefined(oTableGlobalConfig.autoAdjust)) {
31603
+ this.autoAdjust = oTableGlobalConfig.autoAdjust;
31089
31604
  }
31090
31605
  ;
31091
- if (Util.isDefined(this.oTableGlobalConfig.autoAlignTitles)) {
31092
- this.autoAlignTitles = this.oTableGlobalConfig.autoAlignTitles;
31606
+ if (Util.isDefined(oTableGlobalConfig.autoAlignTitles)) {
31607
+ this.autoAlignTitles = oTableGlobalConfig.autoAlignTitles;
31093
31608
  }
31609
+ if (Util.isDefined(oTableGlobalConfig.filterColumnActiveByDefault)) {
31610
+ this.filterColumnActiveByDefault = oTableGlobalConfig.filterColumnActiveByDefault;
31611
+ }
31612
+ if (Util.isDefined(oTableGlobalConfig.editionMode) && Codes.isValidEditionMode(oTableGlobalConfig.editionMode)) {
31613
+ this.editionMode = oTableGlobalConfig.editionMode;
31614
+ }
31615
+ if (Util.isDefined(oTableGlobalConfig.detailMode && Codes.isValidDetailMode(oTableGlobalConfig.detailMode))) {
31616
+ this.detailMode = oTableGlobalConfig.detailMode;
31617
+ }
31618
+ if (Util.isDefined(oTableGlobalConfig.rowHeight) && Codes.isValidRowHeight(oTableGlobalConfig.rowHeight)) {
31619
+ this.rowHeight = oTableGlobalConfig.rowHeight;
31620
+ }
31621
+ ;
31094
31622
  }
31095
31623
  catch (error) {
31096
31624
  }
@@ -31834,6 +32362,9 @@ class OTableComponent extends AbstractOServiceComponent {
31834
32362
  }
31835
32363
  ObservableWrapper.callEmit(this.onDataLoaded, this.daoTable.data);
31836
32364
  }
32365
+ canSetStaticData(staticData) {
32366
+ return super.canSetStaticData(staticData) && Util.isDefined(this.daoTable);
32367
+ }
31837
32368
  showDialogError(error, errorOptional) {
31838
32369
  if (Util.isDefined(error) && !Util.isObject(error)) {
31839
32370
  this.dialogService.alert('ERROR', error);
@@ -34131,7 +34662,7 @@ class OTableCellEditorRealComponent extends OTableCellEditorIntegerComponent {
34131
34662
  }
34132
34663
  getCellData() {
34133
34664
  const cellData = super.getCellData();
34134
- const floatValue = parseFloat(cellData.toString());
34665
+ const floatValue = parseFloat(cellData === null || cellData === void 0 ? void 0 : cellData.toString());
34135
34666
  return isNaN(floatValue) ? undefined : floatValue;
34136
34667
  }
34137
34668
  resolveValidators() {
@@ -36575,97 +37106,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
36575
37106
  type: Injectable
36576
37107
  }] });
36577
37108
 
36578
- class OTranslateHttpLoader extends TranslateHttpLoader {
36579
- constructor(httpClient, prefix = OTranslateService.ASSETS_PATH, suffix = OTranslateService.ASSETS_EXTENSION, injector) {
36580
- super(httpClient, prefix, suffix);
36581
- this.injector = injector;
36582
- this.appConfig = this.injector.get(AppConfig);
36583
- this.httpClient = httpClient;
36584
- }
36585
- getAssetsPath() {
36586
- return this.prefix;
36587
- }
36588
- getAssetsExtension() {
36589
- return this.suffix;
36590
- }
36591
- getLocalTranslation(lang) {
36592
- let innerObserver;
36593
- const dataObservable = new Observable(observer => innerObserver = observer).pipe(share());
36594
- super.getTranslation(lang)
36595
- .subscribe((res) => {
36596
- innerObserver.next(res);
36597
- innerObserver.complete();
36598
- }, error => {
36599
- innerObserver.next(undefined);
36600
- }, () => innerObserver.complete());
36601
- return dataObservable;
36602
- }
36603
- getTranslation(lang) {
36604
- const translationOrigins = [];
36605
- translationOrigins.push(this.getLocalTranslation(lang));
36606
- if (this.appConfig.useRemoteBundle()) {
36607
- translationOrigins.push(this.getRemoteBundle(lang));
36608
- }
36609
- let innerObserver;
36610
- const dataObservable = new Observable(observer => innerObserver = observer).pipe(share());
36611
- combineLatest(translationOrigins).subscribe((res) => {
36612
- const staticBundle = res[0] || {};
36613
- const remoteBundle = res[1] || {};
36614
- const allBundles = Object.assign(staticBundle, remoteBundle);
36615
- innerObserver.next(allBundles);
36616
- });
36617
- return dataObservable;
36618
- }
36619
- getRemoteBundle(lang) {
36620
- const bundleEndpoint = this.appConfig.getBundleEndpoint();
36621
- if (!bundleEndpoint) {
36622
- return of([]);
36623
- }
36624
- const url = bundleEndpoint + '?lang=' + lang;
36625
- return this.httpClient.get(url).pipe(map((resp) => {
36626
- if (resp.code === Codes.ONTIMIZE_SUCCESSFUL_CODE) {
36627
- return this.parseBundleResponse(resp.data);
36628
- }
36629
- return resp;
36630
- }), catchError(err => {
36631
- console.log('Remote Bundle service is not available', err);
36632
- return of([]);
36633
- }));
36634
- }
36635
- parseBundleResponse(data) {
36636
- const result = {};
36637
- if (data) {
36638
- data.forEach((item) => {
36639
- result[item[OTranslateHttpLoader.BUNDLE_KEY]] = item[OTranslateHttpLoader.BUNDLE_VALUE];
36640
- });
36641
- }
36642
- return result;
36643
- }
36644
- }
36645
- OTranslateHttpLoader.BUNDLE_KEY = 'key';
36646
- OTranslateHttpLoader.BUNDLE_VALUE = 'value';
36647
-
36648
- class OTranslateParser extends TranslateDefaultParser {
36649
- constructor() {
36650
- super(...arguments);
36651
- this.templateMatcher = /{\s?([0-9][^{}\s]*)\s?}/g;
36652
- }
36653
- interpolate(expr, params) {
36654
- if (typeof expr !== 'string' || !params) {
36655
- return expr;
36656
- }
36657
- return expr.replace(this.templateMatcher, (substring, index) => {
36658
- const argValue = Util.isDefined(params[index]) ? params[index] : '';
36659
- return !isNaN(parseInt(index, 10)) ? argValue : substring;
36660
- });
36661
- }
36662
- }
36663
- OTranslateParser.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTranslateParser, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
36664
- OTranslateParser.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTranslateParser });
36665
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTranslateParser, decorators: [{
36666
- type: Injectable
36667
- }] });
36668
-
36669
37109
  class OTreeDataSource {
36670
37110
  get data() {
36671
37111
  return this.dataChange.value;
@@ -36907,6 +37347,9 @@ class OTreeComponent extends AbstractOServiceComponent {
36907
37347
  this.initialize();
36908
37348
  this.initializeParams();
36909
37349
  this.subscription.add(this.selection.changed.subscribe(() => (this.enabledDeleteButton = !this.selection.isEmpty())));
37350
+ this.permissions = this.permissionsService.getTreePermissions(this.oattr, this.actRoute);
37351
+ this.actionsPermissions = this.getActionsPermissions(this.permissions);
37352
+ this.setButtonPermissions(this.actionsPermissions);
36910
37353
  }
36911
37354
  initialize() {
36912
37355
  super.initialize();
@@ -36938,6 +37381,7 @@ class OTreeComponent extends AbstractOServiceComponent {
36938
37381
  if (this.queryOnInit) {
36939
37382
  this.queryData();
36940
37383
  }
37384
+ this.manageCustomPermissions(this.actionsPermissions, '[o-tree-button]');
36941
37385
  }
36942
37386
  ngOnDestroy() {
36943
37387
  this.destroy();
@@ -37220,7 +37664,7 @@ class OTreeComponent extends AbstractOServiceComponent {
37220
37664
  }
37221
37665
  }
37222
37666
  OTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTreeComponent, deps: [{ token: i0.Injector }, { token: i0.ElementRef }, { token: forwardRef(() => OFormComponent), optional: true }], target: i0.ɵɵFactoryTarget.Component });
37223
- OTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OTreeComponent, selector: "o-tree", inputs: { oattr: ["attr", "oattr"], service: "service", entity: "entity", columns: "columns", keys: "keys", parentKeys: ["parent-keys", "parentKeys"], queryMethod: ["query-method", "queryMethod"], insertButton: ["insert-button", "insertButton"], refreshButton: ["refresh-button", "refreshButton"], deleteButton: ["delete-button", "deleteButton"], visibleColumns: ["visible-columns", "visibleColumns"], selectAllCheckbox: ["select-all-checkbox", "selectAllCheckbox"], separator: "separator", parentColumn: ["parent-column", "parentColumn"], sortColumn: ["sort-column", "sortColumn"], selectAllCheckboxVisible: ["select-all-checkbox-visible", "selectAllCheckboxVisible"], filterCaseSensitive: ["filter-case-sensitive", "filterCaseSensitive"], quickFilter: ["quick-filter", "quickFilter"], quickFilterPlaceholder: ["quick-filter-placeholder", "quickFilterPlaceholder"], quickFilterColumns: ["quick-filter-columns", "quickFilterColumns"], detailMode: ["detail-mode", "detailMode"], detailFormRoute: ["detail-form-route", "detailFormRoute"], showButtonsText: ["show-buttons-text", "showButtonsText"], rootTitle: ["root-title", "rootTitle"], recursive: "recursive", route: "route" }, outputs: { onNodeSelected: "onNodeSelected", onNodeExpanded: "onNodeExpanded", onNodeCollapsed: "onNodeCollapsed", onLoadNextLevel: "onLoadNextLevel", onDataLoaded: "onDataLoaded", onNodeClick: "onNodeClick" }, host: { properties: { "class.o-tree": "true" } }, providers: [OTreeDao], queries: [{ propertyName: "leafNodeTemplate", first: true, predicate: ["leafNodeTemplate"], descendants: true, read: TemplateRef }, { propertyName: "parentNodeTemplate", first: true, predicate: ["parentNodeTemplate"], descendants: true, read: TemplateRef }, { propertyName: "nodeTemplate", first: true, predicate: ["nodeTemplate"], descendants: true, read: TemplateRef }, { propertyName: "treeNode", first: true, predicate: i0.forwardRef(function () { return OTreeNodeComponent; }) }], usesInheritance: true, ngImport: i0, template: "<div fxLayout=\"column\" fxFlex>\n\n <div *ngIf=\"hasControls()\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\n\n <div class=\"buttons\">\n <ng-container *ngIf=\"showButtonsText;else showButtonsWithoutText\">\n\n <button *ngIf=\"insertButton\" type=\"button\" mat-stroked-button aria-label=\"Insert\" (click)=\"add($event)\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n <span>{{ 'INSERT' | oTranslate }}</span>\n </button>\n\n <button *ngIf=\"refreshButton\" type=\"button\" mat-stroked-button aria-label=\"Refresh\" (click)=\"reloadData()\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n <span>{{ 'REFRESH' | oTranslate }}</span>\n </button>\n\n <button *ngIf=\"deleteButton\" type=\"button\" mat-stroked-button aria-label=\"Delete\" [disabled]=\"!enabledDeleteButton\"\n [class.disabled]=\"!enabledDeleteButton\">\n <mat-icon svgIcon=\"ontimize:delete\"></mat-icon>\n <span>{{ 'DELETE' | oTranslate }}</span>\n </button>\n\n </ng-container>\n\n <ng-template #showButtonsWithoutText>\n <button *ngIf=\"insertButton\" type=\"button\" mat-icon-button aria-label=\"Insert\" (click)=\"add($event)\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n </button>\n\n <button *ngIf=\"refreshButton\" type=\"button\" mat-icon-button aria-label=\"Refresh\" (click)=\"reloadData()\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n </button>\n\n <button *ngIf=\"deleteButton\" type=\"button\" mat-icon-button aria-label=\"Delete\" [disabled]=\"!enabledDeleteButton\"\n [class.disabled]=\"!enabledDeleteButton\">\n <mat-icon svgIcon=\"ontimize:delete\"></mat-icon>\n </button>\n </ng-template>\n\n <ng-content select=\"[o-tree-button]\"></ng-content>\n </div>\n <div fxFlex>\n <span fxLayoutAlign=\"center center\" class=\"title\">{{ title | oTranslate }}</span>\n </div>\n <o-search-input *ngIf=\"quickFilter\" [filter-case-sensitive]=\"filterCaseSensitive\" [show-case-sensitive-checkbox]=\"showCaseSensitiveCheckbox()\"\n [columns]=\"quickFilterColumns\" [placeholder]=\"quickFilterPlaceholder\" appearance=\"outline\" float-label=\"never\" show-menu=\"no\">\n </o-search-input>\n <button type=\"button\" *ngIf=\"showTreeMenuButton\" mat-icon-button class=\"o-tree-menu-button\" [matMenuTriggerFor]=\"treeMenu.matMenu\"\n (click)=\"$event.stopPropagation()\">\n <mat-icon svgIcon=\"ontimize:more_vert\"></mat-icon>\n </button>\n <o-tree-menu #treeMenu [select-all-checkbox]=\"selectAllCheckbox\" [select-all-checkbox-visible]=\"selectAllCheckboxVisible\"\n (onSelectCheckboxChange)=\"onSelectCheckboxChange($event)\"></o-tree-menu>\n\n </div>\n\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n\n <!-- This is the tree node template for leaf nodes -->\n <mat-tree-node *matTreeNodeDef=\"let node\" (click)=\"leafNodeClicked($event, node)\" matTreeNodeToggle matTreeNodePadding\n [ngClass]=\"{'selected-node': isSelectedNode(node)}\">\n <!-- use a disabled button to provide padding for tree leaf -->\n <button mat-icon-button disabled></button>\n\n <ng-container *ngIf=\"selectAllCheckboxVisible; else simpleLeafNodeTpl\">\n <div class=\"node-wrapper\">\n <mat-checkbox *ngIf=\"selectAllCheckboxVisible; else simpleLeafNodeTpl\" [checked]=\"checklistSelection.isSelected(node)\"\n (click)=\"checkboxClicked($event)\" (change)=\"todoLeafItemSelectionToggle(node)\">\n </mat-checkbox>\n <ng-container [ngTemplateOutlet]=\"leafNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </div>\n </ng-container>\n <ng-template #simpleLeafNodeTpl>\n <ng-container [ngTemplateOutlet]=\"leafNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </ng-template>\n\n </mat-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\" (click)=\"parentNodeClicked($event, node)\" matTreeNodePadding\n [ngClass]=\"{'selected-node': isSelectedNode(node)}\">\n <button mat-icon-button [attr.aria-label]=\"'toggle ' + node.label\" matTreeNodeToggle (click)=\"onClickToggleButton($event, node)\">\n <mat-icon class=\"mat-icon-rtl-mirror\">\n {{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}\n </mat-icon>\n </button>\n\n <ng-container *ngIf=\"selectAllCheckboxVisible; else simpleParentNodeTpl\">\n <div class=\"node-wrapper\">\n <mat-checkbox *ngIf=\"selectAllCheckboxVisible; else simpleParentNodeTpl\" (click)=\"checkboxClicked($event)\"\n (change)=\"todoItemSelectionToggle(node)\" [checked]=\"descendantsAllSelected(node)\" [indeterminate]=\"descendantsPartiallySelected(node)\">\n </mat-checkbox>\n <ng-container [ngTemplateOutlet]=\"parentNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </div>\n </ng-container>\n\n <ng-template #simpleParentNodeTpl>\n <ng-container [ngTemplateOutlet]=\"parentNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </ng-template>\n </mat-tree-node>\n </mat-tree>\n</div>\n\n<ng-template let-node #leafNodeFulltemplate>\n <ng-container *ngIf=\"leafNodeTemplate; else defaultLeafNodeTpl\" [ngTemplateOutlet]=\"leafNodeTemplate\"\n [ngTemplateOutletContext]=\"{$implicit:node.data}\">\n </ng-container>\n\n <ng-template #defaultLeafNodeTpl>\n {{node.label}}\n </ng-template>\n</ng-template>\n\n<ng-template let-node #parentNodeFulltemplate>\n <ng-container *ngIf=\"parentNodeTemplate; else defaultParentNodeTpl\" [ngTemplateOutlet]=\"parentNodeTemplate\"\n [ngTemplateOutletContext]=\"{$implicit:node.data}\">\n </ng-container>\n\n <ng-template #defaultParentNodeTpl>\n <span>{{node.label}}</span>\n <mat-progress-bar *ngIf=\"node.isLoading\" mode=\"indeterminate\" fxFlex></mat-progress-bar>\n </ng-template>\n</ng-template>\n", styles: [".o-tree .mat-mdc-progress-bar{margin-left:30px}.o-tree .node-wrapper{align-items:center}\n"], dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: OSearchInputComponent, selector: "o-search-input", inputs: ["placeholder", "label", "width", "float-label", "appearance", "columns", "filter-case-sensitive", "show-case-sensitive-checkbox", "show-menu"], outputs: ["onSearch"] }, { kind: "directive", type: i2.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i2.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i4$2.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5$2.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i7.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: i10$2.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i10$2.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "directive", type: i10$2.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i10$2.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i10$2.MatTreeNode, selector: "mat-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "component", type: OTreeMenuComponent, selector: "o-tree-menu", inputs: ["select-all-checkbox", "select-all-checkbox-visible"], outputs: ["onSelectCheckboxChange"] }, { kind: "pipe", type: OTranslatePipe, name: "oTranslate" }], encapsulation: i0.ViewEncapsulation.None });
37667
+ OTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OTreeComponent, selector: "o-tree", inputs: { oattr: ["attr", "oattr"], service: "service", entity: "entity", columns: "columns", keys: "keys", parentKeys: ["parent-keys", "parentKeys"], queryMethod: ["query-method", "queryMethod"], insertButton: ["insert-button", "insertButton"], refreshButton: ["refresh-button", "refreshButton"], deleteButton: ["delete-button", "deleteButton"], visibleColumns: ["visible-columns", "visibleColumns"], selectAllCheckbox: ["select-all-checkbox", "selectAllCheckbox"], separator: "separator", parentColumn: ["parent-column", "parentColumn"], sortColumn: ["sort-column", "sortColumn"], selectAllCheckboxVisible: ["select-all-checkbox-visible", "selectAllCheckboxVisible"], filterCaseSensitive: ["filter-case-sensitive", "filterCaseSensitive"], quickFilter: ["quick-filter", "quickFilter"], quickFilterPlaceholder: ["quick-filter-placeholder", "quickFilterPlaceholder"], quickFilterColumns: ["quick-filter-columns", "quickFilterColumns"], detailMode: ["detail-mode", "detailMode"], detailFormRoute: ["detail-form-route", "detailFormRoute"], showButtonsText: ["show-buttons-text", "showButtonsText"], rootTitle: ["root-title", "rootTitle"], recursive: "recursive", route: "route" }, outputs: { onNodeSelected: "onNodeSelected", onNodeExpanded: "onNodeExpanded", onNodeCollapsed: "onNodeCollapsed", onLoadNextLevel: "onLoadNextLevel", onDataLoaded: "onDataLoaded", onNodeClick: "onNodeClick" }, host: { properties: { "class.o-tree": "true" } }, providers: [OTreeDao], queries: [{ propertyName: "leafNodeTemplate", first: true, predicate: ["leafNodeTemplate"], descendants: true, read: TemplateRef }, { propertyName: "parentNodeTemplate", first: true, predicate: ["parentNodeTemplate"], descendants: true, read: TemplateRef }, { propertyName: "nodeTemplate", first: true, predicate: ["nodeTemplate"], descendants: true, read: TemplateRef }, { propertyName: "treeNode", first: true, predicate: i0.forwardRef(function () { return OTreeNodeComponent; }) }], usesInheritance: true, ngImport: i0, template: "<div fxLayout=\"column\" fxFlex>\n\n <div *ngIf=\"hasControls()\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\n\n <div class=\"buttons\">\n <ng-container *ngIf=\"showButtonsText;else showButtonsWithoutText\">\n\n <button *ngIf=\"insertButton\" type=\"button\" mat-stroked-button aria-label=\"Insert\" [disabled]=\"!enabledInsertButton\" (click)=\"add($event)\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n <span>{{ 'INSERT' | oTranslate }}</span>\n </button>\n\n <button *ngIf=\"refreshButton\" type=\"button\" mat-stroked-button aria-label=\"Refresh\" [disabled]=\"!enabledRefreshButton\" (click)=\"reloadData()\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n <span>{{ 'REFRESH' | oTranslate }}</span>\n </button>\n\n <button *ngIf=\"deleteButton\" type=\"button\" mat-stroked-button aria-label=\"Delete\" [disabled]=\"!enabledDeleteButton\"\n [class.disabled]=\"!enabledDeleteButton\">\n <mat-icon svgIcon=\"ontimize:delete\"></mat-icon>\n <span>{{ 'DELETE' | oTranslate }}</span>\n </button>\n\n </ng-container>\n\n <ng-template #showButtonsWithoutText>\n <button *ngIf=\"insertButton\" type=\"button\" mat-icon-button aria-label=\"Insert\" [disabled]=\"!enabledInsertButton\" (click)=\"add($event)\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n </button>\n\n <button *ngIf=\"refreshButton\" type=\"button\" mat-icon-button aria-label=\"Refresh\" [disabled]=\"!enabledRefreshButton\" (click)=\"reloadData()\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n </button>\n\n <button *ngIf=\"deleteButton\" type=\"button\" mat-icon-button aria-label=\"Delete\" [disabled]=\"!enabledDeleteButton\"\n [class.disabled]=\"!enabledDeleteButton\">\n <mat-icon svgIcon=\"ontimize:delete\"></mat-icon>\n </button>\n </ng-template>\n\n <ng-content select=\"[o-tree-button]\"></ng-content>\n </div>\n <div fxFlex>\n <span fxLayoutAlign=\"center center\" class=\"title\">{{ title | oTranslate }}</span>\n </div>\n <o-search-input *ngIf=\"quickFilter\" [filter-case-sensitive]=\"filterCaseSensitive\" [show-case-sensitive-checkbox]=\"showCaseSensitiveCheckbox()\"\n [columns]=\"quickFilterColumns\" [placeholder]=\"quickFilterPlaceholder\" appearance=\"outline\" float-label=\"never\" show-menu=\"no\">\n </o-search-input>\n <button type=\"button\" *ngIf=\"showTreeMenuButton\" mat-icon-button class=\"o-tree-menu-button\" [matMenuTriggerFor]=\"treeMenu.matMenu\"\n (click)=\"$event.stopPropagation()\">\n <mat-icon svgIcon=\"ontimize:more_vert\"></mat-icon>\n </button>\n <o-tree-menu #treeMenu [select-all-checkbox]=\"selectAllCheckbox\" [select-all-checkbox-visible]=\"selectAllCheckboxVisible\"\n (onSelectCheckboxChange)=\"onSelectCheckboxChange($event)\"></o-tree-menu>\n\n </div>\n\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n\n <!-- This is the tree node template for leaf nodes -->\n <mat-tree-node *matTreeNodeDef=\"let node\" (click)=\"leafNodeClicked($event, node)\" matTreeNodeToggle matTreeNodePadding\n [ngClass]=\"{'selected-node': isSelectedNode(node)}\">\n <!-- use a disabled button to provide padding for tree leaf -->\n <button mat-icon-button disabled></button>\n\n <ng-container *ngIf=\"selectAllCheckboxVisible; else simpleLeafNodeTpl\">\n <div class=\"node-wrapper\">\n <mat-checkbox *ngIf=\"selectAllCheckboxVisible; else simpleLeafNodeTpl\" [checked]=\"checklistSelection.isSelected(node)\"\n (click)=\"checkboxClicked($event)\" (change)=\"todoLeafItemSelectionToggle(node)\">\n </mat-checkbox>\n <ng-container [ngTemplateOutlet]=\"leafNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </div>\n </ng-container>\n <ng-template #simpleLeafNodeTpl>\n <ng-container [ngTemplateOutlet]=\"leafNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </ng-template>\n\n </mat-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\" (click)=\"parentNodeClicked($event, node)\" matTreeNodePadding\n [ngClass]=\"{'selected-node': isSelectedNode(node)}\">\n <button mat-icon-button [attr.aria-label]=\"'toggle ' + node.label\" matTreeNodeToggle (click)=\"onClickToggleButton($event, node)\">\n <mat-icon class=\"mat-icon-rtl-mirror\">\n {{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}\n </mat-icon>\n </button>\n\n <ng-container *ngIf=\"selectAllCheckboxVisible; else simpleParentNodeTpl\">\n <div class=\"node-wrapper\">\n <mat-checkbox *ngIf=\"selectAllCheckboxVisible; else simpleParentNodeTpl\" (click)=\"checkboxClicked($event)\"\n (change)=\"todoItemSelectionToggle(node)\" [checked]=\"descendantsAllSelected(node)\" [indeterminate]=\"descendantsPartiallySelected(node)\">\n </mat-checkbox>\n <ng-container [ngTemplateOutlet]=\"parentNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </div>\n </ng-container>\n\n <ng-template #simpleParentNodeTpl>\n <ng-container [ngTemplateOutlet]=\"parentNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </ng-template>\n </mat-tree-node>\n </mat-tree>\n</div>\n\n<ng-template let-node #leafNodeFulltemplate>\n <ng-container *ngIf=\"leafNodeTemplate; else defaultLeafNodeTpl\" [ngTemplateOutlet]=\"leafNodeTemplate\"\n [ngTemplateOutletContext]=\"{$implicit:node.data}\">\n </ng-container>\n\n <ng-template #defaultLeafNodeTpl>\n {{node.label}}\n </ng-template>\n</ng-template>\n\n<ng-template let-node #parentNodeFulltemplate>\n <ng-container *ngIf=\"parentNodeTemplate; else defaultParentNodeTpl\" [ngTemplateOutlet]=\"parentNodeTemplate\"\n [ngTemplateOutletContext]=\"{$implicit:node.data}\">\n </ng-container>\n\n <ng-template #defaultParentNodeTpl>\n <span>{{node.label}}</span>\n <mat-progress-bar *ngIf=\"node.isLoading\" mode=\"indeterminate\" fxFlex></mat-progress-bar>\n </ng-template>\n</ng-template>\n", styles: [".o-tree .mat-mdc-progress-bar{margin-left:30px}.o-tree .node-wrapper{align-items:center}\n"], dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: OSearchInputComponent, selector: "o-search-input", inputs: ["placeholder", "label", "width", "float-label", "appearance", "columns", "filter-case-sensitive", "show-case-sensitive-checkbox", "show-menu"], outputs: ["onSearch"] }, { kind: "directive", type: i2.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i2.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i4$2.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5$2.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i7.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: i10$2.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i10$2.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "directive", type: i10$2.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i10$2.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i10$2.MatTreeNode, selector: "mat-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "component", type: OTreeMenuComponent, selector: "o-tree-menu", inputs: ["select-all-checkbox", "select-all-checkbox-visible"], outputs: ["onSelectCheckboxChange"] }, { kind: "pipe", type: OTranslatePipe, name: "oTranslate" }], encapsulation: i0.ViewEncapsulation.None });
37224
37668
  __decorate([
37225
37669
  BooleanInputConverter(),
37226
37670
  __metadata("design:type", Boolean)
@@ -37249,7 +37693,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
37249
37693
  type: Component,
37250
37694
  args: [{ selector: 'o-tree', inputs: DEFAULT_INPUTS_O_TREE, outputs: DEFAULT_OUTPUTS_O_TREE, encapsulation: ViewEncapsulation.None, host: {
37251
37695
  '[class.o-tree]': 'true'
37252
- }, providers: [OTreeDao], template: "<div fxLayout=\"column\" fxFlex>\n\n <div *ngIf=\"hasControls()\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\n\n <div class=\"buttons\">\n <ng-container *ngIf=\"showButtonsText;else showButtonsWithoutText\">\n\n <button *ngIf=\"insertButton\" type=\"button\" mat-stroked-button aria-label=\"Insert\" (click)=\"add($event)\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n <span>{{ 'INSERT' | oTranslate }}</span>\n </button>\n\n <button *ngIf=\"refreshButton\" type=\"button\" mat-stroked-button aria-label=\"Refresh\" (click)=\"reloadData()\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n <span>{{ 'REFRESH' | oTranslate }}</span>\n </button>\n\n <button *ngIf=\"deleteButton\" type=\"button\" mat-stroked-button aria-label=\"Delete\" [disabled]=\"!enabledDeleteButton\"\n [class.disabled]=\"!enabledDeleteButton\">\n <mat-icon svgIcon=\"ontimize:delete\"></mat-icon>\n <span>{{ 'DELETE' | oTranslate }}</span>\n </button>\n\n </ng-container>\n\n <ng-template #showButtonsWithoutText>\n <button *ngIf=\"insertButton\" type=\"button\" mat-icon-button aria-label=\"Insert\" (click)=\"add($event)\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n </button>\n\n <button *ngIf=\"refreshButton\" type=\"button\" mat-icon-button aria-label=\"Refresh\" (click)=\"reloadData()\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n </button>\n\n <button *ngIf=\"deleteButton\" type=\"button\" mat-icon-button aria-label=\"Delete\" [disabled]=\"!enabledDeleteButton\"\n [class.disabled]=\"!enabledDeleteButton\">\n <mat-icon svgIcon=\"ontimize:delete\"></mat-icon>\n </button>\n </ng-template>\n\n <ng-content select=\"[o-tree-button]\"></ng-content>\n </div>\n <div fxFlex>\n <span fxLayoutAlign=\"center center\" class=\"title\">{{ title | oTranslate }}</span>\n </div>\n <o-search-input *ngIf=\"quickFilter\" [filter-case-sensitive]=\"filterCaseSensitive\" [show-case-sensitive-checkbox]=\"showCaseSensitiveCheckbox()\"\n [columns]=\"quickFilterColumns\" [placeholder]=\"quickFilterPlaceholder\" appearance=\"outline\" float-label=\"never\" show-menu=\"no\">\n </o-search-input>\n <button type=\"button\" *ngIf=\"showTreeMenuButton\" mat-icon-button class=\"o-tree-menu-button\" [matMenuTriggerFor]=\"treeMenu.matMenu\"\n (click)=\"$event.stopPropagation()\">\n <mat-icon svgIcon=\"ontimize:more_vert\"></mat-icon>\n </button>\n <o-tree-menu #treeMenu [select-all-checkbox]=\"selectAllCheckbox\" [select-all-checkbox-visible]=\"selectAllCheckboxVisible\"\n (onSelectCheckboxChange)=\"onSelectCheckboxChange($event)\"></o-tree-menu>\n\n </div>\n\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n\n <!-- This is the tree node template for leaf nodes -->\n <mat-tree-node *matTreeNodeDef=\"let node\" (click)=\"leafNodeClicked($event, node)\" matTreeNodeToggle matTreeNodePadding\n [ngClass]=\"{'selected-node': isSelectedNode(node)}\">\n <!-- use a disabled button to provide padding for tree leaf -->\n <button mat-icon-button disabled></button>\n\n <ng-container *ngIf=\"selectAllCheckboxVisible; else simpleLeafNodeTpl\">\n <div class=\"node-wrapper\">\n <mat-checkbox *ngIf=\"selectAllCheckboxVisible; else simpleLeafNodeTpl\" [checked]=\"checklistSelection.isSelected(node)\"\n (click)=\"checkboxClicked($event)\" (change)=\"todoLeafItemSelectionToggle(node)\">\n </mat-checkbox>\n <ng-container [ngTemplateOutlet]=\"leafNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </div>\n </ng-container>\n <ng-template #simpleLeafNodeTpl>\n <ng-container [ngTemplateOutlet]=\"leafNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </ng-template>\n\n </mat-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\" (click)=\"parentNodeClicked($event, node)\" matTreeNodePadding\n [ngClass]=\"{'selected-node': isSelectedNode(node)}\">\n <button mat-icon-button [attr.aria-label]=\"'toggle ' + node.label\" matTreeNodeToggle (click)=\"onClickToggleButton($event, node)\">\n <mat-icon class=\"mat-icon-rtl-mirror\">\n {{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}\n </mat-icon>\n </button>\n\n <ng-container *ngIf=\"selectAllCheckboxVisible; else simpleParentNodeTpl\">\n <div class=\"node-wrapper\">\n <mat-checkbox *ngIf=\"selectAllCheckboxVisible; else simpleParentNodeTpl\" (click)=\"checkboxClicked($event)\"\n (change)=\"todoItemSelectionToggle(node)\" [checked]=\"descendantsAllSelected(node)\" [indeterminate]=\"descendantsPartiallySelected(node)\">\n </mat-checkbox>\n <ng-container [ngTemplateOutlet]=\"parentNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </div>\n </ng-container>\n\n <ng-template #simpleParentNodeTpl>\n <ng-container [ngTemplateOutlet]=\"parentNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </ng-template>\n </mat-tree-node>\n </mat-tree>\n</div>\n\n<ng-template let-node #leafNodeFulltemplate>\n <ng-container *ngIf=\"leafNodeTemplate; else defaultLeafNodeTpl\" [ngTemplateOutlet]=\"leafNodeTemplate\"\n [ngTemplateOutletContext]=\"{$implicit:node.data}\">\n </ng-container>\n\n <ng-template #defaultLeafNodeTpl>\n {{node.label}}\n </ng-template>\n</ng-template>\n\n<ng-template let-node #parentNodeFulltemplate>\n <ng-container *ngIf=\"parentNodeTemplate; else defaultParentNodeTpl\" [ngTemplateOutlet]=\"parentNodeTemplate\"\n [ngTemplateOutletContext]=\"{$implicit:node.data}\">\n </ng-container>\n\n <ng-template #defaultParentNodeTpl>\n <span>{{node.label}}</span>\n <mat-progress-bar *ngIf=\"node.isLoading\" mode=\"indeterminate\" fxFlex></mat-progress-bar>\n </ng-template>\n</ng-template>\n", styles: [".o-tree .mat-mdc-progress-bar{margin-left:30px}.o-tree .node-wrapper{align-items:center}\n"] }]
37696
+ }, providers: [OTreeDao], template: "<div fxLayout=\"column\" fxFlex>\n\n <div *ngIf=\"hasControls()\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\n\n <div class=\"buttons\">\n <ng-container *ngIf=\"showButtonsText;else showButtonsWithoutText\">\n\n <button *ngIf=\"insertButton\" type=\"button\" mat-stroked-button aria-label=\"Insert\" [disabled]=\"!enabledInsertButton\" (click)=\"add($event)\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n <span>{{ 'INSERT' | oTranslate }}</span>\n </button>\n\n <button *ngIf=\"refreshButton\" type=\"button\" mat-stroked-button aria-label=\"Refresh\" [disabled]=\"!enabledRefreshButton\" (click)=\"reloadData()\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n <span>{{ 'REFRESH' | oTranslate }}</span>\n </button>\n\n <button *ngIf=\"deleteButton\" type=\"button\" mat-stroked-button aria-label=\"Delete\" [disabled]=\"!enabledDeleteButton\"\n [class.disabled]=\"!enabledDeleteButton\">\n <mat-icon svgIcon=\"ontimize:delete\"></mat-icon>\n <span>{{ 'DELETE' | oTranslate }}</span>\n </button>\n\n </ng-container>\n\n <ng-template #showButtonsWithoutText>\n <button *ngIf=\"insertButton\" type=\"button\" mat-icon-button aria-label=\"Insert\" [disabled]=\"!enabledInsertButton\" (click)=\"add($event)\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n </button>\n\n <button *ngIf=\"refreshButton\" type=\"button\" mat-icon-button aria-label=\"Refresh\" [disabled]=\"!enabledRefreshButton\" (click)=\"reloadData()\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n </button>\n\n <button *ngIf=\"deleteButton\" type=\"button\" mat-icon-button aria-label=\"Delete\" [disabled]=\"!enabledDeleteButton\"\n [class.disabled]=\"!enabledDeleteButton\">\n <mat-icon svgIcon=\"ontimize:delete\"></mat-icon>\n </button>\n </ng-template>\n\n <ng-content select=\"[o-tree-button]\"></ng-content>\n </div>\n <div fxFlex>\n <span fxLayoutAlign=\"center center\" class=\"title\">{{ title | oTranslate }}</span>\n </div>\n <o-search-input *ngIf=\"quickFilter\" [filter-case-sensitive]=\"filterCaseSensitive\" [show-case-sensitive-checkbox]=\"showCaseSensitiveCheckbox()\"\n [columns]=\"quickFilterColumns\" [placeholder]=\"quickFilterPlaceholder\" appearance=\"outline\" float-label=\"never\" show-menu=\"no\">\n </o-search-input>\n <button type=\"button\" *ngIf=\"showTreeMenuButton\" mat-icon-button class=\"o-tree-menu-button\" [matMenuTriggerFor]=\"treeMenu.matMenu\"\n (click)=\"$event.stopPropagation()\">\n <mat-icon svgIcon=\"ontimize:more_vert\"></mat-icon>\n </button>\n <o-tree-menu #treeMenu [select-all-checkbox]=\"selectAllCheckbox\" [select-all-checkbox-visible]=\"selectAllCheckboxVisible\"\n (onSelectCheckboxChange)=\"onSelectCheckboxChange($event)\"></o-tree-menu>\n\n </div>\n\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n\n <!-- This is the tree node template for leaf nodes -->\n <mat-tree-node *matTreeNodeDef=\"let node\" (click)=\"leafNodeClicked($event, node)\" matTreeNodeToggle matTreeNodePadding\n [ngClass]=\"{'selected-node': isSelectedNode(node)}\">\n <!-- use a disabled button to provide padding for tree leaf -->\n <button mat-icon-button disabled></button>\n\n <ng-container *ngIf=\"selectAllCheckboxVisible; else simpleLeafNodeTpl\">\n <div class=\"node-wrapper\">\n <mat-checkbox *ngIf=\"selectAllCheckboxVisible; else simpleLeafNodeTpl\" [checked]=\"checklistSelection.isSelected(node)\"\n (click)=\"checkboxClicked($event)\" (change)=\"todoLeafItemSelectionToggle(node)\">\n </mat-checkbox>\n <ng-container [ngTemplateOutlet]=\"leafNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </div>\n </ng-container>\n <ng-template #simpleLeafNodeTpl>\n <ng-container [ngTemplateOutlet]=\"leafNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </ng-template>\n\n </mat-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\" (click)=\"parentNodeClicked($event, node)\" matTreeNodePadding\n [ngClass]=\"{'selected-node': isSelectedNode(node)}\">\n <button mat-icon-button [attr.aria-label]=\"'toggle ' + node.label\" matTreeNodeToggle (click)=\"onClickToggleButton($event, node)\">\n <mat-icon class=\"mat-icon-rtl-mirror\">\n {{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}\n </mat-icon>\n </button>\n\n <ng-container *ngIf=\"selectAllCheckboxVisible; else simpleParentNodeTpl\">\n <div class=\"node-wrapper\">\n <mat-checkbox *ngIf=\"selectAllCheckboxVisible; else simpleParentNodeTpl\" (click)=\"checkboxClicked($event)\"\n (change)=\"todoItemSelectionToggle(node)\" [checked]=\"descendantsAllSelected(node)\" [indeterminate]=\"descendantsPartiallySelected(node)\">\n </mat-checkbox>\n <ng-container [ngTemplateOutlet]=\"parentNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </div>\n </ng-container>\n\n <ng-template #simpleParentNodeTpl>\n <ng-container [ngTemplateOutlet]=\"parentNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </ng-template>\n </mat-tree-node>\n </mat-tree>\n</div>\n\n<ng-template let-node #leafNodeFulltemplate>\n <ng-container *ngIf=\"leafNodeTemplate; else defaultLeafNodeTpl\" [ngTemplateOutlet]=\"leafNodeTemplate\"\n [ngTemplateOutletContext]=\"{$implicit:node.data}\">\n </ng-container>\n\n <ng-template #defaultLeafNodeTpl>\n {{node.label}}\n </ng-template>\n</ng-template>\n\n<ng-template let-node #parentNodeFulltemplate>\n <ng-container *ngIf=\"parentNodeTemplate; else defaultParentNodeTpl\" [ngTemplateOutlet]=\"parentNodeTemplate\"\n [ngTemplateOutletContext]=\"{$implicit:node.data}\">\n </ng-container>\n\n <ng-template #defaultParentNodeTpl>\n <span>{{node.label}}</span>\n <mat-progress-bar *ngIf=\"node.isLoading\" mode=\"indeterminate\" fxFlex></mat-progress-bar>\n </ng-template>\n</ng-template>\n", styles: [".o-tree .mat-mdc-progress-bar{margin-left:30px}.o-tree .node-wrapper{align-items:center}\n"] }]
37253
37697
  }], ctorParameters: function () {
37254
37698
  return [{ type: i0.Injector }, { type: i0.ElementRef }, { type: OFormComponent, decorators: [{
37255
37699
  type: Optional
@@ -37329,31 +37773,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
37329
37773
  }]
37330
37774
  }] });
37331
37775
 
37332
- class OUserInfoService {
37333
- constructor(injector) {
37334
- this.injector = injector;
37335
- this.subject = new Subject();
37336
- }
37337
- setUserInfo(info) {
37338
- this.storedInfo = info;
37339
- this.subject.next(info);
37340
- }
37341
- getUserInfo() {
37342
- return this.storedInfo;
37343
- }
37344
- getUserInfoObservable() {
37345
- return this.subject.asObservable();
37346
- }
37347
- }
37348
- OUserInfoService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OUserInfoService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
37349
- OUserInfoService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OUserInfoService, providedIn: 'root' });
37350
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OUserInfoService, decorators: [{
37351
- type: Injectable,
37352
- args: [{
37353
- providedIn: 'root'
37354
- }]
37355
- }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
37356
-
37357
37776
  const DEFAULT_INPUTS_O_USER_INFO = [
37358
37777
  'showProfile: show-profile',
37359
37778
  'showSettings: show-settings',
@@ -37428,155 +37847,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
37428
37847
  }, template: "<div class=\"o-user-info-container\" fxLayout=\"row\" fxLayoutAlign=\"center\">\n <ng-container *ngIf=\"existsUserInfo\">\n <div class=\"o-user-info-wrapper\" fxLayout=\"row\" fxLayoutAlign=\"center center\" [matMenuTriggerFor]=\"menu\"\n fxLayoutGap=\"16px\">\n <div fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"o-user-info-avatar-wrapper\">\n <img [src]=\"avatar\" *ngIf=\"avatar\" alt=\"avatar image\"/>\n </div>\n <span class=\"o-user-info-username\" *ngIf=\"username\"> {{ username }}</span>\n <mat-icon svgIcon=\"ontimize:keyboard_arrow_down\"></mat-icon>\n </div>\n <mat-menu #menu=\"matMenu\" yPosition=\"below\" class=\"o-mat-menu\">\n <button type=\"button\" mat-menu-item (click)=\"onProfileClick()\" *ngIf=\"showProfile\">\n <mat-icon>person</mat-icon>\n <span>{{ 'APP_LAYOUT.USER_PROFILE' | oTranslate }}</span>\n </button>\n <button type=\"button\" mat-menu-item (click)=\"onSettingsClick()\" *ngIf=\"showSettings\">\n <mat-icon svgIcon=\"ontimize:settings\"></mat-icon>\n <span>{{ 'APP_LAYOUT.SETTINGS' | oTranslate }}</span>\n </button>\n <ng-container *ngIf=\"userInfoConfiguration\">\n <button *ngFor=\"let item of userInfoConfiguration.userInfoConfigurationItems\" type=\"button\" mat-menu-item\n [matTooltip]=\"item.name | oTranslate\" matTooltipDisabled=\"item.tooltip\" [ngClass]=\"item.class\"\n (click)=\"item.triggerOnClick($event)\">\n <mat-icon>{{item.icon}} </mat-icon>\n <span>{{ item.name | oTranslate }}</span>\n </button>\n </ng-container>\n <button type=\"button\" mat-menu-item (click)=\"onLogoutClick()\" *ngIf=\"showLogout\">\n <mat-icon svgIcon=\"ontimize:power_settings_new\"></mat-icon>\n <span>{{ 'LOGOUT' | oTranslate }}</span>\n </button>\n\n </mat-menu>\n </ng-container>\n</div>", styles: [".o-user-info .o-user-info-container{cursor:pointer;height:100%}.o-user-info .o-user-info-avatar-wrapper{width:30px;height:30px;overflow:hidden;border-radius:100%}.o-user-info .o-user-info-avatar-wrapper img{max-width:100%;height:auto}.o-user-info mat-icon{font-size:16px;line-height:26px;height:100%}\n"] }]
37429
37848
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Injector }, { type: i1.Router }]; }, propDecorators: { showLogout: [], showSettings: [], showProfile: [] } });
37430
37849
 
37431
- class AppConfigFactory {
37432
- constructor(injector) {
37433
- this.injector = injector;
37434
- this.config = this.injector.get(APP_CONFIG);
37435
- }
37436
- factory() {
37437
- return new AppConfig(this.config);
37438
- }
37439
- }
37440
- function appConfigFactory(injector) {
37441
- return new AppConfigFactory(injector).factory();
37442
- }
37443
-
37444
- class AuthGuardService {
37445
- constructor(injector) {
37446
- this.injector = injector;
37447
- this.router = this.injector.get(Router);
37448
- this.authService = this.injector.get(AuthService);
37449
- this.oUserInfoService = this.injector.get(OUserInfoService);
37450
- this.permissionsService = this.injector.get(PermissionsService);
37451
- }
37452
- canActivate(next, state) {
37453
- const isLoggedIn = this.authService.isLoggedIn();
37454
- let result = isLoggedIn;
37455
- if (!isLoggedIn) {
37456
- this.permissionsService.restart();
37457
- this.router.navigate([Codes.LOGIN_ROUTE]);
37458
- }
37459
- if (isLoggedIn) {
37460
- this.setUserInformation();
37461
- if (!this.permissionsService.hasPermissions()) {
37462
- result = this.permissionsService.getUserPermissionsAsPromise();
37463
- }
37464
- }
37465
- return result;
37466
- }
37467
- setUserInformation() {
37468
- const sessionInfo = this.authService.getSessionInfo();
37469
- this.oUserInfoService.setUserInfo({
37470
- username: sessionInfo.user,
37471
- avatar: './assets/images/user_profile.png'
37472
- });
37473
- }
37474
- }
37475
- AuthGuardService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthGuardService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
37476
- AuthGuardService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthGuardService, providedIn: 'root' });
37477
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthGuardService, decorators: [{
37478
- type: Injectable,
37479
- args: [{
37480
- providedIn: 'root'
37481
- }]
37482
- }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
37483
-
37484
- class OModulesInfoService {
37485
- constructor(injector, router) {
37486
- this.injector = injector;
37487
- this.router = router;
37488
- this.subject = new ReplaySubject();
37489
- this.router = this.injector.get(Router);
37490
- }
37491
- getModuleChangeObservable() {
37492
- this.router.events
37493
- .pipe(filter(e => e instanceof NavigationEnd), map(() => {
37494
- let route = this.router.routerState.root;
37495
- let routeTitle = '';
37496
- while (route.firstChild) {
37497
- route = route.firstChild;
37498
- }
37499
- if (route.snapshot.data['oAppHeaderTitle']) {
37500
- routeTitle = route.snapshot.data['oAppHeaderTitle'];
37501
- }
37502
- return routeTitle;
37503
- }))
37504
- .subscribe((title) => {
37505
- if (title) {
37506
- this.subject.next(title);
37507
- }
37508
- else {
37509
- this.subject.next("");
37510
- }
37511
- });
37512
- return this.subject.asObservable();
37513
- }
37514
- }
37515
- OModulesInfoService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OModulesInfoService, deps: [{ token: i0.Injector }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
37516
- OModulesInfoService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OModulesInfoService, providedIn: 'root' });
37517
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OModulesInfoService, decorators: [{
37518
- type: Injectable,
37519
- args: [{
37520
- providedIn: 'root'
37521
- }]
37522
- }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.Router }]; } });
37523
-
37524
- class PermissionsGuardService {
37525
- constructor(injector) {
37526
- this.injector = injector;
37527
- this.router = this.injector.get(Router);
37528
- this.permissionsService = this.injector.get(PermissionsService);
37529
- this.snackBarService = this.injector.get(SnackBarService);
37530
- this.shareCanActivateChildService = this.injector.get(ShareCanActivateChildService);
37531
- this.shareCanActivateChildService.setPermissionsGuard(this);
37532
- }
37533
- canActivateChild(childRoute, state) {
37534
- let restricted = false;
37535
- const oPermission = childRoute.data ? childRoute.data['oPermission'] : undefined;
37536
- const permissionId = (oPermission || {})['permissionId'];
37537
- if (Util.isDefined(permissionId)) {
37538
- restricted = this.permissionsService.isPermissionIdRouteRestricted(permissionId);
37539
- if (restricted) {
37540
- let msg = 'MESSAGES.NAVIGATION_NOT_ALLOWED_PERMISSION';
37541
- const route = oPermission['restrictedPermissionsRedirect'];
37542
- if (Util.isDefined(route)) {
37543
- msg = 'MESSAGES.NAVIGATION_REDIRECTED_PERMISSION';
37544
- this.router.navigate([route]);
37545
- }
37546
- this.snackBarService.open(msg);
37547
- }
37548
- }
37549
- return !restricted;
37550
- }
37551
- }
37552
- PermissionsGuardService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PermissionsGuardService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
37553
- PermissionsGuardService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PermissionsGuardService });
37554
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PermissionsGuardService, decorators: [{
37555
- type: Injectable
37556
- }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
37557
-
37558
- function getPermissionsServiceProvider(injector) {
37559
- return new PermissionsService(injector);
37560
- }
37561
- class OPermissionsModule {
37562
- }
37563
- OPermissionsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OPermissionsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
37564
- OPermissionsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: OPermissionsModule, imports: [CommonModule] });
37565
- OPermissionsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OPermissionsModule, providers: [
37566
- { provide: PermissionsGuardService, useClass: PermissionsGuardService },
37567
- { provide: OntimizePermissionsService, useFactory: permissionsServiceFactory, deps: [Injector] }
37568
- ], imports: [CommonModule] });
37569
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OPermissionsModule, decorators: [{
37570
- type: NgModule,
37571
- args: [{
37572
- imports: [CommonModule],
37573
- providers: [
37574
- { provide: PermissionsGuardService, useClass: PermissionsGuardService },
37575
- { provide: OntimizePermissionsService, useFactory: permissionsServiceFactory, deps: [Injector] }
37576
- ]
37577
- }]
37578
- }] });
37579
-
37580
37850
  const DEFAULT_INPUTS_O_USER_INFO_MENU_ITEM = [
37581
37851
  'name',
37582
37852
  'route',
@@ -38184,7 +38454,7 @@ class OAppSidenavMenuGroupComponent {
38184
38454
  }
38185
38455
  }
38186
38456
  OAppSidenavMenuGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OAppSidenavMenuGroupComponent, deps: [{ token: i0.Injector }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
38187
- OAppSidenavMenuGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OAppSidenavMenuGroupComponent, selector: "o-app-sidenav-menu-group", inputs: { menuGroup: ["menu-group", "menuGroup"], sidenavOpened: ["sidenav-opened", "sidenavOpened"], level: "level" }, outputs: { onItemClick: "onItemClick" }, host: { properties: { "class": "getClass()", "attr.disabled": "disabled" } }, ngImport: i0, template: "<ng-container *ngIf=\"!hidden\">\n <a mat-button mat-button class=\"o-app-sidenav-item o-app-sidenav-menugroup\" [class.opened]=\"menuGroup.opened\" (click)=\"onClick()\"\n [class.o-app-sidenav-viewer-sidenav-item-selected]=\"active\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\n <ng-container *ngIf=\"sidenavOpened\">\n <mat-icon *ngIf=\"menuGroup.svgIcon\" [svgIcon]=\"menuGroup.svgIcon\"></mat-icon>\n <mat-icon *ngIf=\"menuGroup.icon\">{{ menuGroup.icon }}</mat-icon>\n <span class=\"o-app-sidenav-menugroup-title\">{{ menuGroup.name | oTranslate }}</span>\n <span class=\"fill-remaining\"></span>\n <ng-container *ngIf=\"appMenuService.isMenuGroupRoute(menuGroup) && menuGroup.opened; else arrowMenuGroupTemplate\">\n <mat-icon class=\"o-app-sidenav-menugroup-arrow\" svgIcon=\"ontimize:keyboard_arrow_right\" (click)=\"toggle($event)\"></mat-icon>\n </ng-container>\n <ng-template #arrowMenuGroupTemplate>\n <mat-icon class=\"o-app-sidenav-menugroup-arrow\" svgIcon=\"ontimize:keyboard_arrow_right\"></mat-icon>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!sidenavOpened\">\n <mat-icon [matTooltip]=\"tooltip\" matTooltipClass=\"menugroup-tooltip\" matTooltipPosition=\"right\" *ngIf=\"menuGroup.svgIcon\"\n [svgIcon]=\"menuGroup.svgIcon\"></mat-icon>\n <mat-icon [matTooltip]=\"tooltip\" matTooltipClass=\"menugroup-tooltip\" matTooltipPosition=\"right\" *ngIf=\"menuGroup.icon\">{{\n menuGroup.icon }}</mat-icon>\n </ng-container>\n </div>\n </a>\n\n <div class=\"o-app-sidenav-menugroup-items-container\">\n <ul [@contentExpansion]=\"contentExpansion\" class=\"o-app-sidenav-menugroup-ul\">\n <ng-container *ngFor=\"let menuItem of menuGroup.items\">\n <o-app-sidenav-menu-item [sidenav-opened]=\"sidenavOpened\" *ngIf=\"!menuItem.items; else menuGroup\" [disabled]=\"disabled\" [menu-item]=\"menuItem\"\n [menu-item-type]=\"appMenuService.getMenuItemType(menuItem)\" (onClick)=\"onMenuItemClick($event)\">\n </o-app-sidenav-menu-item>\n <ng-template #menuGroup>\n <o-app-sidenav-menu-group [menu-group]=\"menuItem\" [sidenav-opened]=\"sidenavOpened\" [level]=\"level + 1\"\n *ngIf=\"appMenuService.getMenuItemType(menuItem) === 'group'\" (onItemClick)=\"onMenuItemClick($event)\">\n </o-app-sidenav-menu-group>\n </ng-template>\n </ng-container>\n </ul>\n </div>\n</ng-container>\n", styles: [".o-app-sidenav-menu-group .o-app-sidenav-menugroup.mat-mdc-button{min-width:0}.o-app-sidenav-menu-group[disabled=true] .o-app-sidenav-menugroup{cursor:default}.o-app-sidenav-menu-group .mat-mdc-tooltip.menugroup-tooltip{margin-left:28px}\n"], dependencies: [{ kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i2.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "component", type: i4.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: OAppSidenavMenuGroupComponent, selector: "o-app-sidenav-menu-group", inputs: ["menu-group", "sidenav-opened", "level"], outputs: ["onItemClick"] }, { kind: "component", type: OAppSidenavMenuItemComponent, selector: "o-app-sidenav-menu-item", inputs: ["menu-item", "menu-item-type", "sidenav-opened", "disabled"], outputs: ["onClick"] }, { kind: "pipe", type: OTranslatePipe, name: "oTranslate" }], animations: [
38457
+ OAppSidenavMenuGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OAppSidenavMenuGroupComponent, selector: "o-app-sidenav-menu-group", inputs: { menuGroup: ["menu-group", "menuGroup"], sidenavOpened: ["sidenav-opened", "sidenavOpened"], level: "level" }, outputs: { onItemClick: "onItemClick" }, host: { properties: { "class": "getClass()", "attr.disabled": "disabled" } }, ngImport: i0, template: "<ng-container *ngIf=\"!hidden\">\n <a mat-button mat-button class=\"o-app-sidenav-item o-app-sidenav-menugroup\" [class.opened]=\"menuGroup.opened\" (click)=\"onClick()\"\n [class.o-app-sidenav-viewer-sidenav-item-selected]=\"active\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\n <ng-container *ngIf=\"sidenavOpened\">\n <mat-icon *ngIf=\"menuGroup.svgIcon\" [svgIcon]=\"menuGroup.svgIcon\"></mat-icon>\n <mat-icon *ngIf=\"menuGroup.icon\">{{ menuGroup.icon }}</mat-icon>\n <span class=\"o-app-sidenav-menugroup-title\">{{ menuGroup.name | oTranslate }}</span>\n <span class=\"fill-remaining\"></span>\n <ng-container *ngIf=\"appMenuService.isMenuGroupRoute(menuGroup) && menuGroup.opened; else arrowMenuGroupTemplate\">\n <mat-icon class=\"o-app-sidenav-menugroup-arrow\" svgIcon=\"ontimize:keyboard_arrow_right\" (click)=\"toggle($event)\"></mat-icon>\n </ng-container>\n <ng-template #arrowMenuGroupTemplate>\n <mat-icon class=\"o-app-sidenav-menugroup-arrow\" svgIcon=\"ontimize:keyboard_arrow_right\"></mat-icon>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!sidenavOpened\">\n <mat-icon [matTooltip]=\"tooltip\" matTooltipClass=\"menugroup-tooltip\" matTooltipPosition=\"right\" *ngIf=\"menuGroup.svgIcon\"\n [svgIcon]=\"menuGroup.svgIcon\"></mat-icon>\n <mat-icon [matTooltip]=\"tooltip\" matTooltipClass=\"menugroup-tooltip\" matTooltipPosition=\"right\" *ngIf=\"menuGroup.icon\">{{\n menuGroup.icon }}</mat-icon>\n </ng-container>\n </div>\n </a>\n\n <div class=\"o-app-sidenav-menugroup-items-container\">\n <ul [@contentExpansion]=\"contentExpansion\" class=\"o-app-sidenav-menugroup-ul\">\n <ng-container *ngFor=\"let menuItem of menuGroup.items\">\n <ng-container *ngIf=\"appMenuService.isVisible(menuItem)\">\n <o-app-sidenav-menu-item [sidenav-opened]=\"sidenavOpened\" *ngIf=\"!menuItem.items; else menuGroup\" [disabled]=\"disabled\"\n [menu-item]=\"menuItem\" [menu-item-type]=\"appMenuService.getMenuItemType(menuItem)\" (onClick)=\"onMenuItemClick($event)\">\n </o-app-sidenav-menu-item>\n <ng-template #menuGroup>\n <o-app-sidenav-menu-group [menu-group]=\"menuItem\" [sidenav-opened]=\"sidenavOpened\" [level]=\"level + 1\"\n *ngIf=\"appMenuService.getMenuItemType(menuItem) === 'group'\" (onItemClick)=\"onMenuItemClick($event)\">\n </o-app-sidenav-menu-group>\n </ng-template>\n </ng-container>\n </ng-container>\n </ul>\n </div>\n</ng-container>\n", styles: [".o-app-sidenav-menu-group .o-app-sidenav-menugroup.mat-mdc-button{min-width:0}.o-app-sidenav-menu-group[disabled=true] .o-app-sidenav-menugroup{cursor:default}.o-app-sidenav-menu-group .mat-mdc-tooltip.menugroup-tooltip{margin-left:28px}\n"], dependencies: [{ kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i2.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "component", type: i4.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: OAppSidenavMenuGroupComponent, selector: "o-app-sidenav-menu-group", inputs: ["menu-group", "sidenav-opened", "level"], outputs: ["onItemClick"] }, { kind: "component", type: OAppSidenavMenuItemComponent, selector: "o-app-sidenav-menu-item", inputs: ["menu-item", "menu-item-type", "sidenav-opened", "disabled"], outputs: ["onClick"] }, { kind: "pipe", type: OTranslatePipe, name: "oTranslate" }], animations: [
38188
38458
  trigger('contentExpansion', [
38189
38459
  state('collapsed', style({ height: '0px' })),
38190
38460
  state('expanded', style({ height: '*' })),
@@ -38212,7 +38482,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
38212
38482
  ], changeDetection: ChangeDetectionStrategy.OnPush, host: {
38213
38483
  '[class]': 'getClass()',
38214
38484
  '[attr.disabled]': 'disabled'
38215
- }, template: "<ng-container *ngIf=\"!hidden\">\n <a mat-button mat-button class=\"o-app-sidenav-item o-app-sidenav-menugroup\" [class.opened]=\"menuGroup.opened\" (click)=\"onClick()\"\n [class.o-app-sidenav-viewer-sidenav-item-selected]=\"active\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\n <ng-container *ngIf=\"sidenavOpened\">\n <mat-icon *ngIf=\"menuGroup.svgIcon\" [svgIcon]=\"menuGroup.svgIcon\"></mat-icon>\n <mat-icon *ngIf=\"menuGroup.icon\">{{ menuGroup.icon }}</mat-icon>\n <span class=\"o-app-sidenav-menugroup-title\">{{ menuGroup.name | oTranslate }}</span>\n <span class=\"fill-remaining\"></span>\n <ng-container *ngIf=\"appMenuService.isMenuGroupRoute(menuGroup) && menuGroup.opened; else arrowMenuGroupTemplate\">\n <mat-icon class=\"o-app-sidenav-menugroup-arrow\" svgIcon=\"ontimize:keyboard_arrow_right\" (click)=\"toggle($event)\"></mat-icon>\n </ng-container>\n <ng-template #arrowMenuGroupTemplate>\n <mat-icon class=\"o-app-sidenav-menugroup-arrow\" svgIcon=\"ontimize:keyboard_arrow_right\"></mat-icon>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!sidenavOpened\">\n <mat-icon [matTooltip]=\"tooltip\" matTooltipClass=\"menugroup-tooltip\" matTooltipPosition=\"right\" *ngIf=\"menuGroup.svgIcon\"\n [svgIcon]=\"menuGroup.svgIcon\"></mat-icon>\n <mat-icon [matTooltip]=\"tooltip\" matTooltipClass=\"menugroup-tooltip\" matTooltipPosition=\"right\" *ngIf=\"menuGroup.icon\">{{\n menuGroup.icon }}</mat-icon>\n </ng-container>\n </div>\n </a>\n\n <div class=\"o-app-sidenav-menugroup-items-container\">\n <ul [@contentExpansion]=\"contentExpansion\" class=\"o-app-sidenav-menugroup-ul\">\n <ng-container *ngFor=\"let menuItem of menuGroup.items\">\n <o-app-sidenav-menu-item [sidenav-opened]=\"sidenavOpened\" *ngIf=\"!menuItem.items; else menuGroup\" [disabled]=\"disabled\" [menu-item]=\"menuItem\"\n [menu-item-type]=\"appMenuService.getMenuItemType(menuItem)\" (onClick)=\"onMenuItemClick($event)\">\n </o-app-sidenav-menu-item>\n <ng-template #menuGroup>\n <o-app-sidenav-menu-group [menu-group]=\"menuItem\" [sidenav-opened]=\"sidenavOpened\" [level]=\"level + 1\"\n *ngIf=\"appMenuService.getMenuItemType(menuItem) === 'group'\" (onItemClick)=\"onMenuItemClick($event)\">\n </o-app-sidenav-menu-group>\n </ng-template>\n </ng-container>\n </ul>\n </div>\n</ng-container>\n", styles: [".o-app-sidenav-menu-group .o-app-sidenav-menugroup.mat-mdc-button{min-width:0}.o-app-sidenav-menu-group[disabled=true] .o-app-sidenav-menugroup{cursor:default}.o-app-sidenav-menu-group .mat-mdc-tooltip.menugroup-tooltip{margin-left:28px}\n"] }]
38485
+ }, template: "<ng-container *ngIf=\"!hidden\">\n <a mat-button mat-button class=\"o-app-sidenav-item o-app-sidenav-menugroup\" [class.opened]=\"menuGroup.opened\" (click)=\"onClick()\"\n [class.o-app-sidenav-viewer-sidenav-item-selected]=\"active\">\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\n <ng-container *ngIf=\"sidenavOpened\">\n <mat-icon *ngIf=\"menuGroup.svgIcon\" [svgIcon]=\"menuGroup.svgIcon\"></mat-icon>\n <mat-icon *ngIf=\"menuGroup.icon\">{{ menuGroup.icon }}</mat-icon>\n <span class=\"o-app-sidenav-menugroup-title\">{{ menuGroup.name | oTranslate }}</span>\n <span class=\"fill-remaining\"></span>\n <ng-container *ngIf=\"appMenuService.isMenuGroupRoute(menuGroup) && menuGroup.opened; else arrowMenuGroupTemplate\">\n <mat-icon class=\"o-app-sidenav-menugroup-arrow\" svgIcon=\"ontimize:keyboard_arrow_right\" (click)=\"toggle($event)\"></mat-icon>\n </ng-container>\n <ng-template #arrowMenuGroupTemplate>\n <mat-icon class=\"o-app-sidenav-menugroup-arrow\" svgIcon=\"ontimize:keyboard_arrow_right\"></mat-icon>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!sidenavOpened\">\n <mat-icon [matTooltip]=\"tooltip\" matTooltipClass=\"menugroup-tooltip\" matTooltipPosition=\"right\" *ngIf=\"menuGroup.svgIcon\"\n [svgIcon]=\"menuGroup.svgIcon\"></mat-icon>\n <mat-icon [matTooltip]=\"tooltip\" matTooltipClass=\"menugroup-tooltip\" matTooltipPosition=\"right\" *ngIf=\"menuGroup.icon\">{{\n menuGroup.icon }}</mat-icon>\n </ng-container>\n </div>\n </a>\n\n <div class=\"o-app-sidenav-menugroup-items-container\">\n <ul [@contentExpansion]=\"contentExpansion\" class=\"o-app-sidenav-menugroup-ul\">\n <ng-container *ngFor=\"let menuItem of menuGroup.items\">\n <ng-container *ngIf=\"appMenuService.isVisible(menuItem)\">\n <o-app-sidenav-menu-item [sidenav-opened]=\"sidenavOpened\" *ngIf=\"!menuItem.items; else menuGroup\" [disabled]=\"disabled\"\n [menu-item]=\"menuItem\" [menu-item-type]=\"appMenuService.getMenuItemType(menuItem)\" (onClick)=\"onMenuItemClick($event)\">\n </o-app-sidenav-menu-item>\n <ng-template #menuGroup>\n <o-app-sidenav-menu-group [menu-group]=\"menuItem\" [sidenav-opened]=\"sidenavOpened\" [level]=\"level + 1\"\n *ngIf=\"appMenuService.getMenuItemType(menuItem) === 'group'\" (onItemClick)=\"onMenuItemClick($event)\">\n </o-app-sidenav-menu-group>\n </ng-template>\n </ng-container>\n </ng-container>\n </ul>\n </div>\n</ng-container>\n", styles: [".o-app-sidenav-menu-group .o-app-sidenav-menugroup.mat-mdc-button{min-width:0}.o-app-sidenav-menu-group[disabled=true] .o-app-sidenav-menugroup{cursor:default}.o-app-sidenav-menu-group .mat-mdc-tooltip.menugroup-tooltip{margin-left:28px}\n"] }]
38216
38486
  }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { sidenavOpened: [], level: [] } });
38217
38487
 
38218
38488
  const DEFAULT_INPUTS_O_APP_SIDENAV = [
@@ -38238,7 +38508,7 @@ class OAppSidenavComponent {
38238
38508
  this.elRef = elRef;
38239
38509
  this.cd = cd;
38240
38510
  this.media = media;
38241
- this._menuRootArray = [];
38511
+ this.menuRootArray = [];
38242
38512
  this._layoutMode = Codes.APP_LAYOUT_MODE_DESKTOP;
38243
38513
  this.opened = true;
38244
38514
  this._showUserInfo = true;
@@ -38251,6 +38521,7 @@ class OAppSidenavComponent {
38251
38521
  this.manuallyClosed = false;
38252
38522
  this.appMenuService = this.injector.get(AppMenuService);
38253
38523
  this.menuRootArray = this.appMenuService.getMenuRoots();
38524
+ this.permissionSubscription = this.appMenuService.onPermissionMenuChanged.subscribe(() => this.refreshMenuRoots());
38254
38525
  this.oUserInfoService = this.injector.get(OUserInfoService);
38255
38526
  const self = this;
38256
38527
  this.mediaWatch = this.media.asObservable().subscribe(() => {
@@ -38259,6 +38530,10 @@ class OAppSidenavComponent {
38259
38530
  }
38260
38531
  });
38261
38532
  }
38533
+ refreshMenuRoots() {
38534
+ this.menuRootArray = [...this.appMenuService.getMenuRoots()];
38535
+ this.cd.detectChanges();
38536
+ }
38262
38537
  onResize() {
38263
38538
  if (!this.manuallyClosed && !this.isScreenSmall() && !this.isMobileMode()) {
38264
38539
  this.sidenav.open();
@@ -38276,10 +38551,10 @@ class OAppSidenavComponent {
38276
38551
  this.userInfo = this.oUserInfoService.getUserInfo();
38277
38552
  this.userInfoSubscription = this.oUserInfoService.getUserInfoObservable().subscribe(res => {
38278
38553
  this.userInfo = res;
38279
- this.refreshMenuRoots();
38554
+ this.refreshMenuItemUserInfo();
38280
38555
  });
38281
38556
  }
38282
- this.refreshMenuRoots();
38557
+ this.refreshMenuItemUserInfo();
38283
38558
  }
38284
38559
  get layoutMode() {
38285
38560
  return this._layoutMode;
@@ -38299,7 +38574,7 @@ class OAppSidenavComponent {
38299
38574
  this._sidenavMode = m;
38300
38575
  }
38301
38576
  }
38302
- refreshMenuRoots() {
38577
+ refreshMenuItemUserInfo() {
38303
38578
  if (this.showUserInfo && this.userInfo && this._showToggleButton) {
38304
38579
  const firstRoot = this.menuRootArray[0];
38305
38580
  const alreadyExistsUserInfo = firstRoot ? firstRoot.id === 'user-info' : false;
@@ -38335,6 +38610,9 @@ class OAppSidenavComponent {
38335
38610
  if (this.userInfoSubscription) {
38336
38611
  this.userInfoSubscription.unsubscribe();
38337
38612
  }
38613
+ if (this.permissionSubscription) {
38614
+ this.permissionSubscription.unsubscribe();
38615
+ }
38338
38616
  }
38339
38617
  isScreenSmall() {
38340
38618
  return !this.manuallyClosed && this.media.isActive('lt-sm');
@@ -38348,12 +38626,6 @@ class OAppSidenavComponent {
38348
38626
  isSidenavOpened() {
38349
38627
  return this.opened && !this.isMobileMode() && !this.isScreenSmall();
38350
38628
  }
38351
- get menuRootArray() {
38352
- return this._menuRootArray;
38353
- }
38354
- set menuRootArray(val) {
38355
- this._menuRootArray = val;
38356
- }
38357
38629
  toggleSidenav() {
38358
38630
  const promise = this.sidenav.opened ? this.sidenav.close() : this.sidenav.open();
38359
38631
  const self = this;
@@ -38395,7 +38667,7 @@ class OAppSidenavComponent {
38395
38667
  OAppSidenavComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OAppSidenavComponent, deps: [{ token: i0.Injector }, { token: i1.Router }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i2$2.MediaObserver }], target: i0.ɵɵFactoryTarget.Component });
38396
38668
  OAppSidenavComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OAppSidenavComponent, selector: "o-app-sidenav", inputs: { opened: "opened", showUserInfo: ["show-user-info", "showUserInfo"], showToggleButton: ["show-toggle-button", "showToggleButton"], openedSidenavImg: ["opened-sidenav-image", "openedSidenavImg"], closedSidenavImg: ["closed-sidenav-image", "closedSidenavImg"], layoutMode: ["layout-mode", "layoutMode"], sidenavMode: ["sidenav-mode", "sidenavMode"] }, outputs: { onSidenavOpenedChange: "onSidenavOpenedChange", onSidenavOpenedStart: "onSidenavOpenedStart", onSidenavClosedStart: "onSidenavClosedStart", onSidenavToggle: "onSidenavToggle", afterSidenavToggle: "afterSidenavToggle" }, host: { listeners: { "window:resize": "onResize()" }, properties: { "class.o-app-sidenav": "true" } }, providers: [
38397
38669
  { provide: OAppSidenavBase, useExisting: forwardRef(() => OAppSidenavComponent) }
38398
- ], viewQueries: [{ propertyName: "sidenav", first: true, predicate: MatSidenav, descendants: true }], ngImport: i0, template: "<mat-sidenav-container class=\"o-app-sidenav-container\" [class.opened]=\"sidenav.opened\"\n [class.o-app-sidenav-mode-desktop]=\"(layoutMode || 'desktop') === 'desktop'\"\n [class.o-app-sidenav-mode-mobile]=\"(layoutMode || 'desktop') !== 'desktop'\">\n\n <mat-sidenav #sidenav class=\"o-app-sidenav-sidenav o-scroll\" [opened]=\"isSidenavOpened()\"\n [mode]=\"(sidenavMode || ((layoutMode || 'desktop') === 'desktop' ? 'side' : 'over'))\" [class.mat-drawer-opened]=\"sidenav.opened\"\n [class.mat-drawer-closed]=\"!sidenav.opened\" fxLayoutAlign=\"start stretch\" (openedChange)=\"sidenavOpenedChange()\"\n (closedStart)=\"sidenavClosedStart()\" (openedStart)=\"sidenavOpenedStart()\">\n <div fxFlex fxLayout=\"column\">\n <div fxLayout=\"row\" fxLayoutAlign=\"end center\" class=\"sidenav-toggle-container\" *ngIf=\"isDesktopMode()\">\n <mat-icon class=\"sidenav-toggle\" (click)=\"toggleSidenav()\" svgIcon=\"ontimize:menu\">menu</mat-icon>\n </div>\n\n <o-app-sidenav-image [opened-src]=\"openedSidenavImg\" [closed-src]=\"closedSidenavImg\"> </o-app-sidenav-image>\n <ng-content select=\"o-app-layout-sidenav-projection-start\"></ng-content>\n <div class=\"navMenu\">\n <nav *ngFor=\"let menuRootItem of menuRootArray\">\n\n <ul *ngIf=\"appMenuService.getMenuItemType(menuRootItem) !== 'group'\">\n <o-app-sidenav-menu-item [menu-item]=\"menuRootItem\" [menu-item-type]=\"appMenuService.getMenuItemType(menuRootItem)\"\n [sidenav-opened]=\"sidenav.opened\" (onClick)=\"onMenuItemClick()\">\n </o-app-sidenav-menu-item>\n </ul>\n\n <o-app-sidenav-menu-group [menu-group]=\"menuRootItem\" [sidenav-opened]=\"sidenav.opened\" level=\"1\"\n *ngIf=\"appMenuService.getMenuItemType(menuRootItem) === 'group'\" (onItemClick)=\"onMenuItemClick()\">\n </o-app-sidenav-menu-group>\n\n </nav>\n </div>\n <div class=\"layout-sidenav-projection-end\">\n <ng-content select=\"o-app-layout-sidenav-projection-end\"></ng-content>\n </div>\n </div>\n </mat-sidenav>\n\n <mat-sidenav-content class=\"o-app-sidenav-content\">\n <ng-content></ng-content>\n </mat-sidenav-content>\n</mat-sidenav-container>\n", styles: [".o-app-sidenav.header-layout .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav{box-shadow:3px 48px 6px #0000003d}.o-app-sidenav .navMenu{flex:1;display:flex;flex-direction:column;overflow:auto}@-moz-document url-prefix(){.o-app-sidenav .navMenu{height:100%}}.o-app-sidenav .o-app-sidenav-menu-group a,.o-app-sidenav .o-app-sidenav-menu-item a{margin-left:8px}.o-app-sidenav .o-app-sidenav-menu-group a .mat-icon svg,.o-app-sidenav .o-app-sidenav-menu-item a .mat-icon svg{display:flex}.o-app-sidenav .o-app-sidenav-menu-group[disabled=true] .mat-button-focus-overlay,.o-app-sidenav .o-app-sidenav-menu-group[disabled=true] .mat-mdc-button-persistent-ripple,.o-app-sidenav .o-app-sidenav-menu-item[disabled=true] .mat-button-focus-overlay,.o-app-sidenav .o-app-sidenav-menu-item[disabled=true] .mat-mdc-button-persistent-ripple{display:none}.o-app-sidenav .o-app-sidenav-menu-group[disabled=true] .o-app-sidenav-item,.o-app-sidenav .o-app-sidenav-menu-item[disabled=true] .o-app-sidenav-item{opacity:.5}.o-app-sidenav .o-app-sidenav-menu-group[disabled=true] a,.o-app-sidenav .o-app-sidenav-menu-item[disabled=true] a{cursor:initial}.o-app-sidenav .o-app-sidenav-menugroup{transition:background-color .5s}.o-app-sidenav .o-app-sidenav-menugroup-items-container{overflow:hidden}.o-app-sidenav .o-app-sidenav-container{width:100%;height:100%}.o-app-sidenav .o-app-sidenav-container.o-app-sidenav-mode-desktop:not(.opened) .o-app-sidenav-sidenav.mat-drawer-closed{visibility:visible!important;transform:translate3d(-191px,0,0)}.o-app-sidenav .o-app-sidenav-container.o-app-sidenav-mode-desktop:not(.opened) .o-app-sidenav-content.mat-drawer-content{margin-right:48px!important;transform:translate3d(48px,0,0)!important}.o-app-sidenav .o-app-sidenav-container .o-app-sidenav-content{position:absolute;right:0;left:0;min-height:100%;display:flex;flex-direction:column}.o-app-sidenav .o-app-sidenav-container .o-app-sidenav-content router-outlet+*{flex-grow:1}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav{box-shadow:3px 0 6px #0000003d;width:240px;bottom:0;overflow:auto;height:100%}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menugroup{transition:padding .5s 0s}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menugroup .o-app-sidenav-menugroup-arrow{transition:.5s transform cubic-bezier(.25,.8,.25,1)}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menugroup.opened .o-app-sidenav-menugroup-arrow{transform:rotate(90deg)}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menugroup-title,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menuitem-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-1 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-group a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-1 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-item a{padding-left:28px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-group a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-item a{padding-left:52px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-2 a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-3 a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-4 a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-5 a{padding-right:4px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-3 a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-4 a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-5 a{padding-left:52px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menugroup mat-icon:not(.o-app-sidenav-menugroup-arrow),.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menuitem mat-icon:not(.o-app-sidenav-menugroup-arrow){margin-right:16px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closing{transform:translate3d(-191px,0,0)}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed{text-align:center}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed .o-app-sidenav-item:not(.o-user-info){cursor:pointer}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed .o-app-sidenav-item.o-user-info:focus,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed .o-app-sidenav-item.o-user-info:hover{color:inherit}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed .o-app-sidenav-menu-group:not([disabled=true]) a.o-app-sidenav-viewer-sidenav-item-selected,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed .o-app-sidenav-menu-item:not([disabled=true]) a.o-app-sidenav-viewer-sidenav-item-selected{padding:0 8px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed nav{width:48px;min-width:48px;margin-left:auto}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed .o-app-sidenav-image .o-app-sidenav-image-container{padding:0;text-align:end;max-height:36px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed .o-app-sidenav-image .o-app-sidenav-image-container .o-app-sidenav-image{max-height:36px;margin-right:8px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container{padding-bottom:16px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .sidenav-toggle-container{height:48px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container nav a{border-radius:0;box-sizing:border-box;display:block;line-height:48px;height:auto;font-size:14px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container nav a>.mat-icon{vertical-align:middle;height:24px;width:24px;font-size:24px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container ul{list-style-type:none;margin:0;padding:0}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container ul li{margin:0;padding:0}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .sidenav-toggle{padding:4px 12px 8px;cursor:pointer}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-1 a{font-size:14px;line-height:48px;height:48px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-1 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-group a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-1 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-item a{font-size:12px;line-height:40px;height:40px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-1 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-group a .mat-mdc-button-touch-target,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-1 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-item a .mat-mdc-button-touch-target{height:40px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a{font-size:12px;line-height:40px;height:40px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a .mat-mdc-button-touch-target{height:40px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-group a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-item a{font-size:11px;line-height:40px;height:40px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-group a .mat-mdc-button-touch-target,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-item a .mat-mdc-button-touch-target{height:40px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-group a .mat-icon,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-item a .mat-icon{font-size:20px;height:20px;width:20px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menugroup-arrow{display:flex}\n"], dependencies: [{ kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i2.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6$3.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i6$3.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i6$3.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "component", type: OAppSidenavMenuGroupComponent, selector: "o-app-sidenav-menu-group", inputs: ["menu-group", "sidenav-opened", "level"], outputs: ["onItemClick"] }, { kind: "component", type: OAppSidenavImageComponent, selector: "o-app-sidenav-image", inputs: ["opened-src", "closed-src"] }, { kind: "component", type: OAppSidenavMenuItemComponent, selector: "o-app-sidenav-menu-item", inputs: ["menu-item", "menu-item-type", "sidenav-opened", "disabled"], outputs: ["onClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
38670
+ ], viewQueries: [{ propertyName: "sidenav", first: true, predicate: MatSidenav, descendants: true }], ngImport: i0, template: "<mat-sidenav-container class=\"o-app-sidenav-container\" [class.opened]=\"sidenav.opened\"\n [class.o-app-sidenav-mode-desktop]=\"(layoutMode || 'desktop') === 'desktop'\"\n [class.o-app-sidenav-mode-mobile]=\"(layoutMode || 'desktop') !== 'desktop'\">\n\n <mat-sidenav #sidenav class=\"o-app-sidenav-sidenav o-scroll\" [opened]=\"isSidenavOpened()\"\n [mode]=\"(sidenavMode || ((layoutMode || 'desktop') === 'desktop' ? 'side' : 'over'))\" [class.mat-drawer-opened]=\"sidenav.opened\"\n [class.mat-drawer-closed]=\"!sidenav.opened\" fxLayoutAlign=\"start stretch\" (openedChange)=\"sidenavOpenedChange()\"\n (closedStart)=\"sidenavClosedStart()\" (openedStart)=\"sidenavOpenedStart()\">\n <div fxFlex fxLayout=\"column\">\n <div fxLayout=\"row\" fxLayoutAlign=\"end center\" class=\"sidenav-toggle-container\" *ngIf=\"isDesktopMode()\">\n <mat-icon class=\"sidenav-toggle\" (click)=\"toggleSidenav()\" svgIcon=\"ontimize:menu\">menu</mat-icon>\n </div>\n\n <o-app-sidenav-image [opened-src]=\"openedSidenavImg\" [closed-src]=\"closedSidenavImg\"> </o-app-sidenav-image>\n <ng-content select=\"o-app-layout-sidenav-projection-start\"></ng-content>\n <div class=\"navMenu\">\n <nav *ngFor=\"let menuRootItem of menuRootArray\">\n\n <ul *ngIf=\"appMenuService.getMenuItemType(menuRootItem) !== 'group' && appMenuService.isVisible(menuRootItem)\">\n <o-app-sidenav-menu-item [menu-item]=\"menuRootItem\" [menu-item-type]=\"appMenuService.getMenuItemType(menuRootItem)\"\n [sidenav-opened]=\"sidenav.opened\" (onClick)=\"onMenuItemClick()\">\n </o-app-sidenav-menu-item>\n </ul>\n\n <o-app-sidenav-menu-group [menu-group]=\"menuRootItem\" [sidenav-opened]=\"sidenav.opened\" level=\"1\"\n *ngIf=\"appMenuService.getMenuItemType(menuRootItem) === 'group' && appMenuService.isVisible(menuRootItem)\"\n (onItemClick)=\"onMenuItemClick()\">\n </o-app-sidenav-menu-group>\n\n </nav>\n </div>\n <div class=\"layout-sidenav-projection-end\">\n <ng-content select=\"o-app-layout-sidenav-projection-end\"></ng-content>\n </div>\n </div>\n </mat-sidenav>\n\n <mat-sidenav-content class=\"o-app-sidenav-content\">\n <ng-content></ng-content>\n </mat-sidenav-content>\n</mat-sidenav-container>\n", styles: [".o-app-sidenav.header-layout .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav{box-shadow:3px 48px 6px #0000003d}.o-app-sidenav .navMenu{flex:1;display:flex;flex-direction:column;overflow:auto}@-moz-document url-prefix(){.o-app-sidenav .navMenu{height:100%}}.o-app-sidenav .o-app-sidenav-menu-group a,.o-app-sidenav .o-app-sidenav-menu-item a{margin-left:8px}.o-app-sidenav .o-app-sidenav-menu-group a .mat-icon svg,.o-app-sidenav .o-app-sidenav-menu-item a .mat-icon svg{display:flex}.o-app-sidenav .o-app-sidenav-menu-group[disabled=true] .mat-button-focus-overlay,.o-app-sidenav .o-app-sidenav-menu-group[disabled=true] .mat-mdc-button-persistent-ripple,.o-app-sidenav .o-app-sidenav-menu-item[disabled=true] .mat-button-focus-overlay,.o-app-sidenav .o-app-sidenav-menu-item[disabled=true] .mat-mdc-button-persistent-ripple{display:none}.o-app-sidenav .o-app-sidenav-menu-group[disabled=true] .o-app-sidenav-item,.o-app-sidenav .o-app-sidenav-menu-item[disabled=true] .o-app-sidenav-item{opacity:.5}.o-app-sidenav .o-app-sidenav-menu-group[disabled=true] a,.o-app-sidenav .o-app-sidenav-menu-item[disabled=true] a{cursor:initial}.o-app-sidenav .o-app-sidenav-menugroup{transition:background-color .5s}.o-app-sidenav .o-app-sidenav-menugroup-items-container{overflow:hidden}.o-app-sidenav .o-app-sidenav-container{width:100%;height:100%}.o-app-sidenav .o-app-sidenav-container.o-app-sidenav-mode-desktop:not(.opened) .o-app-sidenav-sidenav.mat-drawer-closed{visibility:visible!important;transform:translate3d(-191px,0,0)}.o-app-sidenav .o-app-sidenav-container.o-app-sidenav-mode-desktop:not(.opened) .o-app-sidenav-content.mat-drawer-content{margin-right:48px!important;transform:translate3d(48px,0,0)!important}.o-app-sidenav .o-app-sidenav-container .o-app-sidenav-content{position:absolute;right:0;left:0;min-height:100%;display:flex;flex-direction:column}.o-app-sidenav .o-app-sidenav-container .o-app-sidenav-content router-outlet+*{flex-grow:1}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav{box-shadow:3px 0 6px #0000003d;width:240px;bottom:0;overflow:auto;height:100%}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menugroup{transition:padding .5s 0s}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menugroup .o-app-sidenav-menugroup-arrow{transition:.5s transform cubic-bezier(.25,.8,.25,1)}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menugroup.opened .o-app-sidenav-menugroup-arrow{transform:rotate(90deg)}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menugroup-title,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menuitem-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-1 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-group a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-1 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-item a{padding-left:28px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-group a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-item a{padding-left:52px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-2 a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-3 a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-4 a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-5 a{padding-right:4px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-3 a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-4 a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-5 a{padding-left:52px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menugroup mat-icon:not(.o-app-sidenav-menugroup-arrow),.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menuitem mat-icon:not(.o-app-sidenav-menugroup-arrow){margin-right:16px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closing{transform:translate3d(-191px,0,0)}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed{text-align:center}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed .o-app-sidenav-item:not(.o-user-info){cursor:pointer}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed .o-app-sidenav-item.o-user-info:focus,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed .o-app-sidenav-item.o-user-info:hover{color:inherit}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed .o-app-sidenav-menu-group:not([disabled=true]) a.o-app-sidenav-viewer-sidenav-item-selected,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed .o-app-sidenav-menu-item:not([disabled=true]) a.o-app-sidenav-viewer-sidenav-item-selected{padding:0 8px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed nav{width:48px;min-width:48px;margin-left:auto}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed .o-app-sidenav-image .o-app-sidenav-image-container{padding:0;text-align:end;max-height:36px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed .o-app-sidenav-image .o-app-sidenav-image-container .o-app-sidenav-image{max-height:36px;margin-right:8px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container{padding-bottom:16px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .sidenav-toggle-container{height:48px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container nav a{border-radius:0;box-sizing:border-box;display:block;line-height:48px;height:auto;font-size:14px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container nav a>.mat-icon{vertical-align:middle;height:24px;width:24px;font-size:24px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container ul{list-style-type:none;margin:0;padding:0}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container ul li{margin:0;padding:0}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .sidenav-toggle{padding:4px 12px 8px;cursor:pointer}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-1 a{font-size:14px;line-height:48px;height:48px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-1 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-group a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-1 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-item a{font-size:12px;line-height:40px;height:40px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-1 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-group a .mat-mdc-button-touch-target,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-1 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-item a .mat-mdc-button-touch-target{height:40px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a{font-size:12px;line-height:40px;height:40px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a .mat-mdc-button-touch-target{height:40px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-group a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-item a{font-size:11px;line-height:40px;height:40px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-group a .mat-mdc-button-touch-target,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-item a .mat-mdc-button-touch-target{height:40px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-group a .mat-icon,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-item a .mat-icon{font-size:20px;height:20px;width:20px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menugroup-arrow{display:flex}\n"], dependencies: [{ kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i2.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6$3.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i6$3.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i6$3.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "component", type: OAppSidenavMenuGroupComponent, selector: "o-app-sidenav-menu-group", inputs: ["menu-group", "sidenav-opened", "level"], outputs: ["onItemClick"] }, { kind: "component", type: OAppSidenavImageComponent, selector: "o-app-sidenav-image", inputs: ["opened-src", "closed-src"] }, { kind: "component", type: OAppSidenavMenuItemComponent, selector: "o-app-sidenav-menu-item", inputs: ["menu-item", "menu-item-type", "sidenav-opened", "disabled"], outputs: ["onClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
38399
38671
  __decorate([
38400
38672
  BooleanInputConverter(),
38401
38673
  __metadata("design:type", Boolean)
@@ -38406,7 +38678,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
38406
38678
  '[class.o-app-sidenav]': 'true'
38407
38679
  }, providers: [
38408
38680
  { provide: OAppSidenavBase, useExisting: forwardRef(() => OAppSidenavComponent) }
38409
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-sidenav-container class=\"o-app-sidenav-container\" [class.opened]=\"sidenav.opened\"\n [class.o-app-sidenav-mode-desktop]=\"(layoutMode || 'desktop') === 'desktop'\"\n [class.o-app-sidenav-mode-mobile]=\"(layoutMode || 'desktop') !== 'desktop'\">\n\n <mat-sidenav #sidenav class=\"o-app-sidenav-sidenav o-scroll\" [opened]=\"isSidenavOpened()\"\n [mode]=\"(sidenavMode || ((layoutMode || 'desktop') === 'desktop' ? 'side' : 'over'))\" [class.mat-drawer-opened]=\"sidenav.opened\"\n [class.mat-drawer-closed]=\"!sidenav.opened\" fxLayoutAlign=\"start stretch\" (openedChange)=\"sidenavOpenedChange()\"\n (closedStart)=\"sidenavClosedStart()\" (openedStart)=\"sidenavOpenedStart()\">\n <div fxFlex fxLayout=\"column\">\n <div fxLayout=\"row\" fxLayoutAlign=\"end center\" class=\"sidenav-toggle-container\" *ngIf=\"isDesktopMode()\">\n <mat-icon class=\"sidenav-toggle\" (click)=\"toggleSidenav()\" svgIcon=\"ontimize:menu\">menu</mat-icon>\n </div>\n\n <o-app-sidenav-image [opened-src]=\"openedSidenavImg\" [closed-src]=\"closedSidenavImg\"> </o-app-sidenav-image>\n <ng-content select=\"o-app-layout-sidenav-projection-start\"></ng-content>\n <div class=\"navMenu\">\n <nav *ngFor=\"let menuRootItem of menuRootArray\">\n\n <ul *ngIf=\"appMenuService.getMenuItemType(menuRootItem) !== 'group'\">\n <o-app-sidenav-menu-item [menu-item]=\"menuRootItem\" [menu-item-type]=\"appMenuService.getMenuItemType(menuRootItem)\"\n [sidenav-opened]=\"sidenav.opened\" (onClick)=\"onMenuItemClick()\">\n </o-app-sidenav-menu-item>\n </ul>\n\n <o-app-sidenav-menu-group [menu-group]=\"menuRootItem\" [sidenav-opened]=\"sidenav.opened\" level=\"1\"\n *ngIf=\"appMenuService.getMenuItemType(menuRootItem) === 'group'\" (onItemClick)=\"onMenuItemClick()\">\n </o-app-sidenav-menu-group>\n\n </nav>\n </div>\n <div class=\"layout-sidenav-projection-end\">\n <ng-content select=\"o-app-layout-sidenav-projection-end\"></ng-content>\n </div>\n </div>\n </mat-sidenav>\n\n <mat-sidenav-content class=\"o-app-sidenav-content\">\n <ng-content></ng-content>\n </mat-sidenav-content>\n</mat-sidenav-container>\n", styles: [".o-app-sidenav.header-layout .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav{box-shadow:3px 48px 6px #0000003d}.o-app-sidenav .navMenu{flex:1;display:flex;flex-direction:column;overflow:auto}@-moz-document url-prefix(){.o-app-sidenav .navMenu{height:100%}}.o-app-sidenav .o-app-sidenav-menu-group a,.o-app-sidenav .o-app-sidenav-menu-item a{margin-left:8px}.o-app-sidenav .o-app-sidenav-menu-group a .mat-icon svg,.o-app-sidenav .o-app-sidenav-menu-item a .mat-icon svg{display:flex}.o-app-sidenav .o-app-sidenav-menu-group[disabled=true] .mat-button-focus-overlay,.o-app-sidenav .o-app-sidenav-menu-group[disabled=true] .mat-mdc-button-persistent-ripple,.o-app-sidenav .o-app-sidenav-menu-item[disabled=true] .mat-button-focus-overlay,.o-app-sidenav .o-app-sidenav-menu-item[disabled=true] .mat-mdc-button-persistent-ripple{display:none}.o-app-sidenav .o-app-sidenav-menu-group[disabled=true] .o-app-sidenav-item,.o-app-sidenav .o-app-sidenav-menu-item[disabled=true] .o-app-sidenav-item{opacity:.5}.o-app-sidenav .o-app-sidenav-menu-group[disabled=true] a,.o-app-sidenav .o-app-sidenav-menu-item[disabled=true] a{cursor:initial}.o-app-sidenav .o-app-sidenav-menugroup{transition:background-color .5s}.o-app-sidenav .o-app-sidenav-menugroup-items-container{overflow:hidden}.o-app-sidenav .o-app-sidenav-container{width:100%;height:100%}.o-app-sidenav .o-app-sidenav-container.o-app-sidenav-mode-desktop:not(.opened) .o-app-sidenav-sidenav.mat-drawer-closed{visibility:visible!important;transform:translate3d(-191px,0,0)}.o-app-sidenav .o-app-sidenav-container.o-app-sidenav-mode-desktop:not(.opened) .o-app-sidenav-content.mat-drawer-content{margin-right:48px!important;transform:translate3d(48px,0,0)!important}.o-app-sidenav .o-app-sidenav-container .o-app-sidenav-content{position:absolute;right:0;left:0;min-height:100%;display:flex;flex-direction:column}.o-app-sidenav .o-app-sidenav-container .o-app-sidenav-content router-outlet+*{flex-grow:1}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav{box-shadow:3px 0 6px #0000003d;width:240px;bottom:0;overflow:auto;height:100%}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menugroup{transition:padding .5s 0s}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menugroup .o-app-sidenav-menugroup-arrow{transition:.5s transform cubic-bezier(.25,.8,.25,1)}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menugroup.opened .o-app-sidenav-menugroup-arrow{transform:rotate(90deg)}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menugroup-title,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menuitem-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-1 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-group a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-1 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-item a{padding-left:28px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-group a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-item a{padding-left:52px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-2 a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-3 a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-4 a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-5 a{padding-right:4px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-3 a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-4 a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-5 a{padding-left:52px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menugroup mat-icon:not(.o-app-sidenav-menugroup-arrow),.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menuitem mat-icon:not(.o-app-sidenav-menugroup-arrow){margin-right:16px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closing{transform:translate3d(-191px,0,0)}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed{text-align:center}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed .o-app-sidenav-item:not(.o-user-info){cursor:pointer}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed .o-app-sidenav-item.o-user-info:focus,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed .o-app-sidenav-item.o-user-info:hover{color:inherit}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed .o-app-sidenav-menu-group:not([disabled=true]) a.o-app-sidenav-viewer-sidenav-item-selected,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed .o-app-sidenav-menu-item:not([disabled=true]) a.o-app-sidenav-viewer-sidenav-item-selected{padding:0 8px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed nav{width:48px;min-width:48px;margin-left:auto}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed .o-app-sidenav-image .o-app-sidenav-image-container{padding:0;text-align:end;max-height:36px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed .o-app-sidenav-image .o-app-sidenav-image-container .o-app-sidenav-image{max-height:36px;margin-right:8px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container{padding-bottom:16px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .sidenav-toggle-container{height:48px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container nav a{border-radius:0;box-sizing:border-box;display:block;line-height:48px;height:auto;font-size:14px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container nav a>.mat-icon{vertical-align:middle;height:24px;width:24px;font-size:24px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container ul{list-style-type:none;margin:0;padding:0}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container ul li{margin:0;padding:0}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .sidenav-toggle{padding:4px 12px 8px;cursor:pointer}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-1 a{font-size:14px;line-height:48px;height:48px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-1 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-group a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-1 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-item a{font-size:12px;line-height:40px;height:40px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-1 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-group a .mat-mdc-button-touch-target,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-1 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-item a .mat-mdc-button-touch-target{height:40px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a{font-size:12px;line-height:40px;height:40px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a .mat-mdc-button-touch-target{height:40px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-group a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-item a{font-size:11px;line-height:40px;height:40px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-group a .mat-mdc-button-touch-target,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-item a .mat-mdc-button-touch-target{height:40px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-group a .mat-icon,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-item a .mat-icon{font-size:20px;height:20px;width:20px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menugroup-arrow{display:flex}\n"] }]
38681
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-sidenav-container class=\"o-app-sidenav-container\" [class.opened]=\"sidenav.opened\"\n [class.o-app-sidenav-mode-desktop]=\"(layoutMode || 'desktop') === 'desktop'\"\n [class.o-app-sidenav-mode-mobile]=\"(layoutMode || 'desktop') !== 'desktop'\">\n\n <mat-sidenav #sidenav class=\"o-app-sidenav-sidenav o-scroll\" [opened]=\"isSidenavOpened()\"\n [mode]=\"(sidenavMode || ((layoutMode || 'desktop') === 'desktop' ? 'side' : 'over'))\" [class.mat-drawer-opened]=\"sidenav.opened\"\n [class.mat-drawer-closed]=\"!sidenav.opened\" fxLayoutAlign=\"start stretch\" (openedChange)=\"sidenavOpenedChange()\"\n (closedStart)=\"sidenavClosedStart()\" (openedStart)=\"sidenavOpenedStart()\">\n <div fxFlex fxLayout=\"column\">\n <div fxLayout=\"row\" fxLayoutAlign=\"end center\" class=\"sidenav-toggle-container\" *ngIf=\"isDesktopMode()\">\n <mat-icon class=\"sidenav-toggle\" (click)=\"toggleSidenav()\" svgIcon=\"ontimize:menu\">menu</mat-icon>\n </div>\n\n <o-app-sidenav-image [opened-src]=\"openedSidenavImg\" [closed-src]=\"closedSidenavImg\"> </o-app-sidenav-image>\n <ng-content select=\"o-app-layout-sidenav-projection-start\"></ng-content>\n <div class=\"navMenu\">\n <nav *ngFor=\"let menuRootItem of menuRootArray\">\n\n <ul *ngIf=\"appMenuService.getMenuItemType(menuRootItem) !== 'group' && appMenuService.isVisible(menuRootItem)\">\n <o-app-sidenav-menu-item [menu-item]=\"menuRootItem\" [menu-item-type]=\"appMenuService.getMenuItemType(menuRootItem)\"\n [sidenav-opened]=\"sidenav.opened\" (onClick)=\"onMenuItemClick()\">\n </o-app-sidenav-menu-item>\n </ul>\n\n <o-app-sidenav-menu-group [menu-group]=\"menuRootItem\" [sidenav-opened]=\"sidenav.opened\" level=\"1\"\n *ngIf=\"appMenuService.getMenuItemType(menuRootItem) === 'group' && appMenuService.isVisible(menuRootItem)\"\n (onItemClick)=\"onMenuItemClick()\">\n </o-app-sidenav-menu-group>\n\n </nav>\n </div>\n <div class=\"layout-sidenav-projection-end\">\n <ng-content select=\"o-app-layout-sidenav-projection-end\"></ng-content>\n </div>\n </div>\n </mat-sidenav>\n\n <mat-sidenav-content class=\"o-app-sidenav-content\">\n <ng-content></ng-content>\n </mat-sidenav-content>\n</mat-sidenav-container>\n", styles: [".o-app-sidenav.header-layout .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav{box-shadow:3px 48px 6px #0000003d}.o-app-sidenav .navMenu{flex:1;display:flex;flex-direction:column;overflow:auto}@-moz-document url-prefix(){.o-app-sidenav .navMenu{height:100%}}.o-app-sidenav .o-app-sidenav-menu-group a,.o-app-sidenav .o-app-sidenav-menu-item a{margin-left:8px}.o-app-sidenav .o-app-sidenav-menu-group a .mat-icon svg,.o-app-sidenav .o-app-sidenav-menu-item a .mat-icon svg{display:flex}.o-app-sidenav .o-app-sidenav-menu-group[disabled=true] .mat-button-focus-overlay,.o-app-sidenav .o-app-sidenav-menu-group[disabled=true] .mat-mdc-button-persistent-ripple,.o-app-sidenav .o-app-sidenav-menu-item[disabled=true] .mat-button-focus-overlay,.o-app-sidenav .o-app-sidenav-menu-item[disabled=true] .mat-mdc-button-persistent-ripple{display:none}.o-app-sidenav .o-app-sidenav-menu-group[disabled=true] .o-app-sidenav-item,.o-app-sidenav .o-app-sidenav-menu-item[disabled=true] .o-app-sidenav-item{opacity:.5}.o-app-sidenav .o-app-sidenav-menu-group[disabled=true] a,.o-app-sidenav .o-app-sidenav-menu-item[disabled=true] a{cursor:initial}.o-app-sidenav .o-app-sidenav-menugroup{transition:background-color .5s}.o-app-sidenav .o-app-sidenav-menugroup-items-container{overflow:hidden}.o-app-sidenav .o-app-sidenav-container{width:100%;height:100%}.o-app-sidenav .o-app-sidenav-container.o-app-sidenav-mode-desktop:not(.opened) .o-app-sidenav-sidenav.mat-drawer-closed{visibility:visible!important;transform:translate3d(-191px,0,0)}.o-app-sidenav .o-app-sidenav-container.o-app-sidenav-mode-desktop:not(.opened) .o-app-sidenav-content.mat-drawer-content{margin-right:48px!important;transform:translate3d(48px,0,0)!important}.o-app-sidenav .o-app-sidenav-container .o-app-sidenav-content{position:absolute;right:0;left:0;min-height:100%;display:flex;flex-direction:column}.o-app-sidenav .o-app-sidenav-container .o-app-sidenav-content router-outlet+*{flex-grow:1}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav{box-shadow:3px 0 6px #0000003d;width:240px;bottom:0;overflow:auto;height:100%}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menugroup{transition:padding .5s 0s}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menugroup .o-app-sidenav-menugroup-arrow{transition:.5s transform cubic-bezier(.25,.8,.25,1)}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menugroup.opened .o-app-sidenav-menugroup-arrow{transform:rotate(90deg)}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menugroup-title,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menuitem-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-1 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-group a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-1 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-item a{padding-left:28px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-group a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-item a{padding-left:52px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-2 a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-3 a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-4 a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-5 a{padding-right:4px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-3 a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-4 a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menu-group-level-5 a{padding-left:52px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menugroup mat-icon:not(.o-app-sidenav-menugroup-arrow),.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav:not(.mat-drawer-closed) .o-app-sidenav-menuitem mat-icon:not(.o-app-sidenav-menugroup-arrow){margin-right:16px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closing{transform:translate3d(-191px,0,0)}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed{text-align:center}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed .o-app-sidenav-item:not(.o-user-info){cursor:pointer}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed .o-app-sidenav-item.o-user-info:focus,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed .o-app-sidenav-item.o-user-info:hover{color:inherit}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed .o-app-sidenav-menu-group:not([disabled=true]) a.o-app-sidenav-viewer-sidenav-item-selected,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed .o-app-sidenav-menu-item:not([disabled=true]) a.o-app-sidenav-viewer-sidenav-item-selected{padding:0 8px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed nav{width:48px;min-width:48px;margin-left:auto}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed .o-app-sidenav-image .o-app-sidenav-image-container{padding:0;text-align:end;max-height:36px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav.mat-drawer-closed .o-app-sidenav-image .o-app-sidenav-image-container .o-app-sidenav-image{max-height:36px;margin-right:8px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container{padding-bottom:16px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .sidenav-toggle-container{height:48px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container nav a{border-radius:0;box-sizing:border-box;display:block;line-height:48px;height:auto;font-size:14px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container nav a>.mat-icon{vertical-align:middle;height:24px;width:24px;font-size:24px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container ul{list-style-type:none;margin:0;padding:0}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container ul li{margin:0;padding:0}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .sidenav-toggle{padding:4px 12px 8px;cursor:pointer}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-1 a{font-size:14px;line-height:48px;height:48px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-1 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-group a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-1 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-item a{font-size:12px;line-height:40px;height:40px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-1 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-group a .mat-mdc-button-touch-target,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-1 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-item a .mat-mdc-button-touch-target{height:40px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a{font-size:12px;line-height:40px;height:40px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a .mat-mdc-button-touch-target{height:40px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-group a,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-item a{font-size:11px;line-height:40px;height:40px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-group a .mat-mdc-button-touch-target,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-item a .mat-mdc-button-touch-target{height:40px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-group a .mat-icon,.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menu-group-level-2 a+.o-app-sidenav-menugroup-items-container .o-app-sidenav-menu-item a .mat-icon{font-size:20px;height:20px;width:20px}.o-app-sidenav .o-app-sidenav-container .mat-drawer.o-app-sidenav-sidenav .mat-drawer-inner-container .o-app-sidenav-menugroup-arrow{display:flex}\n"] }]
38410
38682
  }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.Router }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i2$2.MediaObserver }]; }, propDecorators: { sidenav: [{
38411
38683
  type: ViewChild,
38412
38684
  args: [MatSidenav]
@@ -39245,5 +39517,5 @@ function ontimizePostBootstrap(ngModuleRef) {
39245
39517
  class ODialogConfig {
39246
39518
  }
39247
39519
 
39248
- export { APP_CONFIG, AbstractComponentStateClass, AbstractComponentStateService, AbstractOServiceBaseComponent, AbstractOServiceComponent, AbstractServiceComponentStateClass, AppConfig, AppConfigFactory, AppMenuService, AppearanceService, AuthGuardService, AuthService, Base64, BaseService, BaseServiceResponse, BooleanConverter, BooleanInputConverter, CKEditorComponent, CKEditorModule, CanActivateFormLayoutChildGuard, CanDeactivateFormGuard, Codes, ColumnValueFilterOperator, ColumnsFilterPipe, ComponentStateServiceProvider, CurrencyService, CurrencyUtil, DEFAULT_CONTEXT_MENU_CONTENT_INPUTS, DEFAULT_CONTEXT_MENU_CONTENT_ITEM_INPUTS, DEFAULT_CONTEXT_MENU_CONTENT_OUTPUTS, DEFAULT_CONTEXT_MENU_DIRECTIVE_INPUTS, DEFAULT_CONTEXT_MENU_ITEM_INPUTS, DEFAULT_CONTEXT_MENU_ITEM_OUTPUTS, DEFAULT_DUAL_LIST_SELECTOR, DEFAULT_DUAL_LIST_SELECTOR_DATE_ITEM, DEFAULT_INPUTS_O_APP_HEADER, DEFAULT_INPUTS_O_APP_LAYOUT, DEFAULT_INPUTS_O_APP_LAYOUT_HEADER, DEFAULT_INPUTS_O_APP_LAYOUT_SIDENAV, DEFAULT_INPUTS_O_APP_SIDENAV, DEFAULT_INPUTS_O_APP_SIDENAV_IMAGE, DEFAULT_INPUTS_O_APP_SIDENAV_MENU_GROUP, DEFAULT_INPUTS_O_APP_SIDENAV_MENU_ITEM, DEFAULT_INPUTS_O_BAR_MENU, DEFAULT_INPUTS_O_BAR_MENU_ITEM, DEFAULT_INPUTS_O_BAR_MENU_NESTED, DEFAULT_INPUTS_O_BASE_MENU_ITEM, DEFAULT_INPUTS_O_BASE_TABLE_CELL_RENDERER, DEFAULT_INPUTS_O_BREADCRUMB, DEFAULT_INPUTS_O_BUTTON, DEFAULT_INPUTS_O_BUTTON_TOGGLE, DEFAULT_INPUTS_O_BUTTON_TOGGLE_GROUP, DEFAULT_INPUTS_O_CARD_RENDERER, DEFAULT_INPUTS_O_CHECKBOX, DEFAULT_INPUTS_O_COMBO, DEFAULT_INPUTS_O_COMBO_RENDERER, DEFAULT_INPUTS_O_COMBO_RENDERER_BOOLEAN, DEFAULT_INPUTS_O_COMBO_RENDERER_CURRENCY, DEFAULT_INPUTS_O_COMBO_RENDERER_DATE, DEFAULT_INPUTS_O_COMBO_RENDERER_ICON, DEFAULT_INPUTS_O_COMBO_RENDERER_INTEGER, DEFAULT_INPUTS_O_COMBO_RENDERER_PERCENTAGE, DEFAULT_INPUTS_O_COMBO_RENDERER_REAL, DEFAULT_INPUTS_O_CONTAINER, DEFAULT_INPUTS_O_CONTAINER_COLLAPSIBLE, DEFAULT_INPUTS_O_CONTEXT_MENU_ITEMS, DEFAULT_INPUTS_O_CURRENCY_INPUT, DEFAULT_INPUTS_O_DATA_TOOLBAR, DEFAULT_INPUTS_O_DATERANGE_INPUT, DEFAULT_INPUTS_O_DATE_INPUT, DEFAULT_INPUTS_O_ERROR, DEFAULT_INPUTS_O_FILE_INPUT, DEFAULT_INPUTS_O_FILTER_BUILDER, DEFAULT_INPUTS_O_FILTER_BUILDER_MENU, DEFAULT_INPUTS_O_FORM, DEFAULT_INPUTS_O_FORM_CONTAINER, DEFAULT_INPUTS_O_FORM_DATA_COMPONENT, DEFAULT_INPUTS_O_FORM_LAYOUT_MANAGER, DEFAULT_INPUTS_O_FORM_LAYOUT_SPLIT_PANE, DEFAULT_INPUTS_O_FORM_LAYOUT_TABGROUP, DEFAULT_INPUTS_O_FORM_SERVICE_COMPONENT, DEFAULT_INPUTS_O_FORM_TOOLBAR, DEFAULT_INPUTS_O_GRID, DEFAULT_INPUTS_O_GRID_ITEM, DEFAULT_INPUTS_O_HOUR_INPUT, DEFAULT_INPUTS_O_HTML_INPUT, DEFAULT_INPUTS_O_IMAGE, DEFAULT_INPUTS_O_INTEGER_INPUT, DEFAULT_INPUTS_O_LANGUAGE_SELECTOR, DEFAULT_INPUTS_O_LIST, DEFAULT_INPUTS_O_LISTPICKER_RENDERER, DEFAULT_INPUTS_O_LISTPICKER_RENDERER_CURRENCY, DEFAULT_INPUTS_O_LISTPICKER_RENDERER_DATE, DEFAULT_INPUTS_O_LISTPICKER_RENDERER_INTEGER, DEFAULT_INPUTS_O_LISTPICKER_RENDERER_PERCENTAGE, DEFAULT_INPUTS_O_LISTPICKER_RENDERER_REAL, DEFAULT_INPUTS_O_LIST_ITEM_AVATAR, DEFAULT_INPUTS_O_LIST_ITEM_CARD_IMAGE, DEFAULT_INPUTS_O_LIST_ITEM_TEXT, DEFAULT_INPUTS_O_LIST_PICKER, DEFAULT_INPUTS_O_LIST_PICKER_DIALOG, DEFAULT_INPUTS_O_LOCALE_BAR_MENU_ITEM, DEFAULT_INPUTS_O_LOCKER, DEFAULT_INPUTS_O_MENU_CARD, DEFAULT_INPUTS_O_MENU_LAYOUT, DEFAULT_INPUTS_O_PASSWORD_INPUT, DEFAULT_INPUTS_O_PERCENT_INPUT, DEFAULT_INPUTS_O_PHONE_INPUT, DEFAULT_INPUTS_O_RADIO, DEFAULT_INPUTS_O_REAL_INPUT, DEFAULT_INPUTS_O_SEARCH_INPUT, DEFAULT_INPUTS_O_SERVICE_BASE_COMPONENT, DEFAULT_INPUTS_O_SERVICE_COMPONENT, DEFAULT_INPUTS_O_SLIDER_INPUT, DEFAULT_INPUTS_O_SLIDETOGGLE, DEFAULT_INPUTS_O_TABLE, DEFAULT_INPUTS_O_TABLE_BUTTON, DEFAULT_INPUTS_O_TABLE_BUTTONS, DEFAULT_INPUTS_O_TABLE_CELL_EDITOR, DEFAULT_INPUTS_O_TABLE_CELL_EDITOR_BOOLEAN, DEFAULT_INPUTS_O_TABLE_CELL_EDITOR_DATE, DEFAULT_INPUTS_O_TABLE_CELL_EDITOR_INTEGER, DEFAULT_INPUTS_O_TABLE_CELL_EDITOR_TIME, DEFAULT_INPUTS_O_TABLE_CELL_RENDERER_ACTION, DEFAULT_INPUTS_O_TABLE_CELL_RENDERER_BOOLEAN, DEFAULT_INPUTS_O_TABLE_CELL_RENDERER_CURRENCY, DEFAULT_INPUTS_O_TABLE_CELL_RENDERER_DATE, DEFAULT_INPUTS_O_TABLE_CELL_RENDERER_IMAGE, DEFAULT_INPUTS_O_TABLE_CELL_RENDERER_INTEGER, DEFAULT_INPUTS_O_TABLE_CELL_RENDERER_PERCENTAGE, DEFAULT_INPUTS_O_TABLE_CELL_RENDERER_REAL, DEFAULT_INPUTS_O_TABLE_CELL_RENDERER_SERVICE, DEFAULT_INPUTS_O_TABLE_CELL_RENDERER_TIME, DEFAULT_INPUTS_O_TABLE_CELL_RENDERER_TRANSLATE, DEFAULT_INPUTS_O_TABLE_COLUMN, DEFAULT_INPUTS_O_TABLE_COLUMN_CALCULATED, DEFAULT_INPUTS_O_TABLE_COLUMN_FILTER, DEFAULT_INPUTS_O_TABLE_COLUMN_FILTER_COLUMN, DEFAULT_INPUTS_O_TABLE_COLUMN_GROUPING, DEFAULT_INPUTS_O_TABLE_COLUMN_GROUPING_COLUMN, DEFAULT_INPUTS_O_TABLE_COLUMN_RESIZER, DEFAULT_INPUTS_O_TABLE_COLUMN_SELECTALL, DEFAULT_INPUTS_O_TABLE_EXPORT_BUTTON, DEFAULT_INPUTS_O_TABLE_HEADER, DEFAULT_INPUTS_O_TABLE_INSERTABLE_ROW, DEFAULT_INPUTS_O_TABLE_MENU, DEFAULT_INPUTS_O_TABLE_OPTION, DEFAULT_INPUTS_O_TABLE_QUICKFILTER, DEFAULT_INPUTS_O_TABLE_ROW_EXPANDABLE, DEFAULT_INPUTS_O_TEXTAREA_INPUT, DEFAULT_INPUTS_O_TEXT_INPUT, DEFAULT_INPUTS_O_TEXT_RENDERER, DEFAULT_INPUTS_O_TIME_INPUT, DEFAULT_INPUTS_O_TREE, DEFAULT_INPUTS_O_USER_INFO, DEFAULT_INPUTS_O_USER_INFO_MENU, DEFAULT_INPUTS_O_USER_INFO_MENU_ITEM, DEFAULT_INPUTS_O_VALIDATOR, DEFAULT_INPUT_O_EXPANDABLE_CONTAINER, DEFAULT_OUTPUTS_LANGUAGE_SELECTOR, DEFAULT_OUTPUTS_O_APP_HEADER, DEFAULT_OUTPUTS_O_APP_LAYOUT, DEFAULT_OUTPUTS_O_APP_SIDENAV, DEFAULT_OUTPUTS_O_APP_SIDENAV_IMAGE, DEFAULT_OUTPUTS_O_APP_SIDENAV_MENU_GROUP, DEFAULT_OUTPUTS_O_APP_SIDENAV_MENU_ITEM, DEFAULT_OUTPUTS_O_BUTTON, DEFAULT_OUTPUTS_O_BUTTON_TOGGLE, DEFAULT_OUTPUTS_O_BUTTON_TOGGLE_GROUP, DEFAULT_OUTPUTS_O_CARD_RENDERER, DEFAULT_OUTPUTS_O_CONTAINER_COLLAPSIBLE, DEFAULT_OUTPUTS_O_CONTEXT_MENU, DEFAULT_OUTPUTS_O_DATERANGE_INPUT, DEFAULT_OUTPUTS_O_FILE_INPUT, DEFAULT_OUTPUTS_O_FILTER_BUILDER, DEFAULT_OUTPUTS_O_FORM, DEFAULT_OUTPUTS_O_FORM_DATA_COMPONENT, DEFAULT_OUTPUTS_O_FORM_LAYOUT_MANAGER, DEFAULT_OUTPUTS_O_FORM_LAYOUT_SPLIT_PANE, DEFAULT_OUTPUTS_O_FORM_LAYOUT_TABGROUP, DEFAULT_OUTPUTS_O_FORM_SERVICE_COMPONENT, DEFAULT_OUTPUTS_O_FORM_TOOLBAR, DEFAULT_OUTPUTS_O_HTML_INPUT, DEFAULT_OUTPUTS_O_LIST, DEFAULT_OUTPUTS_O_LIST_ITEM_CARD_IMAGE, DEFAULT_OUTPUTS_O_LIST_PICKER, DEFAULT_OUTPUTS_O_MENU_CARD, DEFAULT_OUTPUTS_O_MENU_LAYOUT, DEFAULT_OUTPUTS_O_PERCENT_INPUT, DEFAULT_OUTPUTS_O_SEARCH_INPUT, DEFAULT_OUTPUTS_O_SERVICE_COMPONENT, DEFAULT_OUTPUTS_O_TABLE, DEFAULT_OUTPUTS_O_TABLE_BUTTON, DEFAULT_OUTPUTS_O_TABLE_BUTTONS, DEFAULT_OUTPUTS_O_TABLE_CELL_EDITOR, DEFAULT_OUTPUTS_O_TABLE_CELL_RENDERER_ACTION, DEFAULT_OUTPUTS_O_TABLE_CELL_RENDERER_IMAGE, DEFAULT_OUTPUTS_O_TABLE_CELL_RENDERER_SERVICE, DEFAULT_OUTPUTS_O_TABLE_COLUMN, DEFAULT_OUTPUTS_O_TABLE_COLUMN_FILTER, DEFAULT_OUTPUTS_O_TABLE_COLUMN_GROUPING, DEFAULT_OUTPUTS_O_TABLE_COLUMN_RESIZER, DEFAULT_OUTPUTS_O_TABLE_EXPORT_BUTTON, DEFAULT_OUTPUTS_O_TABLE_INSERTABLE_ROW, DEFAULT_OUTPUTS_O_TABLE_MENU, DEFAULT_OUTPUTS_O_TABLE_OPTION, DEFAULT_OUTPUTS_O_TABLE_QUICKFILTER, DEFAULT_OUTPUTS_O_TABLE_ROW_EXPANDABLE, DEFAULT_OUTPUTS_O_TEXT_RENDERER, DEFAULT_OUTPUTS_O_TREE, DEFAULT_OUTPUTS_O_USER_INFO, DEFAULT_OUTPUTS_O_USER_INFO_MENU, DEFAULT_PAGINATOR_TABLE, DEFAULT_TABLE_COLUMN_AGGREGATE, DEFAULT_TABLE_CONTEXT_MENU_INPUTS, DaterangepickerComponent, DefaultComponentStateClass, DefaultComponentStateService, DefaultOServiceBaseComponent, DefaultOTableDataSource, DefaultOTableOptions, DefaultServiceComponentStateClass, DefaultServiceComponentStateService, DialogService, Error403Component, ExportDataServiceProvider, FilterExpressionUtils, IconService, ListItem, LocalStorageService, LoginStorageService, MomentService, NavigationService, NumberConverter, NumberInputConverter, NumberService, OAppHeaderComponent, OAppHeaderModule, OAppLayoutComponent, OAppLayoutHeaderComponent, OAppLayoutModule, OAppLayoutSidenavComponent, OAppSidenavComponent, OAppSidenavImageComponent, OAppSidenavMenuGroupComponent, OAppSidenavMenuItemComponent, OAppSidenavModule, OBarMenuComponent, OBarMenuGroupComponent, OBarMenuItemComponent, OBarMenuModule, OBarMenuNestedComponent, OBarMenuSeparatorComponent, OBaseComponent, OBaseMenuItemClass, OBaseTableCellEditor, OBaseTableCellRenderer, OBaseTablePaginator, OBreadcrumbComponent, OBreadcrumbModule, OBreadcrumbService, OButtonComponent, OButtonModule, OButtonToggleComponent, OButtonToggleGroupComponent, OButtonToggleModule, OCardMenuItemComponent, OCardMenuItemModule, OCardMenuLayoutComponent, OCardMenuLayoutModule, OCheckboxComponent, OCheckboxModule, OColumn, OColumnCollapsibleComponent, OColumnCollapsibleModule, OColumnComponent, OColumnModule, OComboComponent, OComboCustomRenderer, OComboModule, OComboRendererBooleanComponent, OComboRendererCurrencyComponent, OComboRendererDateComponent, OComboRendererIconComponent, OComboRendererIntegerComponent, OComboRendererPercentageComponent, OComboRendererRealComponent, OComboSearchComponent, OComponentMenuBaseItem, OContainerCollapsibleComponent, OContainerComponent, OContextMenuComponent, OContextMenuContentComponent, OContextMenuDirective, OContextMenuGroupComponent, OContextMenuItemComponent, OContextMenuModule, OContextMenuSeparatorComponent, OContextMenuService, OCurrencyInputComponent, OCurrencyInputModule, OCurrencyPipe, OCustomMaterialModule, ODataToolbarComponent, ODataToolbarModule, ODateInputComponent, ODateInputModule, ODateRangeInputComponent, ODateRangeInputModule, ODaterangepickerDirective, ODialogComponent, ODialogConfig, ODualListSelectorComponent, ODualListSelectorDateItemComponent, ODualListSelectorModule, OEmailInputComponent, OEmailInputModule, OErrorComponent, OErrorDialogManager, OExpandableContainerComponent, OExpandableContainerModule, OFileDragAndDropDirective, OFileInputComponent, OFileInputModule, OFileItem, OFileUploader, OFilterBuilderClearDirective, OFilterBuilderComponent, OFilterBuilderMenuComponent, OFilterBuilderModule, OFilterBuilderQueryDirective, OFormCacheClass, OFormComponent, OFormContainerComponent, OFormContainerModule, OFormControl, OFormDataComponent, OFormLayoutDialogComponent, OFormLayoutDialogOptionsDirective, OFormLayoutManagerComponent, OFormLayoutManagerComponentStateClass, OFormLayoutManagerComponentStateService, OFormLayoutManagerContentDirective, OFormLayoutManagerModule, OFormLayoutManagerService, OFormLayoutSplitPaneComponent, OFormLayoutSplitPaneOptionsDirective, OFormLayoutTabGroupComponent, OFormLayoutTabGroupOptionsDirective, OFormMessageService, OFormModule, OFormNavigationClass, OFormNavigationComponent, OFormServiceComponent, OFormToolbarComponent, OFormToolbarModule, OFormValue, OFullScreenDialogComponent, OGridComponent, OGridComponentStateClass, OGridComponentStateService, OGridItemComponent, OGridItemDirective, OGridModule, OGridSkeletonComponent, OHTMLInputComponent, OHTMLInputModule, OHiddenDirective, OHourInputComponent, OHourInputModule, OIconPipe, OImageComponent, OImageModule, OIntegerInputComponent, OIntegerInputModule, OIntegerPipe, OKeyboardListenerDirective, OLanguageSelectorComponent, OLanguageSelectorModule, OListComponent, OListComponentStateClass, OListComponentStateService, OListItemAvatarComponent, OListItemCardComponent, OListItemCardImageComponent, OListItemCardRenderer, OListItemComponent, OListItemDirective, OListItemTextComponent, OListItemTextRenderer, OListModule, OListPickerComponent, OListPickerCustomRenderer, OListPickerDialogComponent, OListPickerModule, OListPickerRendererCurrencyComponent, OListPickerRendererDateComponent, OListPickerRendererIntegerComponent, OListPickerRendererPercentageComponent, OListPickerRendererRealComponent, OListSkeletonComponent, OLoadFilterDialogComponent, OLocaleBarMenuItemComponent, OLockerDirective, OMatErrorDirective, OMatPrefix, OMatSort, OMatSortHeader, OMatSortModule, OMatSuffix, OModulesInfoService, OMomentPipe, ONIFInputComponent, ONIFInputModule, ONTIMIZE_MODULES, ONTIMIZE_PROVIDERS, ONavigationItem, OPasswordInputComponent, OPasswordInputModule, OPercentInputComponent, OPercentInputModule, OPercentPipe, OPermissionsModule, OPhoneInputComponent, OPhoneInputModule, ORadioComponent, ORadioModule, ORealInputComponent, ORealInputModule, ORealPipe, ORemoteConfigurationService, ORowCollapsibleComponent, ORowCollapsibleModule, ORowComponent, ORowModule, OSafePipe, OSearchInputComponent, OSearchInputModule, OServiceBaseComponent, OServiceComponent, OSharedModule, OSkeletonComponent, OSlideToggleComponent, OSlideToggleModule, OSliderComponent, OSliderModule, OSnackBarComponent, OSnackBarConfig, OStoreFilterDialogComponent, OTabGroupDirective, OTableApplyConfigurationDialogComponent, OTableBase, OTableBaseDialogClass, OTableButtonComponent, OTableButtonsComponent, OTableCellEditorBooleanComponent, OTableCellEditorDateComponent, OTableCellEditorEmailComponent, OTableCellEditorIntegerComponent, OTableCellEditorRealComponent, OTableCellEditorTextComponent, OTableCellEditorTimeComponent, OTableCellRendererActionComponent, OTableCellRendererBooleanComponent, OTableCellRendererCurrencyComponent, OTableCellRendererDateComponent, OTableCellRendererImageComponent, OTableCellRendererIntegerComponent, OTableCellRendererPercentageComponent, OTableCellRendererRealComponent, OTableCellRendererServiceComponent, OTableCellRendererTimeComponent, OTableCellRendererTranslateComponent, OTableColumnAggregateComponent, OTableColumnCalculatedComponent, OTableColumnComponent, OTableColumnResizerComponent, OTableColumnSelectAllDirective, OTableColumnsFilterColumnComponent, OTableColumnsFilterComponent, OTableColumnsGroupingColumnComponent, OTableColumnsGroupingComponent, OTableComponent, OTableComponentStateClass, OTableComponentStateService, OTableContextMenuComponent, OTableDao, OTableDataSourceService, OTableExpandedFooterDirective, OTableExportButtonComponent, OTableExportButtonService, OTableExportConfiguration, OTableExportDialogComponent, OTableFilterByColumnDataDialogComponent, OTableGroupByColumnsDialogComponent, OTableGroupedRow, OTableHeaderComponent, OTableHeaderSelectAllComponent, OTableInsertableRowComponent, OTableMatPaginatorIntl, OTableMenuComponent, OTableModule, OTableOptionComponent, OTablePaginatorComponent, OTableQuickfilterComponent, OTableRowClassPipe, OTableRowDirective, OTableRowExpandableComponent, OTableRowExpandedChange, OTableSkeletonComponent, OTableStoreConfigurationDialogComponent, OTableVirtualScrollStrategy, OTableVisibleColumnsDialogComponent, OTextInputComponent, OTextInputModule, OTextareaInputComponent, OTextareaInputModule, OTimeInputComponent, OTimeInputModule, OTranslateHttpLoader, OTranslateModule, OTranslateParser, OTranslatePipe, OTranslateService, OTreeComponent, OTreeMenuComponent, OTreeModule, OTreeNodeComponent, OUserInfoComponent, OUserInfoConfigurationDirective, OUserInfoConfigurationItemDirective, OUserInfoModule, OUserInfoService, OValidatorComponent, OValidators, OValueChangeEvent, OWrapperContentMenuComponent, O_AUTH_SERVICE, O_CHART_ON_DEMAND_SERVICE, O_COMPONENT_STATE_SERVICE, O_DATA_SERVICE, O_ERROR_DIALOG_MANAGER, O_EXPORT_DATA_SERVICE, O_EXPORT_SERVICE, O_FILE_SERVICE, O_FORM_MESSAGE_SERVICE, O_INPUTS_OPTIONS, O_MAT_ERROR_OPTIONS, O_PERMISSION_SERVICE, O_REPORT_SERVICE, O_TABLE_CELL_EDITORS, O_TABLE_CELL_EDITORS_INPUTS, O_TABLE_CELL_EDITORS_OUTPUTS, O_TABLE_CELL_RENDERERS, O_TABLE_CELL_RENDERERS_INPUTS, O_TABLE_CELL_RENDERERS_OUTPUTS, O_TABLE_GLOBAL_CONFIG, O_TRANSLATE_SERVICE, ObservableWrapper, OnRangeChangeVirtualScroll, OntimizeAuthService, OntimizeAuthServiceProvider, OntimizeBaseService, OntimizeEEPermissionsService, OntimizeEEService, OntimizeExportDataProviderService, OntimizeExportDataProviderService3X, OntimizeExportService, OntimizeExportService3X, OntimizeExportServiceProvider, OntimizeFileService, OntimizeMatDateFormats, OntimizeMatIconRegistry, OntimizeMomentDateAdapter, OntimizePermissionsService, OntimizeService, OntimizeServiceProvider, OntimizeServiceResponse, OntimizeServiceResponseAdapter, OntimizeServiceResponseParser, OntimizeWebModule, OntimizeWebTranslateModule, OrderByPipe, PermissionsGuardService, PermissionsService, PermissionsUtils, SQLTypes, ServiceUtils, ShareCanActivateChildService, SideEnum, SnackBarService, StringConverter, TWELVE_HOUR_FORMAT_PATTERN, TWENTY_FOUR_HOUR_FORMAT_PATTERN, TableFilterByColumnDialogResult, Util, _getInjectionTokenValue, appConfigFactory, authServiceFactory, componentStateFactory, dataServiceFactory, dateFormatFactory, editorsMapping, exportDataFactory, exportServiceFactory, fileServiceFactory, getPermissionsServiceProvider, noop, ontimizePostBootstrap, permissionsServiceFactory, renderersMapping, translateServiceFactory };
39520
+ export { APP_CONFIG, AbstractComponentStateClass, AbstractComponentStateService, AbstractOServiceBaseComponent, AbstractOServiceComponent, AbstractServiceComponentStateClass, AppConfig, AppConfigFactory, AppMenuService, AppearanceService, AuthGuardService, AuthService, Base64, BaseService, BaseServiceResponse, BooleanConverter, BooleanInputConverter, CKEditorComponent, CKEditorModule, CanActivateFormLayoutChildGuard, CanDeactivateFormGuard, Codes, ColumnValueFilterOperator, ColumnsFilterPipe, ComponentStateServiceProvider, CurrencyService, CurrencyUtil, DEFAULT_CONTEXT_MENU_CONTENT_INPUTS, DEFAULT_CONTEXT_MENU_CONTENT_ITEM_INPUTS, DEFAULT_CONTEXT_MENU_CONTENT_OUTPUTS, DEFAULT_CONTEXT_MENU_DIRECTIVE_INPUTS, DEFAULT_CONTEXT_MENU_ITEM_INPUTS, DEFAULT_CONTEXT_MENU_ITEM_OUTPUTS, DEFAULT_DUAL_LIST_SELECTOR, DEFAULT_DUAL_LIST_SELECTOR_DATE_ITEM, DEFAULT_INPUTS_O_APP_HEADER, DEFAULT_INPUTS_O_APP_LAYOUT, DEFAULT_INPUTS_O_APP_LAYOUT_HEADER, DEFAULT_INPUTS_O_APP_LAYOUT_SIDENAV, DEFAULT_INPUTS_O_APP_SIDENAV, DEFAULT_INPUTS_O_APP_SIDENAV_IMAGE, DEFAULT_INPUTS_O_APP_SIDENAV_MENU_GROUP, DEFAULT_INPUTS_O_APP_SIDENAV_MENU_ITEM, DEFAULT_INPUTS_O_BAR_MENU, DEFAULT_INPUTS_O_BAR_MENU_ITEM, DEFAULT_INPUTS_O_BAR_MENU_NESTED, DEFAULT_INPUTS_O_BASE_MENU_ITEM, DEFAULT_INPUTS_O_BASE_TABLE_CELL_RENDERER, DEFAULT_INPUTS_O_BREADCRUMB, DEFAULT_INPUTS_O_BUTTON, DEFAULT_INPUTS_O_BUTTON_TOGGLE, DEFAULT_INPUTS_O_BUTTON_TOGGLE_GROUP, DEFAULT_INPUTS_O_CARD_RENDERER, DEFAULT_INPUTS_O_CHECKBOX, DEFAULT_INPUTS_O_COMBO, DEFAULT_INPUTS_O_COMBO_RENDERER, DEFAULT_INPUTS_O_COMBO_RENDERER_BOOLEAN, DEFAULT_INPUTS_O_COMBO_RENDERER_CURRENCY, DEFAULT_INPUTS_O_COMBO_RENDERER_DATE, DEFAULT_INPUTS_O_COMBO_RENDERER_ICON, DEFAULT_INPUTS_O_COMBO_RENDERER_INTEGER, DEFAULT_INPUTS_O_COMBO_RENDERER_PERCENTAGE, DEFAULT_INPUTS_O_COMBO_RENDERER_REAL, DEFAULT_INPUTS_O_CONTAINER, DEFAULT_INPUTS_O_CONTAINER_COLLAPSIBLE, DEFAULT_INPUTS_O_CONTEXT_MENU_ITEMS, DEFAULT_INPUTS_O_CURRENCY_INPUT, DEFAULT_INPUTS_O_DATA_TOOLBAR, DEFAULT_INPUTS_O_DATERANGE_INPUT, DEFAULT_INPUTS_O_DATE_INPUT, DEFAULT_INPUTS_O_ERROR, DEFAULT_INPUTS_O_FILE_INPUT, DEFAULT_INPUTS_O_FILTER_BUILDER, DEFAULT_INPUTS_O_FILTER_BUILDER_MENU, DEFAULT_INPUTS_O_FORM, DEFAULT_INPUTS_O_FORM_CONTAINER, DEFAULT_INPUTS_O_FORM_DATA_COMPONENT, DEFAULT_INPUTS_O_FORM_LAYOUT_MANAGER, DEFAULT_INPUTS_O_FORM_LAYOUT_SPLIT_PANE, DEFAULT_INPUTS_O_FORM_LAYOUT_TABGROUP, DEFAULT_INPUTS_O_FORM_SERVICE_COMPONENT, DEFAULT_INPUTS_O_FORM_TOOLBAR, DEFAULT_INPUTS_O_GRID, DEFAULT_INPUTS_O_GRID_ITEM, DEFAULT_INPUTS_O_HOUR_INPUT, DEFAULT_INPUTS_O_HTML_INPUT, DEFAULT_INPUTS_O_IMAGE, DEFAULT_INPUTS_O_INTEGER_INPUT, DEFAULT_INPUTS_O_LANGUAGE_SELECTOR, DEFAULT_INPUTS_O_LIST, DEFAULT_INPUTS_O_LISTPICKER_RENDERER, DEFAULT_INPUTS_O_LISTPICKER_RENDERER_CURRENCY, DEFAULT_INPUTS_O_LISTPICKER_RENDERER_DATE, DEFAULT_INPUTS_O_LISTPICKER_RENDERER_INTEGER, DEFAULT_INPUTS_O_LISTPICKER_RENDERER_PERCENTAGE, DEFAULT_INPUTS_O_LISTPICKER_RENDERER_REAL, DEFAULT_INPUTS_O_LIST_ITEM_AVATAR, DEFAULT_INPUTS_O_LIST_ITEM_CARD_IMAGE, DEFAULT_INPUTS_O_LIST_ITEM_TEXT, DEFAULT_INPUTS_O_LIST_PICKER, DEFAULT_INPUTS_O_LIST_PICKER_DIALOG, DEFAULT_INPUTS_O_LOCALE_BAR_MENU_ITEM, DEFAULT_INPUTS_O_LOCKER, DEFAULT_INPUTS_O_MENU_CARD, DEFAULT_INPUTS_O_MENU_LAYOUT, DEFAULT_INPUTS_O_PASSWORD_INPUT, DEFAULT_INPUTS_O_PERCENT_INPUT, DEFAULT_INPUTS_O_PHONE_INPUT, DEFAULT_INPUTS_O_RADIO, DEFAULT_INPUTS_O_REAL_INPUT, DEFAULT_INPUTS_O_SEARCH_INPUT, DEFAULT_INPUTS_O_SERVICE_BASE_COMPONENT, DEFAULT_INPUTS_O_SERVICE_COMPONENT, DEFAULT_INPUTS_O_SLIDER_INPUT, DEFAULT_INPUTS_O_SLIDETOGGLE, DEFAULT_INPUTS_O_TABLE, DEFAULT_INPUTS_O_TABLE_BUTTON, DEFAULT_INPUTS_O_TABLE_BUTTONS, DEFAULT_INPUTS_O_TABLE_CELL_EDITOR, DEFAULT_INPUTS_O_TABLE_CELL_EDITOR_BOOLEAN, DEFAULT_INPUTS_O_TABLE_CELL_EDITOR_DATE, DEFAULT_INPUTS_O_TABLE_CELL_EDITOR_INTEGER, DEFAULT_INPUTS_O_TABLE_CELL_EDITOR_TIME, DEFAULT_INPUTS_O_TABLE_CELL_RENDERER_ACTION, DEFAULT_INPUTS_O_TABLE_CELL_RENDERER_BOOLEAN, DEFAULT_INPUTS_O_TABLE_CELL_RENDERER_CURRENCY, DEFAULT_INPUTS_O_TABLE_CELL_RENDERER_DATE, DEFAULT_INPUTS_O_TABLE_CELL_RENDERER_IMAGE, DEFAULT_INPUTS_O_TABLE_CELL_RENDERER_INTEGER, DEFAULT_INPUTS_O_TABLE_CELL_RENDERER_PERCENTAGE, DEFAULT_INPUTS_O_TABLE_CELL_RENDERER_REAL, DEFAULT_INPUTS_O_TABLE_CELL_RENDERER_SERVICE, DEFAULT_INPUTS_O_TABLE_CELL_RENDERER_TIME, DEFAULT_INPUTS_O_TABLE_CELL_RENDERER_TRANSLATE, DEFAULT_INPUTS_O_TABLE_COLUMN, DEFAULT_INPUTS_O_TABLE_COLUMN_CALCULATED, DEFAULT_INPUTS_O_TABLE_COLUMN_FILTER, DEFAULT_INPUTS_O_TABLE_COLUMN_FILTER_COLUMN, DEFAULT_INPUTS_O_TABLE_COLUMN_GROUPING, DEFAULT_INPUTS_O_TABLE_COLUMN_GROUPING_COLUMN, DEFAULT_INPUTS_O_TABLE_COLUMN_RESIZER, DEFAULT_INPUTS_O_TABLE_COLUMN_SELECTALL, DEFAULT_INPUTS_O_TABLE_EXPORT_BUTTON, DEFAULT_INPUTS_O_TABLE_HEADER, DEFAULT_INPUTS_O_TABLE_INSERTABLE_ROW, DEFAULT_INPUTS_O_TABLE_MENU, DEFAULT_INPUTS_O_TABLE_OPTION, DEFAULT_INPUTS_O_TABLE_QUICKFILTER, DEFAULT_INPUTS_O_TABLE_ROW_EXPANDABLE, DEFAULT_INPUTS_O_TEXTAREA_INPUT, DEFAULT_INPUTS_O_TEXT_INPUT, DEFAULT_INPUTS_O_TEXT_RENDERER, DEFAULT_INPUTS_O_TIME_INPUT, DEFAULT_INPUTS_O_TREE, DEFAULT_INPUTS_O_USER_INFO, DEFAULT_INPUTS_O_USER_INFO_MENU, DEFAULT_INPUTS_O_USER_INFO_MENU_ITEM, DEFAULT_INPUTS_O_VALIDATOR, DEFAULT_INPUT_O_EXPANDABLE_CONTAINER, DEFAULT_OUTPUTS_LANGUAGE_SELECTOR, DEFAULT_OUTPUTS_O_APP_HEADER, DEFAULT_OUTPUTS_O_APP_LAYOUT, DEFAULT_OUTPUTS_O_APP_SIDENAV, DEFAULT_OUTPUTS_O_APP_SIDENAV_IMAGE, DEFAULT_OUTPUTS_O_APP_SIDENAV_MENU_GROUP, DEFAULT_OUTPUTS_O_APP_SIDENAV_MENU_ITEM, DEFAULT_OUTPUTS_O_BUTTON, DEFAULT_OUTPUTS_O_BUTTON_TOGGLE, DEFAULT_OUTPUTS_O_BUTTON_TOGGLE_GROUP, DEFAULT_OUTPUTS_O_CARD_RENDERER, DEFAULT_OUTPUTS_O_CONTAINER_COLLAPSIBLE, DEFAULT_OUTPUTS_O_CONTEXT_MENU, DEFAULT_OUTPUTS_O_DATERANGE_INPUT, DEFAULT_OUTPUTS_O_FILE_INPUT, DEFAULT_OUTPUTS_O_FILTER_BUILDER, DEFAULT_OUTPUTS_O_FORM, DEFAULT_OUTPUTS_O_FORM_DATA_COMPONENT, DEFAULT_OUTPUTS_O_FORM_LAYOUT_MANAGER, DEFAULT_OUTPUTS_O_FORM_LAYOUT_SPLIT_PANE, DEFAULT_OUTPUTS_O_FORM_LAYOUT_TABGROUP, DEFAULT_OUTPUTS_O_FORM_SERVICE_COMPONENT, DEFAULT_OUTPUTS_O_FORM_TOOLBAR, DEFAULT_OUTPUTS_O_HTML_INPUT, DEFAULT_OUTPUTS_O_LIST, DEFAULT_OUTPUTS_O_LIST_ITEM_CARD_IMAGE, DEFAULT_OUTPUTS_O_LIST_PICKER, DEFAULT_OUTPUTS_O_MENU_CARD, DEFAULT_OUTPUTS_O_MENU_LAYOUT, DEFAULT_OUTPUTS_O_PERCENT_INPUT, DEFAULT_OUTPUTS_O_SEARCH_INPUT, DEFAULT_OUTPUTS_O_SERVICE_COMPONENT, DEFAULT_OUTPUTS_O_TABLE, DEFAULT_OUTPUTS_O_TABLE_BUTTON, DEFAULT_OUTPUTS_O_TABLE_BUTTONS, DEFAULT_OUTPUTS_O_TABLE_CELL_EDITOR, DEFAULT_OUTPUTS_O_TABLE_CELL_RENDERER_ACTION, DEFAULT_OUTPUTS_O_TABLE_CELL_RENDERER_IMAGE, DEFAULT_OUTPUTS_O_TABLE_CELL_RENDERER_SERVICE, DEFAULT_OUTPUTS_O_TABLE_COLUMN, DEFAULT_OUTPUTS_O_TABLE_COLUMN_FILTER, DEFAULT_OUTPUTS_O_TABLE_COLUMN_GROUPING, DEFAULT_OUTPUTS_O_TABLE_COLUMN_RESIZER, DEFAULT_OUTPUTS_O_TABLE_EXPORT_BUTTON, DEFAULT_OUTPUTS_O_TABLE_INSERTABLE_ROW, DEFAULT_OUTPUTS_O_TABLE_MENU, DEFAULT_OUTPUTS_O_TABLE_OPTION, DEFAULT_OUTPUTS_O_TABLE_QUICKFILTER, DEFAULT_OUTPUTS_O_TABLE_ROW_EXPANDABLE, DEFAULT_OUTPUTS_O_TEXT_RENDERER, DEFAULT_OUTPUTS_O_TREE, DEFAULT_OUTPUTS_O_USER_INFO, DEFAULT_OUTPUTS_O_USER_INFO_MENU, DEFAULT_PAGINATOR_TABLE, DEFAULT_TABLE_COLUMN_AGGREGATE, DEFAULT_TABLE_CONTEXT_MENU_INPUTS, DaterangepickerComponent, DefaultComponentStateClass, DefaultComponentStateService, DefaultOServiceBaseComponent, DefaultOTableDataSource, DefaultOTableOptions, DefaultServiceComponentStateClass, DefaultServiceComponentStateService, DialogService, Error403Component, ExportDataServiceProvider, FilterExpressionUtils, IconService, ListItem, LocalStorageService, LoginStorageService, MomentService, NavigationService, NumberConverter, NumberInputConverter, NumberService, OAppHeaderComponent, OAppHeaderModule, OAppLayoutComponent, OAppLayoutHeaderComponent, OAppLayoutModule, OAppLayoutSidenavComponent, OAppSidenavComponent, OAppSidenavImageComponent, OAppSidenavMenuGroupComponent, OAppSidenavMenuItemComponent, OAppSidenavModule, OBarMenuComponent, OBarMenuGroupComponent, OBarMenuItemComponent, OBarMenuModule, OBarMenuNestedComponent, OBarMenuSeparatorComponent, OBaseComponent, OBaseMenuItemClass, OBaseTableCellEditor, OBaseTableCellRenderer, OBaseTablePaginator, OBreadcrumbComponent, OBreadcrumbModule, OBreadcrumbService, OButtonComponent, OButtonModule, OButtonToggleComponent, OButtonToggleGroupComponent, OButtonToggleModule, OCardMenuItemComponent, OCardMenuItemModule, OCardMenuLayoutComponent, OCardMenuLayoutModule, OCheckboxComponent, OCheckboxModule, OColumn, OColumnCollapsibleComponent, OColumnCollapsibleModule, OColumnComponent, OColumnModule, OComboComponent, OComboCustomRenderer, OComboModule, OComboRendererBooleanComponent, OComboRendererCurrencyComponent, OComboRendererDateComponent, OComboRendererIconComponent, OComboRendererIntegerComponent, OComboRendererPercentageComponent, OComboRendererRealComponent, OComboSearchComponent, OComponentMenuBaseItem, OContainerCollapsibleComponent, OContainerComponent, OContextMenuComponent, OContextMenuContentComponent, OContextMenuDirective, OContextMenuGroupComponent, OContextMenuItemComponent, OContextMenuModule, OContextMenuSeparatorComponent, OContextMenuService, OCurrencyInputComponent, OCurrencyInputModule, OCurrencyPipe, OCustomMaterialModule, ODataToolbarComponent, ODataToolbarModule, ODateInputComponent, ODateInputModule, ODateRangeInputComponent, ODateRangeInputModule, ODaterangepickerDirective, ODialogComponent, ODialogConfig, ODualListSelectorComponent, ODualListSelectorDateItemComponent, ODualListSelectorModule, OEmailInputComponent, OEmailInputModule, OErrorComponent, OErrorDialogManager, OExpandableContainerComponent, OExpandableContainerModule, OFileDragAndDropDirective, OFileInputComponent, OFileInputModule, OFileItem, OFileUploader, OFilterBuilderClearDirective, OFilterBuilderComponent, OFilterBuilderMenuComponent, OFilterBuilderModule, OFilterBuilderQueryDirective, OFormCacheClass, OFormComponent, OFormContainerComponent, OFormContainerModule, OFormControl, OFormDataComponent, OFormLayoutDialogComponent, OFormLayoutDialogOptionsDirective, OFormLayoutManagerComponent, OFormLayoutManagerComponentStateClass, OFormLayoutManagerComponentStateService, OFormLayoutManagerContentDirective, OFormLayoutManagerModule, OFormLayoutManagerService, OFormLayoutSplitPaneComponent, OFormLayoutSplitPaneOptionsDirective, OFormLayoutTabGroupComponent, OFormLayoutTabGroupOptionsDirective, OFormMessageService, OFormModule, OFormNavigationClass, OFormNavigationComponent, OFormServiceComponent, OFormToolbarComponent, OFormToolbarModule, OFormValue, OFullScreenDialogComponent, OGridComponent, OGridComponentStateClass, OGridComponentStateService, OGridItemComponent, OGridItemDirective, OGridModule, OGridSkeletonComponent, OHTMLInputComponent, OHTMLInputModule, OHiddenDirective, OHourInputComponent, OHourInputModule, OIconPipe, OImageComponent, OImageModule, OIntegerInputComponent, OIntegerInputModule, OIntegerPipe, OKeyboardListenerDirective, OLanguageSelectorComponent, OLanguageSelectorModule, OListComponent, OListComponentStateClass, OListComponentStateService, OListItemAvatarComponent, OListItemCardComponent, OListItemCardImageComponent, OListItemCardRenderer, OListItemComponent, OListItemDirective, OListItemTextComponent, OListItemTextRenderer, OListModule, OListPickerComponent, OListPickerCustomRenderer, OListPickerDialogComponent, OListPickerModule, OListPickerRendererCurrencyComponent, OListPickerRendererDateComponent, OListPickerRendererIntegerComponent, OListPickerRendererPercentageComponent, OListPickerRendererRealComponent, OListSkeletonComponent, OLoadFilterDialogComponent, OLocaleBarMenuItemComponent, OLockerDirective, OMatErrorDirective, OMatPrefix, OMatSort, OMatSortHeader, OMatSortModule, OMatSuffix, OModulesInfoService, OMomentPipe, ONIFInputComponent, ONIFInputModule, ONTIMIZE_MODULES, ONTIMIZE_PROVIDERS, ONavigationItem, OPasswordInputComponent, OPasswordInputModule, OPercentInputComponent, OPercentInputModule, OPercentPipe, OPermissionsModule, OPhoneInputComponent, OPhoneInputModule, ORadioComponent, ORadioModule, ORealInputComponent, ORealInputModule, ORealPipe, ORemoteConfigurationService, ORowCollapsibleComponent, ORowCollapsibleModule, ORowComponent, ORowModule, OSafePipe, OSearchInputComponent, OSearchInputModule, OServiceBaseComponent, OServiceComponent, OSharedModule, OSkeletonComponent, OSlideToggleComponent, OSlideToggleModule, OSliderComponent, OSliderModule, OSnackBarComponent, OSnackBarConfig, OStoreFilterDialogComponent, OTabGroupDirective, OTableApplyConfigurationDialogComponent, OTableBase, OTableBaseDialogClass, OTableButtonComponent, OTableButtonsComponent, OTableCellEditorBooleanComponent, OTableCellEditorDateComponent, OTableCellEditorEmailComponent, OTableCellEditorIntegerComponent, OTableCellEditorRealComponent, OTableCellEditorTextComponent, OTableCellEditorTimeComponent, OTableCellRendererActionComponent, OTableCellRendererBooleanComponent, OTableCellRendererCurrencyComponent, OTableCellRendererDateComponent, OTableCellRendererImageComponent, OTableCellRendererIntegerComponent, OTableCellRendererPercentageComponent, OTableCellRendererRealComponent, OTableCellRendererServiceComponent, OTableCellRendererTimeComponent, OTableCellRendererTranslateComponent, OTableColumnAggregateComponent, OTableColumnCalculatedComponent, OTableColumnComponent, OTableColumnResizerComponent, OTableColumnSelectAllDirective, OTableColumnsFilterColumnComponent, OTableColumnsFilterComponent, OTableColumnsGroupingColumnComponent, OTableColumnsGroupingComponent, OTableComponent, OTableComponentStateClass, OTableComponentStateService, OTableContextMenuComponent, OTableDao, OTableDataSourceService, OTableExpandedFooterDirective, OTableExportButtonComponent, OTableExportButtonService, OTableExportConfiguration, OTableExportDialogComponent, OTableFilterByColumnDataDialogComponent, OTableGroupByColumnsDialogComponent, OTableGroupedRow, OTableHeaderComponent, OTableHeaderSelectAllComponent, OTableInsertableRowComponent, OTableMatPaginatorIntl, OTableMenuComponent, OTableModule, OTableOptionComponent, OTablePaginatorComponent, OTableQuickfilterComponent, OTableRowClassPipe, OTableRowDirective, OTableRowExpandableComponent, OTableRowExpandedChange, OTableSkeletonComponent, OTableStoreConfigurationDialogComponent, OTableVirtualScrollStrategy, OTableVisibleColumnsDialogComponent, OTextInputComponent, OTextInputModule, OTextareaInputComponent, OTextareaInputModule, OTimeInputComponent, OTimeInputModule, OTranslateHttpLoader, OTranslateModule, OTranslateParser, OTranslatePipe, OTranslateService, OTreeComponent, OTreeMenuComponent, OTreeModule, OTreeNodeComponent, OUserInfoComponent, OUserInfoConfigurationDirective, OUserInfoConfigurationItemDirective, OUserInfoModule, OUserInfoService, OValidatorComponent, OValidators, OValueChangeEvent, OWrapperContentMenuComponent, O_AUTH_SERVICE, O_CHART_ON_DEMAND_SERVICE, O_COMPONENT_STATE_SERVICE, O_DATA_SERVICE, O_ERROR_DIALOG_MANAGER, O_EXPORT_DATA_SERVICE, O_EXPORT_SERVICE, O_FILE_SERVICE, O_FORM_GLOBAL_CONFIG, O_FORM_MESSAGE_SERVICE, O_GLOBAL_CONFIG, O_INPUTS_OPTIONS, O_MAT_ERROR_OPTIONS, O_PERMISSION_SERVICE, O_REPORT_SERVICE, O_TABLE_CELL_EDITORS, O_TABLE_CELL_EDITORS_INPUTS, O_TABLE_CELL_EDITORS_OUTPUTS, O_TABLE_CELL_RENDERERS, O_TABLE_CELL_RENDERERS_INPUTS, O_TABLE_CELL_RENDERERS_OUTPUTS, O_TABLE_GLOBAL_CONFIG, O_TRANSLATE_SERVICE, ObservableWrapper, OnRangeChangeVirtualScroll, OntimizeAuthService, OntimizeAuthServiceProvider, OntimizeBaseService, OntimizeEEPermissionsService, OntimizeEEService, OntimizeExportDataProviderService, OntimizeExportDataProviderService3X, OntimizeExportService, OntimizeExportService3X, OntimizeExportServiceProvider, OntimizeFileService, OntimizeMatDateFormats, OntimizeMatIconRegistry, OntimizeMomentDateAdapter, OntimizePermissionsService, OntimizeService, OntimizeServiceProvider, OntimizeServiceResponse, OntimizeServiceResponseAdapter, OntimizeServiceResponseParser, OntimizeWebModule, OntimizeWebTranslateModule, OrderByPipe, PermissionsGuardService, PermissionsService, PermissionsUtils, SQLTypes, ServiceUtils, ShareCanActivateChildService, SideEnum, SnackBarService, StringConverter, TWELVE_HOUR_FORMAT_PATTERN, TWENTY_FOUR_HOUR_FORMAT_PATTERN, TableFilterByColumnDialogResult, Util, _getInjectionTokenValue, appConfigFactory, authServiceFactory, componentStateFactory, dataServiceFactory, dateFormatFactory, editorsMapping, exportDataFactory, exportServiceFactory, fileServiceFactory, getPermissionsServiceProvider, noop, ontimizePostBootstrap, permissionsServiceFactory, renderersMapping, translateServiceFactory };
39249
39521
  //# sourceMappingURL=ontimize-web-ngx.mjs.map