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, NgControl, ControlContainer, FormBuilder, ReactiveFormsModule, FormControl, NonNullableFormBuilder, FormArray } from '@angular/forms';
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.ngControl = inject(NgControl, { self: true });
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.ngControl.control;
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
- if (control.errors && (control.touched || this.form?.submitted)) {
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.unsubscribe();
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: "14.0.0", version: "21.0.6", type: ValidatorMessageDirective, isStandalone: true, selector: "[validatorMessage]", ngImport: i0 }); }
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.formControl = new FormControl(this.value(), this.validatorFn);
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 ngDefaultControl\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [formControlName]=\"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: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: HelpTextDirective, selector: "[helpMessage]", inputs: ["helpMessage"] }, { kind: "directive", type: ValidatorMessageDirective, selector: "[validatorMessage]" }, { 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 }); }
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 ngDefaultControl\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [formControlName]=\"control().name\" />\n</div>\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 ngDefaultControl\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [formControlName]=\"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.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]" }], viewProviders: [controlProvider], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
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 ngDefaultControl\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [formControlName]=\"control().name\" />\n</div>\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 ngDefaultControl\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [formControlName]=\"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]" }], viewProviders: [controlProvider], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
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 ngDefaultControl\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [formControlName]=\"control().name\" />\n</div>\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 ngDefaultControl\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [formControl]=\"formControl\" />\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]" }, { kind: "directive", type: i4.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
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 ngDefaultControl\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [formControl]=\"formControl\" />\n</div>\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 ngDefaultControl\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [formControlName]=\"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]" }, { kind: "directive", type: i4.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }], viewProviders: [controlProvider], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
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 ngDefaultControl\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [formControlName]=\"control().name\" />\n</div>\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 ngDefaultControl\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [formControl]=\"formControl\" />\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]" }, { 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 }); }
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 ngDefaultControl\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [formControl]=\"formControl\" />\n</div>\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 ngDefaultControl\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [formControlName]=\"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]" }], viewProviders: [controlProvider], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
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 ngDefaultControl\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [formControlName]=\"control().name\" />\n</div>\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 ngDefaultControl\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [formControlName]=\"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.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.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]" }], viewProviders: [controlProvider], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
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 ngDefaultControl\n validatorMessage\n [helpMessage]=\"control().helpText\"\n [formControlName]=\"control().name\" />\n</div>\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,6 +1,6 @@
1
1
  {
2
2
  "name": "superlikers-dynamic-forms",
3
- "version": "1.0.6",
3
+ "version": "1.1.7",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^21.0.6",
6
6
  "@angular/core": "^21.0.6"
@@ -1,5 +1,5 @@
1
1
  import * as _angular_forms from '@angular/forms';
2
- import { Validators, AbstractControl, ValidationErrors, FormGroup, ValidatorFn, FormBuilder, ControlContainer, NgControl, NgForm, FormGroupDirective, ReactiveFormsModule, NonNullableFormBuilder, FormArray, FormControl } from '@angular/forms';
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
- ngControl: NgControl;
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>;