@ecodev/natural 45.5.0 → 46.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/esm2020/lib/classes/abstract-controller.mjs +2 -2
  2. package/esm2020/lib/classes/abstract-detail.mjs +10 -3
  3. package/esm2020/lib/classes/abstract-navigable-list.mjs +1 -1
  4. package/esm2020/lib/classes/rxjs.mjs +1 -1
  5. package/esm2020/lib/classes/validators.mjs +2 -2
  6. package/esm2020/lib/modules/avatar/service/avatar.service.mjs +2 -2
  7. package/esm2020/lib/modules/avatar/service/md5.mjs +4 -4
  8. package/esm2020/lib/modules/columns-picker/columns-picker-column.directive.mjs +1 -1
  9. package/esm2020/lib/modules/common/pipes/swiss-date.pipe.mjs +1 -1
  10. package/esm2020/lib/modules/dropdown-components/type-date/type-date.component.mjs +3 -3
  11. package/esm2020/lib/modules/dropdown-components/type-date-range/type-date-range.component.mjs +4 -4
  12. package/esm2020/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.mjs +1 -1
  13. package/esm2020/lib/modules/dropdown-components/type-text/type-text.component.mjs +2 -2
  14. package/esm2020/lib/modules/file/abstract-file.mjs +2 -2
  15. package/esm2020/lib/modules/file/component/file.component.mjs +32 -24
  16. package/esm2020/lib/modules/file/file-drop.directive.mjs +1 -1
  17. package/esm2020/lib/modules/file/file-select.directive.mjs +1 -1
  18. package/esm2020/lib/modules/fixed-button/fixed-button.component.mjs +2 -2
  19. package/esm2020/lib/modules/hierarchic-selector/classes/hierarchic-filters-configuration.mjs +1 -1
  20. package/esm2020/lib/modules/logger/error-handler.mjs +1 -1
  21. package/esm2020/lib/modules/panels/fallback-if-no-opened-panels.urlmatcher.mjs +2 -2
  22. package/esm2020/lib/modules/panels/panels.service.mjs +2 -2
  23. package/esm2020/lib/modules/panels/types.mjs +1 -1
  24. package/esm2020/lib/modules/relations/relations.component.mjs +2 -2
  25. package/esm2020/lib/modules/search/input/input.component.mjs +4 -4
  26. package/esm2020/lib/modules/search/search/search.component.mjs +2 -2
  27. package/esm2020/lib/modules/search/types/facet.mjs +1 -1
  28. package/esm2020/lib/modules/search/types/values.mjs +1 -1
  29. package/esm2020/lib/modules/select/abstract-select.component.mjs +2 -2
  30. package/esm2020/lib/modules/select/select/select.component.mjs +1 -1
  31. package/esm2020/lib/modules/select/select-enum/select-enum.component.mjs +1 -2
  32. package/esm2020/lib/modules/select/select-hierarchic/select-hierarchic.component.mjs +1 -1
  33. package/esm2020/lib/modules/sidenav/sidenav/sidenav.component.mjs +2 -3
  34. package/esm2020/lib/modules/sidenav/sidenav-content/sidenav-content.component.mjs +2 -3
  35. package/esm2020/lib/modules/sidenav/sidenav.service.mjs +1 -1
  36. package/esm2020/lib/modules/table-button/table-button.component.mjs +2 -2
  37. package/esm2020/lib/services/abstract-model.service.mjs +8 -1
  38. package/esm2020/lib/services/debounce.service.mjs +1 -1
  39. package/esm2020/lib/services/persistence.service.mjs +4 -2
  40. package/esm2020/lib/services/swiss-parsing-date-adapter.service.mjs +1 -1
  41. package/fesm2015/ecodev-natural.mjs +67 -46
  42. package/fesm2015/ecodev-natural.mjs.map +1 -1
  43. package/fesm2020/ecodev-natural.mjs +66 -46
  44. package/fesm2020/ecodev-natural.mjs.map +1 -1
  45. package/lib/classes/abstract-controller.d.ts +0 -1
  46. package/lib/modules/avatar/service/avatar.service.d.ts +0 -1
  47. package/lib/modules/dropdown-components/type-date-range/type-date-range.component.d.ts +1 -1
  48. package/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.d.ts +1 -2
  49. package/lib/modules/dropdown-components/type-text/type-text.component.d.ts +2 -2
  50. package/lib/modules/file/abstract-file.d.ts +1 -1
  51. package/lib/modules/file/component/file.component.d.ts +32 -9
  52. package/lib/modules/fixed-button/fixed-button.component.d.ts +0 -1
  53. package/lib/modules/hierarchic-selector/classes/hierarchic-filters-configuration.d.ts +1 -2
  54. package/lib/modules/panels/types.d.ts +1 -2
  55. package/lib/modules/relations/relations.component.d.ts +2 -2
  56. package/lib/modules/search/input/input.component.d.ts +6 -5
  57. package/lib/modules/search/search/search.component.d.ts +2 -2
  58. package/lib/modules/search/types/facet.d.ts +1 -2
  59. package/lib/modules/search/types/values.d.ts +2 -4
  60. package/lib/modules/select/abstract-select.component.d.ts +2 -2
  61. package/lib/modules/select/select-enum/select-enum.component.d.ts +0 -1
  62. package/lib/modules/sidenav/sidenav/sidenav.component.d.ts +0 -1
  63. package/lib/modules/sidenav/sidenav-content/sidenav-content.component.d.ts +0 -1
  64. package/lib/modules/table-button/table-button.component.d.ts +2 -2
  65. package/lib/services/debounce.service.d.ts +1 -1
  66. package/package.json +1 -1
@@ -98,7 +98,9 @@ export class NaturalPersistenceService {
98
98
  try {
99
99
  result = JSON.parse(value);
100
100
  }
101
- catch (e) { }
101
+ catch (e) {
102
+ // noop
103
+ }
102
104
  return this.isValid(key, storageKey, result) ? result : null;
103
105
  }
104
106
  }
@@ -118,4 +120,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImpor
118
120
  type: Inject,
119
121
  args: [NATURAL_PERSISTENCE_VALIDATOR]
120
122
  }] }]; } });
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc2lzdGVuY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9zZXJ2aWNlcy9wZXJzaXN0ZW5jZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFM0UsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNoQyxPQUFPLEVBQWlCLGVBQWUsRUFBQyxNQUFNLDJDQUEyQyxDQUFDOzs7QUFVMUYsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsSUFBSSxjQUFjLENBQzNELHVJQUF1SSxDQUMxSSxDQUFDO0FBS0YsTUFBTSxPQUFPLHlCQUF5QjtJQUNsQyxZQUNxQixNQUFjLEVBQ1csY0FBOEIsRUFDSixPQUE2QjtRQUZoRixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ1csbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQ0osWUFBTyxHQUFQLE9BQU8sQ0FBc0I7UUFFakcsZ0NBQWdDO1FBQ2hDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7O09BR0c7SUFDSSxPQUFPLENBQ1YsR0FBVyxFQUNYLEtBQWMsRUFDZCxLQUFxQixFQUNyQixVQUFrQixFQUNsQixnQkFBbUM7UUFFbkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDOUMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLEdBQUcsQ0FBQyxHQUFXLEVBQUUsS0FBcUIsRUFBRSxVQUFrQjtRQUM3RCxXQUFXO1FBQ1gsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDN0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDL0MsT0FBTyxNQUFNLENBQUM7U0FDakI7UUFFRCxlQUFlO1FBQ2YsTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0QyxPQUFPLE1BQU0sQ0FBQztTQUNqQjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNJLFVBQVUsQ0FBQyxHQUFXLEVBQUUsS0FBcUI7UUFDaEQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRS9DLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksWUFBWSxDQUNmLEdBQVcsRUFDWCxLQUFjLEVBQ2QsS0FBcUIsRUFDckIsZ0JBQW1DO1FBRW5DLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFbkYsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzNCLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3RCO2FBQU07WUFDSCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN2QztRQUVELGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLElBQUksRUFBRSxFQUFFLEVBQUMsVUFBVSxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7UUFFOUUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFTSxjQUFjLENBQUMsR0FBVyxFQUFFLFVBQWtCO1FBQ2pELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFL0UsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGdCQUFnQixDQUFDLEdBQVcsRUFBRSxLQUFjLEVBQUUsVUFBa0I7UUFDbkUsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7U0FDdkU7YUFBTTtZQUNILElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUMzRjtJQUNMLENBQUM7SUFFTyxhQUFhLENBQUMsR0FBVyxFQUFFLFVBQWtCO1FBQ2pELE9BQU8sVUFBVSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDbEMsQ0FBQztJQUVELHVDQUF1QztJQUN2Qyx3REFBd0Q7SUFDeEQsZ0lBQWdJO0lBQ3hILGFBQWEsQ0FBQyxLQUFjO1FBQ2hDLE9BQU8sS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDLENBQUMsOEJBQThCO0lBQ3hFLENBQUM7SUFFTyxXQUFXLENBQUksR0FBVyxFQUFFLFVBQXlCLEVBQUUsS0FBb0I7UUFDL0UsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNSLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSTtZQUNBLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlCO1FBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRTtRQUVkLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNqRSxDQUFDOztzSEEzSFEseUJBQXlCLHdDQUd0QixlQUFlLGFBQ0gsNkJBQTZCOzBIQUo1Qyx5QkFBeUIsY0FGdEIsTUFBTTsyRkFFVCx5QkFBeUI7a0JBSHJDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFJUSxNQUFNOzJCQUFDLGVBQWU7OzBCQUN0QixRQUFROzswQkFBSSxNQUFNOzJCQUFDLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgTmF2aWdhdGlvbkV4dHJhcywgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtjbG9uZX0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7TmF0dXJhbFN0b3JhZ2UsIFNFU1NJT05fU1RPUkFHRX0gZnJvbSAnLi4vbW9kdWxlcy9jb21tb24vc2VydmljZXMvbWVtb3J5LXN0b3JhZ2UnO1xuXG4vKipcbiAqIFZhbGlkYXRvciBmb3IgcGVyc2lzdGVkIHZhbHVlcyByZXRyaWV2ZWQgZnJvbSBOYXR1cmFsUGVyc2lzdGVuY2VTZXJ2aWNlLiBJZiByZXR1cm5zIGZhbHNlLCB0aGUgcGVyc2lzdGVkIHZhbHVlXG4gKiB3aWxsIGJlIGlnbm9yZWQsIGFuZCBpbnN0ZWFkIGBudWxsYCB3aWxsIGJlIHJldHVybmVkLlxuICpcbiAqIGBzdG9yYWdlS2V5YCBpcyBvbmx5IGdpdmVuIGlmIHRoZSB2YWx1ZSBpcyBjb21pbmcgZnJvbSBzZXNzaW9uIHN0b3JhZ2UgKGFuZCBub3QgZnJvbSBVUkwpLlxuICovXG5leHBvcnQgdHlwZSBQZXJzaXN0ZW5jZVZhbGlkYXRvciA9IChrZXk6IHN0cmluZywgc3RvcmFnZUtleTogc3RyaW5nIHwgbnVsbCwgdmFsdWU6IHVua25vd24pID0+IGJvb2xlYW47XG5cbmV4cG9ydCBjb25zdCBOQVRVUkFMX1BFUlNJU1RFTkNFX1ZBTElEQVRPUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxQZXJzaXN0ZW5jZVZhbGlkYXRvcj4oXG4gICAgJ1ZhbGlkYXRvciBmb3IgcGVyc2lzdGVkIHZhbHVlIHJldHJpZXZlZCBmcm9tIE5hdHVyYWxQZXJzaXN0ZW5jZVNlcnZpY2UuIElmIHJldHVybnMgZmFsc2UsIHRoZSBwZXJzaXN0ZWQgdmFsdWUgd2lsbCBuZXZlciBiZSByZXR1cm5lZC4nLFxuKTtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbFBlcnNpc3RlbmNlU2VydmljZSB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgICAgICBASW5qZWN0KFNFU1NJT05fU1RPUkFHRSkgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uU3RvcmFnZTogTmF0dXJhbFN0b3JhZ2UsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTkFUVVJBTF9QRVJTSVNURU5DRV9WQUxJREFUT1IpIHByaXZhdGUgcmVhZG9ubHkgaXNWYWxpZDogUGVyc2lzdGVuY2VWYWxpZGF0b3IsXG4gICAgKSB7XG4gICAgICAgIC8vIEJ5IGRlZmF1bHQsIGFueXRoaW5nIGlzIHZhbGlkXG4gICAgICAgIHRoaXMuaXNWYWxpZCA9IHRoaXMuaXNWYWxpZCA/PyAoKCkgPT4gdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGVyc2lzdCBpbiB1cmwgYW5kIGxvY2FsIHN0b3JhZ2UgdGhlIGdpdmVuIHZhbHVlIHdpdGggdGhlIGdpdmVuIGtleS5cbiAgICAgKiBXaGVuIHN0b3JlZCBpbiBzdG9yYWdlLCB3ZSBuZWVkIG1vcmUgXCJrZXlcIiB0byBpZGVudGlmeSB0aGUgY29udHJvbGxlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgcGVyc2lzdChcbiAgICAgICAga2V5OiBzdHJpbmcsXG4gICAgICAgIHZhbHVlOiB1bmtub3duLFxuICAgICAgICByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHN0b3JhZ2VLZXk6IHN0cmluZyxcbiAgICAgICAgbmF2aWdhdGlvbkV4dHJhcz86IE5hdmlnYXRpb25FeHRyYXMsXG4gICAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHRoaXMucGVyc2lzdEluU3RvcmFnZShrZXksIHZhbHVlLCBzdG9yYWdlS2V5KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyc2lzdEluVXJsKGtleSwgdmFsdWUsIHJvdXRlLCBuYXZpZ2F0aW9uRXh0cmFzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gb2JqZWN0IHdpdGggcGVyc2lzdGVkIGRhdGEgaW4gdXJsIG9yIGluIHNlc3Npb24gc3RvcmFnZVxuICAgICAqIFVybCBoYXMgcHJpb3JpdHkgb3ZlciBzZXNzaW9uIHN0b3JhZ2UgYmVjYXVzZSBvZiB1cmwgc2hhcmluZy4gV2hlbiB1cmwgaXMgcHJvdmlkZWQsIHNlc3Npb24gc3RvcmFnZSBpcyBpZ25vcmVkLlxuICAgICAqIFVybCBhbmQgc3RvcmFnZSBhcmUgc3luY2VkIHdoZW4gYXJyaXZpbmcgaW4gYSBjb21wb25lbnQgOlxuICAgICAqICAtIFdoZW4gbG9hZGluZyB3aXRoIHVybCBwYXJhbWV0ZXJzLCBzdG9yYWdlIGlzIHVwZGF0ZWQgdG8gc3RheSBzeW5jZWRcbiAgICAgKiAgLSBXaGVuIGxvYWRpbmcgd2l0aG91dCB1cmwsIGJ1dCB3aXRoIHN0b3JhZ2UgZGF0YSwgdGhlIHVybCBpcyB1cGRhdGVkXG4gICAgICovXG4gICAgcHVibGljIGdldChrZXk6IHN0cmluZywgcm91dGU6IEFjdGl2YXRlZFJvdXRlLCBzdG9yYWdlS2V5OiBzdHJpbmcpOiBhbnkgfCBudWxsIHtcbiAgICAgICAgLy8gRnJvbSB1cmxcbiAgICAgICAgbGV0IHBhcmFtcyA9IHRoaXMuZ2V0RnJvbVVybChrZXksIHJvdXRlKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzRmFsc2V5VmFsdWUocGFyYW1zKSkge1xuICAgICAgICAgICAgdGhpcy5wZXJzaXN0SW5TdG9yYWdlKGtleSwgcGFyYW1zLCBzdG9yYWdlS2V5KTtcbiAgICAgICAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGcm9tIHN0b3JhZ2VcbiAgICAgICAgcGFyYW1zID0gdGhpcy5nZXRGcm9tU3RvcmFnZShrZXksIHN0b3JhZ2VLZXkpO1xuICAgICAgICBpZiAoIXRoaXMuaXNGYWxzZXlWYWx1ZShwYXJhbXMpKSB7XG4gICAgICAgICAgICB0aGlzLnBlcnNpc3RJblVybChrZXksIHBhcmFtcywgcm91dGUpO1xuICAgICAgICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBnaXZlbiBrZXkgZnJvbSB0aGUgdXJsIHBhcmFtZXRlcnNcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RnJvbVVybChrZXk6IHN0cmluZywgcm91dGU6IEFjdGl2YXRlZFJvdXRlKTogYW55IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KGtleSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVzZXJpYWxpemUoa2V5LCBudWxsLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkL292ZXJyaWRlIGdpdmVuIHBhaXIga2V5LXZhbHVlIGluIHRoZSB1cmxcbiAgICAgKiBBbHdheXMgSlNPTi5zdHJpbmdpZnkoKSB0aGUgZ2l2ZW4gdmFsdWVcbiAgICAgKiBJZiB0aGUgdmFsdWUgaXMgZmFsc2V5LCB0aGUgcGFpciBrZXktdmFsdWUgaXMgcmVtb3ZlZCBmcm9tIHRoZSB1cmwuXG4gICAgICovXG4gICAgcHVibGljIHBlcnNpc3RJblVybChcbiAgICAgICAga2V5OiBzdHJpbmcsXG4gICAgICAgIHZhbHVlOiB1bmtub3duLFxuICAgICAgICByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIG5hdmlnYXRpb25FeHRyYXM/OiBOYXZpZ2F0aW9uRXh0cmFzLFxuICAgICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBjbG9uZShyb3V0ZS5zbmFwc2hvdC51cmxbcm91dGUuc25hcHNob3QudXJsLmxlbmd0aCAtIDFdLnBhcmFtZXRlcnMpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzRmFsc2V5VmFsdWUodmFsdWUpKSB7XG4gICAgICAgICAgICBkZWxldGUgcGFyYW1zW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJhbXNba2V5XSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5hdmlnYXRpb25FeHRyYXMgPSBPYmplY3QuYXNzaWduKG5hdmlnYXRpb25FeHRyYXMgfHwge30sIHtyZWxhdGl2ZVRvOiByb3V0ZX0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4nLCBwYXJhbXNdLCBuYXZpZ2F0aW9uRXh0cmFzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RnJvbVN0b3JhZ2Uoa2V5OiBzdHJpbmcsIHN0b3JhZ2VLZXk6IHN0cmluZyk6IGFueSB8IG51bGwge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmdldFN0b3JhZ2VLZXkoa2V5LCBzdG9yYWdlS2V5KSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVzZXJpYWxpemUoa2V5LCBzdG9yYWdlS2V5LCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3RvcmUgdmFsdWUgaW4gc2Vzc2lvbiBzdG9yYWdlLlxuICAgICAqIElmIHZhbHVlIGlzIGZhbHN5LCB0aGUgZW50cnkgaXMgcmVtb3ZlZFxuICAgICAqL1xuICAgIHB1YmxpYyBwZXJzaXN0SW5TdG9yYWdlKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgc3RvcmFnZUtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzRmFsc2V5VmFsdWUodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5nZXRTdG9yYWdlS2V5KGtleSwgc3RvcmFnZUtleSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMuZ2V0U3RvcmFnZUtleShrZXksIHN0b3JhZ2VLZXkpLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTdG9yYWdlS2V5KGtleTogc3RyaW5nLCBzdG9yYWdlS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gc3RvcmFnZUtleSArICctJyArIGtleTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBmYWxzZXlcbiAgICAvLyBGYWxzZXkgdmFsdWVzIGFyZSA6IG51bGwsIHVuZGVmaW5lZCBhbmQgZW1wdHkgc3RyaW5nLlxuICAgIC8vIFRoaXMgY2F1c2UgdXN1YWxseSB0aGUgcGFyYW1ldGVyIHRvIGJlIHJlbW92ZWQgZnJvbSB1cmwvc3RvcmFnZSBpbnN0ZWFkIG9mIGJlaW5nIHN0b3JlZCB3aXRoIG5vIHZhbHVlLiBVcmwgd291bGQgYmUgcG9sbHV0ZWQuXG4gICAgcHJpdmF0ZSBpc0ZhbHNleVZhbHVlKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJzsgLy8gPT0gbWVhbnMgbnVsbCBvciB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXNlcmlhbGl6ZTxUPihrZXk6IHN0cmluZywgc3RvcmFnZUtleTogc3RyaW5nIHwgbnVsbCwgdmFsdWU6IHN0cmluZyB8IG51bGwpOiB1bmtub3duIHwgbnVsbCB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3VsdCA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXN1bHQgPSBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cblxuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKGtleSwgc3RvcmFnZUtleSwgcmVzdWx0KSA/IHJlc3VsdCA6IG51bGw7XG4gICAgfVxufVxuIl19
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc2lzdGVuY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9zZXJ2aWNlcy9wZXJzaXN0ZW5jZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFM0UsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNoQyxPQUFPLEVBQWlCLGVBQWUsRUFBQyxNQUFNLDJDQUEyQyxDQUFDOzs7QUFVMUYsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsSUFBSSxjQUFjLENBQzNELHVJQUF1SSxDQUMxSSxDQUFDO0FBS0YsTUFBTSxPQUFPLHlCQUF5QjtJQUNsQyxZQUNxQixNQUFjLEVBQ1csY0FBOEIsRUFDSixPQUE2QjtRQUZoRixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ1csbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQ0osWUFBTyxHQUFQLE9BQU8sQ0FBc0I7UUFFakcsZ0NBQWdDO1FBQ2hDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7O09BR0c7SUFDSSxPQUFPLENBQ1YsR0FBVyxFQUNYLEtBQWMsRUFDZCxLQUFxQixFQUNyQixVQUFrQixFQUNsQixnQkFBbUM7UUFFbkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDOUMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLEdBQUcsQ0FBQyxH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LFVBQWtCO1FBQ2pELE9BQU8sVUFBVSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDbEMsQ0FBQztJQUVELHVDQUF1QztJQUN2Qyx3REFBd0Q7SUFDeEQsZ0lBQWdJO0lBQ3hILGFBQWEsQ0FBQyxLQUFjO1FBQ2hDLE9BQU8sS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDLENBQUMsOEJBQThCO0lBQ3hFLENBQUM7SUFFTyxXQUFXLENBQUMsR0FBVyxFQUFFLFVBQXlCLEVBQUUsS0FBb0I7UUFDNUUsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNSLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSTtZQUNBLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlCO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDUixPQUFPO1NBQ1Y7UUFFRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDakUsQ0FBQzs7c0hBN0hRLHlCQUF5Qix3Q0FHdEIsZUFBZSxhQUNILDZCQUE2QjswSEFKNUMseUJBQXlCLGNBRnRCLE1BQU07MkZBRVQseUJBQXlCO2tCQUhyQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBSVEsTUFBTTsyQkFBQyxlQUFlOzswQkFDdEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FeHRyYXMsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7Y2xvbmV9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge05hdHVyYWxTdG9yYWdlLCBTRVNTSU9OX1NUT1JBR0V9IGZyb20gJy4uL21vZHVsZXMvY29tbW9uL3NlcnZpY2VzL21lbW9yeS1zdG9yYWdlJztcblxuLyoqXG4gKiBWYWxpZGF0b3IgZm9yIHBlcnNpc3RlZCB2YWx1ZXMgcmV0cmlldmVkIGZyb20gTmF0dXJhbFBlcnNpc3RlbmNlU2VydmljZS4gSWYgcmV0dXJucyBmYWxzZSwgdGhlIHBlcnNpc3RlZCB2YWx1ZVxuICogd2lsbCBiZSBpZ25vcmVkLCBhbmQgaW5zdGVhZCBgbnVsbGAgd2lsbCBiZSByZXR1cm5lZC5cbiAqXG4gKiBgc3RvcmFnZUtleWAgaXMgb25seSBnaXZlbiBpZiB0aGUgdmFsdWUgaXMgY29taW5nIGZyb20gc2Vzc2lvbiBzdG9yYWdlIChhbmQgbm90IGZyb20gVVJMKS5cbiAqL1xuZXhwb3J0IHR5cGUgUGVyc2lzdGVuY2VWYWxpZGF0b3IgPSAoa2V5OiBzdHJpbmcsIHN0b3JhZ2VLZXk6IHN0cmluZyB8IG51bGwsIHZhbHVlOiB1bmtub3duKSA9PiBib29sZWFuO1xuXG5leHBvcnQgY29uc3QgTkFUVVJBTF9QRVJTSVNURU5DRV9WQUxJREFUT1IgPSBuZXcgSW5qZWN0aW9uVG9rZW48UGVyc2lzdGVuY2VWYWxpZGF0b3I+KFxuICAgICdWYWxpZGF0b3IgZm9yIHBlcnNpc3RlZCB2YWx1ZSByZXRyaWV2ZWQgZnJvbSBOYXR1cmFsUGVyc2lzdGVuY2VTZXJ2aWNlLiBJZiByZXR1cm5zIGZhbHNlLCB0aGUgcGVyc2lzdGVkIHZhbHVlIHdpbGwgbmV2ZXIgYmUgcmV0dXJuZWQuJyxcbik7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxQZXJzaXN0ZW5jZVNlcnZpY2Uge1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgQEluamVjdChTRVNTSU9OX1NUT1JBR0UpIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblN0b3JhZ2U6IE5hdHVyYWxTdG9yYWdlLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE5BVFVSQUxfUEVSU0lTVEVOQ0VfVkFMSURBVE9SKSBwcml2YXRlIHJlYWRvbmx5IGlzVmFsaWQ6IFBlcnNpc3RlbmNlVmFsaWRhdG9yLFxuICAgICkge1xuICAgICAgICAvLyBCeSBkZWZhdWx0LCBhbnl0aGluZyBpcyB2YWxpZFxuICAgICAgICB0aGlzLmlzVmFsaWQgPSB0aGlzLmlzVmFsaWQgPz8gKCgpID0+IHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBlcnNpc3QgaW4gdXJsIGFuZCBsb2NhbCBzdG9yYWdlIHRoZSBnaXZlbiB2YWx1ZSB3aXRoIHRoZSBnaXZlbiBrZXkuXG4gICAgICogV2hlbiBzdG9yZWQgaW4gc3RvcmFnZSwgd2UgbmVlZCBtb3JlIFwia2V5XCIgdG8gaWRlbnRpZnkgdGhlIGNvbnRyb2xsZXIuXG4gICAgICovXG4gICAgcHVibGljIHBlcnNpc3QoXG4gICAgICAgIGtleTogc3RyaW5nLFxuICAgICAgICB2YWx1ZTogdW5rbm93bixcbiAgICAgICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBzdG9yYWdlS2V5OiBzdHJpbmcsXG4gICAgICAgIG5hdmlnYXRpb25FeHRyYXM/OiBOYXZpZ2F0aW9uRXh0cmFzLFxuICAgICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICB0aGlzLnBlcnNpc3RJblN0b3JhZ2Uoa2V5LCB2YWx1ZSwgc3RvcmFnZUtleSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBlcnNpc3RJblVybChrZXksIHZhbHVlLCByb3V0ZSwgbmF2aWdhdGlvbkV4dHJhcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIG9iamVjdCB3aXRoIHBlcnNpc3RlZCBkYXRhIGluIHVybCBvciBpbiBzZXNzaW9uIHN0b3JhZ2VcbiAgICAgKiBVcmwgaGFzIHByaW9yaXR5IG92ZXIgc2Vzc2lvbiBzdG9yYWdlIGJlY2F1c2Ugb2YgdXJsIHNoYXJpbmcuIFdoZW4gdXJsIGlzIHByb3ZpZGVkLCBzZXNzaW9uIHN0b3JhZ2UgaXMgaWdub3JlZC5cbiAgICAgKiBVcmwgYW5kIHN0b3JhZ2UgYXJlIHN5bmNlZCB3aGVuIGFycml2aW5nIGluIGEgY29tcG9uZW50IDpcbiAgICAgKiAgLSBXaGVuIGxvYWRpbmcgd2l0aCB1cmwgcGFyYW1ldGVycywgc3RvcmFnZSBpcyB1cGRhdGVkIHRvIHN0YXkgc3luY2VkXG4gICAgICogIC0gV2hlbiBsb2FkaW5nIHdpdGhvdXQgdXJsLCBidXQgd2l0aCBzdG9yYWdlIGRhdGEsIHRoZSB1cmwgaXMgdXBkYXRlZFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQoa2V5OiBzdHJpbmcsIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSwgc3RvcmFnZUtleTogc3RyaW5nKTogYW55IHwgbnVsbCB7XG4gICAgICAgIC8vIEZyb20gdXJsXG4gICAgICAgIGxldCBwYXJhbXMgPSB0aGlzLmdldEZyb21Vcmwoa2V5LCByb3V0ZSk7XG4gICAgICAgIGlmICghdGhpcy5pc0ZhbHNleVZhbHVlKHBhcmFtcykpIHtcbiAgICAgICAgICAgIHRoaXMucGVyc2lzdEluU3RvcmFnZShrZXksIHBhcmFtcywgc3RvcmFnZUtleSk7XG4gICAgICAgICAgICByZXR1cm4gcGFyYW1zO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRnJvbSBzdG9yYWdlXG4gICAgICAgIHBhcmFtcyA9IHRoaXMuZ2V0RnJvbVN0b3JhZ2Uoa2V5LCBzdG9yYWdlS2V5KTtcbiAgICAgICAgaWYgKCF0aGlzLmlzRmFsc2V5VmFsdWUocGFyYW1zKSkge1xuICAgICAgICAgICAgdGhpcy5wZXJzaXN0SW5Vcmwoa2V5LCBwYXJhbXMsIHJvdXRlKTtcbiAgICAgICAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgZ2l2ZW4ga2V5IGZyb20gdGhlIHVybCBwYXJhbWV0ZXJzXG4gICAgICovXG4gICAgcHVibGljIGdldEZyb21Vcmwoa2V5OiBzdHJpbmcsIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSk6IGFueSB8IG51bGwge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldChrZXkpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmRlc2VyaWFsaXplKGtleSwgbnVsbCwgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZC9vdmVycmlkZSBnaXZlbiBwYWlyIGtleS12YWx1ZSBpbiB0aGUgdXJsXG4gICAgICogQWx3YXlzIEpTT04uc3RyaW5naWZ5KCkgdGhlIGdpdmVuIHZhbHVlXG4gICAgICogSWYgdGhlIHZhbHVlIGlzIGZhbHNleSwgdGhlIHBhaXIga2V5LXZhbHVlIGlzIHJlbW92ZWQgZnJvbSB0aGUgdXJsLlxuICAgICAqL1xuICAgIHB1YmxpYyBwZXJzaXN0SW5VcmwoXG4gICAgICAgIGtleTogc3RyaW5nLFxuICAgICAgICB2YWx1ZTogdW5rbm93bixcbiAgICAgICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBuYXZpZ2F0aW9uRXh0cmFzPzogTmF2aWdhdGlvbkV4dHJhcyxcbiAgICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gY2xvbmUocm91dGUuc25hcHNob3QudXJsW3JvdXRlLnNuYXBzaG90LnVybC5sZW5ndGggLSAxXS5wYXJhbWV0ZXJzKTtcblxuICAgICAgICBpZiAodGhpcy5pc0ZhbHNleVZhbHVlKHZhbHVlKSkge1xuICAgICAgICAgICAgZGVsZXRlIHBhcmFtc1trZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyYW1zW2tleV0gPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBuYXZpZ2F0aW9uRXh0cmFzID0gT2JqZWN0LmFzc2lnbihuYXZpZ2F0aW9uRXh0cmFzIHx8IHt9LCB7cmVsYXRpdmVUbzogcm91dGV9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuJywgcGFyYW1zXSwgbmF2aWdhdGlvbkV4dHJhcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZyb21TdG9yYWdlKGtleTogc3RyaW5nLCBzdG9yYWdlS2V5OiBzdHJpbmcpOiBhbnkgfCBudWxsIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5nZXRTdG9yYWdlS2V5KGtleSwgc3RvcmFnZUtleSkpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmRlc2VyaWFsaXplKGtleSwgc3RvcmFnZUtleSwgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN0b3JlIHZhbHVlIGluIHNlc3Npb24gc3RvcmFnZS5cbiAgICAgKiBJZiB2YWx1ZSBpcyBmYWxzeSwgdGhlIGVudHJ5IGlzIHJlbW92ZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgcGVyc2lzdEluU3RvcmFnZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIHN0b3JhZ2VLZXk6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0ZhbHNleVZhbHVlKHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuZ2V0U3RvcmFnZUtleShrZXksIHN0b3JhZ2VLZXkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmdldFN0b3JhZ2VLZXkoa2V5LCBzdG9yYWdlS2V5KSwgSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U3RvcmFnZUtleShrZXk6IHN0cmluZywgc3RvcmFnZUtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHN0b3JhZ2VLZXkgKyAnLScgKyBrZXk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgZmFsc2V5XG4gICAgLy8gRmFsc2V5IHZhbHVlcyBhcmUgOiBudWxsLCB1bmRlZmluZWQgYW5kIGVtcHR5IHN0cmluZy5cbiAgICAvLyBUaGlzIGNhdXNlIHVzdWFsbHkgdGhlIHBhcmFtZXRlciB0byBiZSByZW1vdmVkIGZyb20gdXJsL3N0b3JhZ2UgaW5zdGVhZCBvZiBiZWluZyBzdG9yZWQgd2l0aCBubyB2YWx1ZS4gVXJsIHdvdWxkIGJlIHBvbGx1dGVkLlxuICAgIHByaXZhdGUgaXNGYWxzZXlWYWx1ZSh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJyc7IC8vID09IG1lYW5zIG51bGwgb3IgdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVzZXJpYWxpemUoa2V5OiBzdHJpbmcsIHN0b3JhZ2VLZXk6IHN0cmluZyB8IG51bGwsIHZhbHVlOiBzdHJpbmcgfCBudWxsKTogdW5rbm93biB8IG51bGwge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoa2V5LCBzdG9yYWdlS2V5LCByZXN1bHQpID8gcmVzdWx0IDogbnVsbDtcbiAgICB9XG59XG4iXX0=
@@ -60,4 +60,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImpor
60
60
  providedIn: 'root',
61
61
  }]
62
62
  }] });
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpc3MtcGFyc2luZy1kYXRlLWFkYXB0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9zZXJ2aWNlcy9zd2lzcy1wYXJzaW5nLWRhdGUtYWRhcHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7O0FBRXpELE1BQU0sUUFBUSxHQUFzQjtJQUNoQyw0REFBNEQ7SUFDNUQsMERBQTBEO0lBQzFELDREQUE0RDtJQUM1RCw0REFBNEQ7SUFDNUQsb0JBQW9CO0lBQ3BCLGdEQUFnRDtDQUNuRCxDQUFDO0FBS0YsTUFBTSxPQUFPLDhCQUErQixTQUFRLGlCQUFpQjtJQUNqRTs7Ozs7O09BTUc7SUFDSSxLQUFLLENBQUMsS0FBYztRQUN2QixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUMzQixPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzFCO1FBRUQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDM0IsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBRTdCLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFO2dCQUM1QixNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUU7b0JBQ1gsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDNUIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztvQkFDOUIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztvQkFFMUIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztpQkFDbkQ7YUFDSjtTQUNKO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVPLGlCQUFpQixDQUFDLElBQVksRUFBRSxLQUFhLEVBQUUsSUFBWTtRQUMvRCxzQ0FBc0M7UUFDdEMsSUFBSSxJQUFJLEdBQUcsR0FBRyxFQUFFO1lBQ1osSUFBSSxJQUFJLElBQUksQ0FBQztTQUNoQjtRQUVELEtBQUssR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRTtZQUN0RCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztTQUM3QztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxpQkFBaUI7UUFDcEIsNkZBQTZGO1FBQzdGLG9EQUFvRDtRQUNwRCxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7OzJIQWpEUSw4QkFBOEI7K0hBQTlCLDhCQUE4QixjQUYzQixNQUFNOzJGQUVULDhCQUE4QjtrQkFIMUMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOYXRpdmVEYXRlQWRhcHRlcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5cbmNvbnN0IHBhdHRlcm5zOiByZWFkb25seSBSZWdFeHBbXSA9IFtcbiAgICAvXig/PGRheT5cXGR7MSwyfSlcXC4oPzxtb250aD5cXGR7MSwyfSlcXC4oPzx5ZWFyPlxcZHs0fXxcXGR7Mn0pJC8sXG4gICAgL14oPzxkYXk+XFxkezEsMn0pLSg/PG1vbnRoPlxcZHsxLDJ9KS0oPzx5ZWFyPlxcZHs0fXxcXGR7Mn0pJC8sXG4gICAgL14oPzxkYXk+XFxkezEsMn0pXFwvKD88bW9udGg+XFxkezEsMn0pXFwvKD88eWVhcj5cXGR7NH18XFxkezJ9KSQvLFxuICAgIC9eKD88ZGF5PlxcZHsxLDJ9KVxcXFwoPzxtb250aD5cXGR7MSwyfSlcXFxcKD88eWVhcj5cXGR7NH18XFxkezJ9KSQvLFxuICAgIC8vIHN0cmljdCBJU08gZm9ybWF0XG4gICAgL14oPzx5ZWFyPlxcZHs0fSktKD88bW9udGg+XFxkezJ9KS0oPzxkYXk+XFxkezJ9KSQvLFxuXTtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbFN3aXNzUGFyc2luZ0RhdGVBZGFwdGVyIGV4dGVuZHMgTmF0aXZlRGF0ZUFkYXB0ZXIge1xuICAgIC8qKlxuICAgICAqIFBhcnNlIGNvbW1vbmx5IGFjY2VwdGVkIHN3aXNzIGZvcm1hdCwgc3VjaCBhczpcbiAgICAgKlxuICAgICAqIC0gMjQuMTIuMjAxOFxuICAgICAqIC0gMS40LjE4XG4gICAgICogLSAyMDE4LTEyLTI0XG4gICAgICovXG4gICAgcHVibGljIHBhcnNlKHZhbHVlOiB1bmtub3duKTogRGF0ZSB8IG51bGwge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCB0cmltbWVkID0gdmFsdWUudHJpbSgpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtID0gdHJpbW1lZC5tYXRjaChwYXR0ZXJuKTtcbiAgICAgICAgICAgICAgICBpZiAobT8uZ3JvdXBzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHllYXIgPSArbS5ncm91cHMueWVhcjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9udGggPSArbS5ncm91cHMubW9udGg7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheSA9ICttLmdyb3Vwcy5kYXk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRGF0ZUlmVmFsaWQoeWVhciwgbW9udGgsIGRheSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVEYXRlSWZWYWxpZCh5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIsIGRhdGU6IG51bWJlcik6IERhdGUgfCBudWxsIHtcbiAgICAgICAgLy8gQXNzdW1lIHllYXIgMjAwMCBpZiBvbmx5IHR3byBkaWdpdHNcbiAgICAgICAgaWYgKHllYXIgPCAxMDApIHtcbiAgICAgICAgICAgIHllYXIgKz0gMjAwMDtcbiAgICAgICAgfVxuXG4gICAgICAgIG1vbnRoID0gbW9udGggLSAxO1xuICAgICAgICBpZiAobW9udGggPj0gMCAmJiBtb250aCA8PSAxMSAmJiBkYXRlID49IDEgJiYgZGF0ZSA8PSAzMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Rmlyc3REYXlPZldlZWsoKTogbnVtYmVyIHtcbiAgICAgICAgLy8gQWx3YXlzIHN0YXJ0cyBvbiBNb25kYXksIGV2ZW4gdGhvdWdoIGl0IGlzIG5vdCB0cnVlIGZvciBDYW5hZGEsIFUuUy4sIE1leGljbyBhbmQgbWFueSBtb3JlXG4gICAgICAgIC8vIEFsc28gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L2VjbWE0MDIvaXNzdWVzLzZcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxufVxuIl19
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpc3MtcGFyc2luZy1kYXRlLWFkYXB0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9zZXJ2aWNlcy9zd2lzcy1wYXJzaW5nLWRhdGUtYWRhcHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7O0FBRXpELE1BQU0sUUFBUSxHQUFzQjtJQUNoQyw0REFBNEQ7SUFDNUQsMERBQTBEO0lBQzFELDREQUE0RDtJQUM1RCw0REFBNEQ7SUFDNUQsb0JBQW9CO0lBQ3BCLGdEQUFnRDtDQUNuRCxDQUFDO0FBS0YsTUFBTSxPQUFPLDhCQUErQixTQUFRLGlCQUFpQjtJQUNqRTs7Ozs7O09BTUc7SUFDYSxLQUFLLENBQUMsS0FBYztRQUNoQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUMzQixPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzFCO1FBRUQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDM0IsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBRTdCLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFO2dCQUM1QixNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUU7b0JBQ1gsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDNUIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztvQkFDOUIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztvQkFFMUIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztpQkFDbkQ7YUFDSjtTQUNKO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVPLGlCQUFpQixDQUFDLElBQVksRUFBRSxLQUFhLEVBQUUsSUFBWTtRQUMvRCxzQ0FBc0M7UUFDdEMsSUFBSSxJQUFJLEdBQUcsR0FBRyxFQUFFO1lBQ1osSUFBSSxJQUFJLElBQUksQ0FBQztTQUNoQjtRQUVELEtBQUssR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRTtZQUN0RCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztTQUM3QztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFZSxpQkFBaUI7UUFDN0IsNkZBQTZGO1FBQzdGLG9EQUFvRDtRQUNwRCxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7OzJIQWpEUSw4QkFBOEI7K0hBQTlCLDhCQUE4QixjQUYzQixNQUFNOzJGQUVULDhCQUE4QjtrQkFIMUMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOYXRpdmVEYXRlQWRhcHRlcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5cbmNvbnN0IHBhdHRlcm5zOiByZWFkb25seSBSZWdFeHBbXSA9IFtcbiAgICAvXig/PGRheT5cXGR7MSwyfSlcXC4oPzxtb250aD5cXGR7MSwyfSlcXC4oPzx5ZWFyPlxcZHs0fXxcXGR7Mn0pJC8sXG4gICAgL14oPzxkYXk+XFxkezEsMn0pLSg/PG1vbnRoPlxcZHsxLDJ9KS0oPzx5ZWFyPlxcZHs0fXxcXGR7Mn0pJC8sXG4gICAgL14oPzxkYXk+XFxkezEsMn0pXFwvKD88bW9udGg+XFxkezEsMn0pXFwvKD88eWVhcj5cXGR7NH18XFxkezJ9KSQvLFxuICAgIC9eKD88ZGF5PlxcZHsxLDJ9KVxcXFwoPzxtb250aD5cXGR7MSwyfSlcXFxcKD88eWVhcj5cXGR7NH18XFxkezJ9KSQvLFxuICAgIC8vIHN0cmljdCBJU08gZm9ybWF0XG4gICAgL14oPzx5ZWFyPlxcZHs0fSktKD88bW9udGg+XFxkezJ9KS0oPzxkYXk+XFxkezJ9KSQvLFxuXTtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbFN3aXNzUGFyc2luZ0RhdGVBZGFwdGVyIGV4dGVuZHMgTmF0aXZlRGF0ZUFkYXB0ZXIge1xuICAgIC8qKlxuICAgICAqIFBhcnNlIGNvbW1vbmx5IGFjY2VwdGVkIHN3aXNzIGZvcm1hdCwgc3VjaCBhczpcbiAgICAgKlxuICAgICAqIC0gMjQuMTIuMjAxOFxuICAgICAqIC0gMS40LjE4XG4gICAgICogLSAyMDE4LTEyLTI0XG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHBhcnNlKHZhbHVlOiB1bmtub3duKTogRGF0ZSB8IG51bGwge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCB0cmltbWVkID0gdmFsdWUudHJpbSgpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtID0gdHJpbW1lZC5tYXRjaChwYXR0ZXJuKTtcbiAgICAgICAgICAgICAgICBpZiAobT8uZ3JvdXBzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHllYXIgPSArbS5ncm91cHMueWVhcjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9udGggPSArbS5ncm91cHMubW9udGg7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheSA9ICttLmdyb3Vwcy5kYXk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRGF0ZUlmVmFsaWQoeWVhciwgbW9udGgsIGRheSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVEYXRlSWZWYWxpZCh5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIsIGRhdGU6IG51bWJlcik6IERhdGUgfCBudWxsIHtcbiAgICAgICAgLy8gQXNzdW1lIHllYXIgMjAwMCBpZiBvbmx5IHR3byBkaWdpdHNcbiAgICAgICAgaWYgKHllYXIgPCAxMDApIHtcbiAgICAgICAgICAgIHllYXIgKz0gMjAwMDtcbiAgICAgICAgfVxuXG4gICAgICAgIG1vbnRoID0gbW9udGggLSAxO1xuICAgICAgICBpZiAobW9udGggPj0gMCAmJiBtb250aCA8PSAxMSAmJiBkYXRlID49IDEgJiYgZGF0ZSA8PSAzMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0Rmlyc3REYXlPZldlZWsoKTogbnVtYmVyIHtcbiAgICAgICAgLy8gQWx3YXlzIHN0YXJ0cyBvbiBNb25kYXksIGV2ZW4gdGhvdWdoIGl0IGlzIG5vdCB0cnVlIGZvciBDYW5hZGEsIFUuUy4sIE1leGljbyBhbmQgbWFueSBtb3JlXG4gICAgICAgIC8vIEFsc28gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L2VjbWE0MDIvaXNzdWVzLzZcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxufVxuIl19
@@ -95,7 +95,7 @@ NaturalAbstractController.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0"
95
95
  NaturalAbstractController.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.1", type: NaturalAbstractController, ngImport: i0 });
96
96
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: NaturalAbstractController, decorators: [{
97
97
  type: Directive
98
- }], ctorParameters: function () { return []; } });
98
+ }] });
99
99
 
100
100
  class NaturalConfirmComponent {
101
101
  constructor(data) {
@@ -2191,7 +2191,7 @@ function ifValid(control) {
2191
2191
  // - is too lax because it accepts pretty much anything else
2192
2192
  //
2193
2193
  // but the TLD will be validated against a whitelist so that should make the whole thing acceptable
2194
- const RFC_5322 = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[^@ ]+\.[^@]+$/u;
2194
+ const RFC_5322 = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[^@ ]+\.[^@]+$/u;
2195
2195
  /**
2196
2196
  * Validate an email address according to RFC, and also that it is publicly deliverable (not "root@localhost" or "root@127.0.0.1")
2197
2197
  *
@@ -2391,15 +2391,22 @@ class NaturalAbstractDetail extends NaturalAbstractPanel {
2391
2391
  }), finalize(() => this.form.enable()))
2392
2392
  .subscribe();
2393
2393
  }
2394
- postUpdate(model) { }
2394
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
2395
+ postUpdate(model) {
2396
+ // noop
2397
+ }
2395
2398
  /**
2396
2399
  * Returns an observable that will be subscribed to immediately and the
2397
2400
  * redirect navigation will only happen after the observable completes.
2398
2401
  */
2402
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
2399
2403
  postCreate(model) {
2400
2404
  return EMPTY;
2401
2405
  }
2402
- preDelete(model) { }
2406
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
2407
+ preDelete(model) {
2408
+ // noop
2409
+ }
2403
2410
  initForm() {
2404
2411
  this.form = this.service.getFormGroup(this.data.model);
2405
2412
  }
@@ -3077,10 +3084,10 @@ class TypeDateComponent extends NaturalAbstractController {
3077
3084
  }
3078
3085
  }
3079
3086
  TypeDateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: TypeDateComponent, deps: [{ token: NATURAL_DROPDOWN_DATA }, { token: i1$4.DateAdapter }, { token: MAT_DATE_FORMATS }], target: i0.ɵɵFactoryTarget.Component });
3080
- TypeDateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: TypeDateComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\">\n <mat-form-field>\n <mat-label i18n=\"Mathematical operator < > =\">Op\u00E9rateur</mat-label>\n <mat-select [formControl]=\"operatorCtrl\" [required]=\"true\">\n <mat-option *ngFor=\"let item of operators\" [value]=\"item.key\">\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label i18n>Date</mat-label>\n <input\n [formControl]=\"valueCtrl\"\n [matDatepicker]=\"value\"\n [max]=\"configuration.max\"\n [min]=\"configuration.min\"\n [required]=\"true\"\n matInput\n />\n <mat-datepicker-toggle [for]=\"value\" matSuffix></mat-datepicker-toggle>\n <mat-datepicker #value></mat-datepicker>\n <mat-error>\n <span *ngIf=\"valueCtrl.hasError('min')\">< {{ configuration.min }}</span>\n <span *ngIf=\"valueCtrl.hasError('max')\">> {{ configuration.max }}</span>\n <span *ngIf=\"valueCtrl.hasError('required')\">*</span>\n </mat-error>\n </mat-form-field>\n\n <mat-checkbox [formControl]=\"todayCtrl\" i18n>Aujourd'hui</mat-checkbox>\n</form>\n", styles: ["form{display:grid;grid:auto auto/4em auto;grid-gap:0 1em}form>*{align-self:end}form>mat-checkbox{grid-column-start:2;margin-bottom:.3em}\n"], dependencies: [{ kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4$2.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i4$2.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4$2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4$2.MatSuffix, selector: "[matSuffix]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i7.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i7.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i7.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i4$3.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i1$4.MatOption, selector: "mat-option", exportAs: ["matOption"] }] });
3087
+ TypeDateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: TypeDateComponent, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\">\n <mat-form-field>\n <mat-label i18n=\"Mathematical operator < > =\">Op\u00E9rateur</mat-label>\n <mat-select [formControl]=\"operatorCtrl\" [required]=\"true\">\n <mat-option *ngFor=\"let item of operators\" [value]=\"item.key\">\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label i18n>Date</mat-label>\n <input\n [formControl]=\"valueCtrl\"\n [matDatepicker]=\"value\"\n [max]=\"configuration.max\"\n [min]=\"configuration.min\"\n [required]=\"true\"\n matInput\n />\n <mat-datepicker-toggle [for]=\"value\" matSuffix></mat-datepicker-toggle>\n <mat-datepicker #value></mat-datepicker>\n <mat-error *ngIf=\"valueCtrl.hasError('min')\">< {{ configuration.min }}</mat-error>\n <mat-error *ngIf=\"valueCtrl.hasError('max')\">> {{ configuration.max }}</mat-error>\n <mat-error *ngIf=\"valueCtrl.hasError('required')\">*</mat-error>\n </mat-form-field>\n\n <mat-checkbox [formControl]=\"todayCtrl\" i18n>Aujourd'hui</mat-checkbox>\n</form>\n", styles: ["form{display:grid;grid:auto auto/4em auto;grid-gap:0 1em}form>*{align-self:end}form>mat-checkbox{grid-column-start:2;margin-bottom:.3em}\n"], dependencies: [{ kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4$2.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i4$2.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4$2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4$2.MatSuffix, selector: "[matSuffix]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i7.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i7.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i7.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i4$3.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i1$4.MatOption, selector: "mat-option", exportAs: ["matOption"] }] });
3081
3088
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: TypeDateComponent, decorators: [{
3082
3089
  type: Component,
3083
- args: [{ template: "<form [formGroup]=\"form\">\n <mat-form-field>\n <mat-label i18n=\"Mathematical operator < > =\">Op\u00E9rateur</mat-label>\n <mat-select [formControl]=\"operatorCtrl\" [required]=\"true\">\n <mat-option *ngFor=\"let item of operators\" [value]=\"item.key\">\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label i18n>Date</mat-label>\n <input\n [formControl]=\"valueCtrl\"\n [matDatepicker]=\"value\"\n [max]=\"configuration.max\"\n [min]=\"configuration.min\"\n [required]=\"true\"\n matInput\n />\n <mat-datepicker-toggle [for]=\"value\" matSuffix></mat-datepicker-toggle>\n <mat-datepicker #value></mat-datepicker>\n <mat-error>\n <span *ngIf=\"valueCtrl.hasError('min')\">< {{ configuration.min }}</span>\n <span *ngIf=\"valueCtrl.hasError('max')\">> {{ configuration.max }}</span>\n <span *ngIf=\"valueCtrl.hasError('required')\">*</span>\n </mat-error>\n </mat-form-field>\n\n <mat-checkbox [formControl]=\"todayCtrl\" i18n>Aujourd'hui</mat-checkbox>\n</form>\n", styles: ["form{display:grid;grid:auto auto/4em auto;grid-gap:0 1em}form>*{align-self:end}form>mat-checkbox{grid-column-start:2;margin-bottom:.3em}\n"] }]
3090
+ args: [{ template: "<form [formGroup]=\"form\">\n <mat-form-field>\n <mat-label i18n=\"Mathematical operator < > =\">Op\u00E9rateur</mat-label>\n <mat-select [formControl]=\"operatorCtrl\" [required]=\"true\">\n <mat-option *ngFor=\"let item of operators\" [value]=\"item.key\">\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label i18n>Date</mat-label>\n <input\n [formControl]=\"valueCtrl\"\n [matDatepicker]=\"value\"\n [max]=\"configuration.max\"\n [min]=\"configuration.min\"\n [required]=\"true\"\n matInput\n />\n <mat-datepicker-toggle [for]=\"value\" matSuffix></mat-datepicker-toggle>\n <mat-datepicker #value></mat-datepicker>\n <mat-error *ngIf=\"valueCtrl.hasError('min')\">< {{ configuration.min }}</mat-error>\n <mat-error *ngIf=\"valueCtrl.hasError('max')\">> {{ configuration.max }}</mat-error>\n <mat-error *ngIf=\"valueCtrl.hasError('required')\">*</mat-error>\n </mat-form-field>\n\n <mat-checkbox [formControl]=\"todayCtrl\" i18n>Aujourd'hui</mat-checkbox>\n</form>\n", styles: ["form{display:grid;grid:auto auto/4em auto;grid-gap:0 1em}form>*{align-self:end}form>mat-checkbox{grid-column-start:2;margin-bottom:.3em}\n"] }]
3084
3091
  }], ctorParameters: function () {
3085
3092
  return [{ type: undefined, decorators: [{
3086
3093
  type: Inject,
@@ -3456,7 +3463,9 @@ class NaturalPersistenceService {
3456
3463
  try {
3457
3464
  result = JSON.parse(value);
3458
3465
  }
3459
- catch (e) { }
3466
+ catch (e) {
3467
+ // noop
3468
+ }
3460
3469
  return this.isValid(key, storageKey, result) ? result : null;
3461
3470
  }
3462
3471
  }
@@ -4174,24 +4183,28 @@ class NaturalAbstractModelService {
4174
4183
  /**
4175
4184
  * List of individual fields validators
4176
4185
  */
4186
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
4177
4187
  getFormValidators(model) {
4178
4188
  return {};
4179
4189
  }
4180
4190
  /**
4181
4191
  * List of individual async fields validators
4182
4192
  */
4193
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
4183
4194
  getFormAsyncValidators(model) {
4184
4195
  return {};
4185
4196
  }
4186
4197
  /**
4187
4198
  * List of grouped fields validators (like password + confirm password)
4188
4199
  */
4200
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
4189
4201
  getFormGroupValidators(model) {
4190
4202
  return [];
4191
4203
  }
4192
4204
  /**
4193
4205
  * List of async group fields validators (like unique constraint on multiple columns)
4194
4206
  */
4207
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
4195
4208
  getFormGroupAsyncValidators(model) {
4196
4209
  return [];
4197
4210
  }
@@ -4584,6 +4597,7 @@ class NaturalAbstractModelService {
4584
4597
  *
4585
4598
  * This is typically a site or state ID
4586
4599
  */
4600
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
4587
4601
  getPartialVariablesForCreation(object) {
4588
4602
  return {};
4589
4603
  }
@@ -4592,6 +4606,7 @@ class NaturalAbstractModelService {
4592
4606
  *
4593
4607
  * This is typically a site or state ID
4594
4608
  */
4609
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
4595
4610
  getPartialVariablesForUpdate(object) {
4596
4611
  return {};
4597
4612
  }
@@ -4600,6 +4615,7 @@ class NaturalAbstractModelService {
4600
4615
  *
4601
4616
  * This is typically a site or state ID
4602
4617
  */
4618
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
4603
4619
  getPartialVariablesForDelete(objects) {
4604
4620
  return {};
4605
4621
  }
@@ -6207,7 +6223,7 @@ class ExternalFormControlMatcher extends ErrorStateMatcher {
6207
6223
  super();
6208
6224
  this.component = component;
6209
6225
  }
6210
- isErrorState(control, form) {
6226
+ isErrorState() {
6211
6227
  var _a;
6212
6228
  const externalCtrl = ((_a = this.component.ngControl) === null || _a === void 0 ? void 0 : _a.control) || this.component.internalCtrl;
6213
6229
  if (externalCtrl) {
@@ -6601,7 +6617,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImpor
6601
6617
  }] });
6602
6618
 
6603
6619
  class InvalidWithValueStateMatcher$1 {
6604
- isErrorState(control, form) {
6620
+ isErrorState(control) {
6605
6621
  return control && control.invalid && control.value;
6606
6622
  }
6607
6623
  }
@@ -7062,7 +7078,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImpor
7062
7078
 
7063
7079
  // Required to check invalid fields when initializing natural-search
7064
7080
  class AlwaysErrorStateMatcher {
7065
- isErrorState(control, form) {
7081
+ isErrorState(control) {
7066
7082
  return !!control && control.invalid;
7067
7083
  }
7068
7084
  }
@@ -7164,7 +7180,7 @@ class NaturalInputComponent {
7164
7180
  this.dropdownComponentRef.destroy();
7165
7181
  }
7166
7182
  }
7167
- ngOnChanges(changes) {
7183
+ ngOnChanges() {
7168
7184
  if (!this.facets && this.selection) {
7169
7185
  setTimeout(() => this.clear());
7170
7186
  }
@@ -7441,7 +7457,7 @@ class NaturalSearchComponent {
7441
7457
  set selections(selections) {
7442
7458
  this.innerSelections = selections && selections[0] ? deepClone(selections) : [[]];
7443
7459
  }
7444
- ngOnChanges(changes) {
7460
+ ngOnChanges() {
7445
7461
  if (!this.facets) {
7446
7462
  this.facets = [];
7447
7463
  }
@@ -7914,7 +7930,7 @@ function toGreaterThanFrom(dateAdapter) {
7914
7930
  /**
7915
7931
  * Date range with mandatory bounding dates.
7916
7932
  *
7917
- * If you need ooptional bounding date, then use `TypeDateComponent` instead.
7933
+ * If you need optional bounding date, then use `TypeDateComponent` instead.
7918
7934
  */
7919
7935
  class TypeDateRangeComponent {
7920
7936
  constructor(data, dateAdapter, dateFormats) {
@@ -7998,10 +8014,10 @@ class TypeDateRangeComponent {
7998
8014
  }
7999
8015
  }
8000
8016
  TypeDateRangeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: TypeDateRangeComponent, deps: [{ token: NATURAL_DROPDOWN_DATA }, { token: i1$4.DateAdapter }, { token: MAT_DATE_FORMATS }], target: i0.ɵɵFactoryTarget.Component });
8001
- TypeDateRangeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: TypeDateRangeComponent, selector: "ng-component", ngImport: i0, template: "<form [formGroup]=\"form\">\n <mat-form-field>\n <input\n matInput\n [matDatepicker]=\"from\"\n placeholder=\"De\"\n [formControl]=\"fromCtrl\"\n [errorStateMatcher]=\"matcher\"\n [min]=\"configuration.min\"\n [max]=\"configuration.max\"\n />\n <mat-datepicker-toggle matSuffix [for]=\"from\"></mat-datepicker-toggle>\n <mat-datepicker #from></mat-datepicker>\n <mat-error>\n <span *ngIf=\"form.hasError('toGreaterThanFrom')\"\n >{{ render(fromCtrl.value) }} > {{ render(toCtrl.value) }}</span\n >\n <span *ngIf=\"fromCtrl.hasError('min') && !form.hasError('toGreaterThanFrom')\"\n >< {{ configuration.min }}</span\n >\n <span *ngIf=\"fromCtrl.hasError('max') && !form.hasError('toGreaterThanFrom')\"\n >> {{ configuration.max }}</span\n >\n <span *ngIf=\"fromCtrl.hasError('required')\">*</span>\n </mat-error>\n </mat-form-field>\n\n <mat-form-field>\n <input\n matInput\n [matDatepicker]=\"to\"\n placeholder=\"\u00E0\"\n [formControl]=\"toCtrl\"\n [errorStateMatcher]=\"matcher\"\n [min]=\"configuration.min\"\n [max]=\"configuration.max\"\n />\n <mat-datepicker-toggle matSuffix [for]=\"to\"></mat-datepicker-toggle>\n <mat-datepicker #to></mat-datepicker>\n <mat-error>\n <span *ngIf=\"toCtrl.hasError('min') && !form.hasError('toGreaterThanFrom')\">< {{ configuration.min }}</span>\n <span *ngIf=\"toCtrl.hasError('max') && !form.hasError('toGreaterThanFrom')\">> {{ configuration.max }}</span>\n <span *ngIf=\"toCtrl.hasError('required')\">*</span>\n </mat-error>\n </mat-form-field>\n</form>\n", dependencies: [{ kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4$2.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i4$2.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4$2.MatSuffix, selector: "[matSuffix]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i7.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i7.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }] });
8017
+ TypeDateRangeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: TypeDateRangeComponent, selector: "ng-component", ngImport: i0, template: "<form [formGroup]=\"form\">\n <mat-form-field>\n <input\n matInput\n [matDatepicker]=\"from\"\n placeholder=\"De\"\n [formControl]=\"fromCtrl\"\n [errorStateMatcher]=\"matcher\"\n [min]=\"configuration.min\"\n [max]=\"configuration.max\"\n />\n <mat-datepicker-toggle matSuffix [for]=\"from\"></mat-datepicker-toggle>\n <mat-datepicker #from></mat-datepicker>\n <mat-error *ngIf=\"form.hasError('toGreaterThanFrom')\"\n >{{ render(fromCtrl.value) }} > {{ render(toCtrl.value) }}</mat-error\n >\n <mat-error *ngIf=\"fromCtrl.hasError('min') && !form.hasError('toGreaterThanFrom')\"\n >< {{ configuration.min }}</mat-error\n >\n <mat-error *ngIf=\"fromCtrl.hasError('max') && !form.hasError('toGreaterThanFrom')\"\n >> {{ configuration.max }}</mat-error\n >\n <mat-error *ngIf=\"fromCtrl.hasError('required')\">*</mat-error>\n </mat-form-field>\n\n <mat-form-field>\n <input\n matInput\n [matDatepicker]=\"to\"\n placeholder=\"\u00E0\"\n [formControl]=\"toCtrl\"\n [errorStateMatcher]=\"matcher\"\n [min]=\"configuration.min\"\n [max]=\"configuration.max\"\n />\n <mat-datepicker-toggle matSuffix [for]=\"to\"></mat-datepicker-toggle>\n <mat-datepicker #to></mat-datepicker>\n <mat-error *ngIf=\"toCtrl.hasError('min') && !form.hasError('toGreaterThanFrom')\">\n < {{ configuration.min }}</mat-error\n >\n <mat-error *ngIf=\"toCtrl.hasError('max') && !form.hasError('toGreaterThanFrom')\">\n > {{ configuration.max }}</mat-error\n >\n <mat-error *ngIf=\"toCtrl.hasError('required')\">*</mat-error>\n </mat-form-field>\n</form>\n", dependencies: [{ kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4$2.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i4$2.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4$2.MatSuffix, selector: "[matSuffix]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i7.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i7.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }] });
8002
8018
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: TypeDateRangeComponent, decorators: [{
8003
8019
  type: Component,
8004
- args: [{ template: "<form [formGroup]=\"form\">\n <mat-form-field>\n <input\n matInput\n [matDatepicker]=\"from\"\n placeholder=\"De\"\n [formControl]=\"fromCtrl\"\n [errorStateMatcher]=\"matcher\"\n [min]=\"configuration.min\"\n [max]=\"configuration.max\"\n />\n <mat-datepicker-toggle matSuffix [for]=\"from\"></mat-datepicker-toggle>\n <mat-datepicker #from></mat-datepicker>\n <mat-error>\n <span *ngIf=\"form.hasError('toGreaterThanFrom')\"\n >{{ render(fromCtrl.value) }} > {{ render(toCtrl.value) }}</span\n >\n <span *ngIf=\"fromCtrl.hasError('min') && !form.hasError('toGreaterThanFrom')\"\n >< {{ configuration.min }}</span\n >\n <span *ngIf=\"fromCtrl.hasError('max') && !form.hasError('toGreaterThanFrom')\"\n >> {{ configuration.max }}</span\n >\n <span *ngIf=\"fromCtrl.hasError('required')\">*</span>\n </mat-error>\n </mat-form-field>\n\n <mat-form-field>\n <input\n matInput\n [matDatepicker]=\"to\"\n placeholder=\"\u00E0\"\n [formControl]=\"toCtrl\"\n [errorStateMatcher]=\"matcher\"\n [min]=\"configuration.min\"\n [max]=\"configuration.max\"\n />\n <mat-datepicker-toggle matSuffix [for]=\"to\"></mat-datepicker-toggle>\n <mat-datepicker #to></mat-datepicker>\n <mat-error>\n <span *ngIf=\"toCtrl.hasError('min') && !form.hasError('toGreaterThanFrom')\">< {{ configuration.min }}</span>\n <span *ngIf=\"toCtrl.hasError('max') && !form.hasError('toGreaterThanFrom')\">> {{ configuration.max }}</span>\n <span *ngIf=\"toCtrl.hasError('required')\">*</span>\n </mat-error>\n </mat-form-field>\n</form>\n" }]
8020
+ args: [{ template: "<form [formGroup]=\"form\">\n <mat-form-field>\n <input\n matInput\n [matDatepicker]=\"from\"\n placeholder=\"De\"\n [formControl]=\"fromCtrl\"\n [errorStateMatcher]=\"matcher\"\n [min]=\"configuration.min\"\n [max]=\"configuration.max\"\n />\n <mat-datepicker-toggle matSuffix [for]=\"from\"></mat-datepicker-toggle>\n <mat-datepicker #from></mat-datepicker>\n <mat-error *ngIf=\"form.hasError('toGreaterThanFrom')\"\n >{{ render(fromCtrl.value) }} > {{ render(toCtrl.value) }}</mat-error\n >\n <mat-error *ngIf=\"fromCtrl.hasError('min') && !form.hasError('toGreaterThanFrom')\"\n >< {{ configuration.min }}</mat-error\n >\n <mat-error *ngIf=\"fromCtrl.hasError('max') && !form.hasError('toGreaterThanFrom')\"\n >> {{ configuration.max }}</mat-error\n >\n <mat-error *ngIf=\"fromCtrl.hasError('required')\">*</mat-error>\n </mat-form-field>\n\n <mat-form-field>\n <input\n matInput\n [matDatepicker]=\"to\"\n placeholder=\"\u00E0\"\n [formControl]=\"toCtrl\"\n [errorStateMatcher]=\"matcher\"\n [min]=\"configuration.min\"\n [max]=\"configuration.max\"\n />\n <mat-datepicker-toggle matSuffix [for]=\"to\"></mat-datepicker-toggle>\n <mat-datepicker #to></mat-datepicker>\n <mat-error *ngIf=\"toCtrl.hasError('min') && !form.hasError('toGreaterThanFrom')\">\n < {{ configuration.min }}</mat-error\n >\n <mat-error *ngIf=\"toCtrl.hasError('max') && !form.hasError('toGreaterThanFrom')\">\n > {{ configuration.max }}</mat-error\n >\n <mat-error *ngIf=\"toCtrl.hasError('required')\">*</mat-error>\n </mat-form-field>\n</form>\n" }]
8005
8021
  }], ctorParameters: function () {
8006
8022
  return [{ type: undefined, decorators: [{
8007
8023
  type: Inject,
@@ -8305,7 +8321,6 @@ class NaturalSelectEnumComponent extends AbstractSelect {
8305
8321
  constructor(enumService, ngControl) {
8306
8322
  super(ngControl);
8307
8323
  this.enumService = enumService;
8308
- this.ngControl = ngControl;
8309
8324
  /**
8310
8325
  * Whether the user should be allowed to select multiple options
8311
8326
  */
@@ -8649,7 +8664,7 @@ class NaturalAbstractFile extends NaturalAbstractController {
8649
8664
  this.multiple = false;
8650
8665
  /**
8651
8666
  * Comma-separated list of unique file type specifiers. Like the native element
8652
- * it can be a mixed of mime-type and file extensions.
8667
+ * it can be a mix of mime-type and file extensions.
8653
8668
  *
8654
8669
  * See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#accept
8655
8670
  */
@@ -8982,23 +8997,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImpor
8982
8997
 
8983
8998
  // @dynamic
8984
8999
  class FileComponent {
8985
- constructor(naturalFileService, sanitizer, document) {
9000
+ constructor(naturalFileService, alertService, sanitizer, document) {
8986
9001
  this.naturalFileService = naturalFileService;
9002
+ this.alertService = alertService;
8987
9003
  this.sanitizer = sanitizer;
8988
9004
  this.document = document;
8989
9005
  this.height = 250;
8990
9006
  this.action = null;
8991
9007
  this.backgroundSize = 'contain';
8992
9008
  /**
8993
- * Comma separated list of accepted mimetypes
9009
+ * Comma-separated list of unique file type specifiers. Like the native element
9010
+ * it can be a mix of mime-type and file extensions.
9011
+ *
9012
+ * See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#accept
8994
9013
  */
8995
9014
  this.accept = 'image/bmp,image/gif,image/jpeg,image/pjpeg,image/png,image/svg+xml,image/svg,image/webp';
8996
9015
  this.model = null;
8997
9016
  /**
8998
- * If provided, get updated on change
8999
- * Is not used for reading -> use [model]
9017
+ * If provided, its value will get updated when the model changes.
9018
+ * But its value is never read, so if you want to set a value use `[model]` instead.
9000
9019
  */
9001
9020
  this.formCtrl = null;
9021
+ /**
9022
+ * This **must not** be used to mutate the server, because it is very likely it will never be called if the
9023
+ * human navigates away from the page before the upload is finished. Instead, you should use `[uploader]`.
9024
+ */
9002
9025
  this.modelChange = new EventEmitter();
9003
9026
  this.imagePreview = null;
9004
9027
  this.filePreview = null;
@@ -9012,20 +9035,20 @@ class FileComponent {
9012
9035
  }
9013
9036
  }
9014
9037
  upload(file) {
9038
+ var _a, _b;
9015
9039
  this.model = { file: file };
9016
9040
  this.updateImage();
9017
9041
  if (this.formCtrl) {
9018
9042
  this.formCtrl.setValue(this.model);
9019
9043
  }
9020
- if (this.service) {
9021
- this.service.create(this.model).subscribe(result => {
9022
- this.model = result;
9023
- this.modelChange.emit(result);
9024
- });
9025
- }
9026
- else {
9044
+ const observable = (_b = (_a = this.uploader) === null || _a === void 0 ? void 0 : _a.call(this, file).pipe(tap$1(() => this.alertService.info($localize `Mis à jour`)))) !== null && _b !== void 0 ? _b : of(this.model);
9045
+ observable.subscribe(result => {
9046
+ this.model = result;
9047
+ if (this.formCtrl) {
9048
+ this.formCtrl.setValue(this.model);
9049
+ }
9027
9050
  this.modelChange.emit(this.model);
9028
- }
9051
+ });
9029
9052
  }
9030
9053
  getDownloadLink() {
9031
9054
  if (this.action !== 'download') {
@@ -9085,13 +9108,13 @@ class FileComponent {
9085
9108
  return subject.asObservable();
9086
9109
  }
9087
9110
  }
9088
- FileComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: FileComponent, deps: [{ token: NaturalFileService }, { token: i2$2.DomSanitizer }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
9089
- FileComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: FileComponent, selector: "natural-file", inputs: { height: "height", action: "action", backgroundSize: "backgroundSize", accept: "accept", service: "service", model: "model", formCtrl: "formCtrl" }, outputs: { modelChange: "modelChange" }, host: { properties: { "style.height.px": "this.height" } }, usesOnChanges: true, ngImport: i0, template: "<a\n (fileChange)=\"upload($event)\"\n naturalFileDrop\n [selectable]=\"true\"\n [accept]=\"accept\"\n [attr.href]=\"getDownloadLink()\"\n [class.has-action]=\"!!action\"\n [class.suggest-upload]=\"!model && action === 'upload'\"\n [fileSelectionDisabled]=\"action !== 'upload'\"\n [matRippleDisabled]=\"!action\"\n [style.backgroundImage]=\"imagePreview\"\n [style.backgroundSize]=\"backgroundSize\"\n matRipple\n target=\"_blank\"\n>\n <div *ngIf=\"filePreview\" class=\"file-preview\">\n <natural-icon [size]=\"height * 0.33\" name=\"attachment\"></natural-icon>\n {{ filePreview | uppercase }}\n </div>\n\n <div class=\"action-overlay\">\n <natural-icon *ngIf=\"action === 'upload'\" [size]=\"height * 0.66\" name=\"cloud_upload\"></natural-icon>\n <natural-icon *ngIf=\"action === 'download'\" [size]=\"height * 0.66\" name=\"get_app\"></natural-icon>\n {{ action | capitalize }}\n </div>\n</a>\n", styles: [":host{display:flex;flex-direction:row;overflow:hidden;position:relative}:host>a{position:relative;flex:1;background-position:center;background-repeat:no-repeat}:host>a.has-action{cursor:pointer}:host>a.has-action.suggest-upload .action-overlay{opacity:.66}:host>a.has-action:hover .action-overlay,:host>a.has-action.natural-file-over .action-overlay{opacity:1}:host .action-overlay,:host .file-preview{display:flex;flex-direction:column;position:absolute;top:0;left:0;right:0;bottom:0;justify-content:center;align-items:center;font-size:36px;line-height:1.3em;text-align:center}:host .action-overlay{opacity:0}:host .action-overlay>div{opacity:0;position:absolute;top:0;left:0;right:0;bottom:0;display:flex;justify-content:center;align-items:center}\n"], dependencies: [{ kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NaturalIconComponent, selector: "natural-icon", inputs: ["label", "labelColor", "labelPosition", "name", "size"] }, { kind: "directive", type: i1$4.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "directive", type: NaturalFileDropDirective, selector: ":not([naturalFileSelect])[naturalFileDrop]", outputs: ["fileOver"] }, { kind: "pipe", type: i1$2.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: NaturalCapitalizePipe, name: "capitalize" }] });
9111
+ FileComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: FileComponent, deps: [{ token: NaturalFileService }, { token: NaturalAlertService }, { token: i2$2.DomSanitizer }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
9112
+ FileComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: FileComponent, selector: "natural-file", inputs: { height: "height", action: "action", backgroundSize: "backgroundSize", accept: "accept", uploader: "uploader", model: "model", formCtrl: "formCtrl" }, outputs: { modelChange: "modelChange" }, host: { properties: { "style.height.px": "this.height" } }, usesOnChanges: true, ngImport: i0, template: "<a\n (fileChange)=\"upload($event)\"\n naturalFileDrop\n [selectable]=\"true\"\n [accept]=\"accept\"\n [attr.href]=\"getDownloadLink()\"\n [class.has-action]=\"!!action\"\n [class.suggest-upload]=\"!model && action === 'upload'\"\n [fileSelectionDisabled]=\"action !== 'upload'\"\n [matRippleDisabled]=\"!action\"\n [style.backgroundImage]=\"imagePreview\"\n [style.backgroundSize]=\"backgroundSize\"\n matRipple\n target=\"_blank\"\n>\n <div *ngIf=\"filePreview\" class=\"file-preview\">\n <natural-icon [size]=\"height * 0.33\" name=\"attachment\"></natural-icon>\n {{ filePreview | uppercase }}\n </div>\n\n <div class=\"action-overlay\">\n <natural-icon *ngIf=\"action === 'upload'\" [size]=\"height * 0.66\" name=\"cloud_upload\"></natural-icon>\n <natural-icon *ngIf=\"action === 'download'\" [size]=\"height * 0.66\" name=\"get_app\"></natural-icon>\n {{ action | capitalize }}\n </div>\n</a>\n", styles: [":host{display:flex;flex-direction:row;overflow:hidden;position:relative}:host>a{position:relative;flex:1;background-position:center;background-repeat:no-repeat}:host>a.has-action{cursor:pointer}:host>a.has-action.suggest-upload .action-overlay{opacity:.66}:host>a.has-action:hover .action-overlay,:host>a.has-action.natural-file-over .action-overlay{opacity:1}:host .action-overlay,:host .file-preview{display:flex;flex-direction:column;position:absolute;top:0;left:0;right:0;bottom:0;justify-content:center;align-items:center;font-size:36px;line-height:1.3em;text-align:center}:host .action-overlay{opacity:0}:host .action-overlay>div{opacity:0;position:absolute;top:0;left:0;right:0;bottom:0;display:flex;justify-content:center;align-items:center}\n"], dependencies: [{ kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NaturalIconComponent, selector: "natural-icon", inputs: ["label", "labelColor", "labelPosition", "name", "size"] }, { kind: "directive", type: i1$4.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "directive", type: NaturalFileDropDirective, selector: ":not([naturalFileSelect])[naturalFileDrop]", outputs: ["fileOver"] }, { kind: "pipe", type: i1$2.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: NaturalCapitalizePipe, name: "capitalize" }] });
9090
9113
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: FileComponent, decorators: [{
9091
9114
  type: Component,
9092
9115
  args: [{ selector: 'natural-file', template: "<a\n (fileChange)=\"upload($event)\"\n naturalFileDrop\n [selectable]=\"true\"\n [accept]=\"accept\"\n [attr.href]=\"getDownloadLink()\"\n [class.has-action]=\"!!action\"\n [class.suggest-upload]=\"!model && action === 'upload'\"\n [fileSelectionDisabled]=\"action !== 'upload'\"\n [matRippleDisabled]=\"!action\"\n [style.backgroundImage]=\"imagePreview\"\n [style.backgroundSize]=\"backgroundSize\"\n matRipple\n target=\"_blank\"\n>\n <div *ngIf=\"filePreview\" class=\"file-preview\">\n <natural-icon [size]=\"height * 0.33\" name=\"attachment\"></natural-icon>\n {{ filePreview | uppercase }}\n </div>\n\n <div class=\"action-overlay\">\n <natural-icon *ngIf=\"action === 'upload'\" [size]=\"height * 0.66\" name=\"cloud_upload\"></natural-icon>\n <natural-icon *ngIf=\"action === 'download'\" [size]=\"height * 0.66\" name=\"get_app\"></natural-icon>\n {{ action | capitalize }}\n </div>\n</a>\n", styles: [":host{display:flex;flex-direction:row;overflow:hidden;position:relative}:host>a{position:relative;flex:1;background-position:center;background-repeat:no-repeat}:host>a.has-action{cursor:pointer}:host>a.has-action.suggest-upload .action-overlay{opacity:.66}:host>a.has-action:hover .action-overlay,:host>a.has-action.natural-file-over .action-overlay{opacity:1}:host .action-overlay,:host .file-preview{display:flex;flex-direction:column;position:absolute;top:0;left:0;right:0;bottom:0;justify-content:center;align-items:center;font-size:36px;line-height:1.3em;text-align:center}:host .action-overlay{opacity:0}:host .action-overlay>div{opacity:0;position:absolute;top:0;left:0;right:0;bottom:0;display:flex;justify-content:center;align-items:center}\n"] }]
9093
9116
  }], ctorParameters: function () {
9094
- return [{ type: NaturalFileService }, { type: i2$2.DomSanitizer }, { type: Document, decorators: [{
9117
+ return [{ type: NaturalFileService }, { type: NaturalAlertService }, { type: i2$2.DomSanitizer }, { type: Document, decorators: [{
9095
9118
  type: Inject,
9096
9119
  args: [DOCUMENT]
9097
9120
  }] }];
@@ -9106,7 +9129,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImpor
9106
9129
  type: Input
9107
9130
  }], accept: [{
9108
9131
  type: Input
9109
- }], service: [{
9132
+ }], uploader: [{
9110
9133
  type: Input
9111
9134
  }], model: [{
9112
9135
  type: Input
@@ -9147,7 +9170,7 @@ NaturalFixedButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.
9147
9170
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: NaturalFixedButtonComponent, decorators: [{
9148
9171
  type: Component,
9149
9172
  args: [{ selector: 'natural-fixed-button', template: "<button\n [color]=\"color\"\n [disabled]=\"disabled\"\n [routerLink]=\"link\"\n class=\"floating-button bottom-right\"\n mat-fab\n mat-raised-button\n>\n <natural-icon [name]=\"icon\"></natural-icon>\n</button>\n", styles: [":host{position:fixed!important;z-index:999;bottom:32px;right:32px}\n"] }]
9150
- }], ctorParameters: function () { return []; }, propDecorators: { icon: [{
9173
+ }], propDecorators: { icon: [{
9151
9174
  type: Input
9152
9175
  }], link: [{
9153
9176
  type: Input
@@ -9433,7 +9456,7 @@ class NaturalPanelsService {
9433
9456
  const originalErrorHandler = this.router.errorHandler;
9434
9457
  // Nullify error handler (will be de-neutralized after route redirection)
9435
9458
  if (config) {
9436
- this.router.errorHandler = () => { };
9459
+ this.router.errorHandler = () => undefined;
9437
9460
  }
9438
9461
  // Navigate to same url + /risk/new Result : /risk/risk/new
9439
9462
  const newUrl = config.map(conf => segmentsToString(conf.route.segments)).join('/');
@@ -9693,7 +9716,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImpor
9693
9716
  * Url fallback matcher to be used instead of `path: '**'` when Panel system
9694
9717
  * is used in the project.
9695
9718
  */
9696
- const fallbackIfNoOpenedPanels = (segments, group, route) => {
9719
+ const fallbackIfNoOpenedPanels = (segments) => {
9697
9720
  if (!NaturalPanelsService.opened) {
9698
9721
  return { consumed: segments };
9699
9722
  }
@@ -9758,7 +9781,7 @@ class NaturalRelationsComponent extends NaturalAbstractController {
9758
9781
  this.disabled = this.disabled || !this.main.permissions.update;
9759
9782
  }
9760
9783
  }
9761
- ngOnChanges(changes) {
9784
+ ngOnChanges() {
9762
9785
  if (this.service) {
9763
9786
  this.queryItems();
9764
9787
  }
@@ -10260,17 +10283,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImpor
10260
10283
  }] } });
10261
10284
 
10262
10285
  class NaturalSidenavContentComponent {
10263
- constructor() { }
10264
10286
  }
10265
10287
  NaturalSidenavContentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: NaturalSidenavContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10266
10288
  NaturalSidenavContentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: NaturalSidenavContentComponent, selector: "natural-sidenav-content", ngImport: i0, template: '<ng-content></ng-content>', isInline: true, styles: [":host{flex:1;display:flex;flex-direction:column;overflow:auto}\n"] });
10267
10289
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: NaturalSidenavContentComponent, decorators: [{
10268
10290
  type: Component,
10269
10291
  args: [{ selector: 'natural-sidenav-content', template: '<ng-content></ng-content>', styles: [":host{flex:1;display:flex;flex-direction:column;overflow:auto}\n"] }]
10270
- }], ctorParameters: function () { return []; } });
10292
+ }] });
10271
10293
 
10272
10294
  class NaturalSidenavComponent {
10273
- constructor() { }
10274
10295
  }
10275
10296
  NaturalSidenavComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.1", ngImport: i0, type: NaturalSidenavComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10276
10297
  NaturalSidenavComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.1", type: NaturalSidenavComponent, selector: "natural-sidenav", ngImport: i0, template: '<ng-content></ng-content>', isInline: true });
@@ -10280,7 +10301,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImpor
10280
10301
  selector: 'natural-sidenav',
10281
10302
  template: '<ng-content></ng-content>',
10282
10303
  }]
10283
- }], ctorParameters: function () { return []; } });
10304
+ }] });
10284
10305
 
10285
10306
  class NaturalSidenavModule {
10286
10307
  }
@@ -10358,7 +10379,7 @@ class NaturalTableButtonComponent {
10358
10379
  this.buttonClick = new EventEmitter();
10359
10380
  this.type = 'none';
10360
10381
  }
10361
- ngOnChanges(changes) {
10382
+ ngOnChanges() {
10362
10383
  var _a;
10363
10384
  if (((_a = this.navigate) === null || _a === void 0 ? void 0 : _a.length) || Object.keys(this.queryParams).length) {
10364
10385
  this.type = 'routerLink';
@@ -10621,11 +10642,11 @@ function addUnsigned(lX, lY) {
10621
10642
  const lX4 = lX & 0x40000000;
10622
10643
  const lY4 = lY & 0x40000000;
10623
10644
  const lResult = (lX & 0x3fffffff) + (lY & 0x3fffffff);
10624
- if (!!(lX4 & lY4)) {
10645
+ if (lX4 & lY4) {
10625
10646
  return lResult ^ 0x80000000 ^ lX8 ^ lY8;
10626
10647
  }
10627
- if (!!(lX4 | lY4)) {
10628
- if (!!(lResult & 0x40000000)) {
10648
+ if (lX4 | lY4) {
10649
+ if (lResult & 0x40000000) {
10629
10650
  return lResult ^ 0xc0000000 ^ lX8 ^ lY8;
10630
10651
  }
10631
10652
  else {
@@ -10851,7 +10872,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImpor
10851
10872
  args: [{
10852
10873
  providedIn: 'root',
10853
10874
  }]
10854
- }], ctorParameters: function () { return []; } });
10875
+ }] });
10855
10876
 
10856
10877
  /**
10857
10878
  * Show an avatar from different sources