nuxeo-development-framework 5.4.6 → 5.4.7

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 (52) hide show
  1. package/bundles/nuxeo-development-framework.umd.js +633 -346
  2. package/bundles/nuxeo-development-framework.umd.js.map +1 -1
  3. package/esm2015/lib/components/ndf-config-editor/services/dummy-data.js +2 -2
  4. package/esm2015/lib/components/ndf-filters/containers/filters-panel/filters-panel.component.js +62 -16
  5. package/esm2015/lib/components/ndf-filters/models/base-field-config.js +1 -1
  6. package/esm2015/lib/components/ndf-filters/pipes/check-condition.pipe.js +3 -3
  7. package/esm2015/lib/components/reports/ndf-reports/base/base-custom-report.js +41 -0
  8. package/esm2015/lib/components/reports/ndf-reports/base/base-report.js +3 -2
  9. package/esm2015/lib/components/reports/ndf-reports/base/index.js +5 -0
  10. package/esm2015/lib/components/reports/ndf-reports/charts-components/graph-chart/graph-chart.component.js +1 -1
  11. package/esm2015/lib/components/reports/ndf-reports/components/custom-report/custom-report.component.js +49 -0
  12. package/esm2015/lib/components/reports/ndf-reports/components/index.js +2 -1
  13. package/esm2015/lib/components/reports/ndf-reports/constants/charts-types.js +2 -1
  14. package/esm2015/lib/components/reports/ndf-reports/models/custom-definition.js +2 -0
  15. package/esm2015/lib/components/reports/ndf-reports/models/dialog-data.js +1 -1
  16. package/esm2015/lib/components/reports/ndf-reports/models/dynamic-line.js +1 -1
  17. package/esm2015/lib/components/reports/ndf-reports/models/graph-definition.js +2 -0
  18. package/esm2015/lib/components/reports/ndf-reports/models/index.js +3 -2
  19. package/esm2015/lib/components/reports/ndf-reports/models/report-config.js +1 -1
  20. package/esm2015/lib/components/reports/ndf-reports/ndf-reports.module.js +4 -3
  21. package/esm2015/lib/components/reports/ndf-reports/services/custom-reports-registry.service.js +132 -0
  22. package/esm2015/lib/components/reports/ndf-reports/services/index.js +2 -1
  23. package/esm2015/lib/components/reports/ndf-reports/services/report-config-mapper.service.js +8 -1
  24. package/esm2015/lib/components/spell-checker-field/spell-checker-field.module.js +1 -1
  25. package/esm2015/lib/shared/components/nuxeo-dialog/nuxeo.dialog.js +7 -6
  26. package/esm2015/lib/shared/evaluator/evaluator.js +3 -2
  27. package/esm2015/lib/shared/evaluator/types.js +1 -1
  28. package/fesm2015/nuxeo-development-framework.js +591 -324
  29. package/fesm2015/nuxeo-development-framework.js.map +1 -1
  30. package/lib/components/ndf-filters/containers/filters-panel/filters-panel.component.d.ts +10 -3
  31. package/lib/components/ndf-filters/models/base-field-config.d.ts +2 -2
  32. package/lib/components/ndf-filters/pipes/check-condition.pipe.d.ts +1 -1
  33. package/lib/components/reports/ndf-reports/base/base-custom-report.d.ts +38 -0
  34. package/lib/components/reports/ndf-reports/base/index.d.ts +4 -0
  35. package/lib/components/reports/ndf-reports/components/_parts/report-actions/report-actions.component.d.ts +1 -0
  36. package/lib/components/reports/ndf-reports/components/custom-report/custom-report.component.d.ts +14 -0
  37. package/lib/components/reports/ndf-reports/components/index.d.ts +1 -0
  38. package/lib/components/reports/ndf-reports/constants/charts-types.d.ts +1 -0
  39. package/lib/components/reports/ndf-reports/containers/ndf-report/ndf-report.component.d.ts +1 -0
  40. package/lib/components/reports/ndf-reports/models/custom-definition.d.ts +11 -0
  41. package/lib/components/reports/ndf-reports/models/dialog-data.d.ts +1 -1
  42. package/lib/components/reports/ndf-reports/models/dynamic-line.d.ts +1 -1
  43. package/lib/components/reports/ndf-reports/models/index.d.ts +2 -1
  44. package/lib/components/reports/ndf-reports/models/report-config.d.ts +3 -2
  45. package/lib/components/reports/ndf-reports/ndf-reports.module.d.ts +21 -20
  46. package/lib/components/reports/ndf-reports/services/custom-reports-registry.service.d.ts +83 -0
  47. package/lib/components/reports/ndf-reports/services/index.d.ts +1 -0
  48. package/lib/components/reports/ndf-reports/services/report-config-mapper.service.d.ts +6 -1
  49. package/lib/shared/evaluator/types.d.ts +1 -1
  50. package/package.json +1 -1
  51. package/esm2015/lib/components/reports/ndf-reports/models/graph.js +0 -2
  52. /package/lib/components/reports/ndf-reports/models/{graph.d.ts → graph-definition.d.ts} +0 -0
@@ -1853,11 +1853,12 @@ class NdfNuxeoDialog extends BaseComponent {
1853
1853
  }
1854
1854
  }
1855
1855
  isArrowFunction(fn) {
1856
- const strFn = fn.toString();
1857
- const firstIndex = strFn.indexOf(')');
1858
- const lastIndex = strFn.indexOf('{') + 1;
1859
- const target = strFn.substring(firstIndex, lastIndex).replace(' ', '');
1860
- return lastIndex == 0 || target.includes('=>');
1856
+ // const strFn = fn.toString();
1857
+ // const firstIndex = strFn.indexOf(')');
1858
+ // const lastIndex = strFn.indexOf('{') + 1;
1859
+ // const target = strFn.substring(firstIndex, lastIndex).replace(' ', '');
1860
+ // return lastIndex == 0 || target.includes('=>');
1861
+ return true;
1861
1862
  }
1862
1863
  onClose() {
1863
1864
  this.dialogRef.close();
@@ -18132,296 +18133,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
18132
18133
  type: Input
18133
18134
  }] } });
18134
18135
 
18135
- class BaseField extends BaseCustomValueAccessor {
18136
- constructor() {
18137
- super(...arguments);
18138
- this.dynamicComponent = this.injector.get(DynamicComponentLoaderService);
18139
- }
18140
- writeValue(obj) {
18141
- var _a, _b, _c, _d;
18142
- this.internalValue = obj;
18143
- if ((_b = (_a = this._componentRef) === null || _a === void 0 ? void 0 : _a.instance) === null || _b === void 0 ? void 0 : _b.writeValue) {
18144
- (_d = (_c = this._componentRef) === null || _c === void 0 ? void 0 : _c.instance) === null || _d === void 0 ? void 0 : _d.writeValue(obj);
18145
- }
18146
- }
18147
- validate(control) {
18148
- var _a, _b;
18149
- if ((_b = (_a = this._componentRef) === null || _a === void 0 ? void 0 : _a.instance) === null || _b === void 0 ? void 0 : _b.validate) {
18150
- return this._componentRef.instance.validate(control);
18151
- }
18152
- else {
18153
- return null;
18154
- }
18155
- }
18156
- registerOnValidatorChange(fn) {
18157
- var _a, _b;
18158
- if ((_b = (_a = this._componentRef) === null || _a === void 0 ? void 0 : _a.instance) === null || _b === void 0 ? void 0 : _b.registerOnValidatorChange) {
18159
- this._componentRef.instance.registerOnValidatorChange(fn);
18160
- }
18161
- }
18162
- ngOnChanges(changes) {
18163
- if (!this._componentRef) {
18164
- return;
18165
- }
18166
- Object.keys(changes).forEach((key) => {
18167
- this._componentRef.instance[key] = changes[key].currentValue;
18168
- });
18169
- this._componentRef.changeDetectorRef.markForCheck();
18170
- }
18171
- ngOnDestroy() {
18172
- if (this._componentRef) {
18173
- this._componentRef.destroy();
18174
- }
18175
- }
18176
- _prepareValueAccessor() {
18177
- const ngControl = this.injector.get(NgControl);
18178
- ngControl.valueAccessor = this._componentRef.instance;
18179
- }
18180
- }
18181
- BaseField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BaseField, deps: null, target: i0.ɵɵFactoryTarget.Directive });
18182
- BaseField.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.17", type: BaseField, inputs: { fieldConfig: "fieldConfig" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["dynamicContainer"], descendants: true, read: ViewContainerRef, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0 });
18183
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BaseField, decorators: [{
18184
- type: Directive
18185
- }], propDecorators: { container: [{
18186
- type: ViewChild,
18187
- args: ['dynamicContainer', { read: ViewContainerRef, static: true }]
18188
- }], fieldConfig: [{
18189
- type: Input
18190
- }] } });
18191
-
18192
- class PredicateFieldComponent extends BaseField {
18193
- constructor() {
18194
- super(...arguments);
18195
- this.handlers = {
18196
- input: this._prepareField.bind(this),
18197
- date: this._prepareField.bind(this)
18198
- };
18199
- }
18200
- ngOnInit() {
18201
- var _a, _b;
18202
- const componentType = (_b = (_a = this.fieldConfig) === null || _a === void 0 ? void 0 : _a.render) === null || _b === void 0 ? void 0 : _b.type;
18203
- if (componentType) {
18204
- this._componentRef = this.dynamicComponent.renderComponent(componentType, this.container);
18205
- this._prepareValueAccessor();
18206
- this._prepareComponent(componentType);
18207
- }
18208
- }
18209
- _prepareComponent(type) {
18210
- var _a, _b;
18211
- (_b = (_a = this.handlers)[type]) === null || _b === void 0 ? void 0 : _b.call(_a);
18212
- }
18213
- _prepareField() {
18214
- const instance = this._componentRef.instance;
18215
- instance.field = this.fieldConfig;
18216
- }
18217
- }
18218
- PredicateFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PredicateFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
18219
- PredicateFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PredicateFieldComponent, selector: "app-predicate-field", host: { properties: { "class": "'predicate-field' + ' predicate-field__fieldConfig?.render?.type' " } }, providers: [
18220
- {
18221
- provide: NG_VALUE_ACCESSOR,
18222
- useExisting: forwardRef(() => PredicateFieldComponent),
18223
- multi: true
18224
- },
18225
- {
18226
- provide: NG_VALIDATORS,
18227
- useExisting: forwardRef(() => PredicateFieldComponent),
18228
- multi: true
18229
- }
18230
- ], usesInheritance: true, ngImport: i0, template: "<field-header *ngIf=\"fieldConfig.label && !fieldConfig.render?.options?.hideLabel\" class=\"predicate-field__label\">{{\r\n\tfieldConfig.label | translate\r\n}}</field-header>\r\n\r\n<ng-container #dynamicContainer></ng-container>\r\n", styles: [".predicate-field{display:var(--pf-display, block);padding-inline:var(--pf-padding-inline, var(--ff-padding-inline, .5rem));padding-block:var(--pf-padding-block, var(--ff-padding-block, 0));max-width:100%}\n"], components: [{ type: FieldHeaderComponent, selector: "field-header" }], directives: [{ type: i4$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "translate": i1.TranslatePipe }, encapsulation: i0.ViewEncapsulation.None });
18231
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PredicateFieldComponent, decorators: [{
18232
- type: Component,
18233
- args: [{
18234
- selector: 'app-predicate-field',
18235
- templateUrl: './predicate-field.component.html',
18236
- styleUrls: ['./predicate-field.component.scss'],
18237
- encapsulation: ViewEncapsulation.None,
18238
- providers: [
18239
- {
18240
- provide: NG_VALUE_ACCESSOR,
18241
- useExisting: forwardRef(() => PredicateFieldComponent),
18242
- multi: true
18243
- },
18244
- {
18245
- provide: NG_VALIDATORS,
18246
- useExisting: forwardRef(() => PredicateFieldComponent),
18247
- multi: true
18248
- }
18249
- ],
18250
- host: {
18251
- '[class]': "'predicate-field' + ' predicate-field__fieldConfig?.render?.type' "
18252
- }
18253
- }]
18254
- }] });
18255
-
18256
- class AggregationFieldComponent extends BaseField {
18257
- constructor() {
18258
- super(...arguments);
18259
- this.handlers = {
18260
- [AGGREGATION_FIELD_TYPES.dropdown]: this._prepareField.bind(this),
18261
- [AGGREGATION_FIELD_TYPES.checkbox]: this._prepareField.bind(this),
18262
- [AGGREGATION_FIELD_TYPES.radio]: this._prepareField.bind(this),
18263
- [AGGREGATION_FIELD_TYPES.switch]: this._prepareField.bind(this),
18264
- [AGGREGATION_FIELD_TYPES.autocomplete]: this._prepareField.bind(this),
18265
- [AGGREGATION_FIELD_TYPES.dateList]: this._prepareField.bind(this),
18266
- [AGGREGATION_FIELD_TYPES.custom]: this._prepareField.bind(this),
18267
- };
18268
- }
18269
- ngOnInit() {
18270
- var _a, _b, _c, _d;
18271
- const componentType = (_b = (_a = this.fieldConfig) === null || _a === void 0 ? void 0 : _a.render) === null || _b === void 0 ? void 0 : _b.type;
18272
- if (componentType) {
18273
- this._componentRef = this.dynamicComponent.renderComponent(componentType, this.container);
18274
- this._prepareValueAccessor();
18275
- (_d = (_c = this.handlers)[componentType]) === null || _d === void 0 ? void 0 : _d.call(_c);
18276
- }
18277
- }
18278
- _prepareField() {
18279
- const instance = this._componentRef
18280
- .instance;
18281
- instance.aggregation = this.aggregation;
18282
- instance.fieldConfig = this.fieldConfig;
18283
- if (this.contentTemplate) {
18284
- instance.contentTemplate = this.contentTemplate;
18285
- }
18286
- }
18287
- }
18288
- AggregationFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AggregationFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
18289
- AggregationFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: AggregationFieldComponent, selector: "app-aggregation-field", inputs: { aggregation: "aggregation", contentTemplate: "contentTemplate" }, host: { properties: { "class": "'aggregation-field' + ' aggregation-field__fieldConfig?.render?.type' " } }, providers: [
18290
- {
18291
- provide: NG_VALUE_ACCESSOR,
18292
- useExisting: forwardRef(() => AggregationFieldComponent),
18293
- multi: true,
18294
- },
18295
- {
18296
- provide: NG_VALIDATORS,
18297
- useExisting: forwardRef(() => AggregationFieldComponent),
18298
- multi: true,
18299
- },
18300
- ], usesInheritance: true, ngImport: i0, template: '<ng-container #dynamicContainer></ng-container>', isInline: true, styles: [""], encapsulation: i0.ViewEncapsulation.None });
18301
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AggregationFieldComponent, decorators: [{
18302
- type: Component,
18303
- args: [{
18304
- selector: 'app-aggregation-field',
18305
- template: '<ng-container #dynamicContainer></ng-container>',
18306
- styles: [''],
18307
- encapsulation: ViewEncapsulation.None,
18308
- providers: [
18309
- {
18310
- provide: NG_VALUE_ACCESSOR,
18311
- useExisting: forwardRef(() => AggregationFieldComponent),
18312
- multi: true,
18313
- },
18314
- {
18315
- provide: NG_VALIDATORS,
18316
- useExisting: forwardRef(() => AggregationFieldComponent),
18317
- multi: true,
18318
- },
18319
- ],
18320
- host: {
18321
- '[class]': "'aggregation-field' + ' aggregation-field__fieldConfig?.render?.type' ",
18322
- },
18323
- }]
18324
- }], propDecorators: { aggregation: [{
18325
- type: Input
18326
- }], contentTemplate: [{
18327
- type: Input
18328
- }] } });
18329
-
18330
- class CustomFieldComponent extends BaseField {
18331
- constructor() {
18332
- super(...arguments);
18333
- this.handlers = {
18334
- activeUser: this._prepareField.bind(this),
18335
- aggregationGroup: this._prepareField.bind(this)
18336
- };
18337
- }
18338
- ngOnInit() {
18339
- var _a, _b;
18340
- const componentType = (_b = (_a = this.fieldConfig) === null || _a === void 0 ? void 0 : _a.render) === null || _b === void 0 ? void 0 : _b.type;
18341
- if (componentType) {
18342
- this._componentRef = this.dynamicComponent.renderComponent(componentType, this.container);
18343
- this._prepareValueAccessor();
18344
- this._prepareComponent(componentType);
18345
- }
18346
- }
18347
- _prepareComponent(type) {
18348
- var _a, _b;
18349
- (_b = (_a = this.handlers)[type]) === null || _b === void 0 ? void 0 : _b.call(_a);
18350
- }
18351
- _prepareField() {
18352
- const instance = this._componentRef.instance;
18353
- instance.field = this.fieldConfig;
18354
- instance.aggregations = this.aggregations;
18355
- }
18356
- }
18357
- CustomFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CustomFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
18358
- CustomFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: CustomFieldComponent, selector: "app-custom-field", inputs: { aggregations: "aggregations" }, host: { properties: { "class": "'custom-field' + ' custom-field__fieldConfig?.render?.type' " } }, providers: [
18359
- {
18360
- provide: NG_VALUE_ACCESSOR,
18361
- useExisting: forwardRef(() => CustomFieldComponent),
18362
- multi: true
18363
- },
18364
- {
18365
- provide: NG_VALIDATORS,
18366
- useExisting: forwardRef(() => CustomFieldComponent),
18367
- multi: true
18368
- }
18369
- ], usesInheritance: true, ngImport: i0, template: "<field-header *ngIf=\"fieldConfig.label && !fieldConfig.render?.options?.hideLabel\" class=\"predicate-field__label\">{{\r\n\tfieldConfig.label | translate\r\n}}</field-header>\r\n\r\n<ng-container #dynamicContainer></ng-container>\r\n", styles: [".custom-field{display:var(--cf-display, block);padding-inline:var(--cf-padding-inline, var(--ff-padding-inline, .5rem));padding-block:var(--cf-padding-block, var(--ff-padding-block, 0));max-width:100%}\n"], components: [{ type: FieldHeaderComponent, selector: "field-header" }], directives: [{ type: i4$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "translate": i1.TranslatePipe }, encapsulation: i0.ViewEncapsulation.None });
18370
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CustomFieldComponent, decorators: [{
18371
- type: Component,
18372
- args: [{
18373
- selector: 'app-custom-field',
18374
- templateUrl: './custom-field.component.html',
18375
- styleUrls: ['./custom-field.component.scss'],
18376
- encapsulation: ViewEncapsulation.None,
18377
- providers: [
18378
- {
18379
- provide: NG_VALUE_ACCESSOR,
18380
- useExisting: forwardRef(() => CustomFieldComponent),
18381
- multi: true
18382
- },
18383
- {
18384
- provide: NG_VALIDATORS,
18385
- useExisting: forwardRef(() => CustomFieldComponent),
18386
- multi: true
18387
- }
18388
- ],
18389
- host: {
18390
- '[class]': "'custom-field' + ' custom-field__fieldConfig?.render?.type' "
18391
- }
18392
- }]
18393
- }], propDecorators: { aggregations: [{
18394
- type: Input
18395
- }] } });
18396
-
18397
- class FiltersByRolesPipe {
18398
- constructor(_nuxeoService, _rolesService) {
18399
- this._nuxeoService = _nuxeoService;
18400
- this._rolesService = _rolesService;
18401
- }
18402
- transform(items) {
18403
- if (!items) {
18404
- return items;
18405
- }
18406
- return items.filter((item) => {
18407
- var _a, _b, _c, _d, _e;
18408
- if (!Array.isArray((_a = item.config) === null || _a === void 0 ? void 0 : _a.roles) || ((_b = item.config) === null || _b === void 0 ? void 0 : _b.roles.length) === 0) {
18409
- return true;
18410
- }
18411
- const user = (_d = (_c = this._nuxeoService) === null || _c === void 0 ? void 0 : _c.nuxeoClient) === null || _d === void 0 ? void 0 : _d.user;
18412
- return this._rolesService.isUserInRole(user, (_e = item.config) === null || _e === void 0 ? void 0 : _e.roles);
18413
- });
18414
- }
18415
- }
18416
- FiltersByRolesPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FiltersByRolesPipe, deps: [{ token: NuxeoService }, { token: RolesService }], target: i0.ɵɵFactoryTarget.Pipe });
18417
- FiltersByRolesPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FiltersByRolesPipe, name: "filterByRoles" });
18418
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FiltersByRolesPipe, decorators: [{
18419
- type: Pipe,
18420
- args: [{
18421
- name: 'filterByRoles'
18422
- }]
18423
- }], ctorParameters: function () { return [{ type: NuxeoService }, { type: RolesService }]; } });
18424
-
18425
18136
  /**
18426
18137
  * Creates a secure context for function evaluation that prevents access to the window object.
18427
18138
  * @returns {Record<string, any>} A secure context object with safe properties.
@@ -18447,7 +18158,8 @@ function createSecureContext() {
18447
18158
  // Prevent access to window
18448
18159
  window: undefined,
18449
18160
  self: undefined,
18450
- globalThis: undefined
18161
+ globalThis: undefined,
18162
+ _: ___default // Include lodash if needed, but ensure it's used safely
18451
18163
  };
18452
18164
  }
18453
18165
  /**
@@ -18737,37 +18449,301 @@ Evaluator.templateSettings = {
18737
18449
  escape: /\{\{\{([\s\S]+?)\}\}\}/g
18738
18450
  };
18739
18451
 
18740
- class CheckConditionPipe {
18741
- constructor(nuxeoService) {
18742
- this.nuxeoService = nuxeoService;
18743
- this.user = nuxeoService.nuxeoClient.user;
18452
+ class BaseField extends BaseCustomValueAccessor {
18453
+ constructor() {
18454
+ super(...arguments);
18455
+ this.dynamicComponent = this.injector.get(DynamicComponentLoaderService);
18744
18456
  }
18745
- transform(condition, aggregations, language) {
18746
- if (!condition) {
18747
- return true;
18457
+ writeValue(obj) {
18458
+ var _a, _b, _c, _d;
18459
+ this.internalValue = obj;
18460
+ if ((_b = (_a = this._componentRef) === null || _a === void 0 ? void 0 : _a.instance) === null || _b === void 0 ? void 0 : _b.writeValue) {
18461
+ (_d = (_c = this._componentRef) === null || _c === void 0 ? void 0 : _c.instance) === null || _d === void 0 ? void 0 : _d.writeValue(obj);
18748
18462
  }
18749
- try {
18750
- return Evaluator.evaluate(condition, ___default.cloneDeep({ aggregations, language, user: this.user }));
18463
+ }
18464
+ validate(control) {
18465
+ var _a, _b;
18466
+ if ((_b = (_a = this._componentRef) === null || _a === void 0 ? void 0 : _a.instance) === null || _b === void 0 ? void 0 : _b.validate) {
18467
+ return this._componentRef.instance.validate(control);
18751
18468
  }
18752
- catch (error) {
18753
- console.error({ error });
18754
- return false;
18469
+ else {
18470
+ return null;
18471
+ }
18472
+ }
18473
+ registerOnValidatorChange(fn) {
18474
+ var _a, _b;
18475
+ if ((_b = (_a = this._componentRef) === null || _a === void 0 ? void 0 : _a.instance) === null || _b === void 0 ? void 0 : _b.registerOnValidatorChange) {
18476
+ this._componentRef.instance.registerOnValidatorChange(fn);
18755
18477
  }
18756
18478
  }
18479
+ ngOnChanges(changes) {
18480
+ if (!this._componentRef) {
18481
+ return;
18482
+ }
18483
+ Object.keys(changes).forEach((key) => {
18484
+ this._componentRef.instance[key] = changes[key].currentValue;
18485
+ });
18486
+ this._componentRef.changeDetectorRef.markForCheck();
18487
+ }
18488
+ ngOnDestroy() {
18489
+ if (this._componentRef) {
18490
+ this._componentRef.destroy();
18491
+ }
18492
+ }
18493
+ _prepareValueAccessor() {
18494
+ const ngControl = this.injector.get(NgControl);
18495
+ ngControl.valueAccessor = this._componentRef.instance;
18496
+ }
18757
18497
  }
18758
- CheckConditionPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CheckConditionPipe, deps: [{ token: NuxeoService }], target: i0.ɵɵFactoryTarget.Pipe });
18759
- CheckConditionPipepipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CheckConditionPipe, name: "checkCondition" });
18760
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CheckConditionPipe, decorators: [{
18498
+ BaseField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BaseField, deps: null, target: i0.ɵɵFactoryTarget.Directive });
18499
+ BaseFielddir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.17", type: BaseField, inputs: { fieldConfig: "fieldConfig" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["dynamicContainer"], descendants: true, read: ViewContainerRef, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0 });
18500
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BaseField, decorators: [{
18501
+ type: Directive
18502
+ }], propDecorators: { container: [{
18503
+ type: ViewChild,
18504
+ args: ['dynamicContainer', { read: ViewContainerRef, static: true }]
18505
+ }], fieldConfig: [{
18506
+ type: Input
18507
+ }] } });
18508
+
18509
+ class PredicateFieldComponent extends BaseField {
18510
+ constructor() {
18511
+ super(...arguments);
18512
+ this.handlers = {
18513
+ input: this._prepareField.bind(this),
18514
+ date: this._prepareField.bind(this)
18515
+ };
18516
+ }
18517
+ ngOnInit() {
18518
+ var _a, _b;
18519
+ const componentType = (_b = (_a = this.fieldConfig) === null || _a === void 0 ? void 0 : _a.render) === null || _b === void 0 ? void 0 : _b.type;
18520
+ if (componentType) {
18521
+ this._componentRef = this.dynamicComponent.renderComponent(componentType, this.container);
18522
+ this._prepareValueAccessor();
18523
+ this._prepareComponent(componentType);
18524
+ }
18525
+ }
18526
+ _prepareComponent(type) {
18527
+ var _a, _b;
18528
+ (_b = (_a = this.handlers)[type]) === null || _b === void 0 ? void 0 : _b.call(_a);
18529
+ }
18530
+ _prepareField() {
18531
+ const instance = this._componentRef.instance;
18532
+ instance.field = this.fieldConfig;
18533
+ }
18534
+ }
18535
+ PredicateFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PredicateFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
18536
+ PredicateFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: PredicateFieldComponent, selector: "app-predicate-field", host: { properties: { "class": "'predicate-field' + ' predicate-field__fieldConfig?.render?.type' " } }, providers: [
18537
+ {
18538
+ provide: NG_VALUE_ACCESSOR,
18539
+ useExisting: forwardRef(() => PredicateFieldComponent),
18540
+ multi: true
18541
+ },
18542
+ {
18543
+ provide: NG_VALIDATORS,
18544
+ useExisting: forwardRef(() => PredicateFieldComponent),
18545
+ multi: true
18546
+ }
18547
+ ], usesInheritance: true, ngImport: i0, template: "<field-header *ngIf=\"fieldConfig.label && !fieldConfig.render?.options?.hideLabel\" class=\"predicate-field__label\">{{\r\n\tfieldConfig.label | translate\r\n}}</field-header>\r\n\r\n<ng-container #dynamicContainer></ng-container>\r\n", styles: [".predicate-field{display:var(--pf-display, block);padding-inline:var(--pf-padding-inline, var(--ff-padding-inline, .5rem));padding-block:var(--pf-padding-block, var(--ff-padding-block, 0));max-width:100%}\n"], components: [{ type: FieldHeaderComponent, selector: "field-header" }], directives: [{ type: i4$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "translate": i1.TranslatePipe }, encapsulation: i0.ViewEncapsulation.None });
18548
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: PredicateFieldComponent, decorators: [{
18549
+ type: Component,
18550
+ args: [{
18551
+ selector: 'app-predicate-field',
18552
+ templateUrl: './predicate-field.component.html',
18553
+ styleUrls: ['./predicate-field.component.scss'],
18554
+ encapsulation: ViewEncapsulation.None,
18555
+ providers: [
18556
+ {
18557
+ provide: NG_VALUE_ACCESSOR,
18558
+ useExisting: forwardRef(() => PredicateFieldComponent),
18559
+ multi: true
18560
+ },
18561
+ {
18562
+ provide: NG_VALIDATORS,
18563
+ useExisting: forwardRef(() => PredicateFieldComponent),
18564
+ multi: true
18565
+ }
18566
+ ],
18567
+ host: {
18568
+ '[class]': "'predicate-field' + ' predicate-field__fieldConfig?.render?.type' "
18569
+ }
18570
+ }]
18571
+ }] });
18572
+
18573
+ class AggregationFieldComponent extends BaseField {
18574
+ constructor() {
18575
+ super(...arguments);
18576
+ this.handlers = {
18577
+ [AGGREGATION_FIELD_TYPES.dropdown]: this._prepareField.bind(this),
18578
+ [AGGREGATION_FIELD_TYPES.checkbox]: this._prepareField.bind(this),
18579
+ [AGGREGATION_FIELD_TYPES.radio]: this._prepareField.bind(this),
18580
+ [AGGREGATION_FIELD_TYPES.switch]: this._prepareField.bind(this),
18581
+ [AGGREGATION_FIELD_TYPES.autocomplete]: this._prepareField.bind(this),
18582
+ [AGGREGATION_FIELD_TYPES.dateList]: this._prepareField.bind(this),
18583
+ [AGGREGATION_FIELD_TYPES.custom]: this._prepareField.bind(this),
18584
+ };
18585
+ }
18586
+ ngOnInit() {
18587
+ var _a, _b, _c, _d;
18588
+ const componentType = (_b = (_a = this.fieldConfig) === null || _a === void 0 ? void 0 : _a.render) === null || _b === void 0 ? void 0 : _b.type;
18589
+ if (componentType) {
18590
+ this._componentRef = this.dynamicComponent.renderComponent(componentType, this.container);
18591
+ this._prepareValueAccessor();
18592
+ (_d = (_c = this.handlers)[componentType]) === null || _d === void 0 ? void 0 : _d.call(_c);
18593
+ }
18594
+ }
18595
+ _prepareField() {
18596
+ const instance = this._componentRef
18597
+ .instance;
18598
+ instance.aggregation = this.aggregation;
18599
+ instance.fieldConfig = this.fieldConfig;
18600
+ if (this.contentTemplate) {
18601
+ instance.contentTemplate = this.contentTemplate;
18602
+ }
18603
+ }
18604
+ }
18605
+ AggregationFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AggregationFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
18606
+ AggregationFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: AggregationFieldComponent, selector: "app-aggregation-field", inputs: { aggregation: "aggregation", contentTemplate: "contentTemplate" }, host: { properties: { "class": "'aggregation-field' + ' aggregation-field__fieldConfig?.render?.type' " } }, providers: [
18607
+ {
18608
+ provide: NG_VALUE_ACCESSOR,
18609
+ useExisting: forwardRef(() => AggregationFieldComponent),
18610
+ multi: true,
18611
+ },
18612
+ {
18613
+ provide: NG_VALIDATORS,
18614
+ useExisting: forwardRef(() => AggregationFieldComponent),
18615
+ multi: true,
18616
+ },
18617
+ ], usesInheritance: true, ngImport: i0, template: '<ng-container #dynamicContainer></ng-container>', isInline: true, styles: [""], encapsulation: i0.ViewEncapsulation.None });
18618
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AggregationFieldComponent, decorators: [{
18619
+ type: Component,
18620
+ args: [{
18621
+ selector: 'app-aggregation-field',
18622
+ template: '<ng-container #dynamicContainer></ng-container>',
18623
+ styles: [''],
18624
+ encapsulation: ViewEncapsulation.None,
18625
+ providers: [
18626
+ {
18627
+ provide: NG_VALUE_ACCESSOR,
18628
+ useExisting: forwardRef(() => AggregationFieldComponent),
18629
+ multi: true,
18630
+ },
18631
+ {
18632
+ provide: NG_VALIDATORS,
18633
+ useExisting: forwardRef(() => AggregationFieldComponent),
18634
+ multi: true,
18635
+ },
18636
+ ],
18637
+ host: {
18638
+ '[class]': "'aggregation-field' + ' aggregation-field__fieldConfig?.render?.type' ",
18639
+ },
18640
+ }]
18641
+ }], propDecorators: { aggregation: [{
18642
+ type: Input
18643
+ }], contentTemplate: [{
18644
+ type: Input
18645
+ }] } });
18646
+
18647
+ class CustomFieldComponent extends BaseField {
18648
+ constructor() {
18649
+ super(...arguments);
18650
+ this.handlers = {
18651
+ activeUser: this._prepareField.bind(this),
18652
+ aggregationGroup: this._prepareField.bind(this)
18653
+ };
18654
+ }
18655
+ ngOnInit() {
18656
+ var _a, _b;
18657
+ const componentType = (_b = (_a = this.fieldConfig) === null || _a === void 0 ? void 0 : _a.render) === null || _b === void 0 ? void 0 : _b.type;
18658
+ if (componentType) {
18659
+ this._componentRef = this.dynamicComponent.renderComponent(componentType, this.container);
18660
+ this._prepareValueAccessor();
18661
+ this._prepareComponent(componentType);
18662
+ }
18663
+ }
18664
+ _prepareComponent(type) {
18665
+ var _a, _b;
18666
+ (_b = (_a = this.handlers)[type]) === null || _b === void 0 ? void 0 : _b.call(_a);
18667
+ }
18668
+ _prepareField() {
18669
+ const instance = this._componentRef.instance;
18670
+ instance.field = this.fieldConfig;
18671
+ instance.aggregations = this.aggregations;
18672
+ }
18673
+ }
18674
+ CustomFieldComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CustomFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
18675
+ CustomFieldComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: CustomFieldComponent, selector: "app-custom-field", inputs: { aggregations: "aggregations" }, host: { properties: { "class": "'custom-field' + ' custom-field__fieldConfig?.render?.type' " } }, providers: [
18676
+ {
18677
+ provide: NG_VALUE_ACCESSOR,
18678
+ useExisting: forwardRef(() => CustomFieldComponent),
18679
+ multi: true
18680
+ },
18681
+ {
18682
+ provide: NG_VALIDATORS,
18683
+ useExisting: forwardRef(() => CustomFieldComponent),
18684
+ multi: true
18685
+ }
18686
+ ], usesInheritance: true, ngImport: i0, template: "<field-header *ngIf=\"fieldConfig.label && !fieldConfig.render?.options?.hideLabel\" class=\"predicate-field__label\">{{\r\n\tfieldConfig.label | translate\r\n}}</field-header>\r\n\r\n<ng-container #dynamicContainer></ng-container>\r\n", styles: [".custom-field{display:var(--cf-display, block);padding-inline:var(--cf-padding-inline, var(--ff-padding-inline, .5rem));padding-block:var(--cf-padding-block, var(--ff-padding-block, 0));max-width:100%}\n"], components: [{ type: FieldHeaderComponent, selector: "field-header" }], directives: [{ type: i4$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "translate": i1.TranslatePipe }, encapsulation: i0.ViewEncapsulation.None });
18687
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CustomFieldComponent, decorators: [{
18688
+ type: Component,
18689
+ args: [{
18690
+ selector: 'app-custom-field',
18691
+ templateUrl: './custom-field.component.html',
18692
+ styleUrls: ['./custom-field.component.scss'],
18693
+ encapsulation: ViewEncapsulation.None,
18694
+ providers: [
18695
+ {
18696
+ provide: NG_VALUE_ACCESSOR,
18697
+ useExisting: forwardRef(() => CustomFieldComponent),
18698
+ multi: true
18699
+ },
18700
+ {
18701
+ provide: NG_VALIDATORS,
18702
+ useExisting: forwardRef(() => CustomFieldComponent),
18703
+ multi: true
18704
+ }
18705
+ ],
18706
+ host: {
18707
+ '[class]': "'custom-field' + ' custom-field__fieldConfig?.render?.type' "
18708
+ }
18709
+ }]
18710
+ }], propDecorators: { aggregations: [{
18711
+ type: Input
18712
+ }] } });
18713
+
18714
+ class FiltersByRolesPipe {
18715
+ constructor(_nuxeoService, _rolesService) {
18716
+ this._nuxeoService = _nuxeoService;
18717
+ this._rolesService = _rolesService;
18718
+ }
18719
+ transform(items) {
18720
+ if (!items) {
18721
+ return items;
18722
+ }
18723
+ return items.filter((item) => {
18724
+ var _a, _b, _c, _d, _e;
18725
+ if (!Array.isArray((_a = item.config) === null || _a === void 0 ? void 0 : _a.roles) || ((_b = item.config) === null || _b === void 0 ? void 0 : _b.roles.length) === 0) {
18726
+ return true;
18727
+ }
18728
+ const user = (_d = (_c = this._nuxeoService) === null || _c === void 0 ? void 0 : _c.nuxeoClient) === null || _d === void 0 ? void 0 : _d.user;
18729
+ return this._rolesService.isUserInRole(user, (_e = item.config) === null || _e === void 0 ? void 0 : _e.roles);
18730
+ });
18731
+ }
18732
+ }
18733
+ FiltersByRolesPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FiltersByRolesPipe, deps: [{ token: NuxeoService }, { token: RolesService }], target: i0.ɵɵFactoryTarget.Pipe });
18734
+ FiltersByRolesPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FiltersByRolesPipe, name: "filterByRoles" });
18735
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FiltersByRolesPipe, decorators: [{
18761
18736
  type: Pipe,
18762
18737
  args: [{
18763
- name: 'checkCondition'
18738
+ name: 'filterByRoles'
18764
18739
  }]
18765
- }], ctorParameters: function () { return [{ type: NuxeoService }]; } });
18740
+ }], ctorParameters: function () { return [{ type: NuxeoService }, { type: RolesService }]; } });
18766
18741
 
18767
18742
  class FiltersPanelComponent extends BaseFiltersPanel {
18768
- constructor(_translateService) {
18743
+ constructor(_translateService, nuxeoService) {
18769
18744
  super();
18770
18745
  this._translateService = _translateService;
18746
+ this.nuxeoService = nuxeoService;
18771
18747
  this.currentLang = this._translateService.currentLang;
18772
18748
  this.direction$ = this._translateService.onLangChange.pipe(startWith({ lang: this._translateService.currentLang }), map((lang) => {
18773
18749
  this.currentLang = lang.lang;
@@ -18778,6 +18754,7 @@ class FiltersPanelComponent extends BaseFiltersPanel {
18778
18754
  this.filterChanged = new EventEmitter();
18779
18755
  this.fieldTypes = FIELD_TYPE;
18780
18756
  this.FieldRenderType = AGGREGATION_FIELD_TYPES;
18757
+ this.visibleFields = {};
18781
18758
  this.formGroup = new FormGroup({});
18782
18759
  }
18783
18760
  set fields(vals) {
@@ -18791,6 +18768,9 @@ class FiltersPanelComponent extends BaseFiltersPanel {
18791
18768
  }
18792
18769
  set activeQuery(obj) {
18793
18770
  this._activeQuerySub.next(obj);
18771
+ if (obj) {
18772
+ this._evaluateConditions();
18773
+ }
18794
18774
  }
18795
18775
  trackByFieldKey(_, field) {
18796
18776
  var _a;
@@ -18803,6 +18783,13 @@ class FiltersPanelComponent extends BaseFiltersPanel {
18803
18783
  ngOnInit() {
18804
18784
  this._handleFormGroupChanges();
18805
18785
  this._handelActiveQueryChange();
18786
+ this._evaluateConditions();
18787
+ }
18788
+ ngOnChanges(changes) {
18789
+ var _a, _b;
18790
+ if (!((_a = changes === null || changes === void 0 ? void 0 : changes.fields) === null || _a === void 0 ? void 0 : _a.firstChange) || !((_b = changes === null || changes === void 0 ? void 0 : changes.aggregations) === null || _b === void 0 ? void 0 : _b.firstChange)) {
18791
+ this._evaluateConditions();
18792
+ }
18806
18793
  }
18807
18794
  resetFilters() {
18808
18795
  this.formGroup.reset({});
@@ -18812,6 +18799,7 @@ class FiltersPanelComponent extends BaseFiltersPanel {
18812
18799
  return items.sort(({ config: { order: o1 } }, { config: { order: o2 } }) => (o1 !== null && o1 !== void 0 ? o1 : _defaultOrder) - (o2 !== null && o2 !== void 0 ? o2 : _defaultOrder));
18813
18800
  }
18814
18801
  _initFormGroup() {
18802
+ this.visibleFields = {};
18815
18803
  this._removeControls();
18816
18804
  this._prepareFiltersForm();
18817
18805
  }
@@ -18835,7 +18823,10 @@ class FiltersPanelComponent extends BaseFiltersPanel {
18835
18823
  }
18836
18824
  _handleFormGroupChanges() {
18837
18825
  this.formGroup.valueChanges
18838
- .pipe(debounceTime(300), map((data) => removeEmptyKeys(data)), distinctUntilChanged((a, b) => ___default.isEqual(a, b)), takeUntil(this.destroy$))
18826
+ .pipe(debounceTime(300), map((formValue) => {
18827
+ const data = this._evaluateConditions(formValue);
18828
+ return removeEmptyKeys(data);
18829
+ }), distinctUntilChanged((a, b) => ___default.isEqual(a, b)), takeUntil(this.destroy$))
18839
18830
  .subscribe((res) => {
18840
18831
  this.filterChanged.emit(res);
18841
18832
  });
@@ -18852,9 +18843,38 @@ class FiltersPanelComponent extends BaseFiltersPanel {
18852
18843
  this._patchActiveQuery(res);
18853
18844
  });
18854
18845
  }
18846
+ _evaluateConditions(values = this.formGroup.getRawValue()) {
18847
+ this.visibleFields = {};
18848
+ this.fields.forEach((field) => {
18849
+ var _a;
18850
+ const fieldKey = field.config.fieldKey;
18851
+ const condition = (_a = field.config) === null || _a === void 0 ? void 0 : _a.condition;
18852
+ try {
18853
+ const isVisible = !condition ||
18854
+ Evaluator.evaluate(condition, ___default.cloneDeep({
18855
+ aggregations: this.aggregations,
18856
+ language: this.currentLang,
18857
+ user: this.nuxeoService.nuxeoClient.user,
18858
+ values: this.formGroup.getRawValue()
18859
+ }));
18860
+ this.visibleFields[fieldKey] = isVisible;
18861
+ if (!isVisible) {
18862
+ const control = this.formGroup.get(fieldKey);
18863
+ if (!!(control === null || control === void 0 ? void 0 : control.value)) {
18864
+ control.reset();
18865
+ control.updateValueAndValidity({ emitEvent: false });
18866
+ }
18867
+ }
18868
+ }
18869
+ catch (e) {
18870
+ console.error(`Error evaluating condition for field ${field.config.fieldKey}:`, e);
18871
+ }
18872
+ });
18873
+ return this.formGroup.value;
18874
+ }
18855
18875
  }
18856
- FiltersPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FiltersPanelComponent, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
18857
- FiltersPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: FiltersPanelComponent, selector: "app-filters-panel", inputs: { aggregations: "aggregations", fields: "fields", activeQuery: "activeQuery" }, outputs: { filterChanged: "filterChanged" }, usesInheritance: true, ngImport: i0, template: "<div [formGroup]=\"formGroup\" class=\"filters-panel\" [dir]=\"direction$ | async\">\r\n\t<div class=\"reset-filter flex reset-container\">\r\n\t\t<button mat-stroked-button class=\"w-full\" (click)=\"resetFilters()\" [disabled]=\"!hasValues\">\r\n\t\t\t{{ 'BUTTONS.clearFilter' | translate }}\r\n\t\t</button>\r\n\t</div>\r\n\t<ng-container *ngFor=\"let field of fields | filterByRoles; trackBy: trackByFieldKey\">\r\n\t\t<ng-container *permission=\"{ name: field.config?.permission }\">\r\n\t\t\t<ng-container *ngIf=\"field.config?.condition | checkCondition: aggregations : currentLang \">\r\n\t\t\t\t<app-predicate-field\r\n\t\t\t\t\t*ngIf=\"field.type == fieldTypes.predicate\"\r\n\t\t\t\t\t[fieldConfig]=\"field.config\"\r\n\t\t\t\t\t[formControlName]=\"field.config.fieldKey\"\r\n\t\t\t\t></app-predicate-field>\r\n\t\t\t\t<app-aggregation-field\r\n\t\t\t\t\t*ngIf=\"field.type == fieldTypes.aggregation && !!aggregations\"\r\n\t\t\t\t\t[formControlName]=\"field.config.fieldKey\"\r\n\t\t\t\t\t[fieldConfig]=\"field.config\"\r\n\t\t\t\t\t[aggregation]=\"aggregations[field.config.aggregation]\"\r\n\t\t\t\t\t[contentTemplate]=\"getContentTemplate(field.config.render.type)\"\r\n\t\t\t\t></app-aggregation-field>\r\n\t\t\t\t<app-custom-field\r\n\t\t\t\t\t*ngIf=\"field.type == fieldTypes.custom\"\r\n\t\t\t\t\t[fieldConfig]=\"field.config\"\r\n\t\t\t\t\t[formControlName]=\"field.config.fieldKey\"\r\n\t\t\t\t\t[aggregations]=\"aggregations\"\r\n\t\t\t\t></app-custom-field>\r\n\t\t\t</ng-container>\r\n\t\t</ng-container>\r\n\t</ng-container>\r\n</div>\r\n", styles: [".filters-panel{display:var(--filters-panel-display, flex);flex-direction:var(--filters-panel-direction, column);grid-gap:var(--filters-panel-gap, .5rem);gap:var(--filters-panel-gap, .5rem);flex-wrap:var(--filters-panel-wrap, wrap);max-width:100%;box-sizing:border-box}.aggregation-field{padding-inline:var(--af-padding-inline, var(--ff-padding-inline, .5rem));padding-block:var(--af-padding-block, var(--ff-padding-block, 0));max-width:100%}.reset-container{padding:.5rem;position:sticky;top:-8px;z-index:4;background:var(--reset-filter-panel-bg, #fff)}.reset-container button.mat-button-base{background-color:var(--reset-filter-panel-btn-bg, transparent);border-color:var(--reset-filter-panel-btn-bg, #e2e8f0);color:var(--reset-filter-panel-btn-color, currentColor)}\n"], components: [{ type: i1$c.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: PredicateFieldComponent, selector: "app-predicate-field" }, { type: AggregationFieldComponent, selector: "app-aggregation-field", inputs: ["aggregation", "contentTemplate"] }, { type: CustomFieldComponent, selector: "app-custom-field", inputs: ["aggregations"] }], directives: [{ type: i2$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { type: i4$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: PermissionsDirective, selector: "[permission]", inputs: ["permission"] }, { type: i4$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2$4.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }], pipes: { "async": i4$1.AsyncPipe, "translate": i1.TranslatePipe, "filterByRoles": FiltersByRolesPipe, "checkCondition": CheckConditionPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
18876
+ FiltersPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FiltersPanelComponent, deps: [{ token: i1.TranslateService }, { token: NuxeoService }], target: i0.ɵɵFactoryTarget.Component });
18877
+ FiltersPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: FiltersPanelComponent, selector: "app-filters-panel", inputs: { aggregations: "aggregations", fields: "fields", activeQuery: "activeQuery" }, outputs: { filterChanged: "filterChanged" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div [formGroup]=\"formGroup\" class=\"filters-panel\" [dir]=\"direction$ | async\">\r\n\t<div class=\"reset-filter flex reset-container\">\r\n\t\t<button mat-stroked-button class=\"w-full\" (click)=\"resetFilters()\" [disabled]=\"!hasValues\">\r\n\t\t\t{{ 'BUTTONS.clearFilter' | translate }}\r\n\t\t</button>\r\n\t</div>\r\n\t<ng-container *ngFor=\"let field of fields | filterByRoles; trackBy: trackByFieldKey\">\r\n\t\t<ng-container *permission=\"{ name: field.config?.permission }\">\r\n\t\t\t<ng-container *ngIf=\"visibleFields[field.config.fieldKey]\">\r\n\t\t\t\t<app-predicate-field\r\n\t\t\t\t\t*ngIf=\"field.type == fieldTypes.predicate\"\r\n\t\t\t\t\t[fieldConfig]=\"field.config\"\r\n\t\t\t\t\t[formControlName]=\"field.config.fieldKey\"\r\n\t\t\t\t></app-predicate-field>\r\n\t\t\t\t<app-aggregation-field\r\n\t\t\t\t\t*ngIf=\"field.type == fieldTypes.aggregation && !!aggregations\"\r\n\t\t\t\t\t[formControlName]=\"field.config.fieldKey\"\r\n\t\t\t\t\t[fieldConfig]=\"field.config\"\r\n\t\t\t\t\t[aggregation]=\"aggregations[field.config.aggregation]\"\r\n\t\t\t\t\t[contentTemplate]=\"getContentTemplate(field.config.render.type)\"\r\n\t\t\t\t></app-aggregation-field>\r\n\t\t\t\t<app-custom-field\r\n\t\t\t\t\t*ngIf=\"field.type == fieldTypes.custom\"\r\n\t\t\t\t\t[fieldConfig]=\"field.config\"\r\n\t\t\t\t\t[formControlName]=\"field.config.fieldKey\"\r\n\t\t\t\t\t[aggregations]=\"aggregations\"\r\n\t\t\t\t></app-custom-field>\r\n\t\t\t</ng-container>\r\n\t\t</ng-container>\r\n\t</ng-container>\r\n</div>\r\n", styles: [".filters-panel{display:var(--filters-panel-display, flex);flex-direction:var(--filters-panel-direction, column);grid-gap:var(--filters-panel-gap, .5rem);gap:var(--filters-panel-gap, .5rem);flex-wrap:var(--filters-panel-wrap, wrap);max-width:100%;box-sizing:border-box}.aggregation-field{padding-inline:var(--af-padding-inline, var(--ff-padding-inline, .5rem));padding-block:var(--af-padding-block, var(--ff-padding-block, 0));max-width:100%}.reset-container{padding:.5rem;position:sticky;top:-8px;z-index:4;background:var(--reset-filter-panel-bg, #fff)}.reset-container button.mat-button-base{background-color:var(--reset-filter-panel-btn-bg, transparent);border-color:var(--reset-filter-panel-btn-bg, #e2e8f0);color:var(--reset-filter-panel-btn-color, currentColor)}\n"], components: [{ type: i1$c.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: PredicateFieldComponent, selector: "app-predicate-field" }, { type: AggregationFieldComponent, selector: "app-aggregation-field", inputs: ["aggregation", "contentTemplate"] }, { type: CustomFieldComponent, selector: "app-custom-field", inputs: ["aggregations"] }], directives: [{ type: i2$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { type: i4$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: PermissionsDirective, selector: "[permission]", inputs: ["permission"] }, { type: i4$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2$4.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }], pipes: { "async": i4$1.AsyncPipe, "translate": i1.TranslatePipe, "filterByRoles": FiltersByRolesPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
18858
18878
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FiltersPanelComponent, decorators: [{
18859
18879
  type: Component,
18860
18880
  args: [{
@@ -18863,7 +18883,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
18863
18883
  styleUrls: ['./filters-panel.component.scss'],
18864
18884
  changeDetection: ChangeDetectionStrategy.OnPush
18865
18885
  }]
18866
- }], ctorParameters: function () { return [{ type: i1.TranslateService }]; }, propDecorators: { aggregations: [{
18886
+ }], ctorParameters: function () { return [{ type: i1.TranslateService }, { type: NuxeoService }]; }, propDecorators: { aggregations: [{
18867
18887
  type: Input
18868
18888
  }], fields: [{
18869
18889
  type: Input
@@ -18951,6 +18971,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
18951
18971
  }]
18952
18972
  }] });
18953
18973
 
18974
+ class CheckConditionPipe {
18975
+ constructor(nuxeoService) {
18976
+ this.nuxeoService = nuxeoService;
18977
+ this.user = nuxeoService.nuxeoClient.user;
18978
+ }
18979
+ transform(condition, aggregations, language, filterValues) {
18980
+ if (!condition) {
18981
+ return true;
18982
+ }
18983
+ try {
18984
+ return Evaluator.evaluate(condition, ___default.cloneDeep({ aggregations, language, user: this.user, values: filterValues }));
18985
+ }
18986
+ catch (error) {
18987
+ console.error({ error });
18988
+ return false;
18989
+ }
18990
+ }
18991
+ }
18992
+ CheckConditionPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CheckConditionPipe, deps: [{ token: NuxeoService }], target: i0.ɵɵFactoryTarget.Pipe });
18993
+ CheckConditionPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CheckConditionPipe, name: "checkCondition" });
18994
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CheckConditionPipe, decorators: [{
18995
+ type: Pipe,
18996
+ args: [{
18997
+ name: 'checkCondition'
18998
+ }]
18999
+ }], ctorParameters: function () { return [{ type: NuxeoService }]; } });
19000
+
18954
19001
  class AggregationGroupComponent extends BaseCustomField {
18955
19002
  constructor() {
18956
19003
  super(...arguments);
@@ -42340,6 +42387,13 @@ class ReportConfigMapperService {
42340
42387
  const _colors = [...((config === null || config === void 0 ? void 0 : config.colors) || []), ...getColors()];
42341
42388
  return Object.assign(Object.assign({}, config), { colors: _colors, chart: chart });
42342
42389
  }
42390
+ /**
42391
+ * Prepares a custom chart configuration
42392
+ * @param config
42393
+ */
42394
+ prepareCustomConfig(config) {
42395
+ return config;
42396
+ }
42343
42397
  /**
42344
42398
  * Prepares a digit chart configuration
42345
42399
  * @param config The digit chart definition
@@ -42384,6 +42438,136 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
42384
42438
  }]
42385
42439
  }], ctorParameters: function () { return [{ type: ChartPluginsRegistry }]; } });
42386
42440
 
42441
+ class CustomReportsRegistry {
42442
+ constructor(_factoryResolver) {
42443
+ this._factoryResolver = _factoryResolver;
42444
+ this._components = new Map();
42445
+ }
42446
+ /**
42447
+ * Register a component with the registry
42448
+ * @param config Component configuration
42449
+ */
42450
+ registerComponent(config) {
42451
+ if (!config.type || !config.component) {
42452
+ throw new Error('Invalid component configuration: type and component are required');
42453
+ }
42454
+ if (this._components.has(config.type)) {
42455
+ console.warn(`Component with type '${config.type}' is already registered. Overwriting...`);
42456
+ }
42457
+ this._components.set(config.type, config);
42458
+ }
42459
+ /**
42460
+ * Register multiple components at once
42461
+ * @param configs Array of component configurations
42462
+ */
42463
+ registerComponents(configs) {
42464
+ configs.forEach((config) => this.registerComponent(config));
42465
+ }
42466
+ /**
42467
+ * Render a component by type into a ViewContainerRef
42468
+ * @param type Component type identifier
42469
+ * @param vcr ViewContainerRef to render into
42470
+ */
42471
+ renderComponent(type, vcr) {
42472
+ if (!this._components.has(type)) {
42473
+ throw new Error(`Unknown component with type: '${type}'`);
42474
+ }
42475
+ const config = this._components.get(type);
42476
+ return this.loadComponent(config, vcr);
42477
+ }
42478
+ /**
42479
+ * Load a component into a ViewContainerRef
42480
+ * @param config Component configuration
42481
+ * @param vcr ViewContainerRef to render into
42482
+ */
42483
+ loadComponent(config, vcr) {
42484
+ const componentFactory = this._factoryResolver.resolveComponentFactory(config.component);
42485
+ return vcr.createComponent(componentFactory);
42486
+ }
42487
+ /**
42488
+ * Check if a component is registered
42489
+ * @param type Component type identifier
42490
+ */
42491
+ hasComponent(type) {
42492
+ return this._components.has(type);
42493
+ }
42494
+ /**
42495
+ * Get component configuration by type
42496
+ * @param type Component type identifier
42497
+ */
42498
+ getComponent(type) {
42499
+ return this._components.get(type);
42500
+ }
42501
+ /**
42502
+ * Get all registered component types
42503
+ */
42504
+ getComponentTypes() {
42505
+ return Array.from(this._components.keys());
42506
+ }
42507
+ /**
42508
+ * Get all registered components
42509
+ */
42510
+ getAllComponents() {
42511
+ return Array.from(this._components.values());
42512
+ }
42513
+ /**
42514
+ * Get components by category
42515
+ * @param category Category to filter by
42516
+ */
42517
+ getComponentsByCategory(category) {
42518
+ return Array.from(this._components.values()).filter((config) => config.category === category);
42519
+ }
42520
+ /**
42521
+ * Get all unique categories
42522
+ */
42523
+ getCategories() {
42524
+ const categories = Array.from(this._components.values())
42525
+ .map((config) => config.category)
42526
+ .filter((category) => !!category);
42527
+ return [...new Set(categories)];
42528
+ }
42529
+ /**
42530
+ * Unregister a component
42531
+ * @param type Component type identifier
42532
+ */
42533
+ unregisterComponent(type) {
42534
+ return this._components.delete(type);
42535
+ }
42536
+ /**
42537
+ * Clear all registered components
42538
+ */
42539
+ clearComponents() {
42540
+ this._components.clear();
42541
+ }
42542
+ /**
42543
+ * Get the total number of registered components
42544
+ */
42545
+ getComponentCount() {
42546
+ return this._components.size;
42547
+ }
42548
+ /**
42549
+ * Search components by name or type
42550
+ * @param searchTerm Search term
42551
+ */
42552
+ searchComponents(searchTerm) {
42553
+ const term = searchTerm.toLowerCase();
42554
+ return Array.from(this._components.values()).filter((config) => {
42555
+ var _a, _b;
42556
+ return config.type.toLowerCase().includes(term) ||
42557
+ ((_a = config.name) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes(term)) ||
42558
+ ((_b = config.description) === null || _b === void 0 ? void 0 : _b.toLowerCase().includes(term));
42559
+ });
42560
+ }
42561
+ }
42562
+ CustomReportsRegistry.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CustomReportsRegistry, deps: [{ token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Injectable });
42563
+ CustomReportsRegistry.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CustomReportsRegistry, providedIn: 'root' });
42564
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CustomReportsRegistry, decorators: [{
42565
+ type: Injectable,
42566
+ args: [{
42567
+ providedIn: 'root'
42568
+ }]
42569
+ }], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }]; } });
42570
+
42387
42571
  class DigitChartComponent extends BaseChart {
42388
42572
  constructor() {
42389
42573
  super(...arguments);
@@ -42470,7 +42654,7 @@ class GraphChartComponent extends BaseChart {
42470
42654
  }
42471
42655
  }
42472
42656
  GraphChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: GraphChartComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
42473
- GraphChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: GraphChartComponent, selector: "app-graph-chart", usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"report$ | async as report\">\r\n\t<div class=\"chart-legends\"></div>\r\n\t<app-chart\r\n\t\t[type]=\"report.config.type\"\r\n\t\t[data]=\"report.data\"\r\n\t\t[options]=\"report.config?.options\"\r\n\t\t[plugins]=\"report.config?.plugins\"\r\n\t\t[responsive]=\"true\"\r\n\t\t(onReady)=\"chartReady($event)\"\r\n\t\tclass=\"app-chart\"\r\n\t></app-chart>\r\n</ng-container>\r\n", styles: [":host{--chart-height: var(--graph-chart-height, 300px);display:var(--graph-chart-display, flex);flex-direction:var(--graph-chart-direction, row);justify-content:var(--graph-chart-justify-content, between);align-items:var(--graph-chart-align-items, center);grid-gap:var(--graph-chart-gap, .5rem);gap:var(--graph-chart-gap, .5rem)}.app-chart{min-width:var(--app-chart-min-width, 0);min-height:var(--app-chart-min-height, 0);height:var(--app-chart-height, auto);width:var(--app-chart-width, 100%);padding:var(--app-chart-padding, 1rem);display:flex;align-items:center;justify-content:center;align-self:stretch}@media print{.app-chart ::ng-deep canvas{max-width:100%!important}}::ng-deep .chart-legends{max-height:var(--chart-legends-height, var(--chart-height));min-width:var(--chart-legends-width, 0);overflow:auto;font-size:1rem;text-align:start;display:flex;flex-direction:column;grid-gap:.2rem;gap:.2rem;padding-block:.5rem}::ng-deep .chart-legends:empty{--chart-legends-width: 0;display:none}::ng-deep .chart-legends.has-items{--chart-legends-width: 200px}::ng-deep .chart-legends__legend{display:flex;align-items:baseline;-webkit-user-select:none;user-select:none;cursor:default}::ng-deep .chart-legends__box{width:var(--chart-legends-box-width, 8px);height:var(--chart-legends-box-height, 8px);border-radius:var(--chart-legends-radius, 50%);margin-inline:var(--chart-legends-box-inline, 0 .5rem);display:inline-block;flex-shrink:0}\n"], components: [{ type: ChartComponent, selector: "app-chart", inputs: ["data", "options"] }], directives: [{ type: i4$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i4$1.AsyncPipe } });
42657
+ GraphChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: GraphChartComponent, selector: "app-graph-chart", usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"report$ | async as report\">\r\n\t<div class=\"chart-legends\"></div>\r\n\t<app-chart\r\n\t\t[type]=\"report.config.type\"\r\n\t\t[data]=\"report.data\"\r\n\t\t[options]=\"report.config?.options\"\r\n\t\t[plugins]=\"report.config?.plugins\"\r\n\t\t[responsive]=\"true\"\r\n\t\t(onReady)=\"chartReady($event)\"\r\n\t\tclass=\"app-chart\"\r\n\t></app-chart>\r\n</ng-container>\r\n", styles: [":host{--chart-height: var(--graph-chart-height, 330px);display:var(--graph-chart-display, flex);flex-direction:var(--graph-chart-direction, row);justify-content:var(--graph-chart-justify-content, between);align-items:var(--graph-chart-align-items, center);grid-gap:var(--graph-chart-gap, .5rem);gap:var(--graph-chart-gap, .5rem)}.app-chart{min-width:var(--app-chart-min-width, 0);min-height:var(--app-chart-min-height, 0);height:var(--app-chart-height, auto);width:var(--app-chart-width, 100%);padding:var(--app-chart-padding, 1rem);display:flex;align-items:center;justify-content:center;align-self:stretch}@media print{.app-chart ::ng-deep canvas{max-width:100%!important}}::ng-deep .chart-legends{max-height:var(--chart-legends-height, var(--chart-height));min-width:var(--chart-legends-width, 0);overflow:auto;font-size:1rem;text-align:start;display:flex;flex-direction:column;grid-gap:.2rem;gap:.2rem;padding-block:.5rem}::ng-deep .chart-legends:empty{--chart-legends-width: 0;display:none}::ng-deep .chart-legends.has-items{--chart-legends-width: 200px}::ng-deep .chart-legends__legend{display:flex;align-items:baseline;-webkit-user-select:none;user-select:none;cursor:default}::ng-deep .chart-legends__box{width:var(--chart-legends-box-width, 8px);height:var(--chart-legends-box-height, 8px);border-radius:var(--chart-legends-radius, 50%);margin-inline:var(--chart-legends-box-inline, 0 .5rem);display:inline-block;flex-shrink:0}\n"], components: [{ type: ChartComponent, selector: "app-chart", inputs: ["data", "options"] }], directives: [{ type: i4$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i4$1.AsyncPipe } });
42474
42658
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: GraphChartComponent, decorators: [{
42475
42659
  type: Component,
42476
42660
  args: [{
@@ -42491,6 +42675,7 @@ const REPORT_MODE = {
42491
42675
  graph: 'graph',
42492
42676
  digit: 'digit',
42493
42677
  dynamicLine: 'dynamicLine',
42678
+ custom: 'custom',
42494
42679
  };
42495
42680
 
42496
42681
  const TIME_GROUPS = {
@@ -42538,7 +42723,8 @@ class BaseReport extends DestroySubject {
42538
42723
  const mappers = {
42539
42724
  [REPORT_MODE.graph]: this._configMapperService.prepareGraphConfig,
42540
42725
  [REPORT_MODE.digit]: this._configMapperService.prepareDigitConfig,
42541
- [REPORT_MODE.dynamicLine]: this._configMapperService.prepareGraphLineConfig
42726
+ [REPORT_MODE.dynamicLine]: this._configMapperService.prepareGraphLineConfig,
42727
+ [REPORT_MODE.custom]: this._configMapperService.prepareCustomConfig
42542
42728
  };
42543
42729
  return mappers[obj.mode].call(this._configMapperService, obj);
42544
42730
  }
@@ -43040,6 +43226,87 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
43040
43226
  args: ['graphChart']
43041
43227
  }] } });
43042
43228
 
43229
+ class BaseCustomReport extends DestroySubject {
43230
+ constructor() {
43231
+ super(...arguments);
43232
+ this.direction = 'rtl';
43233
+ this._criteriaSub = new ReplaySubject(null);
43234
+ this.criteria$ = this._criteriaSub.asObservable();
43235
+ this._configSub = new BehaviorSubject(null);
43236
+ this.config$ = this._configSub.asObservable();
43237
+ }
43238
+ set criteria(value) {
43239
+ this._criteria = ___default.cloneDeep(value);
43240
+ this._criteriaSub.next(this._criteria);
43241
+ }
43242
+ set config(obj) {
43243
+ if (obj) {
43244
+ this._configSub.next(obj);
43245
+ }
43246
+ }
43247
+ get config() {
43248
+ return this._configSub.getValue();
43249
+ }
43250
+ }
43251
+ BaseCustomReport.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BaseCustomReport, deps: null, target: i0.ɵɵFactoryTarget.Directive });
43252
+ BaseCustomReport.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.17", type: BaseCustomReport, inputs: { direction: "direction", data: "data", criteria: "criteria", config: "config" }, usesInheritance: true, ngImport: i0 });
43253
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: BaseCustomReport, decorators: [{
43254
+ type: Directive
43255
+ }], propDecorators: { direction: [{
43256
+ type: Input
43257
+ }], data: [{
43258
+ type: Input
43259
+ }], criteria: [{
43260
+ type: Input
43261
+ }], config: [{
43262
+ type: Input
43263
+ }] } });
43264
+
43265
+ class CustomReportComponent extends BaseReport {
43266
+ constructor() {
43267
+ super(...arguments);
43268
+ this._registeredComponents = this.injector.get(CustomReportsRegistry);
43269
+ }
43270
+ ngOnInit() {
43271
+ /* const componentType = this._registeredComponents.getComponent(this.reportDefinition.type);
43272
+ if (componentType) {
43273
+ this._componentRef = this.dynamicComponent.renderComponent(componentType, this.container);
43274
+ this._prepareValueAccessor();
43275
+ this._prepareComponent(componentType);
43276
+ }*/
43277
+ }
43278
+ ngOnChanges(changes) {
43279
+ if (!this._componentRef) {
43280
+ return;
43281
+ }
43282
+ Object.keys(changes).forEach((key) => {
43283
+ this._componentRef.instance[key] = changes[key].currentValue;
43284
+ });
43285
+ this._componentRef.changeDetectorRef.markForCheck();
43286
+ }
43287
+ ngOnDestroy() {
43288
+ if (this._componentRef) {
43289
+ this._componentRef.destroy();
43290
+ }
43291
+ }
43292
+ }
43293
+ CustomReportComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CustomReportComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
43294
+ CustomReportComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: CustomReportComponent, selector: "app-custom-report", host: { classAttribute: "custom-report flex flex-col flex-grow" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["dynamicContainer"], descendants: true, read: ViewContainerRef, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "\r\n<ng-container #dynamicContainer></ng-container>\r\n", styles: [""] });
43295
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: CustomReportComponent, decorators: [{
43296
+ type: Component,
43297
+ args: [{
43298
+ selector: 'app-custom-report',
43299
+ templateUrl: './custom-report.component.html',
43300
+ styleUrls: ['./custom-report.component.scss'],
43301
+ host: {
43302
+ class: 'custom-report flex flex-col flex-grow'
43303
+ }
43304
+ }]
43305
+ }], propDecorators: { container: [{
43306
+ type: ViewChild,
43307
+ args: ['dynamicContainer', { read: ViewContainerRef, static: true }]
43308
+ }] } });
43309
+
43043
43310
  function mapToNdfTableConfig(report, details) {
43044
43311
  var _a, _b, _c, _d, _e;
43045
43312
  const _request = report.request;
@@ -43422,7 +43689,7 @@ NdfReportsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", versio
43422
43689
  DynamicTimelineReportComponent,
43423
43690
  TimeGroupSelectorComponent,
43424
43691
  GraphDialogComponent,
43425
- TimelineDialogComponent, ScrollableDivDirective, GraphChartComponent, DigitChartComponent, ReportActionsComponent], imports: [CommonModule,
43692
+ TimelineDialogComponent, ScrollableDivDirective, GraphChartComponent, DigitChartComponent, ReportActionsComponent, CustomReportComponent], imports: [CommonModule,
43426
43693
  TranslateModule,
43427
43694
  MatMenuModule,
43428
43695
  MatIconModule,
@@ -43467,7 +43734,7 @@ NdfReportsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", versio
43467
43734
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NdfReportsModule, decorators: [{
43468
43735
  type: NgModule,
43469
43736
  args: [{
43470
- declarations: [CONTAINERS, COMPONENTS, DIRECTIVES, CHARTS, ReportActionsComponent],
43737
+ declarations: [CONTAINERS, COMPONENTS, DIRECTIVES, CHARTS, ReportActionsComponent, CustomReportComponent],
43471
43738
  imports: [
43472
43739
  CommonModule,
43473
43740
  TranslateModule,
@@ -44760,7 +45027,7 @@ const REPORTS_DATA = {
44760
45027
  {
44761
45028
  aggregation: 'RetentionInfo_activeRetentionExpireDate_agg',
44762
45029
  propertyPath: 'aggregations.RetentionInfo_activeRetentionExpireDate_agg.buckets',
44763
- transformer: 'removeTime',
45030
+ transformer: 'timeFormat',
44764
45031
  },
44765
45032
  ],
44766
45033
  chart: {
@@ -45540,5 +45807,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
45540
45807
  * Generated bundle index. Do not edit.
45541
45808
  */
45542
45809
 
45543
- export { ACTIONS_TABLE_TEMPLATE, AGGREGATION_FIELD_TYPES, AUTOCOMPLETE_TEMPLATE, ActionsTableTemplateDirective, ActiveUserSwitchComponent, ActivitiesLogComponent, ActivitiesLogModule, ActivityLineComponent, AdapterService, AddPermissionsDialogComponent, AddToCollectionComponent, AggregationAutocompleteComponent, AggregationCheckboxComponent, AggregationCustomComponent, AggregationDateListComponent, AggregationFieldComponent, AggregationGroupComponent, AggregationRadioComponent, AggregationSelectComponent, AggregationSwitchComponent, ApisErrorsMessagesService, AppConfigService, AppHasRoleDirective, AttachmentItemComponent, AttachmentItemModule, AttachmentModalModule, AttachmentsComponent, AttachmentsListComponent, AttachmentsPageProviderComponent, AutocompleteFilterPipe, AutocompleteTemplateDirective, AvatarComponent, AvatarModule, BaseChartBuilderService, BaseChartComponent, BaseColumnComponent, BaseComponent, BaseDatePicker, BaseDateValueAccessor, BaseDialogComponent, BaseNodeClass, BaseSelector, BaseService, BooleanViewerComponent, ButtonComponent, CHART_DEFAULTS_OPTIONS, CHART_MAIN_COLOR, CHECKBOX_TEMPLATE, COLORS_COUNT, COMPARISON_OPERATOR, CONFIG_EDITOR_MODE, CUSTOM_FIELD_TYPES, CUSTOM_TEMPLATE, CachingExpiryUnit, CalendarService, CallApiService, CardComponent, CardModule, ChartComponent, ChartDataService, ChartDataTransformers, index$1 as ChartDefaults, ChartManagerService, ChartPanel, ChartPanelFooterComponent, ChartPanelHeaderComponent, ChartPanelModule, index as ChartPlugins, ChartPluginsRegistry, index$2 as ChartUtils, ChartsModule, CheckConditionPipe, CheckboxTemplateDirective, CircleNode, CircleNodeComponent, ClickOutsideDirective, ClipboardComponent, CommentApiService, CommentsDashletComponent, CommentsModule, ComponentRegisterService, ComponentTranslationModel, ConfigEditorActionsComponent, ConfigPreviewComponent, ConfirmCallerDialogComponent, ConfirmCallerModule, ConfirmDialogComponent, ConfirmationDialogComponent, ConfirmationDialogModule, Connection, ConnectionLabelComponent, ContentActionType, ContentNode, ContentNodeComponent, CopyComponent, CopyToClipboardDirective, CopyToClipboardModule, CorrespondenceRelationComponent, CorrespondenceRelationCreateFormComponent, CorrespondenceRelationModule, CorrespondenceRelationService, CorrespondenceTagsComponent, CreateDirectoryComponent, CreateEntityComponent, CreateEntityModule, CreateModalComponent, CreationTypeComponent, CtsTagsModule, CustomConnectionComponent, CustomDocumentViewerComponent, CustomFieldComponent, CustomMomentDateAdapter, CustomPpViewerComponent, CustomSocketComponent, CustomTemplateDirective, CustomToastrModule, CustomToastrService, CutomeVocViewerComponent, DATE_LIST_TEMPLATE, DATE_LIST_VIEW, DATE_LOCALE_KEYS, DATE_TYPE, DEFAULT_DEBOUNCE_TIME, DEFAULT_VIEW, DIAGRAM_DEFAULT_OPTIONS, DIAGRAM_HEIGHT, DROPDOWN_LABEL_TEMPLATE, DROPDOWN_MULTI_LABEL_TEMPLATE, DROPDOWN_TEMPLATE, DataChartComponent, DataViewerComponent, DateFormatterService, DateHelperService, DateListTemplateDirective, DateViewerComponent, DeleteComponent, DepartmentApiService, DepartmentFormComponent, DepartmentManagementService, DepartmentViewerComponent, DestroySubject, DiagramDirective, DiagramPluginsService, DiagramService, DiagramUtils, DiagramsModule, DialogMangmentService, DigitChartService, DirectiveModule, DisplaySuitableIconComponent, DisplaySuitableIconModule, DocumentScanService, DocumentTemplatesConstants, DocumentTemplatesService, DocumentUploadComponent, DocumentsComponent, DocumentsConstants, DocumentsListComponent, DocumentsModule, DocumentsService, DragAndDropDirective, DropdownLabelTemplateDirective, DropdownMultiLabelTemplateDirective, DropdownTemplateDirective, DropdownViewerComponent, DynamicChartComponent, DynamicChartModule, DynamicColumnComponent, DynamicCustomComponent, DynamicFieldsRendererComponent, DynamicFieldsRendererModule, DynamicFilterComponent, DynamicFilterModule, DynamicFormBoolItemComponent, DynamicFormBuilderComponent, DynamicFormCheckboxItemComponent, DynamicFormComponent, DynamicFormDateItemComponent, DynamicFormDepartmentComponent, DynamicFormFieldComponent, DynamicFormHijriDateitemComponent, DynamicFormMapItemComponent, DynamicFormModule, DynamicFormOptionsComponent, DynamicFormSelectItemComponent, DynamicFormSelectTagComponent, DynamicFormSelectUserFilterComponent, DynamicFormSelectUsersComponent, DynamicFormService, DynamicFormSlideToggleitemComponent, DynamicFormTextItemComponent, DynamicFormTextareaComponent, DynamicFormViewerComponent, DynamicFormVocabularyItemComponent, DynamicSearchComponent, DynamicSearchModule, DynamicTableComponent, DynamicTableModule, DynamicTableService, DynamicTabsComponent, DynamicTabsModule, DynamicTimelineReportService, DynamicViewModule, EMPTY_TEMPLATE, ENTITY_TYPE, EXTENSION_JSONS, EditDeleteModalComponent, EditorModeSwitchComponent, EditorSettingsComponent, ElementHeightDirective, ElementHeightModule, EmptyTemplateDirective, EnvManager, Evaluator, EvaluatorsService, ExtensionLoaderService, ExtensionService, FIELD_SEND_MODE, FIELD_TYPE, FILTER_CUSTOM_TEMPLATE, FILTER_DATES_TYPE, FieldHeaderComponent, FieldValueObject, FileGridInfiniteScrollDirective, FileManagerAbstract, FileManagerAdapter, FileManagerPaginationConfig, FileManagerService, FileMangerModule, FileSizePipe, FilterAutocompleteInputComponent, FilterCollapseControlComponent, FilterComponent, FilterCustomTemplateDirective, FilterDateRangeComponent, FilterEmptyMessageComponent, FilterModule, FilterOptionTextComponent, FilterOptionsSortComponent, FilterPipe, FilterQueryService, FilterSearchInputComponent, FiltersByRolesPipe, FiltersMapperService, FiltersPanelComponent, FluidHeightDirective, FluidHeightModule, FolderModalComponent, FolderishType, FormBuilderService, GREGORIAN_DATE_FORMATS, GREGORIAN_FORMAT, GatewayNodeComponent, GatewayPortsComponent, GlobalAdminService, GlobalPdfTron, GregorianDatepickerComponent, HIJRI_DATE_ARABIC_NAMES, HIJRI_DATE_ENGLISH_NAMES, HIJRI_DATE_FORMATS, HIJRI_FORMAT, HashTranslateAsyncPipe, HashTranslatePipe, HijriAdapterService, HijriDatePipe, HijriDatepickerComponent, HijriGregorianDatepickerComponent, HtmlDialogComponent, IN_OUT_DIRECTION, IconService, InfoDialogComponent, InitializationService, InputDateComponent, InputPort, InputRangeDateComponent, ItemListComponent, Lang, LatestActivityComponent, LatestActivityModule, LibrarySharedModule, ListViewerComponent, LoanRequestComponent, LocalStoragService, LocalizeState, LocalizedDatePipe, LocalizedLabelPipe, MAT_MOMENT_DATE_ADAPTER_OPTIONS, MAT_MOMENT_DATE_ADAPTER_OPTIONS_FACTORY, MESSAGE_TYPE, MIN_VISIBLE_COUNT, MONACO_EDITOR_CONFIG, MY_MOMENT_FORMATS, MainfolderService, MapToAggregationConfigPipe, MessageService, ModeTogglerComponent, MomentDateAdapter, MonacoEditorComponent, MoveComponent, MultiValuePipe, MultipleDynamicFormViewerComponent, MutipleDynamicFormViewerModule, NDF_EDITOR_TYPE, NODE_CIRCLE_SIZE, NODE_GATEWAY_SIZE, NODE_HEIGHT, NODE_MARGIN, NODE_STATUS, NODE_TYPE, NODE_WIDTH, NOTIFICATIONS_LIST_OPTIONS, NOTIFICATION_ICON, NOTIFICATION_ITEM, NOTIFICATION_STATUS, NOTIFY_EVENT, NdfConfigEditorComponent, NdfConfigEditorModule, NdfConfirmationDialogComponent, NdfDatepickerComponent, NdfDatepickerModule, NdfFiltersPanelModule, NdfGregorianDatepickerComponent, NdfHijriDatepickerComponent, NdfNuxeoDialog, NdfPanelComponent, NdfPanelModule, NdfReportComponent, NdfReportsComponent, NdfReportsModule, NdfReportsService, NdfTableComponent, NdfTableConfigurationService, NdfTableModule, NdfTableService, NdfTabsComponent, NdfTabsModule, NdfTransformService, NgxHijriGregorianDatepickerModule, NoDataComponent, NoDataFoundComponent, NoDataModule, NodeIconComponent, NodeInputsComponent, NodeOutputsComponent, NodePortsComponent, NotificationIconDirective, NotificationItemComponent, NotificationItemDirective, NotificationSourceSelectComponent, NotificationStatusToggleComponent, NotificationToastComponent, NotificationsButtonComponent, NotificationsDateSelectComponent, NotificationsListComponent, NotificationsListContainerComponent, NotificationsModule, NotificationsService, NotificationsSettingsContainerComponent, NuxeoCoreModule, NuxeoDevelopmentFrameworkComponent, NuxeoDevelopmentFrameworkModule, NuxeoDevelopmentFrameworkService, NuxeoDialogModule, NuxeoDialogService, NuxeoMapper, NuxeoService, NxQL, NxQlQuery, OutputPort, PAGINATION_MODE, PANEL_MODE, PARAMS_KEYS, PREDICATE_FIELD_TYPES, PROJECT_BASE_HREF, PageSizesListComponent, PaginationComponent, PaginationModule, PdfTronModule, PdftronComponent, PdftronService, PermissionService, PermissionsComponent, PermissionsDirective, PermissionsModule, PermissionsTemplateComponent, PipesModule, PredicateDateInputComponent, PredicateFieldComponent, PredicateTextInputComponent, PublishDialogComponent, PublishingDocumentService, RADIO_TEMPLATE, RadioTemplateDirective, ReadMoreComponent, RecentlyViewedService, RemoveButtonComponent, RenameComponent, ReportConfigMapperService, ReportTransformService, ReportsDataTransformers, ReportsStateService, RolesService, SEARCH_TABLE_TEMPLATE, SOCKET_WIDTH, SUBSCRIPTION_STATE, SWITCH_TEMPLATE, SafeHtmlPipe, SanitizerPipe, ScanComponent, ScanModalComponent, SearchAutocompleteComponent, SearchTableTemplateDirective, SecurePipe, SelectComponent, SelectModule, SelectUsersByDepartmentModule, SelectUsersByDepartmentsComponent, SetDirRtlDirective, SetRtlDirective, ShareDialogComponent, SharedDocsService, SharedServicesModule, SidepanelComponent, SilentPdfTronService, SingleActivityComponent, SkeletonComponent, SkeletonModule, Socket, SortListPipe, SortingListComponent, SpellCheckerFieldModule, SpellCheckerTextFieldComponent, SpinnerComponent, StatisticService, StatusIconComponent, SwitchTemplateDirective, TRANSLATION_PROVIDER, TableColumnsTogglerComponent, TableComponent, TableExportComponent, TableModule, TableSkeletonComponent, TagsApiService, TemplateModalComponent, TemplateNode, TemplateNodeComponent, TextSearchComponent, TimeAgoPipe, ToastsModule, TooltipPipe, TransferDocComponent, TranslateLoaderService, TranslatedVocabularySelectComponent, TranslationService, TreeviewSelectComponent, UpdateModalComponent, UploadFileService, UploadManagmentService, UserCardComponent, UserComponent, UserModule, UserPreferenceValues, UserPreferencesService, UserService, UsersCardComponent, UsersCardModule, UtilityService, VALUE_OBJECT, VersionsComponent, ViewerFilesService, ViewerLogComponent, ViewerLogModule, VocabularyApiService, VocabularyComponent, VocabularyModule, WorkflowService, ZoomControlComponent, appInitializer, departmentCacheBuster$, extensionJsonsFactory, filterEnabled, getChartsOptions, getConnections, getDoughnutOptions, getHorizontalBarOptions, getLineOptions, getPieOptions, getRandomNumber, getValue, getVerticalBarOptions, isDateObject, isFieldValueObject, mergeArrays, mergeObjects, minute$1 as minute, provideExtensionConfig, reduceEmptyMenus, reduceSeparators, removeConnections, removeEmptyKeys, removeNode, removeNodeAndConnections, serializeControl, serializePort, slideAnimation, sortByOrder };
45810
+ export { ACTIONS_TABLE_TEMPLATE, AGGREGATION_FIELD_TYPES, AUTOCOMPLETE_TEMPLATE, ActionsTableTemplateDirective, ActiveUserSwitchComponent, ActivitiesLogComponent, ActivitiesLogModule, ActivityLineComponent, AdapterService, AddPermissionsDialogComponent, AddToCollectionComponent, AggregationAutocompleteComponent, AggregationCheckboxComponent, AggregationCustomComponent, AggregationDateListComponent, AggregationFieldComponent, AggregationGroupComponent, AggregationRadioComponent, AggregationSelectComponent, AggregationSwitchComponent, ApisErrorsMessagesService, AppConfigService, AppHasRoleDirective, AttachmentItemComponent, AttachmentItemModule, AttachmentModalModule, AttachmentsComponent, AttachmentsListComponent, AttachmentsPageProviderComponent, AutocompleteFilterPipe, AutocompleteTemplateDirective, AvatarComponent, AvatarModule, BaseChartBuilderService, BaseChartComponent, BaseColumnComponent, BaseComponent, BaseDatePicker, BaseDateValueAccessor, BaseDialogComponent, BaseNodeClass, BaseSelector, BaseService, BooleanViewerComponent, ButtonComponent, CHART_DEFAULTS_OPTIONS, CHART_MAIN_COLOR, CHECKBOX_TEMPLATE, COLORS_COUNT, COMPARISON_OPERATOR, CONFIG_EDITOR_MODE, CUSTOM_FIELD_TYPES, CUSTOM_TEMPLATE, CachingExpiryUnit, CalendarService, CallApiService, CardComponent, CardModule, ChartComponent, ChartDataService, ChartDataTransformers, index$1 as ChartDefaults, ChartManagerService, ChartPanel, ChartPanelFooterComponent, ChartPanelHeaderComponent, ChartPanelModule, index as ChartPlugins, ChartPluginsRegistry, index$2 as ChartUtils, ChartsModule, CheckConditionPipe, CheckboxTemplateDirective, CircleNode, CircleNodeComponent, ClickOutsideDirective, ClipboardComponent, CommentApiService, CommentsDashletComponent, CommentsModule, ComponentRegisterService, ComponentTranslationModel, ConfigEditorActionsComponent, ConfigPreviewComponent, ConfirmCallerDialogComponent, ConfirmCallerModule, ConfirmDialogComponent, ConfirmationDialogComponent, ConfirmationDialogModule, Connection, ConnectionLabelComponent, ContentActionType, ContentNode, ContentNodeComponent, CopyComponent, CopyToClipboardDirective, CopyToClipboardModule, CorrespondenceRelationComponent, CorrespondenceRelationCreateFormComponent, CorrespondenceRelationModule, CorrespondenceRelationService, CorrespondenceTagsComponent, CreateDirectoryComponent, CreateEntityComponent, CreateEntityModule, CreateModalComponent, CreationTypeComponent, CtsTagsModule, CustomConnectionComponent, CustomDocumentViewerComponent, CustomFieldComponent, CustomMomentDateAdapter, CustomPpViewerComponent, CustomReportsRegistry, CustomSocketComponent, CustomTemplateDirective, CustomToastrModule, CustomToastrService, CutomeVocViewerComponent, DATE_LIST_TEMPLATE, DATE_LIST_VIEW, DATE_LOCALE_KEYS, DATE_TYPE, DEFAULT_DEBOUNCE_TIME, DEFAULT_VIEW, DIAGRAM_DEFAULT_OPTIONS, DIAGRAM_HEIGHT, DROPDOWN_LABEL_TEMPLATE, DROPDOWN_MULTI_LABEL_TEMPLATE, DROPDOWN_TEMPLATE, DataChartComponent, DataViewerComponent, DateFormatterService, DateHelperService, DateListTemplateDirective, DateViewerComponent, DeleteComponent, DepartmentApiService, DepartmentFormComponent, DepartmentManagementService, DepartmentViewerComponent, DestroySubject, DiagramDirective, DiagramPluginsService, DiagramService, DiagramUtils, DiagramsModule, DialogMangmentService, DigitChartService, DirectiveModule, DisplaySuitableIconComponent, DisplaySuitableIconModule, DocumentScanService, DocumentTemplatesConstants, DocumentTemplatesService, DocumentUploadComponent, DocumentsComponent, DocumentsConstants, DocumentsListComponent, DocumentsModule, DocumentsService, DragAndDropDirective, DropdownLabelTemplateDirective, DropdownMultiLabelTemplateDirective, DropdownTemplateDirective, DropdownViewerComponent, DynamicChartComponent, DynamicChartModule, DynamicColumnComponent, DynamicCustomComponent, DynamicFieldsRendererComponent, DynamicFieldsRendererModule, DynamicFilterComponent, DynamicFilterModule, DynamicFormBoolItemComponent, DynamicFormBuilderComponent, DynamicFormCheckboxItemComponent, DynamicFormComponent, DynamicFormDateItemComponent, DynamicFormDepartmentComponent, DynamicFormFieldComponent, DynamicFormHijriDateitemComponent, DynamicFormMapItemComponent, DynamicFormModule, DynamicFormOptionsComponent, DynamicFormSelectItemComponent, DynamicFormSelectTagComponent, DynamicFormSelectUserFilterComponent, DynamicFormSelectUsersComponent, DynamicFormService, DynamicFormSlideToggleitemComponent, DynamicFormTextItemComponent, DynamicFormTextareaComponent, DynamicFormViewerComponent, DynamicFormVocabularyItemComponent, DynamicSearchComponent, DynamicSearchModule, DynamicTableComponent, DynamicTableModule, DynamicTableService, DynamicTabsComponent, DynamicTabsModule, DynamicTimelineReportService, DynamicViewModule, EMPTY_TEMPLATE, ENTITY_TYPE, EXTENSION_JSONS, EditDeleteModalComponent, EditorModeSwitchComponent, EditorSettingsComponent, ElementHeightDirective, ElementHeightModule, EmptyTemplateDirective, EnvManager, Evaluator, EvaluatorsService, ExtensionLoaderService, ExtensionService, FIELD_SEND_MODE, FIELD_TYPE, FILTER_CUSTOM_TEMPLATE, FILTER_DATES_TYPE, FieldHeaderComponent, FieldValueObject, FileGridInfiniteScrollDirective, FileManagerAbstract, FileManagerAdapter, FileManagerPaginationConfig, FileManagerService, FileMangerModule, FileSizePipe, FilterAutocompleteInputComponent, FilterCollapseControlComponent, FilterComponent, FilterCustomTemplateDirective, FilterDateRangeComponent, FilterEmptyMessageComponent, FilterModule, FilterOptionTextComponent, FilterOptionsSortComponent, FilterPipe, FilterQueryService, FilterSearchInputComponent, FiltersByRolesPipe, FiltersMapperService, FiltersPanelComponent, FluidHeightDirective, FluidHeightModule, FolderModalComponent, FolderishType, FormBuilderService, GREGORIAN_DATE_FORMATS, GREGORIAN_FORMAT, GatewayNodeComponent, GatewayPortsComponent, GlobalAdminService, GlobalPdfTron, GregorianDatepickerComponent, HIJRI_DATE_ARABIC_NAMES, HIJRI_DATE_ENGLISH_NAMES, HIJRI_DATE_FORMATS, HIJRI_FORMAT, HashTranslateAsyncPipe, HashTranslatePipe, HijriAdapterService, HijriDatePipe, HijriDatepickerComponent, HijriGregorianDatepickerComponent, HtmlDialogComponent, IN_OUT_DIRECTION, IconService, InfoDialogComponent, InitializationService, InputDateComponent, InputPort, InputRangeDateComponent, ItemListComponent, Lang, LatestActivityComponent, LatestActivityModule, LibrarySharedModule, ListViewerComponent, LoanRequestComponent, LocalStoragService, LocalizeState, LocalizedDatePipe, LocalizedLabelPipe, MAT_MOMENT_DATE_ADAPTER_OPTIONS, MAT_MOMENT_DATE_ADAPTER_OPTIONS_FACTORY, MESSAGE_TYPE, MIN_VISIBLE_COUNT, MONACO_EDITOR_CONFIG, MY_MOMENT_FORMATS, MainfolderService, MapToAggregationConfigPipe, MessageService, ModeTogglerComponent, MomentDateAdapter, MonacoEditorComponent, MoveComponent, MultiValuePipe, MultipleDynamicFormViewerComponent, MutipleDynamicFormViewerModule, NDF_EDITOR_TYPE, NODE_CIRCLE_SIZE, NODE_GATEWAY_SIZE, NODE_HEIGHT, NODE_MARGIN, NODE_STATUS, NODE_TYPE, NODE_WIDTH, NOTIFICATIONS_LIST_OPTIONS, NOTIFICATION_ICON, NOTIFICATION_ITEM, NOTIFICATION_STATUS, NOTIFY_EVENT, NdfConfigEditorComponent, NdfConfigEditorModule, NdfConfirmationDialogComponent, NdfDatepickerComponent, NdfDatepickerModule, NdfFiltersPanelModule, NdfGregorianDatepickerComponent, NdfHijriDatepickerComponent, NdfNuxeoDialog, NdfPanelComponent, NdfPanelModule, NdfReportComponent, NdfReportsComponent, NdfReportsModule, NdfReportsService, NdfTableComponent, NdfTableConfigurationService, NdfTableModule, NdfTableService, NdfTabsComponent, NdfTabsModule, NdfTransformService, NgxHijriGregorianDatepickerModule, NoDataComponent, NoDataFoundComponent, NoDataModule, NodeIconComponent, NodeInputsComponent, NodeOutputsComponent, NodePortsComponent, NotificationIconDirective, NotificationItemComponent, NotificationItemDirective, NotificationSourceSelectComponent, NotificationStatusToggleComponent, NotificationToastComponent, NotificationsButtonComponent, NotificationsDateSelectComponent, NotificationsListComponent, NotificationsListContainerComponent, NotificationsModule, NotificationsService, NotificationsSettingsContainerComponent, NuxeoCoreModule, NuxeoDevelopmentFrameworkComponent, NuxeoDevelopmentFrameworkModule, NuxeoDevelopmentFrameworkService, NuxeoDialogModule, NuxeoDialogService, NuxeoMapper, NuxeoService, NxQL, NxQlQuery, OutputPort, PAGINATION_MODE, PANEL_MODE, PARAMS_KEYS, PREDICATE_FIELD_TYPES, PROJECT_BASE_HREF, PageSizesListComponent, PaginationComponent, PaginationModule, PdfTronModule, PdftronComponent, PdftronService, PermissionService, PermissionsComponent, PermissionsDirective, PermissionsModule, PermissionsTemplateComponent, PipesModule, PredicateDateInputComponent, PredicateFieldComponent, PredicateTextInputComponent, PublishDialogComponent, PublishingDocumentService, RADIO_TEMPLATE, RadioTemplateDirective, ReadMoreComponent, RecentlyViewedService, RemoveButtonComponent, RenameComponent, ReportConfigMapperService, ReportTransformService, ReportsDataTransformers, ReportsStateService, RolesService, SEARCH_TABLE_TEMPLATE, SOCKET_WIDTH, SUBSCRIPTION_STATE, SWITCH_TEMPLATE, SafeHtmlPipe, SanitizerPipe, ScanComponent, ScanModalComponent, SearchAutocompleteComponent, SearchTableTemplateDirective, SecurePipe, SelectComponent, SelectModule, SelectUsersByDepartmentModule, SelectUsersByDepartmentsComponent, SetDirRtlDirective, SetRtlDirective, ShareDialogComponent, SharedDocsService, SharedServicesModule, SidepanelComponent, SilentPdfTronService, SingleActivityComponent, SkeletonComponent, SkeletonModule, Socket, SortListPipe, SortingListComponent, SpellCheckerFieldModule, SpellCheckerTextFieldComponent, SpinnerComponent, StatisticService, StatusIconComponent, SwitchTemplateDirective, TRANSLATION_PROVIDER, TableColumnsTogglerComponent, TableComponent, TableExportComponent, TableModule, TableSkeletonComponent, TagsApiService, TemplateModalComponent, TemplateNode, TemplateNodeComponent, TextSearchComponent, TimeAgoPipe, ToastsModule, TooltipPipe, TransferDocComponent, TranslateLoaderService, TranslatedVocabularySelectComponent, TranslationService, TreeviewSelectComponent, UpdateModalComponent, UploadFileService, UploadManagmentService, UserCardComponent, UserComponent, UserModule, UserPreferenceValues, UserPreferencesService, UserService, UsersCardComponent, UsersCardModule, UtilityService, VALUE_OBJECT, VersionsComponent, ViewerFilesService, ViewerLogComponent, ViewerLogModule, VocabularyApiService, VocabularyComponent, VocabularyModule, WorkflowService, ZoomControlComponent, appInitializer, departmentCacheBuster$, extensionJsonsFactory, filterEnabled, getChartsOptions, getConnections, getDoughnutOptions, getHorizontalBarOptions, getLineOptions, getPieOptions, getRandomNumber, getValue, getVerticalBarOptions, isDateObject, isFieldValueObject, mergeArrays, mergeObjects, minute$1 as minute, provideExtensionConfig, reduceEmptyMenus, reduceSeparators, removeConnections, removeEmptyKeys, removeNode, removeNodeAndConnections, serializeControl, serializePort, slideAnimation, sortByOrder };
45544
45811
  //# sourceMappingURL=nuxeo-development-framework.js.map