@ng-forge/dynamic-forms-ionic 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,10 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, input, computed, ChangeDetectionStrategy, Component, signal, InjectionToken, Pipe, linkedSignal, model, isSignal } from '@angular/core';
2
+ import { inject, input, computed, ChangeDetectionStrategy, Component, signal, InjectionToken, linkedSignal, model, isSignal } from '@angular/core';
3
3
  import { IonButton, IonCheckbox, IonNote, IonInput, IonModal, IonDatetime, IonButtons, IonHeader, IonContent, IonToolbar, IonTitle, IonItem, IonRadioGroup, IonRadio, IonSelect, IonSelectOption, IonRange, IonTextarea, IonToggle } from '@ionic/angular/standalone';
4
- import { EventBus, ARRAY_CONTEXT, resolveTokens, DynamicTextPipe, createResolvedErrorsSignal, shouldShowErrors, buildBaseInputs, FIELD_SIGNAL_CONTEXT, resolveSubmitButtonDisabled, resolveNextButtonDisabled, NextPageEvent, PreviousPageEvent, AddArrayItemEvent, RemoveArrayItemEvent, valueFieldMapper, optionsFieldMapper, checkboxFieldMapper, datepickerFieldMapper } from '@ng-forge/dynamic-forms';
4
+ import { EventBus, ARRAY_CONTEXT, resolveTokens, DynamicTextPipe, buildBaseInputs, FIELD_SIGNAL_CONTEXT, resolveSubmitButtonDisabled, resolveNextButtonDisabled, NextPageEvent, PreviousPageEvent, DynamicFormLogger, AddArrayItemEvent, RemoveArrayItemEvent } from '@ng-forge/dynamic-forms';
5
5
  import { AsyncPipe } from '@angular/common';
6
6
  import { Field } from '@angular/forms/signals';
7
+ import { createResolvedErrorsSignal, shouldShowErrors, isEqual, ValueInArrayPipe, valueFieldMapper, optionsFieldMapper, checkboxFieldMapper, datepickerFieldMapper } from '@ng-forge/dynamic-forms/integration';
7
8
  import { format } from 'date-fns';
8
9
  import { explicitEffect } from 'ngxtension/explicit-effect';
9
10
 
@@ -63,8 +64,8 @@ class IonicButtonFieldComponent {
63
64
  this.eventBus.dispatch(event);
64
65
  }
65
66
  }
66
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: IonicButtonFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
67
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.5", type: IonicButtonFieldComponent, isStandalone: true, selector: "df-ionic-button", inputs: { key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, hidden: { classPropertyName: "hidden", publicName: "hidden", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, event: { classPropertyName: "event", publicName: "event", isSignal: true, isRequired: false, transformFunction: null }, eventArgs: { classPropertyName: "eventArgs", publicName: "eventArgs", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, eventContext: { classPropertyName: "eventContext", publicName: "eventContext", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "id": "`${key()}`", "attr.data-testid": "key()" } }, ngImport: i0, template: `
67
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: IonicButtonFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
68
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.6", type: IonicButtonFieldComponent, isStandalone: true, selector: "df-ionic-button", inputs: { key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, hidden: { classPropertyName: "hidden", publicName: "hidden", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, event: { classPropertyName: "event", publicName: "event", isSignal: true, isRequired: false, transformFunction: null }, eventArgs: { classPropertyName: "eventArgs", publicName: "eventArgs", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, eventContext: { classPropertyName: "eventContext", publicName: "eventContext", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "id": "`${key()}`", "attr.data-testid": "key()" } }, ngImport: i0, template: `
68
69
  <ion-button
69
70
  [type]="buttonType()"
70
71
  [expand]="props()?.expand"
@@ -82,7 +83,7 @@ class IonicButtonFieldComponent {
82
83
  </ion-button>
83
84
  `, isInline: true, dependencies: [{ kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
84
85
  }
85
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: IonicButtonFieldComponent, decorators: [{
86
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: IonicButtonFieldComponent, decorators: [{
86
87
  type: Component,
87
88
  args: [{
88
89
  selector: 'df-ionic-button',
@@ -147,8 +148,8 @@ class IonicCheckboxFieldComponent {
147
148
  isRequired = computed(() => {
148
149
  return this.field()().required?.() === true;
149
150
  }, ...(ngDevMode ? [{ debugName: "isRequired" }] : []));
150
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: IonicCheckboxFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
151
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.5", type: IonicCheckboxFieldComponent, isStandalone: true, selector: "df-ionic-checkbox", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "className()", "id": "`${key()}`", "attr.data-testid": "key()", "attr.hidden": "field()().hidden() || null" } }, ngImport: i0, template: `
151
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: IonicCheckboxFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
152
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: IonicCheckboxFieldComponent, isStandalone: true, selector: "df-ionic-checkbox", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "className()", "id": "`${key()}`", "attr.data-testid": "key()", "attr.hidden": "field()().hidden() || null" } }, ngImport: i0, template: `
152
153
  @let f = field();
153
154
 
154
155
  <ion-checkbox
@@ -169,7 +170,7 @@ class IonicCheckboxFieldComponent {
169
170
  }
170
171
  `, isInline: true, styles: [":host{display:block}:host([hidden]){display:none!important}\n"], dependencies: [{ kind: "component", type: IonCheckbox, selector: "ion-checkbox", inputs: ["checked", "color", "disabled", "errorText", "helperText", "indeterminate", "justify", "labelPlacement", "mode", "name", "value"] }, { kind: "component", type: IonNote, selector: "ion-note", inputs: ["color", "mode"] }, { kind: "directive", type: Field, selector: "[field]", inputs: ["field"] }, { kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
171
172
  }
172
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: IonicCheckboxFieldComponent, decorators: [{
173
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: IonicCheckboxFieldComponent, decorators: [{
173
174
  type: Component,
174
175
  args: [{ selector: 'df-ionic-checkbox', imports: [IonCheckbox, IonNote, Field, DynamicTextPipe, AsyncPipe], template: `
175
176
  @let f = field();
@@ -278,8 +279,8 @@ class IonicDatepickerFieldComponent {
278
279
  return format(date, 'MMM d, yyyy');
279
280
  }
280
281
  }
281
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: IonicDatepickerFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
282
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.5", type: IonicDatepickerFieldComponent, isStandalone: true, selector: "df-ionic-datepicker", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null }, startAt: { classPropertyName: "startAt", publicName: "startAt", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "id": "`${key()}`", "attr.data-testid": "key()", "class": "className()", "attr.hidden": "field()().hidden() || null" } }, ngImport: i0, template: `
282
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: IonicDatepickerFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
283
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: IonicDatepickerFieldComponent, isStandalone: true, selector: "df-ionic-datepicker", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null }, startAt: { classPropertyName: "startAt", publicName: "startAt", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "id": "`${key()}`", "attr.data-testid": "key()", "class": "className()", "attr.hidden": "field()().hidden() || null" } }, ngImport: i0, template: `
283
284
  @let f = field(); @let dateValue = f().value();
284
285
 
285
286
  <ion-input
@@ -335,7 +336,7 @@ class IonicDatepickerFieldComponent {
335
336
  </ion-modal>
336
337
  `, isInline: true, styles: ["ion-input{cursor:pointer}:host([hidden]){display:none!important}\n"], dependencies: [{ kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: IonModal, selector: "ion-modal" }, { kind: "component", type: IonDatetime, selector: "ion-datetime", inputs: ["cancelText", "clearText", "color", "dayValues", "disabled", "doneText", "firstDayOfWeek", "formatOptions", "highlightedDates", "hourCycle", "hourValues", "isDateEnabled", "locale", "max", "min", "minuteValues", "mode", "monthValues", "multiple", "name", "preferWheel", "presentation", "readonly", "showAdjacentDays", "showClearButton", "showDefaultButtons", "showDefaultTimeLabel", "showDefaultTitle", "size", "titleSelectedDatesFormatter", "value", "yearValues"] }, { kind: "component", type: IonNote, selector: "ion-note", inputs: ["color", "mode"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
337
338
  }
338
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: IonicDatepickerFieldComponent, decorators: [{
339
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: IonicDatepickerFieldComponent, decorators: [{
339
340
  type: Component,
340
341
  args: [{ selector: 'df-ionic-datepicker', imports: [
341
342
  IonInput,
@@ -472,361 +473,73 @@ class IonicInputFieldComponent {
472
473
  isRequired = computed(() => {
473
474
  return this.field()().required?.() === true;
474
475
  }, ...(ngDevMode ? [{ debugName: "isRequired" }] : []));
475
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: IonicInputFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
476
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.5", type: IonicInputFieldComponent, isStandalone: true, selector: "df-ionic-input", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "id": "`${key()}`", "attr.data-testid": "key()", "class": "className()", "attr.hidden": "field()().hidden() || null" } }, ngImport: i0, template: `
476
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: IonicInputFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
477
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: IonicInputFieldComponent, isStandalone: true, selector: "df-ionic-input", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "id": "`${key()}`", "attr.data-testid": "key()", "class": "className()", "attr.hidden": "field()().hidden() || null" } }, ngImport: i0, template: `
477
478
  @let f = field();
478
479
  @let ariaInvalid = isAriaInvalid();
479
480
  @let ariaRequired = isRequired() || null;
480
481
 
481
- @switch (props()?.type ?? 'text') {
482
- @case ('email') {
483
- <ion-input
484
- type="email"
485
- [field]="f"
486
- [label]="(label() | dynamicText | async) ?? undefined"
487
- [labelPlacement]="effectiveLabelPlacement()"
488
- [placeholder]="(placeholder() | dynamicText | async) ?? ''"
489
- [clearInput]="props()?.clearInput ?? false"
490
- [counter]="props()?.counter ?? false"
491
- [color]="effectiveColor()"
492
- [fill]="effectiveFill()"
493
- [shape]="effectiveShape()"
494
- [readonly]="f().readonly()"
495
- [helperText]="(props()?.helperText | dynamicText | async) ?? undefined"
496
- [errorText]="f().invalid() && f().touched() ? ((props()?.errorText | dynamicText | async) ?? undefined) : undefined"
497
- [attr.tabindex]="tabIndex()"
498
- [attr.aria-invalid]="ariaInvalid"
499
- [attr.aria-required]="ariaRequired"
500
- [class.ion-invalid]="f().invalid()"
501
- [class.ion-touched]="f().touched()"
502
- >
503
- <div slot="error">
504
- @for (error of errorsToDisplay(); track error.kind; let i = $index) {
505
- <ion-note color="danger" [id]="errorId() + '-' + i" role="alert">{{ error.message }}</ion-note>
506
- }
507
- </div>
508
- </ion-input>
509
- }
510
- @case ('password') {
511
- <ion-input
512
- type="password"
513
- [field]="f"
514
- [label]="(label() | dynamicText | async) ?? undefined"
515
- [labelPlacement]="effectiveLabelPlacement()"
516
- [placeholder]="(placeholder() | dynamicText | async) ?? ''"
517
- [clearInput]="props()?.clearInput ?? false"
518
- [counter]="props()?.counter ?? false"
519
- [color]="effectiveColor()"
520
- [fill]="effectiveFill()"
521
- [shape]="effectiveShape()"
522
- [readonly]="f().readonly()"
523
- [helperText]="(props()?.helperText | dynamicText | async) ?? undefined"
524
- [errorText]="f().invalid() && f().touched() ? ((props()?.errorText | dynamicText | async) ?? undefined) : undefined"
525
- [attr.tabindex]="tabIndex()"
526
- [attr.aria-invalid]="ariaInvalid"
527
- [attr.aria-required]="ariaRequired"
528
- [class.ion-invalid]="f().invalid()"
529
- [class.ion-touched]="f().touched()"
530
- >
531
- <div slot="error">
532
- @for (error of errorsToDisplay(); track error.kind; let i = $index) {
533
- <ion-note color="danger" [id]="errorId() + '-' + i" role="alert">{{ error.message }}</ion-note>
534
- }
535
- </div>
536
- </ion-input>
537
- }
538
- @case ('number') {
539
- <ion-input
540
- type="number"
541
- [field]="f"
542
- [label]="(label() | dynamicText | async) ?? undefined"
543
- [labelPlacement]="effectiveLabelPlacement()"
544
- [placeholder]="(placeholder() | dynamicText | async) ?? ''"
545
- [clearInput]="props()?.clearInput ?? false"
546
- [counter]="props()?.counter ?? false"
547
- [color]="effectiveColor()"
548
- [fill]="effectiveFill()"
549
- [shape]="effectiveShape()"
550
- [readonly]="f().readonly()"
551
- [helperText]="(props()?.helperText | dynamicText | async) ?? undefined"
552
- [errorText]="f().invalid() && f().touched() ? ((props()?.errorText | dynamicText | async) ?? undefined) : undefined"
553
- [attr.tabindex]="tabIndex()"
554
- [attr.aria-invalid]="ariaInvalid"
555
- [attr.aria-required]="ariaRequired"
556
- [class.ion-invalid]="f().invalid()"
557
- [class.ion-touched]="f().touched()"
558
- >
559
- <div slot="error">
560
- @for (error of errorsToDisplay(); track error.kind; let i = $index) {
561
- <ion-note color="danger" [id]="errorId() + '-' + i" role="alert">{{ error.message }}</ion-note>
562
- }
563
- </div>
564
- </ion-input>
565
- }
566
- @case ('tel') {
567
- <ion-input
568
- type="tel"
569
- [field]="f"
570
- [label]="(label() | dynamicText | async) ?? undefined"
571
- [labelPlacement]="effectiveLabelPlacement()"
572
- [placeholder]="(placeholder() | dynamicText | async) ?? ''"
573
- [clearInput]="props()?.clearInput ?? false"
574
- [counter]="props()?.counter ?? false"
575
- [color]="effectiveColor()"
576
- [fill]="effectiveFill()"
577
- [shape]="effectiveShape()"
578
- [readonly]="f().readonly()"
579
- [helperText]="(props()?.helperText | dynamicText | async) ?? undefined"
580
- [errorText]="f().invalid() && f().touched() ? ((props()?.errorText | dynamicText | async) ?? undefined) : undefined"
581
- [attr.tabindex]="tabIndex()"
582
- [attr.aria-invalid]="ariaInvalid"
583
- [attr.aria-required]="ariaRequired"
584
- [class.ion-invalid]="f().invalid()"
585
- [class.ion-touched]="f().touched()"
586
- >
587
- <div slot="error">
588
- @for (error of errorsToDisplay(); track error.kind; let i = $index) {
589
- <ion-note color="danger" [id]="errorId() + '-' + i" role="alert">{{ error.message }}</ion-note>
590
- }
591
- </div>
592
- </ion-input>
593
- }
594
- @case ('url') {
595
- <ion-input
596
- type="url"
597
- [field]="f"
598
- [label]="(label() | dynamicText | async) ?? undefined"
599
- [labelPlacement]="effectiveLabelPlacement()"
600
- [placeholder]="(placeholder() | dynamicText | async) ?? ''"
601
- [clearInput]="props()?.clearInput ?? false"
602
- [counter]="props()?.counter ?? false"
603
- [color]="effectiveColor()"
604
- [fill]="effectiveFill()"
605
- [shape]="effectiveShape()"
606
- [readonly]="f().readonly()"
607
- [helperText]="(props()?.helperText | dynamicText | async) ?? undefined"
608
- [errorText]="f().invalid() && f().touched() ? ((props()?.errorText | dynamicText | async) ?? undefined) : undefined"
609
- [attr.tabindex]="tabIndex()"
610
- [attr.aria-invalid]="ariaInvalid"
611
- [attr.aria-required]="ariaRequired"
612
- [class.ion-invalid]="f().invalid()"
613
- [class.ion-touched]="f().touched()"
614
- >
615
- <div slot="error">
616
- @for (error of errorsToDisplay(); track error.kind; let i = $index) {
617
- <ion-note color="danger" [id]="errorId() + '-' + i" role="alert">{{ error.message }}</ion-note>
618
- }
619
- </div>
620
- </ion-input>
621
- }
622
- @default {
623
- <ion-input
624
- type="text"
625
- [field]="f"
626
- [label]="(label() | dynamicText | async) ?? undefined"
627
- [labelPlacement]="effectiveLabelPlacement()"
628
- [placeholder]="(placeholder() | dynamicText | async) ?? ''"
629
- [clearInput]="props()?.clearInput ?? false"
630
- [counter]="props()?.counter ?? false"
631
- [color]="effectiveColor()"
632
- [fill]="effectiveFill()"
633
- [shape]="effectiveShape()"
634
- [readonly]="f().readonly()"
635
- [helperText]="(props()?.helperText | dynamicText | async) ?? undefined"
636
- [errorText]="f().invalid() && f().touched() ? ((props()?.errorText | dynamicText | async) ?? undefined) : undefined"
637
- [attr.tabindex]="tabIndex()"
638
- [attr.aria-invalid]="ariaInvalid"
639
- [attr.aria-required]="ariaRequired"
640
- [class.ion-invalid]="f().invalid()"
641
- [class.ion-touched]="f().touched()"
642
- >
643
- <div slot="error">
644
- @for (error of errorsToDisplay(); track error.kind; let i = $index) {
645
- <ion-note color="danger" [id]="errorId() + '-' + i" role="alert">{{ error.message }}</ion-note>
646
- }
647
- </div>
648
- </ion-input>
649
- }
650
- }
482
+ <ion-input
483
+ [type]="props()?.type ?? 'text'"
484
+ [field]="f"
485
+ [label]="(label() | dynamicText | async) ?? undefined"
486
+ [labelPlacement]="effectiveLabelPlacement()"
487
+ [placeholder]="(placeholder() | dynamicText | async) ?? ''"
488
+ [clearInput]="props()?.clearInput ?? false"
489
+ [counter]="props()?.counter ?? false"
490
+ [color]="effectiveColor()"
491
+ [fill]="effectiveFill()"
492
+ [shape]="effectiveShape()"
493
+ [readonly]="f().readonly()"
494
+ [helperText]="(props()?.helperText | dynamicText | async) ?? undefined"
495
+ [errorText]="f().invalid() && f().touched() ? ((props()?.errorText | dynamicText | async) ?? undefined) : undefined"
496
+ [attr.tabindex]="tabIndex()"
497
+ [attr.aria-invalid]="ariaInvalid"
498
+ [attr.aria-required]="ariaRequired"
499
+ [class.ion-invalid]="f().invalid()"
500
+ [class.ion-touched]="f().touched()"
501
+ >
502
+ <div slot="error">
503
+ @for (error of errorsToDisplay(); track error.kind; let i = $index) {
504
+ <ion-note color="danger" [id]="errorId() + '-' + i" role="alert">{{ error.message }}</ion-note>
505
+ }
506
+ </div>
507
+ </ion-input>
651
508
  `, isInline: true, styles: [":host([hidden]){display:none!important}\n"], dependencies: [{ kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: IonNote, selector: "ion-note", inputs: ["color", "mode"] }, { kind: "directive", type: Field, selector: "[field]", inputs: ["field"] }, { kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
652
509
  }
653
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: IonicInputFieldComponent, decorators: [{
510
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: IonicInputFieldComponent, decorators: [{
654
511
  type: Component,
655
512
  args: [{ selector: 'df-ionic-input', imports: [IonInput, IonNote, Field, DynamicTextPipe, AsyncPipe], template: `
656
513
  @let f = field();
657
514
  @let ariaInvalid = isAriaInvalid();
658
515
  @let ariaRequired = isRequired() || null;
659
516
 
660
- @switch (props()?.type ?? 'text') {
661
- @case ('email') {
662
- <ion-input
663
- type="email"
664
- [field]="f"
665
- [label]="(label() | dynamicText | async) ?? undefined"
666
- [labelPlacement]="effectiveLabelPlacement()"
667
- [placeholder]="(placeholder() | dynamicText | async) ?? ''"
668
- [clearInput]="props()?.clearInput ?? false"
669
- [counter]="props()?.counter ?? false"
670
- [color]="effectiveColor()"
671
- [fill]="effectiveFill()"
672
- [shape]="effectiveShape()"
673
- [readonly]="f().readonly()"
674
- [helperText]="(props()?.helperText | dynamicText | async) ?? undefined"
675
- [errorText]="f().invalid() && f().touched() ? ((props()?.errorText | dynamicText | async) ?? undefined) : undefined"
676
- [attr.tabindex]="tabIndex()"
677
- [attr.aria-invalid]="ariaInvalid"
678
- [attr.aria-required]="ariaRequired"
679
- [class.ion-invalid]="f().invalid()"
680
- [class.ion-touched]="f().touched()"
681
- >
682
- <div slot="error">
683
- @for (error of errorsToDisplay(); track error.kind; let i = $index) {
684
- <ion-note color="danger" [id]="errorId() + '-' + i" role="alert">{{ error.message }}</ion-note>
685
- }
686
- </div>
687
- </ion-input>
688
- }
689
- @case ('password') {
690
- <ion-input
691
- type="password"
692
- [field]="f"
693
- [label]="(label() | dynamicText | async) ?? undefined"
694
- [labelPlacement]="effectiveLabelPlacement()"
695
- [placeholder]="(placeholder() | dynamicText | async) ?? ''"
696
- [clearInput]="props()?.clearInput ?? false"
697
- [counter]="props()?.counter ?? false"
698
- [color]="effectiveColor()"
699
- [fill]="effectiveFill()"
700
- [shape]="effectiveShape()"
701
- [readonly]="f().readonly()"
702
- [helperText]="(props()?.helperText | dynamicText | async) ?? undefined"
703
- [errorText]="f().invalid() && f().touched() ? ((props()?.errorText | dynamicText | async) ?? undefined) : undefined"
704
- [attr.tabindex]="tabIndex()"
705
- [attr.aria-invalid]="ariaInvalid"
706
- [attr.aria-required]="ariaRequired"
707
- [class.ion-invalid]="f().invalid()"
708
- [class.ion-touched]="f().touched()"
709
- >
710
- <div slot="error">
711
- @for (error of errorsToDisplay(); track error.kind; let i = $index) {
712
- <ion-note color="danger" [id]="errorId() + '-' + i" role="alert">{{ error.message }}</ion-note>
713
- }
714
- </div>
715
- </ion-input>
716
- }
717
- @case ('number') {
718
- <ion-input
719
- type="number"
720
- [field]="f"
721
- [label]="(label() | dynamicText | async) ?? undefined"
722
- [labelPlacement]="effectiveLabelPlacement()"
723
- [placeholder]="(placeholder() | dynamicText | async) ?? ''"
724
- [clearInput]="props()?.clearInput ?? false"
725
- [counter]="props()?.counter ?? false"
726
- [color]="effectiveColor()"
727
- [fill]="effectiveFill()"
728
- [shape]="effectiveShape()"
729
- [readonly]="f().readonly()"
730
- [helperText]="(props()?.helperText | dynamicText | async) ?? undefined"
731
- [errorText]="f().invalid() && f().touched() ? ((props()?.errorText | dynamicText | async) ?? undefined) : undefined"
732
- [attr.tabindex]="tabIndex()"
733
- [attr.aria-invalid]="ariaInvalid"
734
- [attr.aria-required]="ariaRequired"
735
- [class.ion-invalid]="f().invalid()"
736
- [class.ion-touched]="f().touched()"
737
- >
738
- <div slot="error">
739
- @for (error of errorsToDisplay(); track error.kind; let i = $index) {
740
- <ion-note color="danger" [id]="errorId() + '-' + i" role="alert">{{ error.message }}</ion-note>
741
- }
742
- </div>
743
- </ion-input>
744
- }
745
- @case ('tel') {
746
- <ion-input
747
- type="tel"
748
- [field]="f"
749
- [label]="(label() | dynamicText | async) ?? undefined"
750
- [labelPlacement]="effectiveLabelPlacement()"
751
- [placeholder]="(placeholder() | dynamicText | async) ?? ''"
752
- [clearInput]="props()?.clearInput ?? false"
753
- [counter]="props()?.counter ?? false"
754
- [color]="effectiveColor()"
755
- [fill]="effectiveFill()"
756
- [shape]="effectiveShape()"
757
- [readonly]="f().readonly()"
758
- [helperText]="(props()?.helperText | dynamicText | async) ?? undefined"
759
- [errorText]="f().invalid() && f().touched() ? ((props()?.errorText | dynamicText | async) ?? undefined) : undefined"
760
- [attr.tabindex]="tabIndex()"
761
- [attr.aria-invalid]="ariaInvalid"
762
- [attr.aria-required]="ariaRequired"
763
- [class.ion-invalid]="f().invalid()"
764
- [class.ion-touched]="f().touched()"
765
- >
766
- <div slot="error">
767
- @for (error of errorsToDisplay(); track error.kind; let i = $index) {
768
- <ion-note color="danger" [id]="errorId() + '-' + i" role="alert">{{ error.message }}</ion-note>
769
- }
770
- </div>
771
- </ion-input>
772
- }
773
- @case ('url') {
774
- <ion-input
775
- type="url"
776
- [field]="f"
777
- [label]="(label() | dynamicText | async) ?? undefined"
778
- [labelPlacement]="effectiveLabelPlacement()"
779
- [placeholder]="(placeholder() | dynamicText | async) ?? ''"
780
- [clearInput]="props()?.clearInput ?? false"
781
- [counter]="props()?.counter ?? false"
782
- [color]="effectiveColor()"
783
- [fill]="effectiveFill()"
784
- [shape]="effectiveShape()"
785
- [readonly]="f().readonly()"
786
- [helperText]="(props()?.helperText | dynamicText | async) ?? undefined"
787
- [errorText]="f().invalid() && f().touched() ? ((props()?.errorText | dynamicText | async) ?? undefined) : undefined"
788
- [attr.tabindex]="tabIndex()"
789
- [attr.aria-invalid]="ariaInvalid"
790
- [attr.aria-required]="ariaRequired"
791
- [class.ion-invalid]="f().invalid()"
792
- [class.ion-touched]="f().touched()"
793
- >
794
- <div slot="error">
795
- @for (error of errorsToDisplay(); track error.kind; let i = $index) {
796
- <ion-note color="danger" [id]="errorId() + '-' + i" role="alert">{{ error.message }}</ion-note>
797
- }
798
- </div>
799
- </ion-input>
800
- }
801
- @default {
802
- <ion-input
803
- type="text"
804
- [field]="f"
805
- [label]="(label() | dynamicText | async) ?? undefined"
806
- [labelPlacement]="effectiveLabelPlacement()"
807
- [placeholder]="(placeholder() | dynamicText | async) ?? ''"
808
- [clearInput]="props()?.clearInput ?? false"
809
- [counter]="props()?.counter ?? false"
810
- [color]="effectiveColor()"
811
- [fill]="effectiveFill()"
812
- [shape]="effectiveShape()"
813
- [readonly]="f().readonly()"
814
- [helperText]="(props()?.helperText | dynamicText | async) ?? undefined"
815
- [errorText]="f().invalid() && f().touched() ? ((props()?.errorText | dynamicText | async) ?? undefined) : undefined"
816
- [attr.tabindex]="tabIndex()"
817
- [attr.aria-invalid]="ariaInvalid"
818
- [attr.aria-required]="ariaRequired"
819
- [class.ion-invalid]="f().invalid()"
820
- [class.ion-touched]="f().touched()"
821
- >
822
- <div slot="error">
823
- @for (error of errorsToDisplay(); track error.kind; let i = $index) {
824
- <ion-note color="danger" [id]="errorId() + '-' + i" role="alert">{{ error.message }}</ion-note>
825
- }
826
- </div>
827
- </ion-input>
828
- }
829
- }
517
+ <ion-input
518
+ [type]="props()?.type ?? 'text'"
519
+ [field]="f"
520
+ [label]="(label() | dynamicText | async) ?? undefined"
521
+ [labelPlacement]="effectiveLabelPlacement()"
522
+ [placeholder]="(placeholder() | dynamicText | async) ?? ''"
523
+ [clearInput]="props()?.clearInput ?? false"
524
+ [counter]="props()?.counter ?? false"
525
+ [color]="effectiveColor()"
526
+ [fill]="effectiveFill()"
527
+ [shape]="effectiveShape()"
528
+ [readonly]="f().readonly()"
529
+ [helperText]="(props()?.helperText | dynamicText | async) ?? undefined"
530
+ [errorText]="f().invalid() && f().touched() ? ((props()?.errorText | dynamicText | async) ?? undefined) : undefined"
531
+ [attr.tabindex]="tabIndex()"
532
+ [attr.aria-invalid]="ariaInvalid"
533
+ [attr.aria-required]="ariaRequired"
534
+ [class.ion-invalid]="f().invalid()"
535
+ [class.ion-touched]="f().touched()"
536
+ >
537
+ <div slot="error">
538
+ @for (error of errorsToDisplay(); track error.kind; let i = $index) {
539
+ <ion-note color="danger" [id]="errorId() + '-' + i" role="alert">{{ error.message }}</ion-note>
540
+ }
541
+ </div>
542
+ </ion-input>
830
543
  `, changeDetection: ChangeDetectionStrategy.OnPush, host: {
831
544
  '[id]': '`${key()}`',
832
545
  '[attr.data-testid]': 'key()',
@@ -840,49 +553,6 @@ var ionicInput_component = /*#__PURE__*/Object.freeze({
840
553
  default: IonicInputFieldComponent
841
554
  });
842
555
 
843
- class ValueInArrayPipe {
844
- transform(element, array) {
845
- return array?.includes(element) ?? false;
846
- }
847
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: ValueInArrayPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
848
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.5", ngImport: i0, type: ValueInArrayPipe, isStandalone: true, name: "inArray" });
849
- }
850
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: ValueInArrayPipe, decorators: [{
851
- type: Pipe,
852
- args: [{
853
- pure: true,
854
- name: 'inArray',
855
- }]
856
- }] });
857
-
858
- /**
859
- * Performs a deep equality comparison between two values
860
- */
861
- function isEqual(a, b) {
862
- if (a === b)
863
- return true;
864
- if (a == null || b == null)
865
- return false;
866
- if (typeof a !== typeof b)
867
- return false;
868
- if (a instanceof Date && b instanceof Date) {
869
- return a.getTime() === b.getTime();
870
- }
871
- if (Array.isArray(a) && Array.isArray(b)) {
872
- if (a.length !== b.length)
873
- return false;
874
- return a.every((item, index) => isEqual(item, b[index]));
875
- }
876
- if (typeof a === 'object' && typeof b === 'object') {
877
- const keysA = Object.keys(a);
878
- const keysB = Object.keys(b);
879
- if (keysA.length !== keysB.length)
880
- return false;
881
- return keysA.every((key) => keysB.includes(key) && isEqual(a[key], b[key]));
882
- }
883
- return Object.is(a, b);
884
- }
885
-
886
556
  class IonicMultiCheckboxFieldComponent {
887
557
  field = input.required(...(ngDevMode ? [{ debugName: "field" }] : []));
888
558
  key = input.required(...(ngDevMode ? [{ debugName: "key" }] : []));
@@ -941,8 +611,8 @@ class IonicMultiCheckboxFieldComponent {
941
611
  }
942
612
  });
943
613
  }
944
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: IonicMultiCheckboxFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
945
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.5", type: IonicMultiCheckboxFieldComponent, isStandalone: true, selector: "df-ionic-multi-checkbox", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "className() || \"\"", "id": "`${key()}`", "attr.data-testid": "key()", "attr.hidden": "field()().hidden() || null" } }, providers: [ValueInArrayPipe], ngImport: i0, template: `
614
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: IonicMultiCheckboxFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
615
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: IonicMultiCheckboxFieldComponent, isStandalone: true, selector: "df-ionic-multi-checkbox", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "className() || \"\"", "id": "`${key()}`", "attr.data-testid": "key()", "attr.hidden": "field()().hidden() || null" } }, providers: [ValueInArrayPipe], ngImport: i0, template: `
946
616
  @let f = field();
947
617
  @if (label(); as label) {
948
618
  <div class="checkbox-group-label">{{ label | dynamicText | async }}</div>
@@ -970,7 +640,7 @@ class IonicMultiCheckboxFieldComponent {
970
640
  }
971
641
  `, isInline: true, styles: [":host{display:block}:host([hidden]){display:none!important}.checkbox-group-label{margin-bottom:8px;font-weight:500}.checkbox-group{display:flex;flex-direction:column;gap:4px}ion-item{--padding-start: 0;--inner-padding-end: 0}\n"], dependencies: [{ kind: "component", type: IonCheckbox, selector: "ion-checkbox", inputs: ["checked", "color", "disabled", "errorText", "helperText", "indeterminate", "justify", "labelPlacement", "mode", "name", "value"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonNote, selector: "ion-note", inputs: ["color", "mode"] }, { kind: "pipe", type: ValueInArrayPipe, name: "inArray" }, { kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
972
642
  }
973
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: IonicMultiCheckboxFieldComponent, decorators: [{
643
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: IonicMultiCheckboxFieldComponent, decorators: [{
974
644
  type: Component,
975
645
  args: [{ selector: 'df-ionic-multi-checkbox', imports: [IonCheckbox, IonItem, IonNote, ValueInArrayPipe, DynamicTextPipe, AsyncPipe], template: `
976
646
  @let f = field();
@@ -1041,8 +711,8 @@ class IonicRadioFieldComponent {
1041
711
  isRequired = computed(() => {
1042
712
  return this.field()().required?.() === true;
1043
713
  }, ...(ngDevMode ? [{ debugName: "isRequired" }] : []));
1044
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: IonicRadioFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1045
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.5", type: IonicRadioFieldComponent, isStandalone: true, selector: "df-ionic-radio", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "className()", "id": "`${key()}`", "attr.data-testid": "key()", "attr.hidden": "field()().hidden() || null" } }, ngImport: i0, template: `
714
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: IonicRadioFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
715
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: IonicRadioFieldComponent, isStandalone: true, selector: "df-ionic-radio", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "className()", "id": "`${key()}`", "attr.data-testid": "key()", "attr.hidden": "field()().hidden() || null" } }, ngImport: i0, template: `
1046
716
  @let f = field();
1047
717
  @if (label(); as label) {
1048
718
  <div class="radio-label">{{ label | dynamicText | async }}</div>
@@ -1074,7 +744,7 @@ class IonicRadioFieldComponent {
1074
744
  }
1075
745
  `, isInline: true, styles: [":host{display:block}:host([hidden]){display:none!important}.radio-label{font-size:.875rem;font-weight:500;margin-bottom:.5rem;color:var(--ion-text-color)}\n"], dependencies: [{ kind: "component", type: IonRadioGroup, selector: "ion-radio-group", inputs: ["allowEmptySelection", "compareWith", "errorText", "helperText", "name", "value"] }, { kind: "component", type: IonRadio, selector: "ion-radio", inputs: ["alignment", "color", "disabled", "justify", "labelPlacement", "mode", "name", "value"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonNote, selector: "ion-note", inputs: ["color", "mode"] }, { kind: "directive", type: Field, selector: "[field]", inputs: ["field"] }, { kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1076
746
  }
1077
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: IonicRadioFieldComponent, decorators: [{
747
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: IonicRadioFieldComponent, decorators: [{
1078
748
  type: Component,
1079
749
  args: [{ selector: 'df-ionic-radio', imports: [IonRadioGroup, IonRadio, IonItem, IonNote, Field, DynamicTextPipe, AsyncPipe], template: `
1080
750
  @let f = field();
@@ -1148,8 +818,8 @@ class IonicSelectFieldComponent {
1148
818
  isRequired = computed(() => {
1149
819
  return this.field()().required?.() === true;
1150
820
  }, ...(ngDevMode ? [{ debugName: "isRequired" }] : []));
1151
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: IonicSelectFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1152
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.5", type: IonicSelectFieldComponent, isStandalone: true, selector: "df-ionic-select", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "id": "`${key()}`", "attr.data-testid": "key()", "class": "className()", "attr.hidden": "field()().hidden() || null" } }, ngImport: i0, template: `
821
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: IonicSelectFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
822
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: IonicSelectFieldComponent, isStandalone: true, selector: "df-ionic-select", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "id": "`${key()}`", "attr.data-testid": "key()", "class": "className()", "attr.hidden": "field()().hidden() || null" } }, ngImport: i0, template: `
1153
823
  @let f = field();
1154
824
 
1155
825
  <ion-select
@@ -1185,7 +855,7 @@ class IonicSelectFieldComponent {
1185
855
  </ion-select>
1186
856
  `, isInline: true, styles: [":host([hidden]){display:none!important}\n"], dependencies: [{ kind: "component", type: IonSelect, selector: "ion-select", inputs: ["cancelText", "color", "compareWith", "disabled", "errorText", "expandedIcon", "fill", "helperText", "interface", "interfaceOptions", "justify", "label", "labelPlacement", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "shape", "toggleIcon", "value"] }, { kind: "component", type: IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }, { kind: "component", type: IonNote, selector: "ion-note", inputs: ["color", "mode"] }, { kind: "directive", type: Field, selector: "[field]", inputs: ["field"] }, { kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1187
857
  }
1188
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: IonicSelectFieldComponent, decorators: [{
858
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: IonicSelectFieldComponent, decorators: [{
1189
859
  type: Component,
1190
860
  args: [{ selector: 'df-ionic-select', imports: [IonSelect, IonSelectOption, IonNote, Field, DynamicTextPipe, AsyncPipe], template: `
1191
861
  @let f = field();
@@ -1262,8 +932,8 @@ class IonicSliderFieldComponent {
1262
932
  isRequired = computed(() => {
1263
933
  return this.field()().required?.() === true;
1264
934
  }, ...(ngDevMode ? [{ debugName: "isRequired" }] : []));
1265
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: IonicSliderFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1266
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.5", type: IonicSliderFieldComponent, isStandalone: true, selector: "df-ionic-slider", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "className()", "id": "`${key()}`", "attr.data-testid": "key()", "attr.hidden": "field()().hidden() || null" } }, ngImport: i0, template: `
935
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: IonicSliderFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
936
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: IonicSliderFieldComponent, isStandalone: true, selector: "df-ionic-slider", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "className()", "id": "`${key()}`", "attr.data-testid": "key()", "attr.hidden": "field()().hidden() || null" } }, ngImport: i0, template: `
1267
937
  @let f = field();
1268
938
 
1269
939
  <ion-range
@@ -1287,7 +957,7 @@ class IonicSliderFieldComponent {
1287
957
  }
1288
958
  `, isInline: true, styles: [":host{display:block}:host([hidden]){display:none!important}\n"], dependencies: [{ kind: "component", type: IonRange, selector: "ion-range", inputs: ["activeBarStart", "color", "debounce", "disabled", "dualKnobs", "label", "labelPlacement", "max", "min", "mode", "name", "pin", "pinFormatter", "snaps", "step", "ticks", "value"] }, { kind: "component", type: IonNote, selector: "ion-note", inputs: ["color", "mode"] }, { kind: "directive", type: Field, selector: "[field]", inputs: ["field"] }, { kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1289
959
  }
1290
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: IonicSliderFieldComponent, decorators: [{
960
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: IonicSliderFieldComponent, decorators: [{
1291
961
  type: Component,
1292
962
  args: [{ selector: 'df-ionic-slider', imports: [IonRange, IonNote, Field, DynamicTextPipe, AsyncPipe], template: `
1293
963
  @let f = field();
@@ -1351,8 +1021,8 @@ class IonicTextareaFieldComponent {
1351
1021
  isRequired = computed(() => {
1352
1022
  return this.field()().required?.() === true;
1353
1023
  }, ...(ngDevMode ? [{ debugName: "isRequired" }] : []));
1354
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: IonicTextareaFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1355
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.5", type: IonicTextareaFieldComponent, isStandalone: true, selector: "df-ionic-textarea", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "id": "`${key()}`", "attr.data-testid": "key()", "class": "className()", "attr.hidden": "field()().hidden() || null" } }, ngImport: i0, template: `
1024
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: IonicTextareaFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1025
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: IonicTextareaFieldComponent, isStandalone: true, selector: "df-ionic-textarea", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "id": "`${key()}`", "attr.data-testid": "key()", "class": "className()", "attr.hidden": "field()().hidden() || null" } }, ngImport: i0, template: `
1356
1026
  @let f = field();
1357
1027
 
1358
1028
  <ion-textarea
@@ -1383,7 +1053,7 @@ class IonicTextareaFieldComponent {
1383
1053
  </ion-textarea>
1384
1054
  `, isInline: true, styles: [":host([hidden]){display:none!important}\n"], dependencies: [{ kind: "component", type: IonTextarea, selector: "ion-textarea", inputs: ["autoGrow", "autocapitalize", "autofocus", "clearOnEdit", "color", "cols", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "maxlength", "minlength", "mode", "name", "placeholder", "readonly", "required", "rows", "shape", "spellcheck", "value", "wrap"] }, { kind: "component", type: IonNote, selector: "ion-note", inputs: ["color", "mode"] }, { kind: "directive", type: Field, selector: "[field]", inputs: ["field"] }, { kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1385
1055
  }
1386
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: IonicTextareaFieldComponent, decorators: [{
1056
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: IonicTextareaFieldComponent, decorators: [{
1387
1057
  type: Component,
1388
1058
  args: [{ selector: 'df-ionic-textarea', imports: [IonTextarea, IonNote, Field, DynamicTextPipe, AsyncPipe], template: `
1389
1059
  @let f = field();
@@ -1495,8 +1165,8 @@ class IonicToggleControlComponent {
1495
1165
  onBlur() {
1496
1166
  this.touched.set(true);
1497
1167
  }
1498
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: IonicToggleControlComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1499
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.5", type: IonicToggleControlComponent, isStandalone: true, selector: "df-ionic-toggle-control", inputs: { checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, labelPlacement: { classPropertyName: "labelPlacement", publicName: "labelPlacement", isSignal: true, isRequired: false, transformFunction: null }, justify: { classPropertyName: "justify", publicName: "justify", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, enableOnOffLabels: { classPropertyName: "enableOnOffLabels", publicName: "enableOnOffLabels", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checked: "checkedChange", touched: "touchedChange" }, ngImport: i0, template: `
1168
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: IonicToggleControlComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1169
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.6", type: IonicToggleControlComponent, isStandalone: true, selector: "df-ionic-toggle-control", inputs: { checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, labelPlacement: { classPropertyName: "labelPlacement", publicName: "labelPlacement", isSignal: true, isRequired: false, transformFunction: null }, justify: { classPropertyName: "justify", publicName: "justify", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, enableOnOffLabels: { classPropertyName: "enableOnOffLabels", publicName: "enableOnOffLabels", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checked: "checkedChange", touched: "touchedChange" }, ngImport: i0, template: `
1500
1170
  <ion-toggle
1501
1171
  [checked]="isChecked()"
1502
1172
  (ionChange)="onToggleChange($event)"
@@ -1515,7 +1185,7 @@ class IonicToggleControlComponent {
1515
1185
  </ion-toggle>
1516
1186
  `, isInline: true, dependencies: [{ kind: "component", type: IonToggle, selector: "ion-toggle", inputs: ["checked", "color", "disabled", "enableOnOffLabels", "errorText", "helperText", "justify", "labelPlacement", "mode", "name", "value"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1517
1187
  }
1518
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: IonicToggleControlComponent, decorators: [{
1188
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: IonicToggleControlComponent, decorators: [{
1519
1189
  type: Component,
1520
1190
  args: [{
1521
1191
  selector: 'df-ionic-toggle-control',
@@ -1561,8 +1231,8 @@ class IonicToggleFieldComponent {
1561
1231
  // ─────────────────────────────────────────────────────────────────────────────
1562
1232
  /** Base ID for error elements */
1563
1233
  errorId = computed(() => `${this.key()}-error`, ...(ngDevMode ? [{ debugName: "errorId" }] : []));
1564
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: IonicToggleFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1565
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.5", type: IonicToggleFieldComponent, isStandalone: true, selector: "df-ionic-toggle", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "className()", "id": "`${key()}`", "attr.data-testid": "key()", "attr.hidden": "field()().hidden() || null" } }, ngImport: i0, template: `
1234
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: IonicToggleFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1235
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: IonicToggleFieldComponent, isStandalone: true, selector: "df-ionic-toggle", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, validationMessages: { classPropertyName: "validationMessages", publicName: "validationMessages", isSignal: true, isRequired: false, transformFunction: null }, defaultValidationMessages: { classPropertyName: "defaultValidationMessages", publicName: "defaultValidationMessages", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "className()", "id": "`${key()}`", "attr.data-testid": "key()", "attr.hidden": "field()().hidden() || null" } }, ngImport: i0, template: `
1566
1236
  @let f = field();
1567
1237
 
1568
1238
  <df-ionic-toggle-control
@@ -1581,7 +1251,7 @@ class IonicToggleFieldComponent {
1581
1251
  }
1582
1252
  `, isInline: true, styles: [":host{display:block}:host([hidden]){display:none!important}\n"], dependencies: [{ kind: "component", type: IonicToggleControlComponent, selector: "df-ionic-toggle-control", inputs: ["checked", "touched", "disabled", "readonly", "invalid", "required", "labelPlacement", "justify", "color", "enableOnOffLabels", "tabIndex"], outputs: ["checkedChange", "touchedChange"] }, { kind: "component", type: IonNote, selector: "ion-note", inputs: ["color", "mode"] }, { kind: "directive", type: Field, selector: "[field]", inputs: ["field"] }, { kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1583
1253
  }
1584
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.5", ngImport: i0, type: IonicToggleFieldComponent, decorators: [{
1254
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: IonicToggleFieldComponent, decorators: [{
1585
1255
  type: Component,
1586
1256
  args: [{ selector: 'df-ionic-toggle', imports: [IonicToggleControlComponent, IonNote, Field, DynamicTextPipe, AsyncPipe], template: `
1587
1257
  @let f = field();
@@ -1793,11 +1463,12 @@ function addArrayItemButtonFieldMapper(fieldDef) {
1793
1463
  // Try to get array context (available when inside an array)
1794
1464
  // Use optional injection so it doesn't fail when outside an array
1795
1465
  const arrayContext = inject(ARRAY_CONTEXT, { optional: true });
1466
+ const logger = inject(DynamicFormLogger);
1796
1467
  // Determine the target array key
1797
1468
  // Priority: explicit arrayKey from fieldDef > arrayKey from context
1798
1469
  const targetArrayKey = fieldDef.arrayKey ?? arrayContext?.arrayKey;
1799
1470
  if (!targetArrayKey) {
1800
- console.warn(`[Dynamic Forms] addArrayItem button "${fieldDef.key}" has no array context. ` +
1471
+ logger.warn(`addArrayItem button "${fieldDef.key}" has no array context. ` +
1801
1472
  'Either place it inside an array field, or provide an explicit arrayKey property.');
1802
1473
  }
1803
1474
  // Build base inputs (static, from field definition)
@@ -1848,11 +1519,12 @@ function removeArrayItemButtonFieldMapper(fieldDef) {
1848
1519
  // Try to get array context (available when inside an array)
1849
1520
  // Use optional injection so it doesn't fail when outside an array
1850
1521
  const arrayContext = inject(ARRAY_CONTEXT, { optional: true });
1522
+ const logger = inject(DynamicFormLogger);
1851
1523
  // Determine the target array key
1852
1524
  // Priority: explicit arrayKey from fieldDef > arrayKey from context
1853
1525
  const targetArrayKey = fieldDef.arrayKey ?? arrayContext?.arrayKey;
1854
1526
  if (!targetArrayKey) {
1855
- console.warn(`[Dynamic Forms] removeArrayItem button "${fieldDef.key}" has no array context. ` +
1527
+ logger.warn(`removeArrayItem button "${fieldDef.key}" has no array context. ` +
1856
1528
  'Either place it inside an array field, or provide an explicit arrayKey property.');
1857
1529
  }
1858
1530
  // Build base inputs (static, from field definition)