@ngil/form-cva 0.1.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.
@@ -0,0 +1,341 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Directive, EventEmitter, Input, Output, Optional, NgModule, forwardRef } from '@angular/core';
3
+ import * as i1 from '@angular/forms';
4
+ import { FormGroup, FormArray, NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
5
+ import { Subject, takeUntil, BehaviorSubject, combineLatest } from 'rxjs';
6
+ import { takeUntil as takeUntil$1 } from 'rxjs/operators';
7
+ import { CommonModule } from '@angular/common';
8
+
9
+ /**
10
+ *
11
+ */
12
+ class AbstractFormArrayComponent {
13
+ constructor() {
14
+ this.destroy$ = new Subject();
15
+ this.formGroup = new FormGroup({
16
+ formArray: this.createFormArray()
17
+ });
18
+ }
19
+ get formArray() {
20
+ return this.formGroup.controls.formArray;
21
+ }
22
+ ngAfterViewInit() {
23
+ this.listenValueChanges();
24
+ }
25
+ listenValueChanges() {
26
+ this.formGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(() => {
27
+ if (this.onChange) {
28
+ this.onChange(this.formArray.getRawValue());
29
+ }
30
+ });
31
+ }
32
+ registerOnChange(fn) {
33
+ this.onChange = fn;
34
+ }
35
+ registerOnTouched(fn) {
36
+ this.onTouched = fn;
37
+ }
38
+ writeValue(items) {
39
+ this.prepareControls(items);
40
+ if (items) {
41
+ this.formArray.patchValue(items, { emitEvent: false });
42
+ }
43
+ else {
44
+ this.formArray.reset(undefined, { emitEvent: false });
45
+ }
46
+ }
47
+ setDisabledState(isDisabled) {
48
+ isDisabled ? this.formGroup.disable({ emitEvent: false }) : this.formGroup.enable({ emitEvent: false });
49
+ }
50
+ validate() {
51
+ if (this.formArray.invalid) {
52
+ return { invalidFormArray: true };
53
+ }
54
+ return null;
55
+ }
56
+ prepareControls(items) {
57
+ items = items || [];
58
+ if (this.formArray.value.length < items.length) {
59
+ this.addExtraControls(items);
60
+ }
61
+ if (this.formArray.value.length > items.length) {
62
+ this.removeExtraControls(items);
63
+ }
64
+ }
65
+ addExtraControls(items) {
66
+ items.forEach((item, index) => {
67
+ const control = this.formArray.at(index);
68
+ if (!control) {
69
+ this.formArray.push(this.createFormArrayItem(item));
70
+ }
71
+ });
72
+ }
73
+ removeExtraControls(items) {
74
+ let formArrayIndex = 0;
75
+ this.formArray.value.forEach((item, index) => {
76
+ if (!items[index]) {
77
+ this.formArray.removeAt(formArrayIndex);
78
+ }
79
+ else {
80
+ formArrayIndex++;
81
+ }
82
+ });
83
+ }
84
+ ngOnDestroy() {
85
+ this.destroy$.next();
86
+ this.destroy$.complete();
87
+ }
88
+ }
89
+ AbstractFormArrayComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AbstractFormArrayComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
90
+ AbstractFormArrayComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: AbstractFormArrayComponent, ngImport: i0 });
91
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AbstractFormArrayComponent, decorators: [{
92
+ type: Directive
93
+ }] });
94
+
95
+ class AbstractFormComponent {
96
+ constructor() {
97
+ this.submitted = new EventEmitter();
98
+ this.destroy$ = new Subject();
99
+ }
100
+ get isSubmitDisabled() {
101
+ return !this.form.valid || this.form.pristine;
102
+ }
103
+ get isCancelDisabled() {
104
+ return !this.form.dirty;
105
+ }
106
+ getFormDefaultValue(model) {
107
+ return model;
108
+ }
109
+ ngOnInit() {
110
+ this.form.patchValue(this.getFormDefaultValue(this.formViewModel) || {}, { emitEvent: false });
111
+ }
112
+ submit() {
113
+ if (!this.isSubmitDisabled) {
114
+ this.submitted.emit(Object.assign(Object.assign({}, this.formViewModel), this.form.value));
115
+ }
116
+ else {
117
+ Object.values(this.form.controls).forEach(control => control.updateValueAndValidity());
118
+ }
119
+ }
120
+ cancel() {
121
+ if (!this.isCancelDisabled) {
122
+ this.form.reset(this.getFormDefaultValue(this.formViewModel), { emitEvent: false });
123
+ this.form.markAsPristine();
124
+ this.form.markAsUntouched();
125
+ }
126
+ }
127
+ ngOnDestroy() {
128
+ this.destroy$.next();
129
+ this.destroy$.complete();
130
+ }
131
+ }
132
+ AbstractFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AbstractFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
133
+ AbstractFormComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: AbstractFormComponent, inputs: { formViewModel: "formViewModel" }, outputs: { submitted: "submitted" }, ngImport: i0 });
134
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AbstractFormComponent, decorators: [{
135
+ type: Directive
136
+ }], propDecorators: { formViewModel: [{
137
+ type: Input
138
+ }], submitted: [{
139
+ type: Output
140
+ }] } });
141
+
142
+ /**
143
+ * This class implements ControlValueAccessor logic for a FormGroup.
144
+ * NG_VALUE_ACCESSOR and NG_VALIDATORS must be provided in the component.
145
+ *
146
+ * The FormGroup changes will be automatically change the parent FormControl value.
147
+ *
148
+ * Example:
149
+
150
+ */
151
+ class AbstractFormGroupComponent {
152
+ constructor() {
153
+ this.destroy$ = new Subject();
154
+ }
155
+ ngAfterViewInit() {
156
+ this.listenValueChanges();
157
+ }
158
+ listenValueChanges() {
159
+ this.formGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(() => {
160
+ if (this.onChange) {
161
+ this.onChange(this.formGroup.getRawValue());
162
+ }
163
+ });
164
+ }
165
+ registerOnChange(fn) {
166
+ this.onChange = fn;
167
+ }
168
+ registerOnTouched(fn) {
169
+ this.onTouched = fn;
170
+ }
171
+ writeValue(formValue) {
172
+ if (formValue) {
173
+ this.formGroup.patchValue(formValue, { emitEvent: false });
174
+ }
175
+ else {
176
+ this.formGroup.reset(undefined, { emitEvent: false });
177
+ }
178
+ }
179
+ setDisabledState(isDisabled) {
180
+ isDisabled ? this.formGroup.disable({ emitEvent: false }) : this.formGroup.enable({ emitEvent: false });
181
+ }
182
+ validate() {
183
+ if (this.formGroup.invalid) {
184
+ return { invalidFormGroup: true };
185
+ }
186
+ return null;
187
+ }
188
+ ngOnDestroy() {
189
+ this.destroy$.next();
190
+ this.destroy$.complete();
191
+ }
192
+ }
193
+ AbstractFormGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AbstractFormGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
194
+ AbstractFormGroupComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: AbstractFormGroupComponent, ngImport: i0 });
195
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AbstractFormGroupComponent, decorators: [{
196
+ type: Directive
197
+ }] });
198
+
199
+ const errorMessages = {
200
+ required: '{{fieldName}} is required.',
201
+ max: 'Maximum {{fieldName}} is {{max}}.',
202
+ min: 'Minimum {{fieldName}} is {{min}}.',
203
+ maxlength: '{{fieldName}} can be max {{requiredLength}} characters long.',
204
+ minlength: '{{fieldName}} must be at least {{requiredLength}} characters long.',
205
+ email: '{{fieldName}} must be an email.'
206
+ };
207
+ function getErrorMessage(errorKey, replacements) {
208
+ if (!errorMessages[errorKey]) {
209
+ return `Missing error message to the error with key ${errorKey}`;
210
+ }
211
+ return errorMessages[errorKey].replace(/{{(\w+)}}/g, (placeholderWithDelimiters, placeholderWithoutDelimiters) => replacements[placeholderWithoutDelimiters] ? replacements[placeholderWithoutDelimiters] : placeholderWithDelimiters);
212
+ }
213
+
214
+ class AbstractInputComponent {
215
+ set errorMessage(errorMessage) {
216
+ this.errorMessage$.next(errorMessage);
217
+ }
218
+ constructor(controlContainer) {
219
+ this.controlContainer = controlContainer;
220
+ this.formControlName = '';
221
+ this.label = '';
222
+ this.readonly = false;
223
+ this.required = false;
224
+ this.disabled = false;
225
+ this.destroy$ = new Subject();
226
+ this.errorMessage$ = new BehaviorSubject('');
227
+ this.model$ = combineLatest({
228
+ errorMessage: this.errorMessage$
229
+ });
230
+ }
231
+ ngOnInit() {
232
+ var _a, _b, _c, _d;
233
+ if (((_a = this.controlContainer) === null || _a === void 0 ? void 0 : _a.control) instanceof FormArray) {
234
+ this.parentControl = (_b = this.controlContainer) === null || _b === void 0 ? void 0 : _b.control.at(+this.formControlName);
235
+ }
236
+ else {
237
+ this.parentControl = (_d = (_c = this.controlContainer) === null || _c === void 0 ? void 0 : _c.control) === null || _d === void 0 ? void 0 : _d.get(this.formControlName);
238
+ }
239
+ this.setRequiredState();
240
+ this.listenStatusChanges();
241
+ }
242
+ setRequiredState() {
243
+ var _a, _b;
244
+ if (!this.parentControl || !((_a = this.parentControl) === null || _a === void 0 ? void 0 : _a.validator)) {
245
+ return;
246
+ }
247
+ const validators = (_b = this.parentControl) === null || _b === void 0 ? void 0 : _b.validator({ value: '' });
248
+ if (validators && Object.keys(validators).includes('required')) {
249
+ this.required = true;
250
+ }
251
+ }
252
+ onBlur() {
253
+ if (this.onTouched) {
254
+ this.onTouched();
255
+ }
256
+ this.setErrors();
257
+ }
258
+ registerOnChange(fn) {
259
+ this.onChange = fn;
260
+ }
261
+ registerOnTouched(fn) {
262
+ this.onTouched = fn;
263
+ }
264
+ setDisabledState(isDisabled) {
265
+ this.disabled = isDisabled;
266
+ }
267
+ listenStatusChanges() {
268
+ var _a;
269
+ (_a = this.parentControl) === null || _a === void 0 ? void 0 : _a.statusChanges.pipe(takeUntil$1(this.destroy$)).subscribe(() => this.setErrors());
270
+ }
271
+ setErrors() {
272
+ var _a, _b, _c;
273
+ if ((_a = this.parentControl) === null || _a === void 0 ? void 0 : _a.errors) {
274
+ const errorKey = Object.keys((_b = this.parentControl) === null || _b === void 0 ? void 0 : _b.errors)[0];
275
+ const errorObj = (_c = this.parentControl) === null || _c === void 0 ? void 0 : _c.errors[`${errorKey}`];
276
+ this.errorMessage$.next(getErrorMessage(errorKey, Object.assign({ fieldName: this.label }, errorObj)));
277
+ }
278
+ else {
279
+ this.errorMessage$.next('');
280
+ }
281
+ }
282
+ ngOnDestroy() {
283
+ this.destroy$.next();
284
+ this.destroy$.complete();
285
+ }
286
+ }
287
+ AbstractInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AbstractInputComponent, deps: [{ token: i1.ControlContainer, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
288
+ AbstractInputComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: AbstractInputComponent, inputs: { formControlName: "formControlName", errorMessage: "errorMessage", label: "label", readonly: "readonly", required: "required", disabled: "disabled" }, ngImport: i0 });
289
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AbstractInputComponent, decorators: [{
290
+ type: Directive
291
+ }], ctorParameters: function () {
292
+ return [{ type: i1.ControlContainer, decorators: [{
293
+ type: Optional
294
+ }] }];
295
+ }, propDecorators: { formControlName: [{
296
+ type: Input
297
+ }], errorMessage: [{
298
+ type: Input
299
+ }], label: [{
300
+ type: Input
301
+ }], readonly: [{
302
+ type: Input
303
+ }], required: [{
304
+ type: Input
305
+ }], disabled: [{
306
+ type: Input
307
+ }] } });
308
+
309
+ class NgilUiCommonFormCvaModule {
310
+ }
311
+ NgilUiCommonFormCvaModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgilUiCommonFormCvaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
312
+ NgilUiCommonFormCvaModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: NgilUiCommonFormCvaModule, imports: [CommonModule] });
313
+ NgilUiCommonFormCvaModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgilUiCommonFormCvaModule, imports: [CommonModule] });
314
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NgilUiCommonFormCvaModule, decorators: [{
315
+ type: NgModule,
316
+ args: [{
317
+ imports: [CommonModule]
318
+ }]
319
+ }] });
320
+
321
+ function createControlValueAccessorProviders(component) {
322
+ return [
323
+ {
324
+ provide: NG_VALUE_ACCESSOR,
325
+ useExisting: forwardRef(() => component),
326
+ multi: true
327
+ },
328
+ {
329
+ provide: NG_VALIDATORS,
330
+ useExisting: forwardRef(() => component),
331
+ multi: true
332
+ }
333
+ ];
334
+ }
335
+
336
+ /**
337
+ * Generated bundle index. Do not edit.
338
+ */
339
+
340
+ export { AbstractFormArrayComponent, AbstractFormComponent, AbstractFormGroupComponent, AbstractInputComponent, NgilUiCommonFormCvaModule, createControlValueAccessorProviders };
341
+ //# sourceMappingURL=ngil-form-cva.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngil-form-cva.mjs","sources":["../../../../../../../libs/ngil/ui/common/form-cva/src/lib/models/abstract-form-array-component.ts","../../../../../../../libs/ngil/ui/common/form-cva/src/lib/models/abstract-form-component.ts","../../../../../../../libs/ngil/ui/common/form-cva/src/lib/models/abstract-form-group.component.ts","../../../../../../../libs/ngil/ui/common/form-cva/src/lib/error-messages.ts","../../../../../../../libs/ngil/ui/common/form-cva/src/lib/models/abstract-input-component.ts","../../../../../../../libs/ngil/ui/common/form-cva/src/lib/ngil-ui-common-form-cva.module.ts","../../../../../../../libs/ngil/ui/common/form-cva/src/lib/utils/control-value-accessor.util.ts","../../../../../../../libs/ngil/ui/common/form-cva/src/ngil-form-cva.ts"],"sourcesContent":["import { AfterViewInit, Directive, OnDestroy } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n ControlValueAccessor,\r\n FormArray,\r\n FormGroup,\r\n ValidationErrors,\r\n Validator\r\n} from '@angular/forms';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { FormValueOf } from './form.model';\r\n\r\n/**\r\n *\r\n */\r\n@Directive()\r\nexport abstract class AbstractFormArrayComponent<F extends AbstractControl<any>>\r\n implements AfterViewInit, OnDestroy, ControlValueAccessor, Validator\r\n{\r\n protected abstract createFormArray(): FormArray<F>;\r\n protected abstract createFormArrayItem(item?: FormValueOf<F>): F;\r\n\r\n protected readonly destroy$ = new Subject<void>();\r\n protected onChange?: (value: FormValueOf<F>[]) => void;\r\n protected onTouched?: () => void;\r\n\r\n formGroup = new FormGroup({\r\n formArray: this.createFormArray()\r\n });\r\n get formArray() {\r\n return this.formGroup.controls.formArray;\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.listenValueChanges();\r\n }\r\n\r\n protected listenValueChanges(): void {\r\n this.formGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(() => {\r\n if (this.onChange) {\r\n this.onChange(this.formArray.getRawValue());\r\n }\r\n });\r\n }\r\n\r\n registerOnChange(fn: (value: FormValueOf<F>[]) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n writeValue(items: FormValueOf<F>[] | undefined | null): void {\r\n this.prepareControls(items);\r\n\r\n if (items) {\r\n this.formArray.patchValue(items, { emitEvent: false });\r\n } else {\r\n this.formArray.reset(undefined, { emitEvent: false });\r\n }\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n isDisabled ? this.formGroup.disable({ emitEvent: false }) : this.formGroup.enable({ emitEvent: false });\r\n }\r\n\r\n validate(): ValidationErrors | null {\r\n if (this.formArray.invalid) {\r\n return { invalidFormArray: true };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n protected prepareControls(items: FormValueOf<F>[] | undefined | null): void {\r\n items = items || [];\r\n\r\n if (this.formArray.value.length < items.length) {\r\n this.addExtraControls(items);\r\n }\r\n\r\n if (this.formArray.value.length > items.length) {\r\n this.removeExtraControls(items);\r\n }\r\n }\r\n\r\n private addExtraControls(items: FormValueOf<F>[]): void {\r\n items.forEach((item, index) => {\r\n const control = this.formArray.at(index);\r\n if (!control) {\r\n this.formArray.push(this.createFormArrayItem(item));\r\n }\r\n });\r\n }\r\n\r\n private removeExtraControls(items: FormValueOf<F>[]): void {\r\n let formArrayIndex = 0;\r\n this.formArray.value.forEach((item, index) => {\r\n if (!items[index]) {\r\n this.formArray.removeAt(formArrayIndex);\r\n } else {\r\n formArrayIndex++;\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}\r\n","import { Directive, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Directive()\r\nexport abstract class AbstractFormComponent<T> implements OnDestroy, OnInit {\r\n @Input() formViewModel?: T;\r\n\r\n @Output() submitted: EventEmitter<T> = new EventEmitter();\r\n\r\n abstract form: FormGroup;\r\n\r\n protected readonly destroy$ = new Subject<void>();\r\n\r\n get isSubmitDisabled(): boolean {\r\n return !this.form.valid || this.form.pristine;\r\n }\r\n\r\n get isCancelDisabled(): boolean {\r\n return !this.form.dirty;\r\n }\r\n\r\n protected getFormDefaultValue(model?: T): T | undefined {\r\n return model;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.form.patchValue(this.getFormDefaultValue(this.formViewModel) || {}, { emitEvent: false });\r\n }\r\n\r\n submit(): void {\r\n if (!this.isSubmitDisabled) {\r\n this.submitted.emit({\r\n ...this.formViewModel,\r\n ...this.form.value\r\n });\r\n } else {\r\n Object.values(this.form.controls).forEach(control => control.updateValueAndValidity());\r\n }\r\n }\r\n\r\n cancel(): void {\r\n if (!this.isCancelDisabled) {\r\n this.form.reset(this.getFormDefaultValue(this.formViewModel), { emitEvent: false });\r\n this.form.markAsPristine();\r\n this.form.markAsUntouched();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}\r\n","/**\r\n * This class implements ControlValueAccessor logic for a FormGroup.\r\n * NG_VALUE_ACCESSOR and NG_VALIDATORS must be provided in the component.\r\n *\r\n * The FormGroup changes will be automatically change the parent FormControl value.\r\n *\r\n * Example:\r\n\r\n */\r\n\r\nimport { AfterViewInit, Directive, OnDestroy } from '@angular/core';\r\nimport { AbstractControl, ControlValueAccessor, FormGroup, ValidationErrors, Validator } from '@angular/forms';\r\nimport { Subject, takeUntil } from 'rxjs';\r\nimport { FlatFormControlsOf, FormValueOf } from './form.model';\r\n\r\n@Directive()\r\nexport abstract class AbstractFormGroupComponent<\r\n T extends { [K in keyof T]: any },\r\n F extends { [K in keyof T]: AbstractControl<any, any> } = FlatFormControlsOf<T>\r\n> implements ControlValueAccessor, Validator, OnDestroy, AfterViewInit\r\n{\r\n abstract formGroup: FormGroup<F>;\r\n\r\n protected readonly destroy$ = new Subject<void>();\r\n protected onChange?: (value: FormValueOf<FormGroup<F>>) => void;\r\n protected onTouched?: () => void;\r\n\r\n ngAfterViewInit(): void {\r\n this.listenValueChanges();\r\n }\r\n\r\n protected listenValueChanges(): void {\r\n this.formGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(() => {\r\n if (this.onChange) {\r\n this.onChange(this.formGroup.getRawValue());\r\n }\r\n });\r\n }\r\n\r\n registerOnChange(fn: (value: FormValueOf<FormGroup<F>>) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n writeValue(formValue: T | undefined | null): void {\r\n if (formValue) {\r\n this.formGroup.patchValue(formValue, { emitEvent: false });\r\n } else {\r\n this.formGroup.reset(undefined, { emitEvent: false });\r\n }\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n isDisabled ? this.formGroup.disable({ emitEvent: false }) : this.formGroup.enable({ emitEvent: false });\r\n }\r\n\r\n validate(): ValidationErrors | null {\r\n if (this.formGroup.invalid) {\r\n return { invalidFormGroup: true };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}\r\n","const errorMessages: Record<string, string> = {\r\n required: '{{fieldName}} is required.',\r\n max: 'Maximum {{fieldName}} is {{max}}.',\r\n min: 'Minimum {{fieldName}} is {{min}}.',\r\n maxlength: '{{fieldName}} can be max {{requiredLength}} characters long.',\r\n minlength: '{{fieldName}} must be at least {{requiredLength}} characters long.',\r\n email: '{{fieldName}} must be an email.'\r\n};\r\n\r\nexport function getErrorMessage(errorKey: string, replacements: Record<string, string>): string {\r\n if (!errorMessages[errorKey]) {\r\n return `Missing error message to the error with key ${errorKey}`;\r\n }\r\n\r\n return errorMessages[errorKey].replace(/{{(\\w+)}}/g, (placeholderWithDelimiters, placeholderWithoutDelimiters) =>\r\n replacements[placeholderWithoutDelimiters] ? replacements[placeholderWithoutDelimiters] : placeholderWithDelimiters\r\n );\r\n}\r\n","import { Directive, Input, OnDestroy, OnInit, Optional } from '@angular/core';\r\nimport { AbstractControl, ControlContainer, ControlValueAccessor, FormArray } from '@angular/forms';\r\nimport { BehaviorSubject, Subject, combineLatest } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { getErrorMessage } from '../error-messages';\r\n\r\n@Directive()\r\nexport abstract class AbstractInputComponent<T = string> implements OnInit, ControlValueAccessor, OnDestroy {\r\n @Input() formControlName = '';\r\n @Input() set errorMessage(errorMessage: string) {\r\n this.errorMessage$.next(errorMessage);\r\n }\r\n @Input() label = '';\r\n @Input() readonly = false;\r\n @Input() required = false;\r\n @Input() disabled = false;\r\n\r\n protected parentControl?: AbstractControl | null;\r\n protected onChange?: (value: T | null) => void;\r\n protected onTouched?: () => void;\r\n protected readonly destroy$ = new Subject<void>();\r\n protected readonly errorMessage$ = new BehaviorSubject<string>('');\r\n\r\n model$ = combineLatest({\r\n errorMessage: this.errorMessage$\r\n });\r\n\r\n constructor(@Optional() private readonly controlContainer?: ControlContainer) {}\r\n\r\n ngOnInit(): void {\r\n if (this.controlContainer?.control instanceof FormArray) {\r\n this.parentControl = this.controlContainer?.control.at(+this.formControlName);\r\n } else {\r\n this.parentControl = this.controlContainer?.control?.get(this.formControlName);\r\n }\r\n this.setRequiredState();\r\n this.listenStatusChanges();\r\n }\r\n\r\n private setRequiredState(): void {\r\n if (!this.parentControl || !this.parentControl?.validator) {\r\n return;\r\n }\r\n\r\n const validators = this.parentControl?.validator({ value: '' } as AbstractControl);\r\n if (validators && Object.keys(validators).includes('required')) {\r\n this.required = true;\r\n }\r\n }\r\n\r\n onBlur(): void {\r\n if (this.onTouched) {\r\n this.onTouched();\r\n }\r\n this.setErrors();\r\n }\r\n\r\n registerOnChange(fn: (value: T | null) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n abstract writeValue(value: T): void;\r\n\r\n protected listenStatusChanges(): void {\r\n this.parentControl?.statusChanges.pipe(takeUntil(this.destroy$)).subscribe(() => this.setErrors());\r\n }\r\n\r\n protected setErrors(): void {\r\n if (this.parentControl?.errors) {\r\n const errorKey = Object.keys(this.parentControl?.errors)[0];\r\n const errorObj = this.parentControl?.errors[`${errorKey}`];\r\n this.errorMessage$.next(\r\n getErrorMessage(errorKey, {\r\n fieldName: this.label,\r\n ...errorObj\r\n })\r\n );\r\n } else {\r\n this.errorMessage$.next('');\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@NgModule({\r\n imports: [CommonModule]\r\n})\r\nexport class NgilUiCommonFormCvaModule {}\r\n","import { forwardRef, Type } from '@angular/core';\r\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nexport function createControlValueAccessorProviders(component: Type<unknown>) {\r\n return [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => component),\r\n multi: true\r\n },\r\n {\r\n provide: NG_VALIDATORS,\r\n useExisting: forwardRef(() => component),\r\n multi: true\r\n }\r\n ];\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["takeUntil"],"mappings":";;;;;;;;AAYA;;AAEG;MAEmB,0BAA0B,CAAA;AADhD,IAAA,WAAA,GAAA;AAOqB,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;AAIlD,QAAA,IAAS,CAAA,SAAA,GAAG,IAAI,SAAS,CAAC;AACxB,YAAA,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE;AAClC,SAAA,CAAC,CAAC;KAmFJ;AAlFC,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;KAC1C;IAED,eAAe,GAAA;QACb,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC3B;IAES,kBAAkB,GAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YACxE,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;AAC7C,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,gBAAgB,CAAC,EAAqC,EAAA;AACpD,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;AAED,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;AAED,IAAA,UAAU,CAAC,KAA0C,EAAA;AACnD,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AAE5B,QAAA,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AACxD,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AACvD,SAAA;KACF;AAED,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;KACzG;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AAC1B,YAAA,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;AACnC,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AAES,IAAA,eAAe,CAAC,KAA0C,EAAA;AAClE,QAAA,KAAK,GAAG,KAAK,IAAI,EAAE,CAAC;QAEpB,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE;AAC9C,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAC9B,SAAA;QAED,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE;AAC9C,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACjC,SAAA;KACF;AAEO,IAAA,gBAAgB,CAAC,KAAuB,EAAA;QAC9C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;YAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,CAAC,OAAO,EAAE;AACZ,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;AACrD,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;AAEO,IAAA,mBAAmB,CAAC,KAAuB,EAAA;QACjD,IAAI,cAAc,GAAG,CAAC,CAAC;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AAC3C,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACzC,aAAA;AAAM,iBAAA;AACL,gBAAA,cAAc,EAAE,CAAC;AAClB,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;KAC1B;;uHA9FmB,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;2GAA1B,0BAA0B,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAD/C,SAAS;;;MCVY,qBAAqB,CAAA;AAD3C,IAAA,WAAA,GAAA;AAIY,QAAA,IAAA,CAAA,SAAS,GAAoB,IAAI,YAAY,EAAE,CAAC;AAIvC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;KAyCnD;AAvCC,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;KAC/C;AAED,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;KACzB;AAES,IAAA,mBAAmB,CAAC,KAAS,EAAA;AACrC,QAAA,OAAO,KAAK,CAAC;KACd;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;KAChG;IAED,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AAC1B,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,iCACd,IAAI,CAAC,aAAa,CAAA,EAClB,IAAI,CAAC,IAAI,CAAC,KAAK,EAClB,CAAC;AACJ,SAAA;AAAM,aAAA;YACL,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAAC;AACxF,SAAA;KACF;IAED,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC1B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AACpF,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;AAC7B,SAAA;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;KAC1B;;kHA/CmB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;sGAArB,qBAAqB,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAD1C,SAAS;8BAEC,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEI,SAAS,EAAA,CAAA;sBAAlB,MAAM;;;ACRT;;;;;;;;AAQG;MAQmB,0BAA0B,CAAA;AADhD,IAAA,WAAA,GAAA;AAQqB,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;KAgDnD;IA5CC,eAAe,GAAA;QACb,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC3B;IAES,kBAAkB,GAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YACxE,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;AAC7C,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,gBAAgB,CAAC,EAA8C,EAAA;AAC7D,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;AAED,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;AAED,IAAA,UAAU,CAAC,SAA+B,EAAA;AACxC,QAAA,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5D,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AACvD,SAAA;KACF;AAED,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;KACzG;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AAC1B,YAAA,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;AACnC,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;KAC1B;;uHAtDmB,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;2GAA1B,0BAA0B,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAD/C,SAAS;;;ACfV,MAAM,aAAa,GAA2B;AAC5C,IAAA,QAAQ,EAAE,4BAA4B;AACtC,IAAA,GAAG,EAAE,mCAAmC;AACxC,IAAA,GAAG,EAAE,mCAAmC;AACxC,IAAA,SAAS,EAAE,8DAA8D;AACzE,IAAA,SAAS,EAAE,oEAAoE;AAC/E,IAAA,KAAK,EAAE,iCAAiC;CACzC,CAAC;AAEc,SAAA,eAAe,CAAC,QAAgB,EAAE,YAAoC,EAAA;AACpF,IAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;QAC5B,OAAO,CAAA,4CAAA,EAA+C,QAAQ,CAAA,CAAE,CAAC;AAClE,KAAA;AAED,IAAA,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,yBAAyB,EAAE,4BAA4B,KAC3G,YAAY,CAAC,4BAA4B,CAAC,GAAG,YAAY,CAAC,4BAA4B,CAAC,GAAG,yBAAyB,CACpH,CAAC;AACJ;;MCVsB,sBAAsB,CAAA;IAE1C,IAAa,YAAY,CAAC,YAAoB,EAAA;AAC5C,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KACvC;AAgBD,IAAA,WAAA,CAAyC,gBAAmC,EAAA;AAAnC,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAmB;AAnBnE,QAAA,IAAe,CAAA,eAAA,GAAG,EAAE,CAAC;AAIrB,QAAA,IAAK,CAAA,KAAA,GAAG,EAAE,CAAC;AACX,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AACjB,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AACjB,QAAA,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AAKP,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;QAC/B,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,CAAS,EAAE,CAAC,CAAC;AAEnE,QAAA,IAAM,CAAA,MAAA,GAAG,aAAa,CAAC;YACrB,YAAY,EAAE,IAAI,CAAC,aAAa;AACjC,SAAA,CAAC,CAAC;KAE6E;IAEhF,QAAQ,GAAA;;QACN,IAAI,CAAA,MAAA,IAAI,CAAC,gBAAgB,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,aAAY,SAAS,EAAE;AACvD,YAAA,IAAI,CAAC,aAAa,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,gBAAgB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAC/E,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,gBAAgB,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,0CAAE,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAChF,SAAA;QACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;IAEO,gBAAgB,GAAA;;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAS,CAAA,EAAE;YACzD,OAAO;AACR,SAAA;AAED,QAAA,MAAM,UAAU,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,EAAqB,CAAC,CAAC;AACnF,QAAA,IAAI,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AAC9D,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACtB,SAAA;KACF;IAED,MAAM,GAAA;QACJ,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,SAAS,EAAE,CAAC;AAClB,SAAA;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;AAED,IAAA,gBAAgB,CAAC,EAA6B,EAAA;AAC5C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;AAED,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;AAED,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;KAC5B;IAIS,mBAAmB,GAAA;;QAC3B,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,aAAa,CAAC,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA,CAAE,SAAS,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;KACpG;IAES,SAAS,GAAA;;AACjB,QAAA,IAAI,MAAA,IAAI,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,EAAE;AAC9B,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,0CAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D,YAAA,MAAM,QAAQ,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,CAAC,CAAA,EAAG,QAAQ,CAAA,CAAE,CAAC,CAAC;AAC3D,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,eAAe,CAAC,QAAQ,EAAA,MAAA,CAAA,MAAA,CAAA,EACtB,SAAS,EAAE,IAAI,CAAC,KAAK,IAClB,QAAQ,CAAA,CACX,CACH,CAAC;AACH,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC7B,SAAA;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;KAC1B;;mHAtFmB,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;uGAAtB,sBAAsB,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAD3C,SAAS;;;8BAqBK,QAAQ;;yBAnBZ,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACO,YAAY,EAAA,CAAA;sBAAxB,KAAK;gBAGG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;;;MCTK,yBAAyB,CAAA;;sHAAzB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAzB,yBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,YAF1B,YAAY,CAAA,EAAA,CAAA,CAAA;AAEX,yBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,YAF1B,YAAY,CAAA,EAAA,CAAA,CAAA;2FAEX,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC;iBACxB,CAAA;;;ACFK,SAAU,mCAAmC,CAAC,SAAwB,EAAA;IAC1E,OAAO;AACL,QAAA;AACE,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,WAAW,EAAE,UAAU,CAAC,MAAM,SAAS,CAAC;AACxC,YAAA,KAAK,EAAE,IAAI;AACZ,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,aAAa;AACtB,YAAA,WAAW,EAAE,UAAU,CAAC,MAAM,SAAS,CAAC;AACxC,YAAA,KAAK,EAAE,IAAI;AACZ,SAAA;KACF,CAAC;AACJ;;AChBA;;AAEG;;;;"}