@wemake4u/form-player-se 1.0.27 → 1.0.29

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 (79) hide show
  1. package/esm2022/lib/components/actionsCellRenderer/actionsCellRenderer.component.mjs +3 -3
  2. package/esm2022/lib/components/deleteRowRenderer/deleteRowRenderer.component.mjs +3 -3
  3. package/esm2022/lib/components/hostCellRenderer/hostCellRenderer.component.mjs +3 -3
  4. package/esm2022/lib/components/objectURLRenderer/objectURLRenderer.component.mjs +3 -3
  5. package/esm2022/lib/components/setFilter/setFilter.component.mjs +3 -3
  6. package/esm2022/lib/controls/displayfield.mjs +4 -0
  7. package/esm2022/lib/controls/factory.mjs +4 -1
  8. package/esm2022/lib/dialog/dialog.component.mjs +3 -3
  9. package/esm2022/lib/directives/accordion.directive.mjs +3 -3
  10. package/esm2022/lib/directives/accordionpanel.directive.mjs +3 -3
  11. package/esm2022/lib/directives/adorner.directive.mjs +3 -3
  12. package/esm2022/lib/directives/change.directive.mjs +3 -3
  13. package/esm2022/lib/directives/collapse.directive.mjs +3 -3
  14. package/esm2022/lib/directives/date.directive.mjs +3 -3
  15. package/esm2022/lib/directives/dialog.directive.mjs +3 -3
  16. package/esm2022/lib/directives/display.directive.mjs +3 -3
  17. package/esm2022/lib/directives/dropdown.directive.mjs +17 -8
  18. package/esm2022/lib/directives/formIndex.directive.mjs +3 -3
  19. package/esm2022/lib/directives/framesecurity.directive.mjs +3 -3
  20. package/esm2022/lib/directives/grid.directive.mjs +49 -13
  21. package/esm2022/lib/directives/number.directive.mjs +23 -11
  22. package/esm2022/lib/directives/readonly.directive.mjs +3 -3
  23. package/esm2022/lib/directives/refresh.directive.mjs +3 -3
  24. package/esm2022/lib/directives/register.directive.mjs +3 -3
  25. package/esm2022/lib/directives/repeat.directive.mjs +5 -4
  26. package/esm2022/lib/directives/tab.directive.mjs +3 -3
  27. package/esm2022/lib/directives/tabcontrol.directive.mjs +3 -3
  28. package/esm2022/lib/directives/text.directive.mjs +3 -3
  29. package/esm2022/lib/directives/updateblur.directive.mjs +3 -3
  30. package/esm2022/lib/directives/validationpatch.directive.mjs +34 -0
  31. package/esm2022/lib/dynamic-fields/dynamic-fields.component.mjs +36 -16
  32. package/esm2022/lib/dynamic-form/dynamic-form.component.mjs +77 -62
  33. package/esm2022/lib/dynamic-host/dynamic-host.component.mjs +3 -3
  34. package/esm2022/lib/interact/confirmation.mjs +3 -3
  35. package/esm2022/lib/interact/notification.mjs +3 -3
  36. package/esm2022/lib/interact/prompt.mjs +3 -3
  37. package/esm2022/lib/services/chart.service.mjs +3 -3
  38. package/esm2022/lib/services/data.service.mjs +3 -3
  39. package/esm2022/lib/services/dialog.service.mjs +3 -3
  40. package/esm2022/lib/services/disable.service.mjs +74 -0
  41. package/esm2022/lib/services/event.service.mjs +3 -3
  42. package/esm2022/lib/services/feel.service.mjs +3 -3
  43. package/esm2022/lib/services/form.service.mjs +9 -9
  44. package/esm2022/lib/services/formatter.service.mjs +3 -3
  45. package/esm2022/lib/services/function.service.mjs +3 -3
  46. package/esm2022/lib/services/global.service.mjs +3 -3
  47. package/esm2022/lib/services/grid.service.mjs +3 -3
  48. package/esm2022/lib/services/markdown.service.mjs +3 -3
  49. package/esm2022/lib/services/metadata.service.mjs +3 -3
  50. package/esm2022/lib/services/mime.service.mjs +3 -3
  51. package/esm2022/lib/services/programmability.service.mjs +27 -144
  52. package/esm2022/lib/services/register.service.mjs +3 -3
  53. package/esm2022/lib/services/sanitize.service.mjs +3 -3
  54. package/esm2022/lib/services/scope.service.mjs +3 -3
  55. package/esm2022/lib/services/status.service.mjs +49 -0
  56. package/esm2022/lib/services/toast.service.mjs +3 -3
  57. package/esm2022/lib/services/validation.service.mjs +179 -0
  58. package/esm2022/lib/services/weak.service.mjs +3 -3
  59. package/esm2022/lib/shared/template-wrapper/template-wrapper.component.mjs +3 -3
  60. package/esm2022/lib/utils/CallbackRegistry.mjs +16 -0
  61. package/esm2022/lib/utils/syncronize.mjs +34 -0
  62. package/esm2022/public-api.mjs +2 -1
  63. package/fesm2022/wemake4u-form-player-se.mjs +749 -411
  64. package/fesm2022/wemake4u-form-player-se.mjs.map +1 -1
  65. package/lib/controls/displayfield.d.ts +3 -0
  66. package/lib/directives/dropdown.directive.d.ts +4 -1
  67. package/lib/directives/grid.directive.d.ts +2 -0
  68. package/lib/directives/validationpatch.directive.d.ts +7 -0
  69. package/lib/dynamic-fields/dynamic-fields.component.d.ts +5 -1
  70. package/lib/dynamic-form/dynamic-form.component.d.ts +10 -5
  71. package/lib/services/disable.service.d.ts +21 -0
  72. package/lib/services/form.service.d.ts +1 -1
  73. package/lib/services/programmability.service.d.ts +6 -14
  74. package/lib/services/status.service.d.ts +19 -0
  75. package/lib/services/validation.service.d.ts +36 -0
  76. package/lib/utils/CallbackRegistry.d.ts +6 -0
  77. package/lib/utils/syncronize.d.ts +1 -0
  78. package/package.json +1 -1
  79. package/public-api.d.ts +1 -0
@@ -0,0 +1,179 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Validators } from '@angular/forms';
3
+ import { localize } from '../locale/localize';
4
+ import { isObservable, map, of, catchError, take } from 'rxjs';
5
+ import { toFeelable } from '../utils/feelable';
6
+ import { CallbackRegistry } from '../utils/CallbackRegistry';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@wemake4u/interact";
9
+ import * as i2 from "../services/programmability.service";
10
+ export class ValidationService {
11
+ languageService;
12
+ programmability;
13
+ constructor(languageService, programmability) {
14
+ this.languageService = languageService;
15
+ this.programmability = programmability;
16
+ }
17
+ suppress = false;
18
+ createCollection() {
19
+ return new Map();
20
+ }
21
+ addToCollection(collection, control, component, formGroup) {
22
+ collection.set(control, { component, formGroup });
23
+ }
24
+ setupCollection(collection) {
25
+ collection.forEach((componentValidation, control) => {
26
+ const component = componentValidation.component;
27
+ const currentGroup = componentValidation.formGroup;
28
+ const required = component?.validate?.required;
29
+ const rules = this.getRules(component);
30
+ const [validators, asyncValidators, watching] = this.validateRules(currentGroup, component, required, rules);
31
+ control.setValidators(validators);
32
+ control.setAsyncValidators(asyncValidators);
33
+ watching(control);
34
+ });
35
+ }
36
+ getRules(component) {
37
+ if (!Array.isArray(component.validations))
38
+ return [];
39
+ return component.validations?.map((rule) => {
40
+ return {
41
+ expression: rule.expression,
42
+ type: rule.type,
43
+ message: this.locale(rule, 'message'),
44
+ async: rule.async === true
45
+ };
46
+ });
47
+ }
48
+ validateRules(formGroup, component, required, validations) {
49
+ const validators = [];
50
+ const asyncValidators = [];
51
+ const noWatching = () => { };
52
+ if (required === true) {
53
+ validators.push(Validators.required);
54
+ }
55
+ if (!Array.isArray(validations)) {
56
+ return [validators, asyncValidators, noWatching];
57
+ }
58
+ const callbacks = new CallbackRegistry();
59
+ validations.forEach((item) => {
60
+ if (!this.programmability.isExpression(item.expression))
61
+ return;
62
+ const logger = (control, result) => this.logValidation(component, item, control, result);
63
+ if (item.type === "validate" || item.type === "invalidate") {
64
+ const predicate = item.type === "validate"
65
+ ? (result) => result
66
+ : (result) => !result;
67
+ if (item.async) {
68
+ asyncValidators.push(this.createAsyncValidator(formGroup, item, callbacks, predicate, logger));
69
+ }
70
+ else {
71
+ validators.push(this.createValidator(formGroup, item, predicate, logger));
72
+ }
73
+ }
74
+ });
75
+ const watching = (control) => {
76
+ this.watchForValidation(formGroup, control, component.key, validations, callbacks);
77
+ };
78
+ return [validators, asyncValidators, watching];
79
+ }
80
+ createValidator(formGroup, item, predicate, callback) {
81
+ return (control) => {
82
+ if (this.suppress)
83
+ return null;
84
+ const result = this.programmability.evaluateUnary(formGroup, item.expression, control.value);
85
+ if (isObservable(result)) {
86
+ console.warn("[Validator] Unexpected observable result in createValidator", { expression: item.expression, value: control.value, rule: item });
87
+ return null;
88
+ }
89
+ const validate = predicate(result) ? null : this.validationErrors(formGroup, item);
90
+ callback(control, validate);
91
+ return validate;
92
+ };
93
+ }
94
+ createAsyncValidator(formGroup, item, callbacks, predicate, callback) {
95
+ const unsetState = () => ({ value: Symbol('unset'), result: null });
96
+ let state = unsetState();
97
+ callbacks.register(() => state = unsetState());
98
+ const getResult = (control) => this.programmability.evaluate(formGroup, item.expression, {
99
+ cacheable: false,
100
+ extendContext: () => { return { "?": control.value }; }
101
+ });
102
+ const computeOnce = (control) => {
103
+ const v = control.value;
104
+ if (state.value !== v) {
105
+ let result = getResult(control);
106
+ if (isObservable(result)) {
107
+ result = result.pipe(take(1), map((value) => {
108
+ const validate = predicate(value) ? null : this.validationErrors(formGroup, item);
109
+ callback(control, validate);
110
+ return validate;
111
+ }), catchError(err => {
112
+ console.error("[AsyncValidator] Evaluation error", { expression: item.expression, err });
113
+ return this.nullObserver;
114
+ }));
115
+ }
116
+ state = { value: v, result: result };
117
+ }
118
+ return state.result;
119
+ };
120
+ return (control) => {
121
+ if (this.suppress)
122
+ return this.nullObserver;
123
+ const result = computeOnce(control);
124
+ if (!isObservable(result)) {
125
+ console.warn("[AsyncValidator] Expected observable but got non-observable result", { expression: item.expression, value: control.value, result, rule: item });
126
+ return this.nullObserver;
127
+ }
128
+ return result;
129
+ };
130
+ }
131
+ validationErrors(formGroup, item) {
132
+ const message = this.programmability.evaluateString(formGroup, item.message);
133
+ const validationError = { error: true, message };
134
+ return validationError;
135
+ }
136
+ watchForValidation(formGroup, control, key, validations, callbacks) {
137
+ if (Array.isArray(validations)) {
138
+ const expressions = validations
139
+ .filter(item => this.programmability.isExpression(item.expression))
140
+ .map(item => "=" + this.programmability.getExpression(item.expression));
141
+ if (expressions.length === 0)
142
+ return;
143
+ const feelable = toFeelable(expressions);
144
+ const dependencies = this.programmability.getDependencies(feelable)
145
+ .filter(dep => dep !== key);
146
+ if (dependencies.length === 0)
147
+ return;
148
+ this.programmability.watch(formGroup, dependencies, () => {
149
+ setTimeout(() => {
150
+ callbacks.invoke();
151
+ control.updateValueAndValidity({ emitEvent: false });
152
+ });
153
+ });
154
+ }
155
+ }
156
+ logValidation = (component, rule, control, result) => {
157
+ if (this.programmability.verbose) {
158
+ if (result != null) {
159
+ console.warn("[Validation] Failed", { control, component, rule, result });
160
+ }
161
+ else {
162
+ console.log("[Validation] Success", { control, component, rule, result });
163
+ }
164
+ }
165
+ };
166
+ nullObserver = of(null);
167
+ get language() {
168
+ return this.languageService.getLanguage();
169
+ }
170
+ locale(component, key) {
171
+ return localize(this.language, component, key);
172
+ }
173
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ValidationService, deps: [{ token: i1.LanguageService }, { token: i2.ProgrammabilityService }], target: i0.ɵɵFactoryTarget.Injectable });
174
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ValidationService });
175
+ }
176
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ValidationService, decorators: [{
177
+ type: Injectable
178
+ }], ctorParameters: () => [{ type: i1.LanguageService }, { type: i2.ProgrammabilityService }] });
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvc2VydmljZXMvdmFsaWRhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUErRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6SCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7O0FBRzdELE1BQU0sT0FBTyxpQkFBaUI7SUFHbEI7SUFDQTtJQUZWLFlBQ1UsZUFBZ0MsRUFDaEMsZUFBdUM7UUFEdkMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLG9CQUFlLEdBQWYsZUFBZSxDQUF3QjtJQUNqRCxDQUFDO0lBRUQsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUUxQixnQkFBZ0I7UUFDZCxPQUFPLElBQUksR0FBRyxFQUFxQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxlQUFlLENBQUMsVUFBZ0MsRUFBRSxPQUF3QixFQUFFLFNBQWMsRUFBRSxTQUFvQjtRQUM5RyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxlQUFlLENBQUMsVUFBZ0M7UUFDOUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ2xELE1B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UUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNqRCxDQUFDO3dHQTNOVSxpQkFBaUI7NEdBQWpCLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUHJvZ3JhbW1hYmlsaXR5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2dyYW1tYWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBBc3luY1ZhbGlkYXRvckZuLCBGb3JtR3JvdXAsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZuLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICdAd2VtYWtlNHUvaW50ZXJhY3QnO1xyXG5pbXBvcnQgeyBsb2NhbGl6ZSB9IGZyb20gJy4uL2xvY2FsZS9sb2NhbGl6ZSc7XHJcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgY2F0Y2hFcnJvciwgdGFrZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0b0ZlZWxhYmxlIH0gZnJvbSAnLi4vdXRpbHMvZmVlbGFibGUnO1xyXG5pbXBvcnQgeyBDYWxsYmFja1JlZ2lzdHJ5IH0gZnJvbSAnLi4vdXRpbHMvQ2FsbGJhY2tSZWdpc3RyeSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uU2VydmljZSAge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHByb2dyYW1tYWJpbGl0eTogUHJvZ3JhbW1hYmlsaXR5U2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgc3VwcHJlc3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY3JlYXRlQ29sbGVjdGlvbigpOiBWYWxpZGF0aW9uQ29sbGVjdGlvbiB7XHJcbiAgICByZXR1cm4gbmV3IE1hcDxBYnN0cmFjdENvbnRyb2wsIENvbXBvbmVudENvbnRleHQ+KCk7XHJcbiAgfVxyXG5cclxuICBhZGRUb0NvbGxlY3Rpb24oY29sbGVjdGlvbjogVmFsaWRhdGlvbkNvbGxlY3Rpb24sIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgY29tcG9uZW50OiBhbnksIGZvcm1Hcm91cDogRm9ybUdyb3VwKSB7XHJcbiAgICBjb2xsZWN0aW9uLnNldChjb250cm9sLCB7IGNvbXBvbmVudCwgZm9ybUdyb3VwIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0dXBDb2xsZWN0aW9uKGNvbGxlY3Rpb246IFZhbGlkYXRpb25Db2xsZWN0aW9uKSB7XHJcbiAgICBjb2xsZWN0aW9uLmZvckVhY2goKGNvbXBvbmVudFZhbGlkYXRpb24sIGNvbnRyb2wpID0+IHtcclxuICAgICAgY29uc3QgY29tcG9uZW50ID0gY29tcG9uZW50VmFsaWRhdGlvbi5jb21wb25lbnQ7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRHcm91cCA9IGNvbXBvbmVudFZhbGlkYXRpb24uZm9ybUdyb3VwO1xyXG4gICAgICBjb25zdCByZXF1aXJlZCA9IGNvbXBvbmVudD8udmFsaWRhdGU/LnJlcXVpcmVkO1xyXG4gICAgICBjb25zdCBydWxlcyA9IHRoaXMuZ2V0UnVsZXMoY29tcG9uZW50KTtcclxuICAgICAgY29uc3QgW3ZhbGlkYXRvcnMsIGFzeW5jVmFsaWRhdG9ycywgd2F0Y2hpbmddID0gdGhpcy52YWxpZGF0ZVJ1bGVzKGN1cnJlbnRHcm91cCwgY29tcG9uZW50LCByZXF1aXJlZCwgcnVsZXMpO1xyXG4gICAgICBjb250cm9sLnNldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XHJcbiAgICAgIGNvbnRyb2wuc2V0QXN5bmNWYWxpZGF0b3JzKGFzeW5jVmFsaWRhdG9ycyk7XHJcbiAgICAgIHdhdGNoaW5nKGNvbnRyb2wpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJ1bGVzKGNvbXBvbmVudDogYW55KTogVmFsaWRhdGlvblJ1bGVbXSB7XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29tcG9uZW50LnZhbGlkYXRpb25zKSkgcmV0dXJuIFtdO1xyXG4gICAgcmV0dXJuIGNvbXBvbmVudC52YWxpZGF0aW9ucz8ubWFwKChydWxlOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBleHByZXNzaW9uOiBydWxlLmV4cHJlc3Npb24sXHJcbiAgICAgICAgdHlwZTogcnVsZS50eXBlLFxyXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMubG9jYWxlKHJ1bGUsICdtZXNzYWdlJyksXHJcbiAgICAgICAgYXN5bmM6IHJ1bGUuYXN5bmMgPT09IHRydWVcclxuICAgICAgfSBhcyBWYWxpZGF0aW9uUnVsZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZVJ1bGVzKGZvcm1Hcm91cDogRm9ybUdyb3VwXHJcbiAgICAsIGNvbXBvbmVudDogYW55XHJcbiAgICAsIHJlcXVpcmVkPzogYm9vbGVhblxyXG4gICAgLCB2YWxpZGF0aW9ucz86IFZhbGlkYXRpb25SdWxlW10pOiBbVmFsaWRhdG9yRm5bXSwgQXN5bmNWYWxpZGF0b3JGbltdLCAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB2b2lkXSB7XHJcbiAgICBjb25zdCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW107XHJcblxyXG4gICAgY29uc3QgYXN5bmNWYWxpZGF0b3JzOiBBc3luY1ZhbGlkYXRvckZuW10gPSBbXTtcclxuXHJcbiAgICBjb25zdCBub1dhdGNoaW5nID0gKCkgPT4geyB9O1xyXG5cclxuICAgIGlmIChyZXF1aXJlZCA9PT0gdHJ1ZSkge1xyXG4gICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbGlkYXRpb25zKSkge1xyXG4gICAgICByZXR1cm4gW3ZhbGlkYXRvcnMsIGFzeW5jVmFsaWRhdG9ycywgbm9XYXRjaGluZ107XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY2FsbGJhY2tzID0gbmV3IENhbGxiYWNrUmVnaXN0cnkoKTtcclxuXHJcbiAgICB2YWxpZGF0aW9ucy5mb3JFYWNoKChpdGVtOiBWYWxpZGF0aW9uUnVsZSkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMucHJvZ3JhbW1hYmlsaXR5LmlzRXhwcmVzc2lvbihpdGVtLmV4cHJlc3Npb24pKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IGxvZ2dlcjogVmFsaWRhdGlvbkNhbGxiYWNrID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgcmVzdWx0OiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCkgPT5cclxuICAgICAgICB0aGlzLmxvZ1ZhbGlkYXRpb24oY29tcG9uZW50LCBpdGVtLCBjb250cm9sLCByZXN1bHQpO1xyXG4gICAgICBcclxuICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gXCJ2YWxpZGF0ZVwiIHx8IGl0ZW0udHlwZSA9PT0gXCJpbnZhbGlkYXRlXCIpIHtcclxuICAgICAgICBjb25zdCBwcmVkaWNhdGUgPSBpdGVtLnR5cGUgPT09IFwidmFsaWRhdGVcIlxyXG4gICAgICAgICAgPyAocmVzdWx0OiBhbnkpID0+IHJlc3VsdFxyXG4gICAgICAgICAgOiAocmVzdWx0OiBhbnkpID0+ICFyZXN1bHQ7XHJcblxyXG4gICAgICAgIGlmIChpdGVtLmFzeW5jKSB7XHJcbiAgICAgICAgICBhc3luY1ZhbGlkYXRvcnMucHVzaCh0aGlzLmNyZWF0ZUFzeW5jVmFsaWRhdG9yKGZvcm1Hcm91cCwgaXRlbSwgY2FsbGJhY2tzLCBwcmVkaWNhdGUsIGxvZ2dlcikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHZhbGlkYXRvcnMucHVzaCh0aGlzLmNyZWF0ZVZhbGlkYXRvcihmb3JtR3JvdXAsIGl0ZW0sIHByZWRpY2F0ZSwgbG9nZ2VyKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB3YXRjaGluZyA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB2b2lkID0+IHtcclxuICAgICAgdGhpcy53YXRjaEZvclZhbGlkYXRpb24oZm9ybUdyb3VwLCBjb250cm9sLCBjb21wb25lbnQua2V5LCB2YWxpZGF0aW9ucywgY2FsbGJhY2tzKTtcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIFt2YWxpZGF0b3JzLCBhc3luY1ZhbGlkYXRvcnMsIHdhdGNoaW5nXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlVmFsaWRhdG9yKGZvcm1Hcm91cDogRm9ybUdyb3VwXHJcbiAgICAsIGl0ZW06IFZhbGlkYXRpb25SdWxlXHJcbiAgICAsIHByZWRpY2F0ZTogKHJlc3VsdDogYW55KSA9PiBib29sZWFuXHJcbiAgICAsIGNhbGxiYWNrOiBWYWxpZGF0aW9uQ2FsbGJhY2spOiBWYWxpZGF0b3JGbiB7XHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcclxuICAgICAgaWYgKHRoaXMuc3VwcHJlc3MpIHJldHVybiBudWxsO1xyXG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZVVuYXJ5KGZvcm1Hcm91cCwgaXRlbS5leHByZXNzaW9uLCBjb250cm9sLnZhbHVlKVxyXG4gICAgICBpZiAoaXNPYnNlcnZhYmxlKHJlc3VsdCkpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBcIltWYWxpZGF0b3JdIFVuZXhwZWN0ZWQgb2JzZXJ2YWJsZSByZXN1bHQgaW4gY3JlYXRlVmFsaWRhdG9yXCIsXHJcbiAgICAgICAgICB7IGV4cHJlc3Npb246IGl0ZW0uZXhwcmVzc2lvbiwgdmFsdWU6IGNvbnRyb2wudmFsdWUsIHJ1bGU6IGl0ZW0gfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgdmFsaWRhdGUgPSBwcmVkaWNhdGUocmVzdWx0KSA/IG51bGwgOiB0aGlzLnZhbGlkYXRpb25FcnJvcnMoZm9ybUdyb3VwLCBpdGVtKTtcclxuICAgICAgY2FsbGJhY2soY29udHJvbCwgdmFsaWRhdGUpO1xyXG4gICAgICByZXR1cm4gdmFsaWRhdGU7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVBc3luY1ZhbGlkYXRvcihmb3JtR3JvdXA6IEZvcm1Hcm91cFxyXG4gICAgLCBpdGVtOiBWYWxpZGF0aW9uUnVsZVxyXG4gICAgLCBjYWxsYmFja3M6IENhbGxiYWNrUmVnaXN0cnlcclxuICAgICwgcHJlZGljYXRlOiAocmVzdWx0OiBhbnkpID0+IGJvb2xlYW5cclxuICAgICwgY2FsbGJhY2s6IFZhbGlkYXRpb25DYWxsYmFjayk6IEFzeW5jVmFsaWRhdG9yRm4ge1xyXG5cclxuICAgIGNvbnN0IHVuc2V0U3RhdGUgPSAoKSA9PiAoeyB2YWx1ZTogU3ltYm9sKCd1bnNldCcpLCByZXN1bHQ6IG51bGwgfSk7XHJcblxyXG4gICAgbGV0IHN0YXRlID0gdW5zZXRTdGF0ZSgpO1xyXG5cclxuICAgIGNhbGxiYWNrcy5yZWdpc3RlcigoKSA9PiBzdGF0ZSA9IHVuc2V0U3RhdGUoKSk7XHJcblxyXG4gICAgY29uc3QgZ2V0UmVzdWx0ID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IGFueSA9PiB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZShmb3JtR3JvdXAsIGl0ZW0uZXhwcmVzc2lvbiwge1xyXG4gICAgICBjYWNoZWFibGU6IGZhbHNlLFxyXG4gICAgICBleHRlbmRDb250ZXh0OiAoKSA9PiB7IHJldHVybiB7IFwiP1wiOiBjb250cm9sLnZhbHVlIH0gfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgY29tcHV0ZU9uY2UgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogYW55ID0+IHtcclxuICAgICAgY29uc3QgdiA9IGNvbnRyb2wudmFsdWU7XHJcbiAgICAgIGlmIChzdGF0ZS52YWx1ZSAhPT0gdikge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBnZXRSZXN1bHQoY29udHJvbCk7XHJcbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZShyZXN1bHQpKSB7XHJcbiAgICAgICAgICByZXN1bHQgPSAocmVzdWx0IGFzIE9ic2VydmFibGU8YW55PikucGlwZShcclxuICAgICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgICAgbWFwKCh2YWx1ZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdGUgPSBwcmVkaWNhdGUodmFsdWUpID8gbnVsbCA6IHRoaXMudmFsaWRhdGlvbkVycm9ycyhmb3JtR3JvdXAsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgIGNhbGxiYWNrKGNvbnRyb2wsIHZhbGlkYXRlKTtcclxuICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGU7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIltBc3luY1ZhbGlkYXRvcl0gRXZhbHVhdGlvbiBlcnJvclwiLCB7IGV4cHJlc3Npb246IGl0ZW0uZXhwcmVzc2lvbiwgZXJyIH0pO1xyXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLm51bGxPYnNlcnZlcjtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN0YXRlID0geyB2YWx1ZTogdiwgcmVzdWx0OiByZXN1bHQgfTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gc3RhdGUucmVzdWx0O1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zdXBwcmVzcykgcmV0dXJuIHRoaXMubnVsbE9ic2VydmVyO1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBjb21wdXRlT25jZShjb250cm9sKTsgICAgICBcclxuICAgICAgaWYgKCFpc09ic2VydmFibGUocmVzdWx0KSkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgIFwiW0FzeW5jVmFsaWRhdG9yXSBFeHBlY3RlZCBvYnNlcnZhYmxlIGJ1dCBnb3Qgbm9uLW9ic2VydmFibGUgcmVzdWx0XCIsXHJcbiAgICAgICAgICB7IGV4cHJlc3Npb246IGl0ZW0uZXhwcmVzc2lvbiwgdmFsdWU6IGNvbnRyb2wudmFsdWUsIHJlc3VsdCwgcnVsZTogaXRlbSB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5udWxsT2JzZXJ2ZXI7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc3VsdCBhcyBPYnNlcnZhYmxlPGFueT47XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0aW9uRXJyb3JzKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBpdGVtOiBWYWxpZGF0aW9uUnVsZSkge1xyXG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlU3RyaW5nKGZvcm1Hcm91cCwgaXRlbS5tZXNzYWdlKTtcclxuICAgIGNvbnN0IHZhbGlkYXRpb25FcnJvciA9IHsgZXJyb3I6IHRydWUsIG1lc3NhZ2UgfTtcclxuICAgIHJldHVybiB2YWxpZGF0aW9uRXJyb3I7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHdhdGNoRm9yVmFsaWRhdGlvbihmb3JtR3JvdXA6IEZvcm1Hcm91cFxyXG4gICAgLCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2xcclxuICAgICwga2V5OiBzdHJpbmdcclxuICAgICwgdmFsaWRhdGlvbnM6IFZhbGlkYXRpb25SdWxlW11cclxuICAgICwgY2FsbGJhY2tzOiBDYWxsYmFja1JlZ2lzdHJ5KTogdm9pZCB7XHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsaWRhdGlvbnMpKSB7XHJcbiAgICAgIGNvbnN0IGV4cHJlc3Npb25zID0gdmFsaWRhdGlvbnNcclxuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gdGhpcy5wcm9ncmFtbWFiaWxpdHkuaXNFeHByZXNzaW9uKGl0ZW0uZXhwcmVzc2lvbikpXHJcbiAgICAgICAgLm1hcChpdGVtID0+IFwiPVwiICsgdGhpcy5wcm9ncmFtbWFiaWxpdHkuZ2V0RXhwcmVzc2lvbihpdGVtLmV4cHJlc3Npb24pKTtcclxuXHJcbiAgICAgIGlmIChleHByZXNzaW9ucy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IGZlZWxhYmxlID0gdG9GZWVsYWJsZShleHByZXNzaW9ucyk7XHJcblxyXG4gICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSB0aGlzLnByb2dyYW1tYWJpbGl0eS5nZXREZXBlbmRlbmNpZXMoZmVlbGFibGUpXHJcbiAgICAgICAgLmZpbHRlcihkZXAgPT4gZGVwICE9PSBrZXkpO1xyXG5cclxuICAgICAgaWYgKGRlcGVuZGVuY2llcy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICAgIHRoaXMucHJvZ3JhbW1hYmlsaXR5LndhdGNoKGZvcm1Hcm91cCwgZGVwZW5kZW5jaWVzLCAoKSA9PiB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBjYWxsYmFja3MuaW52b2tlKCk7XHJcbiAgICAgICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvZ1ZhbGlkYXRpb24gPSAoY29tcG9uZW50OiBhbnksIHJ1bGU6IFZhbGlkYXRpb25SdWxlLCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHJlc3VsdDogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwpID0+IHtcclxuICAgIGlmICh0aGlzLnByb2dyYW1tYWJpbGl0eS52ZXJib3NlKSB7XHJcbiAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcIltWYWxpZGF0aW9uXSBGYWlsZWRcIiwgeyBjb250cm9sLCBjb21wb25lbnQsIHJ1bGUsIHJlc3VsdCB9KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIltWYWxpZGF0aW9uXSBTdWNjZXNzXCIsIHsgY29udHJvbCwgY29tcG9uZW50LCBydWxlLCByZXN1bHQgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgbnVsbE9ic2VydmVyID0gb2YobnVsbCk7XHJcblxyXG4gIHByaXZhdGUgZ2V0IGxhbmd1YWdlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5sYW5ndWFnZVNlcnZpY2UuZ2V0TGFuZ3VhZ2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9jYWxlKGNvbXBvbmVudDogYW55LCBrZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gbG9jYWxpemUodGhpcy5sYW5ndWFnZSwgY29tcG9uZW50LCBrZXkpO1xyXG4gIH1cclxufVxyXG5cclxudHlwZSBWYWxpZGF0aW9uQ2FsbGJhY2sgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCByZXN1bHQ6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsKSA9PiB2b2lkO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRDb250ZXh0IHtcclxuICBjb21wb25lbnQ6IGFueTtcclxuICBmb3JtR3JvdXA6IEZvcm1Hcm91cDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0aW9uUnVsZSB7XHJcbiAgZXhwcmVzc2lvbjogc3RyaW5nO1xyXG4gIHR5cGU6IFwidmFsaWRhdGVcIiB8IFwiaW52YWxpZGF0ZVwiO1xyXG4gIG1lc3NhZ2U6IHN0cmluZyxcclxuICBhc3luYzogYm9vbGVhblxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBWYWxpZGF0aW9uQ29sbGVjdGlvbiA9IE1hcDxBYnN0cmFjdENvbnRyb2wsIENvbXBvbmVudENvbnRleHQ+O1xyXG4iXX0=
@@ -39,10 +39,10 @@ export class WeakService {
39
39
  delete cachedObject[key];
40
40
  }
41
41
  }
42
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WeakService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
43
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WeakService, providedIn: 'root' });
42
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WeakService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
43
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WeakService, providedIn: 'root' });
44
44
  }
45
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WeakService, decorators: [{
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WeakService, decorators: [{
46
46
  type: Injectable,
47
47
  args: [{
48
48
  providedIn: 'root'
@@ -15,10 +15,10 @@ export class TemplateWrapperComponent {
15
15
  };
16
16
  return result;
17
17
  }
18
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TemplateWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
19
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TemplateWrapperComponent, isStandalone: true, selector: "app-template-wrapper", inputs: { template: "template", context: "context" }, ngImport: i0, template: '', isInline: true });
18
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TemplateWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
19
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: TemplateWrapperComponent, isStandalone: true, selector: "app-template-wrapper", inputs: { template: "template", context: "context" }, ngImport: i0, template: '', isInline: true });
20
20
  }
21
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TemplateWrapperComponent, decorators: [{
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TemplateWrapperComponent, decorators: [{
22
22
  type: Component,
23
23
  args: [{
24
24
  selector: 'app-template-wrapper',
@@ -0,0 +1,16 @@
1
+ export class CallbackRegistry {
2
+ callbacks = [];
3
+ register(callback) {
4
+ if (callback)
5
+ this.callbacks.push(callback);
6
+ }
7
+ clear() {
8
+ this.callbacks = [];
9
+ }
10
+ invoke() {
11
+ for (const cb of this.callbacks) {
12
+ cb();
13
+ }
14
+ }
15
+ }
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FsbGJhY2tSZWdpc3RyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zaXJpby9zcmMvbGliL3V0aWxzL0NhbGxiYWNrUmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLGdCQUFnQjtJQUNuQixTQUFTLEdBQW1CLEVBQUUsQ0FBQztJQUV2QyxRQUFRLENBQUMsUUFBb0I7UUFDM0IsSUFBSSxRQUFRO1lBQ1YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsTUFBTTtRQUNKLEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2hDLEVBQUUsRUFBRSxDQUFDO1FBQ1AsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBDYWxsYmFja1JlZ2lzdHJ5IHtcclxuICBwcml2YXRlIGNhbGxiYWNrczogKCgpID0+IHZvaWQpW10gPSBbXTtcclxuXHJcbiAgcmVnaXN0ZXIoY2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcclxuICAgIGlmIChjYWxsYmFjaylcclxuICAgICAgdGhpcy5jYWxsYmFja3MucHVzaChjYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuY2FsbGJhY2tzID0gW107XHJcbiAgfVxyXG5cclxuICBpbnZva2UoKSB7XHJcbiAgICBmb3IgKGNvbnN0IGNiIG9mIHRoaXMuY2FsbGJhY2tzKSB7XHJcbiAgICAgIGNiKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,34 @@
1
+ export function syncronize(target, source) {
2
+ // If source is a primitive or null/undefined → replace directly
3
+ if (source === null || source === undefined || typeof source !== "object") {
4
+ return source;
5
+ }
6
+ // If target is null/undefined or a primitive → create a new container (array/object)
7
+ if (target === null || target === undefined || typeof target !== "object") {
8
+ target = Array.isArray(source) ? [] : {};
9
+ }
10
+ // Handle arrays
11
+ if (Array.isArray(source)) {
12
+ if (!Array.isArray(target)) {
13
+ target = [];
14
+ }
15
+ target.length = source.length;
16
+ for (let i = 0; i < source.length; i++) {
17
+ target[i] = syncronize(target[i], source[i]);
18
+ }
19
+ return target;
20
+ }
21
+ // Handle objects
22
+ // Remove missing keys
23
+ for (const key of Object.keys(target)) {
24
+ if (!(key in source)) {
25
+ delete target[key];
26
+ }
27
+ }
28
+ // Add or update keys
29
+ for (const [key, value] of Object.entries(source)) {
30
+ target[key] = syncronize(target[key], value);
31
+ }
32
+ return target;
33
+ }
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luY3Jvbml6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zaXJpby9zcmMvbGliL3V0aWxzL3N5bmNyb25pemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLFVBQVUsQ0FBQyxNQUFXLEVBQUUsTUFBVztJQUNqRCxnRUFBZ0U7SUFDaEUsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sS0FBSyxTQUFTLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDMUUsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELHFGQUFxRjtJQUNyRixJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksTUFBTSxLQUFLLFNBQVMsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMxRSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELGdCQUFnQjtJQUNoQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzNCLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBRTlCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdkMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxpQkFBaUI7SUFFakIsc0JBQXNCO0lBQ3RCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLENBQUM7SUFDSCxDQUFDO0lBRUQscUJBQXFCO0lBQ3JCLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDbEQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gc3luY3Jvbml6ZSh0YXJnZXQ6IGFueSwgc291cmNlOiBhbnkpOiBhbnkge1xyXG4gIC8vIElmIHNvdXJjZSBpcyBhIHByaW1pdGl2ZSBvciBudWxsL3VuZGVmaW5lZCDihpIgcmVwbGFjZSBkaXJlY3RseVxyXG4gIGlmIChzb3VyY2UgPT09IG51bGwgfHwgc291cmNlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHNvdXJjZSAhPT0gXCJvYmplY3RcIikge1xyXG4gICAgcmV0dXJuIHNvdXJjZTtcclxuICB9XHJcblxyXG4gIC8vIElmIHRhcmdldCBpcyBudWxsL3VuZGVmaW5lZCBvciBhIHByaW1pdGl2ZSDihpIgY3JlYXRlIGEgbmV3IGNvbnRhaW5lciAoYXJyYXkvb2JqZWN0KVxyXG4gIGlmICh0YXJnZXQgPT09IG51bGwgfHwgdGFyZ2V0ID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHRhcmdldCAhPT0gXCJvYmplY3RcIikge1xyXG4gICAgdGFyZ2V0ID0gQXJyYXkuaXNBcnJheShzb3VyY2UpID8gW10gOiB7fTtcclxuICB9XHJcblxyXG4gIC8vIEhhbmRsZSBhcnJheXNcclxuICBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2UpKSB7XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGFyZ2V0KSkge1xyXG4gICAgICB0YXJnZXQgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICB0YXJnZXQubGVuZ3RoID0gc291cmNlLmxlbmd0aDtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0YXJnZXRbaV0gPSBzeW5jcm9uaXplKHRhcmdldFtpXSwgc291cmNlW2ldKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGFyZ2V0O1xyXG4gIH1cclxuXHJcbiAgLy8gSGFuZGxlIG9iamVjdHNcclxuXHJcbiAgLy8gUmVtb3ZlIG1pc3Npbmcga2V5c1xyXG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRhcmdldCkpIHtcclxuICAgIGlmICghKGtleSBpbiBzb3VyY2UpKSB7XHJcbiAgICAgIGRlbGV0ZSB0YXJnZXRba2V5XTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEFkZCBvciB1cGRhdGUga2V5c1xyXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNvdXJjZSkpIHtcclxuICAgIHRhcmdldFtrZXldID0gc3luY3Jvbml6ZSh0YXJnZXRba2V5XSwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRhcmdldDtcclxufVxyXG4iXX0=
@@ -1,5 +1,6 @@
1
1
  export * from './lib/dynamic-form/dynamic-form.component';
2
2
  export * from './lib/utils/toFormData';
3
+ export * from './lib/utils/syncronize';
3
4
  export * from './lib/services/toast.service';
4
5
  export * from './lib/services/sanitize.service';
5
6
  export * from './lib/services/feel.service';
@@ -11,4 +12,4 @@ export * from './lib/services/global.service';
11
12
  export * from './lib/interact/confirmation';
12
13
  export * from './lib/interact/notification';
13
14
  export * from './lib/interact/prompt';
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1zaXJpby9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDJDQUEyQyxDQUFDO0FBRTFELGNBQWMsd0JBQXdCLENBQUM7QUFFdkMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLCtCQUErQixDQUFDO0FBRTlDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHVCQUF1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvZHluYW1pYy1mb3JtL2R5bmFtaWMtZm9ybS5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvdG9Gb3JtRGF0YSc7XHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy90b2FzdC5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvc2FuaXRpemUuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2ZlZWwuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL21hcmtkb3duLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9zY29wZS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvZGlhbG9nLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZSc7XHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnRlcmFjdC9jb25maXJtYXRpb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnRlcmFjdC9ub3RpZmljYXRpb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnRlcmFjdC9wcm9tcHQnO1xyXG4iXX0=
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1zaXJpby9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDJDQUEyQyxDQUFDO0FBRTFELGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx3QkFBd0IsQ0FBQztBQUV2QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsK0JBQStCLENBQUM7QUFFOUMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9keW5hbWljLWZvcm0vZHluYW1pYy1mb3JtLmNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy90b0Zvcm1EYXRhJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvc3luY3Jvbml6ZSc7XHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy90b2FzdC5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvc2FuaXRpemUuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2ZlZWwuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL21hcmtkb3duLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9zY29wZS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvZGlhbG9nLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZSc7XHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnRlcmFjdC9jb25maXJtYXRpb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnRlcmFjdC9ub3RpZmljYXRpb24nO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnRlcmFjdC9wcm9tcHQnO1xyXG4iXX0=