@sumaris-net/ngx-components 1.20.3 → 1.20.4

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 (30) hide show
  1. package/bundles/sumaris-net.ngx-components.umd.js +203 -23
  2. package/bundles/sumaris-net.ngx-components.umd.js.map +1 -1
  3. package/bundles/sumaris-net.ngx-components.umd.min.js +2 -2
  4. package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -1
  5. package/doc/changelog.md +5 -0
  6. package/esm2015/public_api.js +7 -3
  7. package/esm2015/src/app/core/install/install-upgrade-card.component.js +3 -2
  8. package/esm2015/src/app/core/services/platform.service.js +3 -2
  9. package/esm2015/src/app/shared/directives/autotitle.directive.js +27 -0
  10. package/esm2015/src/app/shared/directives/directives.module.js +6 -3
  11. package/esm2015/src/app/shared/file/csv.utils.js +90 -0
  12. package/esm2015/src/app/shared/file/file.utils.js +63 -0
  13. package/esm2015/src/app/shared/file/uri.utils.js +23 -0
  14. package/esm2015/src/app/shared/functions.js +3 -1
  15. package/esm2015/src/app/shared/pipes/pipes.module.js +7 -4
  16. package/esm2015/src/app/shared/pipes/property.pipes.js +74 -0
  17. package/esm2015/src/app/shared/upload-file/testing/upload-file.testing.js +2 -2
  18. package/fesm2015/sumaris-net.ngx-components.js +193 -21
  19. package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
  20. package/package.json +1 -1
  21. package/public_api.d.ts +6 -2
  22. package/src/app/shared/directives/autotitle.directive.d.ts +7 -0
  23. package/src/app/shared/file/csv.utils.d.ts +18 -0
  24. package/src/app/shared/{files.d.ts → file/file.utils.d.ts} +3 -9
  25. package/src/app/shared/file/uri.utils.d.ts +7 -0
  26. package/src/app/shared/pipes/property.pipes.d.ts +14 -0
  27. package/sumaris-net.ngx-components.metadata.json +1 -1
  28. package/esm2015/src/app/shared/files.js +0 -84
  29. package/esm2015/src/app/shared/pipes/properties.pipe.js +0 -20
  30. package/src/app/shared/pipes/properties.pipe.d.ts +0 -7
@@ -0,0 +1,74 @@
1
+ import { Injectable, Pipe } from '@angular/core';
2
+ import { getPropertyByPath, isNil, isNotNil, joinPropertiesPath } from '../functions';
3
+ import { DateFormatPipe } from './date-format.pipe';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "./date-format.pipe";
6
+ export class PropertyGetPipe {
7
+ transform(obj, args) {
8
+ return getPropertyByPath(obj,
9
+ // Path
10
+ args && (typeof args === 'string' ? args : args.key),
11
+ // Default value
12
+ args && args.defaultValue);
13
+ }
14
+ }
15
+ PropertyGetPipe.decorators = [
16
+ { type: Pipe, args: [{
17
+ name: 'propertyGet'
18
+ },] }
19
+ ];
20
+ export class PropertyFormatPipe {
21
+ constructor(dateFormat) {
22
+ this.dateFormat = dateFormat;
23
+ }
24
+ transform(obj, keyOrDefinition) {
25
+ var _a, _b;
26
+ if (!obj)
27
+ return '';
28
+ const definition = keyOrDefinition && (typeof keyOrDefinition === 'object') && keyOrDefinition;
29
+ const key = (definition === null || definition === void 0 ? void 0 : definition.key) || keyOrDefinition;
30
+ if (!key) {
31
+ // Should never occur
32
+ console.warn('Invalid use of pipe \'formatProperty\': missing key or definition');
33
+ return '';
34
+ }
35
+ const value = obj[key];
36
+ if (isNil(value))
37
+ return value;
38
+ const type = (definition === null || definition === void 0 ? void 0 : definition.type) || typeof value;
39
+ switch (type) {
40
+ case 'date':
41
+ return this.dateFormat.transform(value);
42
+ case 'dateTime':
43
+ return this.dateFormat.transform(value, { time: true });
44
+ case 'enum':
45
+ {
46
+ // DEBUG
47
+ // console.debug('formatProperty by definition (type='enum', key=' +definition.key+ '):', value );
48
+ const item = (definition.values || [value]).find(item => (isNotNil(item.key) ? item.key : item) === value);
49
+ return item.value || item;
50
+ }
51
+ case 'entity':
52
+ {
53
+ if ((_a = definition.autocomplete) === null || _a === void 0 ? void 0 : _a.displayWith) {
54
+ return definition.autocomplete.displayWith(value);
55
+ }
56
+ return joinPropertiesPath(obj, ((_b = definition.autocomplete) === null || _b === void 0 ? void 0 : _b.attributes) || ['label', 'name']) || undefined;
57
+ }
58
+ case 'string':
59
+ default:
60
+ return value;
61
+ }
62
+ }
63
+ }
64
+ PropertyFormatPipe.ɵprov = i0.ɵɵdefineInjectable({ factory: function PropertyFormatPipe_Factory() { return new PropertyFormatPipe(i0.ɵɵinject(i1.DateFormatPipe)); }, token: PropertyFormatPipe, providedIn: "root" });
65
+ PropertyFormatPipe.decorators = [
66
+ { type: Pipe, args: [{
67
+ name: 'propertyFormat'
68
+ },] },
69
+ { type: Injectable, args: [{ providedIn: 'root' },] }
70
+ ];
71
+ PropertyFormatPipe.ctorParameters = () => [
72
+ { type: DateFormatPipe }
73
+ ];
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHkucGlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9waXBlcy9wcm9wZXJ0eS5waXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFDLGlCQUFpQixFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDcEYsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG9CQUFvQixDQUFDOzs7QUFNbEQsTUFBTSxPQUFPLGVBQWU7SUFFeEIsU0FBUyxDQUFDLEdBQVEsRUFBRSxJQUFpRDtRQUNuRSxPQUFPLGlCQUFpQixDQUFDLEdBQUc7UUFDMUIsT0FBTztRQUNQLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ3BELGdCQUFnQjtRQUNoQixJQUFJLElBQUssSUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7OztZQVhKLElBQUksU0FBQztnQkFDRixJQUFJLEVBQUUsYUFBYTthQUN0Qjs7QUFpQkQsTUFBTSxPQUFPLGtCQUFrQjtJQUU3QixZQUFvQixVQUEwQjtRQUExQixlQUFVLEdBQVYsVUFBVSxDQUFnQjtJQUM5QyxDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQVEsRUFBRSxlQUEyQzs7UUFDN0QsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUNwQixNQUFNLFVBQVUsR0FBRyxlQUFlLElBQUksQ0FBQyxPQUFPLGVBQWUsS0FBSyxRQUFRLENBQUMsSUFBSSxlQUFlLENBQUM7UUFDL0YsTUFBTSxHQUFHLEdBQUcsQ0FBQSxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsR0FBRyxLQUFJLGVBQXlCLENBQUM7UUFDekQsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNSLHFCQUFxQjtZQUNyQixPQUFPLENBQUMsSUFBSSxDQUFDLG1FQUFtRSxDQUFDLENBQUM7WUFDbEYsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QixJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMvQixNQUFNLElBQUksR0FBRyxDQUFBLFVBQVUsYUFBVixVQUFVLHVCQUFWLFVBQVUsQ0FBRSxJQUFJLEtBQUksT0FBTyxLQUFLLENBQUM7UUFDOUMsUUFBUSxJQUFJLEVBQUU7WUFDWixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQVcsQ0FBQztZQUNwRCxLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFDLENBQVcsQ0FBQztZQUNsRSxLQUFLLE1BQU07Z0JBQ1g7b0JBQ0UsUUFBUTtvQkFDUixrR0FBa0c7b0JBQ2xHLE1BQU0sSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQWUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztvQkFDcEgsT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztpQkFDM0I7WUFDRCxLQUFLLFFBQVE7Z0JBQ2I7b0JBQ0UsVUFBSSxVQUFVLENBQUMsWUFBWSwwQ0FBRSxXQUFXLEVBQUU7d0JBQ3hDLE9BQU8sVUFBVSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7cUJBQ2xEO29CQUNELE9BQU8sa0JBQWtCLENBQUMsR0FBRyxFQUFFLE9BQUEsVUFBVSxDQUFDLFlBQVksMENBQUUsVUFBVSxLQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO2lCQUN2RztZQUNELEtBQUssUUFBUSxDQUFDO1lBQ2Q7Z0JBQ0UsT0FBTyxLQUFLLENBQUM7U0FDaEI7SUFDSCxDQUFDOzs7O1lBNUNGLElBQUksU0FBQztnQkFDSixJQUFJLEVBQUUsZ0JBQWdCO2FBQ3ZCO1lBQ0EsVUFBVSxTQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQzs7O1lBckJ4QixjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBQaXBlLCBQaXBlVHJhbnNmb3JtfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Z2V0UHJvcGVydHlCeVBhdGgsIGlzTmlsLCBpc05vdE5pbCwgam9pblByb3BlcnRpZXNQYXRofSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHtEYXRlRm9ybWF0UGlwZX0gZnJvbSAnLi9kYXRlLWZvcm1hdC5waXBlJztcbmltcG9ydCB7Rm9ybUZpZWxkRGVmaW5pdGlvbn0gZnJvbSAnLi4vZm9ybS9maWVsZC5tb2RlbCc7XG5cbkBQaXBlKHtcbiAgICBuYW1lOiAncHJvcGVydHlHZXQnXG59KVxuZXhwb3J0IGNsYXNzIFByb3BlcnR5R2V0UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gICAgdHJhbnNmb3JtKG9iajogYW55LCBhcmdzOiBzdHJpbmcgfCB7a2V5OiBzdHJpbmc7IGRlZmF1bHRWYWx1ZT86IGFueSB9ICk6IGFueSB7XG4gICAgICByZXR1cm4gZ2V0UHJvcGVydHlCeVBhdGgob2JqLFxuICAgICAgICAvLyBQYXRoXG4gICAgICAgIGFyZ3MgJiYgKHR5cGVvZiBhcmdzID09PSAnc3RyaW5nJyA/IGFyZ3MgOiBhcmdzLmtleSksXG4gICAgICAgIC8vIERlZmF1bHQgdmFsdWVcbiAgICAgICAgYXJncyAmJiAoYXJncyBhcyBhbnkpLmRlZmF1bHRWYWx1ZSk7XG4gICAgfVxufVxuXG5cbkBQaXBlKHtcbiAgbmFtZTogJ3Byb3BlcnR5Rm9ybWF0J1xufSlcbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIFByb3BlcnR5Rm9ybWF0UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGF0ZUZvcm1hdDogRGF0ZUZvcm1hdFBpcGUpIHtcbiAgfVxuXG4gIHRyYW5zZm9ybShvYmo6IGFueSwga2V5T3JEZWZpbml0aW9uOiBzdHJpbmd8Rm9ybUZpZWxkRGVmaW5pdGlvbik6IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCFvYmopIHJldHVybiAnJztcbiAgICBjb25zdCBkZWZpbml0aW9uID0ga2V5T3JEZWZpbml0aW9uICYmICh0eXBlb2Yga2V5T3JEZWZpbml0aW9uID09PSAnb2JqZWN0JykgJiYga2V5T3JEZWZpbml0aW9uO1xuICAgIGNvbnN0IGtleSA9IGRlZmluaXRpb24/LmtleSB8fCBrZXlPckRlZmluaXRpb24gYXMgc3RyaW5nO1xuICAgIGlmICgha2V5KSB7XG4gICAgICAvLyBTaG91bGQgbmV2ZXIgb2NjdXJcbiAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCB1c2Ugb2YgcGlwZSBcXCdmb3JtYXRQcm9wZXJ0eVxcJzogbWlzc2luZyBrZXkgb3IgZGVmaW5pdGlvbicpO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgIGlmIChpc05pbCh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgICBjb25zdCB0eXBlID0gZGVmaW5pdGlvbj8udHlwZSB8fCB0eXBlb2YgdmFsdWU7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZUZvcm1hdC50cmFuc2Zvcm0odmFsdWUpIGFzIHN0cmluZztcbiAgICAgIGNhc2UgJ2RhdGVUaW1lJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZUZvcm1hdC50cmFuc2Zvcm0odmFsdWUsIHt0aW1lOiB0cnVlfSkgYXMgc3RyaW5nO1xuICAgICAgY2FzZSAnZW51bSc6XG4gICAgICB7XG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIC8vIGNvbnNvbGUuZGVidWcoJ2Zvcm1hdFByb3BlcnR5IGJ5IGRlZmluaXRpb24gKHR5cGU9J2VudW0nLCBrZXk9JyArZGVmaW5pdGlvbi5rZXkrICcpOicsIHZhbHVlICk7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSAoZGVmaW5pdGlvbi52YWx1ZXMgYXMgYW55W10gfHwgW3ZhbHVlXSkuZmluZChpdGVtID0+IChpc05vdE5pbChpdGVtLmtleSkgPyBpdGVtLmtleSA6IGl0ZW0pID09PSB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBpdGVtLnZhbHVlIHx8IGl0ZW07XG4gICAgICB9XG4gICAgICBjYXNlICdlbnRpdHknOlxuICAgICAge1xuICAgICAgICBpZiAoZGVmaW5pdGlvbi5hdXRvY29tcGxldGU/LmRpc3BsYXlXaXRoKSB7XG4gICAgICAgICAgcmV0dXJuIGRlZmluaXRpb24uYXV0b2NvbXBsZXRlLmRpc3BsYXlXaXRoKHZhbHVlKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBqb2luUHJvcGVydGllc1BhdGgob2JqLCBkZWZpbml0aW9uLmF1dG9jb21wbGV0ZT8uYXR0cmlidXRlcyB8fCBbJ2xhYmVsJywgJ25hbWUnXSkgfHwgdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -5,7 +5,7 @@ import { Subject, timer } from 'rxjs';
5
5
  import { HttpEventType, HttpResponse } from '@angular/common/http';
6
6
  import { map, takeUntil } from 'rxjs/operators';
7
7
  import { sleep } from '../../functions';
8
- import { FilesUtils } from '../../files';
8
+ import { FilesUtils } from '../../file/file.utils';
9
9
  export class UploadFileTestingPage {
10
10
  constructor(popoverController) {
11
11
  this.popoverController = popoverController;
@@ -56,4 +56,4 @@ UploadFileTestingPage.decorators = [
56
56
  UploadFileTestingPage.ctorParameters = () => [
57
57
  { type: PopoverController }
58
58
  ];
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWZpbGUudGVzdGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3VwbG9hZC1maWxlL3Rlc3RpbmcvdXBsb2FkLWZpbGUudGVzdGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRCxPQUFPLEVBQWEsT0FBTyxFQUFFLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUMsYUFBYSxFQUFFLFlBQVksRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2pFLE9BQU8sRUFBQyxHQUFHLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRXRDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFNdkMsTUFBTSxPQUFPLHFCQUFxQjtJQUVoQyxZQUNVLGlCQUFvQztRQUFwQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO0lBRTlDLENBQUM7SUFFSyxXQUFXLENBQUMsS0FBYyxFQUFFLElBQTZDOztZQUM3RSxNQUFNLEVBQUMsSUFBSSxFQUFDLEdBQUcsTUFBTSxVQUFVLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEtBQUssa0JBQzNFLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFDekMsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUN0QyxJQUFJLEVBQ1AsQ0FBQztZQUVMLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxrQ0FBQyxJQUFJLENBQUMsUUFBUSwwQ0FBRSxJQUFJLDBDQUFFLFNBQVMsR0FBQSxDQUFDLENBQUM7WUFDM0UsT0FBTyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM5QyxDQUFDO0tBQUE7SUFFRDs7O09BR0c7SUFDSCxVQUFVLENBQUMsSUFBVTtRQUNuQixNQUFNLEtBQUssR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzVCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNmLE9BQU8sS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7YUFDakIsSUFBSSxDQUNILFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFDaEIsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLE1BQU0sSUFBSSxRQUFRLENBQUM7WUFFbkIscUJBQXFCO1lBQ3JCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ3RCLHlFQUF5RTtnQkFDekUsT0FBTyxFQUFDLElBQUksRUFBRSxhQUFhLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQzFEO1lBRUQsaUJBQWlCO1lBQ2pCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFFcEMsd0JBQXdCO1lBQ3hCLE9BQU8sSUFBSSxZQUFZLENBQUMsRUFBQyxJQUFJLEVBQUUsRUFBQyxTQUFTLEVBQUcsSUFBSSxDQUFDLElBQUksRUFBQyxFQUFDLENBQUMsQ0FBQztRQUMzRCxDQUFDLENBQUMsQ0FDSCxDQUFBO0lBRUwsQ0FBQztJQUVLLFVBQVUsQ0FBQyxJQUFVOztZQUN6QixPQUFPLENBQUMsSUFBSSxDQUFDLG9EQUFvRCxDQUFDLENBQUM7WUFDbkUsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0tBQUE7OztZQXhERixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtnQkFDL0IsbTdCQUF1QzthQUN4Qzs7O1lBWk8saUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtQb3BvdmVyQ29udHJvbGxlcn0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHtVcGxvYWRGaWxlUG9wb3Zlck9wdGlvbnN9IGZyb20gJy4uL3VwbG9hZC1maWxlLXBvcG92ZXIuY29tcG9uZW50JztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdCwgdGltZXJ9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtIdHRwRXZlbnRUeXBlLCBIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7bWFwLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7c2xlZXB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQge0ZpbGVFdmVudH0gZnJvbSAnLi4vdXBsb2FkLWZpbGUubW9kZWwnO1xuaW1wb3J0IHtGaWxlc1V0aWxzfSBmcm9tICcuLi8uLi9maWxlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3VwbG9hZC1maWxlLXRlc3RpbmcnLFxuICB0ZW1wbGF0ZVVybDogJ3VwbG9hZC1maWxlLnRlc3RpbmcuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVXBsb2FkRmlsZVRlc3RpbmdQYWdlICB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBwb3BvdmVyQ29udHJvbGxlcjogUG9wb3ZlckNvbnRyb2xsZXJcbiAgKSB7XG4gIH1cblxuICBhc3luYyBzaG93UG9wb3ZlcihldmVudDogVUlFdmVudCwgb3B0cz86IFBhcnRpYWw8VXBsb2FkRmlsZVBvcG92ZXJPcHRpb25zPGFueT4+KSB7XG4gICAgY29uc3Qge2RhdGF9ID0gYXdhaXQgRmlsZXNVdGlscy5zaG93VXBsb2FkUG9wb3Zlcih0aGlzLnBvcG92ZXJDb250cm9sbGVyLCBldmVudCwge1xuICAgICAgICB1cGxvYWRGbjogKGZpbGUpID0+IHRoaXMudXBsb2FkRmlsZShmaWxlKSxcbiAgICAgICAgZGVsZXRlRm46IChmaWxlKSA9PiB0aGlzLmRlbGV0ZUZpbGUoZmlsZSksXG4gICAgICAgIC4uLm9wdHNcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgZmlsZW5hbWVzID0gKGRhdGEgfHwgW10pLm1hcChmaWxlID0+IGZpbGUucmVzcG9uc2U/LmJvZHk/LmZpbmFsTmFtZSk7XG4gICAgY29uc29sZS5pbmZvKCdQb3BvdmVyIHJlc3VsdDogJywgZmlsZW5hbWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaW11bGF0ZSBhIHVwbG9hZCBmdW5jdGlvbiwgd2l0aCBwcm9ncmVzc2lvblxuICAgKiBAcGFyYW0gZmlsZVxuICAgKi9cbiAgdXBsb2FkRmlsZShmaWxlOiBGaWxlKTogT2JzZXJ2YWJsZTxGaWxlRXZlbnQ8eyBmaW5hbE5hbWU6IHN0cmluZzsgfT4+IHtcbiAgICBjb25zdCAkc3RvcCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgY29uc3QgbG9hZFN0ZXAgPSBmaWxlLnNpemUgLyAxMDtcbiAgICBsZXQgbG9hZGVkID0gMDtcbiAgICByZXR1cm4gdGltZXIoMCwgMjUwKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCgkc3RvcCksXG4gICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgbG9hZGVkICs9IGxvYWRTdGVwO1xuXG4gICAgICAgICAgLy8gUmV0dXJuIHByb2dyZXNzaW9uXG4gICAgICAgICAgaWYgKGxvYWRlZCA8IGZpbGUuc2l6ZSkge1xuICAgICAgICAgICAgLy9yZXR1cm4ge3R5cGU6IEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3MsIHRvdGFsOiBmaWxlLnNpemUsIGxvYWRlZCB9O1xuICAgICAgICAgICAgcmV0dXJuIHt0eXBlOiBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzLCBsb2FkZWQ6IC0xIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU3RvcCB0aGUgdGltZXJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+ICRzdG9wLm5leHQoKSwgMTAwKTtcblxuICAgICAgICAgIC8vIFJldHVybiBmaW5hbCByZXNwb25zZVxuICAgICAgICAgIHJldHVybiBuZXcgSHR0cFJlc3BvbnNlKHtib2R5OiB7ZmluYWxOYW1lIDogZmlsZS5uYW1lfX0pO1xuICAgICAgICB9KVxuICAgICAgKVxuXG4gIH1cblxuICBhc3luYyBkZWxldGVGaWxlKGZpbGU6IEZpbGUpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zb2xlLmluZm8oJ1t0ZXN0aW5nXSBTaW11bGF0ZSByZW1vdGUgZGVsZXRpb24uLi4gKHdhaXRpbmcgMnMpJyk7XG4gICAgYXdhaXQgc2xlZXAoMjAwMCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdfQ==
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWZpbGUudGVzdGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3VwbG9hZC1maWxlL3Rlc3RpbmcvdXBsb2FkLWZpbGUudGVzdGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRCxPQUFPLEVBQWEsT0FBTyxFQUFFLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUMsYUFBYSxFQUFFLFlBQVksRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2pFLE9BQU8sRUFBQyxHQUFHLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRXRDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQU1qRCxNQUFNLE9BQU8scUJBQXFCO0lBRWhDLFlBQ1UsaUJBQW9DO1FBQXBDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7SUFFOUMsQ0FBQztJQUVLLFdBQVcsQ0FBQyxLQUFjLEVBQUUsSUFBNkM7O1lBQzdFLE1BQU0sRUFBQyxJQUFJLEVBQUMsR0FBRyxNQUFNLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxrQkFDM0UsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUN6QyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQ3RDLElBQUksRUFDUCxDQUFDO1lBRUwsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLGtDQUFDLElBQUksQ0FBQyxRQUFRLDBDQUFFLElBQUksMENBQUUsU0FBUyxHQUFBLENBQUMsQ0FBQztZQUMzRSxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLENBQUM7S0FBQTtJQUVEOzs7T0FHRztJQUNILFVBQVUsQ0FBQyxJQUFVO1FBQ25CLE1BQU0sS0FBSyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDNUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDaEMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQzthQUNqQixJQUFJLENBQ0gsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUNoQixHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsTUFBTSxJQUFJLFFBQVEsQ0FBQztZQUVuQixxQkFBcUI7WUFDckIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDdEIseUVBQXlFO2dCQUN6RSxPQUFPLEVBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDMUQ7WUFFRCxpQkFBaUI7WUFDakIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUVwQyx3QkFBd0I7WUFDeEIsT0FBTyxJQUFJLFlBQVksQ0FBQyxFQUFDLElBQUksRUFBRSxFQUFDLFNBQVMsRUFBRyxJQUFJLENBQUMsSUFBSSxFQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FBQyxDQUNILENBQUE7SUFFTCxDQUFDO0lBRUssVUFBVSxDQUFDLElBQVU7O1lBQ3pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0RBQW9ELENBQUMsQ0FBQztZQUNuRSxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7S0FBQTs7O1lBeERGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUscUJBQXFCO2dCQUMvQixtN0JBQXVDO2FBQ3hDOzs7WUFaTyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1BvcG92ZXJDb250cm9sbGVyfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQge1VwbG9hZEZpbGVQb3BvdmVyT3B0aW9uc30gZnJvbSAnLi4vdXBsb2FkLWZpbGUtcG9wb3Zlci5jb21wb25lbnQnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJqZWN0LCB0aW1lcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0h0dHBFdmVudFR5cGUsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHttYXAsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtzbGVlcH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7RmlsZUV2ZW50fSBmcm9tICcuLi91cGxvYWQtZmlsZS5tb2RlbCc7XG5pbXBvcnQge0ZpbGVzVXRpbHN9IGZyb20gJy4uLy4uL2ZpbGUvZmlsZS51dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3VwbG9hZC1maWxlLXRlc3RpbmcnLFxuICB0ZW1wbGF0ZVVybDogJ3VwbG9hZC1maWxlLnRlc3RpbmcuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVXBsb2FkRmlsZVRlc3RpbmdQYWdlICB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBwb3BvdmVyQ29udHJvbGxlcjogUG9wb3ZlckNvbnRyb2xsZXJcbiAgKSB7XG4gIH1cblxuICBhc3luYyBzaG93UG9wb3ZlcihldmVudDogVUlFdmVudCwgb3B0cz86IFBhcnRpYWw8VXBsb2FkRmlsZVBvcG92ZXJPcHRpb25zPGFueT4+KSB7XG4gICAgY29uc3Qge2RhdGF9ID0gYXdhaXQgRmlsZXNVdGlscy5zaG93VXBsb2FkUG9wb3Zlcih0aGlzLnBvcG92ZXJDb250cm9sbGVyLCBldmVudCwge1xuICAgICAgICB1cGxvYWRGbjogKGZpbGUpID0+IHRoaXMudXBsb2FkRmlsZShmaWxlKSxcbiAgICAgICAgZGVsZXRlRm46IChmaWxlKSA9PiB0aGlzLmRlbGV0ZUZpbGUoZmlsZSksXG4gICAgICAgIC4uLm9wdHNcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgZmlsZW5hbWVzID0gKGRhdGEgfHwgW10pLm1hcChmaWxlID0+IGZpbGUucmVzcG9uc2U/LmJvZHk/LmZpbmFsTmFtZSk7XG4gICAgY29uc29sZS5pbmZvKCdQb3BvdmVyIHJlc3VsdDogJywgZmlsZW5hbWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaW11bGF0ZSBhIHVwbG9hZCBmdW5jdGlvbiwgd2l0aCBwcm9ncmVzc2lvblxuICAgKiBAcGFyYW0gZmlsZVxuICAgKi9cbiAgdXBsb2FkRmlsZShmaWxlOiBGaWxlKTogT2JzZXJ2YWJsZTxGaWxlRXZlbnQ8eyBmaW5hbE5hbWU6IHN0cmluZzsgfT4+IHtcbiAgICBjb25zdCAkc3RvcCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgY29uc3QgbG9hZFN0ZXAgPSBmaWxlLnNpemUgLyAxMDtcbiAgICBsZXQgbG9hZGVkID0gMDtcbiAgICByZXR1cm4gdGltZXIoMCwgMjUwKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCgkc3RvcCksXG4gICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgbG9hZGVkICs9IGxvYWRTdGVwO1xuXG4gICAgICAgICAgLy8gUmV0dXJuIHByb2dyZXNzaW9uXG4gICAgICAgICAgaWYgKGxvYWRlZCA8IGZpbGUuc2l6ZSkge1xuICAgICAgICAgICAgLy9yZXR1cm4ge3R5cGU6IEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3MsIHRvdGFsOiBmaWxlLnNpemUsIGxvYWRlZCB9O1xuICAgICAgICAgICAgcmV0dXJuIHt0eXBlOiBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzLCBsb2FkZWQ6IC0xIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU3RvcCB0aGUgdGltZXJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+ICRzdG9wLm5leHQoKSwgMTAwKTtcblxuICAgICAgICAgIC8vIFJldHVybiBmaW5hbCByZXNwb25zZVxuICAgICAgICAgIHJldHVybiBuZXcgSHR0cFJlc3BvbnNlKHtib2R5OiB7ZmluYWxOYW1lIDogZmlsZS5uYW1lfX0pO1xuICAgICAgICB9KVxuICAgICAgKVxuXG4gIH1cblxuICBhc3luYyBkZWxldGVGaWxlKGZpbGU6IEZpbGUpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zb2xlLmluZm8oJ1t0ZXN0aW5nXSBTaW11bGF0ZSByZW1vdGUgZGVsZXRpb24uLi4gKHdhaXRpbmcgMnMpJyk7XG4gICAgYXdhaXQgc2xlZXAoMjAwMCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdfQ==
@@ -314,6 +314,8 @@ function suggestFromStringArray(values, value, options) {
314
314
  function joinPropertiesPath(obj, properties, separator) {
315
315
  if (!obj)
316
316
  throw new Error('Could not display an undefined entity.');
317
+ if (!properties)
318
+ throw new Error('Missing \'properties\' argument');
317
319
  return properties
318
320
  .map(path => getPropertyByPath(obj, path))
319
321
  .filter(isNotNilOrBlank)
@@ -2892,23 +2894,6 @@ TranslatablePipe.decorators = [
2892
2894
  { type: Injectable }
2893
2895
  ];
2894
2896
 
2895
- class PropertyGetPipe {
2896
- transform(obj, args) {
2897
- return getPropertyByPath(obj,
2898
- // Path
2899
- args && (typeof args === 'string' ? args : args.key),
2900
- // Default value
2901
- args && args.defaultValue);
2902
- }
2903
- }
2904
- PropertyGetPipe.ɵprov = ɵɵdefineInjectable({ factory: function PropertyGetPipe_Factory() { return new PropertyGetPipe(); }, token: PropertyGetPipe, providedIn: "root" });
2905
- PropertyGetPipe.decorators = [
2906
- { type: Pipe, args: [{
2907
- name: 'propertyGet'
2908
- },] },
2909
- { type: Injectable, args: [{ providedIn: 'root' },] }
2910
- ];
2911
-
2912
2897
  class NgInitDirective {
2913
2898
  constructor() {
2914
2899
  this.ngInit = new EventEmitter();
@@ -4312,6 +4297,75 @@ FormGetValuePipe.ctorParameters = () => [
4312
4297
  { type: ChangeDetectorRef }
4313
4298
  ];
4314
4299
 
4300
+ class PropertyGetPipe {
4301
+ transform(obj, args) {
4302
+ return getPropertyByPath(obj,
4303
+ // Path
4304
+ args && (typeof args === 'string' ? args : args.key),
4305
+ // Default value
4306
+ args && args.defaultValue);
4307
+ }
4308
+ }
4309
+ PropertyGetPipe.decorators = [
4310
+ { type: Pipe, args: [{
4311
+ name: 'propertyGet'
4312
+ },] }
4313
+ ];
4314
+ class PropertyFormatPipe {
4315
+ constructor(dateFormat) {
4316
+ this.dateFormat = dateFormat;
4317
+ }
4318
+ transform(obj, keyOrDefinition) {
4319
+ var _a, _b;
4320
+ if (!obj)
4321
+ return '';
4322
+ const definition = keyOrDefinition && (typeof keyOrDefinition === 'object') && keyOrDefinition;
4323
+ const key = (definition === null || definition === void 0 ? void 0 : definition.key) || keyOrDefinition;
4324
+ if (!key) {
4325
+ // Should never occur
4326
+ console.warn('Invalid use of pipe \'formatProperty\': missing key or definition');
4327
+ return '';
4328
+ }
4329
+ const value = obj[key];
4330
+ if (isNil(value))
4331
+ return value;
4332
+ const type = (definition === null || definition === void 0 ? void 0 : definition.type) || typeof value;
4333
+ switch (type) {
4334
+ case 'date':
4335
+ return this.dateFormat.transform(value);
4336
+ case 'dateTime':
4337
+ return this.dateFormat.transform(value, { time: true });
4338
+ case 'enum':
4339
+ {
4340
+ // DEBUG
4341
+ // console.debug('formatProperty by definition (type='enum', key=' +definition.key+ '):', value );
4342
+ const item = (definition.values || [value]).find(item => (isNotNil(item.key) ? item.key : item) === value);
4343
+ return item.value || item;
4344
+ }
4345
+ case 'entity':
4346
+ {
4347
+ if ((_a = definition.autocomplete) === null || _a === void 0 ? void 0 : _a.displayWith) {
4348
+ return definition.autocomplete.displayWith(value);
4349
+ }
4350
+ return joinPropertiesPath(obj, ((_b = definition.autocomplete) === null || _b === void 0 ? void 0 : _b.attributes) || ['label', 'name']) || undefined;
4351
+ }
4352
+ case 'string':
4353
+ default:
4354
+ return value;
4355
+ }
4356
+ }
4357
+ }
4358
+ PropertyFormatPipe.ɵprov = ɵɵdefineInjectable({ factory: function PropertyFormatPipe_Factory() { return new PropertyFormatPipe(ɵɵinject(DateFormatPipe)); }, token: PropertyFormatPipe, providedIn: "root" });
4359
+ PropertyFormatPipe.decorators = [
4360
+ { type: Pipe, args: [{
4361
+ name: 'propertyFormat'
4362
+ },] },
4363
+ { type: Injectable, args: [{ providedIn: 'root' },] }
4364
+ ];
4365
+ PropertyFormatPipe.ctorParameters = () => [
4366
+ { type: DateFormatPipe }
4367
+ ];
4368
+
4315
4369
  class SharedPipesModule {
4316
4370
  }
4317
4371
  SharedPipesModule.decorators = [
@@ -4323,6 +4377,7 @@ SharedPipesModule.decorators = [
4323
4377
  ],
4324
4378
  declarations: [
4325
4379
  PropertyGetPipe,
4380
+ PropertyFormatPipe,
4326
4381
  DateFormatPipe,
4327
4382
  DateDiffDurationPipe,
4328
4383
  DurationPipe,
@@ -4359,10 +4414,12 @@ SharedPipesModule.decorators = [
4359
4414
  FormGetControlPipe,
4360
4415
  FormGetArrayPipe,
4361
4416
  FormGetGroupPipe,
4362
- FormGetValuePipe
4417
+ FormGetValuePipe,
4418
+ PropertyFormatPipe
4363
4419
  ],
4364
4420
  exports: [
4365
4421
  PropertyGetPipe,
4422
+ PropertyFormatPipe,
4366
4423
  DateFormatPipe,
4367
4424
  DateFromNowPipe,
4368
4425
  DateDiffDurationPipe,
@@ -4562,6 +4619,32 @@ DragAndDropDirective.propDecorators = {
4562
4619
  ondrop: [{ type: HostListener, args: ['drop', ['$event'],] }]
4563
4620
  };
4564
4621
 
4622
+ const compatibleTagNames = ['ion-label', 'mat-label'];
4623
+ class AutoTitleDirective {
4624
+ constructor(elementRef) {
4625
+ var _a;
4626
+ this.elementRef = elementRef;
4627
+ // Check compatible tag
4628
+ if (compatibleTagNames.includes((_a = elementRef.nativeElement.tagName) === null || _a === void 0 ? void 0 : _a.toLowerCase())) {
4629
+ this.element = elementRef.nativeElement;
4630
+ }
4631
+ }
4632
+ ngAfterContentChecked() {
4633
+ // Update title if different
4634
+ if (this.element && this.element.title !== this.element.textContent) {
4635
+ this.element.title = this.element.textContent;
4636
+ }
4637
+ }
4638
+ }
4639
+ AutoTitleDirective.decorators = [
4640
+ { type: Directive, args: [{
4641
+ selector: '[appAutoTitle]',
4642
+ },] }
4643
+ ];
4644
+ AutoTitleDirective.ctorParameters = () => [
4645
+ { type: ElementRef, decorators: [{ type: Inject, args: [ElementRef,] }] }
4646
+ ];
4647
+
4565
4648
  class SharedDirectivesModule {
4566
4649
  }
4567
4650
  SharedDirectivesModule.decorators = [
@@ -4573,12 +4656,14 @@ SharedDirectivesModule.decorators = [
4573
4656
  declarations: [
4574
4657
  AutofocusDirective,
4575
4658
  NgVarDirective,
4576
- DragAndDropDirective
4659
+ DragAndDropDirective,
4660
+ AutoTitleDirective
4577
4661
  ],
4578
4662
  exports: [
4579
4663
  AutofocusDirective,
4580
4664
  NgVarDirective,
4581
- DragAndDropDirective
4665
+ DragAndDropDirective,
4666
+ AutoTitleDirective
4582
4667
  ]
4583
4668
  },] }
4584
4669
  ];
@@ -15963,6 +16048,8 @@ class FilesUtils {
15963
16048
  return $progress.asObservable();
15964
16049
  }
15965
16050
  }
16051
+ FilesUtils.UTF8_BOM_CHAR = new Uint8Array([0xEF, 0xBB, 0xBF]); // UTF-8 BOM
16052
+
15966
16053
  class UriUtils {
15967
16054
  /**
15968
16055
  * Extract the filename, from an uri (using the last slash)
@@ -18081,6 +18168,91 @@ class JobUtils {
18081
18168
  }
18082
18169
  }
18083
18170
 
18171
+ //@dynamic
18172
+ class CsvUtils {
18173
+ static exportToFile(rows, opts) {
18174
+ if (!rows || !rows.length)
18175
+ return; // Skip if empty
18176
+ const filename = (opts === null || opts === void 0 ? void 0 : opts.filename) || 'export.csv';
18177
+ const charset = ((opts === null || opts === void 0 ? void 0 : opts.encoding) || 'utf-8').toLowerCase();
18178
+ const separator = (opts === null || opts === void 0 ? void 0 : opts.separator) || ',';
18179
+ const protectCellRegexp = new RegExp("/(\"|" + separator + "|\n)/g");
18180
+ const keys = Object.keys(rows[0]);
18181
+ const headers = (opts === null || opts === void 0 ? void 0 : opts.headers) || keys;
18182
+ const csvContent =
18183
+ // Header row
18184
+ headers.join(separator) + '\n' +
18185
+ // Data rows
18186
+ rows.map(row => {
18187
+ return keys.map(k => {
18188
+ const cell = row[k] === null || row[k] === undefined ? '' : row[k];
18189
+ let cellStr = cell instanceof Date
18190
+ ? cell.toLocaleString()
18191
+ : cell.toString().replace(/"/g, '""');
18192
+ if (protectCellRegexp.test(cellStr)) {
18193
+ cellStr = `"${cellStr}"`;
18194
+ }
18195
+ return cellStr;
18196
+ }).join(separator);
18197
+ }).join('\n');
18198
+ const blob = new Blob((charset === 'utf-8')
18199
+ // Add UTF-8 BOM character
18200
+ ? [FilesUtils.UTF8_BOM_CHAR, csvContent]
18201
+ // Non UTF-8 charset
18202
+ : [csvContent], { type: `text/csv;charset=${charset};` });
18203
+ if (navigator.msSaveBlob) { // IE 10+
18204
+ navigator.msSaveBlob(blob, filename);
18205
+ }
18206
+ else {
18207
+ const link = document.createElement('a');
18208
+ if (link.download !== undefined) {
18209
+ // Browsers that support HTML5 download attribute
18210
+ const url = URL.createObjectURL(blob);
18211
+ link.setAttribute('href', url);
18212
+ link.setAttribute('download', filename);
18213
+ link.style.visibility = 'hidden';
18214
+ document.body.appendChild(link);
18215
+ link.click();
18216
+ document.body.removeChild(link);
18217
+ }
18218
+ }
18219
+ }
18220
+ static parseFile(file, opts) {
18221
+ return FilesUtils.readAsText(file, opts === null || opts === void 0 ? void 0 : opts.encoding)
18222
+ .pipe(map(e => {
18223
+ if (e.type === HttpEventType.UploadProgress) {
18224
+ const loaded = Math.round(e.loaded * 0.8);
18225
+ return Object.assign(Object.assign({}, e), { loaded });
18226
+ }
18227
+ else if (e instanceof FileResponse) {
18228
+ const body = e.body;
18229
+ const data = CsvUtils.parseCSV(body, opts);
18230
+ return new FileResponse({ body: data });
18231
+ }
18232
+ }), filter(isNotNil));
18233
+ }
18234
+ static parseCSV(body, opts) {
18235
+ const separator = (opts === null || opts === void 0 ? void 0 : opts.separator) || ',';
18236
+ const skipEmptyLine = !opts || opts.skipEmptyLine !== false;
18237
+ // Protect special characters (quote and /n)
18238
+ body = body.replace('""', '<quote>') // Protect double quote
18239
+ .replace(/("[^\n"]+)\n\r?/gm, '"$1<br>') // Protect \n inside a quoted expression
18240
+ .replace(/\n\r/gm, '\n'); // Windows CR
18241
+ const headerAndRows = body.split('\n', 2);
18242
+ const headers = headerAndRows[0].split(separator);
18243
+ return body.split('\n') // split into rows
18244
+ .filter(line => !skipEmptyLine || line.trim().length > 0) // Skip empty line
18245
+ .map(line => {
18246
+ const cells = line.split(separator, headers.length) // split into cells
18247
+ .map(cell => cell.replace(/^"([^"]*)"$/, '$1')) // Clean trailing quotes
18248
+ .map(cell => cell.replace('<quote>', '"')) // restore protected quote
18249
+ .map(cell => cell.replace('<br>', '\n')) // restore protected br
18250
+ ;
18251
+ return cells;
18252
+ });
18253
+ }
18254
+ }
18255
+
18084
18256
  /**
18085
18257
  * Define here theme colors
18086
18258
  */
@@ -27792,5 +27964,5 @@ CoreTestingModule.decorators = [
27792
27964
  * Generated bundle index. Do not edit.
27793
27965
  */
27794
27966
 
27795
- export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_FORM_ERROR_I18N_KEYS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_MENU_ITEMS, APP_TESTING_PAGES, AboutModal, Account, AccountPage, AccountService, AccountToStringPipe, ActionsColumnComponent, AdminModule, AdminRoutingModule, Alerts, AndroidOsEnvironment, AnimationState, AppEditor, AppEditorOptions, AppEntityEditor, AppForm, AppFormField, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHelpModal, AppInMemoryTable, AppInstallUpgradeCard, AppListForm, AppLoadingSpinner, AppMenuModule, AppNullForm, AppPropertiesForm, AppTabEditor, AppTabEditorOptions, AppTable, AppTableDataSourceOptions, AppTableUtils, AppValidatorService, AppendToInputDirective, ArrayFilterPipe, ArrayFirstPipe, ArrayIncludesPipe, ArrayLengthPipe, ArrayPluckPipe, AudioProvider, AuthForm, AuthGuardService, AuthModal, AutocompleteTestPage, AutofocusDirective, Base58, BaseEntityService, BaseGraphqlService, BaseGraphqlServiceOptions, BaseReferential, Beans, CORE_CONFIG_OPTIONS, CORE_TESTING_PAGES, CellValueChangeListener, ChipsTestPage, Color, ColorScale, ComponentDirtyGuard, ConfigService, Configuration, CoreModule, CoreTestingModule, CryptoService, DATE_ISO_PATTERN, DATE_UNIX_MS_TIMESTAMP, DATE_UNIX_TIMESTAMP, DEFAULT_MENU_SHOW_WHEN, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLACEHOLDER_CHAR, DEFAULT_REQUIRED_COLUMNS, DateDiffDurationPipe, DateFormatPipe, DateFromNowPipe, DateTimeTestPage, DateUtils, Department, DepartmentToStringPipe, DragAndDropDirective, DurationPipe, ENTITIES_STORAGE_KEY_PREFIX, ENVIRONMENT, EmptyArrayPipe, EntitiesService, EntitiesStorage, EntitiesTableDataSource, Entity, EntityClass, EntityClasses, EntityFilter, EntityFilterUtils, EntityMetadataComponent, EntityStore, EntityUtils, Environment, EvenPipe, FileResponse, FileService, FileSizePipe, FilesUtils, FormArrayHelper, FormButtonsBarComponent, FormButtonsBarToken, FormErrorTranslatePipe, FormErrorTranslator, FormFieldValuesHolder, FormGetArrayPipe, FormGetControlPipe, FormGetGroupPipe, FormGetPipe, FormGetValuePipe, Fragments$1 as Fragments, GraphqlService, HAMMER_PRESS_TIME, HAMMER_TAP_TIME, HighlightPipe, HomePage, Hotkeys, HotkeysDialogComponent, InMemoryEntitiesService, IsLoginAccountPipe, IsNilOrBlankPipe, IsNotNilOrBlankPipe, IsNotOnFieldModePipe, IsOnFieldModePipe, JobUtils, KEYBOARD_HIDE_DELAY_MS, LAT_LONG_DEFAULT_MAX_DECIMALS, LAT_LONG_PATTERNS, LatLongFormatPipe, LatLongTestPage, LatitudeFormatPipe, LocalSettingsService, LongitudeFormatPipe, MINIFY_ENTITY_FOR_LOCAL_STORAGE, MINIFY_ENTITY_FOR_POD, MapGetPipe, MapKeysPipe, MapValuesPipe, MatAutocompleteConfigHolder, MatAutocompleteField, MatBadgeIconDirective, MatBooleanField, MatChipsField, MatDate, MatDateShort, MatDateTime, MatDuration, MatLatLongField, MatNumpadComponent, MatNumpadContainerComponent, MatNumpadContent, MatPaginatorI18n, MatStepperI18n, MatSwipeField, MaterialTestingModule, MathAbsPipe, MenuComponent, MenuItems, MenuService, Message, MessageFilter, MessageForm, MessageModal, MessageService, MessageTypeList, MessageTypes, MimeTypes, ModalToolbarComponent, NetworkService, NgInitDirective, NgVarDirective, NotEmptyArrayPipe, NumberFormatPipe, NumpadDirective, OddPipe, PRIORITIZED_AUTHORITIES, PUBKEY_REGEXP, Peer, Person, PersonFilter, PersonFragments, PersonService, PersonToStringPipe, PersonUtils, PersonValidatorService, PlatformService, ProgressBarService, ProgressInterceptor, PropertyGetPipe, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, Referential, ReferentialFilter, ReferentialRef, ReferentialUtils, ReferentialValidatorService, RegisterConfirmPage, SETTINGS_DISPLAY_COLUMNS, SETTINGS_FILTER, SETTINGS_PAGE_SIZE, SETTINGS_SORTED_COLUMN, SETTINGS_STORAGE_KEY, SETTINGS_TRANSIENT_PROPERTIES, SHARED_MATERIAL_TESTING_PAGES, SHARED_TESTING_PAGES, SPACE_PLACEHOLDER_CHAR, SelectPeerModal, SettingsPage, SharedAsyncValidators, SharedDirectivesModule, SharedFormArrayValidators, SharedFormGroupValidators, SharedHotkeysModule, SharedMatAutocompleteModule, SharedMatBadgeIconModule, SharedMatBooleanModule, SharedMatChipsModule, SharedMatDateTimeModule, SharedMatDurationModule, SharedMatLatLongModule, SharedMatNumpadModule, SharedMatSwipeModule, SharedMaterialModule, SharedModule, SharedPipesModule, SharedRoutingModule, SharedTestingModule, SharedTestsPage, SharedValidators, SocialErrorCodes, SocialModule, Software, StartableService, StatusById, StatusIds, StatusList, StrIncludesPipe, StrLengthPipe, SwipeTestPage, TableSelectColumnsComponent, TableTestPage, TableTestingModule, TextForm, TextPopover, TextPopoverTestingModule, TextPopoverTestingPage, ToStringPipe, Toasts, ToolbarComponent, ToolbarToken, TranslatablePipe, TranslateContextPipe, TranslateContextService, UploadFile, UploadFileComponent, UploadFilePopover, UploadFileTestingModule, UploadFileTestingPage, UriUtils, UserEvent, UserEventFilter, UserEventFragments, UserEventService, UserEventTypes, UserEventsTable, UserSettings, UsersPage, accountToString, adaptValueToControl, addValueInArray, arrayDistinct, arrayGroupBy, arraySize, asInputElement, canHaveFocus, capitalizeFirstLetter, chainPromises, changeCaseToUnderscore, clearValueInArray, copyEntity2Form, createPromiseEvent, createPromiseEventEmitter, departmentToString, departmentsToString, disableControls, emitPromiseEvent, entityToString, equals, equalsOrNil, escapeRegExp, fadeInAnimation, fadeInOutAnimation, filterFalse, filterNotNil, filterNumberInput, filterTrue, firstArrayValue, firstFalse, firstFalsePromise, firstNotNil, firstNotNilPromise, firstTrue, firstTruePromise, focusInput, focusNextInput, focusPreviousInput, formatLatitude, formatLongitude, fromDateISOString, fromScrollEndEvent, fromUnixMsTimestamp, fromUnixTimestamp, getCaretPosition, getColorContrast, getColorShade, getColorTint, getConnectionType, getControlFromPath, getFocusableInputElements, getFormErrors, getFormValueFromEntity, getProperty, getPropertyByPath, getPropertyByPathAsString, getRandomImage, hexToRgb, hexToRgbArray, isAndroid, isBlankString, isControlHasInput, isCordova, isEmptyArray, isIOS, isInputElement, isInstanceOf, isInt, isMobile, isNil, isNilOrBlank, isNilOrNaN, isNotEmptyArray, isNotNil, isNotNilBoolean, isNotNilOrBlank, isNotNilOrNaN, isNotNilString, isNumber, isNumberRange, isProgressEvent, isResponseEvent, isTouchUi, isWindows, joinProperties, joinPropertiesPath, logFormErrors, markAllAsTouched, markAsUntouched, markControlAsTouched, markFormGroupAsTouched, matchMedia, matchUpperCase, mergeLoadResult, mixHex, moment$5 as moment, moveInputCaretToSeparator, noTrailingSlash, notNilOrDefault, nullIfUndefined, parseLatitudeOrLongitude, propertiesPathComparator, propertyComparator, propertyPathComparator, referentialToString, referentialsToString, remove, removeAll, removeDiacritics, removeDuplicatesFromArray, removeEnd, removeValueInArray, replaceAll, resetCalculatedValue, resizeArray, rgbArrayToHex, rgbToHex, round, scrollFactory, selectInputContent, selectInputRange, setCalculatedValue, setTabIndex, sleep, slideInOutAnimation, slideUpDownAnimation, sort, splitById, splitByProperty, startsWithUpperCase, suggestFromArray, suggestFromStringArray, tabindexComparator, testUserAgent, toBoolean, toDateISOString, toDuration, toFloat, toInt, toNotNil, toNumber, trimEmptyToNull, tz, uncapitalizeFirstLetter, updateValueAndValidity, waitFor, waitForTrue, waitIdle, waitWhilePending, ɵ0, CustomReuseStrategy as ɵa, MatNumpadDomService as ɵb, isFocusableElement as ɵc, RegisterForm as ɵd, AccountValidatorService as ɵe, RegisterModal as ɵf, UserSettingsValidatorService as ɵg, LocalSettingsValidatorService as ɵh, AppUpdateOfflineModeCard as ɵi, AppIconComponent as ɵj, DateTestPage as ɵk, NumpadTestPage as ɵl, MatBadgeIconTestPage as ɵm, ToastTestingModule as ɵn, ToastTestingPage as ɵo };
27967
+ export { APP_ABOUT_DEVELOPERS, APP_ABOUT_PARTNERS, APP_CONFIG_OPTIONS, APP_FORM_ERROR_I18N_KEYS, APP_GRAPHQL_TYPE_POLICIES, APP_HOME_BUTTONS, APP_LOCALES, APP_LOCAL_SETTINGS, APP_LOCAL_SETTINGS_OPTIONS, APP_LOCAL_STORAGE_TYPE_POLICIES, APP_MENU_ITEMS, APP_TESTING_PAGES, AboutModal, Account, AccountPage, AccountService, AccountToStringPipe, ActionsColumnComponent, AdminModule, AdminRoutingModule, Alerts, AndroidOsEnvironment, AnimationState, AppEditor, AppEditorOptions, AppEntityEditor, AppForm, AppFormField, AppFormProvider, AppFormUtils, AppGestureConfig, AppGraphQLModule, AppHelpModal, AppInMemoryTable, AppInstallUpgradeCard, AppListForm, AppLoadingSpinner, AppMenuModule, AppNullForm, AppPropertiesForm, AppTabEditor, AppTabEditorOptions, AppTable, AppTableDataSourceOptions, AppTableUtils, AppValidatorService, AppendToInputDirective, ArrayFilterPipe, ArrayFirstPipe, ArrayIncludesPipe, ArrayLengthPipe, ArrayPluckPipe, AudioProvider, AuthForm, AuthGuardService, AuthModal, AutoTitleDirective, AutocompleteTestPage, AutofocusDirective, Base58, BaseEntityService, BaseGraphqlService, BaseGraphqlServiceOptions, BaseReferential, Beans, CORE_CONFIG_OPTIONS, CORE_TESTING_PAGES, CellValueChangeListener, ChipsTestPage, Color, ColorScale, ComponentDirtyGuard, ConfigService, Configuration, CoreModule, CoreTestingModule, CryptoService, CsvUtils, DATE_ISO_PATTERN, DATE_UNIX_MS_TIMESTAMP, DATE_UNIX_TIMESTAMP, DEFAULT_MENU_SHOW_WHEN, DEFAULT_PAGE_SIZE, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLACEHOLDER_CHAR, DEFAULT_REQUIRED_COLUMNS, DateDiffDurationPipe, DateFormatPipe, DateFromNowPipe, DateTimeTestPage, DateUtils, Department, DepartmentToStringPipe, DragAndDropDirective, DurationPipe, ENTITIES_STORAGE_KEY_PREFIX, ENVIRONMENT, EmptyArrayPipe, EntitiesService, EntitiesStorage, EntitiesTableDataSource, Entity, EntityClass, EntityClasses, EntityFilter, EntityFilterUtils, EntityMetadataComponent, EntityStore, EntityUtils, Environment, EvenPipe, FileResponse, FileService, FileSizePipe, FilesUtils, FormArrayHelper, FormButtonsBarComponent, FormButtonsBarToken, FormErrorTranslatePipe, FormErrorTranslator, FormFieldValuesHolder, FormGetArrayPipe, FormGetControlPipe, FormGetGroupPipe, FormGetPipe, FormGetValuePipe, Fragments$1 as Fragments, GraphqlService, HAMMER_PRESS_TIME, HAMMER_TAP_TIME, HighlightPipe, HomePage, Hotkeys, HotkeysDialogComponent, InMemoryEntitiesService, IsLoginAccountPipe, IsNilOrBlankPipe, IsNotNilOrBlankPipe, IsNotOnFieldModePipe, IsOnFieldModePipe, JobUtils, KEYBOARD_HIDE_DELAY_MS, LAT_LONG_DEFAULT_MAX_DECIMALS, LAT_LONG_PATTERNS, LatLongFormatPipe, LatLongTestPage, LatitudeFormatPipe, LocalSettingsService, LongitudeFormatPipe, MINIFY_ENTITY_FOR_LOCAL_STORAGE, MINIFY_ENTITY_FOR_POD, MapGetPipe, MapKeysPipe, MapValuesPipe, MatAutocompleteConfigHolder, MatAutocompleteField, MatBadgeIconDirective, MatBooleanField, MatChipsField, MatDate, MatDateShort, MatDateTime, MatDuration, MatLatLongField, MatNumpadComponent, MatNumpadContainerComponent, MatNumpadContent, MatPaginatorI18n, MatStepperI18n, MatSwipeField, MaterialTestingModule, MathAbsPipe, MenuComponent, MenuItems, MenuService, Message, MessageFilter, MessageForm, MessageModal, MessageService, MessageTypeList, MessageTypes, MimeTypes, ModalToolbarComponent, NetworkService, NgInitDirective, NgVarDirective, NotEmptyArrayPipe, NumberFormatPipe, NumpadDirective, OddPipe, PRIORITIZED_AUTHORITIES, PUBKEY_REGEXP, Peer, Person, PersonFilter, PersonFragments, PersonService, PersonToStringPipe, PersonUtils, PersonValidatorService, PlatformService, ProgressBarService, ProgressInterceptor, PropertyFormatPipe, PropertyGetPipe, RESERVED_END_COLUMNS, RESERVED_START_COLUMNS, Referential, ReferentialFilter, ReferentialRef, ReferentialUtils, ReferentialValidatorService, RegisterConfirmPage, SETTINGS_DISPLAY_COLUMNS, SETTINGS_FILTER, SETTINGS_PAGE_SIZE, SETTINGS_SORTED_COLUMN, SETTINGS_STORAGE_KEY, SETTINGS_TRANSIENT_PROPERTIES, SHARED_MATERIAL_TESTING_PAGES, SHARED_TESTING_PAGES, SPACE_PLACEHOLDER_CHAR, SelectPeerModal, SettingsPage, SharedAsyncValidators, SharedDirectivesModule, SharedFormArrayValidators, SharedFormGroupValidators, SharedHotkeysModule, SharedMatAutocompleteModule, SharedMatBadgeIconModule, SharedMatBooleanModule, SharedMatChipsModule, SharedMatDateTimeModule, SharedMatDurationModule, SharedMatLatLongModule, SharedMatNumpadModule, SharedMatSwipeModule, SharedMaterialModule, SharedModule, SharedPipesModule, SharedRoutingModule, SharedTestingModule, SharedTestsPage, SharedValidators, SocialErrorCodes, SocialModule, Software, StartableService, StatusById, StatusIds, StatusList, StrIncludesPipe, StrLengthPipe, SwipeTestPage, TableSelectColumnsComponent, TableTestPage, TableTestingModule, TextForm, TextPopover, TextPopoverTestingModule, TextPopoverTestingPage, ToStringPipe, Toasts, ToolbarComponent, ToolbarToken, TranslatablePipe, TranslateContextPipe, TranslateContextService, UploadFile, UploadFileComponent, UploadFilePopover, UploadFileTestingModule, UploadFileTestingPage, UriUtils, UserEvent, UserEventFilter, UserEventFragments, UserEventService, UserEventTypes, UserEventsTable, UserSettings, UsersPage, accountToString, adaptValueToControl, addValueInArray, arrayDistinct, arrayGroupBy, arraySize, asInputElement, canHaveFocus, capitalizeFirstLetter, chainPromises, changeCaseToUnderscore, clearValueInArray, copyEntity2Form, createPromiseEvent, createPromiseEventEmitter, departmentToString, departmentsToString, disableControls, emitPromiseEvent, entityToString, equals, equalsOrNil, escapeRegExp, fadeInAnimation, fadeInOutAnimation, filterFalse, filterNotNil, filterNumberInput, filterTrue, firstArrayValue, firstFalse, firstFalsePromise, firstNotNil, firstNotNilPromise, firstTrue, firstTruePromise, focusInput, focusNextInput, focusPreviousInput, formatLatitude, formatLongitude, fromDateISOString, fromScrollEndEvent, fromUnixMsTimestamp, fromUnixTimestamp, getCaretPosition, getColorContrast, getColorShade, getColorTint, getConnectionType, getControlFromPath, getFocusableInputElements, getFormErrors, getFormValueFromEntity, getProperty, getPropertyByPath, getPropertyByPathAsString, getRandomImage, hexToRgb, hexToRgbArray, isAndroid, isBlankString, isControlHasInput, isCordova, isEmptyArray, isIOS, isInputElement, isInstanceOf, isInt, isMobile, isNil, isNilOrBlank, isNilOrNaN, isNotEmptyArray, isNotNil, isNotNilBoolean, isNotNilOrBlank, isNotNilOrNaN, isNotNilString, isNumber, isNumberRange, isProgressEvent, isResponseEvent, isTouchUi, isWindows, joinProperties, joinPropertiesPath, logFormErrors, markAllAsTouched, markAsUntouched, markControlAsTouched, markFormGroupAsTouched, matchMedia, matchUpperCase, mergeLoadResult, mixHex, moment$5 as moment, moveInputCaretToSeparator, noTrailingSlash, notNilOrDefault, nullIfUndefined, parseLatitudeOrLongitude, propertiesPathComparator, propertyComparator, propertyPathComparator, referentialToString, referentialsToString, remove, removeAll, removeDiacritics, removeDuplicatesFromArray, removeEnd, removeValueInArray, replaceAll, resetCalculatedValue, resizeArray, rgbArrayToHex, rgbToHex, round, scrollFactory, selectInputContent, selectInputRange, setCalculatedValue, setTabIndex, sleep, slideInOutAnimation, slideUpDownAnimation, sort, splitById, splitByProperty, startsWithUpperCase, suggestFromArray, suggestFromStringArray, tabindexComparator, testUserAgent, toBoolean, toDateISOString, toDuration, toFloat, toInt, toNotNil, toNumber, trimEmptyToNull, tz, uncapitalizeFirstLetter, updateValueAndValidity, waitFor, waitForTrue, waitIdle, waitWhilePending, ɵ0, CustomReuseStrategy as ɵa, MatNumpadDomService as ɵb, isFocusableElement as ɵc, RegisterForm as ɵd, AccountValidatorService as ɵe, RegisterModal as ɵf, UserSettingsValidatorService as ɵg, LocalSettingsValidatorService as ɵh, AppUpdateOfflineModeCard as ɵi, AppIconComponent as ɵj, DateTestPage as ɵk, NumpadTestPage as ɵl, MatBadgeIconTestPage as ɵm, ToastTestingModule as ɵn, ToastTestingPage as ɵo };
27796
27968
  //# sourceMappingURL=sumaris-net.ngx-components.js.map