@db-ux/ngx-core-components 4.13.1-angular-signal-forms3-9c66774 → 4.13.1-angular-signal-forms5-fe63b55

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.
@@ -1425,7 +1425,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
1425
1425
  const defaultProps$B = {};
1426
1426
  class DBCheckbox {
1427
1427
  hasValidState() {
1428
- return !!(this.validMessage() ?? this.validation() === "valid");
1428
+ return !!(this.validMessage() || this._valid() === 'valid' || this.validation() === "valid");
1429
1429
  }
1430
1430
  handleValidation() {
1431
1431
  // Signal Forms validation bridge: errors InputSignal has priority
@@ -1441,8 +1441,8 @@ class DBCheckbox {
1441
1441
  }
1442
1442
  return; // Signal Forms errors take priority
1443
1443
  }
1444
- else if (this.errors() !== undefined) {
1445
- // Signal Forms provided errors=[] (valid state)
1444
+ else if (Array.isArray(signalFormErrors) && signalFormErrors.length === 0 && this._valid() === 'invalid') {
1445
+ // Signal Forms provided errors=[] after previous invalid state → now valid
1446
1446
  this._valid.set('valid');
1447
1447
  this._validMessage.set(DEFAULT_VALID_MESSAGE);
1448
1448
  this._invalidMessage.set('');
@@ -1754,8 +1754,8 @@ class DBCheckbox {
1754
1754
  <label [attr.for]="_id()"
1755
1755
  ><input
1756
1756
  type="checkbox"
1757
- [attr.aria-invalid]="validation() === 'invalid'"
1758
- [attr.data-custom-validity]="validation()"
1757
+ [attr.aria-invalid]="(_valid() ?? validation()) === 'invalid'"
1758
+ [attr.data-custom-validity]="_valid() ?? validation()"
1759
1759
  #_ref
1760
1760
  [attr.id]="_id()"
1761
1761
  [attr.name]="name()"
@@ -1795,7 +1795,7 @@ class DBCheckbox {
1795
1795
  role="status"
1796
1796
  >{{_voiceOverFallback()}}</span
1797
1797
  >
1798
- </div> `, isInline: true, styles: [":host{display:contents}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DBInfotext, selector: "db-infotext", inputs: ["id", "propOverrides", "className", "icon", "semantic", "size", "wrap", "showIcon", "text"] }] }); }
1798
+ </div> `, isInline: true, styles: [":host{display:contents}:host([hidden]){display:none!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DBInfotext, selector: "db-infotext", inputs: ["id", "propOverrides", "className", "icon", "semantic", "size", "wrap", "showIcon", "text"] }] }); }
1799
1799
  }
1800
1800
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: DBCheckbox, decorators: [{
1801
1801
  type: Component,
@@ -1812,8 +1812,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
1812
1812
  <label [attr.for]="_id()"
1813
1813
  ><input
1814
1814
  type="checkbox"
1815
- [attr.aria-invalid]="validation() === 'invalid'"
1816
- [attr.data-custom-validity]="validation()"
1815
+ [attr.aria-invalid]="(_valid() ?? validation()) === 'invalid'"
1816
+ [attr.data-custom-validity]="_valid() ?? validation()"
1817
1817
  #_ref
1818
1818
  [attr.id]="_id()"
1819
1819
  [attr.name]="name()"
@@ -1853,7 +1853,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
1853
1853
  role="status"
1854
1854
  >{{_voiceOverFallback()}}</span
1855
1855
  >
1856
- </div> `, styles: [":host{display:contents}\n"] }]
1856
+ </div> `, styles: [":host{display:contents}:host([hidden]){display:none!important}\n"] }]
1857
1857
  }], ctorParameters: () => [{ type: i0.Renderer2 }], propDecorators: { invalidMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalidMessage", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], propOverrides: [{ type: i0.Input, args: [{ isSignal: true, alias: "propOverrides", required: false }] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }], showMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "showMessage", required: false }] }], indeterminate: [{ type: i0.Input, args: [{ isSignal: true, alias: "indeterminate", required: false }] }], checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }, { type: i0.Output, args: ["checkedChange"] }], validMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "validMessage", required: false }] }], validation: [{ type: i0.Input, args: [{ isSignal: true, alias: "validation", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], showRequiredAsterisk: [{ type: i0.Input, args: [{ isSignal: true, alias: "showRequiredAsterisk", required: false }] }], showLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLabel", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], ariaDescribedBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaDescribedBy", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], messageIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "messageIcon", required: false }] }], change: [{ type: i0.Output, args: ["change"] }], blur: [{ type: i0.Output, args: ["blur"] }], focus: [{ type: i0.Output, args: ["focus"] }], _ref: [{ type: i0.ViewChild, args: ["_ref", { isSignal: true }] }], hidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "hidden", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], isHidden: [{
1858
1858
  type: HostBinding,
1859
1859
  args: ['hidden']
@@ -2744,7 +2744,7 @@ class DBCustomSelectListItem {
2744
2744
  }@else{
2745
2745
  <span>{{groupTitle()}}</span>
2746
2746
  }
2747
- </li> `, isInline: true, styles: [":host{display:contents}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
2747
+ </li> `, isInline: true, styles: [":host{display:contents}:host([hidden]){display:none!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
2748
2748
  }
2749
2749
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: DBCustomSelectListItem, decorators: [{
2750
2750
  type: Component,
@@ -2782,7 +2782,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
2782
2782
  }@else{
2783
2783
  <span>{{groupTitle()}}</span>
2784
2784
  }
2785
- </li> `, styles: [":host{display:contents}\n"] }]
2785
+ </li> `, styles: [":host{display:contents}:host([hidden]){display:none!important}\n"] }]
2786
2786
  }], ctorParameters: () => [{ type: i0.Renderer2 }], propDecorators: { isGroupTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "isGroupTitle", required: false }] }], showDivider: [{ type: i0.Input, args: [{ isSignal: true, alias: "showDivider", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }, { type: i0.Output, args: ["checkedChange"] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], propOverrides: [{ type: i0.Input, args: [{ isSignal: true, alias: "propOverrides", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], groupTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "groupTitle", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], showIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "showIcon", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], change: [{ type: i0.Output, args: ["change"] }], _ref: [{ type: i0.ViewChild, args: ["_ref", { isSignal: true }] }], hidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "hidden", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], isHidden: [{
2787
2787
  type: HostBinding,
2788
2788
  args: ['hidden']
@@ -2901,7 +2901,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
2901
2901
  const defaultProps$w = {};
2902
2902
  class DBInput {
2903
2903
  hasValidState() {
2904
- return !!(this.validMessage() ?? this.validation() === "valid");
2904
+ return !!(this.validMessage() || this._valid() === 'valid' || this.validation() === "valid");
2905
+ }
2906
+ getPatternAttr() {
2907
+ const p = this.pattern();
2908
+ if (typeof p === 'string')
2909
+ return p || undefined;
2910
+ if (Array.isArray(p) && p.length > 0)
2911
+ return p.map((r) => r.source).join('|');
2912
+ return undefined;
2905
2913
  }
2906
2914
  handleValidation() {
2907
2915
  // Signal Forms validation bridge: errors InputSignal has priority
@@ -2917,8 +2925,8 @@ class DBInput {
2917
2925
  }
2918
2926
  return; // Signal Forms errors take priority
2919
2927
  }
2920
- else if (this.errors() !== undefined) {
2921
- // Signal Forms provided errors=[] (valid state)
2928
+ else if (Array.isArray(signalFormErrors) && signalFormErrors.length === 0 && this._valid() === 'invalid') {
2929
+ // Signal Forms provided errors=[] after previous invalid state → now valid
2922
2930
  this._valid.set('valid');
2923
2931
  this._validMessage.set(DEFAULT_VALID_MESSAGE);
2924
2932
  this._invalidMessage.set('');
@@ -3277,8 +3285,8 @@ class DBInput {
3277
3285
  >
3278
3286
  <label [attr.for]="_id()">{{label() ?? DEFAULT_LABEL}}</label>
3279
3287
  <input
3280
- [attr.aria-invalid]="validation() === 'invalid'"
3281
- [attr.data-custom-validity]="validation()"
3288
+ [attr.aria-invalid]="(_valid() ?? validation()) === 'invalid'"
3289
+ [attr.data-custom-validity]="_valid() ?? validation()"
3282
3290
  [attr.data-field-sizing]="fieldSizing()"
3283
3291
  #_ref
3284
3292
  [attr.id]="_id()"
@@ -3297,7 +3305,7 @@ class DBInput {
3297
3305
  [attr.min]="getInputValue(min(), type())"
3298
3306
  [attr.readOnly]="getBoolean(readOnly(), 'readOnly') || getBoolean(readonly(), 'readonly') || undefined"
3299
3307
  [attr.form]="form()"
3300
- [attr.pattern]="pattern()"
3308
+ [attr.pattern]="getPatternAttr()"
3301
3309
  [attr.size]="size()"
3302
3310
  [attr.autoComplete]="autocomplete()"
3303
3311
  [attr.autoFocus]="getBoolean(autofocus(), 'autofocus')"
@@ -3346,7 +3354,7 @@ class DBInput {
3346
3354
  role="status"
3347
3355
  >{{_voiceOverFallback()}}</span
3348
3356
  >
3349
- </div> `, isInline: true, styles: [":host{display:contents}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DBInfotext, selector: "db-infotext", inputs: ["id", "propOverrides", "className", "icon", "semantic", "size", "wrap", "showIcon", "text"] }] }); }
3357
+ </div> `, isInline: true, styles: [":host{display:contents}:host([hidden]){display:none!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DBInfotext, selector: "db-infotext", inputs: ["id", "propOverrides", "className", "icon", "semantic", "size", "wrap", "showIcon", "text"] }] }); }
3350
3358
  }
3351
3359
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: DBInput, decorators: [{
3352
3360
  type: Component,
@@ -3366,8 +3374,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
3366
3374
  >
3367
3375
  <label [attr.for]="_id()">{{label() ?? DEFAULT_LABEL}}</label>
3368
3376
  <input
3369
- [attr.aria-invalid]="validation() === 'invalid'"
3370
- [attr.data-custom-validity]="validation()"
3377
+ [attr.aria-invalid]="(_valid() ?? validation()) === 'invalid'"
3378
+ [attr.data-custom-validity]="_valid() ?? validation()"
3371
3379
  [attr.data-field-sizing]="fieldSizing()"
3372
3380
  #_ref
3373
3381
  [attr.id]="_id()"
@@ -3386,7 +3394,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
3386
3394
  [attr.min]="getInputValue(min(), type())"
3387
3395
  [attr.readOnly]="getBoolean(readOnly(), 'readOnly') || getBoolean(readonly(), 'readonly') || undefined"
3388
3396
  [attr.form]="form()"
3389
- [attr.pattern]="pattern()"
3397
+ [attr.pattern]="getPatternAttr()"
3390
3398
  [attr.size]="size()"
3391
3399
  [attr.autoComplete]="autocomplete()"
3392
3400
  [attr.autoFocus]="getBoolean(autofocus(), 'autofocus')"
@@ -3435,7 +3443,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
3435
3443
  role="status"
3436
3444
  >{{_voiceOverFallback()}}</span
3437
3445
  >
3438
- </div> `, styles: [":host{display:contents}\n"] }]
3446
+ </div> `, styles: [":host{display:contents}:host([hidden]){display:none!important}\n"] }]
3439
3447
  }], ctorParameters: () => [{ type: i0.Renderer2 }], propDecorators: { invalidMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalidMessage", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], propOverrides: [{ type: i0.Input, args: [{ isSignal: true, alias: "propOverrides", required: false }] }], dataListId: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataListId", required: false }] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }], showMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "showMessage", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], validMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "validMessage", required: false }] }], validation: [{ type: i0.Input, args: [{ isSignal: true, alias: "validation", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], minLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "minLength", required: false }] }], maxLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxLength", required: false }] }], pattern: [{ type: i0.Input, args: [{ isSignal: true, alias: "pattern", required: false }] }], dataList: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataList", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], showLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLabel", required: false }] }], showIconLeading: [{ type: i0.Input, args: [{ isSignal: true, alias: "showIconLeading", required: false }] }], showIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "showIcon", required: false }] }], iconLeading: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconLeading", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], iconTrailing: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconTrailing", required: false }] }], showRequiredAsterisk: [{ type: i0.Input, args: [{ isSignal: true, alias: "showRequiredAsterisk", required: false }] }], showIconTrailing: [{ type: i0.Input, args: [{ isSignal: true, alias: "showIconTrailing", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], fieldSizing: [{ type: i0.Input, args: [{ isSignal: true, alias: "fieldSizing", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], accept: [{ type: i0.Input, args: [{ isSignal: true, alias: "accept", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }], step: [{ type: i0.Input, args: [{ isSignal: true, alias: "step", required: false }] }], maxlength: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxlength", required: false }] }], minlength: [{ type: i0.Input, args: [{ isSignal: true, alias: "minlength", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], readOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readOnly", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], form: [{ type: i0.Input, args: [{ isSignal: true, alias: "form", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], autocomplete: [{ type: i0.Input, args: [{ isSignal: true, alias: "autocomplete", required: false }] }], autofocus: [{ type: i0.Input, args: [{ isSignal: true, alias: "autofocus", required: false }] }], enterkeyhint: [{ type: i0.Input, args: [{ isSignal: true, alias: "enterkeyhint", required: false }] }], inputmode: [{ type: i0.Input, args: [{ isSignal: true, alias: "inputmode", required: false }] }], ariaDescribedBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaDescribedBy", required: false }] }], messageSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "messageSize", required: false }] }], messageIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "messageIcon", required: false }] }], validMessageSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "validMessageSize", required: false }] }], invalidMessageSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalidMessageSize", required: false }] }], input: [{ type: i0.Output, args: ["input"] }], change: [{ type: i0.Output, args: ["change"] }], blur: [{ type: i0.Output, args: ["blur"] }], focus: [{ type: i0.Output, args: ["focus"] }], _ref: [{ type: i0.ViewChild, args: ["_ref", { isSignal: true }] }], hidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "hidden", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], isHidden: [{
3440
3448
  type: HostBinding,
3441
3449
  args: ['hidden']
@@ -3945,7 +3953,7 @@ class DBCustomSelect {
3945
3953
  }
3946
3954
  }
3947
3955
  hasValidState() {
3948
- return !!(this.validMessage() ?? this.validation() === "valid");
3956
+ return !!(this.validMessage() || this._valid() === 'valid' || this.validation() === "valid");
3949
3957
  }
3950
3958
  handleValidation() {
3951
3959
  // Signal Forms validation bridge: errors InputSignal has priority
@@ -3959,11 +3967,13 @@ class DBCustomSelect {
3959
3967
  this._voiceOverFallback.set(this._invalidMessage());
3960
3968
  void delay(() => this._voiceOverFallback.set(""), 1000);
3961
3969
  }
3970
+ this._validity.set('invalid');
3962
3971
  return; // Signal Forms errors take priority
3963
3972
  }
3964
- else if (this.errors() !== undefined) {
3965
- // Signal Forms provided errors=[] (valid state)
3973
+ else if (Array.isArray(signalFormErrors) && signalFormErrors.length === 0 && this._valid() === 'invalid') {
3974
+ // Signal Forms provided errors=[] after previous invalid state → now valid
3966
3975
  this._valid.set('valid');
3976
+ this._validity.set('valid');
3967
3977
  this._validMessage.set(DEFAULT_VALID_MESSAGE);
3968
3978
  this._invalidMessage.set('');
3969
3979
  }
@@ -4528,20 +4538,28 @@ class DBCustomSelect {
4528
4538
  this._valid = signal(undefined, ...(ngDevMode ? [{ debugName: "_valid" }] : /* istanbul ignore next */ []));
4529
4539
  /** Signal Forms alias — maps to 'values' for FormValueControl duck-typing */
4530
4540
  this.value = model(...(ngDevMode ? [undefined, { debugName: "value" }] : /* istanbul ignore next */ []));
4541
+ /** @internal Flag to prevent circular sync between value↔values */
4542
+ this._syncing = false;
4531
4543
  /** @internal Sync value → values (Signal Forms writes to value) */
4532
4544
  this._syncValueToValues = effect(() => {
4533
4545
  const v = this.value();
4546
+ if (this._syncing)
4547
+ return;
4548
+ this._syncing = true;
4534
4549
  if (v !== undefined) {
4535
4550
  this.values.set(Array.isArray(v) ? v : v ? [v] : []);
4536
4551
  }
4552
+ this._syncing = false;
4537
4553
  }, ...(ngDevMode ? [{ debugName: "_syncValueToValues" }] : /* istanbul ignore next */ []));
4538
4554
  /** @internal Sync values → value (CVA/user interaction writes to values) */
4539
4555
  this._syncValuesToValue = effect(() => {
4540
4556
  const vals = this.values();
4541
- const current = vals && vals.length > 0 ? vals[0] : undefined;
4542
- if (current !== this.value()) {
4543
- this.value.set(current);
4544
- }
4557
+ if (this._syncing)
4558
+ return;
4559
+ this._syncing = true;
4560
+ const current = vals && vals.length > 0 ? vals : undefined;
4561
+ this.value.set(current);
4562
+ this._syncing = false;
4545
4563
  }, ...(ngDevMode ? [{ debugName: "_syncValuesToValue" }] : /* istanbul ignore next */ []));
4546
4564
  if (typeof window !== "undefined") {
4547
4565
  effect(() => {
@@ -5125,7 +5143,7 @@ class DBCustomSelect {
5125
5143
  role="status"
5126
5144
  >{{_voiceOverFallback()}}</span
5127
5145
  >
5128
- </div> `, isInline: true, styles: [":host{display:contents}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DBTag, selector: "db-tag", inputs: ["removeButton", "id", "propOverrides", "className", "semantic", "emphasis", "icon", "showCheckState", "showIcon", "noText", "overflow", "text", "behavior"], outputs: ["remove"] }, { kind: "component", type: DBCustomSelectDropdown, selector: "db-custom-select-dropdown", inputs: ["id", "propOverrides", "className", "width"] }, { kind: "component", type: DBInput, selector: "db-input", inputs: ["invalidMessage", "id", "propOverrides", "dataListId", "message", "showMessage", "value", "validMessage", "validation", "required", "minLength", "maxLength", "pattern", "dataList", "className", "variant", "showLabel", "showIconLeading", "showIcon", "iconLeading", "icon", "iconTrailing", "showRequiredAsterisk", "showIconTrailing", "label", "fieldSizing", "name", "type", "multiple", "accept", "placeholder", "disabled", "step", "maxlength", "minlength", "max", "min", "readOnly", "readonly", "form", "size", "autocomplete", "autofocus", "enterkeyhint", "inputmode", "ariaDescribedBy", "messageSize", "messageIcon", "validMessageSize", "invalidMessageSize", "hidden", "errors"], outputs: ["valueChange", "disabledChange", "input", "change", "blur", "focus"] }, { kind: "component", type: DBCustomSelectList, selector: "db-custom-select-list", inputs: ["multiple", "label", "id", "propOverrides", "className"] }, { kind: "component", type: DBCustomSelectListItem, selector: "db-custom-select-list-item", inputs: ["isGroupTitle", "showDivider", "type", "checked", "id", "propOverrides", "className", "groupTitle", "icon", "showIcon", "name", "disabled", "value", "label", "hidden", "errors"], outputs: ["checkedChange", "disabledChange", "change"] }, { kind: "component", type: DBInfotext, selector: "db-infotext", inputs: ["id", "propOverrides", "className", "icon", "semantic", "size", "wrap", "showIcon", "text"] }, { kind: "component", type: DBButton, selector: "db-button", inputs: ["type", "commandfor", "id", "propOverrides", "className", "disabled", "iconLeading", "icon", "showIconLeading", "showIcon", "iconTrailing", "showIconTrailing", "size", "width", "variant", "wrap", "noText", "name", "form", "value", "command", "text"], outputs: ["click"] }, { kind: "component", type: DBTooltip, selector: "db-tooltip", inputs: ["id", "propOverrides", "variant", "placement", "className", "emphasis", "wrap", "animation", "delay", "width", "showArrow", "text"] }] }); }
5146
+ </div> `, isInline: true, styles: [":host{display:contents}:host([hidden]){display:none!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DBTag, selector: "db-tag", inputs: ["removeButton", "id", "propOverrides", "className", "semantic", "emphasis", "icon", "showCheckState", "showIcon", "noText", "overflow", "text", "behavior"], outputs: ["remove"] }, { kind: "component", type: DBCustomSelectDropdown, selector: "db-custom-select-dropdown", inputs: ["id", "propOverrides", "className", "width"] }, { kind: "component", type: DBInput, selector: "db-input", inputs: ["invalidMessage", "id", "propOverrides", "dataListId", "message", "showMessage", "value", "validMessage", "validation", "required", "minLength", "maxLength", "pattern", "dataList", "className", "variant", "showLabel", "showIconLeading", "showIcon", "iconLeading", "icon", "iconTrailing", "showRequiredAsterisk", "showIconTrailing", "label", "fieldSizing", "name", "type", "multiple", "accept", "placeholder", "disabled", "step", "maxlength", "minlength", "max", "min", "readOnly", "readonly", "form", "size", "autocomplete", "autofocus", "enterkeyhint", "inputmode", "ariaDescribedBy", "messageSize", "messageIcon", "validMessageSize", "invalidMessageSize", "hidden", "errors"], outputs: ["valueChange", "disabledChange", "input", "change", "blur", "focus"] }, { kind: "component", type: DBCustomSelectList, selector: "db-custom-select-list", inputs: ["multiple", "label", "id", "propOverrides", "className"] }, { kind: "component", type: DBCustomSelectListItem, selector: "db-custom-select-list-item", inputs: ["isGroupTitle", "showDivider", "type", "checked", "id", "propOverrides", "className", "groupTitle", "icon", "showIcon", "name", "disabled", "value", "label", "hidden", "errors"], outputs: ["checkedChange", "disabledChange", "change"] }, { kind: "component", type: DBInfotext, selector: "db-infotext", inputs: ["id", "propOverrides", "className", "icon", "semantic", "size", "wrap", "showIcon", "text"] }, { kind: "component", type: DBButton, selector: "db-button", inputs: ["type", "commandfor", "id", "propOverrides", "className", "disabled", "iconLeading", "icon", "showIconLeading", "showIcon", "iconTrailing", "showIconTrailing", "size", "width", "variant", "wrap", "noText", "name", "form", "value", "command", "text"], outputs: ["click"] }, { kind: "component", type: DBTooltip, selector: "db-tooltip", inputs: ["id", "propOverrides", "variant", "placement", "className", "emphasis", "wrap", "animation", "delay", "width", "showArrow", "text"] }] }); }
5129
5147
  }
5130
5148
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: DBCustomSelect, decorators: [{
5131
5149
  type: Component,
@@ -5351,7 +5369,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
5351
5369
  role="status"
5352
5370
  >{{_voiceOverFallback()}}</span
5353
5371
  >
5354
- </div> `, styles: [":host{display:contents}\n"] }]
5372
+ </div> `, styles: [":host{display:contents}:host([hidden]){display:none!important}\n"] }]
5355
5373
  }], ctorParameters: () => [{ type: i0.Renderer2 }], propDecorators: { invalidMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalidMessage", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], propOverrides: [{ type: i0.Input, args: [{ isSignal: true, alias: "propOverrides", required: false }] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }], showMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "showMessage", required: false }] }], ariaDescribedBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaDescribedBy", required: false }] }], showNoResults: [{ type: i0.Input, args: [{ isSignal: true, alias: "showNoResults", required: false }] }], showLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLoading", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], showSelectAll: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSelectAll", required: false }] }], showSearch: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSearch", required: false }] }], values: [{ type: i0.Input, args: [{ isSignal: true, alias: "values", required: false }] }, { type: i0.Output, args: ["valuesChange"] }], validation: [{ type: i0.Input, args: [{ isSignal: true, alias: "validation", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], searchValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchValue", required: false }] }], selectedLabels: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedLabels", required: false }] }], transformSelectedLabels: [{ type: i0.Input, args: [{ isSignal: true, alias: "transformSelectedLabels", required: false }] }], selectedType: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedType", required: false }] }], amountText: [{ type: i0.Input, args: [{ isSignal: true, alias: "amountText", required: false }] }], validMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "validMessage", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], selectAllLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectAllLabel", required: false }] }], removeTagsTexts: [{ type: i0.Input, args: [{ isSignal: true, alias: "removeTagsTexts", required: false }] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "placement", required: false }] }], searchFilter: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchFilter", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], formFieldWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "formFieldWidth", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], showRequiredAsterisk: [{ type: i0.Input, args: [{ isSignal: true, alias: "showRequiredAsterisk", required: false }] }], showLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLabel", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], showIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "showIcon", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], form: [{ type: i0.Input, args: [{ isSignal: true, alias: "form", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }], selectedPrefix: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedPrefix", required: false }] }], dropdownWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "dropdownWidth", required: false }] }], searchLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchLabel", required: false }] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], listLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "listLabel", required: false }] }], loadingText: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingText", required: false }] }], noResultsText: [{ type: i0.Input, args: [{ isSignal: true, alias: "noResultsText", required: false }] }], mobileCloseButtonText: [{ type: i0.Input, args: [{ isSignal: true, alias: "mobileCloseButtonText", required: false }] }], showClearSelection: [{ type: i0.Input, args: [{ isSignal: true, alias: "showClearSelection", required: false }] }], clearSelectionText: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearSelectionText", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], messageIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "messageIcon", required: false }] }], amountChange: [{ type: i0.Output, args: ["amountChange"] }], dropdownToggle: [{ type: i0.Output, args: ["dropdownToggle"] }], optionSelected: [{ type: i0.Output, args: ["optionSelected"] }], search: [{ type: i0.Output, args: ["search"] }], _ref: [{ type: i0.ViewChild, args: ["_ref", { isSignal: true }] }], selectRef: [{ type: i0.ViewChild, args: ["selectRef", { isSignal: true }] }], detailsRef: [{ type: i0.ViewChild, args: ["detailsRef", { isSignal: true }] }], searchInputRef: [{ type: i0.ViewChild, args: ["searchInputRef", { isSignal: true }] }], selectAllRef: [{ type: i0.ViewChild, args: ["selectAllRef", { isSignal: true }] }], hidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "hidden", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], isHidden: [{
5356
5374
  type: HostBinding,
5357
5375
  args: ['hidden']
@@ -7790,7 +7808,7 @@ class DBRadio {
7790
7808
  (blur)="handleBlur($event)"
7791
7809
  (focus)="handleFocus($event)" />
7792
7810
  @if(label()){{{label()}}} <ng-content></ng-content
7793
- ></label> `, isInline: true, styles: [":host{display:contents}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
7811
+ ></label> `, isInline: true, styles: [":host{display:contents}:host([hidden]){display:none!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
7794
7812
  }
7795
7813
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: DBRadio, decorators: [{
7796
7814
  type: Component,
@@ -7820,7 +7838,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
7820
7838
  (blur)="handleBlur($event)"
7821
7839
  (focus)="handleFocus($event)" />
7822
7840
  @if(label()){{{label()}}} <ng-content></ng-content
7823
- ></label> `, styles: [":host{display:contents}\n"] }]
7841
+ ></label> `, styles: [":host{display:contents}:host([hidden]){display:none!important}\n"] }]
7824
7842
  }], ctorParameters: () => [{ type: i0.Renderer2 }], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], propOverrides: [{ type: i0.Input, args: [{ isSignal: true, alias: "propOverrides", required: false }] }], checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], showLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLabel", required: false }] }], showRequiredAsterisk: [{ type: i0.Input, args: [{ isSignal: true, alias: "showRequiredAsterisk", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], validation: [{ type: i0.Input, args: [{ isSignal: true, alias: "validation", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], input: [{ type: i0.Output, args: ["input"] }], change: [{ type: i0.Output, args: ["change"] }], blur: [{ type: i0.Output, args: ["blur"] }], focus: [{ type: i0.Output, args: ["focus"] }], _ref: [{ type: i0.ViewChild, args: ["_ref", { isSignal: true }] }], hidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "hidden", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], isHidden: [{
7825
7843
  type: HostBinding,
7826
7844
  args: ['hidden']
@@ -7935,7 +7953,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
7935
7953
  const defaultProps$f = {};
7936
7954
  class DBSelect {
7937
7955
  hasValidState() {
7938
- return !!(this.validMessage() ?? this.validation() === "valid");
7956
+ return !!(this.validMessage() || this._valid() === 'valid' || this.validation() === "valid");
7939
7957
  }
7940
7958
  handleValidation() {
7941
7959
  // Signal Forms validation bridge: errors InputSignal has priority
@@ -7951,8 +7969,8 @@ class DBSelect {
7951
7969
  }
7952
7970
  return; // Signal Forms errors take priority
7953
7971
  }
7954
- else if (this.errors() !== undefined) {
7955
- // Signal Forms provided errors=[] (valid state)
7972
+ else if (Array.isArray(signalFormErrors) && signalFormErrors.length === 0 && this._valid() === 'invalid') {
7973
+ // Signal Forms provided errors=[] after previous invalid state → now valid
7956
7974
  this._valid.set('valid');
7957
7975
  this._validMessage.set(DEFAULT_VALID_MESSAGE);
7958
7976
  this._invalidMessage.set('');
@@ -8305,8 +8323,8 @@ class DBSelect {
8305
8323
  >
8306
8324
  <label [attr.for]="_id()">{{label() ?? DEFAULT_LABEL}}</label>
8307
8325
  <select
8308
- [attr.aria-invalid]="validation() === 'invalid'"
8309
- [attr.data-custom-validity]="validation()"
8326
+ [attr.aria-invalid]="(_valid() ?? validation()) === 'invalid'"
8327
+ [attr.data-custom-validity]="_valid() ?? validation()"
8310
8328
  #_ref
8311
8329
  [required]="getBoolean(required(), 'required')"
8312
8330
  [disabled]="getBoolean(disabled(), 'disabled')"
@@ -8391,7 +8409,7 @@ class DBSelect {
8391
8409
  role="status"
8392
8410
  >{{_voiceOverFallback()}}</span
8393
8411
  >
8394
- </div> `, isInline: true, styles: [":host{display:contents}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DBInfotext, selector: "db-infotext", inputs: ["id", "propOverrides", "className", "icon", "semantic", "size", "wrap", "showIcon", "text"] }] }); }
8412
+ </div> `, isInline: true, styles: [":host{display:contents}:host([hidden]){display:none!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DBInfotext, selector: "db-infotext", inputs: ["id", "propOverrides", "className", "icon", "semantic", "size", "wrap", "showIcon", "text"] }] }); }
8395
8413
  }
8396
8414
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: DBSelect, decorators: [{
8397
8415
  type: Component,
@@ -8409,8 +8427,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
8409
8427
  >
8410
8428
  <label [attr.for]="_id()">{{label() ?? DEFAULT_LABEL}}</label>
8411
8429
  <select
8412
- [attr.aria-invalid]="validation() === 'invalid'"
8413
- [attr.data-custom-validity]="validation()"
8430
+ [attr.aria-invalid]="(_valid() ?? validation()) === 'invalid'"
8431
+ [attr.data-custom-validity]="_valid() ?? validation()"
8414
8432
  #_ref
8415
8433
  [required]="getBoolean(required(), 'required')"
8416
8434
  [disabled]="getBoolean(disabled(), 'disabled')"
@@ -8495,7 +8513,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
8495
8513
  role="status"
8496
8514
  >{{_voiceOverFallback()}}</span
8497
8515
  >
8498
- </div> `, styles: [":host{display:contents}\n"] }]
8516
+ </div> `, styles: [":host{display:contents}:host([hidden]){display:none!important}\n"] }]
8499
8517
  }], ctorParameters: () => [{ type: i0.Renderer2 }], propDecorators: { invalidMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalidMessage", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], propOverrides: [{ type: i0.Input, args: [{ isSignal: true, alias: "propOverrides", required: false }] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }], showMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "showMessage", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], validMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "validMessage", required: false }] }], validation: [{ type: i0.Input, args: [{ isSignal: true, alias: "validation", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], showEmptyOption: [{ type: i0.Input, args: [{ isSignal: true, alias: "showEmptyOption", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], showLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLabel", required: false }] }], showRequiredAsterisk: [{ type: i0.Input, args: [{ isSignal: true, alias: "showRequiredAsterisk", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], showIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "showIcon", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], autocomplete: [{ type: i0.Input, args: [{ isSignal: true, alias: "autocomplete", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], ariaDescribedBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaDescribedBy", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], messageIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "messageIcon", required: false }] }], click: [{ type: i0.Output, args: ["click"] }], input: [{ type: i0.Output, args: ["input"] }], change: [{ type: i0.Output, args: ["change"] }], blur: [{ type: i0.Output, args: ["blur"] }], focus: [{ type: i0.Output, args: ["focus"] }], _ref: [{ type: i0.ViewChild, args: ["_ref", { isSignal: true }] }], hidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "hidden", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], isHidden: [{
8500
8518
  type: HostBinding,
8501
8519
  args: ['hidden']
@@ -8628,7 +8646,7 @@ const StackJustifyContentList = ['space-between', 'start', 'end', 'center'];
8628
8646
  const defaultProps$d = {};
8629
8647
  class DBSwitch {
8630
8648
  hasValidState() {
8631
- return !!(this.validMessage() ?? this.validation() === "valid");
8649
+ return !!(this.validMessage() || this._valid() === 'valid' || this.validation() === "valid");
8632
8650
  }
8633
8651
  handleValidation() {
8634
8652
  // Signal Forms validation bridge: errors InputSignal has priority
@@ -8644,8 +8662,8 @@ class DBSwitch {
8644
8662
  }
8645
8663
  return; // Signal Forms errors take priority
8646
8664
  }
8647
- else if (this.errors() !== undefined) {
8648
- // Signal Forms provided errors=[] (valid state)
8665
+ else if (Array.isArray(signalFormErrors) && signalFormErrors.length === 0 && this._valid() === 'invalid') {
8666
+ // Signal Forms provided errors=[] after previous invalid state → now valid
8649
8667
  this._valid.set('valid');
8650
8668
  this._validMessage.set(DEFAULT_VALID_MESSAGE);
8651
8669
  this._invalidMessage.set('');
@@ -8936,7 +8954,7 @@ class DBSwitch {
8936
8954
  [attr.data-hide-label]="getHideProp(showLabel())"
8937
8955
  [attr.data-variant]="variant()"
8938
8956
  [attr.data-hide-asterisk]="getHideProp(showRequiredAsterisk())"
8939
- [attr.data-custom-validity]="validation()"
8957
+ [attr.data-custom-validity]="_valid() ?? validation()"
8940
8958
  [class]="cls('db-switch', className())"
8941
8959
  >
8942
8960
  <label [attr.for]="_id()"
@@ -8987,7 +9005,7 @@ class DBSwitch {
8987
9005
  role="status"
8988
9006
  >{{_voiceOverFallback()}}</span
8989
9007
  >
8990
- </div> `, isInline: true, styles: [":host{display:contents}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DBInfotext, selector: "db-infotext", inputs: ["id", "propOverrides", "className", "icon", "semantic", "size", "wrap", "showIcon", "text"] }] }); }
9008
+ </div> `, isInline: true, styles: [":host{display:contents}:host([hidden]){display:none!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DBInfotext, selector: "db-infotext", inputs: ["id", "propOverrides", "className", "icon", "semantic", "size", "wrap", "showIcon", "text"] }] }); }
8991
9009
  }
8992
9010
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: DBSwitch, decorators: [{
8993
9011
  type: Component,
@@ -9001,7 +9019,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
9001
9019
  [attr.data-hide-label]="getHideProp(showLabel())"
9002
9020
  [attr.data-variant]="variant()"
9003
9021
  [attr.data-hide-asterisk]="getHideProp(showRequiredAsterisk())"
9004
- [attr.data-custom-validity]="validation()"
9022
+ [attr.data-custom-validity]="_valid() ?? validation()"
9005
9023
  [class]="cls('db-switch', className())"
9006
9024
  >
9007
9025
  <label [attr.for]="_id()"
@@ -9052,7 +9070,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
9052
9070
  role="status"
9053
9071
  >{{_voiceOverFallback()}}</span
9054
9072
  >
9055
- </div> `, styles: [":host{display:contents}\n"] }]
9073
+ </div> `, styles: [":host{display:contents}:host([hidden]){display:none!important}\n"] }]
9056
9074
  }], ctorParameters: () => [{ type: i0.Renderer2 }], propDecorators: { invalidMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalidMessage", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], propOverrides: [{ type: i0.Input, args: [{ isSignal: true, alias: "propOverrides", required: false }] }], validation: [{ type: i0.Input, args: [{ isSignal: true, alias: "validation", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }], showMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "showMessage", required: false }] }], validMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "validMessage", required: false }] }], checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }, { type: i0.Output, args: ["checkedChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }], visualAid: [{ type: i0.Input, args: [{ isSignal: true, alias: "visualAid", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], showLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLabel", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], showRequiredAsterisk: [{ type: i0.Input, args: [{ isSignal: true, alias: "showRequiredAsterisk", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], iconLeading: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconLeading", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], iconTrailing: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconTrailing", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], messageIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "messageIcon", required: false }] }], change: [{ type: i0.Output, args: ["change"] }], blur: [{ type: i0.Output, args: ["blur"] }], focus: [{ type: i0.Output, args: ["focus"] }], _ref: [{ type: i0.ViewChild, args: ["_ref", { isSignal: true }] }], hidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "hidden", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], isHidden: [{
9057
9075
  type: HostBinding,
9058
9076
  args: ['hidden']
@@ -9278,7 +9296,7 @@ class DBTabItem {
9278
9296
  (input)="handleChange($event)" />
9279
9297
  @if(label()){{{label()}}} <ng-content></ng-content
9280
9298
  ></label>
9281
- </li> `, isInline: true, styles: [":host{display:contents}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
9299
+ </li> `, isInline: true, styles: [":host{display:contents}:host([hidden]){display:none!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
9282
9300
  }
9283
9301
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: DBTabItem, decorators: [{
9284
9302
  type: Component,
@@ -9306,7 +9324,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
9306
9324
  (input)="handleChange($event)" />
9307
9325
  @if(label()){{{label()}}} <ng-content></ng-content
9308
9326
  ></label>
9309
- </li> `, styles: [":host{display:contents}\n"] }]
9327
+ </li> `, styles: [":host{display:contents}:host([hidden]){display:none!important}\n"] }]
9310
9328
  }], ctorParameters: () => [{ type: i0.Renderer2 }], propDecorators: { active: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], propOverrides: [{ type: i0.Input, args: [{ isSignal: true, alias: "propOverrides", required: false }] }], iconLeading: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconLeading", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], iconTrailing: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconTrailing", required: false }] }], showIconLeading: [{ type: i0.Input, args: [{ isSignal: true, alias: "showIconLeading", required: false }] }], showIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "showIcon", required: false }] }], showIconTrailing: [{ type: i0.Input, args: [{ isSignal: true, alias: "showIconTrailing", required: false }] }], noText: [{ type: i0.Input, args: [{ isSignal: true, alias: "noText", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }], checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }, { type: i0.Output, args: ["checkedChange"] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], change: [{ type: i0.Output, args: ["change"] }], _ref: [{ type: i0.ViewChild, args: ["_ref", { isSignal: true }] }], hidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "hidden", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], isHidden: [{
9311
9329
  type: HostBinding,
9312
9330
  args: ['hidden']
@@ -10994,7 +11012,7 @@ const TagBehaviorList = ['static', 'removable'];
10994
11012
  const defaultProps = {};
10995
11013
  class DBTextarea {
10996
11014
  hasValidState() {
10997
- return !!(this.validMessage() ?? this.validation() === "valid");
11015
+ return !!(this.validMessage() || this._valid() === 'valid' || this.validation() === "valid");
10998
11016
  }
10999
11017
  handleValidation() {
11000
11018
  // Signal Forms validation bridge: errors InputSignal has priority
@@ -11010,8 +11028,8 @@ class DBTextarea {
11010
11028
  }
11011
11029
  return; // Signal Forms errors take priority
11012
11030
  }
11013
- else if (this.errors() !== undefined) {
11014
- // Signal Forms provided errors=[] (valid state)
11031
+ else if (Array.isArray(signalFormErrors) && signalFormErrors.length === 0 && this._valid() === 'invalid') {
11032
+ // Signal Forms provided errors=[] after previous invalid state → now valid
11015
11033
  this._valid.set('valid');
11016
11034
  this._validMessage.set(DEFAULT_VALID_MESSAGE);
11017
11035
  this._invalidMessage.set('');
@@ -11329,8 +11347,8 @@ class DBTextarea {
11329
11347
  >
11330
11348
  <label [attr.for]="_id()">{{label() ?? DEFAULT_LABEL}}</label>
11331
11349
  <textarea
11332
- [attr.aria-invalid]="validation() === 'invalid'"
11333
- [attr.data-custom-validity]="validation()"
11350
+ [attr.aria-invalid]="(_valid() ?? validation()) === 'invalid'"
11351
+ [attr.data-custom-validity]="_valid() ?? validation()"
11334
11352
  [attr.data-field-sizing]="fieldSizing()"
11335
11353
  #_ref
11336
11354
  [attr.id]="_id()"
@@ -11382,7 +11400,7 @@ class DBTextarea {
11382
11400
  role="status"
11383
11401
  >{{_voiceOverFallback()}}</span
11384
11402
  >
11385
- </div> `, isInline: true, styles: [":host{display:contents}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DBInfotext, selector: "db-infotext", inputs: ["id", "propOverrides", "className", "icon", "semantic", "size", "wrap", "showIcon", "text"] }] }); }
11403
+ </div> `, isInline: true, styles: [":host{display:contents}:host([hidden]){display:none!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DBInfotext, selector: "db-infotext", inputs: ["id", "propOverrides", "className", "icon", "semantic", "size", "wrap", "showIcon", "text"] }] }); }
11386
11404
  }
11387
11405
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: DBTextarea, decorators: [{
11388
11406
  type: Component,
@@ -11398,8 +11416,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
11398
11416
  >
11399
11417
  <label [attr.for]="_id()">{{label() ?? DEFAULT_LABEL}}</label>
11400
11418
  <textarea
11401
- [attr.aria-invalid]="validation() === 'invalid'"
11402
- [attr.data-custom-validity]="validation()"
11419
+ [attr.aria-invalid]="(_valid() ?? validation()) === 'invalid'"
11420
+ [attr.data-custom-validity]="_valid() ?? validation()"
11403
11421
  [attr.data-field-sizing]="fieldSizing()"
11404
11422
  #_ref
11405
11423
  [attr.id]="_id()"
@@ -11451,7 +11469,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
11451
11469
  role="status"
11452
11470
  >{{_voiceOverFallback()}}</span
11453
11471
  >
11454
- </div> `, styles: [":host{display:contents}\n"] }]
11472
+ </div> `, styles: [":host{display:contents}:host([hidden]){display:none!important}\n"] }]
11455
11473
  }], ctorParameters: () => [{ type: i0.Renderer2 }], propDecorators: { invalidMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalidMessage", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], propOverrides: [{ type: i0.Input, args: [{ isSignal: true, alias: "propOverrides", required: false }] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }], showMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "showMessage", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], validMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "validMessage", required: false }] }], validation: [{ type: i0.Input, args: [{ isSignal: true, alias: "validation", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], minLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "minLength", required: false }] }], maxLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxLength", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], showRequiredAsterisk: [{ type: i0.Input, args: [{ isSignal: true, alias: "showRequiredAsterisk", required: false }] }], showLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLabel", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], fieldSizing: [{ type: i0.Input, args: [{ isSignal: true, alias: "fieldSizing", required: false }] }], resize: [{ type: i0.Input, args: [{ isSignal: true, alias: "resize", required: false }] }], showResizer: [{ type: i0.Input, args: [{ isSignal: true, alias: "showResizer", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }], readOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readOnly", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], form: [{ type: i0.Input, args: [{ isSignal: true, alias: "form", required: false }] }], maxlength: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxlength", required: false }] }], minlength: [{ type: i0.Input, args: [{ isSignal: true, alias: "minlength", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], wrap: [{ type: i0.Input, args: [{ isSignal: true, alias: "wrap", required: false }] }], spellCheck: [{ type: i0.Input, args: [{ isSignal: true, alias: "spellCheck", required: false }] }], autocomplete: [{ type: i0.Input, args: [{ isSignal: true, alias: "autocomplete", required: false }] }], ariaDescribedBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaDescribedBy", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], cols: [{ type: i0.Input, args: [{ isSignal: true, alias: "cols", required: false }] }], messageIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "messageIcon", required: false }] }], input: [{ type: i0.Output, args: ["input"] }], change: [{ type: i0.Output, args: ["change"] }], blur: [{ type: i0.Output, args: ["blur"] }], focus: [{ type: i0.Output, args: ["focus"] }], _ref: [{ type: i0.ViewChild, args: ["_ref", { isSignal: true }] }], hidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "hidden", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], isHidden: [{
11456
11474
  type: HostBinding,
11457
11475
  args: ['hidden']