superlikers-dynamic-forms 1.0.6 → 1.1.7
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.
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { InjectionToken, Injectable, inject, input, ChangeDetectionStrategy, Component, Injector, signal, Pipe, ViewContainerRef, TemplateRef, computed, effect, Directive, ElementRef } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/forms';
|
|
4
|
-
import { Validators, FormGroupDirective,
|
|
4
|
+
import { Validators, FormGroupDirective, ControlContainer, FormBuilder, ReactiveFormsModule, FormControl, NonNullableFormBuilder, FormArray } from '@angular/forms';
|
|
5
5
|
import { of, from, tap, startWith, merge, fromEvent, iif, EMPTY, map as map$1, switchMap as switchMap$1, Observable } from 'rxjs';
|
|
6
6
|
import * as i4 from '@angular/common';
|
|
7
7
|
import { KeyValuePipe, NgComponentOutlet, AsyncPipe } from '@angular/common';
|
|
@@ -97,6 +97,7 @@ const SETTINGS = new InjectionToken('Settings', {
|
|
|
97
97
|
});
|
|
98
98
|
|
|
99
99
|
const ERROR_MESSAGES = {
|
|
100
|
+
pending: () => `Validating...`,
|
|
100
101
|
required: () => `This field is required`,
|
|
101
102
|
requiredTrue: () => `This field is required`,
|
|
102
103
|
pattern: () => `Does not match the pattern`,
|
|
@@ -105,9 +106,11 @@ const ERROR_MESSAGES = {
|
|
|
105
106
|
maxlength: args => `Length must not exceed ${args?.['requiredLength']} characters. Currently, it has ${args?.['actualLength']} characters.`,
|
|
106
107
|
min: args => `The value must be at least ${args?.['min']}`,
|
|
107
108
|
max: args => `The value must not exceed ${args?.['max']}`,
|
|
109
|
+
invalidChannelValue: error => String(error),
|
|
108
110
|
custom: error => String(error)
|
|
109
111
|
};
|
|
110
112
|
const SPANISH_ERROR_MESSAGES = {
|
|
113
|
+
pending: () => `Validando...`,
|
|
111
114
|
required: () => `Este campo es obligatorio`,
|
|
112
115
|
requiredTrue: () => `Este campo es obligatorio`,
|
|
113
116
|
pattern: () => `No coincide con el patrón`,
|
|
@@ -116,6 +119,7 @@ const SPANISH_ERROR_MESSAGES = {
|
|
|
116
119
|
maxlength: args => `La longitud no debe exceder los ${args?.['requiredLength']} caracteres. Actualmente tiene ${args?.['actualLength']} caracteres.`,
|
|
117
120
|
min: args => `El valor debe ser al menos ${args?.['min']}`,
|
|
118
121
|
max: args => `El valor no debe exceder ${args?.['max']}`,
|
|
122
|
+
invalidChannelValue: error => String(error),
|
|
119
123
|
custom: error => String(error)
|
|
120
124
|
};
|
|
121
125
|
const VALIDATION_ERROR_MESSAGES = new InjectionToken('Validation Messages', {
|
|
@@ -163,6 +167,17 @@ class ValidatorsService {
|
|
|
163
167
|
return [Validators.required];
|
|
164
168
|
}
|
|
165
169
|
};
|
|
170
|
+
this.asyncValidatorStrategies = {
|
|
171
|
+
asyncValidation: (value) => {
|
|
172
|
+
if (typeof value === 'function') {
|
|
173
|
+
return [value];
|
|
174
|
+
}
|
|
175
|
+
if (Array.isArray(value)) {
|
|
176
|
+
return value.filter((fn) => typeof fn === 'function');
|
|
177
|
+
}
|
|
178
|
+
return [];
|
|
179
|
+
}
|
|
180
|
+
};
|
|
166
181
|
}
|
|
167
182
|
resolveValidators({ validators = {} }) {
|
|
168
183
|
const validatorFns = [];
|
|
@@ -179,6 +194,21 @@ class ValidatorsService {
|
|
|
179
194
|
}
|
|
180
195
|
return validatorFns.length > 0 ? Validators.compose(validatorFns) : null;
|
|
181
196
|
}
|
|
197
|
+
resolveAsyncValidators({ validators = {} }) {
|
|
198
|
+
const validatorFns = [];
|
|
199
|
+
for (const key in validators) {
|
|
200
|
+
if (Object.prototype.hasOwnProperty.call(validators, key)) {
|
|
201
|
+
const typedKey = key;
|
|
202
|
+
const strategy = this.asyncValidatorStrategies[typedKey];
|
|
203
|
+
if (strategy) {
|
|
204
|
+
const value = validators[typedKey];
|
|
205
|
+
const fns = strategy(value);
|
|
206
|
+
validatorFns.push(...fns);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return validatorFns.length > 0 ? Validators.composeAsync(validatorFns) : null;
|
|
211
|
+
}
|
|
182
212
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ValidatorsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
183
213
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ValidatorsService, providedIn: 'root' }); }
|
|
184
214
|
}
|
|
@@ -228,6 +258,13 @@ class ErrorMessageComponent {
|
|
|
228
258
|
this.settings = inject(SETTINGS);
|
|
229
259
|
this.errorsMap = inject(VALIDATION_ERROR_MESSAGES);
|
|
230
260
|
this.errors = input(...(ngDevMode ? [undefined, { debugName: "errors" }] : []));
|
|
261
|
+
this.pending = input(false, ...(ngDevMode ? [{ debugName: "pending" }] : []));
|
|
262
|
+
}
|
|
263
|
+
getPendingMessage() {
|
|
264
|
+
if (!this.errorsMap['pending']) {
|
|
265
|
+
return 'Validating...';
|
|
266
|
+
}
|
|
267
|
+
return this.errorsMap['pending']();
|
|
231
268
|
}
|
|
232
269
|
getError(error) {
|
|
233
270
|
if (!this.errorsMap[error.key]) {
|
|
@@ -237,7 +274,10 @@ class ErrorMessageComponent {
|
|
|
237
274
|
return message;
|
|
238
275
|
}
|
|
239
276
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ErrorMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
240
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: ErrorMessageComponent, isStandalone: true, selector: "error-message", inputs: { errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
277
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: ErrorMessageComponent, isStandalone: true, selector: "error-message", inputs: { errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, pending: { classPropertyName: "pending", publicName: "pending", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
278
|
+
@if (pending()) {
|
|
279
|
+
<p [class]="settings.errorClasses">{{ getPendingMessage() }}</p>
|
|
280
|
+
}
|
|
241
281
|
@for (error of errors() | keyvalue; track error.key) {
|
|
242
282
|
<p [class]="settings.errorClasses">{{ getError(error) }}</p>
|
|
243
283
|
}
|
|
@@ -249,13 +289,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
249
289
|
selector: 'error-message',
|
|
250
290
|
imports: [KeyValuePipe],
|
|
251
291
|
template: `
|
|
292
|
+
@if (pending()) {
|
|
293
|
+
<p [class]="settings.errorClasses">{{ getPendingMessage() }}</p>
|
|
294
|
+
}
|
|
252
295
|
@for (error of errors() | keyvalue; track error.key) {
|
|
253
296
|
<p [class]="settings.errorClasses">{{ getError(error) }}</p>
|
|
254
297
|
}
|
|
255
298
|
`,
|
|
256
299
|
changeDetection: ChangeDetectionStrategy.OnPush
|
|
257
300
|
}]
|
|
258
|
-
}], propDecorators: { errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }] } });
|
|
301
|
+
}], propDecorators: { errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], pending: [{ type: i0.Input, args: [{ isSignal: true, alias: "pending", required: false }] }] } });
|
|
259
302
|
|
|
260
303
|
class ControlInjector {
|
|
261
304
|
constructor() {
|
|
@@ -358,7 +401,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
358
401
|
|
|
359
402
|
class ValidatorMessageDirective {
|
|
360
403
|
constructor() {
|
|
361
|
-
this.
|
|
404
|
+
this.controlName = input(...(ngDevMode ? [undefined, { debugName: "controlName" }] : []));
|
|
362
405
|
this.elementRef = inject(ElementRef);
|
|
363
406
|
this.vcr = inject(ViewContainerRef);
|
|
364
407
|
this.parentContainer = inject(ControlContainer, { optional: true });
|
|
@@ -368,17 +411,27 @@ class ValidatorMessageDirective {
|
|
|
368
411
|
return this.parentContainer?.formDirective;
|
|
369
412
|
}
|
|
370
413
|
ngOnInit() {
|
|
371
|
-
const control = this.
|
|
414
|
+
const control = this.getControl();
|
|
372
415
|
if (!control) {
|
|
373
416
|
return;
|
|
374
417
|
}
|
|
375
418
|
this.controlSubscription = merge(control.statusChanges, fromEvent(this.elementRef.nativeElement, 'blur'), iif(() => !!this.form, this.form.ngSubmit, EMPTY))
|
|
376
419
|
.pipe(startWith(control.status))
|
|
377
420
|
.subscribe(() => {
|
|
378
|
-
|
|
421
|
+
const shouldShow = control.touched || control.dirty || this.form?.submitted;
|
|
422
|
+
if (control.pending && shouldShow) {
|
|
423
|
+
if (!this.componentRef) {
|
|
424
|
+
this.componentRef = this.vcr.createComponent(ErrorMessageComponent);
|
|
425
|
+
}
|
|
426
|
+
this.componentRef.setInput('pending', true);
|
|
427
|
+
this.componentRef.setInput('errors', null);
|
|
428
|
+
return;
|
|
429
|
+
}
|
|
430
|
+
if (control.errors && shouldShow) {
|
|
379
431
|
if (!this.componentRef) {
|
|
380
432
|
this.componentRef = this.vcr.createComponent(ErrorMessageComponent);
|
|
381
433
|
}
|
|
434
|
+
this.componentRef.setInput('pending', false);
|
|
382
435
|
this.componentRef.setInput('errors', control.errors);
|
|
383
436
|
}
|
|
384
437
|
else {
|
|
@@ -387,18 +440,25 @@ class ValidatorMessageDirective {
|
|
|
387
440
|
}
|
|
388
441
|
});
|
|
389
442
|
}
|
|
443
|
+
getControl() {
|
|
444
|
+
const name = this.controlName();
|
|
445
|
+
if (!name) {
|
|
446
|
+
return null;
|
|
447
|
+
}
|
|
448
|
+
return this.parentContainer?.control?.get(name) ?? null;
|
|
449
|
+
}
|
|
390
450
|
ngOnDestroy() {
|
|
391
|
-
this.controlSubscription
|
|
451
|
+
this.controlSubscription?.unsubscribe();
|
|
392
452
|
}
|
|
393
453
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ValidatorMessageDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
394
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "
|
|
454
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.0.6", type: ValidatorMessageDirective, isStandalone: true, selector: "[validatorMessage]", inputs: { controlName: { classPropertyName: "controlName", publicName: "controlName", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
|
|
395
455
|
}
|
|
396
456
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ValidatorMessageDirective, decorators: [{
|
|
397
457
|
type: Directive,
|
|
398
458
|
args: [{
|
|
399
459
|
selector: '[validatorMessage]'
|
|
400
460
|
}]
|
|
401
|
-
}] });
|
|
461
|
+
}], propDecorators: { controlName: [{ type: i0.Input, args: [{ isSignal: true, alias: "controlName", required: false }] }] } });
|
|
402
462
|
|
|
403
463
|
class FieldsComponent {
|
|
404
464
|
constructor() {
|
|
@@ -477,7 +537,8 @@ class BaseInputComponent {
|
|
|
477
537
|
this.value = computed(() => this.controlData().initialValue ?? this.control().value, ...(ngDevMode ? [{ debugName: "value" }] : []));
|
|
478
538
|
// Form control
|
|
479
539
|
this.validatorFn = this.validatorsService.resolveValidators(this.control());
|
|
480
|
-
this.
|
|
540
|
+
this.asyncValidatorFn = this.validatorsService.resolveAsyncValidators(this.control());
|
|
541
|
+
this.formControl = new FormControl(this.value(), this.validatorFn, this.asyncValidatorFn);
|
|
481
542
|
this.parentForm = this.controlContainer.control;
|
|
482
543
|
this.formValue = toSignal(this.parentForm.valueChanges.pipe(startWith(this.parentForm.value)), {
|
|
483
544
|
initialValue: this.parentForm.value
|
|
@@ -720,11 +781,11 @@ class AutocompleteFieldComponent extends BaseInputComponent {
|
|
|
720
781
|
this.dependencySubscriptions.forEach(sub => sub.unsubscribe());
|
|
721
782
|
}
|
|
722
783
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AutocompleteFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
723
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: AutocompleteFieldComponent, isStandalone: true, selector: "autocomplete-field", usesInheritance: true, ngImport: i0, template: "<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<div class=\"relative\">\n <input\n #origin\n [id]=\"control().name\"\n [name]=\"control().name\"\n [class]=\"settings.autocompleteInputClasses\"\n [placeholder]=\"control().placeholder ?? ''\"\n [formControl]=\"queryControl\"\n (focus)=\"open()\"\n autocomplete=\"off\"\n [attr.aria-expanded]=\"isOpen() ? 'true' : 'false'\"\n aria-controls=\"autocomplete-list\" />\n\n @if (loading()) {\n @if (settings.autocompleteLoadingIcon) {\n <div [class]=\"settings.autocompleteLoadingWrapperClasses\">\n <div [class]=\"settings.autocompleteLoadingIconClasses\">\n <ng-container [ngComponentOutlet]=\"settings.autocompleteLoadingIcon\" />\n </div>\n </div>\n } @else {\n <span [class]=\"settings.autocompleteLoadingTextClasses\">{{ settings.autocompleteLoadingText }}</span>\n }\n } @else {\n @if (settings.autocompleteClearIcon && !!queryControl.value) {\n <div\n [class]=\"settings.autocompleteClearWrapperClasses\"\n (click)=\"clear()\">\n <div [class]=\"settings.autocompleteClearIconClasses\">\n <ng-container [ngComponentOutlet]=\"settings.autocompleteClearIcon\" />\n </div>\n </div>\n } @else if (settings.autocompleteClearText && !!queryControl.value) {\n <span\n (click)=\"clear()\"\n [class]=\"settings.autocompleteClearTextClasses\">\n {{ settings.autocompleteClearText }}\n </span>\n }\n }\n</div>\n\n<!-- CDK Connected Overlay for suggestions dropdown -->\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\">\n <div\n [class]=\"settings.autocompleteDropdownClasses\"\n role=\"listbox\"\n aria-live=\"assertive\"\n id=\"autocomplete-list\">\n @for (option of suggestions$ | async; track trackByFn($index, option)) {\n <div\n [class]=\"[settings.autocompleteDropdownItemClasses, isSelected(option) ? settings.autocompleteDropdownItemSelectedClasses : '']\"\n tabindex=\"0\"\n (click)=\"selectOption(option)\"\n (keyup)=\"selectOption(option)\"\n role=\"option\"\n [attr.aria-selected]=\"isSelected(option)\">\n {{ displayWithFn(option) }}\n </div>\n }\n </div>\n</ng-template>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n
|
|
784
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: AutocompleteFieldComponent, isStandalone: true, selector: "autocomplete-field", usesInheritance: true, ngImport: i0, template: "<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<div class=\"relative\">\n <input\n #origin\n [id]=\"control().name\"\n [name]=\"control().name\"\n [class]=\"settings.autocompleteInputClasses\"\n [placeholder]=\"control().placeholder ?? ''\"\n [formControl]=\"queryControl\"\n (focus)=\"open()\"\n autocomplete=\"off\"\n [attr.aria-expanded]=\"isOpen() ? 'true' : 'false'\"\n aria-controls=\"autocomplete-list\" />\n\n @if (loading()) {\n @if (settings.autocompleteLoadingIcon) {\n <div [class]=\"settings.autocompleteLoadingWrapperClasses\">\n <div [class]=\"settings.autocompleteLoadingIconClasses\">\n <ng-container [ngComponentOutlet]=\"settings.autocompleteLoadingIcon\" />\n </div>\n </div>\n } @else {\n <span [class]=\"settings.autocompleteLoadingTextClasses\">{{ settings.autocompleteLoadingText }}</span>\n }\n } @else {\n @if (settings.autocompleteClearIcon && !!queryControl.value) {\n <div\n [class]=\"settings.autocompleteClearWrapperClasses\"\n (click)=\"clear()\">\n <div [class]=\"settings.autocompleteClearIconClasses\">\n <ng-container [ngComponentOutlet]=\"settings.autocompleteClearIcon\" />\n </div>\n </div>\n } @else if (settings.autocompleteClearText && !!queryControl.value) {\n <span\n (click)=\"clear()\"\n [class]=\"settings.autocompleteClearTextClasses\">\n {{ settings.autocompleteClearText }}\n </span>\n }\n }\n</div>\n\n<!-- CDK Connected Overlay for suggestions dropdown -->\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\">\n <div\n [class]=\"settings.autocompleteDropdownClasses\"\n role=\"listbox\"\n aria-live=\"assertive\"\n id=\"autocomplete-list\">\n @for (option of suggestions$ | async; track trackByFn($index, option)) {\n <div\n [class]=\"[settings.autocompleteDropdownItemClasses, isSelected(option) ? settings.autocompleteDropdownItemSelectedClasses : '']\"\n tabindex=\"0\"\n (click)=\"selectOption(option)\"\n (keyup)=\"selectOption(option)\"\n role=\"option\"\n [attr.aria-selected]=\"isSelected(option)\">\n {{ displayWithFn(option) }}\n </div>\n }\n </div>\n</ng-template>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [controlName]=\"control().name\" />\n</div>\n", dependencies: [{ kind: "ngmodule", type: i1.ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: HelpTextDirective, selector: "[helpMessage]", inputs: ["helpMessage"] }, { kind: "directive", type: ValidatorMessageDirective, selector: "[validatorMessage]", inputs: ["controlName"] }, { kind: "directive", type: i4.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i5.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], viewProviders: [controlProvider], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
724
785
|
}
|
|
725
786
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AutocompleteFieldComponent, decorators: [{
|
|
726
787
|
type: Component,
|
|
727
|
-
args: [{ selector: 'autocomplete-field', imports: [...controlDeps, OverlayModule, AsyncPipe], changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [controlProvider], template: "<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<div class=\"relative\">\n <input\n #origin\n [id]=\"control().name\"\n [name]=\"control().name\"\n [class]=\"settings.autocompleteInputClasses\"\n [placeholder]=\"control().placeholder ?? ''\"\n [formControl]=\"queryControl\"\n (focus)=\"open()\"\n autocomplete=\"off\"\n [attr.aria-expanded]=\"isOpen() ? 'true' : 'false'\"\n aria-controls=\"autocomplete-list\" />\n\n @if (loading()) {\n @if (settings.autocompleteLoadingIcon) {\n <div [class]=\"settings.autocompleteLoadingWrapperClasses\">\n <div [class]=\"settings.autocompleteLoadingIconClasses\">\n <ng-container [ngComponentOutlet]=\"settings.autocompleteLoadingIcon\" />\n </div>\n </div>\n } @else {\n <span [class]=\"settings.autocompleteLoadingTextClasses\">{{ settings.autocompleteLoadingText }}</span>\n }\n } @else {\n @if (settings.autocompleteClearIcon && !!queryControl.value) {\n <div\n [class]=\"settings.autocompleteClearWrapperClasses\"\n (click)=\"clear()\">\n <div [class]=\"settings.autocompleteClearIconClasses\">\n <ng-container [ngComponentOutlet]=\"settings.autocompleteClearIcon\" />\n </div>\n </div>\n } @else if (settings.autocompleteClearText && !!queryControl.value) {\n <span\n (click)=\"clear()\"\n [class]=\"settings.autocompleteClearTextClasses\">\n {{ settings.autocompleteClearText }}\n </span>\n }\n }\n</div>\n\n<!-- CDK Connected Overlay for suggestions dropdown -->\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\">\n <div\n [class]=\"settings.autocompleteDropdownClasses\"\n role=\"listbox\"\n aria-live=\"assertive\"\n id=\"autocomplete-list\">\n @for (option of suggestions$ | async; track trackByFn($index, option)) {\n <div\n [class]=\"[settings.autocompleteDropdownItemClasses, isSelected(option) ? settings.autocompleteDropdownItemSelectedClasses : '']\"\n tabindex=\"0\"\n (click)=\"selectOption(option)\"\n (keyup)=\"selectOption(option)\"\n role=\"option\"\n [attr.aria-selected]=\"isSelected(option)\">\n {{ displayWithFn(option) }}\n </div>\n }\n </div>\n</ng-template>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n
|
|
788
|
+
args: [{ selector: 'autocomplete-field', imports: [...controlDeps, OverlayModule, AsyncPipe], changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [controlProvider], template: "<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<div class=\"relative\">\n <input\n #origin\n [id]=\"control().name\"\n [name]=\"control().name\"\n [class]=\"settings.autocompleteInputClasses\"\n [placeholder]=\"control().placeholder ?? ''\"\n [formControl]=\"queryControl\"\n (focus)=\"open()\"\n autocomplete=\"off\"\n [attr.aria-expanded]=\"isOpen() ? 'true' : 'false'\"\n aria-controls=\"autocomplete-list\" />\n\n @if (loading()) {\n @if (settings.autocompleteLoadingIcon) {\n <div [class]=\"settings.autocompleteLoadingWrapperClasses\">\n <div [class]=\"settings.autocompleteLoadingIconClasses\">\n <ng-container [ngComponentOutlet]=\"settings.autocompleteLoadingIcon\" />\n </div>\n </div>\n } @else {\n <span [class]=\"settings.autocompleteLoadingTextClasses\">{{ settings.autocompleteLoadingText }}</span>\n }\n } @else {\n @if (settings.autocompleteClearIcon && !!queryControl.value) {\n <div\n [class]=\"settings.autocompleteClearWrapperClasses\"\n (click)=\"clear()\">\n <div [class]=\"settings.autocompleteClearIconClasses\">\n <ng-container [ngComponentOutlet]=\"settings.autocompleteClearIcon\" />\n </div>\n </div>\n } @else if (settings.autocompleteClearText && !!queryControl.value) {\n <span\n (click)=\"clear()\"\n [class]=\"settings.autocompleteClearTextClasses\">\n {{ settings.autocompleteClearText }}\n </span>\n }\n }\n</div>\n\n<!-- CDK Connected Overlay for suggestions dropdown -->\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\">\n <div\n [class]=\"settings.autocompleteDropdownClasses\"\n role=\"listbox\"\n aria-live=\"assertive\"\n id=\"autocomplete-list\">\n @for (option of suggestions$ | async; track trackByFn($index, option)) {\n <div\n [class]=\"[settings.autocompleteDropdownItemClasses, isSelected(option) ? settings.autocompleteDropdownItemSelectedClasses : '']\"\n tabindex=\"0\"\n (click)=\"selectOption(option)\"\n (keyup)=\"selectOption(option)\"\n role=\"option\"\n [attr.aria-selected]=\"isSelected(option)\">\n {{ displayWithFn(option) }}\n </div>\n }\n </div>\n</ng-template>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [controlName]=\"control().name\" />\n</div>\n" }]
|
|
728
789
|
}], ctorParameters: () => [] });
|
|
729
790
|
|
|
730
791
|
var autocompleteField_component = /*#__PURE__*/Object.freeze({
|
|
@@ -734,11 +795,11 @@ var autocompleteField_component = /*#__PURE__*/Object.freeze({
|
|
|
734
795
|
|
|
735
796
|
class CheckboxFieldComponent extends BaseInputComponent {
|
|
736
797
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: CheckboxFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
737
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.6", type: CheckboxFieldComponent, isStandalone: true, selector: "checkbox-field", usesInheritance: true, ngImport: i0, template: "<label [class]=\"settings.checkboxWrapperClasses\">\n <input\n [id]=\"control().name\"\n [name]=\"control().name\"\n [class]=\"settings.checkboxInputClasses\"\n type=\"checkbox\"\n [attr.aria-checked]=\"formControl.value ? 'true' : 'false'\"\n [formControlName]=\"control().name\" />\n <span\n [class]=\"settings.checkboxLabelTextClasses\"\n [innerHTML]=\"control().label\"></span>\n</label>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n
|
|
798
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.6", type: CheckboxFieldComponent, isStandalone: true, selector: "checkbox-field", usesInheritance: true, ngImport: i0, template: "<label [class]=\"settings.checkboxWrapperClasses\">\n <input\n [id]=\"control().name\"\n [name]=\"control().name\"\n [class]=\"settings.checkboxInputClasses\"\n type=\"checkbox\"\n [attr.aria-checked]=\"formControl.value ? 'true' : 'false'\"\n [formControlName]=\"control().name\" />\n <span\n [class]=\"settings.checkboxLabelTextClasses\"\n [innerHTML]=\"control().label\"></span>\n</label>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [controlName]=\"control().name\" />\n</div>\n", dependencies: [{ kind: "ngmodule", type: i1.ReactiveFormsModule }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: HelpTextDirective, selector: "[helpMessage]", inputs: ["helpMessage"] }, { kind: "directive", type: ValidatorMessageDirective, selector: "[validatorMessage]", inputs: ["controlName"] }], viewProviders: [controlProvider], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
738
799
|
}
|
|
739
800
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: CheckboxFieldComponent, decorators: [{
|
|
740
801
|
type: Component,
|
|
741
|
-
args: [{ selector: 'checkbox-field', imports: [...controlDeps], changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [controlProvider], template: "<label [class]=\"settings.checkboxWrapperClasses\">\n <input\n [id]=\"control().name\"\n [name]=\"control().name\"\n [class]=\"settings.checkboxInputClasses\"\n type=\"checkbox\"\n [attr.aria-checked]=\"formControl.value ? 'true' : 'false'\"\n [formControlName]=\"control().name\" />\n <span\n [class]=\"settings.checkboxLabelTextClasses\"\n [innerHTML]=\"control().label\"></span>\n</label>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n
|
|
802
|
+
args: [{ selector: 'checkbox-field', imports: [...controlDeps], changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [controlProvider], template: "<label [class]=\"settings.checkboxWrapperClasses\">\n <input\n [id]=\"control().name\"\n [name]=\"control().name\"\n [class]=\"settings.checkboxInputClasses\"\n type=\"checkbox\"\n [attr.aria-checked]=\"formControl.value ? 'true' : 'false'\"\n [formControlName]=\"control().name\" />\n <span\n [class]=\"settings.checkboxLabelTextClasses\"\n [innerHTML]=\"control().label\"></span>\n</label>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [controlName]=\"control().name\" />\n</div>\n" }]
|
|
742
803
|
}] });
|
|
743
804
|
|
|
744
805
|
var checkboxField_component = /*#__PURE__*/Object.freeze({
|
|
@@ -749,7 +810,7 @@ var checkboxField_component = /*#__PURE__*/Object.freeze({
|
|
|
749
810
|
class CheckboxGroupFieldComponent extends BaseInputComponent {
|
|
750
811
|
constructor() {
|
|
751
812
|
super(...arguments);
|
|
752
|
-
this.formControl = new FormControl(Array.isArray(this.value()) ? this.value() : [], this.validatorFn);
|
|
813
|
+
this.formControl = new FormControl(Array.isArray(this.value()) ? this.value() : [], this.validatorFn, this.asyncValidatorFn);
|
|
753
814
|
}
|
|
754
815
|
isSelected(value) {
|
|
755
816
|
const selectedValues = this.formControl.value;
|
|
@@ -768,11 +829,11 @@ class CheckboxGroupFieldComponent extends BaseInputComponent {
|
|
|
768
829
|
this.formControl.setValue(selectedValues);
|
|
769
830
|
}
|
|
770
831
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: CheckboxGroupFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
771
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: CheckboxGroupFieldComponent, isStandalone: true, selector: "checkbox-group-field", usesInheritance: true, ngImport: i0, template: "<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<div [class]=\"settings.checkboxGroupContainerClasses\">\n @for (option of options(); track option.value) {\n <label [class]=\"settings.checkboxGroupItemWrapperClasses\">\n <input\n [id]=\"control().name + '-' + option.value\"\n [name]=\"control().name + '-' + option.value\"\n [class]=\"settings.checkboxGroupItemInputClasses\"\n type=\"checkbox\"\n [checked]=\"isSelected(option.value)\"\n [disabled]=\"option.disabled\"\n (change)=\"onCheckboxChange($event, option.value)\" />\n <span [class]=\"settings.checkboxGroupItemLabelClasses\">{{ option.label }}</span>\n </label>\n }\n</div>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n
|
|
832
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: CheckboxGroupFieldComponent, isStandalone: true, selector: "checkbox-group-field", usesInheritance: true, ngImport: i0, template: "<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<div [class]=\"settings.checkboxGroupContainerClasses\">\n @for (option of options(); track option.value) {\n <label [class]=\"settings.checkboxGroupItemWrapperClasses\">\n <input\n [id]=\"control().name + '-' + option.value\"\n [name]=\"control().name + '-' + option.value\"\n [class]=\"settings.checkboxGroupItemInputClasses\"\n type=\"checkbox\"\n [checked]=\"isSelected(option.value)\"\n [disabled]=\"option.disabled\"\n (change)=\"onCheckboxChange($event, option.value)\" />\n <span [class]=\"settings.checkboxGroupItemLabelClasses\">{{ option.label }}</span>\n </label>\n }\n</div>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [controlName]=\"control().name\" />\n</div>\n", dependencies: [{ kind: "ngmodule", type: i1.ReactiveFormsModule }, { kind: "directive", type: HelpTextDirective, selector: "[helpMessage]", inputs: ["helpMessage"] }, { kind: "directive", type: ValidatorMessageDirective, selector: "[validatorMessage]", inputs: ["controlName"] }], viewProviders: [controlProvider], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
772
833
|
}
|
|
773
834
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: CheckboxGroupFieldComponent, decorators: [{
|
|
774
835
|
type: Component,
|
|
775
|
-
args: [{ selector: 'checkbox-group-field', imports: [...controlDeps], changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [controlProvider], template: "<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<div [class]=\"settings.checkboxGroupContainerClasses\">\n @for (option of options(); track option.value) {\n <label [class]=\"settings.checkboxGroupItemWrapperClasses\">\n <input\n [id]=\"control().name + '-' + option.value\"\n [name]=\"control().name + '-' + option.value\"\n [class]=\"settings.checkboxGroupItemInputClasses\"\n type=\"checkbox\"\n [checked]=\"isSelected(option.value)\"\n [disabled]=\"option.disabled\"\n (change)=\"onCheckboxChange($event, option.value)\" />\n <span [class]=\"settings.checkboxGroupItemLabelClasses\">{{ option.label }}</span>\n </label>\n }\n</div>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n
|
|
836
|
+
args: [{ selector: 'checkbox-group-field', imports: [...controlDeps], changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [controlProvider], template: "<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<div [class]=\"settings.checkboxGroupContainerClasses\">\n @for (option of options(); track option.value) {\n <label [class]=\"settings.checkboxGroupItemWrapperClasses\">\n <input\n [id]=\"control().name + '-' + option.value\"\n [name]=\"control().name + '-' + option.value\"\n [class]=\"settings.checkboxGroupItemInputClasses\"\n type=\"checkbox\"\n [checked]=\"isSelected(option.value)\"\n [disabled]=\"option.disabled\"\n (change)=\"onCheckboxChange($event, option.value)\" />\n <span [class]=\"settings.checkboxGroupItemLabelClasses\">{{ option.label }}</span>\n </label>\n }\n</div>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [controlName]=\"control().name\" />\n</div>\n" }]
|
|
776
837
|
}] });
|
|
777
838
|
|
|
778
839
|
var checkboxGroupField_component = /*#__PURE__*/Object.freeze({
|
|
@@ -783,7 +844,7 @@ var checkboxGroupField_component = /*#__PURE__*/Object.freeze({
|
|
|
783
844
|
class ChipsListFieldComponent extends BaseInputComponent {
|
|
784
845
|
constructor() {
|
|
785
846
|
super(...arguments);
|
|
786
|
-
this.formControl = new FormControl(Array.isArray(this.value()) ? this.value() : [], this.validatorFn);
|
|
847
|
+
this.formControl = new FormControl(Array.isArray(this.value()) ? this.value() : [], this.validatorFn, this.asyncValidatorFn);
|
|
787
848
|
this.inputValue = signal('', ...(ngDevMode ? [{ debugName: "inputValue" }] : []));
|
|
788
849
|
}
|
|
789
850
|
addChip() {
|
|
@@ -801,11 +862,11 @@ class ChipsListFieldComponent extends BaseInputComponent {
|
|
|
801
862
|
this.formControl.setValue(updatedChips);
|
|
802
863
|
}
|
|
803
864
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ChipsListFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
804
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: ChipsListFieldComponent, isStandalone: true, selector: "chips-list-field", usesInheritance: true, ngImport: i0, template: "<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<div [class]=\"settings.chipslistContainerClasses\">\n @for (chip of formControl.value; track $index) {\n <div [class]=\"settings.chipslistChipClasses\">\n {{ chip }}\n <button\n type=\"button\"\n [class]=\"settings.chipslistRemoveButtonClasses\"\n (click)=\"removeChip(chip)\">\n @if (settings.chipslistRemoveButtonIcon) {\n <div [class]=\"settings.chipslistRemoveButtonIconClasses\">\n <ng-container [ngComponentOutlet]=\"settings.chipslistRemoveButtonIcon\" />\n </div>\n }\n @if (settings.chipslistRemoveButtonLabel) {\n <span [class]=\"settings.chipslistRemoveButtonLabelClasses\">\n {{ settings.chipslistRemoveButtonLabel }}\n </span>\n }\n </button>\n </div>\n }\n</div>\n\n<div>\n <input\n [id]=\"control().name\"\n [class]=\"settings.chipslistInputClasses\"\n [name]=\"control().name\"\n [placeholder]=\"control().placeholder ?? ''\"\n [value]=\"inputValue()\"\n (input)=\"inputValue.set($any($event.target).value)\"\n (keydown.enter)=\"$event.preventDefault(); addChip()\"\n aria-label=\"Add new chip\" />\n <button\n type=\"button\"\n [class]=\"settings.chipslistAddButtonClasses\"\n aria-label=\"Add chip\"\n (click)=\"addChip()\">\n @if (settings.chipslistAddButtonIcon) {\n <div [class]=\"settings.chipslistAddButtonIconClasses\">\n <ng-container [ngComponentOutlet]=\"settings.chipslistAddButtonIcon\" />\n </div>\n }\n @if (settings.chipslistAddButtonLabel) {\n <span [class]=\"settings.chipslistAddButtonLabelClasses\">\n {{ settings.chipslistAddButtonLabel }}\n </span>\n }\n </button>\n</div>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n
|
|
865
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: ChipsListFieldComponent, isStandalone: true, selector: "chips-list-field", usesInheritance: true, ngImport: i0, template: "<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<div [class]=\"settings.chipslistContainerClasses\">\n @for (chip of formControl.value; track $index) {\n <div [class]=\"settings.chipslistChipClasses\">\n {{ chip }}\n <button\n type=\"button\"\n [class]=\"settings.chipslistRemoveButtonClasses\"\n (click)=\"removeChip(chip)\">\n @if (settings.chipslistRemoveButtonIcon) {\n <div [class]=\"settings.chipslistRemoveButtonIconClasses\">\n <ng-container [ngComponentOutlet]=\"settings.chipslistRemoveButtonIcon\" />\n </div>\n }\n @if (settings.chipslistRemoveButtonLabel) {\n <span [class]=\"settings.chipslistRemoveButtonLabelClasses\">\n {{ settings.chipslistRemoveButtonLabel }}\n </span>\n }\n </button>\n </div>\n }\n</div>\n\n<div>\n <input\n [id]=\"control().name\"\n [class]=\"settings.chipslistInputClasses\"\n [name]=\"control().name\"\n [placeholder]=\"control().placeholder ?? ''\"\n [value]=\"inputValue()\"\n (input)=\"inputValue.set($any($event.target).value)\"\n (keydown.enter)=\"$event.preventDefault(); addChip()\"\n aria-label=\"Add new chip\" />\n <button\n type=\"button\"\n [class]=\"settings.chipslistAddButtonClasses\"\n aria-label=\"Add chip\"\n (click)=\"addChip()\">\n @if (settings.chipslistAddButtonIcon) {\n <div [class]=\"settings.chipslistAddButtonIconClasses\">\n <ng-container [ngComponentOutlet]=\"settings.chipslistAddButtonIcon\" />\n </div>\n }\n @if (settings.chipslistAddButtonLabel) {\n <span [class]=\"settings.chipslistAddButtonLabelClasses\">\n {{ settings.chipslistAddButtonLabel }}\n </span>\n }\n </button>\n</div>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [controlName]=\"control().name\" />\n</div>\n", dependencies: [{ kind: "ngmodule", type: i1.ReactiveFormsModule }, { kind: "directive", type: HelpTextDirective, selector: "[helpMessage]", inputs: ["helpMessage"] }, { kind: "directive", type: ValidatorMessageDirective, selector: "[validatorMessage]", inputs: ["controlName"] }, { kind: "directive", type: i4.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
805
866
|
}
|
|
806
867
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: ChipsListFieldComponent, decorators: [{
|
|
807
868
|
type: Component,
|
|
808
|
-
args: [{ selector: 'chips-list-field', imports: [...controlDeps], changeDetection: ChangeDetectionStrategy.OnPush, template: "<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<div [class]=\"settings.chipslistContainerClasses\">\n @for (chip of formControl.value; track $index) {\n <div [class]=\"settings.chipslistChipClasses\">\n {{ chip }}\n <button\n type=\"button\"\n [class]=\"settings.chipslistRemoveButtonClasses\"\n (click)=\"removeChip(chip)\">\n @if (settings.chipslistRemoveButtonIcon) {\n <div [class]=\"settings.chipslistRemoveButtonIconClasses\">\n <ng-container [ngComponentOutlet]=\"settings.chipslistRemoveButtonIcon\" />\n </div>\n }\n @if (settings.chipslistRemoveButtonLabel) {\n <span [class]=\"settings.chipslistRemoveButtonLabelClasses\">\n {{ settings.chipslistRemoveButtonLabel }}\n </span>\n }\n </button>\n </div>\n }\n</div>\n\n<div>\n <input\n [id]=\"control().name\"\n [class]=\"settings.chipslistInputClasses\"\n [name]=\"control().name\"\n [placeholder]=\"control().placeholder ?? ''\"\n [value]=\"inputValue()\"\n (input)=\"inputValue.set($any($event.target).value)\"\n (keydown.enter)=\"$event.preventDefault(); addChip()\"\n aria-label=\"Add new chip\" />\n <button\n type=\"button\"\n [class]=\"settings.chipslistAddButtonClasses\"\n aria-label=\"Add chip\"\n (click)=\"addChip()\">\n @if (settings.chipslistAddButtonIcon) {\n <div [class]=\"settings.chipslistAddButtonIconClasses\">\n <ng-container [ngComponentOutlet]=\"settings.chipslistAddButtonIcon\" />\n </div>\n }\n @if (settings.chipslistAddButtonLabel) {\n <span [class]=\"settings.chipslistAddButtonLabelClasses\">\n {{ settings.chipslistAddButtonLabel }}\n </span>\n }\n </button>\n</div>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n
|
|
869
|
+
args: [{ selector: 'chips-list-field', imports: [...controlDeps], changeDetection: ChangeDetectionStrategy.OnPush, template: "<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<div [class]=\"settings.chipslistContainerClasses\">\n @for (chip of formControl.value; track $index) {\n <div [class]=\"settings.chipslistChipClasses\">\n {{ chip }}\n <button\n type=\"button\"\n [class]=\"settings.chipslistRemoveButtonClasses\"\n (click)=\"removeChip(chip)\">\n @if (settings.chipslistRemoveButtonIcon) {\n <div [class]=\"settings.chipslistRemoveButtonIconClasses\">\n <ng-container [ngComponentOutlet]=\"settings.chipslistRemoveButtonIcon\" />\n </div>\n }\n @if (settings.chipslistRemoveButtonLabel) {\n <span [class]=\"settings.chipslistRemoveButtonLabelClasses\">\n {{ settings.chipslistRemoveButtonLabel }}\n </span>\n }\n </button>\n </div>\n }\n</div>\n\n<div>\n <input\n [id]=\"control().name\"\n [class]=\"settings.chipslistInputClasses\"\n [name]=\"control().name\"\n [placeholder]=\"control().placeholder ?? ''\"\n [value]=\"inputValue()\"\n (input)=\"inputValue.set($any($event.target).value)\"\n (keydown.enter)=\"$event.preventDefault(); addChip()\"\n aria-label=\"Add new chip\" />\n <button\n type=\"button\"\n [class]=\"settings.chipslistAddButtonClasses\"\n aria-label=\"Add chip\"\n (click)=\"addChip()\">\n @if (settings.chipslistAddButtonIcon) {\n <div [class]=\"settings.chipslistAddButtonIconClasses\">\n <ng-container [ngComponentOutlet]=\"settings.chipslistAddButtonIcon\" />\n </div>\n }\n @if (settings.chipslistAddButtonLabel) {\n <span [class]=\"settings.chipslistAddButtonLabelClasses\">\n {{ settings.chipslistAddButtonLabel }}\n </span>\n }\n </button>\n</div>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [controlName]=\"control().name\" />\n</div>\n" }]
|
|
809
870
|
}] });
|
|
810
871
|
|
|
811
872
|
var chipsListField_component = /*#__PURE__*/Object.freeze({
|
|
@@ -863,11 +924,11 @@ class InputFieldComponent extends BaseInputComponent {
|
|
|
863
924
|
this.isPasswordOpen.set(!this.isPasswordOpen());
|
|
864
925
|
}
|
|
865
926
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: InputFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
866
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: InputFieldComponent, isStandalone: true, selector: "input-field", usesInheritance: true, ngImport: i0, template: "<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<input\n [class]=\"settings.inputClasses\"\n [id]=\"control().name\"\n [name]=\"control().name\"\n [type]=\"inputType()\"\n [formControlName]=\"control().name\"\n [placeholder]=\"inputPlaceholder()\"\n autocomplete=\"off\" />\n\n@if (control().type === 'password' && eyeComponent()) {\n <button\n type=\"button\"\n [class]=\"settings.passwordIconClasses\"\n (click)=\"togglePassword()\">\n <ng-container [ngComponentOutlet]=\"eyeComponent()!\" />\n </button>\n}\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n
|
|
927
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: InputFieldComponent, isStandalone: true, selector: "input-field", usesInheritance: true, ngImport: i0, template: "<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<input\n [class]=\"settings.inputClasses\"\n [id]=\"control().name\"\n [name]=\"control().name\"\n [type]=\"inputType()\"\n [formControlName]=\"control().name\"\n [placeholder]=\"inputPlaceholder()\"\n autocomplete=\"off\" />\n\n@if (control().type === 'password' && eyeComponent()) {\n <button\n type=\"button\"\n [class]=\"settings.passwordIconClasses\"\n (click)=\"togglePassword()\">\n <ng-container [ngComponentOutlet]=\"eyeComponent()!\" />\n </button>\n}\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [controlName]=\"control().name\" />\n</div>\n", dependencies: [{ kind: "ngmodule", type: i1.ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: HelpTextDirective, selector: "[helpMessage]", inputs: ["helpMessage"] }, { kind: "directive", type: ValidatorMessageDirective, selector: "[validatorMessage]", inputs: ["controlName"] }, { kind: "directive", type: i4.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }], viewProviders: [controlProvider], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
867
928
|
}
|
|
868
929
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: InputFieldComponent, decorators: [{
|
|
869
930
|
type: Component,
|
|
870
|
-
args: [{ selector: 'input-field', imports: [...controlDeps], changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [controlProvider], template: "<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<input\n [class]=\"settings.inputClasses\"\n [id]=\"control().name\"\n [name]=\"control().name\"\n [type]=\"inputType()\"\n [formControlName]=\"control().name\"\n [placeholder]=\"inputPlaceholder()\"\n autocomplete=\"off\" />\n\n@if (control().type === 'password' && eyeComponent()) {\n <button\n type=\"button\"\n [class]=\"settings.passwordIconClasses\"\n (click)=\"togglePassword()\">\n <ng-container [ngComponentOutlet]=\"eyeComponent()!\" />\n </button>\n}\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n
|
|
931
|
+
args: [{ selector: 'input-field', imports: [...controlDeps], changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [controlProvider], template: "<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<input\n [class]=\"settings.inputClasses\"\n [id]=\"control().name\"\n [name]=\"control().name\"\n [type]=\"inputType()\"\n [formControlName]=\"control().name\"\n [placeholder]=\"inputPlaceholder()\"\n autocomplete=\"off\" />\n\n@if (control().type === 'password' && eyeComponent()) {\n <button\n type=\"button\"\n [class]=\"settings.passwordIconClasses\"\n (click)=\"togglePassword()\">\n <ng-container [ngComponentOutlet]=\"eyeComponent()!\" />\n </button>\n}\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [controlName]=\"control().name\" />\n</div>\n" }]
|
|
871
932
|
}] });
|
|
872
933
|
|
|
873
934
|
var inputField_component = /*#__PURE__*/Object.freeze({
|
|
@@ -878,7 +939,7 @@ var inputField_component = /*#__PURE__*/Object.freeze({
|
|
|
878
939
|
class MultiSelectDropdownComponent extends BaseInputComponent {
|
|
879
940
|
constructor() {
|
|
880
941
|
super();
|
|
881
|
-
this.formControl = new FormControl(Array.isArray(this.value()) ? this.value() : [], this.validatorFn);
|
|
942
|
+
this.formControl = new FormControl(Array.isArray(this.value()) ? this.value() : [], this.validatorFn, this.asyncValidatorFn);
|
|
882
943
|
this.items = toSignal(this.getItems(), { initialValue: [] });
|
|
883
944
|
this.isOpen = signal(false, ...(ngDevMode ? [{ debugName: "isOpen" }] : []));
|
|
884
945
|
this.multipleMode = computed(() => {
|
|
@@ -989,13 +1050,13 @@ class MultiSelectDropdownComponent extends BaseInputComponent {
|
|
|
989
1050
|
this.selectedOptionsModel.deselect(option);
|
|
990
1051
|
}
|
|
991
1052
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: MultiSelectDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
992
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: MultiSelectDropdownComponent, isStandalone: true, selector: "multi-select-dropdown", host: { listeners: { "click": "open()" } }, usesInheritance: true, ngImport: i0, template: "<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<div\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\">\n <div>\n @if (displayOptions().length === 0) {\n <span>{{ settings.multiSelectEmptyText }}</span>\n } @else {\n <div [class]=\"settings.multiSelectDisplayedOptionsClasses\">\n @for (option of displayOptions(); track trackByFn($index, option)) {\n <div [class]=\"settings.multiSelectDisplayedOptionClasses\">\n <span>{{ displayWithFn(option) }}</span>\n <button\n type=\"button\"\n [class]=\"settings.multiSelectControlRemoveButtonClasses\"\n (click)=\"deselectOption($event, option)\">\n @if (settings.multiSelectControlRemoveButtonIcon) {\n <div [class]=\"settings.multiSelectControlRemoveButtonIconClasses\">\n <ng-container [ngComponentOutlet]=\"settings.multiSelectControlRemoveButtonIcon\" />\n </div>\n }\n @if (settings.multiSelectControlRemoveButtonLabel) {\n {{ settings.multiSelectControlRemoveButtonLabel }}\n }\n </button>\n </div>\n }\n </div>\n }\n </div>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\">\n <div [class]=\"settings.multiselectDropdownClasses\">\n @for (option of items(); track trackByFn($index, option)) {\n <div [class]=\"[settings.multiselectDropdownItemClasses, selectedOptionsModel.isSelected(option) ? settings.multiselectDropdownItemSelectedClasses : '']\">\n <label class=\"flex items-center gap-2 cursor-pointer\">\n <input\n [id]=\"control().name + '-option-' + $index\"\n [name]=\"control().name + '-option-' + $index\"\n type=\"checkbox\"\n class=\"rounded border-gray-300 text-blue-600 focus:ring-blue-500\"\n [checked]=\"selectedOptionsModel.isSelected(option)\"\n (change)=\"toggleSelection(option)\"\n [attr.aria-checked]=\"selectedOptionsModel.isSelected(option) ? 'true' : 'false'\"\n [attr.aria-selected]=\"selectedOptionsModel.isSelected(option) ? 'true' : 'false'\"\n role=\"option\" />\n {{ displayWithFn(option) }}\n </label>\n </div>\n }\n </div>\n</ng-template>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n
|
|
1053
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: MultiSelectDropdownComponent, isStandalone: true, selector: "multi-select-dropdown", host: { listeners: { "click": "open()" } }, usesInheritance: true, ngImport: i0, template: "<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<div\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\">\n <div>\n @if (displayOptions().length === 0) {\n <span>{{ settings.multiSelectEmptyText }}</span>\n } @else {\n <div [class]=\"settings.multiSelectDisplayedOptionsClasses\">\n @for (option of displayOptions(); track trackByFn($index, option)) {\n <div [class]=\"settings.multiSelectDisplayedOptionClasses\">\n <span>{{ displayWithFn(option) }}</span>\n <button\n type=\"button\"\n [class]=\"settings.multiSelectControlRemoveButtonClasses\"\n (click)=\"deselectOption($event, option)\">\n @if (settings.multiSelectControlRemoveButtonIcon) {\n <div [class]=\"settings.multiSelectControlRemoveButtonIconClasses\">\n <ng-container [ngComponentOutlet]=\"settings.multiSelectControlRemoveButtonIcon\" />\n </div>\n }\n @if (settings.multiSelectControlRemoveButtonLabel) {\n {{ settings.multiSelectControlRemoveButtonLabel }}\n }\n </button>\n </div>\n }\n </div>\n }\n </div>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\">\n <div [class]=\"settings.multiselectDropdownClasses\">\n @for (option of items(); track trackByFn($index, option)) {\n <div [class]=\"[settings.multiselectDropdownItemClasses, selectedOptionsModel.isSelected(option) ? settings.multiselectDropdownItemSelectedClasses : '']\">\n <label class=\"flex items-center gap-2 cursor-pointer\">\n <input\n [id]=\"control().name + '-option-' + $index\"\n [name]=\"control().name + '-option-' + $index\"\n type=\"checkbox\"\n class=\"rounded border-gray-300 text-blue-600 focus:ring-blue-500\"\n [checked]=\"selectedOptionsModel.isSelected(option)\"\n (change)=\"toggleSelection(option)\"\n [attr.aria-checked]=\"selectedOptionsModel.isSelected(option) ? 'true' : 'false'\"\n [attr.aria-selected]=\"selectedOptionsModel.isSelected(option) ? 'true' : 'false'\"\n role=\"option\" />\n {{ displayWithFn(option) }}\n </label>\n </div>\n }\n </div>\n</ng-template>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [controlName]=\"control().name\" />\n</div>\n", dependencies: [{ kind: "ngmodule", type: i1.ReactiveFormsModule }, { kind: "directive", type: HelpTextDirective, selector: "[helpMessage]", inputs: ["helpMessage"] }, { kind: "directive", type: ValidatorMessageDirective, selector: "[validatorMessage]", inputs: ["controlName"] }, { kind: "directive", type: i4.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i5.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i5.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
993
1054
|
}
|
|
994
1055
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: MultiSelectDropdownComponent, decorators: [{
|
|
995
1056
|
type: Component,
|
|
996
1057
|
args: [{ selector: 'multi-select-dropdown', imports: [...controlDeps, OverlayModule], changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
997
1058
|
'(click)': 'open()'
|
|
998
|
-
}, template: "<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<div\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\">\n <div>\n @if (displayOptions().length === 0) {\n <span>{{ settings.multiSelectEmptyText }}</span>\n } @else {\n <div [class]=\"settings.multiSelectDisplayedOptionsClasses\">\n @for (option of displayOptions(); track trackByFn($index, option)) {\n <div [class]=\"settings.multiSelectDisplayedOptionClasses\">\n <span>{{ displayWithFn(option) }}</span>\n <button\n type=\"button\"\n [class]=\"settings.multiSelectControlRemoveButtonClasses\"\n (click)=\"deselectOption($event, option)\">\n @if (settings.multiSelectControlRemoveButtonIcon) {\n <div [class]=\"settings.multiSelectControlRemoveButtonIconClasses\">\n <ng-container [ngComponentOutlet]=\"settings.multiSelectControlRemoveButtonIcon\" />\n </div>\n }\n @if (settings.multiSelectControlRemoveButtonLabel) {\n {{ settings.multiSelectControlRemoveButtonLabel }}\n }\n </button>\n </div>\n }\n </div>\n }\n </div>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\">\n <div [class]=\"settings.multiselectDropdownClasses\">\n @for (option of items(); track trackByFn($index, option)) {\n <div [class]=\"[settings.multiselectDropdownItemClasses, selectedOptionsModel.isSelected(option) ? settings.multiselectDropdownItemSelectedClasses : '']\">\n <label class=\"flex items-center gap-2 cursor-pointer\">\n <input\n [id]=\"control().name + '-option-' + $index\"\n [name]=\"control().name + '-option-' + $index\"\n type=\"checkbox\"\n class=\"rounded border-gray-300 text-blue-600 focus:ring-blue-500\"\n [checked]=\"selectedOptionsModel.isSelected(option)\"\n (change)=\"toggleSelection(option)\"\n [attr.aria-checked]=\"selectedOptionsModel.isSelected(option) ? 'true' : 'false'\"\n [attr.aria-selected]=\"selectedOptionsModel.isSelected(option) ? 'true' : 'false'\"\n role=\"option\" />\n {{ displayWithFn(option) }}\n </label>\n </div>\n }\n </div>\n</ng-template>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n
|
|
1059
|
+
}, template: "<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<div\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\">\n <div>\n @if (displayOptions().length === 0) {\n <span>{{ settings.multiSelectEmptyText }}</span>\n } @else {\n <div [class]=\"settings.multiSelectDisplayedOptionsClasses\">\n @for (option of displayOptions(); track trackByFn($index, option)) {\n <div [class]=\"settings.multiSelectDisplayedOptionClasses\">\n <span>{{ displayWithFn(option) }}</span>\n <button\n type=\"button\"\n [class]=\"settings.multiSelectControlRemoveButtonClasses\"\n (click)=\"deselectOption($event, option)\">\n @if (settings.multiSelectControlRemoveButtonIcon) {\n <div [class]=\"settings.multiSelectControlRemoveButtonIconClasses\">\n <ng-container [ngComponentOutlet]=\"settings.multiSelectControlRemoveButtonIcon\" />\n </div>\n }\n @if (settings.multiSelectControlRemoveButtonLabel) {\n {{ settings.multiSelectControlRemoveButtonLabel }}\n }\n </button>\n </div>\n }\n </div>\n }\n </div>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\">\n <div [class]=\"settings.multiselectDropdownClasses\">\n @for (option of items(); track trackByFn($index, option)) {\n <div [class]=\"[settings.multiselectDropdownItemClasses, selectedOptionsModel.isSelected(option) ? settings.multiselectDropdownItemSelectedClasses : '']\">\n <label class=\"flex items-center gap-2 cursor-pointer\">\n <input\n [id]=\"control().name + '-option-' + $index\"\n [name]=\"control().name + '-option-' + $index\"\n type=\"checkbox\"\n class=\"rounded border-gray-300 text-blue-600 focus:ring-blue-500\"\n [checked]=\"selectedOptionsModel.isSelected(option)\"\n (change)=\"toggleSelection(option)\"\n [attr.aria-checked]=\"selectedOptionsModel.isSelected(option) ? 'true' : 'false'\"\n [attr.aria-selected]=\"selectedOptionsModel.isSelected(option) ? 'true' : 'false'\"\n role=\"option\" />\n {{ displayWithFn(option) }}\n </label>\n </div>\n }\n </div>\n</ng-template>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [controlName]=\"control().name\" />\n</div>\n" }]
|
|
999
1060
|
}], ctorParameters: () => [] });
|
|
1000
1061
|
|
|
1001
1062
|
var multiSelectDropdown_component = /*#__PURE__*/Object.freeze({
|
|
@@ -1005,11 +1066,11 @@ var multiSelectDropdown_component = /*#__PURE__*/Object.freeze({
|
|
|
1005
1066
|
|
|
1006
1067
|
class RadioFieldComponent extends BaseInputComponent {
|
|
1007
1068
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: RadioFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
1008
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: RadioFieldComponent, isStandalone: true, selector: "radio-field", usesInheritance: true, ngImport: i0, template: "<label\n [class]=\"settings.labelClasses\"\n [for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<div [class]=\"settings.radioGroupContainerClasses\">\n @for (option of options(); track option.value) {\n <label [class]=\"settings.radioItemWrapperClasses\">\n <input\n [id]=\"control().name + '-' + option.value\"\n [name]=\"control().name\"\n [class]=\"settings.radioItemInputClasses\"\n type=\"radio\"\n [formControlName]=\"control().name\"\n [value]=\"option.value\"\n [attr.aria-checked]=\"formControl.value === option.value ? 'true' : 'false'\" />\n <span [class]=\"settings.radioItemLabelClasses\">{{ option.label }}</span>\n </label>\n }\n</div>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n
|
|
1069
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: RadioFieldComponent, isStandalone: true, selector: "radio-field", usesInheritance: true, ngImport: i0, template: "<label\n [class]=\"settings.labelClasses\"\n [for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<div [class]=\"settings.radioGroupContainerClasses\">\n @for (option of options(); track option.value) {\n <label [class]=\"settings.radioItemWrapperClasses\">\n <input\n [id]=\"control().name + '-' + option.value\"\n [name]=\"control().name\"\n [class]=\"settings.radioItemInputClasses\"\n type=\"radio\"\n [formControlName]=\"control().name\"\n [value]=\"option.value\"\n [attr.aria-checked]=\"formControl.value === option.value ? 'true' : 'false'\" />\n <span [class]=\"settings.radioItemLabelClasses\">{{ option.label }}</span>\n </label>\n }\n</div>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [controlName]=\"control().name\" />\n</div>\n", dependencies: [{ kind: "ngmodule", type: i1.ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: HelpTextDirective, selector: "[helpMessage]", inputs: ["helpMessage"] }, { kind: "directive", type: ValidatorMessageDirective, selector: "[validatorMessage]", inputs: ["controlName"] }], viewProviders: [controlProvider], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1009
1070
|
}
|
|
1010
1071
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: RadioFieldComponent, decorators: [{
|
|
1011
1072
|
type: Component,
|
|
1012
|
-
args: [{ selector: 'radio-field', imports: [...controlDeps], changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [controlProvider], template: "<label\n [class]=\"settings.labelClasses\"\n [for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<div [class]=\"settings.radioGroupContainerClasses\">\n @for (option of options(); track option.value) {\n <label [class]=\"settings.radioItemWrapperClasses\">\n <input\n [id]=\"control().name + '-' + option.value\"\n [name]=\"control().name\"\n [class]=\"settings.radioItemInputClasses\"\n type=\"radio\"\n [formControlName]=\"control().name\"\n [value]=\"option.value\"\n [attr.aria-checked]=\"formControl.value === option.value ? 'true' : 'false'\" />\n <span [class]=\"settings.radioItemLabelClasses\">{{ option.label }}</span>\n </label>\n }\n</div>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n
|
|
1073
|
+
args: [{ selector: 'radio-field', imports: [...controlDeps], changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [controlProvider], template: "<label\n [class]=\"settings.labelClasses\"\n [for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<div [class]=\"settings.radioGroupContainerClasses\">\n @for (option of options(); track option.value) {\n <label [class]=\"settings.radioItemWrapperClasses\">\n <input\n [id]=\"control().name + '-' + option.value\"\n [name]=\"control().name\"\n [class]=\"settings.radioItemInputClasses\"\n type=\"radio\"\n [formControlName]=\"control().name\"\n [value]=\"option.value\"\n [attr.aria-checked]=\"formControl.value === option.value ? 'true' : 'false'\" />\n <span [class]=\"settings.radioItemLabelClasses\">{{ option.label }}</span>\n </label>\n }\n</div>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [controlName]=\"control().name\" />\n</div>\n" }]
|
|
1013
1074
|
}] });
|
|
1014
1075
|
|
|
1015
1076
|
var radioField_component = /*#__PURE__*/Object.freeze({
|
|
@@ -1019,11 +1080,11 @@ var radioField_component = /*#__PURE__*/Object.freeze({
|
|
|
1019
1080
|
|
|
1020
1081
|
class SelectFieldComponent extends BaseInputComponent {
|
|
1021
1082
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: SelectFieldComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
1022
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: SelectFieldComponent, isStandalone: true, selector: "select-field", usesInheritance: true, ngImport: i0, template: "<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<select\n [class]=\"settings.selectClasses || settings.inputClasses\"\n [id]=\"control().name\"\n [name]=\"control().name\"\n [formControlName]=\"control().name\">\n @for (option of options(); track option.value) {\n <option\n [class]=\"settings.selectOptionClasses\"\n [value]=\"option.value\"\n [selected]=\"option.selected\"\n [disabled]=\"option.disabled\">\n {{ option.label }}\n </option>\n }\n</select>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n
|
|
1083
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: SelectFieldComponent, isStandalone: true, selector: "select-field", usesInheritance: true, ngImport: i0, template: "<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<select\n [class]=\"settings.selectClasses || settings.inputClasses\"\n [id]=\"control().name\"\n [name]=\"control().name\"\n [formControlName]=\"control().name\">\n @for (option of options(); track option.value) {\n <option\n [class]=\"settings.selectOptionClasses\"\n [value]=\"option.value\"\n [selected]=\"option.selected\"\n [disabled]=\"option.disabled\">\n {{ option.label }}\n </option>\n }\n</select>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [controlName]=\"control().name\" />\n</div>\n", dependencies: [{ kind: "ngmodule", type: i1.ReactiveFormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: HelpTextDirective, selector: "[helpMessage]", inputs: ["helpMessage"] }, { kind: "directive", type: ValidatorMessageDirective, selector: "[validatorMessage]", inputs: ["controlName"] }], viewProviders: [controlProvider], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1023
1084
|
}
|
|
1024
1085
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: SelectFieldComponent, decorators: [{
|
|
1025
1086
|
type: Component,
|
|
1026
|
-
args: [{ selector: 'select-field', imports: [...controlDeps], changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [controlProvider], template: "<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<select\n [class]=\"settings.selectClasses || settings.inputClasses\"\n [id]=\"control().name\"\n [name]=\"control().name\"\n [formControlName]=\"control().name\">\n @for (option of options(); track option.value) {\n <option\n [class]=\"settings.selectOptionClasses\"\n [value]=\"option.value\"\n [selected]=\"option.selected\"\n [disabled]=\"option.disabled\">\n {{ option.label }}\n </option>\n }\n</select>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n
|
|
1087
|
+
args: [{ selector: 'select-field', imports: [...controlDeps], changeDetection: ChangeDetectionStrategy.OnPush, viewProviders: [controlProvider], template: "<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<select\n [class]=\"settings.selectClasses || settings.inputClasses\"\n [id]=\"control().name\"\n [name]=\"control().name\"\n [formControlName]=\"control().name\">\n @for (option of options(); track option.value) {\n <option\n [class]=\"settings.selectOptionClasses\"\n [value]=\"option.value\"\n [selected]=\"option.selected\"\n [disabled]=\"option.disabled\">\n {{ option.label }}\n </option>\n }\n</select>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [controlName]=\"control().name\" />\n</div>\n" }]
|
|
1027
1088
|
}] });
|
|
1028
1089
|
|
|
1029
1090
|
var selectField_component = /*#__PURE__*/Object.freeze({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"superlikers-dynamic-forms.mjs","sources":["../../../projects/dynamic-forms/src/lib/interfaces/forms.interfaces.ts","../../../projects/dynamic-forms/src/lib/utils/control-data.token.ts","../../../projects/dynamic-forms/src/lib/utils/settings.token.ts","../../../projects/dynamic-forms/src/lib/utils/validation-error-messages.token.ts","../../../projects/dynamic-forms/src/lib/services/validations/validators.service.ts","../../../projects/dynamic-forms/src/lib/services/control-resolver/control-resolver.service.ts","../../../projects/dynamic-forms/src/lib/components/error-message/error-message.component.ts","../../../projects/dynamic-forms/src/lib/pipes/control-injector/control-injector.pipe.ts","../../../projects/dynamic-forms/src/lib/directives/activate-control/activate-control.directive.ts","../../../projects/dynamic-forms/src/lib/directives/help-text/help-text.directive.ts","../../../projects/dynamic-forms/src/lib/directives/validator-message/validator-message.directive.ts","../../../projects/dynamic-forms/src/lib/components/fields/fields.component.ts","../../../projects/dynamic-forms/src/lib/components/help-text/help-text.component.ts","../../../projects/dynamic-forms/src/lib/controls/base-input/base-input.component.ts","../../../projects/dynamic-forms/src/lib/controls/array-field/array-field.component.ts","../../../projects/dynamic-forms/src/lib/controls/array-field/array-field.component.html","../../../projects/dynamic-forms/src/lib/controls/autocomplete-field/autocomplete-field.component.ts","../../../projects/dynamic-forms/src/lib/controls/autocomplete-field/autocomplete-field.component.html","../../../projects/dynamic-forms/src/lib/controls/checkbox-field/checkbox-field.component.ts","../../../projects/dynamic-forms/src/lib/controls/checkbox-field/checkbox-field.component.html","../../../projects/dynamic-forms/src/lib/controls/checkbox-group-field/checkbox-group-field.component.ts","../../../projects/dynamic-forms/src/lib/controls/checkbox-group-field/checkbox-group-field.component.html","../../../projects/dynamic-forms/src/lib/controls/chips-list-field/chips-list-field.component.ts","../../../projects/dynamic-forms/src/lib/controls/chips-list-field/chips-list-field.component.html","../../../projects/dynamic-forms/src/lib/controls/group-field/group-field.component.ts","../../../projects/dynamic-forms/src/lib/controls/group-field/group-field.component.html","../../../projects/dynamic-forms/src/lib/controls/input-field/input-field.component.ts","../../../projects/dynamic-forms/src/lib/controls/input-field/input-field.component.html","../../../projects/dynamic-forms/src/lib/controls/multi-select-dropdown/multi-select-dropdown.component.ts","../../../projects/dynamic-forms/src/lib/controls/multi-select-dropdown/multi-select-dropdown.component.html","../../../projects/dynamic-forms/src/lib/controls/radio-field/radio-field.component.ts","../../../projects/dynamic-forms/src/lib/controls/radio-field/radio-field.component.html","../../../projects/dynamic-forms/src/lib/controls/select-field/select-field.component.ts","../../../projects/dynamic-forms/src/lib/controls/select-field/select-field.component.html","../../../projects/dynamic-forms/src/public-api.ts","../../../projects/dynamic-forms/src/superlikers-dynamic-forms.ts"],"sourcesContent":["import { AbstractControl, FormGroup, ValidationErrors, Validators } from '@angular/forms'\nimport { Observable } from 'rxjs'\n\nexport type ControlType = 'input' | 'group' | 'checkbox' | 'checkbox-group' | 'radio' | 'select' | 'array' | 'multi-select-dropdown' | 'chips-list' | 'autocomplete'\n\nexport type InputType = 'text' | 'email' | 'password' | 'number' | 'tel' | 'url' | 'date' | 'time' | 'datetime-local' | 'search'\n\ntype CustomValidator = (control: AbstractControl) => ValidationErrors | null\ntype ValidatorsKeys = keyof Omit<typeof Validators, 'prototype' | 'compose' | 'composeAsync'>\ntype ValidatorValue = boolean | number | string | RegExp\n\nexport type ControlValidators = Partial<Record<ValidatorsKeys, ValidatorValue>> & { customValidation?: CustomValidator | CustomValidator[] }\n\nexport type Visible = boolean | ((form: FormGroup) => boolean)\nexport type Options = Option[] | ((form: FormGroup) => Option[] | Promise<Option[]> | Observable<Option[]>)\nexport type Disabled = boolean | ((form: FormGroup) => boolean)\nexport type Items<T> = T[] | ((form: FormGroup) => T[] | Promise<T[]> | Observable<T[]>)\nexport type AutocompleteOptions<T> = (form: FormGroup, query: string) => T[] | Promise<T[]> | Observable<T[]>\n\n/**\n * Base interface for all form controls with common properties\n */\nexport interface BaseControl {\n name: string\n controlType: ControlType\n label?: string\n helpText?: string\n validators?: ControlValidators\n visible?: Visible\n disabled?: Disabled\n value?: unknown\n placeholder?: string\n options?: Options\n controls?: Control[]\n type?: InputType\n items?: Items<unknown>\n itemLabel?: string\n itemValue?: string\n multiple?: boolean\n autocompleteOptions?: AutocompleteOptions<unknown>\n resetOnChange?: string[]\n}\n\n/**\n * Input control configuration\n */\nexport interface InputControl extends BaseControl {\n controlType: 'input'\n type?: InputType\n value?: string | number\n placeholder?: string\n}\n\n/**\n * Checkbox control configuration\n */\nexport interface CheckboxControl extends BaseControl {\n controlType: 'checkbox'\n value?: boolean\n}\n\n/**\n * Radio control configuration\n */\nexport interface RadioControl extends BaseControl {\n controlType: 'radio'\n options: Options\n value?: string | number\n}\n\n/**\n * Select control configuration\n */\nexport interface SelectControl extends BaseControl {\n controlType: 'select'\n options: Options\n value?: string | number\n}\n\n/**\n * Checkbox group control configuration\n */\nexport interface CheckboxGroupControl extends BaseControl {\n controlType: 'checkbox-group'\n options: Options\n value?: (string | number)[]\n}\n\n/**\n * Group control configuration\n */\nexport interface GroupControl extends BaseControl {\n controlType: 'group'\n controls: Control[]\n}\n\n/**\n * Array control configuration\n */\nexport interface ArrayControl extends BaseControl {\n controlType: 'array'\n controls: Control[]\n value?: Record<string, unknown>[]\n}\n\n/**\n * Chips list control configuration\n */\nexport interface ChipsListControl extends BaseControl {\n controlType: 'chips-list'\n value?: string[]\n placeholder?: string\n}\n\n/**\n * Multi-select dropdown control configuration\n */\nexport interface MultiSelectDropdownControl<T = unknown> extends BaseControl {\n controlType: 'multi-select-dropdown'\n items: Items<T>\n itemLabel?: string\n itemValue?: string\n multiple?: boolean\n value?: unknown[]\n}\n\n/**\n * Autocomplete control configuration\n */\nexport interface AutocompleteControl<T = unknown> extends BaseControl {\n controlType: 'autocomplete'\n autocompleteOptions: AutocompleteOptions<T>\n itemLabel?: string\n itemValue?: string\n placeholder?: string\n resetOnChange?: string[]\n value?: unknown\n}\n\n/**\n * Union type for all control types\n */\nexport type Control = InputControl | CheckboxControl | RadioControl | SelectControl | CheckboxGroupControl | GroupControl | ArrayControl | ChipsListControl | MultiSelectDropdownControl | AutocompleteControl\n\n/**\n * Type guards for control types\n */\nexport function isInputControl(control: Control): control is InputControl {\n return control.controlType === 'input'\n}\n\nexport function isGroupControl(control: Control): control is GroupControl {\n return control.controlType === 'group'\n}\n\nexport function isArrayControl(control: Control): control is ArrayControl {\n return control.controlType === 'array'\n}\n\nexport function isMultiSelectControl(control: Control): control is MultiSelectDropdownControl {\n return control.controlType === 'multi-select-dropdown'\n}\n\nexport function isAutocompleteControl(control: Control): control is AutocompleteControl {\n return control.controlType === 'autocomplete'\n}\n\n/**\n * Represents an individual option available for selection in controls such as select, radio groups, or checkboxes.\n */\nexport interface Option {\n /**\n * The display text for the option.\n */\n label: string\n\n /**\n * The value associated with the option.\n */\n value: unknown\n\n /**\n * If set to true, this option will be selected by default.\n */\n selected?: boolean\n\n /**\n * If set to true, this option will be rendered as disabled.\n */\n disabled?: boolean\n}\n","import { InjectionToken, Signal } from '@angular/core'\n\nimport { Control } from '../interfaces'\n\nexport interface ControlData {\n control: Control\n initialValue?: unknown\n}\n\nexport const CONTROL_DATA = new InjectionToken<Signal<ControlData>>('CONTROL_DATA')\n","import { InjectionToken } from '@angular/core'\n\nimport { Settings } from '../interfaces'\n\nexport const DEFAULT_SETTINGS: Settings = {\n // general\n wrapperClasses: 'field-wrapper',\n labelClasses: 'field-label',\n errorClasses: 'field-error',\n helpTextClasses: 'field-help-text',\n inputClasses: 'field-input',\n validationFeedbackClasses: 'validation-feedback',\n // select\n selectClasses: 'field-select',\n selectOptionClasses: 'field-select-option',\n // checkbox\n checkboxWrapperClasses: 'checkbox-wrapper',\n checkboxInputClasses: 'checkbox-input',\n checkboxLabelTextClasses: 'checkbox-label',\n checkboxGroupContainerClasses: 'checkbox-group-container',\n checkboxGroupItemWrapperClasses: 'checkbox-group-item-wrapper',\n checkboxGroupItemInputClasses: 'checkbox-group-item-input',\n checkboxGroupItemLabelClasses: 'checkbox-group-item-label',\n // radio\n radioGroupContainerClasses: 'radio-group-container',\n radioItemWrapperClasses: 'radio-item-wrapper',\n radioItemInputClasses: 'radio-item-input',\n radioItemLabelClasses: 'radio-item-label',\n // group\n groupContainerClasses: 'group-container',\n groupLegendClasses: 'group-legend',\n legendClasses: 'legend',\n // array\n arrayItemContainerClasses: 'array-item-container',\n arrayControlRemoveButtonClasses: 'array-remove-button',\n arrayControlAddButtonClasses: 'array-add-button',\n arrayControlRemoveButtonLabel: 'Remove',\n arrayControlAddButtonLabel: 'Add',\n // multi select\n multiSelectControlRemoveButtonLabel: 'Remove',\n multiSelectEmptyText: 'Select options',\n multiSelectDisplayedOptionsClasses: 'multi-select-displayed-options',\n multiSelectDisplayedOptionClasses: 'multi-select-displayed-option',\n multiselectDropdownClasses: 'multi-select-dropdown',\n multiselectDropdownItemClasses: 'multi-select-dropdown-item',\n chipslistRemoveButtonLabel: 'Remove',\n chipslistAddButtonLabel: 'Add',\n chipslistInputClasses: 'chips-list-input',\n chipslistContainerClasses: 'chips-list-container',\n chipslistChipClasses: 'chips-list-chip',\n chipslistAddWrapperClasses: 'chips-list-add-wrapper',\n // autocomplete\n autocompleteInputClasses: 'autocomplete-input',\n autocompleteDropdownClasses: 'autocomplete-dropdown',\n autocompleteDropdownItemClasses: 'autocomplete-dropdown-item',\n autocompleteLoadingText: 'Loading...',\n autocompleteLoadingWrapperClasses: 'autocomplete-loading-wrapper',\n autocompleteLoadingIconClasses: 'autocomplete-loading-icon',\n autocompleteClearWrapperClasses: 'autocomplete-clear-wrapper',\n autocompleteClearIconClasses: 'autocomplete-clear-icon',\n autocompleteClearText: 'Clear',\n autocompleteClearTextClasses: 'autocomplete-clear-text'\n}\n\nexport const SETTINGS = new InjectionToken<Settings>('Settings', {\n providedIn: 'root',\n factory: () => DEFAULT_SETTINGS\n})\n","import { InjectionToken } from '@angular/core'\n\ntype ValidationErrorArgs = Record<string, unknown> | undefined\n\nexport const ERROR_MESSAGES: Record<string, (args?: ValidationErrorArgs) => string> = {\n required: () => `This field is required`,\n requiredTrue: () => `This field is required`,\n pattern: () => `Does not match the pattern`,\n email: () => `Must be a valid email`,\n minlength: args => `Length must be at least ${(args as Record<string, unknown>)?.['requiredLength']} characters`,\n maxlength: args => `Length must not exceed ${(args as Record<string, unknown>)?.['requiredLength']} characters. Currently, it has ${(args as Record<string, unknown>)?.['actualLength']} characters.`,\n min: args => `The value must be at least ${(args as Record<string, unknown>)?.['min']}`,\n max: args => `The value must not exceed ${(args as Record<string, unknown>)?.['max']}`,\n custom: error => String(error)\n}\n\nexport const SPANISH_ERROR_MESSAGES: Record<string, (args?: ValidationErrorArgs) => string> = {\n required: () => `Este campo es obligatorio`,\n requiredTrue: () => `Este campo es obligatorio`,\n pattern: () => `No coincide con el patrón`,\n email: () => `Debe ser un correo electrónico válido`,\n minlength: args => `La longitud debe ser al menos ${(args as Record<string, unknown>)?.['requiredLength']} caracteres`,\n maxlength: args => `La longitud no debe exceder los ${(args as Record<string, unknown>)?.['requiredLength']} caracteres. Actualmente tiene ${(args as Record<string, unknown>)?.['actualLength']} caracteres.`,\n min: args => `El valor debe ser al menos ${(args as Record<string, unknown>)?.['min']}`,\n max: args => `El valor no debe exceder ${(args as Record<string, unknown>)?.['max']}`,\n custom: error => String(error)\n}\n\nexport const VALIDATION_ERROR_MESSAGES = new InjectionToken('Validation Messages', {\n providedIn: 'root',\n factory: () => ERROR_MESSAGES\n})\n","import { Injectable } from '@angular/core'\nimport { Control, ControlValidators } from '../../interfaces'\nimport { ValidatorFn, Validators } from '@angular/forms'\n\ntype ValidatorStrategy = (value: unknown) => ValidatorFn[]\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ValidatorsService {\n private readonly validatorStrategies: Partial<Record<keyof ControlValidators, ValidatorStrategy>> = {\n customValidation: (value: unknown): ValidatorFn[] => {\n if (typeof value === 'function') {\n return [value as ValidatorFn]\n }\n if (Array.isArray(value)) {\n return value.filter((fn): fn is ValidatorFn => typeof fn === 'function')\n }\n return []\n },\n\n pattern: (value: unknown): ValidatorFn[] => {\n if (typeof value === 'string' || value instanceof RegExp) {\n return [Validators.pattern(value)]\n }\n return []\n },\n\n max: (value: unknown): ValidatorFn[] => {\n return typeof value === 'number' ? [Validators.max(value)] : []\n },\n\n min: (value: unknown): ValidatorFn[] => {\n return typeof value === 'number' ? [Validators.min(value)] : []\n },\n\n maxLength: (value: unknown): ValidatorFn[] => {\n return typeof value === 'number' ? [Validators.maxLength(value)] : []\n },\n\n minLength: (value: unknown): ValidatorFn[] => {\n return typeof value === 'number' ? [Validators.minLength(value)] : []\n },\n\n requiredTrue: (): ValidatorFn[] => {\n return [Validators.requiredTrue]\n },\n\n email: (): ValidatorFn[] => {\n return [Validators.email]\n },\n\n required: (): ValidatorFn[] => {\n return [Validators.required]\n }\n }\n\n resolveValidators({ validators = {} }: Control): ValidatorFn | null {\n const validatorFns: ValidatorFn[] = []\n\n for (const key in validators) {\n if (Object.prototype.hasOwnProperty.call(validators, key)) {\n const typedKey = key as keyof ControlValidators\n const strategy = this.validatorStrategies[typedKey]\n\n if (strategy) {\n const value = validators[typedKey]\n const fns = strategy(value)\n validatorFns.push(...fns)\n }\n }\n }\n\n return validatorFns.length > 0 ? Validators.compose(validatorFns) : null\n }\n}\n","import { Injectable, Type } from '@angular/core'\nimport { from, of, tap } from 'rxjs'\n\nimport { Control } from '../../interfaces'\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ControlResolver {\n private lazyControlComponents = {\n input: () => import('../../controls/input-field/input-field.component').then(c => c.InputFieldComponent),\n radio: () => import('../../controls/radio-field/radio-field.component').then(c => c.RadioFieldComponent),\n checkbox: () => import('../../controls/checkbox-field/checkbox-field.component').then(c => c.CheckboxFieldComponent),\n select: () => import('../../controls/select-field/select-field.component').then(c => c.SelectFieldComponent),\n group: () => import('../../controls/group-field/group-field.component').then(c => c.GroupFieldComponent),\n array: () => import('../../controls/array-field/array-field.component').then(c => c.ArrayFieldComponent),\n autocomplete: () => import('../../controls/autocomplete-field/autocomplete-field.component').then(c => c.AutocompleteFieldComponent),\n 'checkbox-group': () => import('../../controls/checkbox-group-field/checkbox-group-field.component').then(c => c.CheckboxGroupFieldComponent),\n 'multi-select-dropdown': () => import('../../controls/multi-select-dropdown/multi-select-dropdown.component').then(c => c.MultiSelectDropdownComponent),\n 'chips-list': () => import('../../controls/chips-list-field/chips-list-field.component').then(c => c.ChipsListFieldComponent)\n }\n\n private loadedControlComponents = new Map<string, Type<unknown>>()\n\n resolve(control: Control) {\n const controlType = control.controlType\n\n const loadedComponent = this.loadedControlComponents.get(controlType)\n if (loadedComponent) {\n return of(loadedComponent)\n }\n\n return from(this.lazyControlComponents[controlType]()).pipe(tap(component => this.loadedControlComponents.set(controlType, component)))\n }\n}\n","import { KeyValue, KeyValuePipe } from '@angular/common'\nimport { ChangeDetectionStrategy, Component, inject, input } from '@angular/core'\nimport { ValidationErrors } from '@angular/forms'\n\nimport { VALIDATION_ERROR_MESSAGES } from '../../utils'\nimport { SETTINGS } from '../../utils'\n\n@Component({\n selector: 'error-message',\n imports: [KeyValuePipe],\n template: `\n @for (error of errors() | keyvalue; track error.key) {\n <p [class]=\"settings.errorClasses\">{{ getError(error) }}</p>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ErrorMessageComponent {\n settings = inject(SETTINGS)\n errorsMap = inject(VALIDATION_ERROR_MESSAGES)\n\n errors = input<ValidationErrors>()\n\n getError(error: KeyValue<string, unknown>) {\n if (!this.errorsMap[error.key]) {\n return\n }\n\n const message = this.errorsMap[error.key](error.value as Record<string, unknown>)\n return message\n }\n}\n","import { inject, Injector, Pipe, PipeTransform, signal } from '@angular/core'\n\nimport { Control } from '../../interfaces'\nimport { CONTROL_DATA, ControlData } from '../../utils'\n\n@Pipe({\n name: 'controlInjector'\n})\nexport class ControlInjector implements PipeTransform {\n injector = inject(Injector)\n\n transform(control: Control, initialValues: Record<string, unknown> | null | undefined): Injector {\n const controlPatchValue = initialValues?.[control.name]\n const data: ControlData = { control, initialValue: controlPatchValue }\n\n return Injector.create({\n parent: this.injector,\n providers: [\n {\n provide: CONTROL_DATA,\n useValue: signal(data)\n }\n ]\n })\n }\n}\n","import { computed, Directive, effect, inject, input, TemplateRef, ViewContainerRef } from '@angular/core'\nimport { toSignal } from '@angular/core/rxjs-interop'\nimport { FormGroupDirective } from '@angular/forms'\nimport { startWith } from 'rxjs'\n\nimport { Control } from '../../interfaces'\n\n@Directive({\n selector: '[activateControl]'\n})\nexport class ActivateControlDirective {\n activateControl = input<Control>()\n\n private vcr = inject(ViewContainerRef)\n private templateRef = inject(TemplateRef)\n private rootFormGroup = inject(FormGroupDirective).form\n\n private formValue = toSignal(this.rootFormGroup.valueChanges.pipe(startWith(this.rootFormGroup.value)), {\n initialValue: this.rootFormGroup.value\n })\n private isVisible = computed(() => {\n const _ = this.formValue()\n\n const visible = this.activateControl()?.visible\n\n if (visible === undefined) {\n return true\n }\n\n if (typeof visible === 'function') {\n return visible(this.rootFormGroup)\n }\n\n return visible\n })\n\n constructor() {\n effect(() => {\n const visible = this.isVisible()\n const controlName = this.activateControl()?.name\n\n if (visible) {\n if (this.vcr.length === 0) {\n this.vcr.createEmbeddedView(this.templateRef)\n }\n } else {\n if (this.vcr.length > 0) {\n this.vcr.clear()\n\n if (controlName && this.rootFormGroup.contains(controlName)) {\n this.rootFormGroup.removeControl(controlName)\n }\n }\n }\n })\n }\n}\n","import { ComponentRef, Directive, ElementRef, inject, input, OnInit, ViewContainerRef } from '@angular/core'\nimport { HelpTextComponent } from '../../components'\n\n@Directive({\n selector: '[helpMessage]'\n})\nexport class HelpTextDirective implements OnInit {\n helpMessage = input<string>()\n\n elementRef = inject(ElementRef)\n vcr = inject(ViewContainerRef)\n\n componentRef: ComponentRef<HelpTextComponent> | null = null\n\n ngOnInit(): void {\n if (!this.helpMessage()) {\n return\n }\n\n this.componentRef = this.vcr.createComponent(HelpTextComponent)\n this.componentRef.setInput('message', this.helpMessage())\n }\n}\n","import { ComponentRef, Directive, ElementRef, inject, OnDestroy, OnInit, ViewContainerRef } from '@angular/core'\nimport { ControlContainer, FormGroupDirective, NgControl, NgForm } from '@angular/forms'\nimport { EMPTY, fromEvent, iif, merge, startWith, Subscription } from 'rxjs'\n\nimport { ErrorMessageComponent } from '../../components'\n\n@Directive({\n selector: '[validatorMessage]'\n})\nexport class ValidatorMessageDirective implements OnInit, OnDestroy {\n ngControl = inject(NgControl, { self: true })\n elementRef = inject(ElementRef)\n vcr = inject(ViewContainerRef)\n parentContainer = inject(ControlContainer, { optional: true })\n\n private componentRef: ComponentRef<ErrorMessageComponent> | null = null\n\n get form() {\n return this.parentContainer?.formDirective as NgForm | FormGroupDirective | null\n }\n\n controlSubscription!: Subscription\n\n ngOnInit() {\n const control = this.ngControl.control\n if (!control) {\n return\n }\n\n this.controlSubscription = merge(\n control.statusChanges,\n fromEvent(this.elementRef.nativeElement, 'blur'),\n iif(() => !!this.form, this.form!.ngSubmit, EMPTY)\n )\n .pipe(startWith(control.status))\n .subscribe(() => {\n if (control.errors && (control.touched || this.form?.submitted)) {\n if (!this.componentRef) {\n this.componentRef = this.vcr.createComponent(ErrorMessageComponent)\n }\n\n this.componentRef.setInput('errors', control.errors)\n } else {\n this.componentRef?.destroy()\n this.componentRef = null\n }\n })\n }\n\n ngOnDestroy() {\n this.controlSubscription.unsubscribe()\n }\n}\n","import { ChangeDetectionStrategy, Component, inject, input } from '@angular/core'\nimport { ControlContainer, FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms'\nimport { AsyncPipe, NgComponentOutlet } from '@angular/common'\n\nimport { ControlInjector } from '../../pipes'\nimport { Control } from '../../interfaces'\nimport { ControlResolver } from '../../services'\nimport { ActivateControlDirective } from '../../directives'\n\n@Component({\n selector: 'fields',\n imports: [ReactiveFormsModule, NgComponentOutlet, ControlInjector, AsyncPipe, ActivateControlDirective],\n template: `\n @for (control of controls(); track control.name) {\n <ng-container\n *activateControl=\"control\"\n [ngComponentOutlet]=\"controlResolver.resolve(control) | async\"\n [ngComponentOutletInjector]=\"control | controlInjector: data()\" />\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FieldsComponent {\n controls = input.required<Control[]>()\n data = input<Record<string, unknown> | null>()\n\n fb = inject(FormBuilder)\n controlResolver = inject(ControlResolver)\n\n controlContainer = inject(ControlContainer)\n\n get form() {\n return this.controlContainer.control as FormGroup\n }\n}\n","import { ChangeDetectionStrategy, Component, inject, input } from '@angular/core'\nimport { SETTINGS } from '../../utils'\n\n@Component({\n selector: 'help-text',\n template: `<p\n [class]=\"settings.helpTextClasses\"\n [innerHTML]=\"message()\"></p>`,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class HelpTextComponent {\n settings = inject(SETTINGS)\n\n message = input<string>()\n}\n","import { computed, Directive, effect, inject, OnInit, signal, StaticProvider } from '@angular/core'\nimport { toSignal } from '@angular/core/rxjs-interop'\nimport { AbstractControl, ControlContainer, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'\nimport { NgComponentOutlet } from '@angular/common'\nimport { startWith } from 'rxjs'\n\nimport { CONTROL_DATA, SETTINGS } from '../../utils'\nimport { ValidatorsService } from '../../services'\nimport { ValidatorMessageDirective } from '../../directives'\nimport { ControlInjector } from '../../pipes'\nimport { HelpTextDirective, ActivateControlDirective } from '../../directives'\n\nexport const controlProvider: StaticProvider = {\n provide: ControlContainer,\n useFactory: () => inject(ControlContainer, { skipSelf: true })\n}\n\nexport const controlDeps = [ReactiveFormsModule, HelpTextDirective, ValidatorMessageDirective, NgComponentOutlet, ControlInjector, ActivateControlDirective]\n\n@Directive({\n host: {\n '[class]': 'hostClass()'\n }\n})\nexport class BaseInputComponent implements OnInit {\n settings = inject(SETTINGS)\n\n protected hostClass = signal('')\n\n // Injections\n protected controlData = inject(CONTROL_DATA)\n protected validatorsService = inject(ValidatorsService)\n protected controlContainer = inject(ControlContainer)\n\n // Computed signals\n protected control = computed(() => this.controlData().control)\n protected value = computed(() => this.controlData().initialValue ?? this.control().value)\n\n // Form control\n protected validatorFn = this.validatorsService.resolveValidators(this.control())\n formControl: AbstractControl = new FormControl(this.value(), this.validatorFn)\n parentForm = this.controlContainer.control as FormGroup\n\n protected formValue = toSignal(this.parentForm.valueChanges.pipe(startWith(this.parentForm.value)), {\n initialValue: this.parentForm.value\n })\n\n protected options = computed(() => {\n const _ = this.formValue()\n\n const optionsFn = this.control().options\n\n if (!optionsFn) {\n return []\n }\n\n if (Array.isArray(optionsFn)) {\n return optionsFn\n }\n\n const result = optionsFn(this.parentForm)\n\n if (Array.isArray(result)) {\n return result\n }\n\n return []\n })\n\n protected isDisabled = computed(() => {\n const _ = this.formValue()\n\n const control = this.control()\n\n if (control.disabled === undefined) {\n return false\n }\n\n if (typeof control.disabled === 'boolean') {\n return control.disabled\n }\n\n if (typeof control.disabled === 'function') {\n return control.disabled(this.parentForm)\n }\n\n return false\n })\n\n constructor() {\n effect(() => {\n const disabled = this.isDisabled()\n\n if (disabled && !this.formControl.disabled) {\n this.formControl.disable({ emitEvent: false })\n } else if (!disabled && this.formControl.disabled) {\n this.formControl.enable({ emitEvent: false })\n }\n })\n }\n\n ngOnInit(): void {\n this.initialize()\n }\n\n protected initialize() {\n const control = this.control()\n\n const classes = this.settings.wrapperClasses ?? `field wrapper-${control.name}`\n\n this.hostClass.set(classes)\n\n // Verificar si debe estar disabled desde el inicio\n if (this.isDisabled()) {\n this.formControl.disable({ emitEvent: false })\n }\n\n this.parentForm.addControl(control.name, this.formControl)\n }\n\n protected destroy() {\n const control = this.control()\n\n if (this.parentForm.contains(control.name)) {\n this.parentForm.removeControl(control.name)\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, OnInit } from '@angular/core'\nimport { FormArray, FormGroup, NonNullableFormBuilder } from '@angular/forms'\nimport { AsyncPipe } from '@angular/common'\n\nimport { BaseInputComponent, controlDeps, controlProvider } from '../base-input/base-input.component'\nimport { isArrayControl } from '../../interfaces'\nimport { ControlResolver } from '../../services'\n\n@Component({\n selector: 'array-field',\n imports: [...controlDeps, AsyncPipe],\n templateUrl: './array-field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [controlProvider]\n})\nexport class ArrayFieldComponent extends BaseInputComponent implements OnInit {\n controlResolver = inject(ControlResolver)\n fb = inject(NonNullableFormBuilder)\n\n override formControl = new FormArray<FormGroup>([], this.validatorFn)\n controls = computed(() => {\n const ctrl = this.control()\n return isArrayControl(ctrl) ? ctrl.controls : []\n })\n\n override ngOnInit(): void {\n this.initialize()\n\n const val = this.value()\n if (Array.isArray(val)) {\n val.forEach(() => {\n const group = this.fb.group({})\n this.formControl.push(group)\n })\n }\n }\n\n getControlValue(index: number) {\n const val = this.value()\n if (Array.isArray(val)) {\n return val[index] ?? null\n }\n return null\n }\n\n removeItem(i: number) {\n if (this.isDisabled()) {\n return\n }\n this.formControl.removeAt(i)\n }\n\n addItem() {\n if (this.isDisabled()) {\n return\n }\n\n const group = this.fb.group({})\n this.formControl.push(group)\n }\n}\n","<fieldset [formArrayName]=\"control().name\">\n @if (control().label) {\n <legend [class]=\"settings.legendClasses\">{{ control().label }}</legend>\n }\n\n @for (group of formControl.controls; track group; let i = $index) {\n <div\n [formGroupName]=\"i\"\n [class]=\"settings.arrayItemContainerClasses\">\n @for (ctrl of control().controls; track ctrl.name) {\n <ng-container\n *activateControl=\"ctrl\"\n [ngComponentOutlet]=\"controlResolver.resolve(ctrl) | async\"\n [ngComponentOutletInjector]=\"ctrl | controlInjector: getControlValue(i)\" />\n }\n\n <button\n [class]=\"settings.arrayControlRemoveButtonClasses\"\n role=\"button\"\n tabindex=\"0\"\n type=\"button\"\n (click)=\"removeItem(i)\"\n (keydown.enter)=\"removeItem(i)\">\n @if (settings.arrayControlRemoveButtonIcon) {\n <div [class]=\"settings.arrayControlRemoveButtonIconClasses\">\n <ng-container *ngComponentOutlet=\"settings.arrayControlRemoveButtonIcon\" />\n </div>\n }\n @if (settings.arrayControlRemoveButtonLabel) {\n <span>{{ settings.arrayControlRemoveButtonLabel }}</span>\n }\n </button>\n </div>\n }\n\n <button\n [class]=\"settings.arrayControlAddButtonClasses\"\n role=\"button\"\n tabindex=\"0\"\n type=\"button\"\n (click)=\"addItem()\"\n (keydown.enter)=\"addItem()\">\n @if (settings.arrayControlAddButtonIcon) {\n <div [class]=\"settings.arrayControlAddButtonIconClasses\">\n <ng-container *ngComponentOutlet=\"settings.arrayControlAddButtonIcon\" />\n </div>\n }\n @if (settings.arrayControlAddButtonLabel) {\n <span>{{ settings.arrayControlAddButtonLabel }}</span>\n }\n </button>\n</fieldset>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container [helpMessage]=\"control().helpText\" />\n</div>\n","// autocomplete-field.component.ts\nimport { ChangeDetectionStrategy, Component, effect, OnDestroy, OnInit, signal } from '@angular/core'\nimport { AsyncPipe } from '@angular/common'\nimport { FormControl } from '@angular/forms'\nimport { OverlayModule } from '@angular/cdk/overlay'\n\nimport { from, Observable, of, Subscription } from 'rxjs'\nimport { debounceTime, distinctUntilChanged, map, startWith, switchMap } from 'rxjs/operators'\n\nimport { BaseInputComponent, controlDeps, controlProvider } from '../base-input/base-input.component'\nimport { AutocompleteControl } from '../../interfaces'\n\n@Component({\n selector: 'autocomplete-field',\n imports: [...controlDeps, OverlayModule, AsyncPipe],\n templateUrl: './autocomplete-field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [controlProvider]\n})\nexport class AutocompleteFieldComponent<T> extends BaseInputComponent implements OnInit, OnDestroy {\n // A separate control for the query input.\n queryControl = new FormControl<string>('')\n\n isOpen = signal(false)\n loading = signal(false)\n private dependencySubscriptions: Subscription[] = []\n\n // suggestions$ emits an array of options based on the current query.\n suggestions$: Observable<T[]> = this.queryControl.valueChanges.pipe(\n startWith(this.queryControl.value),\n debounceTime(300),\n map(query => query || ''),\n distinctUntilChanged(),\n switchMap((query: string) => {\n const ctrl = this.control()\n if (!ctrl.autocompleteOptions) {\n this.loading.set(false)\n return of([]) as Observable<T[]>\n }\n\n // Set loading to true before fetching\n this.loading.set(true)\n\n const result = ctrl.autocompleteOptions(this.parentForm, query)\n\n let resultObservable: Observable<T[]>\n\n // Handle Promise\n if (result instanceof Promise) {\n resultObservable = from(result) as Observable<T[]>\n }\n // Handle Observable\n else if (result && typeof result === 'object' && 'subscribe' in result) {\n resultObservable = result as Observable<T[]>\n }\n // Handle Array\n else if (Array.isArray(result)) {\n resultObservable = of(result) as Observable<T[]>\n } else {\n resultObservable = of([]) as Observable<T[]>\n }\n\n // Set loading to false after results arrive\n return resultObservable.pipe(\n map(results => {\n this.loading.set(false)\n return results\n })\n )\n })\n )\n\n displayWithFn(item: T): string {\n const control = this.control() as AutocompleteControl<T>\n if (control.itemLabel) {\n const label = (item as Record<string, unknown>)[control.itemLabel]\n return label !== null && label !== undefined ? String(label) : ''\n } else {\n return String(item)\n }\n }\n\n selectOption(option: T): void {\n const ctrl = this.control() as AutocompleteControl<T>\n const valueToStore = ctrl.itemValue ? (option as Record<string, unknown>)[ctrl.itemValue] : option\n\n this.formControl.setValue(valueToStore)\n this.queryControl.setValue(this.displayWithFn(option))\n\n this.close()\n }\n\n isSelected(option: T): boolean {\n const ctrl = this.control() as AutocompleteControl<T>\n const value = this.formControl.value\n\n const optionValue = ctrl.itemValue ? (option as Record<string, unknown>)[ctrl.itemValue] : option\n\n if (Array.isArray(value)) {\n return value.includes(optionValue)\n }\n return value === optionValue\n }\n\n open(): void {\n this.isOpen.set(true)\n }\n\n close(): void {\n this.isOpen.set(false)\n }\n\n trackByFn(index: number, item: T): unknown {\n const ctrl = this.control() as AutocompleteControl<T>\n return ctrl.itemValue ? (item as Record<string, unknown>)[ctrl.itemValue] : index\n }\n\n clear() {\n this.queryControl.reset()\n this.formControl.reset()\n this.close()\n }\n\n constructor() {\n super()\n\n effect(() => {\n const disabled = this.isDisabled()\n\n if (disabled && !this.queryControl.disabled) {\n this.queryControl.disable({ emitEvent: false })\n } else if (!disabled && this.queryControl.disabled) {\n this.queryControl.enable({ emitEvent: false })\n }\n })\n }\n\n override ngOnInit(): void {\n this.initialize()\n\n // If the control configuration has a 'resetOnChange' array, subscribe to each dependency.\n const ctrl = this.control() as AutocompleteControl<T>\n if (ctrl.resetOnChange && Array.isArray(ctrl.resetOnChange)) {\n ctrl.resetOnChange.forEach((depName: string) => {\n const depControl = this.parentForm.get(depName)\n if (depControl) {\n const sub = depControl.valueChanges.pipe(distinctUntilChanged()).subscribe(() => {\n this.formControl.reset()\n this.queryControl.reset()\n })\n this.dependencySubscriptions.push(sub)\n }\n })\n }\n }\n\n ngOnDestroy(): void {\n this.destroy()\n\n this.dependencySubscriptions.forEach(sub => sub.unsubscribe())\n }\n}\n","<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<div class=\"relative\">\n <input\n #origin\n [id]=\"control().name\"\n [name]=\"control().name\"\n [class]=\"settings.autocompleteInputClasses\"\n [placeholder]=\"control().placeholder ?? ''\"\n [formControl]=\"queryControl\"\n (focus)=\"open()\"\n autocomplete=\"off\"\n [attr.aria-expanded]=\"isOpen() ? 'true' : 'false'\"\n aria-controls=\"autocomplete-list\" />\n\n @if (loading()) {\n @if (settings.autocompleteLoadingIcon) {\n <div [class]=\"settings.autocompleteLoadingWrapperClasses\">\n <div [class]=\"settings.autocompleteLoadingIconClasses\">\n <ng-container [ngComponentOutlet]=\"settings.autocompleteLoadingIcon\" />\n </div>\n </div>\n } @else {\n <span [class]=\"settings.autocompleteLoadingTextClasses\">{{ settings.autocompleteLoadingText }}</span>\n }\n } @else {\n @if (settings.autocompleteClearIcon && !!queryControl.value) {\n <div\n [class]=\"settings.autocompleteClearWrapperClasses\"\n (click)=\"clear()\">\n <div [class]=\"settings.autocompleteClearIconClasses\">\n <ng-container [ngComponentOutlet]=\"settings.autocompleteClearIcon\" />\n </div>\n </div>\n } @else if (settings.autocompleteClearText && !!queryControl.value) {\n <span\n (click)=\"clear()\"\n [class]=\"settings.autocompleteClearTextClasses\">\n {{ settings.autocompleteClearText }}\n </span>\n }\n }\n</div>\n\n<!-- CDK Connected Overlay for suggestions dropdown -->\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\">\n <div\n [class]=\"settings.autocompleteDropdownClasses\"\n role=\"listbox\"\n aria-live=\"assertive\"\n id=\"autocomplete-list\">\n @for (option of suggestions$ | async; track trackByFn($index, option)) {\n <div\n [class]=\"[settings.autocompleteDropdownItemClasses, isSelected(option) ? settings.autocompleteDropdownItemSelectedClasses : '']\"\n tabindex=\"0\"\n (click)=\"selectOption(option)\"\n (keyup)=\"selectOption(option)\"\n role=\"option\"\n [attr.aria-selected]=\"isSelected(option)\">\n {{ displayWithFn(option) }}\n </div>\n }\n </div>\n</ng-template>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n ngDefaultControl\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [formControlName]=\"control().name\" />\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core'\nimport { BaseInputComponent, controlDeps, controlProvider } from '../base-input/base-input.component'\n\n@Component({\n selector: 'checkbox-field',\n imports: [...controlDeps],\n templateUrl: './checkbox-field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [controlProvider]\n})\nexport class CheckboxFieldComponent extends BaseInputComponent {}\n","<label [class]=\"settings.checkboxWrapperClasses\">\n <input\n [id]=\"control().name\"\n [name]=\"control().name\"\n [class]=\"settings.checkboxInputClasses\"\n type=\"checkbox\"\n [attr.aria-checked]=\"formControl.value ? 'true' : 'false'\"\n [formControlName]=\"control().name\" />\n <span\n [class]=\"settings.checkboxLabelTextClasses\"\n [innerHTML]=\"control().label\"></span>\n</label>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n ngDefaultControl\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [formControlName]=\"control().name\" />\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core'\nimport { FormControl } from '@angular/forms'\nimport { BaseInputComponent, controlDeps, controlProvider } from '../base-input/base-input.component'\n\n@Component({\n selector: 'checkbox-group-field',\n imports: [...controlDeps],\n templateUrl: './checkbox-group-field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [controlProvider]\n})\nexport class CheckboxGroupFieldComponent extends BaseInputComponent {\n override formControl = new FormControl(Array.isArray(this.value()) ? this.value() : [], this.validatorFn)\n\n isSelected(value: unknown) {\n const selectedValues = this.formControl.value as unknown[]\n return selectedValues.includes(value)\n }\n\n onCheckboxChange(event: Event, value: unknown) {\n const target = event.target as HTMLInputElement\n const isChecked = target.checked\n\n let selectedValues = this.formControl.value as unknown[]\n\n if (isChecked && !this.isSelected(value)) {\n selectedValues.push(value)\n } else {\n selectedValues = selectedValues.filter(item => item !== value)\n }\n\n this.formControl.setValue(selectedValues)\n }\n}\n","<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<div [class]=\"settings.checkboxGroupContainerClasses\">\n @for (option of options(); track option.value) {\n <label [class]=\"settings.checkboxGroupItemWrapperClasses\">\n <input\n [id]=\"control().name + '-' + option.value\"\n [name]=\"control().name + '-' + option.value\"\n [class]=\"settings.checkboxGroupItemInputClasses\"\n type=\"checkbox\"\n [checked]=\"isSelected(option.value)\"\n [disabled]=\"option.disabled\"\n (change)=\"onCheckboxChange($event, option.value)\" />\n <span [class]=\"settings.checkboxGroupItemLabelClasses\">{{ option.label }}</span>\n </label>\n }\n</div>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n ngDefaultControl\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [formControlName]=\"control().name\" />\n</div>\n","import { ChangeDetectionStrategy, Component, signal } from '@angular/core'\nimport { FormControl } from '@angular/forms'\n\nimport { BaseInputComponent, controlDeps } from '../base-input/base-input.component'\n\n@Component({\n selector: 'chips-list-field',\n imports: [...controlDeps],\n templateUrl: './chips-list-field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ChipsListFieldComponent extends BaseInputComponent {\n override formControl = new FormControl<string[]>(Array.isArray(this.value()) ? (this.value() as string[]) : [], this.validatorFn)\n\n inputValue = signal('')\n\n addChip() {\n const trimmed = this.inputValue().trim()\n if (!trimmed) {\n return\n }\n\n const currentChips = this.formControl.value || []\n this.formControl.setValue([...currentChips, trimmed])\n\n this.inputValue.set('')\n }\n\n removeChip(chipToRemove: string) {\n const currentChips = this.formControl.value || []\n const updatedChips = currentChips.filter(chip => chip !== chipToRemove)\n this.formControl.setValue(updatedChips)\n }\n}\n","<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<div [class]=\"settings.chipslistContainerClasses\">\n @for (chip of formControl.value; track $index) {\n <div [class]=\"settings.chipslistChipClasses\">\n {{ chip }}\n <button\n type=\"button\"\n [class]=\"settings.chipslistRemoveButtonClasses\"\n (click)=\"removeChip(chip)\">\n @if (settings.chipslistRemoveButtonIcon) {\n <div [class]=\"settings.chipslistRemoveButtonIconClasses\">\n <ng-container [ngComponentOutlet]=\"settings.chipslistRemoveButtonIcon\" />\n </div>\n }\n @if (settings.chipslistRemoveButtonLabel) {\n <span [class]=\"settings.chipslistRemoveButtonLabelClasses\">\n {{ settings.chipslistRemoveButtonLabel }}\n </span>\n }\n </button>\n </div>\n }\n</div>\n\n<div>\n <input\n [id]=\"control().name\"\n [class]=\"settings.chipslistInputClasses\"\n [name]=\"control().name\"\n [placeholder]=\"control().placeholder ?? ''\"\n [value]=\"inputValue()\"\n (input)=\"inputValue.set($any($event.target).value)\"\n (keydown.enter)=\"$event.preventDefault(); addChip()\"\n aria-label=\"Add new chip\" />\n <button\n type=\"button\"\n [class]=\"settings.chipslistAddButtonClasses\"\n aria-label=\"Add chip\"\n (click)=\"addChip()\">\n @if (settings.chipslistAddButtonIcon) {\n <div [class]=\"settings.chipslistAddButtonIconClasses\">\n <ng-container [ngComponentOutlet]=\"settings.chipslistAddButtonIcon\" />\n </div>\n }\n @if (settings.chipslistAddButtonLabel) {\n <span [class]=\"settings.chipslistAddButtonLabelClasses\">\n {{ settings.chipslistAddButtonLabel }}\n </span>\n }\n </button>\n</div>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n ngDefaultControl\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [formControl]=\"formControl\" />\n</div>\n","import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core'\nimport { AsyncPipe } from '@angular/common'\nimport { NonNullableFormBuilder } from '@angular/forms'\n\nimport { BaseInputComponent, controlDeps, controlProvider } from '../base-input/base-input.component'\nimport { ControlResolver } from '../../services'\nimport { isGroupControl } from '../../interfaces'\n\n@Component({\n selector: 'group-field',\n imports: [...controlDeps, AsyncPipe],\n templateUrl: './group-field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [controlProvider]\n})\nexport class GroupFieldComponent extends BaseInputComponent {\n fb = inject(NonNullableFormBuilder)\n controlResolver = inject(ControlResolver)\n\n override formControl = this.fb.group({})\n controls = computed(() => {\n const ctrl = this.control()\n return isGroupControl(ctrl) ? ctrl.controls : []\n })\n\n groupValue = computed(() => this.value() as Record<string, unknown> | null)\n}\n","<fieldset\n [class]=\"settings.groupContainerClasses\"\n [formGroupName]=\"control().name\">\n @if (control().label) {\n <legend [class]=\"settings.groupLegendClasses\">{{ control().label }}</legend>\n }\n @for (control of controls(); track control.name) {\n <ng-container\n *activateControl=\"control\"\n [ngComponentOutlet]=\"controlResolver.resolve(control) | async\"\n [ngComponentOutletInjector]=\"control | controlInjector: groupValue()\" />\n }\n</fieldset>\n","import { ChangeDetectionStrategy, Component, computed, signal } from '@angular/core'\n\nimport { BaseInputComponent, controlDeps, controlProvider } from '../base-input/base-input.component'\nimport { isInputControl } from '../../interfaces'\n\n@Component({\n selector: 'input-field',\n imports: [...controlDeps],\n templateUrl: './input-field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [controlProvider]\n})\nexport class InputFieldComponent extends BaseInputComponent {\n isPasswordOpen = signal(false)\n\n eyeComponent = computed(() => (this.isPasswordOpen() ? this.settings.passwordEyeOpenIcon : this.settings.passwordEyeCloseIcon))\n\n inputType = computed(() => {\n const ctrl = this.control()\n if (!isInputControl(ctrl)) {\n return 'text'\n }\n\n const type = ctrl.type || 'text'\n if (type === 'password' && this.isPasswordOpen()) {\n return 'text'\n }\n\n return type\n })\n\n inputPlaceholder = computed(() => {\n const ctrl = this.control()\n return isInputControl(ctrl) ? (ctrl.placeholder ?? '') : ''\n })\n\n togglePassword() {\n this.isPasswordOpen.set(!this.isPasswordOpen())\n }\n}\n","<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<input\n [class]=\"settings.inputClasses\"\n [id]=\"control().name\"\n [name]=\"control().name\"\n [type]=\"inputType()\"\n [formControlName]=\"control().name\"\n [placeholder]=\"inputPlaceholder()\"\n autocomplete=\"off\" />\n\n@if (control().type === 'password' && eyeComponent()) {\n <button\n type=\"button\"\n [class]=\"settings.passwordIconClasses\"\n (click)=\"togglePassword()\">\n <ng-container [ngComponentOutlet]=\"eyeComponent()!\" />\n </button>\n}\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n ngDefaultControl\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [formControlName]=\"control().name\" />\n</div>\n","import { ChangeDetectionStrategy, Component, computed, effect, signal } from '@angular/core'\nimport { SelectionModel } from '@angular/cdk/collections'\nimport { OverlayModule } from '@angular/cdk/overlay'\nimport { toSignal } from '@angular/core/rxjs-interop'\nimport { from, map, Observable, of, switchMap } from 'rxjs'\nimport { FormControl } from '@angular/forms'\n\nimport { BaseInputComponent, controlDeps } from '../base-input/base-input.component'\nimport { isMultiSelectControl, MultiSelectDropdownControl } from '../../interfaces'\n\n@Component({\n selector: 'multi-select-dropdown',\n imports: [...controlDeps, OverlayModule],\n templateUrl: './multi-select-dropdown.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(click)': 'open()'\n }\n})\nexport class MultiSelectDropdownComponent<T = Record<string, unknown>> extends BaseInputComponent {\n override formControl = new FormControl(Array.isArray(this.value()) ? this.value() : [], this.validatorFn)\n\n items = toSignal(this.getItems(), { initialValue: [] })\n\n isOpen = signal<boolean>(false)\n\n multipleMode = computed(() => {\n const ctrl = this.control()\n return isMultiSelectControl(ctrl) ? (ctrl.multiple ?? true) : true\n })\n\n selectedOptionsModel = new SelectionModel<T>(this.multipleMode())\n displayOptions = toSignal(this.selectedOptionsModel.changed.pipe(map(() => this.selectedOptionsModel.selected)), { initialValue: [] })\n\n constructor() {\n super()\n\n effect(() => {\n this.setSelectedItems(this.items())\n })\n\n effect(() => {\n const selected = this.displayOptions()\n this.valueHasChanged(selected)\n })\n }\n\n setSelectedItems(items: T[]): void {\n const formControlValue = this.formControl.value\n this.selectedOptionsModel.clear()\n\n if (Array.isArray(formControlValue)) {\n items.forEach(item => {\n if (formControlValue.some((val: string) => this.compareWithFn(item, val))) {\n this.selectedOptionsModel.select(item)\n }\n })\n } else {\n items.forEach(item => {\n if (this.compareWithFn(item, String(formControlValue))) {\n this.selectedOptionsModel.select(item)\n }\n })\n }\n }\n\n getItems(): Observable<T[]> {\n return this.parentForm.valueChanges.pipe(\n switchMap(() => {\n const control = this.control() as MultiSelectDropdownControl<T>\n const itemsFn = control.items\n\n if (!itemsFn) {\n return of([])\n }\n if (Array.isArray(itemsFn)) {\n return of(itemsFn)\n }\n\n const result = itemsFn(this.parentForm)\n\n if (result instanceof Promise) {\n return from(result)\n }\n if (result instanceof Observable) {\n return result\n }\n if (Array.isArray(result)) {\n return of(result)\n }\n return of([])\n })\n )\n }\n\n displayWithFn(item: T): string {\n const control = this.control() as MultiSelectDropdownControl<T>\n\n if (control.itemLabel) {\n return String((item as Record<string, unknown>)[control.itemLabel] ?? '')\n } else {\n return String(item)\n }\n }\n\n compareWithFn(item: T, value: string) {\n const control = this.control() as MultiSelectDropdownControl<T>\n\n if (control.itemValue) {\n const itemValue = (item as Record<string, unknown>)[control.itemValue]\n return itemValue === value\n } else {\n return (item as string) === value\n }\n }\n\n valueHasChanged(items: T[]) {\n const control = this.control() as MultiSelectDropdownControl<T>\n\n const isMultiple = control.multiple !== false\n\n const values = items.map(item => {\n if (!control.itemValue) {\n return item\n }\n return (item as Record<string, unknown>)[control.itemValue]\n })\n\n if (isMultiple) {\n this.formControl.setValue(values, { emitEvent: false })\n } else {\n this.formControl.setValue(values.at(0) ?? null, { emitEvent: false })\n }\n }\n\n open() {\n this.isOpen.set(true)\n }\n\n close() {\n this.isOpen.set(false)\n }\n\n trackByFn(index: number, item: T): unknown {\n const ctrl = this.control() as MultiSelectDropdownControl<T>\n return ctrl.itemValue ? (item as Record<string, unknown>)[ctrl.itemValue] : index\n }\n\n toggleSelection(option: T) {\n this.selectedOptionsModel.toggle(option)\n }\n\n deselectOption(event: MouseEvent, option: T) {\n event.stopPropagation()\n this.selectedOptionsModel.deselect(option)\n }\n}\n","<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<div\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\">\n <div>\n @if (displayOptions().length === 0) {\n <span>{{ settings.multiSelectEmptyText }}</span>\n } @else {\n <div [class]=\"settings.multiSelectDisplayedOptionsClasses\">\n @for (option of displayOptions(); track trackByFn($index, option)) {\n <div [class]=\"settings.multiSelectDisplayedOptionClasses\">\n <span>{{ displayWithFn(option) }}</span>\n <button\n type=\"button\"\n [class]=\"settings.multiSelectControlRemoveButtonClasses\"\n (click)=\"deselectOption($event, option)\">\n @if (settings.multiSelectControlRemoveButtonIcon) {\n <div [class]=\"settings.multiSelectControlRemoveButtonIconClasses\">\n <ng-container [ngComponentOutlet]=\"settings.multiSelectControlRemoveButtonIcon\" />\n </div>\n }\n @if (settings.multiSelectControlRemoveButtonLabel) {\n {{ settings.multiSelectControlRemoveButtonLabel }}\n }\n </button>\n </div>\n }\n </div>\n }\n </div>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\">\n <div [class]=\"settings.multiselectDropdownClasses\">\n @for (option of items(); track trackByFn($index, option)) {\n <div [class]=\"[settings.multiselectDropdownItemClasses, selectedOptionsModel.isSelected(option) ? settings.multiselectDropdownItemSelectedClasses : '']\">\n <label class=\"flex items-center gap-2 cursor-pointer\">\n <input\n [id]=\"control().name + '-option-' + $index\"\n [name]=\"control().name + '-option-' + $index\"\n type=\"checkbox\"\n class=\"rounded border-gray-300 text-blue-600 focus:ring-blue-500\"\n [checked]=\"selectedOptionsModel.isSelected(option)\"\n (change)=\"toggleSelection(option)\"\n [attr.aria-checked]=\"selectedOptionsModel.isSelected(option) ? 'true' : 'false'\"\n [attr.aria-selected]=\"selectedOptionsModel.isSelected(option) ? 'true' : 'false'\"\n role=\"option\" />\n {{ displayWithFn(option) }}\n </label>\n </div>\n }\n </div>\n</ng-template>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n ngDefaultControl\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [formControl]=\"formControl\" />\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core'\nimport { BaseInputComponent, controlDeps, controlProvider } from '../base-input/base-input.component'\n\n@Component({\n selector: 'radio-field',\n imports: [...controlDeps],\n templateUrl: './radio-field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [controlProvider]\n})\nexport class RadioFieldComponent extends BaseInputComponent {}\n","<label\n [class]=\"settings.labelClasses\"\n [for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<div [class]=\"settings.radioGroupContainerClasses\">\n @for (option of options(); track option.value) {\n <label [class]=\"settings.radioItemWrapperClasses\">\n <input\n [id]=\"control().name + '-' + option.value\"\n [name]=\"control().name\"\n [class]=\"settings.radioItemInputClasses\"\n type=\"radio\"\n [formControlName]=\"control().name\"\n [value]=\"option.value\"\n [attr.aria-checked]=\"formControl.value === option.value ? 'true' : 'false'\" />\n <span [class]=\"settings.radioItemLabelClasses\">{{ option.label }}</span>\n </label>\n }\n</div>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n ngDefaultControl\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [formControlName]=\"control().name\" />\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core'\nimport { BaseInputComponent, controlDeps, controlProvider } from '../base-input/base-input.component'\n\n@Component({\n selector: 'select-field',\n imports: [...controlDeps],\n templateUrl: './select-field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [controlProvider]\n})\nexport class SelectFieldComponent extends BaseInputComponent {}\n","<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<select\n [class]=\"settings.selectClasses || settings.inputClasses\"\n [id]=\"control().name\"\n [name]=\"control().name\"\n [formControlName]=\"control().name\">\n @for (option of options(); track option.value) {\n <option\n [class]=\"settings.selectOptionClasses\"\n [value]=\"option.value\"\n [selected]=\"option.selected\"\n [disabled]=\"option.disabled\">\n {{ option.label }}\n </option>\n }\n</select>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n ngDefaultControl\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [formControlName]=\"control().name\" />\n</div>\n","/*\n * Public API Surface of ngx-dynamic-forms\n */\n\nexport * from './lib/interfaces'\nexport * from './lib/utils'\nexport * from './lib/services'\nexport * from './lib/components'\nexport * from './lib/directives'\nexport * from './lib/pipes'\nexport * from './lib/controls'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.HelpTextDirective","i3","i4.ActivateControlDirective","i5.ControlInjector","startWith","i3.ValidatorMessageDirective","i2","i3.ActivateControlDirective","i4.ControlInjector","map","switchMap"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"superlikers-dynamic-forms.mjs","sources":["../../../projects/dynamic-forms/src/lib/interfaces/forms.interfaces.ts","../../../projects/dynamic-forms/src/lib/utils/control-data.token.ts","../../../projects/dynamic-forms/src/lib/utils/settings.token.ts","../../../projects/dynamic-forms/src/lib/utils/validation-error-messages.token.ts","../../../projects/dynamic-forms/src/lib/services/validations/validators.service.ts","../../../projects/dynamic-forms/src/lib/services/control-resolver/control-resolver.service.ts","../../../projects/dynamic-forms/src/lib/components/error-message/error-message.component.ts","../../../projects/dynamic-forms/src/lib/pipes/control-injector/control-injector.pipe.ts","../../../projects/dynamic-forms/src/lib/directives/activate-control/activate-control.directive.ts","../../../projects/dynamic-forms/src/lib/directives/help-text/help-text.directive.ts","../../../projects/dynamic-forms/src/lib/directives/validator-message/validator-message.directive.ts","../../../projects/dynamic-forms/src/lib/components/fields/fields.component.ts","../../../projects/dynamic-forms/src/lib/components/help-text/help-text.component.ts","../../../projects/dynamic-forms/src/lib/controls/base-input/base-input.component.ts","../../../projects/dynamic-forms/src/lib/controls/array-field/array-field.component.ts","../../../projects/dynamic-forms/src/lib/controls/array-field/array-field.component.html","../../../projects/dynamic-forms/src/lib/controls/autocomplete-field/autocomplete-field.component.ts","../../../projects/dynamic-forms/src/lib/controls/autocomplete-field/autocomplete-field.component.html","../../../projects/dynamic-forms/src/lib/controls/checkbox-field/checkbox-field.component.ts","../../../projects/dynamic-forms/src/lib/controls/checkbox-field/checkbox-field.component.html","../../../projects/dynamic-forms/src/lib/controls/checkbox-group-field/checkbox-group-field.component.ts","../../../projects/dynamic-forms/src/lib/controls/checkbox-group-field/checkbox-group-field.component.html","../../../projects/dynamic-forms/src/lib/controls/chips-list-field/chips-list-field.component.ts","../../../projects/dynamic-forms/src/lib/controls/chips-list-field/chips-list-field.component.html","../../../projects/dynamic-forms/src/lib/controls/group-field/group-field.component.ts","../../../projects/dynamic-forms/src/lib/controls/group-field/group-field.component.html","../../../projects/dynamic-forms/src/lib/controls/input-field/input-field.component.ts","../../../projects/dynamic-forms/src/lib/controls/input-field/input-field.component.html","../../../projects/dynamic-forms/src/lib/controls/multi-select-dropdown/multi-select-dropdown.component.ts","../../../projects/dynamic-forms/src/lib/controls/multi-select-dropdown/multi-select-dropdown.component.html","../../../projects/dynamic-forms/src/lib/controls/radio-field/radio-field.component.ts","../../../projects/dynamic-forms/src/lib/controls/radio-field/radio-field.component.html","../../../projects/dynamic-forms/src/lib/controls/select-field/select-field.component.ts","../../../projects/dynamic-forms/src/lib/controls/select-field/select-field.component.html","../../../projects/dynamic-forms/src/public-api.ts","../../../projects/dynamic-forms/src/superlikers-dynamic-forms.ts"],"sourcesContent":["import { AbstractControl, AsyncValidatorFn, FormGroup, ValidationErrors, Validators } from '@angular/forms'\nimport { Observable } from 'rxjs'\n\nexport type ControlType = 'input' | 'group' | 'checkbox' | 'checkbox-group' | 'radio' | 'select' | 'array' | 'multi-select-dropdown' | 'chips-list' | 'autocomplete'\n\nexport type InputType = 'text' | 'email' | 'password' | 'number' | 'tel' | 'url' | 'date' | 'time' | 'datetime-local' | 'search'\n\ntype CustomValidator = (control: AbstractControl) => ValidationErrors | null\ntype CustomAsyncValidator = AsyncValidatorFn\ntype ValidatorsKeys = keyof Omit<typeof Validators, 'prototype' | 'compose' | 'composeAsync'>\ntype ValidatorValue = boolean | number | string | RegExp\n\nexport type ControlValidators = Partial<Record<ValidatorsKeys, ValidatorValue>> & {\n customValidation?: CustomValidator | CustomValidator[]\n asyncValidation?: CustomAsyncValidator | CustomAsyncValidator[]\n}\n\nexport type Visible = boolean | ((form: FormGroup) => boolean)\nexport type Options = Option[] | ((form: FormGroup) => Option[] | Promise<Option[]> | Observable<Option[]>)\nexport type Disabled = boolean | ((form: FormGroup) => boolean)\nexport type Items<T> = T[] | ((form: FormGroup) => T[] | Promise<T[]> | Observable<T[]>)\nexport type AutocompleteOptions<T> = (form: FormGroup, query: string) => T[] | Promise<T[]> | Observable<T[]>\n\n/**\n * Base interface for all form controls with common properties\n */\nexport interface BaseControl {\n name: string\n controlType: ControlType\n label?: string\n helpText?: string\n validators?: ControlValidators\n visible?: Visible\n disabled?: Disabled\n value?: unknown\n placeholder?: string\n options?: Options\n controls?: Control[]\n type?: InputType\n items?: Items<unknown>\n itemLabel?: string\n itemValue?: string\n multiple?: boolean\n autocompleteOptions?: AutocompleteOptions<unknown>\n resetOnChange?: string[]\n}\n\n/**\n * Input control configuration\n */\nexport interface InputControl extends BaseControl {\n controlType: 'input'\n type?: InputType\n value?: string | number\n placeholder?: string\n}\n\n/**\n * Checkbox control configuration\n */\nexport interface CheckboxControl extends BaseControl {\n controlType: 'checkbox'\n value?: boolean\n}\n\n/**\n * Radio control configuration\n */\nexport interface RadioControl extends BaseControl {\n controlType: 'radio'\n options: Options\n value?: string | number\n}\n\n/**\n * Select control configuration\n */\nexport interface SelectControl extends BaseControl {\n controlType: 'select'\n options: Options\n value?: string | number\n}\n\n/**\n * Checkbox group control configuration\n */\nexport interface CheckboxGroupControl extends BaseControl {\n controlType: 'checkbox-group'\n options: Options\n value?: (string | number)[]\n}\n\n/**\n * Group control configuration\n */\nexport interface GroupControl extends BaseControl {\n controlType: 'group'\n controls: Control[]\n}\n\n/**\n * Array control configuration\n */\nexport interface ArrayControl extends BaseControl {\n controlType: 'array'\n controls: Control[]\n value?: Record<string, unknown>[]\n}\n\n/**\n * Chips list control configuration\n */\nexport interface ChipsListControl extends BaseControl {\n controlType: 'chips-list'\n value?: string[]\n placeholder?: string\n}\n\n/**\n * Multi-select dropdown control configuration\n */\nexport interface MultiSelectDropdownControl<T = unknown> extends BaseControl {\n controlType: 'multi-select-dropdown'\n items: Items<T>\n itemLabel?: string\n itemValue?: string\n multiple?: boolean\n value?: unknown[]\n}\n\n/**\n * Autocomplete control configuration\n */\nexport interface AutocompleteControl<T = unknown> extends BaseControl {\n controlType: 'autocomplete'\n autocompleteOptions: AutocompleteOptions<T>\n itemLabel?: string\n itemValue?: string\n placeholder?: string\n resetOnChange?: string[]\n value?: unknown\n}\n\n/**\n * Union type for all control types\n */\nexport type Control = InputControl | CheckboxControl | RadioControl | SelectControl | CheckboxGroupControl | GroupControl | ArrayControl | ChipsListControl | MultiSelectDropdownControl | AutocompleteControl\n\n/**\n * Type guards for control types\n */\nexport function isInputControl(control: Control): control is InputControl {\n return control.controlType === 'input'\n}\n\nexport function isGroupControl(control: Control): control is GroupControl {\n return control.controlType === 'group'\n}\n\nexport function isArrayControl(control: Control): control is ArrayControl {\n return control.controlType === 'array'\n}\n\nexport function isMultiSelectControl(control: Control): control is MultiSelectDropdownControl {\n return control.controlType === 'multi-select-dropdown'\n}\n\nexport function isAutocompleteControl(control: Control): control is AutocompleteControl {\n return control.controlType === 'autocomplete'\n}\n\n/**\n * Represents an individual option available for selection in controls such as select, radio groups, or checkboxes.\n */\nexport interface Option {\n /**\n * The display text for the option.\n */\n label: string\n\n /**\n * The value associated with the option.\n */\n value: unknown\n\n /**\n * If set to true, this option will be selected by default.\n */\n selected?: boolean\n\n /**\n * If set to true, this option will be rendered as disabled.\n */\n disabled?: boolean\n}\n","import { InjectionToken, Signal } from '@angular/core'\n\nimport { Control } from '../interfaces'\n\nexport interface ControlData {\n control: Control\n initialValue?: unknown\n}\n\nexport const CONTROL_DATA = new InjectionToken<Signal<ControlData>>('CONTROL_DATA')\n","import { InjectionToken } from '@angular/core'\n\nimport { Settings } from '../interfaces'\n\nexport const DEFAULT_SETTINGS: Settings = {\n // general\n wrapperClasses: 'field-wrapper',\n labelClasses: 'field-label',\n errorClasses: 'field-error',\n helpTextClasses: 'field-help-text',\n inputClasses: 'field-input',\n validationFeedbackClasses: 'validation-feedback',\n // select\n selectClasses: 'field-select',\n selectOptionClasses: 'field-select-option',\n // checkbox\n checkboxWrapperClasses: 'checkbox-wrapper',\n checkboxInputClasses: 'checkbox-input',\n checkboxLabelTextClasses: 'checkbox-label',\n checkboxGroupContainerClasses: 'checkbox-group-container',\n checkboxGroupItemWrapperClasses: 'checkbox-group-item-wrapper',\n checkboxGroupItemInputClasses: 'checkbox-group-item-input',\n checkboxGroupItemLabelClasses: 'checkbox-group-item-label',\n // radio\n radioGroupContainerClasses: 'radio-group-container',\n radioItemWrapperClasses: 'radio-item-wrapper',\n radioItemInputClasses: 'radio-item-input',\n radioItemLabelClasses: 'radio-item-label',\n // group\n groupContainerClasses: 'group-container',\n groupLegendClasses: 'group-legend',\n legendClasses: 'legend',\n // array\n arrayItemContainerClasses: 'array-item-container',\n arrayControlRemoveButtonClasses: 'array-remove-button',\n arrayControlAddButtonClasses: 'array-add-button',\n arrayControlRemoveButtonLabel: 'Remove',\n arrayControlAddButtonLabel: 'Add',\n // multi select\n multiSelectControlRemoveButtonLabel: 'Remove',\n multiSelectEmptyText: 'Select options',\n multiSelectDisplayedOptionsClasses: 'multi-select-displayed-options',\n multiSelectDisplayedOptionClasses: 'multi-select-displayed-option',\n multiselectDropdownClasses: 'multi-select-dropdown',\n multiselectDropdownItemClasses: 'multi-select-dropdown-item',\n chipslistRemoveButtonLabel: 'Remove',\n chipslistAddButtonLabel: 'Add',\n chipslistInputClasses: 'chips-list-input',\n chipslistContainerClasses: 'chips-list-container',\n chipslistChipClasses: 'chips-list-chip',\n chipslistAddWrapperClasses: 'chips-list-add-wrapper',\n // autocomplete\n autocompleteInputClasses: 'autocomplete-input',\n autocompleteDropdownClasses: 'autocomplete-dropdown',\n autocompleteDropdownItemClasses: 'autocomplete-dropdown-item',\n autocompleteLoadingText: 'Loading...',\n autocompleteLoadingWrapperClasses: 'autocomplete-loading-wrapper',\n autocompleteLoadingIconClasses: 'autocomplete-loading-icon',\n autocompleteClearWrapperClasses: 'autocomplete-clear-wrapper',\n autocompleteClearIconClasses: 'autocomplete-clear-icon',\n autocompleteClearText: 'Clear',\n autocompleteClearTextClasses: 'autocomplete-clear-text'\n}\n\nexport const SETTINGS = new InjectionToken<Settings>('Settings', {\n providedIn: 'root',\n factory: () => DEFAULT_SETTINGS\n})\n","import { InjectionToken } from '@angular/core'\n\ntype ValidationErrorArgs = Record<string, unknown> | undefined\n\nexport const ERROR_MESSAGES: Record<string, (args?: ValidationErrorArgs) => string> = {\n pending: () => `Validating...`,\n required: () => `This field is required`,\n requiredTrue: () => `This field is required`,\n pattern: () => `Does not match the pattern`,\n email: () => `Must be a valid email`,\n minlength: args => `Length must be at least ${(args as Record<string, unknown>)?.['requiredLength']} characters`,\n maxlength: args => `Length must not exceed ${(args as Record<string, unknown>)?.['requiredLength']} characters. Currently, it has ${(args as Record<string, unknown>)?.['actualLength']} characters.`,\n min: args => `The value must be at least ${(args as Record<string, unknown>)?.['min']}`,\n max: args => `The value must not exceed ${(args as Record<string, unknown>)?.['max']}`,\n invalidChannelValue: error => String(error),\n custom: error => String(error)\n}\n\nexport const SPANISH_ERROR_MESSAGES: Record<string, (args?: ValidationErrorArgs) => string> = {\n pending: () => `Validando...`,\n required: () => `Este campo es obligatorio`,\n requiredTrue: () => `Este campo es obligatorio`,\n pattern: () => `No coincide con el patrón`,\n email: () => `Debe ser un correo electrónico válido`,\n minlength: args => `La longitud debe ser al menos ${(args as Record<string, unknown>)?.['requiredLength']} caracteres`,\n maxlength: args => `La longitud no debe exceder los ${(args as Record<string, unknown>)?.['requiredLength']} caracteres. Actualmente tiene ${(args as Record<string, unknown>)?.['actualLength']} caracteres.`,\n min: args => `El valor debe ser al menos ${(args as Record<string, unknown>)?.['min']}`,\n max: args => `El valor no debe exceder ${(args as Record<string, unknown>)?.['max']}`,\n invalidChannelValue: error => String(error),\n custom: error => String(error)\n}\n\nexport const VALIDATION_ERROR_MESSAGES = new InjectionToken('Validation Messages', {\n providedIn: 'root',\n factory: () => ERROR_MESSAGES\n})\n","import { Injectable } from '@angular/core'\nimport { Control, ControlValidators } from '../../interfaces'\nimport { AsyncValidatorFn, ValidatorFn, Validators } from '@angular/forms'\n\ntype ValidatorStrategy = (value: unknown) => ValidatorFn[]\ntype AsyncValidatorStrategy = (value: unknown) => AsyncValidatorFn[]\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ValidatorsService {\n private readonly validatorStrategies: Partial<Record<keyof ControlValidators, ValidatorStrategy>> = {\n customValidation: (value: unknown): ValidatorFn[] => {\n if (typeof value === 'function') {\n return [value as ValidatorFn]\n }\n if (Array.isArray(value)) {\n return value.filter((fn): fn is ValidatorFn => typeof fn === 'function')\n }\n return []\n },\n\n pattern: (value: unknown): ValidatorFn[] => {\n if (typeof value === 'string' || value instanceof RegExp) {\n return [Validators.pattern(value)]\n }\n return []\n },\n\n max: (value: unknown): ValidatorFn[] => {\n return typeof value === 'number' ? [Validators.max(value)] : []\n },\n\n min: (value: unknown): ValidatorFn[] => {\n return typeof value === 'number' ? [Validators.min(value)] : []\n },\n\n maxLength: (value: unknown): ValidatorFn[] => {\n return typeof value === 'number' ? [Validators.maxLength(value)] : []\n },\n\n minLength: (value: unknown): ValidatorFn[] => {\n return typeof value === 'number' ? [Validators.minLength(value)] : []\n },\n\n requiredTrue: (): ValidatorFn[] => {\n return [Validators.requiredTrue]\n },\n\n email: (): ValidatorFn[] => {\n return [Validators.email]\n },\n\n required: (): ValidatorFn[] => {\n return [Validators.required]\n }\n }\n\n private readonly asyncValidatorStrategies: Partial<Record<keyof ControlValidators, AsyncValidatorStrategy>> = {\n asyncValidation: (value: unknown): AsyncValidatorFn[] => {\n if (typeof value === 'function') {\n return [value as AsyncValidatorFn]\n }\n if (Array.isArray(value)) {\n return value.filter((fn): fn is AsyncValidatorFn => typeof fn === 'function')\n }\n return []\n }\n }\n\n resolveValidators({ validators = {} }: Control): ValidatorFn | null {\n const validatorFns: ValidatorFn[] = []\n\n for (const key in validators) {\n if (Object.prototype.hasOwnProperty.call(validators, key)) {\n const typedKey = key as keyof ControlValidators\n const strategy = this.validatorStrategies[typedKey]\n\n if (strategy) {\n const value = validators[typedKey]\n const fns = strategy(value)\n validatorFns.push(...fns)\n }\n }\n }\n\n return validatorFns.length > 0 ? Validators.compose(validatorFns) : null\n }\n\n resolveAsyncValidators({ validators = {} }: Control): AsyncValidatorFn | null {\n const validatorFns: AsyncValidatorFn[] = []\n\n for (const key in validators) {\n if (Object.prototype.hasOwnProperty.call(validators, key)) {\n const typedKey = key as keyof ControlValidators\n const strategy = this.asyncValidatorStrategies[typedKey]\n\n if (strategy) {\n const value = validators[typedKey]\n const fns = strategy(value)\n validatorFns.push(...fns)\n }\n }\n }\n\n return validatorFns.length > 0 ? Validators.composeAsync(validatorFns) : null\n }\n}\n","import { Injectable, Type } from '@angular/core'\nimport { from, of, tap } from 'rxjs'\n\nimport { Control } from '../../interfaces'\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ControlResolver {\n private lazyControlComponents = {\n input: () => import('../../controls/input-field/input-field.component').then(c => c.InputFieldComponent),\n radio: () => import('../../controls/radio-field/radio-field.component').then(c => c.RadioFieldComponent),\n checkbox: () => import('../../controls/checkbox-field/checkbox-field.component').then(c => c.CheckboxFieldComponent),\n select: () => import('../../controls/select-field/select-field.component').then(c => c.SelectFieldComponent),\n group: () => import('../../controls/group-field/group-field.component').then(c => c.GroupFieldComponent),\n array: () => import('../../controls/array-field/array-field.component').then(c => c.ArrayFieldComponent),\n autocomplete: () => import('../../controls/autocomplete-field/autocomplete-field.component').then(c => c.AutocompleteFieldComponent),\n 'checkbox-group': () => import('../../controls/checkbox-group-field/checkbox-group-field.component').then(c => c.CheckboxGroupFieldComponent),\n 'multi-select-dropdown': () => import('../../controls/multi-select-dropdown/multi-select-dropdown.component').then(c => c.MultiSelectDropdownComponent),\n 'chips-list': () => import('../../controls/chips-list-field/chips-list-field.component').then(c => c.ChipsListFieldComponent)\n }\n\n private loadedControlComponents = new Map<string, Type<unknown>>()\n\n resolve(control: Control) {\n const controlType = control.controlType\n\n const loadedComponent = this.loadedControlComponents.get(controlType)\n if (loadedComponent) {\n return of(loadedComponent)\n }\n\n return from(this.lazyControlComponents[controlType]()).pipe(tap(component => this.loadedControlComponents.set(controlType, component)))\n }\n}\n","import { KeyValue, KeyValuePipe } from '@angular/common'\nimport { ChangeDetectionStrategy, Component, inject, input } from '@angular/core'\nimport { ValidationErrors } from '@angular/forms'\n\nimport { VALIDATION_ERROR_MESSAGES } from '../../utils'\nimport { SETTINGS } from '../../utils'\n\n@Component({\n selector: 'error-message',\n imports: [KeyValuePipe],\n template: `\n @if (pending()) {\n <p [class]=\"settings.errorClasses\">{{ getPendingMessage() }}</p>\n }\n @for (error of errors() | keyvalue; track error.key) {\n <p [class]=\"settings.errorClasses\">{{ getError(error) }}</p>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ErrorMessageComponent {\n settings = inject(SETTINGS)\n errorsMap = inject(VALIDATION_ERROR_MESSAGES)\n\n errors = input<ValidationErrors>()\n pending = input(false)\n\n getPendingMessage() {\n if (!this.errorsMap['pending']) {\n return 'Validating...'\n }\n\n return this.errorsMap['pending']()\n }\n\n getError(error: KeyValue<string, unknown>) {\n if (!this.errorsMap[error.key]) {\n return\n }\n\n const message = this.errorsMap[error.key](error.value as Record<string, unknown>)\n return message\n }\n}\n","import { inject, Injector, Pipe, PipeTransform, signal } from '@angular/core'\n\nimport { Control } from '../../interfaces'\nimport { CONTROL_DATA, ControlData } from '../../utils'\n\n@Pipe({\n name: 'controlInjector'\n})\nexport class ControlInjector implements PipeTransform {\n injector = inject(Injector)\n\n transform(control: Control, initialValues: Record<string, unknown> | null | undefined): Injector {\n const controlPatchValue = initialValues?.[control.name]\n const data: ControlData = { control, initialValue: controlPatchValue }\n\n return Injector.create({\n parent: this.injector,\n providers: [\n {\n provide: CONTROL_DATA,\n useValue: signal(data)\n }\n ]\n })\n }\n}\n","import { computed, Directive, effect, inject, input, TemplateRef, ViewContainerRef } from '@angular/core'\nimport { toSignal } from '@angular/core/rxjs-interop'\nimport { FormGroupDirective } from '@angular/forms'\nimport { startWith } from 'rxjs'\n\nimport { Control } from '../../interfaces'\n\n@Directive({\n selector: '[activateControl]'\n})\nexport class ActivateControlDirective {\n activateControl = input<Control>()\n\n private vcr = inject(ViewContainerRef)\n private templateRef = inject(TemplateRef)\n private rootFormGroup = inject(FormGroupDirective).form\n\n private formValue = toSignal(this.rootFormGroup.valueChanges.pipe(startWith(this.rootFormGroup.value)), {\n initialValue: this.rootFormGroup.value\n })\n private isVisible = computed(() => {\n const _ = this.formValue()\n\n const visible = this.activateControl()?.visible\n\n if (visible === undefined) {\n return true\n }\n\n if (typeof visible === 'function') {\n return visible(this.rootFormGroup)\n }\n\n return visible\n })\n\n constructor() {\n effect(() => {\n const visible = this.isVisible()\n const controlName = this.activateControl()?.name\n\n if (visible) {\n if (this.vcr.length === 0) {\n this.vcr.createEmbeddedView(this.templateRef)\n }\n } else {\n if (this.vcr.length > 0) {\n this.vcr.clear()\n\n if (controlName && this.rootFormGroup.contains(controlName)) {\n this.rootFormGroup.removeControl(controlName)\n }\n }\n }\n })\n }\n}\n","import { ComponentRef, Directive, ElementRef, inject, input, OnInit, ViewContainerRef } from '@angular/core'\nimport { HelpTextComponent } from '../../components'\n\n@Directive({\n selector: '[helpMessage]'\n})\nexport class HelpTextDirective implements OnInit {\n helpMessage = input<string>()\n\n elementRef = inject(ElementRef)\n vcr = inject(ViewContainerRef)\n\n componentRef: ComponentRef<HelpTextComponent> | null = null\n\n ngOnInit(): void {\n if (!this.helpMessage()) {\n return\n }\n\n this.componentRef = this.vcr.createComponent(HelpTextComponent)\n this.componentRef.setInput('message', this.helpMessage())\n }\n}\n","import { ComponentRef, Directive, ElementRef, inject, input, OnDestroy, OnInit, ViewContainerRef } from '@angular/core'\nimport { AbstractControl, ControlContainer, FormGroupDirective, NgForm } from '@angular/forms'\nimport { EMPTY, fromEvent, iif, merge, startWith, Subscription } from 'rxjs'\n\nimport { ErrorMessageComponent } from '../../components'\n\n@Directive({\n selector: '[validatorMessage]'\n})\nexport class ValidatorMessageDirective implements OnInit, OnDestroy {\n controlName = input<string>()\n\n elementRef = inject(ElementRef)\n vcr = inject(ViewContainerRef)\n parentContainer = inject(ControlContainer, { optional: true })\n\n private componentRef: ComponentRef<ErrorMessageComponent> | null = null\n\n get form() {\n return this.parentContainer?.formDirective as NgForm | FormGroupDirective | null\n }\n\n controlSubscription!: Subscription\n\n ngOnInit() {\n const control = this.getControl()\n if (!control) {\n return\n }\n\n this.controlSubscription = merge(\n control.statusChanges,\n fromEvent(this.elementRef.nativeElement, 'blur'),\n iif(() => !!this.form, this.form!.ngSubmit, EMPTY)\n )\n .pipe(startWith(control.status))\n .subscribe(() => {\n const shouldShow = control.touched || control.dirty || this.form?.submitted\n\n if (control.pending && shouldShow) {\n if (!this.componentRef) {\n this.componentRef = this.vcr.createComponent(ErrorMessageComponent)\n }\n\n this.componentRef.setInput('pending', true)\n this.componentRef.setInput('errors', null)\n return\n }\n\n if (control.errors && shouldShow) {\n if (!this.componentRef) {\n this.componentRef = this.vcr.createComponent(ErrorMessageComponent)\n }\n\n this.componentRef.setInput('pending', false)\n this.componentRef.setInput('errors', control.errors)\n } else {\n this.componentRef?.destroy()\n this.componentRef = null\n }\n })\n }\n\n private getControl(): AbstractControl | null {\n const name = this.controlName()\n if (!name) {\n return null\n }\n\n return (this.parentContainer?.control?.get(name) as AbstractControl) ?? null\n }\n\n ngOnDestroy() {\n this.controlSubscription?.unsubscribe()\n }\n}\n","import { ChangeDetectionStrategy, Component, inject, input } from '@angular/core'\nimport { ControlContainer, FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms'\nimport { AsyncPipe, NgComponentOutlet } from '@angular/common'\n\nimport { ControlInjector } from '../../pipes'\nimport { Control } from '../../interfaces'\nimport { ControlResolver } from '../../services'\nimport { ActivateControlDirective } from '../../directives'\n\n@Component({\n selector: 'fields',\n imports: [ReactiveFormsModule, NgComponentOutlet, ControlInjector, AsyncPipe, ActivateControlDirective],\n template: `\n @for (control of controls(); track control.name) {\n <ng-container\n *activateControl=\"control\"\n [ngComponentOutlet]=\"controlResolver.resolve(control) | async\"\n [ngComponentOutletInjector]=\"control | controlInjector: data()\" />\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FieldsComponent {\n controls = input.required<Control[]>()\n data = input<Record<string, unknown> | null>()\n\n fb = inject(FormBuilder)\n controlResolver = inject(ControlResolver)\n\n controlContainer = inject(ControlContainer)\n\n get form() {\n return this.controlContainer.control as FormGroup\n }\n}\n","import { ChangeDetectionStrategy, Component, inject, input } from '@angular/core'\nimport { SETTINGS } from '../../utils'\n\n@Component({\n selector: 'help-text',\n template: `<p\n [class]=\"settings.helpTextClasses\"\n [innerHTML]=\"message()\"></p>`,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class HelpTextComponent {\n settings = inject(SETTINGS)\n\n message = input<string>()\n}\n","import { computed, Directive, effect, inject, OnInit, signal, StaticProvider } from '@angular/core'\nimport { toSignal } from '@angular/core/rxjs-interop'\nimport { AbstractControl, ControlContainer, FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'\nimport { NgComponentOutlet } from '@angular/common'\nimport { startWith } from 'rxjs'\n\nimport { CONTROL_DATA, SETTINGS } from '../../utils'\nimport { ValidatorsService } from '../../services'\nimport { ValidatorMessageDirective } from '../../directives'\nimport { ControlInjector } from '../../pipes'\nimport { HelpTextDirective, ActivateControlDirective } from '../../directives'\n\nexport const controlProvider: StaticProvider = {\n provide: ControlContainer,\n useFactory: () => inject(ControlContainer, { skipSelf: true })\n}\n\nexport const controlDeps = [ReactiveFormsModule, HelpTextDirective, ValidatorMessageDirective, NgComponentOutlet, ControlInjector, ActivateControlDirective]\n\n@Directive({\n host: {\n '[class]': 'hostClass()'\n }\n})\nexport class BaseInputComponent implements OnInit {\n settings = inject(SETTINGS)\n\n protected hostClass = signal('')\n\n // Injections\n protected controlData = inject(CONTROL_DATA)\n protected validatorsService = inject(ValidatorsService)\n protected controlContainer = inject(ControlContainer)\n\n // Computed signals\n protected control = computed(() => this.controlData().control)\n protected value = computed(() => this.controlData().initialValue ?? this.control().value)\n\n // Form control\n protected validatorFn = this.validatorsService.resolveValidators(this.control())\n protected asyncValidatorFn = this.validatorsService.resolveAsyncValidators(this.control())\n formControl: AbstractControl = new FormControl(this.value(), this.validatorFn, this.asyncValidatorFn)\n parentForm = this.controlContainer.control as FormGroup\n\n protected formValue = toSignal(this.parentForm.valueChanges.pipe(startWith(this.parentForm.value)), {\n initialValue: this.parentForm.value\n })\n\n protected options = computed(() => {\n const _ = this.formValue()\n\n const optionsFn = this.control().options\n\n if (!optionsFn) {\n return []\n }\n\n if (Array.isArray(optionsFn)) {\n return optionsFn\n }\n\n const result = optionsFn(this.parentForm)\n\n if (Array.isArray(result)) {\n return result\n }\n\n return []\n })\n\n protected isDisabled = computed(() => {\n const _ = this.formValue()\n\n const control = this.control()\n\n if (control.disabled === undefined) {\n return false\n }\n\n if (typeof control.disabled === 'boolean') {\n return control.disabled\n }\n\n if (typeof control.disabled === 'function') {\n return control.disabled(this.parentForm)\n }\n\n return false\n })\n\n constructor() {\n effect(() => {\n const disabled = this.isDisabled()\n\n if (disabled && !this.formControl.disabled) {\n this.formControl.disable({ emitEvent: false })\n } else if (!disabled && this.formControl.disabled) {\n this.formControl.enable({ emitEvent: false })\n }\n })\n }\n\n ngOnInit(): void {\n this.initialize()\n }\n\n protected initialize() {\n const control = this.control()\n\n const classes = this.settings.wrapperClasses ?? `field wrapper-${control.name}`\n\n this.hostClass.set(classes)\n\n // Verificar si debe estar disabled desde el inicio\n if (this.isDisabled()) {\n this.formControl.disable({ emitEvent: false })\n }\n\n this.parentForm.addControl(control.name, this.formControl)\n }\n\n protected destroy() {\n const control = this.control()\n\n if (this.parentForm.contains(control.name)) {\n this.parentForm.removeControl(control.name)\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, OnInit } from '@angular/core'\nimport { FormArray, FormGroup, NonNullableFormBuilder } from '@angular/forms'\nimport { AsyncPipe } from '@angular/common'\n\nimport { BaseInputComponent, controlDeps, controlProvider } from '../base-input/base-input.component'\nimport { isArrayControl } from '../../interfaces'\nimport { ControlResolver } from '../../services'\n\n@Component({\n selector: 'array-field',\n imports: [...controlDeps, AsyncPipe],\n templateUrl: './array-field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [controlProvider]\n})\nexport class ArrayFieldComponent extends BaseInputComponent implements OnInit {\n controlResolver = inject(ControlResolver)\n fb = inject(NonNullableFormBuilder)\n\n override formControl = new FormArray<FormGroup>([], this.validatorFn)\n controls = computed(() => {\n const ctrl = this.control()\n return isArrayControl(ctrl) ? ctrl.controls : []\n })\n\n override ngOnInit(): void {\n this.initialize()\n\n const val = this.value()\n if (Array.isArray(val)) {\n val.forEach(() => {\n const group = this.fb.group({})\n this.formControl.push(group)\n })\n }\n }\n\n getControlValue(index: number) {\n const val = this.value()\n if (Array.isArray(val)) {\n return val[index] ?? null\n }\n return null\n }\n\n removeItem(i: number) {\n if (this.isDisabled()) {\n return\n }\n this.formControl.removeAt(i)\n }\n\n addItem() {\n if (this.isDisabled()) {\n return\n }\n\n const group = this.fb.group({})\n this.formControl.push(group)\n }\n}\n","<fieldset [formArrayName]=\"control().name\">\n @if (control().label) {\n <legend [class]=\"settings.legendClasses\">{{ control().label }}</legend>\n }\n\n @for (group of formControl.controls; track group; let i = $index) {\n <div\n [formGroupName]=\"i\"\n [class]=\"settings.arrayItemContainerClasses\">\n @for (ctrl of control().controls; track ctrl.name) {\n <ng-container\n *activateControl=\"ctrl\"\n [ngComponentOutlet]=\"controlResolver.resolve(ctrl) | async\"\n [ngComponentOutletInjector]=\"ctrl | controlInjector: getControlValue(i)\" />\n }\n\n <button\n [class]=\"settings.arrayControlRemoveButtonClasses\"\n role=\"button\"\n tabindex=\"0\"\n type=\"button\"\n (click)=\"removeItem(i)\"\n (keydown.enter)=\"removeItem(i)\">\n @if (settings.arrayControlRemoveButtonIcon) {\n <div [class]=\"settings.arrayControlRemoveButtonIconClasses\">\n <ng-container *ngComponentOutlet=\"settings.arrayControlRemoveButtonIcon\" />\n </div>\n }\n @if (settings.arrayControlRemoveButtonLabel) {\n <span>{{ settings.arrayControlRemoveButtonLabel }}</span>\n }\n </button>\n </div>\n }\n\n <button\n [class]=\"settings.arrayControlAddButtonClasses\"\n role=\"button\"\n tabindex=\"0\"\n type=\"button\"\n (click)=\"addItem()\"\n (keydown.enter)=\"addItem()\">\n @if (settings.arrayControlAddButtonIcon) {\n <div [class]=\"settings.arrayControlAddButtonIconClasses\">\n <ng-container *ngComponentOutlet=\"settings.arrayControlAddButtonIcon\" />\n </div>\n }\n @if (settings.arrayControlAddButtonLabel) {\n <span>{{ settings.arrayControlAddButtonLabel }}</span>\n }\n </button>\n</fieldset>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container [helpMessage]=\"control().helpText\" />\n</div>\n","// autocomplete-field.component.ts\nimport { ChangeDetectionStrategy, Component, effect, OnDestroy, OnInit, signal } from '@angular/core'\nimport { AsyncPipe } from '@angular/common'\nimport { FormControl } from '@angular/forms'\nimport { OverlayModule } from '@angular/cdk/overlay'\n\nimport { from, Observable, of, Subscription } from 'rxjs'\nimport { debounceTime, distinctUntilChanged, map, startWith, switchMap } from 'rxjs/operators'\n\nimport { BaseInputComponent, controlDeps, controlProvider } from '../base-input/base-input.component'\nimport { AutocompleteControl } from '../../interfaces'\n\n@Component({\n selector: 'autocomplete-field',\n imports: [...controlDeps, OverlayModule, AsyncPipe],\n templateUrl: './autocomplete-field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [controlProvider]\n})\nexport class AutocompleteFieldComponent<T> extends BaseInputComponent implements OnInit, OnDestroy {\n // A separate control for the query input.\n queryControl = new FormControl<string>('')\n\n isOpen = signal(false)\n loading = signal(false)\n private dependencySubscriptions: Subscription[] = []\n\n // suggestions$ emits an array of options based on the current query.\n suggestions$: Observable<T[]> = this.queryControl.valueChanges.pipe(\n startWith(this.queryControl.value),\n debounceTime(300),\n map(query => query || ''),\n distinctUntilChanged(),\n switchMap((query: string) => {\n const ctrl = this.control()\n if (!ctrl.autocompleteOptions) {\n this.loading.set(false)\n return of([]) as Observable<T[]>\n }\n\n // Set loading to true before fetching\n this.loading.set(true)\n\n const result = ctrl.autocompleteOptions(this.parentForm, query)\n\n let resultObservable: Observable<T[]>\n\n // Handle Promise\n if (result instanceof Promise) {\n resultObservable = from(result) as Observable<T[]>\n }\n // Handle Observable\n else if (result && typeof result === 'object' && 'subscribe' in result) {\n resultObservable = result as Observable<T[]>\n }\n // Handle Array\n else if (Array.isArray(result)) {\n resultObservable = of(result) as Observable<T[]>\n } else {\n resultObservable = of([]) as Observable<T[]>\n }\n\n // Set loading to false after results arrive\n return resultObservable.pipe(\n map(results => {\n this.loading.set(false)\n return results\n })\n )\n })\n )\n\n displayWithFn(item: T): string {\n const control = this.control() as AutocompleteControl<T>\n if (control.itemLabel) {\n const label = (item as Record<string, unknown>)[control.itemLabel]\n return label !== null && label !== undefined ? String(label) : ''\n } else {\n return String(item)\n }\n }\n\n selectOption(option: T): void {\n const ctrl = this.control() as AutocompleteControl<T>\n const valueToStore = ctrl.itemValue ? (option as Record<string, unknown>)[ctrl.itemValue] : option\n\n this.formControl.setValue(valueToStore)\n this.queryControl.setValue(this.displayWithFn(option))\n\n this.close()\n }\n\n isSelected(option: T): boolean {\n const ctrl = this.control() as AutocompleteControl<T>\n const value = this.formControl.value\n\n const optionValue = ctrl.itemValue ? (option as Record<string, unknown>)[ctrl.itemValue] : option\n\n if (Array.isArray(value)) {\n return value.includes(optionValue)\n }\n return value === optionValue\n }\n\n open(): void {\n this.isOpen.set(true)\n }\n\n close(): void {\n this.isOpen.set(false)\n }\n\n trackByFn(index: number, item: T): unknown {\n const ctrl = this.control() as AutocompleteControl<T>\n return ctrl.itemValue ? (item as Record<string, unknown>)[ctrl.itemValue] : index\n }\n\n clear() {\n this.queryControl.reset()\n this.formControl.reset()\n this.close()\n }\n\n constructor() {\n super()\n\n effect(() => {\n const disabled = this.isDisabled()\n\n if (disabled && !this.queryControl.disabled) {\n this.queryControl.disable({ emitEvent: false })\n } else if (!disabled && this.queryControl.disabled) {\n this.queryControl.enable({ emitEvent: false })\n }\n })\n }\n\n override ngOnInit(): void {\n this.initialize()\n\n // If the control configuration has a 'resetOnChange' array, subscribe to each dependency.\n const ctrl = this.control() as AutocompleteControl<T>\n if (ctrl.resetOnChange && Array.isArray(ctrl.resetOnChange)) {\n ctrl.resetOnChange.forEach((depName: string) => {\n const depControl = this.parentForm.get(depName)\n if (depControl) {\n const sub = depControl.valueChanges.pipe(distinctUntilChanged()).subscribe(() => {\n this.formControl.reset()\n this.queryControl.reset()\n })\n this.dependencySubscriptions.push(sub)\n }\n })\n }\n }\n\n ngOnDestroy(): void {\n this.destroy()\n\n this.dependencySubscriptions.forEach(sub => sub.unsubscribe())\n }\n}\n","<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<div class=\"relative\">\n <input\n #origin\n [id]=\"control().name\"\n [name]=\"control().name\"\n [class]=\"settings.autocompleteInputClasses\"\n [placeholder]=\"control().placeholder ?? ''\"\n [formControl]=\"queryControl\"\n (focus)=\"open()\"\n autocomplete=\"off\"\n [attr.aria-expanded]=\"isOpen() ? 'true' : 'false'\"\n aria-controls=\"autocomplete-list\" />\n\n @if (loading()) {\n @if (settings.autocompleteLoadingIcon) {\n <div [class]=\"settings.autocompleteLoadingWrapperClasses\">\n <div [class]=\"settings.autocompleteLoadingIconClasses\">\n <ng-container [ngComponentOutlet]=\"settings.autocompleteLoadingIcon\" />\n </div>\n </div>\n } @else {\n <span [class]=\"settings.autocompleteLoadingTextClasses\">{{ settings.autocompleteLoadingText }}</span>\n }\n } @else {\n @if (settings.autocompleteClearIcon && !!queryControl.value) {\n <div\n [class]=\"settings.autocompleteClearWrapperClasses\"\n (click)=\"clear()\">\n <div [class]=\"settings.autocompleteClearIconClasses\">\n <ng-container [ngComponentOutlet]=\"settings.autocompleteClearIcon\" />\n </div>\n </div>\n } @else if (settings.autocompleteClearText && !!queryControl.value) {\n <span\n (click)=\"clear()\"\n [class]=\"settings.autocompleteClearTextClasses\">\n {{ settings.autocompleteClearText }}\n </span>\n }\n }\n</div>\n\n<!-- CDK Connected Overlay for suggestions dropdown -->\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\">\n <div\n [class]=\"settings.autocompleteDropdownClasses\"\n role=\"listbox\"\n aria-live=\"assertive\"\n id=\"autocomplete-list\">\n @for (option of suggestions$ | async; track trackByFn($index, option)) {\n <div\n [class]=\"[settings.autocompleteDropdownItemClasses, isSelected(option) ? settings.autocompleteDropdownItemSelectedClasses : '']\"\n tabindex=\"0\"\n (click)=\"selectOption(option)\"\n (keyup)=\"selectOption(option)\"\n role=\"option\"\n [attr.aria-selected]=\"isSelected(option)\">\n {{ displayWithFn(option) }}\n </div>\n }\n </div>\n</ng-template>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [controlName]=\"control().name\" />\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core'\nimport { BaseInputComponent, controlDeps, controlProvider } from '../base-input/base-input.component'\n\n@Component({\n selector: 'checkbox-field',\n imports: [...controlDeps],\n templateUrl: './checkbox-field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [controlProvider]\n})\nexport class CheckboxFieldComponent extends BaseInputComponent {}\n","<label [class]=\"settings.checkboxWrapperClasses\">\n <input\n [id]=\"control().name\"\n [name]=\"control().name\"\n [class]=\"settings.checkboxInputClasses\"\n type=\"checkbox\"\n [attr.aria-checked]=\"formControl.value ? 'true' : 'false'\"\n [formControlName]=\"control().name\" />\n <span\n [class]=\"settings.checkboxLabelTextClasses\"\n [innerHTML]=\"control().label\"></span>\n</label>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [controlName]=\"control().name\" />\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core'\nimport { FormControl } from '@angular/forms'\nimport { BaseInputComponent, controlDeps, controlProvider } from '../base-input/base-input.component'\n\n@Component({\n selector: 'checkbox-group-field',\n imports: [...controlDeps],\n templateUrl: './checkbox-group-field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [controlProvider]\n})\nexport class CheckboxGroupFieldComponent extends BaseInputComponent {\n override formControl = new FormControl(Array.isArray(this.value()) ? this.value() : [], this.validatorFn, this.asyncValidatorFn)\n\n isSelected(value: unknown) {\n const selectedValues = this.formControl.value as unknown[]\n return selectedValues.includes(value)\n }\n\n onCheckboxChange(event: Event, value: unknown) {\n const target = event.target as HTMLInputElement\n const isChecked = target.checked\n\n let selectedValues = this.formControl.value as unknown[]\n\n if (isChecked && !this.isSelected(value)) {\n selectedValues.push(value)\n } else {\n selectedValues = selectedValues.filter(item => item !== value)\n }\n\n this.formControl.setValue(selectedValues)\n }\n}\n","<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<div [class]=\"settings.checkboxGroupContainerClasses\">\n @for (option of options(); track option.value) {\n <label [class]=\"settings.checkboxGroupItemWrapperClasses\">\n <input\n [id]=\"control().name + '-' + option.value\"\n [name]=\"control().name + '-' + option.value\"\n [class]=\"settings.checkboxGroupItemInputClasses\"\n type=\"checkbox\"\n [checked]=\"isSelected(option.value)\"\n [disabled]=\"option.disabled\"\n (change)=\"onCheckboxChange($event, option.value)\" />\n <span [class]=\"settings.checkboxGroupItemLabelClasses\">{{ option.label }}</span>\n </label>\n }\n</div>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [controlName]=\"control().name\" />\n</div>\n","import { ChangeDetectionStrategy, Component, signal } from '@angular/core'\nimport { FormControl } from '@angular/forms'\n\nimport { BaseInputComponent, controlDeps } from '../base-input/base-input.component'\n\n@Component({\n selector: 'chips-list-field',\n imports: [...controlDeps],\n templateUrl: './chips-list-field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ChipsListFieldComponent extends BaseInputComponent {\n override formControl = new FormControl<string[]>(Array.isArray(this.value()) ? (this.value() as string[]) : [], this.validatorFn, this.asyncValidatorFn)\n\n inputValue = signal('')\n\n addChip() {\n const trimmed = this.inputValue().trim()\n if (!trimmed) {\n return\n }\n\n const currentChips = this.formControl.value || []\n this.formControl.setValue([...currentChips, trimmed])\n\n this.inputValue.set('')\n }\n\n removeChip(chipToRemove: string) {\n const currentChips = this.formControl.value || []\n const updatedChips = currentChips.filter(chip => chip !== chipToRemove)\n this.formControl.setValue(updatedChips)\n }\n}\n","<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<div [class]=\"settings.chipslistContainerClasses\">\n @for (chip of formControl.value; track $index) {\n <div [class]=\"settings.chipslistChipClasses\">\n {{ chip }}\n <button\n type=\"button\"\n [class]=\"settings.chipslistRemoveButtonClasses\"\n (click)=\"removeChip(chip)\">\n @if (settings.chipslistRemoveButtonIcon) {\n <div [class]=\"settings.chipslistRemoveButtonIconClasses\">\n <ng-container [ngComponentOutlet]=\"settings.chipslistRemoveButtonIcon\" />\n </div>\n }\n @if (settings.chipslistRemoveButtonLabel) {\n <span [class]=\"settings.chipslistRemoveButtonLabelClasses\">\n {{ settings.chipslistRemoveButtonLabel }}\n </span>\n }\n </button>\n </div>\n }\n</div>\n\n<div>\n <input\n [id]=\"control().name\"\n [class]=\"settings.chipslistInputClasses\"\n [name]=\"control().name\"\n [placeholder]=\"control().placeholder ?? ''\"\n [value]=\"inputValue()\"\n (input)=\"inputValue.set($any($event.target).value)\"\n (keydown.enter)=\"$event.preventDefault(); addChip()\"\n aria-label=\"Add new chip\" />\n <button\n type=\"button\"\n [class]=\"settings.chipslistAddButtonClasses\"\n aria-label=\"Add chip\"\n (click)=\"addChip()\">\n @if (settings.chipslistAddButtonIcon) {\n <div [class]=\"settings.chipslistAddButtonIconClasses\">\n <ng-container [ngComponentOutlet]=\"settings.chipslistAddButtonIcon\" />\n </div>\n }\n @if (settings.chipslistAddButtonLabel) {\n <span [class]=\"settings.chipslistAddButtonLabelClasses\">\n {{ settings.chipslistAddButtonLabel }}\n </span>\n }\n </button>\n</div>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [controlName]=\"control().name\" />\n</div>\n","import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core'\nimport { AsyncPipe } from '@angular/common'\nimport { NonNullableFormBuilder } from '@angular/forms'\n\nimport { BaseInputComponent, controlDeps, controlProvider } from '../base-input/base-input.component'\nimport { ControlResolver } from '../../services'\nimport { isGroupControl } from '../../interfaces'\n\n@Component({\n selector: 'group-field',\n imports: [...controlDeps, AsyncPipe],\n templateUrl: './group-field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [controlProvider]\n})\nexport class GroupFieldComponent extends BaseInputComponent {\n fb = inject(NonNullableFormBuilder)\n controlResolver = inject(ControlResolver)\n\n override formControl = this.fb.group({})\n controls = computed(() => {\n const ctrl = this.control()\n return isGroupControl(ctrl) ? ctrl.controls : []\n })\n\n groupValue = computed(() => this.value() as Record<string, unknown> | null)\n}\n","<fieldset\n [class]=\"settings.groupContainerClasses\"\n [formGroupName]=\"control().name\">\n @if (control().label) {\n <legend [class]=\"settings.groupLegendClasses\">{{ control().label }}</legend>\n }\n @for (control of controls(); track control.name) {\n <ng-container\n *activateControl=\"control\"\n [ngComponentOutlet]=\"controlResolver.resolve(control) | async\"\n [ngComponentOutletInjector]=\"control | controlInjector: groupValue()\" />\n }\n</fieldset>\n","import { ChangeDetectionStrategy, Component, computed, signal } from '@angular/core'\n\nimport { BaseInputComponent, controlDeps, controlProvider } from '../base-input/base-input.component'\nimport { isInputControl } from '../../interfaces'\n\n@Component({\n selector: 'input-field',\n imports: [...controlDeps],\n templateUrl: './input-field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [controlProvider]\n})\nexport class InputFieldComponent extends BaseInputComponent {\n isPasswordOpen = signal(false)\n\n eyeComponent = computed(() => (this.isPasswordOpen() ? this.settings.passwordEyeOpenIcon : this.settings.passwordEyeCloseIcon))\n\n inputType = computed(() => {\n const ctrl = this.control()\n if (!isInputControl(ctrl)) {\n return 'text'\n }\n\n const type = ctrl.type || 'text'\n if (type === 'password' && this.isPasswordOpen()) {\n return 'text'\n }\n\n return type\n })\n\n inputPlaceholder = computed(() => {\n const ctrl = this.control()\n return isInputControl(ctrl) ? (ctrl.placeholder ?? '') : ''\n })\n\n togglePassword() {\n this.isPasswordOpen.set(!this.isPasswordOpen())\n }\n}\n","<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<input\n [class]=\"settings.inputClasses\"\n [id]=\"control().name\"\n [name]=\"control().name\"\n [type]=\"inputType()\"\n [formControlName]=\"control().name\"\n [placeholder]=\"inputPlaceholder()\"\n autocomplete=\"off\" />\n\n@if (control().type === 'password' && eyeComponent()) {\n <button\n type=\"button\"\n [class]=\"settings.passwordIconClasses\"\n (click)=\"togglePassword()\">\n <ng-container [ngComponentOutlet]=\"eyeComponent()!\" />\n </button>\n}\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [controlName]=\"control().name\" />\n</div>\n","import { ChangeDetectionStrategy, Component, computed, effect, signal } from '@angular/core'\nimport { SelectionModel } from '@angular/cdk/collections'\nimport { OverlayModule } from '@angular/cdk/overlay'\nimport { toSignal } from '@angular/core/rxjs-interop'\nimport { from, map, Observable, of, switchMap } from 'rxjs'\nimport { FormControl } from '@angular/forms'\n\nimport { BaseInputComponent, controlDeps } from '../base-input/base-input.component'\nimport { isMultiSelectControl, MultiSelectDropdownControl } from '../../interfaces'\n\n@Component({\n selector: 'multi-select-dropdown',\n imports: [...controlDeps, OverlayModule],\n templateUrl: './multi-select-dropdown.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '(click)': 'open()'\n }\n})\nexport class MultiSelectDropdownComponent<T = Record<string, unknown>> extends BaseInputComponent {\n override formControl = new FormControl(Array.isArray(this.value()) ? this.value() : [], this.validatorFn, this.asyncValidatorFn)\n\n items = toSignal(this.getItems(), { initialValue: [] })\n\n isOpen = signal<boolean>(false)\n\n multipleMode = computed(() => {\n const ctrl = this.control()\n return isMultiSelectControl(ctrl) ? (ctrl.multiple ?? true) : true\n })\n\n selectedOptionsModel = new SelectionModel<T>(this.multipleMode())\n displayOptions = toSignal(this.selectedOptionsModel.changed.pipe(map(() => this.selectedOptionsModel.selected)), { initialValue: [] })\n\n constructor() {\n super()\n\n effect(() => {\n this.setSelectedItems(this.items())\n })\n\n effect(() => {\n const selected = this.displayOptions()\n this.valueHasChanged(selected)\n })\n }\n\n setSelectedItems(items: T[]): void {\n const formControlValue = this.formControl.value\n this.selectedOptionsModel.clear()\n\n if (Array.isArray(formControlValue)) {\n items.forEach(item => {\n if (formControlValue.some((val: string) => this.compareWithFn(item, val))) {\n this.selectedOptionsModel.select(item)\n }\n })\n } else {\n items.forEach(item => {\n if (this.compareWithFn(item, String(formControlValue))) {\n this.selectedOptionsModel.select(item)\n }\n })\n }\n }\n\n getItems(): Observable<T[]> {\n return this.parentForm.valueChanges.pipe(\n switchMap(() => {\n const control = this.control() as MultiSelectDropdownControl<T>\n const itemsFn = control.items\n\n if (!itemsFn) {\n return of([])\n }\n if (Array.isArray(itemsFn)) {\n return of(itemsFn)\n }\n\n const result = itemsFn(this.parentForm)\n\n if (result instanceof Promise) {\n return from(result)\n }\n if (result instanceof Observable) {\n return result\n }\n if (Array.isArray(result)) {\n return of(result)\n }\n return of([])\n })\n )\n }\n\n displayWithFn(item: T): string {\n const control = this.control() as MultiSelectDropdownControl<T>\n\n if (control.itemLabel) {\n return String((item as Record<string, unknown>)[control.itemLabel] ?? '')\n } else {\n return String(item)\n }\n }\n\n compareWithFn(item: T, value: string) {\n const control = this.control() as MultiSelectDropdownControl<T>\n\n if (control.itemValue) {\n const itemValue = (item as Record<string, unknown>)[control.itemValue]\n return itemValue === value\n } else {\n return (item as string) === value\n }\n }\n\n valueHasChanged(items: T[]) {\n const control = this.control() as MultiSelectDropdownControl<T>\n\n const isMultiple = control.multiple !== false\n\n const values = items.map(item => {\n if (!control.itemValue) {\n return item\n }\n return (item as Record<string, unknown>)[control.itemValue]\n })\n\n if (isMultiple) {\n this.formControl.setValue(values, { emitEvent: false })\n } else {\n this.formControl.setValue(values.at(0) ?? null, { emitEvent: false })\n }\n }\n\n open() {\n this.isOpen.set(true)\n }\n\n close() {\n this.isOpen.set(false)\n }\n\n trackByFn(index: number, item: T): unknown {\n const ctrl = this.control() as MultiSelectDropdownControl<T>\n return ctrl.itemValue ? (item as Record<string, unknown>)[ctrl.itemValue] : index\n }\n\n toggleSelection(option: T) {\n this.selectedOptionsModel.toggle(option)\n }\n\n deselectOption(event: MouseEvent, option: T) {\n event.stopPropagation()\n this.selectedOptionsModel.deselect(option)\n }\n}\n","<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<div\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\">\n <div>\n @if (displayOptions().length === 0) {\n <span>{{ settings.multiSelectEmptyText }}</span>\n } @else {\n <div [class]=\"settings.multiSelectDisplayedOptionsClasses\">\n @for (option of displayOptions(); track trackByFn($index, option)) {\n <div [class]=\"settings.multiSelectDisplayedOptionClasses\">\n <span>{{ displayWithFn(option) }}</span>\n <button\n type=\"button\"\n [class]=\"settings.multiSelectControlRemoveButtonClasses\"\n (click)=\"deselectOption($event, option)\">\n @if (settings.multiSelectControlRemoveButtonIcon) {\n <div [class]=\"settings.multiSelectControlRemoveButtonIconClasses\">\n <ng-container [ngComponentOutlet]=\"settings.multiSelectControlRemoveButtonIcon\" />\n </div>\n }\n @if (settings.multiSelectControlRemoveButtonLabel) {\n {{ settings.multiSelectControlRemoveButtonLabel }}\n }\n </button>\n </div>\n }\n </div>\n }\n </div>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\">\n <div [class]=\"settings.multiselectDropdownClasses\">\n @for (option of items(); track trackByFn($index, option)) {\n <div [class]=\"[settings.multiselectDropdownItemClasses, selectedOptionsModel.isSelected(option) ? settings.multiselectDropdownItemSelectedClasses : '']\">\n <label class=\"flex items-center gap-2 cursor-pointer\">\n <input\n [id]=\"control().name + '-option-' + $index\"\n [name]=\"control().name + '-option-' + $index\"\n type=\"checkbox\"\n class=\"rounded border-gray-300 text-blue-600 focus:ring-blue-500\"\n [checked]=\"selectedOptionsModel.isSelected(option)\"\n (change)=\"toggleSelection(option)\"\n [attr.aria-checked]=\"selectedOptionsModel.isSelected(option) ? 'true' : 'false'\"\n [attr.aria-selected]=\"selectedOptionsModel.isSelected(option) ? 'true' : 'false'\"\n role=\"option\" />\n {{ displayWithFn(option) }}\n </label>\n </div>\n }\n </div>\n</ng-template>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [controlName]=\"control().name\" />\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core'\nimport { BaseInputComponent, controlDeps, controlProvider } from '../base-input/base-input.component'\n\n@Component({\n selector: 'radio-field',\n imports: [...controlDeps],\n templateUrl: './radio-field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [controlProvider]\n})\nexport class RadioFieldComponent extends BaseInputComponent {}\n","<label\n [class]=\"settings.labelClasses\"\n [for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<div [class]=\"settings.radioGroupContainerClasses\">\n @for (option of options(); track option.value) {\n <label [class]=\"settings.radioItemWrapperClasses\">\n <input\n [id]=\"control().name + '-' + option.value\"\n [name]=\"control().name\"\n [class]=\"settings.radioItemInputClasses\"\n type=\"radio\"\n [formControlName]=\"control().name\"\n [value]=\"option.value\"\n [attr.aria-checked]=\"formControl.value === option.value ? 'true' : 'false'\" />\n <span [class]=\"settings.radioItemLabelClasses\">{{ option.label }}</span>\n </label>\n }\n</div>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [controlName]=\"control().name\" />\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core'\nimport { BaseInputComponent, controlDeps, controlProvider } from '../base-input/base-input.component'\n\n@Component({\n selector: 'select-field',\n imports: [...controlDeps],\n templateUrl: './select-field.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n viewProviders: [controlProvider]\n})\nexport class SelectFieldComponent extends BaseInputComponent {}\n","<label\n [class]=\"settings.labelClasses\"\n [attr.for]=\"control().name\">\n {{ control().label }}\n</label>\n\n<select\n [class]=\"settings.selectClasses || settings.inputClasses\"\n [id]=\"control().name\"\n [name]=\"control().name\"\n [formControlName]=\"control().name\">\n @for (option of options(); track option.value) {\n <option\n [class]=\"settings.selectOptionClasses\"\n [value]=\"option.value\"\n [selected]=\"option.selected\"\n [disabled]=\"option.disabled\">\n {{ option.label }}\n </option>\n }\n</select>\n\n<div [class]=\"settings.validationFeedbackClasses\">\n <ng-container\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [controlName]=\"control().name\" />\n</div>\n","/*\n * Public API Surface of ngx-dynamic-forms\n */\n\nexport * from './lib/interfaces'\nexport * from './lib/utils'\nexport * from './lib/services'\nexport * from './lib/components'\nexport * from './lib/directives'\nexport * from './lib/pipes'\nexport * from './lib/controls'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.HelpTextDirective","i3","i4.ActivateControlDirective","i5.ControlInjector","startWith","i3.ValidatorMessageDirective","i2","i3.ActivateControlDirective","i4.ControlInjector","map","switchMap"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _angular_forms from '@angular/forms';
|
|
2
|
-
import { Validators, AbstractControl, ValidationErrors, FormGroup, ValidatorFn, FormBuilder, ControlContainer,
|
|
2
|
+
import { Validators, AbstractControl, ValidationErrors, AsyncValidatorFn, FormGroup, ValidatorFn, FormBuilder, ControlContainer, NgForm, FormGroupDirective, ReactiveFormsModule, NonNullableFormBuilder, FormArray, FormControl } from '@angular/forms';
|
|
3
3
|
import * as rxjs from 'rxjs';
|
|
4
4
|
import { Observable, Subscription } from 'rxjs';
|
|
5
5
|
import * as i0 from '@angular/core';
|
|
@@ -11,10 +11,12 @@ import { SelectionModel } from '@angular/cdk/collections';
|
|
|
11
11
|
type ControlType = 'input' | 'group' | 'checkbox' | 'checkbox-group' | 'radio' | 'select' | 'array' | 'multi-select-dropdown' | 'chips-list' | 'autocomplete';
|
|
12
12
|
type InputType = 'text' | 'email' | 'password' | 'number' | 'tel' | 'url' | 'date' | 'time' | 'datetime-local' | 'search';
|
|
13
13
|
type CustomValidator = (control: AbstractControl) => ValidationErrors | null;
|
|
14
|
+
type CustomAsyncValidator = AsyncValidatorFn;
|
|
14
15
|
type ValidatorsKeys = keyof Omit<typeof Validators, 'prototype' | 'compose' | 'composeAsync'>;
|
|
15
16
|
type ValidatorValue = boolean | number | string | RegExp;
|
|
16
17
|
type ControlValidators = Partial<Record<ValidatorsKeys, ValidatorValue>> & {
|
|
17
18
|
customValidation?: CustomValidator | CustomValidator[];
|
|
19
|
+
asyncValidation?: CustomAsyncValidator | CustomAsyncValidator[];
|
|
18
20
|
};
|
|
19
21
|
type Visible = boolean | ((form: FormGroup) => boolean);
|
|
20
22
|
type Options = Option[] | ((form: FormGroup) => Option[] | Promise<Option[]> | Observable<Option[]>);
|
|
@@ -258,7 +260,9 @@ declare const VALIDATION_ERROR_MESSAGES: InjectionToken<Record<string, (args?: V
|
|
|
258
260
|
|
|
259
261
|
declare class ValidatorsService {
|
|
260
262
|
private readonly validatorStrategies;
|
|
263
|
+
private readonly asyncValidatorStrategies;
|
|
261
264
|
resolveValidators({ validators }: Control): ValidatorFn | null;
|
|
265
|
+
resolveAsyncValidators({ validators }: Control): AsyncValidatorFn | null;
|
|
262
266
|
static ɵfac: i0.ɵɵFactoryDeclaration<ValidatorsService, never>;
|
|
263
267
|
static ɵprov: i0.ɵɵInjectableDeclaration<ValidatorsService>;
|
|
264
268
|
}
|
|
@@ -275,9 +279,11 @@ declare class ErrorMessageComponent {
|
|
|
275
279
|
settings: superlikers_dynamic_forms.Settings;
|
|
276
280
|
errorsMap: Record<string, (args?: Record<string, unknown> | undefined) => string>;
|
|
277
281
|
errors: i0.InputSignal<ValidationErrors | undefined>;
|
|
282
|
+
pending: i0.InputSignal<boolean>;
|
|
283
|
+
getPendingMessage(): string;
|
|
278
284
|
getError(error: KeyValue<string, unknown>): string | undefined;
|
|
279
285
|
static ɵfac: i0.ɵɵFactoryDeclaration<ErrorMessageComponent, never>;
|
|
280
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ErrorMessageComponent, "error-message", never, { "errors": { "alias": "errors"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
286
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ErrorMessageComponent, "error-message", never, { "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "pending": { "alias": "pending"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
281
287
|
}
|
|
282
288
|
|
|
283
289
|
declare class FieldsComponent {
|
|
@@ -321,7 +327,7 @@ declare class HelpTextDirective implements OnInit {
|
|
|
321
327
|
}
|
|
322
328
|
|
|
323
329
|
declare class ValidatorMessageDirective implements OnInit, OnDestroy {
|
|
324
|
-
|
|
330
|
+
controlName: i0.InputSignal<string | undefined>;
|
|
325
331
|
elementRef: ElementRef<any>;
|
|
326
332
|
vcr: ViewContainerRef;
|
|
327
333
|
parentContainer: ControlContainer | null;
|
|
@@ -329,9 +335,10 @@ declare class ValidatorMessageDirective implements OnInit, OnDestroy {
|
|
|
329
335
|
get form(): NgForm | FormGroupDirective | null;
|
|
330
336
|
controlSubscription: Subscription;
|
|
331
337
|
ngOnInit(): void;
|
|
338
|
+
private getControl;
|
|
332
339
|
ngOnDestroy(): void;
|
|
333
340
|
static ɵfac: i0.ɵɵFactoryDeclaration<ValidatorMessageDirective, never>;
|
|
334
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<ValidatorMessageDirective, "[validatorMessage]", never, {}, {}, never, never, true, never>;
|
|
341
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<ValidatorMessageDirective, "[validatorMessage]", never, { "controlName": { "alias": "controlName"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
335
342
|
}
|
|
336
343
|
|
|
337
344
|
declare class ControlInjector implements PipeTransform {
|
|
@@ -352,6 +359,7 @@ declare class BaseInputComponent implements OnInit {
|
|
|
352
359
|
protected control: i0.Signal<superlikers_dynamic_forms.Control>;
|
|
353
360
|
protected value: i0.Signal<unknown>;
|
|
354
361
|
protected validatorFn: _angular_forms.ValidatorFn | null;
|
|
362
|
+
protected asyncValidatorFn: _angular_forms.AsyncValidatorFn | null;
|
|
355
363
|
formControl: AbstractControl;
|
|
356
364
|
parentForm: FormGroup;
|
|
357
365
|
protected formValue: i0.Signal<any>;
|