@db-ux/ngx-core-components 4.13.1-angular-signal-forms5-fe63b55 → 4.13.1-angular-signal-forms6-a1510bb

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,9 +1425,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
1425
1425
  const defaultProps$B = {};
1426
1426
  class DBCheckbox {
1427
1427
  hasValidState() {
1428
+ if (this.validation() === 'no-validation')
1429
+ return false;
1428
1430
  return !!(this.validMessage() || this._valid() === 'valid' || this.validation() === "valid");
1429
1431
  }
1430
1432
  handleValidation() {
1433
+ // validation="no-validation" suppresses ALL validation UI (Signal Forms + native)
1434
+ if (this.validation() === 'no-validation') {
1435
+ this._valid.set(undefined);
1436
+ this._invalidMessage.set('');
1437
+ this._validMessage.set('');
1438
+ this._descByIds.set(undefined);
1439
+ return;
1440
+ }
1431
1441
  // Signal Forms validation bridge: errors InputSignal has priority
1432
1442
  const signalFormErrors = this.errors();
1433
1443
  if (Array.isArray(signalFormErrors) && signalFormErrors.length > 0) {
@@ -1447,6 +1457,12 @@ class DBCheckbox {
1447
1457
  this._validMessage.set(DEFAULT_VALID_MESSAGE);
1448
1458
  this._invalidMessage.set('');
1449
1459
  }
1460
+ // If Signal Forms says "valid" but native validation disagrees, reset _valid
1461
+ // so native validation can take over via CSS :user-invalid selectors
1462
+ if (this._valid() === 'valid' && this._ref()?.nativeElement && !this._ref()?.nativeElement?.validity?.valid) {
1463
+ this._valid.set(undefined);
1464
+ this._validMessage.set('');
1465
+ }
1450
1466
  /* For a11y reasons we need to map the correct message with the checkbox */
1451
1467
  if (!this._ref()?.nativeElement?.validity.valid ||
1452
1468
  this.validation() === "invalid") {
@@ -1754,8 +1770,8 @@ class DBCheckbox {
1754
1770
  <label [attr.for]="_id()"
1755
1771
  ><input
1756
1772
  type="checkbox"
1757
- [attr.aria-invalid]="(_valid() ?? validation()) === 'invalid'"
1758
- [attr.data-custom-validity]="_valid() ?? validation()"
1773
+ [attr.aria-invalid]="validation() !== 'no-validation' && (_valid() ?? validation()) === 'invalid'"
1774
+ [attr.data-custom-validity]="validation() === 'no-validation' ? 'no-validation' : (_valid() ?? validation())"
1759
1775
  #_ref
1760
1776
  [attr.id]="_id()"
1761
1777
  [attr.name]="name()"
@@ -1812,8 +1828,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
1812
1828
  <label [attr.for]="_id()"
1813
1829
  ><input
1814
1830
  type="checkbox"
1815
- [attr.aria-invalid]="(_valid() ?? validation()) === 'invalid'"
1816
- [attr.data-custom-validity]="_valid() ?? validation()"
1831
+ [attr.aria-invalid]="validation() !== 'no-validation' && (_valid() ?? validation()) === 'invalid'"
1832
+ [attr.data-custom-validity]="validation() === 'no-validation' ? 'no-validation' : (_valid() ?? validation())"
1817
1833
  #_ref
1818
1834
  [attr.id]="_id()"
1819
1835
  [attr.name]="name()"
@@ -2901,6 +2917,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
2901
2917
  const defaultProps$w = {};
2902
2918
  class DBInput {
2903
2919
  hasValidState() {
2920
+ if (this.validation() === 'no-validation')
2921
+ return false;
2904
2922
  return !!(this.validMessage() || this._valid() === 'valid' || this.validation() === "valid");
2905
2923
  }
2906
2924
  getPatternAttr() {
@@ -2912,6 +2930,14 @@ class DBInput {
2912
2930
  return undefined;
2913
2931
  }
2914
2932
  handleValidation() {
2933
+ // validation="no-validation" suppresses ALL validation UI (Signal Forms + native)
2934
+ if (this.validation() === 'no-validation') {
2935
+ this._valid.set(undefined);
2936
+ this._invalidMessage.set('');
2937
+ this._validMessage.set('');
2938
+ this._descByIds.set(undefined);
2939
+ return;
2940
+ }
2915
2941
  // Signal Forms validation bridge: errors InputSignal has priority
2916
2942
  const signalFormErrors = this.errors();
2917
2943
  if (Array.isArray(signalFormErrors) && signalFormErrors.length > 0) {
@@ -2931,6 +2957,12 @@ class DBInput {
2931
2957
  this._validMessage.set(DEFAULT_VALID_MESSAGE);
2932
2958
  this._invalidMessage.set('');
2933
2959
  }
2960
+ // If Signal Forms says "valid" but native validation disagrees, reset _valid
2961
+ // so native validation can take over via CSS :user-invalid selectors
2962
+ if (this._valid() === 'valid' && this._ref()?.nativeElement && !this._ref()?.nativeElement?.validity?.valid) {
2963
+ this._valid.set(undefined);
2964
+ this._validMessage.set('');
2965
+ }
2934
2966
  /* For a11y reasons we need to map the correct message with the input */
2935
2967
  if (!this._ref()?.nativeElement?.validity.valid ||
2936
2968
  this.validation() === "invalid") {
@@ -3285,8 +3317,8 @@ class DBInput {
3285
3317
  >
3286
3318
  <label [attr.for]="_id()">{{label() ?? DEFAULT_LABEL}}</label>
3287
3319
  <input
3288
- [attr.aria-invalid]="(_valid() ?? validation()) === 'invalid'"
3289
- [attr.data-custom-validity]="_valid() ?? validation()"
3320
+ [attr.aria-invalid]="validation() !== 'no-validation' && (_valid() ?? validation()) === 'invalid'"
3321
+ [attr.data-custom-validity]="validation() === 'no-validation' ? 'no-validation' : (_valid() ?? validation())"
3290
3322
  [attr.data-field-sizing]="fieldSizing()"
3291
3323
  #_ref
3292
3324
  [attr.id]="_id()"
@@ -3374,8 +3406,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
3374
3406
  >
3375
3407
  <label [attr.for]="_id()">{{label() ?? DEFAULT_LABEL}}</label>
3376
3408
  <input
3377
- [attr.aria-invalid]="(_valid() ?? validation()) === 'invalid'"
3378
- [attr.data-custom-validity]="_valid() ?? validation()"
3409
+ [attr.aria-invalid]="validation() !== 'no-validation' && (_valid() ?? validation()) === 'invalid'"
3410
+ [attr.data-custom-validity]="validation() === 'no-validation' ? 'no-validation' : (_valid() ?? validation())"
3379
3411
  [attr.data-field-sizing]="fieldSizing()"
3380
3412
  #_ref
3381
3413
  [attr.id]="_id()"
@@ -3953,9 +3985,20 @@ class DBCustomSelect {
3953
3985
  }
3954
3986
  }
3955
3987
  hasValidState() {
3988
+ if (this.validation() === 'no-validation')
3989
+ return false;
3956
3990
  return !!(this.validMessage() || this._valid() === 'valid' || this.validation() === "valid");
3957
3991
  }
3958
3992
  handleValidation() {
3993
+ // validation="no-validation" suppresses ALL validation UI (Signal Forms + native)
3994
+ if (this.validation() === 'no-validation') {
3995
+ this._valid.set(undefined);
3996
+ this._validity.set(undefined);
3997
+ this._invalidMessage.set('');
3998
+ this._validMessage.set('');
3999
+ this._descByIds.set(undefined);
4000
+ return;
4001
+ }
3959
4002
  // Signal Forms validation bridge: errors InputSignal has priority
3960
4003
  const signalFormErrors = this.errors();
3961
4004
  if (Array.isArray(signalFormErrors) && signalFormErrors.length > 0) {
@@ -3977,6 +4020,13 @@ class DBCustomSelect {
3977
4020
  this._validMessage.set(DEFAULT_VALID_MESSAGE);
3978
4021
  this._invalidMessage.set('');
3979
4022
  }
4023
+ // If Signal Forms says "valid" but native validation disagrees, reset _valid
4024
+ // so native validation can take over via CSS :user-invalid selectors
4025
+ if (this._valid() === 'valid' && this._ref()?.nativeElement && !this._ref()?.nativeElement?.validity?.valid) {
4026
+ this._valid.set(undefined);
4027
+ this._validity.set(undefined);
4028
+ this._validMessage.set('');
4029
+ }
3980
4030
  if (this.selectRef()?.nativeElement) {
3981
4031
  this.selectRef().nativeElement.value = this.getNativeSelectValue();
3982
4032
  }
@@ -7953,9 +8003,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
7953
8003
  const defaultProps$f = {};
7954
8004
  class DBSelect {
7955
8005
  hasValidState() {
8006
+ if (this.validation() === 'no-validation')
8007
+ return false;
7956
8008
  return !!(this.validMessage() || this._valid() === 'valid' || this.validation() === "valid");
7957
8009
  }
7958
8010
  handleValidation() {
8011
+ // validation="no-validation" suppresses ALL validation UI (Signal Forms + native)
8012
+ if (this.validation() === 'no-validation') {
8013
+ this._valid.set(undefined);
8014
+ this._invalidMessage.set('');
8015
+ this._validMessage.set('');
8016
+ this._descByIds.set(undefined);
8017
+ return;
8018
+ }
7959
8019
  // Signal Forms validation bridge: errors InputSignal has priority
7960
8020
  const signalFormErrors = this.errors();
7961
8021
  if (Array.isArray(signalFormErrors) && signalFormErrors.length > 0) {
@@ -7975,6 +8035,12 @@ class DBSelect {
7975
8035
  this._validMessage.set(DEFAULT_VALID_MESSAGE);
7976
8036
  this._invalidMessage.set('');
7977
8037
  }
8038
+ // If Signal Forms says "valid" but native validation disagrees, reset _valid
8039
+ // so native validation can take over via CSS :user-invalid selectors
8040
+ if (this._valid() === 'valid' && this._ref()?.nativeElement && !this._ref()?.nativeElement?.validity?.valid) {
8041
+ this._valid.set(undefined);
8042
+ this._validMessage.set('');
8043
+ }
7978
8044
  /* For a11y reasons we need to map the correct message with the select */
7979
8045
  if (!this._ref()?.nativeElement?.validity.valid ||
7980
8046
  this.validation() === "invalid") {
@@ -8323,8 +8389,8 @@ class DBSelect {
8323
8389
  >
8324
8390
  <label [attr.for]="_id()">{{label() ?? DEFAULT_LABEL}}</label>
8325
8391
  <select
8326
- [attr.aria-invalid]="(_valid() ?? validation()) === 'invalid'"
8327
- [attr.data-custom-validity]="_valid() ?? validation()"
8392
+ [attr.aria-invalid]="validation() !== 'no-validation' && (_valid() ?? validation()) === 'invalid'"
8393
+ [attr.data-custom-validity]="validation() === 'no-validation' ? 'no-validation' : (_valid() ?? validation())"
8328
8394
  #_ref
8329
8395
  [required]="getBoolean(required(), 'required')"
8330
8396
  [disabled]="getBoolean(disabled(), 'disabled')"
@@ -8427,8 +8493,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
8427
8493
  >
8428
8494
  <label [attr.for]="_id()">{{label() ?? DEFAULT_LABEL}}</label>
8429
8495
  <select
8430
- [attr.aria-invalid]="(_valid() ?? validation()) === 'invalid'"
8431
- [attr.data-custom-validity]="_valid() ?? validation()"
8496
+ [attr.aria-invalid]="validation() !== 'no-validation' && (_valid() ?? validation()) === 'invalid'"
8497
+ [attr.data-custom-validity]="validation() === 'no-validation' ? 'no-validation' : (_valid() ?? validation())"
8432
8498
  #_ref
8433
8499
  [required]="getBoolean(required(), 'required')"
8434
8500
  [disabled]="getBoolean(disabled(), 'disabled')"
@@ -8646,9 +8712,19 @@ const StackJustifyContentList = ['space-between', 'start', 'end', 'center'];
8646
8712
  const defaultProps$d = {};
8647
8713
  class DBSwitch {
8648
8714
  hasValidState() {
8715
+ if (this.validation() === 'no-validation')
8716
+ return false;
8649
8717
  return !!(this.validMessage() || this._valid() === 'valid' || this.validation() === "valid");
8650
8718
  }
8651
8719
  handleValidation() {
8720
+ // validation="no-validation" suppresses ALL validation UI (Signal Forms + native)
8721
+ if (this.validation() === 'no-validation') {
8722
+ this._valid.set(undefined);
8723
+ this._invalidMessage.set('');
8724
+ this._validMessage.set('');
8725
+ this._descByIds.set(undefined);
8726
+ return;
8727
+ }
8652
8728
  // Signal Forms validation bridge: errors InputSignal has priority
8653
8729
  const signalFormErrors = this.errors();
8654
8730
  if (Array.isArray(signalFormErrors) && signalFormErrors.length > 0) {
@@ -8668,6 +8744,12 @@ class DBSwitch {
8668
8744
  this._validMessage.set(DEFAULT_VALID_MESSAGE);
8669
8745
  this._invalidMessage.set('');
8670
8746
  }
8747
+ // If Signal Forms says "valid" but native validation disagrees, reset _valid
8748
+ // so native validation can take over via CSS :user-invalid selectors
8749
+ if (this._valid() === 'valid' && this._ref()?.nativeElement && !this._ref()?.nativeElement?.validity?.valid) {
8750
+ this._valid.set(undefined);
8751
+ this._validMessage.set('');
8752
+ }
8671
8753
  if (!this._ref()?.nativeElement?.validity?.valid ||
8672
8754
  this.validation() === "invalid") {
8673
8755
  this._descByIds.set(this._invalidMessageId());
@@ -8954,7 +9036,7 @@ class DBSwitch {
8954
9036
  [attr.data-hide-label]="getHideProp(showLabel())"
8955
9037
  [attr.data-variant]="variant()"
8956
9038
  [attr.data-hide-asterisk]="getHideProp(showRequiredAsterisk())"
8957
- [attr.data-custom-validity]="_valid() ?? validation()"
9039
+ [attr.data-custom-validity]="validation() === 'no-validation' ? 'no-validation' : (_valid() ?? validation())"
8958
9040
  [class]="cls('db-switch', className())"
8959
9041
  >
8960
9042
  <label [attr.for]="_id()"
@@ -8966,7 +9048,7 @@ class DBSwitch {
8966
9048
  [checked]="getBoolean(checked(), 'checked')"
8967
9049
  [value]="value()"
8968
9050
  [disabled]="getBoolean(disabled(), 'disabled')"
8969
- [attr.aria-invalid]="validation() === 'invalid' ? 'true' : undefined"
9051
+ [attr.aria-invalid]="validation() !== 'no-validation' && (_valid() ?? validation()) === 'invalid' ? 'true' : undefined"
8970
9052
  [attr.aria-describedby]="_descByIds()"
8971
9053
  [attr.name]="name()"
8972
9054
  [required]="getBoolean(required(), 'required')"
@@ -9019,7 +9101,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
9019
9101
  [attr.data-hide-label]="getHideProp(showLabel())"
9020
9102
  [attr.data-variant]="variant()"
9021
9103
  [attr.data-hide-asterisk]="getHideProp(showRequiredAsterisk())"
9022
- [attr.data-custom-validity]="_valid() ?? validation()"
9104
+ [attr.data-custom-validity]="validation() === 'no-validation' ? 'no-validation' : (_valid() ?? validation())"
9023
9105
  [class]="cls('db-switch', className())"
9024
9106
  >
9025
9107
  <label [attr.for]="_id()"
@@ -9031,7 +9113,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
9031
9113
  [checked]="getBoolean(checked(), 'checked')"
9032
9114
  [value]="value()"
9033
9115
  [disabled]="getBoolean(disabled(), 'disabled')"
9034
- [attr.aria-invalid]="validation() === 'invalid' ? 'true' : undefined"
9116
+ [attr.aria-invalid]="validation() !== 'no-validation' && (_valid() ?? validation()) === 'invalid' ? 'true' : undefined"
9035
9117
  [attr.aria-describedby]="_descByIds()"
9036
9118
  [attr.name]="name()"
9037
9119
  [required]="getBoolean(required(), 'required')"
@@ -11012,9 +11094,19 @@ const TagBehaviorList = ['static', 'removable'];
11012
11094
  const defaultProps = {};
11013
11095
  class DBTextarea {
11014
11096
  hasValidState() {
11097
+ if (this.validation() === 'no-validation')
11098
+ return false;
11015
11099
  return !!(this.validMessage() || this._valid() === 'valid' || this.validation() === "valid");
11016
11100
  }
11017
11101
  handleValidation() {
11102
+ // validation="no-validation" suppresses ALL validation UI (Signal Forms + native)
11103
+ if (this.validation() === 'no-validation') {
11104
+ this._valid.set(undefined);
11105
+ this._invalidMessage.set('');
11106
+ this._validMessage.set('');
11107
+ this._descByIds.set(undefined);
11108
+ return;
11109
+ }
11018
11110
  // Signal Forms validation bridge: errors InputSignal has priority
11019
11111
  const signalFormErrors = this.errors();
11020
11112
  if (Array.isArray(signalFormErrors) && signalFormErrors.length > 0) {
@@ -11034,6 +11126,12 @@ class DBTextarea {
11034
11126
  this._validMessage.set(DEFAULT_VALID_MESSAGE);
11035
11127
  this._invalidMessage.set('');
11036
11128
  }
11129
+ // If Signal Forms says "valid" but native validation disagrees, reset _valid
11130
+ // so native validation can take over via CSS :user-invalid selectors
11131
+ if (this._valid() === 'valid' && this._ref()?.nativeElement && !this._ref()?.nativeElement?.validity?.valid) {
11132
+ this._valid.set(undefined);
11133
+ this._validMessage.set('');
11134
+ }
11037
11135
  /* For a11y reasons we need to map the correct message with the textarea */
11038
11136
  if (!this._ref()?.nativeElement?.validity.valid ||
11039
11137
  this.validation() === "invalid") {
@@ -11347,8 +11445,8 @@ class DBTextarea {
11347
11445
  >
11348
11446
  <label [attr.for]="_id()">{{label() ?? DEFAULT_LABEL}}</label>
11349
11447
  <textarea
11350
- [attr.aria-invalid]="(_valid() ?? validation()) === 'invalid'"
11351
- [attr.data-custom-validity]="_valid() ?? validation()"
11448
+ [attr.aria-invalid]="validation() !== 'no-validation' && (_valid() ?? validation()) === 'invalid'"
11449
+ [attr.data-custom-validity]="validation() === 'no-validation' ? 'no-validation' : (_valid() ?? validation())"
11352
11450
  [attr.data-field-sizing]="fieldSizing()"
11353
11451
  #_ref
11354
11452
  [attr.id]="_id()"
@@ -11416,8 +11514,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
11416
11514
  >
11417
11515
  <label [attr.for]="_id()">{{label() ?? DEFAULT_LABEL}}</label>
11418
11516
  <textarea
11419
- [attr.aria-invalid]="(_valid() ?? validation()) === 'invalid'"
11420
- [attr.data-custom-validity]="_valid() ?? validation()"
11517
+ [attr.aria-invalid]="validation() !== 'no-validation' && (_valid() ?? validation()) === 'invalid'"
11518
+ [attr.data-custom-validity]="validation() === 'no-validation' ? 'no-validation' : (_valid() ?? validation())"
11421
11519
  [attr.data-field-sizing]="fieldSizing()"
11422
11520
  #_ref
11423
11521
  [attr.id]="_id()"