ngx-dynamic-entity 1.0.0 → 1.2.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 (62) hide show
  1. package/README.md +129 -139
  2. package/esm2022/lib/field-types/array-field.component.mjs +112 -104
  3. package/esm2022/lib/field-types/boolean-field.component.mjs +62 -61
  4. package/esm2022/lib/field-types/checkbox-field.component.mjs +48 -47
  5. package/esm2022/lib/field-types/currency-field.component.mjs +54 -53
  6. package/esm2022/lib/field-types/date-field.component.mjs +46 -45
  7. package/esm2022/lib/field-types/dropdown-field.component.mjs +89 -87
  8. package/esm2022/lib/field-types/email-field.component.mjs +64 -63
  9. package/esm2022/lib/field-types/entity-ref-field.component.mjs +85 -71
  10. package/esm2022/lib/field-types/field-component.contract.mjs +2 -0
  11. package/esm2022/lib/field-types/file-field.component.mjs +88 -87
  12. package/esm2022/lib/field-types/group-field.component.mjs +50 -50
  13. package/esm2022/lib/field-types/image-field.component.mjs +92 -91
  14. package/esm2022/lib/field-types/month-year-field.component.mjs +80 -79
  15. package/esm2022/lib/field-types/multi-select-field.component.mjs +66 -65
  16. package/esm2022/lib/field-types/number-field.component.mjs +71 -75
  17. package/esm2022/lib/field-types/password-field.component.mjs +68 -67
  18. package/esm2022/lib/field-types/radio-field.component.mjs +66 -65
  19. package/esm2022/lib/field-types/text-field.component.mjs +81 -74
  20. package/esm2022/lib/field-types/textarea-field.component.mjs +48 -47
  21. package/esm2022/lib/form/dynamic-field/dynamic-field.component.mjs +53 -6
  22. package/esm2022/lib/form/dynamic-form.component.mjs +309 -20
  23. package/esm2022/lib/form/dynamic-record-form.component.mjs +36 -11
  24. package/esm2022/lib/providers/provide-field-types.mjs +1 -1
  25. package/esm2022/lib/providers/provide-ngx-dynamic-entity.mjs +8 -2
  26. package/esm2022/lib/services/cascade-data.service.mjs +2 -2
  27. package/esm2022/lib/services/entity-ref-cache.mjs +1 -1
  28. package/esm2022/lib/services/entity-ref-registry.service.mjs +2 -2
  29. package/esm2022/lib/services/entity-ref-selection.service.mjs +1 -1
  30. package/esm2022/lib/services/entity-reference.service.mjs +1 -1
  31. package/esm2022/lib/services/field-registry.service.mjs +1 -1
  32. package/esm2022/lib/services/file-upload.service.mjs +1 -1
  33. package/esm2022/lib/services/lookup-registry.service.mjs +2 -2
  34. package/esm2022/lib/services/rbac.service.mjs +1 -1
  35. package/esm2022/lib/services/validation-messages.service.mjs +56 -0
  36. package/esm2022/lib/services/validator-registry.service.mjs +35 -2
  37. package/esm2022/lib/tokens/injection-tokens.mjs +35 -6
  38. package/esm2022/public-api.mjs +23 -2
  39. package/fesm2022/ngx-dynamic-entity.mjs +1754 -1236
  40. package/fesm2022/ngx-dynamic-entity.mjs.map +1 -1
  41. package/lib/field-types/array-field.component.d.ts +7 -1
  42. package/lib/field-types/dropdown-field.component.d.ts +2 -1
  43. package/lib/field-types/entity-ref-field.component.d.ts +12 -2
  44. package/lib/field-types/field-component.contract.d.ts +49 -0
  45. package/lib/field-types/group-field.component.d.ts +1 -1
  46. package/lib/field-types/multi-select-field.component.d.ts +1 -1
  47. package/lib/field-types/number-field.component.d.ts +1 -0
  48. package/lib/field-types/radio-field.component.d.ts +1 -1
  49. package/lib/field-types/text-field.component.d.ts +10 -2
  50. package/lib/form/dynamic-field/dynamic-field.component.d.ts +39 -4
  51. package/lib/form/dynamic-form.component.d.ts +155 -8
  52. package/lib/form/dynamic-record-form.component.d.ts +13 -2
  53. package/lib/providers/provide-ngx-dynamic-entity.d.ts +25 -3
  54. package/lib/services/cascade-data.service.d.ts +1 -1
  55. package/lib/services/entity-ref-registry.service.d.ts +1 -1
  56. package/lib/services/lookup-registry.service.d.ts +1 -1
  57. package/lib/services/validation-messages.service.d.ts +43 -0
  58. package/lib/services/validator-registry.service.d.ts +13 -1
  59. package/lib/tokens/injection-tokens.d.ts +42 -7
  60. package/package.json +17 -18
  61. package/public-api.d.ts +12 -0
  62. package/styles.css +579 -0
@@ -1,12 +1,13 @@
1
1
  import { Injectable, inject } from '@angular/core';
2
2
  import { Validators } from '@angular/forms';
3
- import { VALIDATOR_REGISTRY } from '../tokens/injection-tokens';
3
+ import { ASYNC_VALIDATOR_REGISTRY, VALIDATOR_REGISTRY } from '../tokens/injection-tokens';
4
4
  import * as i0 from "@angular/core";
5
5
  /**
6
6
  * ValidatorRegistryService — resolves validator configs / key strings to Angular ValidatorFns.
7
7
  */
8
8
  export class ValidatorRegistryService {
9
9
  consumerRegistry = inject(VALIDATOR_REGISTRY, { optional: true }) ?? new Map();
10
+ asyncRegistry = inject(ASYNC_VALIDATOR_REGISTRY, { optional: true }) ?? new Map();
10
11
  /**
11
12
  * Resolve a validator key string to a ValidatorFn.
12
13
  * Supports parameterized built-ins like 'min:0', 'maxLength:255'.
@@ -54,8 +55,40 @@ export class ValidatorRegistryService {
54
55
  fnList.push(Validators.maxLength(config.maxLength));
55
56
  if (config.pattern)
56
57
  fnList.push(Validators.pattern(config.pattern));
58
+ if (config.email)
59
+ fnList.push(Validators.email);
60
+ // Named validators from the consumer registry. This branch previously hardcoded the
61
+ // built-ins and consulted the registry only for the `string[]` form of this config, so
62
+ // a validator the consumer had registered could not be named from a typed schema
63
+ // without casting it to `any`.
64
+ for (const key of config.custom ?? []) {
65
+ const fn = this.resolve(key);
66
+ if (fn)
67
+ fnList.push(fn);
68
+ }
57
69
  return fnList;
58
70
  }
71
+ /**
72
+ * Resolve the async validators a field names, in `validators.customAsync`.
73
+ *
74
+ * Async validators are deliberately a separate registry and a separate config key: Angular
75
+ * attaches them through `setAsyncValidators`, runs them only once the synchronous ones
76
+ * pass, and holds the control in `pending` until they settle. Mixing them into the
77
+ * synchronous list would silently never run them.
78
+ *
79
+ * An unknown name is skipped rather than throwing, matching the synchronous behaviour.
80
+ */
81
+ resolveAsyncFromConfig(config) {
82
+ if (!config || Array.isArray(config))
83
+ return [];
84
+ const out = [];
85
+ for (const key of config.customAsync ?? []) {
86
+ const fn = this.asyncRegistry.get(key);
87
+ if (fn)
88
+ out.push(fn);
89
+ }
90
+ return out;
91
+ }
59
92
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ValidatorRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
60
93
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ValidatorRegistryService, providedIn: 'root' });
61
94
  }
@@ -63,4 +96,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
63
96
  type: Injectable,
64
97
  args: [{ providedIn: 'root' }]
65
98
  }] });
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLXJlZ2lzdHJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL3ZhbGlkYXRvci1yZWdpc3RyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBZSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFFaEU7O0dBRUc7QUFFSCxNQUFNLE9BQU8sd0JBQXdCO0lBQ2xCLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7SUFFaEc7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLFlBQW9CO1FBQzFCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQzVDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBRUQsSUFBSSxZQUFZLEtBQUssVUFBVTtZQUFFLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUM1RCxJQUFJLFlBQVksS0FBSyxPQUFPO1lBQUUsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBRXRELE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QyxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFaEMsSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRSxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xFLElBQUksSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUUsSUFBSSxJQUFJLEtBQUssV0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU5RSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCwyREFBMkQ7SUFDM0QsVUFBVSxDQUFDLGdCQUEwQixFQUFFO1FBQ3JDLE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQW9CLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDN0YsQ0FBQztJQUVELHNFQUFzRTtJQUN0RSxpQkFBaUIsQ0FBQyxNQUFtQztRQUNuRCxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3ZCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFMUQsTUFBTSxNQUFNLEdBQWtCLEVBQUUsQ0FBQztRQUNqQyxJQUFJLE1BQU0sQ0FBQyxRQUFRO1lBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEQsSUFBSSxNQUFNLENBQUMsR0FBRyxLQUFLLFNBQVM7WUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxNQUFNLENBQUMsR0FBRyxLQUFLLFNBQVM7WUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLFNBQVM7WUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDeEYsSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLFNBQVM7WUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDeEYsSUFBSSxNQUFNLENBQUMsT0FBTztZQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUVwRSxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO3dHQTdDVSx3QkFBd0I7NEdBQXhCLHdCQUF3QixjQURYLE1BQU07OzRGQUNuQix3QkFBd0I7a0JBRHBDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFZhbGlkYXRvckZuLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgdHlwZSB7IEZpZWxkVmFsaWRhdG9ycyB9IGZyb20gJ0BkeW5hbWljLWVudGl0eS9jb3JlJztcclxuaW1wb3J0IHsgVkFMSURBVE9SX1JFR0lTVFJZIH0gZnJvbSAnLi4vdG9rZW5zL2luamVjdGlvbi10b2tlbnMnO1xyXG5cclxuLyoqXHJcbiAqIFZhbGlkYXRvclJlZ2lzdHJ5U2VydmljZSDigJQgcmVzb2x2ZXMgdmFsaWRhdG9yIGNvbmZpZ3MgLyBrZXkgc3RyaW5ncyB0byBBbmd1bGFyIFZhbGlkYXRvckZucy5cclxuICovXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBWYWxpZGF0b3JSZWdpc3RyeVNlcnZpY2Uge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY29uc3VtZXJSZWdpc3RyeSA9IGluamVjdChWQUxJREFUT1JfUkVHSVNUUlksIHsgb3B0aW9uYWw6IHRydWUgfSkgPz8gbmV3IE1hcCgpO1xyXG5cclxuICAvKipcclxuICAgKiBSZXNvbHZlIGEgdmFsaWRhdG9yIGtleSBzdHJpbmcgdG8gYSBWYWxpZGF0b3JGbi5cclxuICAgKiBTdXBwb3J0cyBwYXJhbWV0ZXJpemVkIGJ1aWx0LWlucyBsaWtlICdtaW46MCcsICdtYXhMZW5ndGg6MjU1Jy5cclxuICAgKi9cclxuICByZXNvbHZlKHZhbGlkYXRvcktleTogc3RyaW5nKTogVmFsaWRhdG9yRm4gfCBudWxsIHtcclxuICAgIGlmICh0aGlzLmNvbnN1bWVyUmVnaXN0cnkuaGFzKHZhbGlkYXRvcktleSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY29uc3VtZXJSZWdpc3RyeS5nZXQodmFsaWRhdG9yS2V5KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodmFsaWRhdG9yS2V5ID09PSAncmVxdWlyZWQnKSByZXR1cm4gVmFsaWRhdG9ycy5yZXF1aXJlZDtcclxuICAgIGlmICh2YWxpZGF0b3JLZXkgPT09ICdlbWFpbCcpIHJldHVybiBWYWxpZGF0b3JzLmVtYWlsO1xyXG5cclxuICAgIGNvbnN0IFtuYW1lLCBwYXJhbV0gPSB2YWxpZGF0b3JLZXkuc3BsaXQoJzonKTtcclxuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VGbG9hdChwYXJhbSk7XHJcblxyXG4gICAgaWYgKG5hbWUgPT09ICdtaW4nICYmICFpc05hTih2YWx1ZSkpIHJldHVybiBWYWxpZGF0b3JzLm1pbih2YWx1ZSk7XHJcbiAgICBpZiAobmFtZSA9PT0gJ21heCcgJiYgIWlzTmFOKHZhbHVlKSkgcmV0dXJuIFZhbGlkYXRvcnMubWF4KHZhbHVlKTtcclxuICAgIGlmIChuYW1lID09PSAnbWluTGVuZ3RoJyAmJiAhaXNOYU4odmFsdWUpKSByZXR1cm4gVmFsaWRhdG9ycy5taW5MZW5ndGgodmFsdWUpO1xyXG4gICAgaWYgKG5hbWUgPT09ICdtYXhMZW5ndGgnICYmICFpc05hTih2YWx1ZSkpIHJldHVybiBWYWxpZGF0b3JzLm1heExlbmd0aCh2YWx1ZSk7XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKiogUmVzb2x2ZSBtdWx0aXBsZSB2YWxpZGF0b3Iga2V5cyBpbnRvIGEgVmFsaWRhdG9yRm5bXSAqL1xyXG4gIHJlc29sdmVBbGwodmFsaWRhdG9yS2V5czogc3RyaW5nW10gPSBbXSk6IFZhbGlkYXRvckZuW10ge1xyXG4gICAgcmV0dXJuIHZhbGlkYXRvcktleXMubWFwKGsgPT4gdGhpcy5yZXNvbHZlKGspKS5maWx0ZXIoKHYpOiB2IGlzIFZhbGlkYXRvckZuID0+IHYgIT09IG51bGwpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFJlc29sdmUgYSBGaWVsZFZhbGlkYXRvcnMgb2JqZWN0IG9yIHN0cmluZ1tdIGludG8gVmFsaWRhdG9yRm5bXSAqL1xyXG4gIHJlc29sdmVGcm9tQ29uZmlnKGNvbmZpZz86IEZpZWxkVmFsaWRhdG9ycyB8IHN0cmluZ1tdKTogVmFsaWRhdG9yRm5bXSB7XHJcbiAgICBpZiAoIWNvbmZpZykgcmV0dXJuIFtdO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29uZmlnKSkgcmV0dXJuIHRoaXMucmVzb2x2ZUFsbChjb25maWcpO1xyXG5cclxuICAgIGNvbnN0IGZuTGlzdDogVmFsaWRhdG9yRm5bXSA9IFtdO1xyXG4gICAgaWYgKGNvbmZpZy5yZXF1aXJlZCkgZm5MaXN0LnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICBpZiAoY29uZmlnLm1pbiAhPT0gdW5kZWZpbmVkKSBmbkxpc3QucHVzaChWYWxpZGF0b3JzLm1pbihjb25maWcubWluKSk7XHJcbiAgICBpZiAoY29uZmlnLm1heCAhPT0gdW5kZWZpbmVkKSBmbkxpc3QucHVzaChWYWxpZGF0b3JzLm1heChjb25maWcubWF4KSk7XHJcbiAgICBpZiAoY29uZmlnLm1pbkxlbmd0aCAhPT0gdW5kZWZpbmVkKSBmbkxpc3QucHVzaChWYWxpZGF0b3JzLm1pbkxlbmd0aChjb25maWcubWluTGVuZ3RoKSk7XHJcbiAgICBpZiAoY29uZmlnLm1heExlbmd0aCAhPT0gdW5kZWZpbmVkKSBmbkxpc3QucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aChjb25maWcubWF4TGVuZ3RoKSk7XHJcbiAgICBpZiAoY29uZmlnLnBhdHRlcm4pIGZuTGlzdC5wdXNoKFZhbGlkYXRvcnMucGF0dGVybihjb25maWcucGF0dGVybikpO1xyXG5cclxuICAgIHJldHVybiBmbkxpc3Q7XHJcbiAgfVxyXG59XHJcbiJdfQ==
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLXJlZ2lzdHJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL3ZhbGlkYXRvci1yZWdpc3RyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBaUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0UsT0FBTyxFQUFFLHdCQUF3QixFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBRTFGOztHQUVHO0FBRUgsTUFBTSxPQUFPLHdCQUF3QjtJQUNsQixnQkFBZ0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQy9FLGFBQWEsR0FBRyxNQUFNLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRW5HOzs7T0FHRztJQUNILE9BQU8sQ0FBQyxZQUFvQjtRQUMxQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUM1QyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDakQsQ0FBQztRQUVELElBQUksWUFBWSxLQUFLLFVBQVU7WUFBRSxPQUFPLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDNUQsSUFBSSxZQUFZLEtBQUssT0FBTztZQUFFLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQztRQUV0RCxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUMsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWhDLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEUsSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRSxJQUFJLElBQUksS0FBSyxXQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlFLElBQUksSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFOUUsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsMkRBQTJEO0lBQzNELFVBQVUsQ0FBQyxnQkFBMEIsRUFBRTtRQUNyQyxPQUFPLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFvQixFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFRCxzRUFBc0U7SUFDdEUsaUJBQWlCLENBQUMsTUFBbUM7UUFDbkQsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN2QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFELE1BQU0sTUFBTSxHQUFrQixFQUFFLENBQUM7UUFDakMsSUFBSSxNQUFNLENBQUMsUUFBUTtZQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RELElBQUksTUFBTSxDQUFDLEdBQUcsS0FBSyxTQUFTO1lBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLElBQUksTUFBTSxDQUFDLEdBQUcsS0FBSyxTQUFTO1lBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLElBQUksTUFBTSxDQUFDLFNBQVMsS0FBSyxTQUFTO1lBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLElBQUksTUFBTSxDQUFDLFNBQVMsS0FBSyxTQUFTO1lBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLElBQUksTUFBTSxDQUFDLE9BQU87WUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDcEUsSUFBSSxNQUFNLENBQUMsS0FBSztZQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWhELG9GQUFvRjtRQUNwRix1RkFBdUY7UUFDdkYsaUZBQWlGO1FBQ2pGLCtCQUErQjtRQUMvQixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLENBQUM7WUFDdEMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM3QixJQUFJLEVBQUU7Z0JBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxQixDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILHNCQUFzQixDQUFDLE1BQW1DO1FBQ3hELElBQUksQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUVoRCxNQUFNLEdBQUcsR0FBdUIsRUFBRSxDQUFDO1FBQ25DLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLFdBQVcsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUMzQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QyxJQUFJLEVBQUU7Z0JBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QixDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO3dHQTdFVSx3QkFBd0I7NEdBQXhCLHdCQUF3QixjQURYLE1BQU07OzRGQUNuQix3QkFBd0I7a0JBRHBDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBc3luY1ZhbGlkYXRvckZuLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB0eXBlIHsgRmllbGRWYWxpZGF0b3JzIH0gZnJvbSAnQGR5bmFtaWMtZW50aXR5L2NvcmUnO1xuaW1wb3J0IHsgQVNZTkNfVkFMSURBVE9SX1JFR0lTVFJZLCBWQUxJREFUT1JfUkVHSVNUUlkgfSBmcm9tICcuLi90b2tlbnMvaW5qZWN0aW9uLXRva2Vucyc7XG5cbi8qKlxuICogVmFsaWRhdG9yUmVnaXN0cnlTZXJ2aWNlIOKAlCByZXNvbHZlcyB2YWxpZGF0b3IgY29uZmlncyAvIGtleSBzdHJpbmdzIHRvIEFuZ3VsYXIgVmFsaWRhdG9yRm5zLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFZhbGlkYXRvclJlZ2lzdHJ5U2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uc3VtZXJSZWdpc3RyeSA9IGluamVjdChWQUxJREFUT1JfUkVHSVNUUlksIHsgb3B0aW9uYWw6IHRydWUgfSkgPz8gbmV3IE1hcCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IGFzeW5jUmVnaXN0cnkgPSBpbmplY3QoQVNZTkNfVkFMSURBVE9SX1JFR0lTVFJZLCB7IG9wdGlvbmFsOiB0cnVlIH0pID8/IG5ldyBNYXAoKTtcblxuICAvKipcbiAgICogUmVzb2x2ZSBhIHZhbGlkYXRvciBrZXkgc3RyaW5nIHRvIGEgVmFsaWRhdG9yRm4uXG4gICAqIFN1cHBvcnRzIHBhcmFtZXRlcml6ZWQgYnVpbHQtaW5zIGxpa2UgJ21pbjowJywgJ21heExlbmd0aDoyNTUnLlxuICAgKi9cbiAgcmVzb2x2ZSh2YWxpZGF0b3JLZXk6IHN0cmluZyk6IFZhbGlkYXRvckZuIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuY29uc3VtZXJSZWdpc3RyeS5oYXModmFsaWRhdG9yS2V5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29uc3VtZXJSZWdpc3RyeS5nZXQodmFsaWRhdG9yS2V5KTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdG9yS2V5ID09PSAncmVxdWlyZWQnKSByZXR1cm4gVmFsaWRhdG9ycy5yZXF1aXJlZDtcbiAgICBpZiAodmFsaWRhdG9yS2V5ID09PSAnZW1haWwnKSByZXR1cm4gVmFsaWRhdG9ycy5lbWFpbDtcblxuICAgIGNvbnN0IFtuYW1lLCBwYXJhbV0gPSB2YWxpZGF0b3JLZXkuc3BsaXQoJzonKTtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlRmxvYXQocGFyYW0pO1xuXG4gICAgaWYgKG5hbWUgPT09ICdtaW4nICYmICFpc05hTih2YWx1ZSkpIHJldHVybiBWYWxpZGF0b3JzLm1pbih2YWx1ZSk7XG4gICAgaWYgKG5hbWUgPT09ICdtYXgnICYmICFpc05hTih2YWx1ZSkpIHJldHVybiBWYWxpZGF0b3JzLm1heCh2YWx1ZSk7XG4gICAgaWYgKG5hbWUgPT09ICdtaW5MZW5ndGgnICYmICFpc05hTih2YWx1ZSkpIHJldHVybiBWYWxpZGF0b3JzLm1pbkxlbmd0aCh2YWx1ZSk7XG4gICAgaWYgKG5hbWUgPT09ICdtYXhMZW5ndGgnICYmICFpc05hTih2YWx1ZSkpIHJldHVybiBWYWxpZGF0b3JzLm1heExlbmd0aCh2YWx1ZSk7XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKiBSZXNvbHZlIG11bHRpcGxlIHZhbGlkYXRvciBrZXlzIGludG8gYSBWYWxpZGF0b3JGbltdICovXG4gIHJlc29sdmVBbGwodmFsaWRhdG9yS2V5czogc3RyaW5nW10gPSBbXSk6IFZhbGlkYXRvckZuW10ge1xuICAgIHJldHVybiB2YWxpZGF0b3JLZXlzLm1hcChrID0+IHRoaXMucmVzb2x2ZShrKSkuZmlsdGVyKCh2KTogdiBpcyBWYWxpZGF0b3JGbiA9PiB2ICE9PSBudWxsKTtcbiAgfVxuXG4gIC8qKiBSZXNvbHZlIGEgRmllbGRWYWxpZGF0b3JzIG9iamVjdCBvciBzdHJpbmdbXSBpbnRvIFZhbGlkYXRvckZuW10gKi9cbiAgcmVzb2x2ZUZyb21Db25maWcoY29uZmlnPzogRmllbGRWYWxpZGF0b3JzIHwgc3RyaW5nW10pOiBWYWxpZGF0b3JGbltdIHtcbiAgICBpZiAoIWNvbmZpZykgcmV0dXJuIFtdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbmZpZykpIHJldHVybiB0aGlzLnJlc29sdmVBbGwoY29uZmlnKTtcblxuICAgIGNvbnN0IGZuTGlzdDogVmFsaWRhdG9yRm5bXSA9IFtdO1xuICAgIGlmIChjb25maWcucmVxdWlyZWQpIGZuTGlzdC5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgIGlmIChjb25maWcubWluICE9PSB1bmRlZmluZWQpIGZuTGlzdC5wdXNoKFZhbGlkYXRvcnMubWluKGNvbmZpZy5taW4pKTtcbiAgICBpZiAoY29uZmlnLm1heCAhPT0gdW5kZWZpbmVkKSBmbkxpc3QucHVzaChWYWxpZGF0b3JzLm1heChjb25maWcubWF4KSk7XG4gICAgaWYgKGNvbmZpZy5taW5MZW5ndGggIT09IHVuZGVmaW5lZCkgZm5MaXN0LnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgoY29uZmlnLm1pbkxlbmd0aCkpO1xuICAgIGlmIChjb25maWcubWF4TGVuZ3RoICE9PSB1bmRlZmluZWQpIGZuTGlzdC5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKGNvbmZpZy5tYXhMZW5ndGgpKTtcbiAgICBpZiAoY29uZmlnLnBhdHRlcm4pIGZuTGlzdC5wdXNoKFZhbGlkYXRvcnMucGF0dGVybihjb25maWcucGF0dGVybikpO1xuICAgIGlmIChjb25maWcuZW1haWwpIGZuTGlzdC5wdXNoKFZhbGlkYXRvcnMuZW1haWwpO1xuXG4gICAgLy8gTmFtZWQgdmFsaWRhdG9ycyBmcm9tIHRoZSBjb25zdW1lciByZWdpc3RyeS4gVGhpcyBicmFuY2ggcHJldmlvdXNseSBoYXJkY29kZWQgdGhlXG4gICAgLy8gYnVpbHQtaW5zIGFuZCBjb25zdWx0ZWQgdGhlIHJlZ2lzdHJ5IG9ubHkgZm9yIHRoZSBgc3RyaW5nW11gIGZvcm0gb2YgdGhpcyBjb25maWcsIHNvXG4gICAgLy8gYSB2YWxpZGF0b3IgdGhlIGNvbnN1bWVyIGhhZCByZWdpc3RlcmVkIGNvdWxkIG5vdCBiZSBuYW1lZCBmcm9tIGEgdHlwZWQgc2NoZW1hXG4gICAgLy8gd2l0aG91dCBjYXN0aW5nIGl0IHRvIGBhbnlgLlxuICAgIGZvciAoY29uc3Qga2V5IG9mIGNvbmZpZy5jdXN0b20gPz8gW10pIHtcbiAgICAgIGNvbnN0IGZuID0gdGhpcy5yZXNvbHZlKGtleSk7XG4gICAgICBpZiAoZm4pIGZuTGlzdC5wdXNoKGZuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm5MaXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIGFzeW5jIHZhbGlkYXRvcnMgYSBmaWVsZCBuYW1lcywgaW4gYHZhbGlkYXRvcnMuY3VzdG9tQXN5bmNgLlxuICAgKlxuICAgKiBBc3luYyB2YWxpZGF0b3JzIGFyZSBkZWxpYmVyYXRlbHkgYSBzZXBhcmF0ZSByZWdpc3RyeSBhbmQgYSBzZXBhcmF0ZSBjb25maWcga2V5OiBBbmd1bGFyXG4gICAqIGF0dGFjaGVzIHRoZW0gdGhyb3VnaCBgc2V0QXN5bmNWYWxpZGF0b3JzYCwgcnVucyB0aGVtIG9ubHkgb25jZSB0aGUgc3luY2hyb25vdXMgb25lc1xuICAgKiBwYXNzLCBhbmQgaG9sZHMgdGhlIGNvbnRyb2wgaW4gYHBlbmRpbmdgIHVudGlsIHRoZXkgc2V0dGxlLiBNaXhpbmcgdGhlbSBpbnRvIHRoZVxuICAgKiBzeW5jaHJvbm91cyBsaXN0IHdvdWxkIHNpbGVudGx5IG5ldmVyIHJ1biB0aGVtLlxuICAgKlxuICAgKiBBbiB1bmtub3duIG5hbWUgaXMgc2tpcHBlZCByYXRoZXIgdGhhbiB0aHJvd2luZywgbWF0Y2hpbmcgdGhlIHN5bmNocm9ub3VzIGJlaGF2aW91ci5cbiAgICovXG4gIHJlc29sdmVBc3luY0Zyb21Db25maWcoY29uZmlnPzogRmllbGRWYWxpZGF0b3JzIHwgc3RyaW5nW10pOiBBc3luY1ZhbGlkYXRvckZuW10ge1xuICAgIGlmICghY29uZmlnIHx8IEFycmF5LmlzQXJyYXkoY29uZmlnKSkgcmV0dXJuIFtdO1xuXG4gICAgY29uc3Qgb3V0OiBBc3luY1ZhbGlkYXRvckZuW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBjb25maWcuY3VzdG9tQXN5bmMgPz8gW10pIHtcbiAgICAgIGNvbnN0IGZuID0gdGhpcy5hc3luY1JlZ2lzdHJ5LmdldChrZXkpO1xuICAgICAgaWYgKGZuKSBvdXQucHVzaChmbik7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cbn1cbiJdfQ==
@@ -1,6 +1,6 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  import { InMemoryEntityRefCacheStore } from '../services/entity-ref-cache';
3
- /** Roles that see XXXXXXXXX for masked fields (ADR-003) */
3
+ /** Roles that see XXXXXXXXX for masked fields. Presentational only — enforce authz server-side. */
4
4
  export const MASKED_ROLES = new InjectionToken('MASKED_ROLES');
5
5
  /**
6
6
  * Consumer **overrides**: fieldType string → Angular component class.
@@ -41,8 +41,41 @@ export const ENTITY_REF_REGISTRY = new InjectionToken('ENTITY_REF_REGISTRY');
41
41
  * })
42
42
  */
43
43
  export const LOOKUP_REGISTRY = new InjectionToken('LOOKUP_REGISTRY');
44
+ /**
45
+ * Ordered steps that move a saved record forward when a config's `version` increases.
46
+ *
47
+ * Without these, `EntityFormConfig.version` and `VersionedRecord._configVersion` are
48
+ * declarations nothing acts on: a schema can be edited freely while records keep their old
49
+ * shape, and nothing reconciles the two. Registering migrations makes the version numbers
50
+ * mean something.
51
+ *
52
+ * @example
53
+ * provideNgxDynamicEntity({
54
+ * migrations: [
55
+ * { from: 1, to: 2, description: 'split name', migrate: r => ({ ...r, firstName: r['name'] }) },
56
+ * ],
57
+ * })
58
+ */
59
+ export const RECORD_MIGRATIONS = new InjectionToken('RECORD_MIGRATIONS');
60
+ /**
61
+ * Overrides for the messages shown under an invalid field, keyed by Angular error key
62
+ * (`required`, `minlength`, `pattern`, …) plus a few field-specific keys.
63
+ *
64
+ * The built-in messages are English literals. Registering here is what makes a non-English
65
+ * form possible without re-implementing every field component; unlisted keys keep their
66
+ * default, so overriding one does not mean supplying them all.
67
+ */
68
+ export const VALIDATION_MESSAGES = new InjectionToken('VALIDATION_MESSAGES');
44
69
  /** Registry: validator key → ValidatorFn */
45
70
  export const VALIDATOR_REGISTRY = new InjectionToken('VALIDATOR_REGISTRY');
71
+ /**
72
+ * Registry: validator key → AsyncValidatorFn.
73
+ *
74
+ * Kept separate from VALIDATOR_REGISTRY because Angular applies the two differently: an async
75
+ * validator runs only once the synchronous ones pass, and puts the control into `pending`
76
+ * while it does. Name them from a schema with `validators: { customAsync: ['uniqueEmail'] }`.
77
+ */
78
+ export const ASYNC_VALIDATOR_REGISTRY = new InjectionToken('ASYNC_VALIDATOR_REGISTRY');
46
79
  /** Registry: hook key → async (data, context) => data */
47
80
  export const HOOK_REGISTRY = new InjectionToken('HOOK_REGISTRY');
48
81
  /**
@@ -80,10 +113,6 @@ export const UPLOAD_HANDLER = new InjectionToken('UPLOAD_HANDLER');
80
113
  * { provide: ENTITY_REF_CACHE_STORE, useClass: SessionStorageRefCache }
81
114
  */
82
115
  export const ENTITY_REF_CACHE_STORE = new InjectionToken('ENTITY_REF_CACHE_STORE', { providedIn: 'root', factory: () => new InMemoryEntityRefCacheStore() });
83
- /**
84
- * Consumer-provided predicate function to check whether user roles can edit system default tabs or fields.
85
- * Defaults to allowing edits if not provided.
86
- */
87
116
  /**
88
117
  * Consumer-provided predicate function to check whether user roles can edit system default tabs or fields.
89
118
  * Defaults to allowing edits if not provided.
@@ -94,4 +123,4 @@ export const SYSTEM_DEFAULT_CAN_EDIT = new InjectionToken('SYSTEM_DEFAULT_CAN_ED
94
123
  * Enables cross-entity field referencing (`isReferenced`, `referencedEntityKey`, `referencedFieldId`, `hasDrift`).
95
124
  */
96
125
  export const CONFIG_SOURCE = new InjectionToken('CONFIG_SOURCE');
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0aW9uLXRva2Vucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdG9rZW5zL2luamVjdGlvbi10b2tlbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVEvQyxPQUFPLEVBQUUsMkJBQTJCLEVBQTRCLE1BQU0sOEJBQThCLENBQUM7QUFFckcsMkRBQTJEO0FBQzNELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLGNBQWMsQ0FBVyxjQUFjLENBQUMsQ0FBQztBQUV6RTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLGNBQWMsQ0FBeUIscUJBQXFCLENBQUMsQ0FBQztBQUVyRzs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxJQUFJLGNBQWMsQ0FBOEIsaUJBQWlCLENBQUMsQ0FBQztBQUVsRzs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLGNBQWMsQ0FDbkQscUJBQXFCLENBQ3RCLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsSUFBSSxjQUFjLENBQWdDLGlCQUFpQixDQUFDLENBQUM7QUFFcEcsNENBQTRDO0FBQzVDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksY0FBYyxDQUFtQixvQkFBb0IsQ0FBQyxDQUFDO0FBRTdGLHlEQUF5RDtBQUN6RCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxjQUFjLENBQXdCLGVBQWUsQ0FBQyxDQUFDO0FBRXhGOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLElBQUksY0FBYyxDQUN2RCx5QkFBeUIsQ0FDMUIsQ0FBQztBQUVGOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLElBQUksY0FBYyxDQUFvQixnQkFBZ0IsQ0FBQyxDQUFDO0FBRXRGOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLElBQUksY0FBYyxDQUN0RCx3QkFBd0IsRUFDeEIsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLDJCQUEyQixFQUFFLEVBQUUsQ0FDekUsQ0FBQztBQUVGOzs7R0FHRztBQUNIOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLElBQUksY0FBYyxDQUN2RCx5QkFBeUIsQ0FDMUIsQ0FBQztBQU1GOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxJQUFJLGNBQWMsQ0FBc0IsZUFBZSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgdHlwZSB7IFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHR5cGUge1xyXG4gIENvbW1vbk1vZHVsZUVudHJ5LFxyXG4gIEVudGl0eVJlZmVyZW5jZUxvYWRlcixcclxuICBGaWxlVXBsb2FkSGFuZGxlcixcclxuICBMb29rdXBMaXN0U291cmNlLFxyXG59IGZyb20gJ0BkeW5hbWljLWVudGl0eS9jb3JlJztcclxuaW1wb3J0IHsgSW5NZW1vcnlFbnRpdHlSZWZDYWNoZVN0b3JlLCB0eXBlIEVudGl0eVJlZkNhY2hlU3RvcmUgfSBmcm9tICcuLi9zZXJ2aWNlcy9lbnRpdHktcmVmLWNhY2hlJztcclxuXHJcbi8qKiBSb2xlcyB0aGF0IHNlZSBYWFhYWFhYWFggZm9yIG1hc2tlZCBmaWVsZHMgKEFEUi0wMDMpICovXHJcbmV4cG9ydCBjb25zdCBNQVNLRURfUk9MRVMgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nW10+KCdNQVNLRURfUk9MRVMnKTtcclxuXHJcbi8qKlxyXG4gKiBDb25zdW1lciAqKm92ZXJyaWRlcyoqOiBmaWVsZFR5cGUgc3RyaW5nIOKGkiBBbmd1bGFyIGNvbXBvbmVudCBjbGFzcy5cclxuICogSGlnaGVzdCBwcmlvcml0eSDigJQgYmVhdHMgYW55dGhpbmcgcmVnaXN0ZXJlZCB0aHJvdWdoIGBwcm92aWRlRmllbGRUeXBlcygpYC5cclxuICovXHJcbmV4cG9ydCBjb25zdCBGSUVMRF9UWVBFX1JFR0lTVFJZID0gbmV3IEluamVjdGlvblRva2VuPE1hcDxzdHJpbmcsIFR5cGU8YW55Pj4+KCdGSUVMRF9UWVBFX1JFR0lTVFJZJyk7XHJcblxyXG4vKipcclxuICogTXVsdGktcHJvdmlkZXIgb2YgZmllbGQtdHlwZSBzZXRzLCBjb250cmlidXRlZCBieSBgcHJvdmlkZUZpZWxkVHlwZXMoKWAgL1xyXG4gKiBgcHJvdmlkZUJ1aWx0SW5GaWVsZFR5cGVzKClgLiBNdWx0aSBzbyBzZXZlcmFsIGNhbGxzIGNvbXBvc2UgaW5zdGVhZCBvZiBjbG9iYmVyaW5nO1xyXG4gKiBsYXRlciBzZXRzIHdpbiBvbiBrZXkgY29sbGlzaW9uLiBUaGlzIGlzIHRoZSBzZWFtIHRoYXQga2VlcHMgdW51c2VkIGZpZWxkIGNvbXBvbmVudHNcclxuICogb3V0IG9mIHRoZSBidW5kbGUg4oCUIG5vdGhpbmcgaXMgaW1wb3J0ZWQgdW50aWwgYSBzZXQgbmFtZXMgaXQuXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgRklFTERfVFlQRV9TRVRTID0gbmV3IEluamVjdGlvblRva2VuPFJlY29yZDxzdHJpbmcsIFR5cGU8YW55Pj5bXT4oJ0ZJRUxEX1RZUEVfU0VUUycpO1xyXG5cclxuLyoqXHJcbiAqIFJlZ2lzdHJ5OiBlbnRpdHkga2V5IOKGkiBvcHRpb24gbG9hZGVyLlxyXG4gKlxyXG4gKiBBIGxvYWRlciByZWNlaXZlcyBhIGBSZWZlcmVuY2VMb2FkZXJDb250ZXh0YCAoYHBhcmVudFZhbHVlYCwgYGZpbHRlcnNgLCBgbGFuZ2ApIGFuZCBtYXlcclxuICogcmV0dXJuIGFuIGFycmF5LCBhIFByb21pc2UsIG9yIGFuIE9ic2VydmFibGUgb2YgYFJlZmVyZW5jZU9wdGlvbltdYC4gYGN0eGAgaXMgb3B0aW9uYWwsXHJcbiAqIHNvIGEgemVyby1hcmcgbG9hZGVyIChgKCkgPT4gc3ZjLmxpc3QoKWApIGlzIHN0aWxsIGEgdmFsaWQgcmVnaXN0cmF0aW9uLlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEVOVElUWV9SRUZfUkVHSVNUUlkgPSBuZXcgSW5qZWN0aW9uVG9rZW48TWFwPHN0cmluZywgRW50aXR5UmVmZXJlbmNlTG9hZGVyPj4oXHJcbiAgJ0VOVElUWV9SRUZfUkVHSVNUUlknLFxyXG4pO1xyXG5cclxuLyoqXHJcbiAqIFJlZ2lzdHJ5OiBsaXN0IG5hbWUg4oaSIHRoZSB2YWx1ZXMgb2YgYSBuYW1lZCBtYXN0ZXIgbGlzdCAoYGZpZWxkLmxpc3ROYW1lYCkuXHJcbiAqXHJcbiAqIEEgc291cmNlIG1heSBiZSB0aGUgdmFsdWVzIHRoZW1zZWx2ZXMgKGFycmF5IC8gUHJvbWlzZSAvIE9ic2VydmFibGUpIG9yIGEgKipsb2FkZXIgZnVuY3Rpb24qKixcclxuICogd2hpY2ggaXMgd2hhdCB5b3Ugd2FudCBmb3IgYW55dGhpbmcgZmV0Y2hlZDogYSBiYXJlIFByb21pc2UgaXMgY3JlYXRlZCB3aGVuIHRoZSBwcm92aWRlciBpc1xyXG4gKiBidWlsdCwgc28gZXZlcnkgbGlzdCB3b3VsZCBsb2FkIHdoZXRoZXIgb3Igbm90IGEgZm9ybSB1c2VzIGl0LlxyXG4gKlxyXG4gKiBWYWx1ZXMgYXJlIG5vcm1hbGlzZWQgYnkgYG5vcm1hbGl6ZUxvb2t1cFZhbHVlc2Ag4oCUIGJhcmUgc3RyaW5ncyBhbmQgYExvY2FsaXplZFRleHRgIGFyZVxyXG4gKiBhY2NlcHRlZCBhbG9uZ3NpZGUgdGhlIGZ1bGwgYHsgY29kZSwgbmFtZSwgc29ydE9yZGVyIH1gIHNoYXBlLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBwcm92aWRlTmd4RHluYW1pY0VudGl0eSh7XHJcbiAqICAgbG9va3Vwczoge1xyXG4gKiAgICAgZW1wbG95ZWVTdGF0dXM6ICgpID0+IGxpc3RTZXJ2aWNlLmdldEJ5TmFtZSgnZW1wbG95ZWVTdGF0dXMnKSxcclxuICogICAgIGdyYWRlczogWydKdW5pb3InLCAnU2VuaW9yJ10sXHJcbiAqICAgfSxcclxuICogfSlcclxuICovXHJcbmV4cG9ydCBjb25zdCBMT09LVVBfUkVHSVNUUlkgPSBuZXcgSW5qZWN0aW9uVG9rZW48TWFwPHN0cmluZywgTG9va3VwTGlzdFNvdXJjZT4+KCdMT09LVVBfUkVHSVNUUlknKTtcclxuXHJcbi8qKiBSZWdpc3RyeTogdmFsaWRhdG9yIGtleSDihpIgVmFsaWRhdG9yRm4gKi9cclxuZXhwb3J0IGNvbnN0IFZBTElEQVRPUl9SRUdJU1RSWSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxNYXA8c3RyaW5nLCBhbnk+PignVkFMSURBVE9SX1JFR0lTVFJZJyk7XHJcblxyXG4vKiogUmVnaXN0cnk6IGhvb2sga2V5IOKGkiBhc3luYyAoZGF0YSwgY29udGV4dCkgPT4gZGF0YSAqL1xyXG5leHBvcnQgY29uc3QgSE9PS19SRUdJU1RSWSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxNYXA8c3RyaW5nLCBGdW5jdGlvbj4+KCdIT09LX1JFR0lTVFJZJyk7XHJcblxyXG4vKipcclxuICogQ29uc3VtZXItcmVnaXN0ZXJlZCBsaXN0IG9mIGNvbW1vbiBtb2R1bGUgdGFicyAoZG9jdW1lbnRzLCBhdWRpdCwgdGFza3MsIGV0Yy4pLlxyXG4gKiBUaGUgbGlicmFyeSBzaGlwcyBubyBidWlsdC1pbiBpbXBsZW1lbnRhdGlvbnMuIENvbnN1bWVycyBwcm92aWRlIHRoZWlyIG93biBsaXN0XHJcbiAqIHNvIHRoZSBidWlsZGVyJ3MgbW9kdWxlLXBpY2tlciBhbmQgdGhlIHJlbmRlcmVyJ3MgdGFiIHN3aXRjaGVyIGtub3cgd2hhdCdzIGF2YWlsYWJsZS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogcHJvdmlkZXJzOiBbXHJcbiAqICAge1xyXG4gKiAgICAgcHJvdmlkZTogQ09NTU9OX01PRFVMRVNfUkVHSVNUUlksXHJcbiAqICAgICB1c2VWYWx1ZTogW1xyXG4gKiAgICAgICB7IGlkOiAnZG9jdW1lbnRzJywgbGFiZWw6IHsgZW46ICdEb2N1bWVudHMnIH0sIGNvbXBvbmVudDogJ2FwcC1kb2N1bWVudHMtdmlldycgfSxcclxuICogICAgICAgeyBpZDogJ2F1ZGl0JywgICAgIGxhYmVsOiB7IGVuOiAnQXVkaXQgTG9nJyAgfSwgY29tcG9uZW50OiAnYXBwLWF1ZGl0JyB9LFxyXG4gKiAgICAgXSBzYXRpc2ZpZXMgQ29tbW9uTW9kdWxlRW50cnlbXVxyXG4gKiAgIH1cclxuICogXVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IENPTU1PTl9NT0RVTEVTX1JFR0lTVFJZID0gbmV3IEluamVjdGlvblRva2VuPENvbW1vbk1vZHVsZUVudHJ5W10+KFxyXG4gICdDT01NT05fTU9EVUxFU19SRUdJU1RSWScsXHJcbik7XHJcblxyXG4vKipcclxuICogQ29uc3VtZXItcHJvdmlkZWQgZmlsZS9pbWFnZSB1cGxvYWQgaGFuZGxlci5cclxuICogV2hlbiBzdXBwbGllZCwgaW1hZ2UtZmllbGQgYW5kIGZpbGUtZmllbGQgY2FsbCBpdCB0byBwZXJzaXN0IHRoZSBGaWxlIGFuZCByZWNlaXZlIGEgc3RhYmxlXHJcbiAqIFVSTCBiYWNrLiBXaXRob3V0IGl0IHRoZSBmaWVsZCBzdG9yZXMgYHsgZmlsZSwgbmFtZSwgc2l6ZSwgbWltZVR5cGUgfWAgZm9yIHRoZSBjb25zdW1lciB0b1xyXG4gKiB1cGxvYWQgb24gc3VibWl0LiBNYXkgcmV0dXJuIHRoZSByZXN1bHQgZGlyZWN0bHksIGFzIGEgUHJvbWlzZSwgb3IgYXMgYW4gT2JzZXJ2YWJsZS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogeyBwcm92aWRlOiBVUExPQURfSEFORExFUiwgdXNlRmFjdG9yeTogKCkgPT4gKGZpbGU6IEZpbGUpID0+IG15VXBsb2FkU2VydmljZS51cGxvYWQoZmlsZSkgfVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFVQTE9BRF9IQU5ETEVSID0gbmV3IEluamVjdGlvblRva2VuPEZpbGVVcGxvYWRIYW5kbGVyPignVVBMT0FEX0hBTkRMRVInKTtcclxuXHJcbi8qKlxyXG4gKiBCYWNraW5nIHN0b3JlIGZvciB0aGUgZW50aXR5LXJlZmVyZW5jZSBvcHRpb25zIGNhY2hlLiBEZWZhdWx0cyB0byBpbi1tZW1vcnkuXHJcbiAqIFByb3ZpZGUgeW91ciBvd24gdG8gbWFrZSB0aGUgY2FjaGUgb3V0bGl2ZSBhIHBhZ2UgcmVmcmVzaC5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogeyBwcm92aWRlOiBFTlRJVFlfUkVGX0NBQ0hFX1NUT1JFLCB1c2VDbGFzczogU2Vzc2lvblN0b3JhZ2VSZWZDYWNoZSB9XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgRU5USVRZX1JFRl9DQUNIRV9TVE9SRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxFbnRpdHlSZWZDYWNoZVN0b3JlPihcclxuICAnRU5USVRZX1JFRl9DQUNIRV9TVE9SRScsXHJcbiAgeyBwcm92aWRlZEluOiAncm9vdCcsIGZhY3Rvcnk6ICgpID0+IG5ldyBJbk1lbW9yeUVudGl0eVJlZkNhY2hlU3RvcmUoKSB9LFxyXG4pO1xyXG5cclxuLyoqXHJcbiAqIENvbnN1bWVyLXByb3ZpZGVkIHByZWRpY2F0ZSBmdW5jdGlvbiB0byBjaGVjayB3aGV0aGVyIHVzZXIgcm9sZXMgY2FuIGVkaXQgc3lzdGVtIGRlZmF1bHQgdGFicyBvciBmaWVsZHMuXHJcbiAqIERlZmF1bHRzIHRvIGFsbG93aW5nIGVkaXRzIGlmIG5vdCBwcm92aWRlZC5cclxuICovXHJcbi8qKlxyXG4gKiBDb25zdW1lci1wcm92aWRlZCBwcmVkaWNhdGUgZnVuY3Rpb24gdG8gY2hlY2sgd2hldGhlciB1c2VyIHJvbGVzIGNhbiBlZGl0IHN5c3RlbSBkZWZhdWx0IHRhYnMgb3IgZmllbGRzLlxyXG4gKiBEZWZhdWx0cyB0byBhbGxvd2luZyBlZGl0cyBpZiBub3QgcHJvdmlkZWQuXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgU1lTVEVNX0RFRkFVTFRfQ0FOX0VESVQgPSBuZXcgSW5qZWN0aW9uVG9rZW48KHJvbGVzOiBzdHJpbmdbXSkgPT4gYm9vbGVhbj4oXHJcbiAgJ1NZU1RFTV9ERUZBVUxUX0NBTl9FRElUJyxcclxuKTtcclxuXHJcbmV4cG9ydCB0eXBlIENvbmZpZ1NvdXJjZUhhbmRsZXIgPSAoXHJcbiAgZW50aXR5S2V5OiBzdHJpbmcsXHJcbikgPT4gYW55O1xyXG5cclxuLyoqXHJcbiAqIFJlZ2lzdHJ5L1Jlc29sdmVyIGZvciByZXNvbHZpbmcgYW4gRW50aXR5Rm9ybUNvbmZpZyBieSBlbnRpdHkga2V5IGFjcm9zcyBlbnRpdGllcyAoUGhhc2UgOCkuXHJcbiAqIEVuYWJsZXMgY3Jvc3MtZW50aXR5IGZpZWxkIHJlZmVyZW5jaW5nIChgaXNSZWZlcmVuY2VkYCwgYHJlZmVyZW5jZWRFbnRpdHlLZXlgLCBgcmVmZXJlbmNlZEZpZWxkSWRgLCBgaGFzRHJpZnRgKS5cclxuICovXHJcbmV4cG9ydCBjb25zdCBDT05GSUdfU09VUkNFID0gbmV3IEluamVjdGlvblRva2VuPENvbmZpZ1NvdXJjZUhhbmRsZXI+KCdDT05GSUdfU09VUkNFJyk7XHJcblxyXG5cclxuIl19
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0aW9uLXRva2Vucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdG9rZW5zL2luamVjdGlvbi10b2tlbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVMvQyxPQUFPLEVBQUUsMkJBQTJCLEVBQTRCLE1BQU0sOEJBQThCLENBQUM7QUFFckcsbUdBQW1HO0FBQ25HLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLGNBQWMsQ0FBVyxjQUFjLENBQUMsQ0FBQztBQUV6RTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLGNBQWMsQ0FBeUIscUJBQXFCLENBQUMsQ0FBQztBQUVyRzs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxJQUFJLGNBQWMsQ0FBOEIsaUJBQWlCLENBQUMsQ0FBQztBQUVsRzs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLGNBQWMsQ0FDbkQscUJBQXFCLENBQ3RCLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsSUFBSSxjQUFjLENBQWdDLGlCQUFpQixDQUFDLENBQUM7QUFFcEc7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLGNBQWMsQ0FBb0IsbUJBQW1CLENBQUMsQ0FBQztBQUU1Rjs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxjQUFjLENBQXNCLHFCQUFxQixDQUFDLENBQUM7QUFFbEcsNENBQTRDO0FBQzVDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksY0FBYyxDQUFtQixvQkFBb0IsQ0FBQyxDQUFDO0FBRTdGOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLElBQUksY0FBYyxDQUN4RCwwQkFBMEIsQ0FDM0IsQ0FBQztBQVVGLHlEQUF5RDtBQUN6RCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxjQUFjLENBQXNCLGVBQWUsQ0FBQyxDQUFDO0FBRXRGOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLElBQUksY0FBYyxDQUN2RCx5QkFBeUIsQ0FDMUIsQ0FBQztBQUVGOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLElBQUksY0FBYyxDQUFvQixnQkFBZ0IsQ0FBQyxDQUFDO0FBRXRGOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLElBQUksY0FBYyxDQUN0RCx3QkFBd0IsRUFDeEIsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLDJCQUEyQixFQUFFLEVBQUUsQ0FDekUsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLElBQUksY0FBYyxDQUN2RCx5QkFBeUIsQ0FDMUIsQ0FBQztBQU1GOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxJQUFJLGNBQWMsQ0FBc0IsZUFBZSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbW1vbk1vZHVsZUVudHJ5LFxuICBFbnRpdHlSZWZlcmVuY2VMb2FkZXIsXG4gIEZpbGVVcGxvYWRIYW5kbGVyLFxuICBMb29rdXBMaXN0U291cmNlLFxuICBSZWNvcmRNaWdyYXRpb24sXG59IGZyb20gJ0BkeW5hbWljLWVudGl0eS9jb3JlJztcbmltcG9ydCB7IEluTWVtb3J5RW50aXR5UmVmQ2FjaGVTdG9yZSwgdHlwZSBFbnRpdHlSZWZDYWNoZVN0b3JlIH0gZnJvbSAnLi4vc2VydmljZXMvZW50aXR5LXJlZi1jYWNoZSc7XG5cbi8qKiBSb2xlcyB0aGF0IHNlZSBYWFhYWFhYWFggZm9yIG1hc2tlZCBmaWVsZHMuIFByZXNlbnRhdGlvbmFsIG9ubHkg4oCUIGVuZm9yY2UgYXV0aHogc2VydmVyLXNpZGUuICovXG5leHBvcnQgY29uc3QgTUFTS0VEX1JPTEVTID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZ1tdPignTUFTS0VEX1JPTEVTJyk7XG5cbi8qKlxuICogQ29uc3VtZXIgKipvdmVycmlkZXMqKjogZmllbGRUeXBlIHN0cmluZyDihpIgQW5ndWxhciBjb21wb25lbnQgY2xhc3MuXG4gKiBIaWdoZXN0IHByaW9yaXR5IOKAlCBiZWF0cyBhbnl0aGluZyByZWdpc3RlcmVkIHRocm91Z2ggYHByb3ZpZGVGaWVsZFR5cGVzKClgLlxuICovXG5leHBvcnQgY29uc3QgRklFTERfVFlQRV9SRUdJU1RSWSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxNYXA8c3RyaW5nLCBUeXBlPGFueT4+PignRklFTERfVFlQRV9SRUdJU1RSWScpO1xuXG4vKipcbiAqIE11bHRpLXByb3ZpZGVyIG9mIGZpZWxkLXR5cGUgc2V0cywgY29udHJpYnV0ZWQgYnkgYHByb3ZpZGVGaWVsZFR5cGVzKClgIC9cbiAqIGBwcm92aWRlQnVpbHRJbkZpZWxkVHlwZXMoKWAuIE11bHRpIHNvIHNldmVyYWwgY2FsbHMgY29tcG9zZSBpbnN0ZWFkIG9mIGNsb2JiZXJpbmc7XG4gKiBsYXRlciBzZXRzIHdpbiBvbiBrZXkgY29sbGlzaW9uLiBUaGlzIGlzIHRoZSBzZWFtIHRoYXQga2VlcHMgdW51c2VkIGZpZWxkIGNvbXBvbmVudHNcbiAqIG91dCBvZiB0aGUgYnVuZGxlIOKAlCBub3RoaW5nIGlzIGltcG9ydGVkIHVudGlsIGEgc2V0IG5hbWVzIGl0LlxuICovXG5leHBvcnQgY29uc3QgRklFTERfVFlQRV9TRVRTID0gbmV3IEluamVjdGlvblRva2VuPFJlY29yZDxzdHJpbmcsIFR5cGU8YW55Pj5bXT4oJ0ZJRUxEX1RZUEVfU0VUUycpO1xuXG4vKipcbiAqIFJlZ2lzdHJ5OiBlbnRpdHkga2V5IOKGkiBvcHRpb24gbG9hZGVyLlxuICpcbiAqIEEgbG9hZGVyIHJlY2VpdmVzIGEgYFJlZmVyZW5jZUxvYWRlckNvbnRleHRgIChgcGFyZW50VmFsdWVgLCBgZmlsdGVyc2AsIGBsYW5nYCkgYW5kIG1heVxuICogcmV0dXJuIGFuIGFycmF5LCBhIFByb21pc2UsIG9yIGFuIE9ic2VydmFibGUgb2YgYFJlZmVyZW5jZU9wdGlvbltdYC4gYGN0eGAgaXMgb3B0aW9uYWwsXG4gKiBzbyBhIHplcm8tYXJnIGxvYWRlciAoYCgpID0+IHN2Yy5saXN0KClgKSBpcyBzdGlsbCBhIHZhbGlkIHJlZ2lzdHJhdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IEVOVElUWV9SRUZfUkVHSVNUUlkgPSBuZXcgSW5qZWN0aW9uVG9rZW48TWFwPHN0cmluZywgRW50aXR5UmVmZXJlbmNlTG9hZGVyPj4oXG4gICdFTlRJVFlfUkVGX1JFR0lTVFJZJyxcbik7XG5cbi8qKlxuICogUmVnaXN0cnk6IGxpc3QgbmFtZSDihpIgdGhlIHZhbHVlcyBvZiBhIG5hbWVkIG1hc3RlciBsaXN0IChgZmllbGQubGlzdE5hbWVgKS5cbiAqXG4gKiBBIHNvdXJjZSBtYXkgYmUgdGhlIHZhbHVlcyB0aGVtc2VsdmVzIChhcnJheSAvIFByb21pc2UgLyBPYnNlcnZhYmxlKSBvciBhICoqbG9hZGVyIGZ1bmN0aW9uKiosXG4gKiB3aGljaCBpcyB3aGF0IHlvdSB3YW50IGZvciBhbnl0aGluZyBmZXRjaGVkOiBhIGJhcmUgUHJvbWlzZSBpcyBjcmVhdGVkIHdoZW4gdGhlIHByb3ZpZGVyIGlzXG4gKiBidWlsdCwgc28gZXZlcnkgbGlzdCB3b3VsZCBsb2FkIHdoZXRoZXIgb3Igbm90IGEgZm9ybSB1c2VzIGl0LlxuICpcbiAqIFZhbHVlcyBhcmUgbm9ybWFsaXNlZCBieSBgbm9ybWFsaXplTG9va3VwVmFsdWVzYCDigJQgYmFyZSBzdHJpbmdzIGFuZCBgTG9jYWxpemVkVGV4dGAgYXJlXG4gKiBhY2NlcHRlZCBhbG9uZ3NpZGUgdGhlIGZ1bGwgYHsgY29kZSwgbmFtZSwgc29ydE9yZGVyIH1gIHNoYXBlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBwcm92aWRlTmd4RHluYW1pY0VudGl0eSh7XG4gKiAgIGxvb2t1cHM6IHtcbiAqICAgICBlbXBsb3llZVN0YXR1czogKCkgPT4gbGlzdFNlcnZpY2UuZ2V0QnlOYW1lKCdlbXBsb3llZVN0YXR1cycpLFxuICogICAgIGdyYWRlczogWydKdW5pb3InLCAnU2VuaW9yJ10sXG4gKiAgIH0sXG4gKiB9KVxuICovXG5leHBvcnQgY29uc3QgTE9PS1VQX1JFR0lTVFJZID0gbmV3IEluamVjdGlvblRva2VuPE1hcDxzdHJpbmcsIExvb2t1cExpc3RTb3VyY2U+PignTE9PS1VQX1JFR0lTVFJZJyk7XG5cbi8qKlxuICogT3JkZXJlZCBzdGVwcyB0aGF0IG1vdmUgYSBzYXZlZCByZWNvcmQgZm9yd2FyZCB3aGVuIGEgY29uZmlnJ3MgYHZlcnNpb25gIGluY3JlYXNlcy5cbiAqXG4gKiBXaXRob3V0IHRoZXNlLCBgRW50aXR5Rm9ybUNvbmZpZy52ZXJzaW9uYCBhbmQgYFZlcnNpb25lZFJlY29yZC5fY29uZmlnVmVyc2lvbmAgYXJlXG4gKiBkZWNsYXJhdGlvbnMgbm90aGluZyBhY3RzIG9uOiBhIHNjaGVtYSBjYW4gYmUgZWRpdGVkIGZyZWVseSB3aGlsZSByZWNvcmRzIGtlZXAgdGhlaXIgb2xkXG4gKiBzaGFwZSwgYW5kIG5vdGhpbmcgcmVjb25jaWxlcyB0aGUgdHdvLiBSZWdpc3RlcmluZyBtaWdyYXRpb25zIG1ha2VzIHRoZSB2ZXJzaW9uIG51bWJlcnNcbiAqIG1lYW4gc29tZXRoaW5nLlxuICpcbiAqIEBleGFtcGxlXG4gKiBwcm92aWRlTmd4RHluYW1pY0VudGl0eSh7XG4gKiAgIG1pZ3JhdGlvbnM6IFtcbiAqICAgICB7IGZyb206IDEsIHRvOiAyLCBkZXNjcmlwdGlvbjogJ3NwbGl0IG5hbWUnLCBtaWdyYXRlOiByID0+ICh7IC4uLnIsIGZpcnN0TmFtZTogclsnbmFtZSddIH0pIH0sXG4gKiAgIF0sXG4gKiB9KVxuICovXG5leHBvcnQgY29uc3QgUkVDT1JEX01JR1JBVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48UmVjb3JkTWlncmF0aW9uW10+KCdSRUNPUkRfTUlHUkFUSU9OUycpO1xuXG4vKipcbiAqIE92ZXJyaWRlcyBmb3IgdGhlIG1lc3NhZ2VzIHNob3duIHVuZGVyIGFuIGludmFsaWQgZmllbGQsIGtleWVkIGJ5IEFuZ3VsYXIgZXJyb3Iga2V5XG4gKiAoYHJlcXVpcmVkYCwgYG1pbmxlbmd0aGAsIGBwYXR0ZXJuYCwg4oCmKSBwbHVzIGEgZmV3IGZpZWxkLXNwZWNpZmljIGtleXMuXG4gKlxuICogVGhlIGJ1aWx0LWluIG1lc3NhZ2VzIGFyZSBFbmdsaXNoIGxpdGVyYWxzLiBSZWdpc3RlcmluZyBoZXJlIGlzIHdoYXQgbWFrZXMgYSBub24tRW5nbGlzaFxuICogZm9ybSBwb3NzaWJsZSB3aXRob3V0IHJlLWltcGxlbWVudGluZyBldmVyeSBmaWVsZCBjb21wb25lbnQ7IHVubGlzdGVkIGtleXMga2VlcCB0aGVpclxuICogZGVmYXVsdCwgc28gb3ZlcnJpZGluZyBvbmUgZG9lcyBub3QgbWVhbiBzdXBwbHlpbmcgdGhlbSBhbGwuXG4gKi9cbmV4cG9ydCBjb25zdCBWQUxJREFUSU9OX01FU1NBR0VTID0gbmV3IEluamVjdGlvblRva2VuPFJlY29yZDxzdHJpbmcsIGFueT4+KCdWQUxJREFUSU9OX01FU1NBR0VTJyk7XG5cbi8qKiBSZWdpc3RyeTogdmFsaWRhdG9yIGtleSDihpIgVmFsaWRhdG9yRm4gKi9cbmV4cG9ydCBjb25zdCBWQUxJREFUT1JfUkVHSVNUUlkgPSBuZXcgSW5qZWN0aW9uVG9rZW48TWFwPHN0cmluZywgYW55Pj4oJ1ZBTElEQVRPUl9SRUdJU1RSWScpO1xuXG4vKipcbiAqIFJlZ2lzdHJ5OiB2YWxpZGF0b3Iga2V5IOKGkiBBc3luY1ZhbGlkYXRvckZuLlxuICpcbiAqIEtlcHQgc2VwYXJhdGUgZnJvbSBWQUxJREFUT1JfUkVHSVNUUlkgYmVjYXVzZSBBbmd1bGFyIGFwcGxpZXMgdGhlIHR3byBkaWZmZXJlbnRseTogYW4gYXN5bmNcbiAqIHZhbGlkYXRvciBydW5zIG9ubHkgb25jZSB0aGUgc3luY2hyb25vdXMgb25lcyBwYXNzLCBhbmQgcHV0cyB0aGUgY29udHJvbCBpbnRvIGBwZW5kaW5nYFxuICogd2hpbGUgaXQgZG9lcy4gTmFtZSB0aGVtIGZyb20gYSBzY2hlbWEgd2l0aCBgdmFsaWRhdG9yczogeyBjdXN0b21Bc3luYzogWyd1bmlxdWVFbWFpbCddIH1gLlxuICovXG5leHBvcnQgY29uc3QgQVNZTkNfVkFMSURBVE9SX1JFR0lTVFJZID0gbmV3IEluamVjdGlvblRva2VuPE1hcDxzdHJpbmcsIGFueT4+KFxuICAnQVNZTkNfVkFMSURBVE9SX1JFR0lTVFJZJyxcbik7XG5cbi8qKlxuICogQSByZWdpc3RlcmVkIGhvb2s6IHJlY2VpdmVzIHRoZSBwYXlsb2FkLCByZXR1cm5zIGl0IChvciBhIHJlcGxhY2VtZW50KSwgc3luYyBvciBhc3luYy5cbiAqXG4gKiBTcGVsbGVkIG91dCByYXRoZXIgdGhhbiB0eXBlZCBhcyBgRnVuY3Rpb25gLCB3aGljaCBhY2NlcHRzIGNsYXNzIGRlY2xhcmF0aW9ucyBhbmQgYW55XG4gKiBhcml0eSBhbmQgZ2l2ZXMgYSBjb25zdW1lciBubyBzaWduYXR1cmUgdG8gd3JpdGUgYWdhaW5zdC5cbiAqL1xuZXhwb3J0IHR5cGUgSG9va0ZuID0gKGRhdGE6IGFueSwgY29udGV4dD86IHVua25vd24pID0+IHVua25vd24gfCBQcm9taXNlPHVua25vd24+O1xuXG4vKiogUmVnaXN0cnk6IGhvb2sga2V5IOKGkiBhc3luYyAoZGF0YSwgY29udGV4dCkgPT4gZGF0YSAqL1xuZXhwb3J0IGNvbnN0IEhPT0tfUkVHSVNUUlkgPSBuZXcgSW5qZWN0aW9uVG9rZW48TWFwPHN0cmluZywgSG9va0ZuPj4oJ0hPT0tfUkVHSVNUUlknKTtcblxuLyoqXG4gKiBDb25zdW1lci1yZWdpc3RlcmVkIGxpc3Qgb2YgY29tbW9uIG1vZHVsZSB0YWJzIChkb2N1bWVudHMsIGF1ZGl0LCB0YXNrcywgZXRjLikuXG4gKiBUaGUgbGlicmFyeSBzaGlwcyBubyBidWlsdC1pbiBpbXBsZW1lbnRhdGlvbnMuIENvbnN1bWVycyBwcm92aWRlIHRoZWlyIG93biBsaXN0XG4gKiBzbyB0aGUgYnVpbGRlcidzIG1vZHVsZS1waWNrZXIgYW5kIHRoZSByZW5kZXJlcidzIHRhYiBzd2l0Y2hlciBrbm93IHdoYXQncyBhdmFpbGFibGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIHByb3ZpZGVyczogW1xuICogICB7XG4gKiAgICAgcHJvdmlkZTogQ09NTU9OX01PRFVMRVNfUkVHSVNUUlksXG4gKiAgICAgdXNlVmFsdWU6IFtcbiAqICAgICAgIHsgaWQ6ICdkb2N1bWVudHMnLCBsYWJlbDogeyBlbjogJ0RvY3VtZW50cycgfSwgY29tcG9uZW50OiAnYXBwLWRvY3VtZW50cy12aWV3JyB9LFxuICogICAgICAgeyBpZDogJ2F1ZGl0JywgICAgIGxhYmVsOiB7IGVuOiAnQXVkaXQgTG9nJyAgfSwgY29tcG9uZW50OiAnYXBwLWF1ZGl0JyB9LFxuICogICAgIF0gc2F0aXNmaWVzIENvbW1vbk1vZHVsZUVudHJ5W11cbiAqICAgfVxuICogXVxuICovXG5leHBvcnQgY29uc3QgQ09NTU9OX01PRFVMRVNfUkVHSVNUUlkgPSBuZXcgSW5qZWN0aW9uVG9rZW48Q29tbW9uTW9kdWxlRW50cnlbXT4oXG4gICdDT01NT05fTU9EVUxFU19SRUdJU1RSWScsXG4pO1xuXG4vKipcbiAqIENvbnN1bWVyLXByb3ZpZGVkIGZpbGUvaW1hZ2UgdXBsb2FkIGhhbmRsZXIuXG4gKiBXaGVuIHN1cHBsaWVkLCBpbWFnZS1maWVsZCBhbmQgZmlsZS1maWVsZCBjYWxsIGl0IHRvIHBlcnNpc3QgdGhlIEZpbGUgYW5kIHJlY2VpdmUgYSBzdGFibGVcbiAqIFVSTCBiYWNrLiBXaXRob3V0IGl0IHRoZSBmaWVsZCBzdG9yZXMgYHsgZmlsZSwgbmFtZSwgc2l6ZSwgbWltZVR5cGUgfWAgZm9yIHRoZSBjb25zdW1lciB0b1xuICogdXBsb2FkIG9uIHN1Ym1pdC4gTWF5IHJldHVybiB0aGUgcmVzdWx0IGRpcmVjdGx5LCBhcyBhIFByb21pc2UsIG9yIGFzIGFuIE9ic2VydmFibGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIHsgcHJvdmlkZTogVVBMT0FEX0hBTkRMRVIsIHVzZUZhY3Rvcnk6ICgpID0+IChmaWxlOiBGaWxlKSA9PiBteVVwbG9hZFNlcnZpY2UudXBsb2FkKGZpbGUpIH1cbiAqL1xuZXhwb3J0IGNvbnN0IFVQTE9BRF9IQU5ETEVSID0gbmV3IEluamVjdGlvblRva2VuPEZpbGVVcGxvYWRIYW5kbGVyPignVVBMT0FEX0hBTkRMRVInKTtcblxuLyoqXG4gKiBCYWNraW5nIHN0b3JlIGZvciB0aGUgZW50aXR5LXJlZmVyZW5jZSBvcHRpb25zIGNhY2hlLiBEZWZhdWx0cyB0byBpbi1tZW1vcnkuXG4gKiBQcm92aWRlIHlvdXIgb3duIHRvIG1ha2UgdGhlIGNhY2hlIG91dGxpdmUgYSBwYWdlIHJlZnJlc2guXG4gKlxuICogQGV4YW1wbGVcbiAqIHsgcHJvdmlkZTogRU5USVRZX1JFRl9DQUNIRV9TVE9SRSwgdXNlQ2xhc3M6IFNlc3Npb25TdG9yYWdlUmVmQ2FjaGUgfVxuICovXG5leHBvcnQgY29uc3QgRU5USVRZX1JFRl9DQUNIRV9TVE9SRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxFbnRpdHlSZWZDYWNoZVN0b3JlPihcbiAgJ0VOVElUWV9SRUZfQ0FDSEVfU1RPUkUnLFxuICB7IHByb3ZpZGVkSW46ICdyb290JywgZmFjdG9yeTogKCkgPT4gbmV3IEluTWVtb3J5RW50aXR5UmVmQ2FjaGVTdG9yZSgpIH0sXG4pO1xuXG4vKipcbiAqIENvbnN1bWVyLXByb3ZpZGVkIHByZWRpY2F0ZSBmdW5jdGlvbiB0byBjaGVjayB3aGV0aGVyIHVzZXIgcm9sZXMgY2FuIGVkaXQgc3lzdGVtIGRlZmF1bHQgdGFicyBvciBmaWVsZHMuXG4gKiBEZWZhdWx0cyB0byBhbGxvd2luZyBlZGl0cyBpZiBub3QgcHJvdmlkZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBTWVNURU1fREVGQVVMVF9DQU5fRURJVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjwocm9sZXM6IHN0cmluZ1tdKSA9PiBib29sZWFuPihcbiAgJ1NZU1RFTV9ERUZBVUxUX0NBTl9FRElUJyxcbik7XG5cbmV4cG9ydCB0eXBlIENvbmZpZ1NvdXJjZUhhbmRsZXIgPSAoXG4gIGVudGl0eUtleTogc3RyaW5nLFxuKSA9PiBhbnk7XG5cbi8qKlxuICogUmVnaXN0cnkvUmVzb2x2ZXIgZm9yIHJlc29sdmluZyBhbiBFbnRpdHlGb3JtQ29uZmlnIGJ5IGVudGl0eSBrZXkgYWNyb3NzIGVudGl0aWVzIChQaGFzZSA4KS5cbiAqIEVuYWJsZXMgY3Jvc3MtZW50aXR5IGZpZWxkIHJlZmVyZW5jaW5nIChgaXNSZWZlcmVuY2VkYCwgYHJlZmVyZW5jZWRFbnRpdHlLZXlgLCBgcmVmZXJlbmNlZEZpZWxkSWRgLCBgaGFzRHJpZnRgKS5cbiAqL1xuZXhwb3J0IGNvbnN0IENPTkZJR19TT1VSQ0UgPSBuZXcgSW5qZWN0aW9uVG9rZW48Q29uZmlnU291cmNlSGFuZGxlcj4oJ0NPTkZJR19TT1VSQ0UnKTtcblxuXG4iXX0=
@@ -16,20 +16,41 @@ export * from './lib/services/lookup-registry.service';
16
16
  export * from './lib/services/rbac.service';
17
17
  export * from './lib/services/rules-evaluation.service';
18
18
  export * from './lib/services/config-source.service';
19
+ export * from './lib/services/validation-messages.service';
19
20
  // Components — the library ships form UI only; rendering a data table is the consumer's choice.
20
21
  export * from './lib/form/dynamic-form.component';
21
22
  export * from './lib/form/dynamic-record-form.component';
22
23
  export * from './lib/form/dynamic-field/dynamic-field.component';
23
- // Field type components (individually importable — reusability rule)
24
+ // The contract a field component must satisfy to be registered with provideFieldTypes.
25
+ // Previously this existed only as a code comment and an ADR that is gitignored, so a
26
+ // consumer had no interface to implement against.
27
+ export * from './lib/field-types/field-component.contract';
28
+ // Field type components — every one, individually importable.
29
+ //
30
+ // The tree-shaking seam is `provideFieldTypes({ image: ImageFieldComponent })`: register
31
+ // only what you use and the rest never enters the bundle. That only works for components a
32
+ // consumer can name, and ten of these were unreachable — so wanting eleven of the eighteen
33
+ // meant calling provideBuiltInFieldTypes() and bundling all of them, which is exactly what
34
+ // the seam exists to avoid.
24
35
  export * from './lib/field-types/text-field.component';
25
36
  export * from './lib/field-types/textarea-field.component';
26
37
  export * from './lib/field-types/number-field.component';
38
+ export * from './lib/field-types/currency-field.component';
39
+ export * from './lib/field-types/email-field.component';
40
+ export * from './lib/field-types/password-field.component';
27
41
  export * from './lib/field-types/checkbox-field.component';
42
+ export * from './lib/field-types/boolean-field.component';
28
43
  export * from './lib/field-types/date-field.component';
44
+ export * from './lib/field-types/month-year-field.component';
29
45
  export * from './lib/field-types/dropdown-field.component';
46
+ export * from './lib/field-types/radio-field.component';
30
47
  export * from './lib/field-types/multi-select-field.component';
31
48
  export * from './lib/field-types/entity-ref-field.component';
49
+ export * from './lib/field-types/group-field.component';
50
+ export * from './lib/field-types/array-field.component';
51
+ export * from './lib/field-types/image-field.component';
52
+ export * from './lib/field-types/file-field.component';
32
53
  // Value helpers — a dropdown value is now a language-keyed object, so a consumer rendering
33
54
  // record values needs these. Re-exported so they don't have to depend on core directly.
34
55
  export { resolveLabel, resolveOptionLabel, resolveOptionValue, formatDisplayValue, valuesMatch, normalizeOption, normalizeConfig, } from '@dynamic-entity/core';
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVM7QUFDVCxjQUFjLCtCQUErQixDQUFDO0FBRTlDLFlBQVk7QUFDWixjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMscUNBQXFDLENBQUM7QUFFcEQsV0FBVztBQUNYLGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsNENBQTRDLENBQUM7QUFDM0QsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLHNDQUFzQyxDQUFDO0FBRXJELGdHQUFnRztBQUNoRyxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYyxrREFBa0QsQ0FBQztBQUVqRSxxRUFBcUU7QUFDckUsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsNENBQTRDLENBQUM7QUFDM0QsY0FBYyxnREFBZ0QsQ0FBQztBQUMvRCxjQUFjLDhDQUE4QyxDQUFDO0FBRTdELDJGQUEyRjtBQUMzRix3RkFBd0Y7QUFDeEYsT0FBTyxFQUNMLFlBQVksRUFDWixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixXQUFXLEVBQ1gsZUFBZSxFQUNmLGVBQWUsR0FDaEIsTUFBTSxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRva2Vuc1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi90b2tlbnMvaW5qZWN0aW9uLXRva2Vucyc7XHJcblxyXG4vLyBQcm92aWRlcnNcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJvdmlkZXJzL3Byb3ZpZGUtbmd4LWR5bmFtaWMtZW50aXR5JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJvdmlkZXJzL3Byb3ZpZGUtZmllbGQtdHlwZXMnO1xyXG5cclxuLy8gU2VydmljZXNcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvZmllbGQtcmVnaXN0cnkuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2hvb2stcmVnaXN0cnkuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3ZhbGlkYXRvci1yZWdpc3RyeS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvZW50aXR5LXJlZi1yZWdpc3RyeS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvZW50aXR5LXJlZi1zZWxlY3Rpb24uc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2Nhc2NhZGUtZGF0YS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvZW50aXR5LXJlZmVyZW5jZS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvZW50aXR5LXJlZi1jYWNoZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2xvb2t1cC1yZWdpc3RyeS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvcmJhYy5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvcnVsZXMtZXZhbHVhdGlvbi5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvY29uZmlnLXNvdXJjZS5zZXJ2aWNlJztcclxuXHJcbi8vIENvbXBvbmVudHMg4oCUIHRoZSBsaWJyYXJ5IHNoaXBzIGZvcm0gVUkgb25seTsgcmVuZGVyaW5nIGEgZGF0YSB0YWJsZSBpcyB0aGUgY29uc3VtZXIncyBjaG9pY2UuXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Zvcm0vZHluYW1pYy1mb3JtLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Zvcm0vZHluYW1pYy1yZWNvcmQtZm9ybS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9mb3JtL2R5bmFtaWMtZmllbGQvZHluYW1pYy1maWVsZC5jb21wb25lbnQnO1xyXG5cclxuLy8gRmllbGQgdHlwZSBjb21wb25lbnRzIChpbmRpdmlkdWFsbHkgaW1wb3J0YWJsZSDigJQgcmV1c2FiaWxpdHkgcnVsZSlcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZmllbGQtdHlwZXMvdGV4dC1maWVsZC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWVsZC10eXBlcy90ZXh0YXJlYS1maWVsZC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWVsZC10eXBlcy9udW1iZXItZmllbGQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZmllbGQtdHlwZXMvY2hlY2tib3gtZmllbGQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZmllbGQtdHlwZXMvZGF0ZS1maWVsZC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWVsZC10eXBlcy9kcm9wZG93bi1maWVsZC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWVsZC10eXBlcy9tdWx0aS1zZWxlY3QtZmllbGQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZmllbGQtdHlwZXMvZW50aXR5LXJlZi1maWVsZC5jb21wb25lbnQnO1xyXG5cclxuLy8gVmFsdWUgaGVscGVycyDigJQgYSBkcm9wZG93biB2YWx1ZSBpcyBub3cgYSBsYW5ndWFnZS1rZXllZCBvYmplY3QsIHNvIGEgY29uc3VtZXIgcmVuZGVyaW5nXHJcbi8vIHJlY29yZCB2YWx1ZXMgbmVlZHMgdGhlc2UuIFJlLWV4cG9ydGVkIHNvIHRoZXkgZG9uJ3QgaGF2ZSB0byBkZXBlbmQgb24gY29yZSBkaXJlY3RseS5cclxuZXhwb3J0IHtcclxuICByZXNvbHZlTGFiZWwsXHJcbiAgcmVzb2x2ZU9wdGlvbkxhYmVsLFxyXG4gIHJlc29sdmVPcHRpb25WYWx1ZSxcclxuICBmb3JtYXREaXNwbGF5VmFsdWUsXHJcbiAgdmFsdWVzTWF0Y2gsXHJcbiAgbm9ybWFsaXplT3B0aW9uLFxyXG4gIG5vcm1hbGl6ZUNvbmZpZyxcclxufSBmcm9tICdAZHluYW1pYy1lbnRpdHkvY29yZSc7XHJcblxyXG4vLyBSZS1leHBvcnQgY29yZSB0eXBlcyBzbyBjb25zdW1lcnMgbmVlZCBvbmx5IG9uZSBpbXBvcnRcclxuZXhwb3J0IHR5cGUge1xyXG4gIEVudGl0eUZvcm1Db25maWcsXHJcbiAgTmVzdGVkVGFiQ29uZmlnLFxyXG4gIE5lc3RlZEZpZWxkQ29uZmlnLFxyXG4gIEZpZWxkVGFibGVDb25maWcsXHJcbiAgUmljaEZpZWxkVHlwZSxcclxuICBMb2NhbGl6ZWRUZXh0LFxyXG4gIERyb3Bkb3duT3B0aW9uLFxyXG4gIFZlcnNpb25lZFJlY29yZCxcclxuICBFbnRpdHlQZXJtaXNzaW9ucyxcclxuICBSYmFjQ29udGV4dCxcclxuICBGaWVsZFZhbGlkYXRvcnMsXHJcbiAgRW50aXR5UmVmZXJlbmNlQ29uZmlnLFxyXG4gIEVudGl0eVJlZmVyZW5jZUxvYWRlcixcclxuICBSZWZlcmVuY2VPcHRpb24sXHJcbiAgUmVmZXJlbmNlTG9hZGVyQ29udGV4dCxcclxuICBBdXRvUGF0Y2hDb25maWcsXHJcbiAgUGF0Y2hPblRydWVNYXBwaW5nLFxyXG4gIEZpbGVSZWYsXHJcbiAgRm9ybVJ1bGUsXHJcbiAgUnVsZUNvbmRpdGlvbixcclxuICBSdWxlQWN0aW9uLFxyXG4gIFJ1bGVFdmFsdWF0aW9uUmVzdWx0LFxyXG4gIENvbW1vbk1vZHVsZUVudHJ5LFxyXG59IGZyb20gJ0BkeW5hbWljLWVudGl0eS9jb3JlJztcclxuIl19
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVM7QUFDVCxjQUFjLCtCQUErQixDQUFDO0FBRTlDLFlBQVk7QUFDWixjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMscUNBQXFDLENBQUM7QUFFcEQsV0FBVztBQUNYLGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsNENBQTRDLENBQUM7QUFDM0QsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsNENBQTRDLENBQUM7QUFFM0QsZ0dBQWdHO0FBQ2hHLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYywwQ0FBMEMsQ0FBQztBQUN6RCxjQUFjLGtEQUFrRCxDQUFDO0FBRWpFLHVGQUF1RjtBQUN2RixxRkFBcUY7QUFDckYsa0RBQWtEO0FBQ2xELGNBQWMsNENBQTRDLENBQUM7QUFFM0QsOERBQThEO0FBQzlELEVBQUU7QUFDRix5RkFBeUY7QUFDekYsMkZBQTJGO0FBQzNGLDJGQUEyRjtBQUMzRiwyRkFBMkY7QUFDM0YsNEJBQTRCO0FBQzVCLGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsNENBQTRDLENBQUM7QUFDM0QsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsNENBQTRDLENBQUM7QUFDM0QsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsZ0RBQWdELENBQUM7QUFDL0QsY0FBYyw4Q0FBOEMsQ0FBQztBQUM3RCxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLHdDQUF3QyxDQUFDO0FBRXZELDJGQUEyRjtBQUMzRix3RkFBd0Y7QUFDeEYsT0FBTyxFQUNMLFlBQVksRUFDWixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixXQUFXLEVBQ1gsZUFBZSxFQUNmLGVBQWUsR0FDaEIsTUFBTSxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRva2Vuc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdG9rZW5zL2luamVjdGlvbi10b2tlbnMnO1xuXG4vLyBQcm92aWRlcnNcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Byb3ZpZGVycy9wcm92aWRlLW5neC1keW5hbWljLWVudGl0eSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcm92aWRlcnMvcHJvdmlkZS1maWVsZC10eXBlcyc7XG5cbi8vIFNlcnZpY2VzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9maWVsZC1yZWdpc3RyeS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2hvb2stcmVnaXN0cnkuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy92YWxpZGF0b3ItcmVnaXN0cnkuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9lbnRpdHktcmVmLXJlZ2lzdHJ5LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvZW50aXR5LXJlZi1zZWxlY3Rpb24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9jYXNjYWRlLWRhdGEuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9lbnRpdHktcmVmZXJlbmNlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvZW50aXR5LXJlZi1jYWNoZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9sb29rdXAtcmVnaXN0cnkuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9yYmFjLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvcnVsZXMtZXZhbHVhdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2NvbmZpZy1zb3VyY2Uuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy92YWxpZGF0aW9uLW1lc3NhZ2VzLnNlcnZpY2UnO1xuXG4vLyBDb21wb25lbnRzIOKAlCB0aGUgbGlicmFyeSBzaGlwcyBmb3JtIFVJIG9ubHk7IHJlbmRlcmluZyBhIGRhdGEgdGFibGUgaXMgdGhlIGNvbnN1bWVyJ3MgY2hvaWNlLlxuZXhwb3J0ICogZnJvbSAnLi9saWIvZm9ybS9keW5hbWljLWZvcm0uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Zvcm0vZHluYW1pYy1yZWNvcmQtZm9ybS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZm9ybS9keW5hbWljLWZpZWxkL2R5bmFtaWMtZmllbGQuY29tcG9uZW50JztcblxuLy8gVGhlIGNvbnRyYWN0IGEgZmllbGQgY29tcG9uZW50IG11c3Qgc2F0aXNmeSB0byBiZSByZWdpc3RlcmVkIHdpdGggcHJvdmlkZUZpZWxkVHlwZXMuXG4vLyBQcmV2aW91c2x5IHRoaXMgZXhpc3RlZCBvbmx5IGFzIGEgY29kZSBjb21tZW50IGFuZCBhbiBBRFIgdGhhdCBpcyBnaXRpZ25vcmVkLCBzbyBhXG4vLyBjb25zdW1lciBoYWQgbm8gaW50ZXJmYWNlIHRvIGltcGxlbWVudCBhZ2FpbnN0LlxuZXhwb3J0ICogZnJvbSAnLi9saWIvZmllbGQtdHlwZXMvZmllbGQtY29tcG9uZW50LmNvbnRyYWN0JztcblxuLy8gRmllbGQgdHlwZSBjb21wb25lbnRzIOKAlCBldmVyeSBvbmUsIGluZGl2aWR1YWxseSBpbXBvcnRhYmxlLlxuLy9cbi8vIFRoZSB0cmVlLXNoYWtpbmcgc2VhbSBpcyBgcHJvdmlkZUZpZWxkVHlwZXMoeyBpbWFnZTogSW1hZ2VGaWVsZENvbXBvbmVudCB9KWA6IHJlZ2lzdGVyXG4vLyBvbmx5IHdoYXQgeW91IHVzZSBhbmQgdGhlIHJlc3QgbmV2ZXIgZW50ZXJzIHRoZSBidW5kbGUuIFRoYXQgb25seSB3b3JrcyBmb3IgY29tcG9uZW50cyBhXG4vLyBjb25zdW1lciBjYW4gbmFtZSwgYW5kIHRlbiBvZiB0aGVzZSB3ZXJlIHVucmVhY2hhYmxlIOKAlCBzbyB3YW50aW5nIGVsZXZlbiBvZiB0aGUgZWlnaHRlZW5cbi8vIG1lYW50IGNhbGxpbmcgcHJvdmlkZUJ1aWx0SW5GaWVsZFR5cGVzKCkgYW5kIGJ1bmRsaW5nIGFsbCBvZiB0aGVtLCB3aGljaCBpcyBleGFjdGx5IHdoYXRcbi8vIHRoZSBzZWFtIGV4aXN0cyB0byBhdm9pZC5cbmV4cG9ydCAqIGZyb20gJy4vbGliL2ZpZWxkLXR5cGVzL3RleHQtZmllbGQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ZpZWxkLXR5cGVzL3RleHRhcmVhLWZpZWxkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWVsZC10eXBlcy9udW1iZXItZmllbGQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ZpZWxkLXR5cGVzL2N1cnJlbmN5LWZpZWxkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWVsZC10eXBlcy9lbWFpbC1maWVsZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZmllbGQtdHlwZXMvcGFzc3dvcmQtZmllbGQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ZpZWxkLXR5cGVzL2NoZWNrYm94LWZpZWxkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWVsZC10eXBlcy9ib29sZWFuLWZpZWxkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWVsZC10eXBlcy9kYXRlLWZpZWxkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWVsZC10eXBlcy9tb250aC15ZWFyLWZpZWxkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWVsZC10eXBlcy9kcm9wZG93bi1maWVsZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZmllbGQtdHlwZXMvcmFkaW8tZmllbGQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ZpZWxkLXR5cGVzL211bHRpLXNlbGVjdC1maWVsZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZmllbGQtdHlwZXMvZW50aXR5LXJlZi1maWVsZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZmllbGQtdHlwZXMvZ3JvdXAtZmllbGQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ZpZWxkLXR5cGVzL2FycmF5LWZpZWxkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWVsZC10eXBlcy9pbWFnZS1maWVsZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZmllbGQtdHlwZXMvZmlsZS1maWVsZC5jb21wb25lbnQnO1xuXG4vLyBWYWx1ZSBoZWxwZXJzIOKAlCBhIGRyb3Bkb3duIHZhbHVlIGlzIG5vdyBhIGxhbmd1YWdlLWtleWVkIG9iamVjdCwgc28gYSBjb25zdW1lciByZW5kZXJpbmdcbi8vIHJlY29yZCB2YWx1ZXMgbmVlZHMgdGhlc2UuIFJlLWV4cG9ydGVkIHNvIHRoZXkgZG9uJ3QgaGF2ZSB0byBkZXBlbmQgb24gY29yZSBkaXJlY3RseS5cbmV4cG9ydCB7XG4gIHJlc29sdmVMYWJlbCxcbiAgcmVzb2x2ZU9wdGlvbkxhYmVsLFxuICByZXNvbHZlT3B0aW9uVmFsdWUsXG4gIGZvcm1hdERpc3BsYXlWYWx1ZSxcbiAgdmFsdWVzTWF0Y2gsXG4gIG5vcm1hbGl6ZU9wdGlvbixcbiAgbm9ybWFsaXplQ29uZmlnLFxufSBmcm9tICdAZHluYW1pYy1lbnRpdHkvY29yZSc7XG5cbi8vIFJlLWV4cG9ydCBjb3JlIHR5cGVzIHNvIGNvbnN1bWVycyBuZWVkIG9ubHkgb25lIGltcG9ydFxuZXhwb3J0IHR5cGUge1xuICBFbnRpdHlGb3JtQ29uZmlnLFxuICBOZXN0ZWRUYWJDb25maWcsXG4gIE5lc3RlZEZpZWxkQ29uZmlnLFxuICBGaWVsZFRhYmxlQ29uZmlnLFxuICBSaWNoRmllbGRUeXBlLFxuICBMb2NhbGl6ZWRUZXh0LFxuICBEcm9wZG93bk9wdGlvbixcbiAgVmVyc2lvbmVkUmVjb3JkLFxuICBFbnRpdHlQZXJtaXNzaW9ucyxcbiAgUmJhY0NvbnRleHQsXG4gIEZpZWxkVmFsaWRhdG9ycyxcbiAgRW50aXR5UmVmZXJlbmNlQ29uZmlnLFxuICBFbnRpdHlSZWZlcmVuY2VMb2FkZXIsXG4gIFJlZmVyZW5jZU9wdGlvbixcbiAgUmVmZXJlbmNlTG9hZGVyQ29udGV4dCxcbiAgQXV0b1BhdGNoQ29uZmlnLFxuICBQYXRjaE9uVHJ1ZU1hcHBpbmcsXG4gIEZpbGVSZWYsXG4gIEZvcm1SdWxlLFxuICBSdWxlQ29uZGl0aW9uLFxuICBSdWxlQWN0aW9uLFxuICBSdWxlRXZhbHVhdGlvblJlc3VsdCxcbiAgQ29tbW9uTW9kdWxlRW50cnksXG59IGZyb20gJ0BkeW5hbWljLWVudGl0eS9jb3JlJztcbiJdfQ==