@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.
- package/README.md +7 -0
- package/esm2020/index.mjs +8 -0
- package/esm2020/lib/error-messages.mjs +15 -0
- package/esm2020/lib/models/abstract-form-array-component.mjs +90 -0
- package/esm2020/lib/models/abstract-form-component.mjs +53 -0
- package/esm2020/lib/models/abstract-form-group.component.mjs +60 -0
- package/esm2020/lib/models/abstract-input-component.mjs +99 -0
- package/esm2020/lib/models/form.model.mjs +2 -0
- package/esm2020/lib/ngil-ui-common-form-cva.module.mjs +15 -0
- package/esm2020/lib/utils/control-value-accessor.util.mjs +17 -0
- package/esm2020/ngil-form-cva.mjs +5 -0
- package/fesm2015/ngil-form-cva.mjs +341 -0
- package/fesm2015/ngil-form-cva.mjs.map +1 -0
- package/fesm2020/ngil-form-cva.mjs +341 -0
- package/fesm2020/ngil-form-cva.mjs.map +1 -0
- package/index.d.ts +7 -0
- package/lib/error-messages.d.ts +1 -0
- package/lib/models/abstract-form-array-component.d.ts +32 -0
- package/lib/models/abstract-form-component.d.ts +19 -0
- package/lib/models/abstract-form-group.component.d.ts +34 -0
- package/lib/models/abstract-input-component.d.ts +34 -0
- package/lib/models/form.model.d.ts +17 -0
- package/lib/ngil-ui-common-form-cva.module.d.ts +7 -0
- package/lib/utils/control-value-accessor.util.d.ts +6 -0
- package/package.json +39 -0
|
@@ -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({
|
|
115
|
+
...this.formViewModel,
|
|
116
|
+
...this.form.value
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
Object.values(this.form.controls).forEach(control => control.updateValueAndValidity());
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
cancel() {
|
|
124
|
+
if (!this.isCancelDisabled) {
|
|
125
|
+
this.form.reset(this.getFormDefaultValue(this.formViewModel), { emitEvent: false });
|
|
126
|
+
this.form.markAsPristine();
|
|
127
|
+
this.form.markAsUntouched();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
ngOnDestroy() {
|
|
131
|
+
this.destroy$.next();
|
|
132
|
+
this.destroy$.complete();
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
AbstractFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AbstractFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
136
|
+
AbstractFormComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: AbstractFormComponent, inputs: { formViewModel: "formViewModel" }, outputs: { submitted: "submitted" }, ngImport: i0 });
|
|
137
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AbstractFormComponent, decorators: [{
|
|
138
|
+
type: Directive
|
|
139
|
+
}], propDecorators: { formViewModel: [{
|
|
140
|
+
type: Input
|
|
141
|
+
}], submitted: [{
|
|
142
|
+
type: Output
|
|
143
|
+
}] } });
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* This class implements ControlValueAccessor logic for a FormGroup.
|
|
147
|
+
* NG_VALUE_ACCESSOR and NG_VALIDATORS must be provided in the component.
|
|
148
|
+
*
|
|
149
|
+
* The FormGroup changes will be automatically change the parent FormControl value.
|
|
150
|
+
*
|
|
151
|
+
* Example:
|
|
152
|
+
|
|
153
|
+
*/
|
|
154
|
+
class AbstractFormGroupComponent {
|
|
155
|
+
constructor() {
|
|
156
|
+
this.destroy$ = new Subject();
|
|
157
|
+
}
|
|
158
|
+
ngAfterViewInit() {
|
|
159
|
+
this.listenValueChanges();
|
|
160
|
+
}
|
|
161
|
+
listenValueChanges() {
|
|
162
|
+
this.formGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(() => {
|
|
163
|
+
if (this.onChange) {
|
|
164
|
+
this.onChange(this.formGroup.getRawValue());
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
registerOnChange(fn) {
|
|
169
|
+
this.onChange = fn;
|
|
170
|
+
}
|
|
171
|
+
registerOnTouched(fn) {
|
|
172
|
+
this.onTouched = fn;
|
|
173
|
+
}
|
|
174
|
+
writeValue(formValue) {
|
|
175
|
+
if (formValue) {
|
|
176
|
+
this.formGroup.patchValue(formValue, { emitEvent: false });
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
this.formGroup.reset(undefined, { emitEvent: false });
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
setDisabledState(isDisabled) {
|
|
183
|
+
isDisabled ? this.formGroup.disable({ emitEvent: false }) : this.formGroup.enable({ emitEvent: false });
|
|
184
|
+
}
|
|
185
|
+
validate() {
|
|
186
|
+
if (this.formGroup.invalid) {
|
|
187
|
+
return { invalidFormGroup: true };
|
|
188
|
+
}
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
191
|
+
ngOnDestroy() {
|
|
192
|
+
this.destroy$.next();
|
|
193
|
+
this.destroy$.complete();
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
AbstractFormGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AbstractFormGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
197
|
+
AbstractFormGroupComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: AbstractFormGroupComponent, ngImport: i0 });
|
|
198
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AbstractFormGroupComponent, decorators: [{
|
|
199
|
+
type: Directive
|
|
200
|
+
}] });
|
|
201
|
+
|
|
202
|
+
const errorMessages = {
|
|
203
|
+
required: '{{fieldName}} is required.',
|
|
204
|
+
max: 'Maximum {{fieldName}} is {{max}}.',
|
|
205
|
+
min: 'Minimum {{fieldName}} is {{min}}.',
|
|
206
|
+
maxlength: '{{fieldName}} can be max {{requiredLength}} characters long.',
|
|
207
|
+
minlength: '{{fieldName}} must be at least {{requiredLength}} characters long.',
|
|
208
|
+
email: '{{fieldName}} must be an email.'
|
|
209
|
+
};
|
|
210
|
+
function getErrorMessage(errorKey, replacements) {
|
|
211
|
+
if (!errorMessages[errorKey]) {
|
|
212
|
+
return `Missing error message to the error with key ${errorKey}`;
|
|
213
|
+
}
|
|
214
|
+
return errorMessages[errorKey].replace(/{{(\w+)}}/g, (placeholderWithDelimiters, placeholderWithoutDelimiters) => replacements[placeholderWithoutDelimiters] ? replacements[placeholderWithoutDelimiters] : placeholderWithDelimiters);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
class AbstractInputComponent {
|
|
218
|
+
set errorMessage(errorMessage) {
|
|
219
|
+
this.errorMessage$.next(errorMessage);
|
|
220
|
+
}
|
|
221
|
+
constructor(controlContainer) {
|
|
222
|
+
this.controlContainer = controlContainer;
|
|
223
|
+
this.formControlName = '';
|
|
224
|
+
this.label = '';
|
|
225
|
+
this.readonly = false;
|
|
226
|
+
this.required = false;
|
|
227
|
+
this.disabled = false;
|
|
228
|
+
this.destroy$ = new Subject();
|
|
229
|
+
this.errorMessage$ = new BehaviorSubject('');
|
|
230
|
+
this.model$ = combineLatest({
|
|
231
|
+
errorMessage: this.errorMessage$
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
ngOnInit() {
|
|
235
|
+
if (this.controlContainer?.control instanceof FormArray) {
|
|
236
|
+
this.parentControl = this.controlContainer?.control.at(+this.formControlName);
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
this.parentControl = this.controlContainer?.control?.get(this.formControlName);
|
|
240
|
+
}
|
|
241
|
+
this.setRequiredState();
|
|
242
|
+
this.listenStatusChanges();
|
|
243
|
+
}
|
|
244
|
+
setRequiredState() {
|
|
245
|
+
if (!this.parentControl || !this.parentControl?.validator) {
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
const validators = this.parentControl?.validator({ value: '' });
|
|
249
|
+
if (validators && Object.keys(validators).includes('required')) {
|
|
250
|
+
this.required = true;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
onBlur() {
|
|
254
|
+
if (this.onTouched) {
|
|
255
|
+
this.onTouched();
|
|
256
|
+
}
|
|
257
|
+
this.setErrors();
|
|
258
|
+
}
|
|
259
|
+
registerOnChange(fn) {
|
|
260
|
+
this.onChange = fn;
|
|
261
|
+
}
|
|
262
|
+
registerOnTouched(fn) {
|
|
263
|
+
this.onTouched = fn;
|
|
264
|
+
}
|
|
265
|
+
setDisabledState(isDisabled) {
|
|
266
|
+
this.disabled = isDisabled;
|
|
267
|
+
}
|
|
268
|
+
listenStatusChanges() {
|
|
269
|
+
this.parentControl?.statusChanges.pipe(takeUntil$1(this.destroy$)).subscribe(() => this.setErrors());
|
|
270
|
+
}
|
|
271
|
+
setErrors() {
|
|
272
|
+
if (this.parentControl?.errors) {
|
|
273
|
+
const errorKey = Object.keys(this.parentControl?.errors)[0];
|
|
274
|
+
const errorObj = this.parentControl?.errors[`${errorKey}`];
|
|
275
|
+
this.errorMessage$.next(getErrorMessage(errorKey, {
|
|
276
|
+
fieldName: this.label,
|
|
277
|
+
...errorObj
|
|
278
|
+
}));
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
this.errorMessage$.next('');
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
ngOnDestroy() {
|
|
285
|
+
this.destroy$.next();
|
|
286
|
+
this.destroy$.complete();
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
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 });
|
|
290
|
+
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 });
|
|
291
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AbstractInputComponent, decorators: [{
|
|
292
|
+
type: Directive
|
|
293
|
+
}], ctorParameters: function () { return [{ type: i1.ControlContainer, decorators: [{
|
|
294
|
+
type: Optional
|
|
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":"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"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './lib/models/abstract-form-array-component';
|
|
2
|
+
export * from './lib/models/abstract-form-component';
|
|
3
|
+
export * from './lib/models/abstract-form-group.component';
|
|
4
|
+
export * from './lib/models/abstract-input-component';
|
|
5
|
+
export * from './lib/models/form.model';
|
|
6
|
+
export * from './lib/ngil-ui-common-form-cva.module';
|
|
7
|
+
export * from './lib/utils/control-value-accessor.util';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getErrorMessage(errorKey: string, replacements: Record<string, string>): string;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { AfterViewInit, OnDestroy } from '@angular/core';
|
|
2
|
+
import { AbstractControl, ControlValueAccessor, FormArray, FormGroup, ValidationErrors, Validator } from '@angular/forms';
|
|
3
|
+
import { Subject } from 'rxjs';
|
|
4
|
+
import { FormValueOf } from './form.model';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
/**
|
|
7
|
+
*
|
|
8
|
+
*/
|
|
9
|
+
export declare abstract class AbstractFormArrayComponent<F extends AbstractControl<any>> implements AfterViewInit, OnDestroy, ControlValueAccessor, Validator {
|
|
10
|
+
protected abstract createFormArray(): FormArray<F>;
|
|
11
|
+
protected abstract createFormArrayItem(item?: FormValueOf<F>): F;
|
|
12
|
+
protected readonly destroy$: Subject<void>;
|
|
13
|
+
protected onChange?: (value: FormValueOf<F>[]) => void;
|
|
14
|
+
protected onTouched?: () => void;
|
|
15
|
+
formGroup: FormGroup<{
|
|
16
|
+
formArray: FormArray<F>;
|
|
17
|
+
}>;
|
|
18
|
+
get formArray(): FormArray<F>;
|
|
19
|
+
ngAfterViewInit(): void;
|
|
20
|
+
protected listenValueChanges(): void;
|
|
21
|
+
registerOnChange(fn: (value: FormValueOf<F>[]) => void): void;
|
|
22
|
+
registerOnTouched(fn: () => void): void;
|
|
23
|
+
writeValue(items: FormValueOf<F>[] | undefined | null): void;
|
|
24
|
+
setDisabledState(isDisabled: boolean): void;
|
|
25
|
+
validate(): ValidationErrors | null;
|
|
26
|
+
protected prepareControls(items: FormValueOf<F>[] | undefined | null): void;
|
|
27
|
+
private addExtraControls;
|
|
28
|
+
private removeExtraControls;
|
|
29
|
+
ngOnDestroy(): void;
|
|
30
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AbstractFormArrayComponent<any>, never>;
|
|
31
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractFormArrayComponent<any>, never, never, {}, {}, never, never, false, never>;
|
|
32
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { EventEmitter, OnDestroy, OnInit } from '@angular/core';
|
|
2
|
+
import { FormGroup } from '@angular/forms';
|
|
3
|
+
import { Subject } from 'rxjs';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare abstract class AbstractFormComponent<T> implements OnDestroy, OnInit {
|
|
6
|
+
formViewModel?: T;
|
|
7
|
+
submitted: EventEmitter<T>;
|
|
8
|
+
abstract form: FormGroup;
|
|
9
|
+
protected readonly destroy$: Subject<void>;
|
|
10
|
+
get isSubmitDisabled(): boolean;
|
|
11
|
+
get isCancelDisabled(): boolean;
|
|
12
|
+
protected getFormDefaultValue(model?: T): T | undefined;
|
|
13
|
+
ngOnInit(): void;
|
|
14
|
+
submit(): void;
|
|
15
|
+
cancel(): void;
|
|
16
|
+
ngOnDestroy(): void;
|
|
17
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AbstractFormComponent<any>, never>;
|
|
18
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractFormComponent<any>, never, never, { "formViewModel": "formViewModel"; }, { "submitted": "submitted"; }, never, never, false, never>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This class implements ControlValueAccessor logic for a FormGroup.
|
|
3
|
+
* NG_VALUE_ACCESSOR and NG_VALIDATORS must be provided in the component.
|
|
4
|
+
*
|
|
5
|
+
* The FormGroup changes will be automatically change the parent FormControl value.
|
|
6
|
+
*
|
|
7
|
+
* Example:
|
|
8
|
+
|
|
9
|
+
*/
|
|
10
|
+
import { AfterViewInit, OnDestroy } from '@angular/core';
|
|
11
|
+
import { AbstractControl, ControlValueAccessor, FormGroup, ValidationErrors, Validator } from '@angular/forms';
|
|
12
|
+
import { Subject } from 'rxjs';
|
|
13
|
+
import { FlatFormControlsOf, FormValueOf } from './form.model';
|
|
14
|
+
import * as i0 from "@angular/core";
|
|
15
|
+
export declare abstract class AbstractFormGroupComponent<T extends {
|
|
16
|
+
[K in keyof T]: any;
|
|
17
|
+
}, F extends {
|
|
18
|
+
[K in keyof T]: AbstractControl<any, any>;
|
|
19
|
+
} = FlatFormControlsOf<T>> implements ControlValueAccessor, Validator, OnDestroy, AfterViewInit {
|
|
20
|
+
abstract formGroup: FormGroup<F>;
|
|
21
|
+
protected readonly destroy$: Subject<void>;
|
|
22
|
+
protected onChange?: (value: FormValueOf<FormGroup<F>>) => void;
|
|
23
|
+
protected onTouched?: () => void;
|
|
24
|
+
ngAfterViewInit(): void;
|
|
25
|
+
protected listenValueChanges(): void;
|
|
26
|
+
registerOnChange(fn: (value: FormValueOf<FormGroup<F>>) => void): void;
|
|
27
|
+
registerOnTouched(fn: () => void): void;
|
|
28
|
+
writeValue(formValue: T | undefined | null): void;
|
|
29
|
+
setDisabledState(isDisabled: boolean): void;
|
|
30
|
+
validate(): ValidationErrors | null;
|
|
31
|
+
ngOnDestroy(): void;
|
|
32
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AbstractFormGroupComponent<any, any>, never>;
|
|
33
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractFormGroupComponent<any, any>, never, never, {}, {}, never, never, false, never>;
|
|
34
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { OnDestroy, OnInit } from '@angular/core';
|
|
2
|
+
import { AbstractControl, ControlContainer, ControlValueAccessor } from '@angular/forms';
|
|
3
|
+
import { BehaviorSubject, Subject } from 'rxjs';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare abstract class AbstractInputComponent<T = string> implements OnInit, ControlValueAccessor, OnDestroy {
|
|
6
|
+
private readonly controlContainer?;
|
|
7
|
+
formControlName: string;
|
|
8
|
+
set errorMessage(errorMessage: string);
|
|
9
|
+
label: string;
|
|
10
|
+
readonly: boolean;
|
|
11
|
+
required: boolean;
|
|
12
|
+
disabled: boolean;
|
|
13
|
+
protected parentControl?: AbstractControl | null;
|
|
14
|
+
protected onChange?: (value: T | null) => void;
|
|
15
|
+
protected onTouched?: () => void;
|
|
16
|
+
protected readonly destroy$: Subject<void>;
|
|
17
|
+
protected readonly errorMessage$: BehaviorSubject<string>;
|
|
18
|
+
model$: import("rxjs").Observable<{
|
|
19
|
+
errorMessage: string;
|
|
20
|
+
}>;
|
|
21
|
+
constructor(controlContainer?: ControlContainer | undefined);
|
|
22
|
+
ngOnInit(): void;
|
|
23
|
+
private setRequiredState;
|
|
24
|
+
onBlur(): void;
|
|
25
|
+
registerOnChange(fn: (value: T | null) => void): void;
|
|
26
|
+
registerOnTouched(fn: () => void): void;
|
|
27
|
+
setDisabledState(isDisabled: boolean): void;
|
|
28
|
+
abstract writeValue(value: T): void;
|
|
29
|
+
protected listenStatusChanges(): void;
|
|
30
|
+
protected setErrors(): void;
|
|
31
|
+
ngOnDestroy(): void;
|
|
32
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AbstractInputComponent<any>, [{ optional: true; }]>;
|
|
33
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<AbstractInputComponent<any>, never, never, { "formControlName": "formControlName"; "errorMessage": "errorMessage"; "label": "label"; "readonly": "readonly"; "required": "required"; "disabled": "disabled"; }, {}, never, never, false, never>;
|
|
34
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { AbstractControl, FormControl, FormGroup } from '@angular/forms';
|
|
2
|
+
/**
|
|
3
|
+
* Create FormControl or FormGroup types to used in a FormGroup using a interface
|
|
4
|
+
*/
|
|
5
|
+
export type FormControlsOf<T extends Record<string, any>> = {
|
|
6
|
+
[K in keyof Required<T>]: Required<T>[K] extends Record<string, any> ? Required<T>[K] extends any[] ? FormControl<T[K] | null> : FormGroup<FormControlsOf<Required<T>[K]>> : FormControl<T[K] | null>;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Wrap every property in the Record T in a FormControl type
|
|
10
|
+
*/
|
|
11
|
+
export type FlatFormControlsOf<T extends Record<string, any>> = {
|
|
12
|
+
[K in keyof T]: FormControl<T[K] | null>;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Gives the form value type
|
|
16
|
+
*/
|
|
17
|
+
export type FormValueOf<T extends AbstractControl<any>> = T['value'];
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import * as i1 from "@angular/common";
|
|
3
|
+
export declare class NgilUiCommonFormCvaModule {
|
|
4
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgilUiCommonFormCvaModule, never>;
|
|
5
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<NgilUiCommonFormCvaModule, never, [typeof i1.CommonModule], never>;
|
|
6
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<NgilUiCommonFormCvaModule>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Type } from '@angular/core';
|
|
2
|
+
export declare function createControlValueAccessorProviders(component: Type<unknown>): {
|
|
3
|
+
provide: import("@angular/core").InjectionToken<readonly import("@angular/forms").ControlValueAccessor[]>;
|
|
4
|
+
useExisting: Type<any>;
|
|
5
|
+
multi: boolean;
|
|
6
|
+
}[];
|
package/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ngil/form-cva",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"dependencies": {
|
|
5
|
+
"tslib": "^2.3.0"
|
|
6
|
+
},
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git@github.com:allanartuso/ngdux.git",
|
|
10
|
+
"directory": "/libs/ngil/ui/common/cva"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://github.com/allanartuso/ngdux/tree/master/libs/ngil/ui/common/cva#readme",
|
|
13
|
+
"module": "fesm2015/ngil-form-cva.mjs",
|
|
14
|
+
"es2020": "fesm2020/ngil-form-cva.mjs",
|
|
15
|
+
"esm2020": "esm2020/ngil-form-cva.mjs",
|
|
16
|
+
"fesm2020": "fesm2020/ngil-form-cva.mjs",
|
|
17
|
+
"fesm2015": "fesm2015/ngil-form-cva.mjs",
|
|
18
|
+
"typings": "index.d.ts",
|
|
19
|
+
"exports": {
|
|
20
|
+
"./package.json": {
|
|
21
|
+
"default": "./package.json"
|
|
22
|
+
},
|
|
23
|
+
".": {
|
|
24
|
+
"types": "./index.d.ts",
|
|
25
|
+
"esm2020": "./esm2020/ngil-form-cva.mjs",
|
|
26
|
+
"es2020": "./fesm2020/ngil-form-cva.mjs",
|
|
27
|
+
"es2015": "./fesm2015/ngil-form-cva.mjs",
|
|
28
|
+
"node": "./fesm2015/ngil-form-cva.mjs",
|
|
29
|
+
"default": "./fesm2020/ngil-form-cva.mjs"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"sideEffects": false,
|
|
33
|
+
"peerDependencies": {
|
|
34
|
+
"@angular/core": "15.2.9",
|
|
35
|
+
"@angular/forms": "15.2.9",
|
|
36
|
+
"rxjs": "7.8.1",
|
|
37
|
+
"@angular/common": "15.2.9"
|
|
38
|
+
}
|
|
39
|
+
}
|