@db-ux/ngx-core-components 4.13.1-angular-signal-forms6-a1510bb → 4.13.1-angular-signal-forms10-4a8c8e1

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.
@@ -144,8 +144,36 @@ const stringPropVisible = (givenString, showString) => {
144
144
  return toBool(showString) && Boolean(givenString);
145
145
  };
146
146
  const getSearchInput = (element) => element.querySelector(`input[type="search"]`);
147
+ // WeakMap to store generated keys for option objects without mutating them.
148
+ // Used only as a last resort for options that have neither id, value, nor label.
149
+ const optionKeyMap = new WeakMap();
147
150
  const getOptionKey = (option, prefix) => {
148
- const key = option.id ?? option.value ?? uuid();
151
+ // 1. Consumer-provided id stable and unique (best case).
152
+ if (option.id) {
153
+ return `${prefix}${option.id}`;
154
+ }
155
+ // 2. Data-based key from value and/or label — stable across object
156
+ // recreations (e.g. inline options={[...]} on every render).
157
+ // Combining both fields maximizes uniqueness: two options may share
158
+ // a value but users couldn't distinguish identical labels, so in
159
+ // practice the combination is unique.
160
+ // We prefix each segment with its length to avoid ambiguous
161
+ // concatenations (e.g. 'a-b'+'c' vs 'a'+'b-c').
162
+ const value = option.value !== undefined && option.value !== '' ? String(option.value) : '';
163
+ const label = option.label ?? '';
164
+ if (value || label) {
165
+ return `${prefix}${value.length}:${value}.${label}`;
166
+ }
167
+ // 3. Last resort for truly anonymous options (no id, no value, no label).
168
+ // WeakMap ties a generated uuid to the object reference so the key
169
+ // persists as long as the same object is reused. If the consumer
170
+ // recreates these objects every render, keys will be unstable — but
171
+ // that's an unsolvable edge case without any data to anchor to.
172
+ let key = optionKeyMap.get(option);
173
+ if (!key) {
174
+ key = uuid();
175
+ optionKeyMap.set(option, key);
176
+ }
149
177
  return `${prefix}${key}`;
150
178
  };
151
179
  const isKeyboardEvent = (event) => event.key !== undefined;
@@ -1442,7 +1470,7 @@ class DBCheckbox {
1442
1470
  const signalFormErrors = this.errors();
1443
1471
  if (Array.isArray(signalFormErrors) && signalFormErrors.length > 0) {
1444
1472
  this._descByIds.set(this._invalidMessageId());
1445
- this._invalidMessage.set(signalFormErrors[0].message ?? DEFAULT_INVALID_MESSAGE);
1473
+ this._invalidMessage.set(this.invalidMessage() || signalFormErrors[0].message || this._ref()?.nativeElement?.validationMessage || DEFAULT_INVALID_MESSAGE);
1446
1474
  this._validMessage.set('');
1447
1475
  this._valid.set('invalid');
1448
1476
  if (hasVoiceOver()) {
@@ -1459,7 +1487,7 @@ class DBCheckbox {
1459
1487
  }
1460
1488
  // If Signal Forms says "valid" but native validation disagrees, reset _valid
1461
1489
  // so native validation can take over via CSS :user-invalid selectors
1462
- if (this._valid() === 'valid' && this._ref()?.nativeElement && !this._ref()?.nativeElement?.validity?.valid) {
1490
+ if (this._valid() === 'valid' && this._ref()?.nativeElement?.validity && !this._ref()?.nativeElement?.validity?.valid) {
1463
1491
  this._valid.set(undefined);
1464
1492
  this._validMessage.set('');
1465
1493
  }
@@ -1502,6 +1530,7 @@ class DBCheckbox {
1502
1530
  this.handleValidation();
1503
1531
  }
1504
1532
  handleBlur(event) {
1533
+ this.propagateTouched();
1505
1534
  if (this.blur) {
1506
1535
  this.blur.emit(event);
1507
1536
  }
@@ -1586,6 +1615,14 @@ class DBCheckbox {
1586
1615
  /** @internal Signal Forms validation state */
1587
1616
  this._valid = signal(undefined, ...(ngDevMode ? [{ debugName: "_valid" }] : /* istanbul ignore next */ []));
1588
1617
  if (typeof window !== "undefined") {
1618
+ // Signal Forms: re-run validation when errors or validation prop changes externally
1619
+ effect(() => {
1620
+ this.errors();
1621
+ this.validation();
1622
+ this.handleValidation();
1623
+ }, Number(VERSION.major) < 19
1624
+ ? { allowSignalWrites: true }
1625
+ : undefined);
1589
1626
  effect(() => {
1590
1627
  // --- Mitosis: Workaround to make sure the effect() is triggered ---
1591
1628
  this.id();
@@ -1720,6 +1757,13 @@ class DBCheckbox {
1720
1757
  }
1721
1758
  }
1722
1759
  }
1760
+ /**
1761
+ * Reflect Signal Forms hidden state to the host element.
1762
+ * This intentionally intercepts Angular's native [hidden] binding —
1763
+ * consumers using [hidden]="condition" will hide the component via
1764
+ * :host([hidden]) { display: none !important }.
1765
+ */
1766
+ get isHidden() { return this.hidden(); }
1723
1767
  /** @legacy CVA - will be removed in a future major version */
1724
1768
  writeValue(value) {
1725
1769
  this.checked.set(!!value);
@@ -1735,13 +1779,14 @@ class DBCheckbox {
1735
1779
  }
1736
1780
  /** @legacy CVA - will be removed in a future major version */
1737
1781
  registerOnTouched(onTouched) {
1782
+ this.propagateTouched = onTouched;
1738
1783
  }
1739
1784
  /** @legacy CVA - will be removed in a future major version */
1785
+ propagateTouched() { }
1786
+ /** @legacy CVA - will be removed in a future major version */
1740
1787
  setDisabledState(disabled) {
1741
1788
  this.disabled.set(disabled);
1742
1789
  }
1743
- /** Reflect Signal Forms hidden state to the host element */
1744
- get isHidden() { return this.hidden(); }
1745
1790
  ngAfterViewInit() {
1746
1791
  const element = this._ref()?.nativeElement;
1747
1792
  this.enableAttributePassing(element, "db-checkbox");
@@ -2693,6 +2738,13 @@ class DBCustomSelectListItem {
2693
2738
  }
2694
2739
  }
2695
2740
  }
2741
+ /**
2742
+ * Reflect Signal Forms hidden state to the host element.
2743
+ * This intentionally intercepts Angular's native [hidden] binding —
2744
+ * consumers using [hidden]="condition" will hide the component via
2745
+ * :host([hidden]) { display: none !important }.
2746
+ */
2747
+ get isHidden() { return this.hidden(); }
2696
2748
  /** @legacy CVA - will be removed in a future major version */
2697
2749
  writeValue(value) {
2698
2750
  this.checked.set(!!value);
@@ -2708,13 +2760,14 @@ class DBCustomSelectListItem {
2708
2760
  }
2709
2761
  /** @legacy CVA - will be removed in a future major version */
2710
2762
  registerOnTouched(onTouched) {
2763
+ this.propagateTouched = onTouched;
2711
2764
  }
2712
2765
  /** @legacy CVA - will be removed in a future major version */
2766
+ propagateTouched() { }
2767
+ /** @legacy CVA - will be removed in a future major version */
2713
2768
  setDisabledState(disabled) {
2714
2769
  this.disabled.set(disabled);
2715
2770
  }
2716
- /** Reflect Signal Forms hidden state to the host element */
2717
- get isHidden() { return this.hidden(); }
2718
2771
  ngAfterViewInit() {
2719
2772
  const element = this._ref()?.nativeElement;
2720
2773
  this.enableAttributePassing(element, "db-custom-select-list-item");
@@ -2942,7 +2995,7 @@ class DBInput {
2942
2995
  const signalFormErrors = this.errors();
2943
2996
  if (Array.isArray(signalFormErrors) && signalFormErrors.length > 0) {
2944
2997
  this._descByIds.set(this._invalidMessageId());
2945
- this._invalidMessage.set(signalFormErrors[0].message ?? DEFAULT_INVALID_MESSAGE);
2998
+ this._invalidMessage.set(this.invalidMessage() || signalFormErrors[0].message || this._ref()?.nativeElement?.validationMessage || DEFAULT_INVALID_MESSAGE);
2946
2999
  this._validMessage.set('');
2947
3000
  this._valid.set('invalid');
2948
3001
  if (hasVoiceOver()) {
@@ -2959,7 +3012,7 @@ class DBInput {
2959
3012
  }
2960
3013
  // If Signal Forms says "valid" but native validation disagrees, reset _valid
2961
3014
  // so native validation can take over via CSS :user-invalid selectors
2962
- if (this._valid() === 'valid' && this._ref()?.nativeElement && !this._ref()?.nativeElement?.validity?.valid) {
3015
+ if (this._valid() === 'valid' && this._ref()?.nativeElement?.validity && !this._ref()?.nativeElement?.validity?.valid) {
2963
3016
  this._valid.set(undefined);
2964
3017
  this._validMessage.set('');
2965
3018
  }
@@ -3014,6 +3067,7 @@ class DBInput {
3014
3067
  this.handleValidation();
3015
3068
  }
3016
3069
  handleBlur(event) {
3070
+ this.propagateTouched();
3017
3071
  if (this.blur) {
3018
3072
  this.blur.emit(event);
3019
3073
  }
@@ -3150,6 +3204,14 @@ class DBInput {
3150
3204
  /** @internal Signal Forms validation state */
3151
3205
  this._valid = signal(undefined, ...(ngDevMode ? [{ debugName: "_valid" }] : /* istanbul ignore next */ []));
3152
3206
  if (typeof window !== "undefined") {
3207
+ // Signal Forms: re-run validation when errors or validation prop changes externally
3208
+ effect(() => {
3209
+ this.errors();
3210
+ this.validation();
3211
+ this.handleValidation();
3212
+ }, Number(VERSION.major) < 19
3213
+ ? { allowSignalWrites: true }
3214
+ : undefined);
3153
3215
  effect(() => {
3154
3216
  // --- Mitosis: Workaround to make sure the effect() is triggered ---
3155
3217
  this.id();
@@ -3265,6 +3327,13 @@ class DBInput {
3265
3327
  }
3266
3328
  }
3267
3329
  }
3330
+ /**
3331
+ * Reflect Signal Forms hidden state to the host element.
3332
+ * This intentionally intercepts Angular's native [hidden] binding —
3333
+ * consumers using [hidden]="condition" will hide the component via
3334
+ * :host([hidden]) { display: none !important }.
3335
+ */
3336
+ get isHidden() { return this.hidden(); }
3268
3337
  /** @legacy CVA - will be removed in a future major version */
3269
3338
  writeValue(value) {
3270
3339
  this.value.set(value);
@@ -3280,13 +3349,14 @@ class DBInput {
3280
3349
  }
3281
3350
  /** @legacy CVA - will be removed in a future major version */
3282
3351
  registerOnTouched(onTouched) {
3352
+ this.propagateTouched = onTouched;
3283
3353
  }
3284
3354
  /** @legacy CVA - will be removed in a future major version */
3355
+ propagateTouched() { }
3356
+ /** @legacy CVA - will be removed in a future major version */
3285
3357
  setDisabledState(disabled) {
3286
3358
  this.disabled.set(disabled);
3287
3359
  }
3288
- /** Reflect Signal Forms hidden state to the host element */
3289
- get isHidden() { return this.hidden(); }
3290
3360
  ngAfterViewInit() {
3291
3361
  const element = this._ref()?.nativeElement;
3292
3362
  this.enableAttributePassing(element, "db-input");
@@ -4003,14 +4073,14 @@ class DBCustomSelect {
4003
4073
  const signalFormErrors = this.errors();
4004
4074
  if (Array.isArray(signalFormErrors) && signalFormErrors.length > 0) {
4005
4075
  this._descByIds.set(this._invalidMessageId());
4006
- this._invalidMessage.set(signalFormErrors[0].message ?? DEFAULT_INVALID_MESSAGE);
4076
+ this._invalidMessage.set(this.invalidMessage() || signalFormErrors[0].message || this._ref()?.nativeElement?.validationMessage || DEFAULT_INVALID_MESSAGE);
4007
4077
  this._validMessage.set('');
4008
4078
  this._valid.set('invalid');
4079
+ this._validity.set('invalid');
4009
4080
  if (hasVoiceOver()) {
4010
4081
  this._voiceOverFallback.set(this._invalidMessage());
4011
4082
  void delay(() => this._voiceOverFallback.set(""), 1000);
4012
4083
  }
4013
- this._validity.set('invalid');
4014
4084
  return; // Signal Forms errors take priority
4015
4085
  }
4016
4086
  else if (Array.isArray(signalFormErrors) && signalFormErrors.length === 0 && this._valid() === 'invalid') {
@@ -4022,7 +4092,7 @@ class DBCustomSelect {
4022
4092
  }
4023
4093
  // If Signal Forms says "valid" but native validation disagrees, reset _valid
4024
4094
  // so native validation can take over via CSS :user-invalid selectors
4025
- if (this._valid() === 'valid' && this._ref()?.nativeElement && !this._ref()?.nativeElement?.validity?.valid) {
4095
+ if (this._valid() === 'valid' && this._ref()?.nativeElement?.validity && !this._ref()?.nativeElement?.validity?.valid) {
4026
4096
  this._valid.set(undefined);
4027
4097
  this._validity.set(undefined);
4028
4098
  this._validMessage.set('');
@@ -4588,30 +4658,43 @@ class DBCustomSelect {
4588
4658
  this._valid = signal(undefined, ...(ngDevMode ? [{ debugName: "_valid" }] : /* istanbul ignore next */ []));
4589
4659
  /** Signal Forms alias — maps to 'values' for FormValueControl duck-typing */
4590
4660
  this.value = model(...(ngDevMode ? [undefined, { debugName: "value" }] : /* istanbul ignore next */ []));
4591
- /** @internal Flag to prevent circular sync between value↔values */
4592
- this._syncing = false;
4661
+ /**
4662
+ * @internal Tracks the origin of the last write to prevent infinite ping-pong.
4663
+ * Convergence is guaranteed by Angular's signal equality check
4664
+ * (setting a signal to the same value does not re-notify dependents).
4665
+ */
4666
+ this._syncSource = 'none';
4593
4667
  /** @internal Sync value → values (Signal Forms writes to value) */
4594
4668
  this._syncValueToValues = effect(() => {
4595
4669
  const v = this.value();
4596
- if (this._syncing)
4670
+ if (this._syncSource === 'values') {
4671
+ this._syncSource = 'none';
4597
4672
  return;
4598
- this._syncing = true;
4673
+ }
4674
+ this._syncSource = 'value';
4599
4675
  if (v !== undefined) {
4600
4676
  this.values.set(Array.isArray(v) ? v : v ? [v] : []);
4601
4677
  }
4602
- this._syncing = false;
4603
4678
  }, ...(ngDevMode ? [{ debugName: "_syncValueToValues" }] : /* istanbul ignore next */ []));
4604
4679
  /** @internal Sync values → value (CVA/user interaction writes to values) */
4605
4680
  this._syncValuesToValue = effect(() => {
4606
4681
  const vals = this.values();
4607
- if (this._syncing)
4682
+ if (this._syncSource === 'value') {
4683
+ this._syncSource = 'none';
4608
4684
  return;
4609
- this._syncing = true;
4610
- const current = vals && vals.length > 0 ? vals : undefined;
4611
- this.value.set(current);
4612
- this._syncing = false;
4685
+ }
4686
+ this._syncSource = 'values';
4687
+ this.value.set(vals ?? []);
4613
4688
  }, ...(ngDevMode ? [{ debugName: "_syncValuesToValue" }] : /* istanbul ignore next */ []));
4614
4689
  if (typeof window !== "undefined") {
4690
+ // Signal Forms: re-run validation when errors or validation prop changes externally
4691
+ effect(() => {
4692
+ this.errors();
4693
+ this.validation();
4694
+ this.handleValidation();
4695
+ }, Number(VERSION.major) < 19
4696
+ ? { allowSignalWrites: true }
4697
+ : undefined);
4615
4698
  effect(() => {
4616
4699
  // --- Mitosis: Workaround to make sure the effect() is triggered ---
4617
4700
  this.id();
@@ -4933,6 +5016,13 @@ class DBCustomSelect {
4933
5016
  }
4934
5017
  }
4935
5018
  }
5019
+ /**
5020
+ * Reflect Signal Forms hidden state to the host element.
5021
+ * This intentionally intercepts Angular's native [hidden] binding —
5022
+ * consumers using [hidden]="condition" will hide the component via
5023
+ * :host([hidden]) { display: none !important }.
5024
+ */
5025
+ get isHidden() { return this.hidden(); }
4936
5026
  /** @legacy CVA - will be removed in a future major version */
4937
5027
  writeValue(value) {
4938
5028
  this.values.set(value);
@@ -4948,13 +5038,14 @@ class DBCustomSelect {
4948
5038
  }
4949
5039
  /** @legacy CVA - will be removed in a future major version */
4950
5040
  registerOnTouched(onTouched) {
5041
+ this.propagateTouched = onTouched;
4951
5042
  }
4952
5043
  /** @legacy CVA - will be removed in a future major version */
5044
+ propagateTouched() { }
5045
+ /** @legacy CVA - will be removed in a future major version */
4953
5046
  setDisabledState(disabled) {
4954
5047
  this.disabled.set(disabled);
4955
5048
  }
4956
- /** Reflect Signal Forms hidden state to the host element */
4957
- get isHidden() { return this.hidden(); }
4958
5049
  ngAfterViewInit() {
4959
5050
  const element = this._ref()?.nativeElement;
4960
5051
  this.enableAttributePassing(element, "db-custom-select");
@@ -7631,6 +7722,7 @@ class DBRadio {
7631
7722
  handleFrameworkEventAngular(this, event);
7632
7723
  }
7633
7724
  handleBlur(event) {
7725
+ this.propagateTouched();
7634
7726
  if (this.blur) {
7635
7727
  this.blur.emit(event);
7636
7728
  }
@@ -7794,6 +7886,13 @@ class DBRadio {
7794
7886
  }
7795
7887
  }
7796
7888
  }
7889
+ /**
7890
+ * Reflect Signal Forms hidden state to the host element.
7891
+ * This intentionally intercepts Angular's native [hidden] binding —
7892
+ * consumers using [hidden]="condition" will hide the component via
7893
+ * :host([hidden]) { display: none !important }.
7894
+ */
7895
+ get isHidden() { return this.hidden(); }
7797
7896
  /** @legacy CVA - will be removed in a future major version */
7798
7897
  writeValue(value) {
7799
7898
  if (value) {
@@ -7811,13 +7910,14 @@ class DBRadio {
7811
7910
  }
7812
7911
  /** @legacy CVA - will be removed in a future major version */
7813
7912
  registerOnTouched(onTouched) {
7913
+ this.propagateTouched = onTouched;
7814
7914
  }
7815
7915
  /** @legacy CVA - will be removed in a future major version */
7916
+ propagateTouched() { }
7917
+ /** @legacy CVA - will be removed in a future major version */
7816
7918
  setDisabledState(disabled) {
7817
7919
  this.disabled.set(disabled);
7818
7920
  }
7819
- /** Reflect Signal Forms hidden state to the host element */
7820
- get isHidden() { return this.hidden(); }
7821
7921
  ngAfterViewInit() {
7822
7922
  const element = this._ref()?.nativeElement;
7823
7923
  this.enableAttributePassing(element, "db-radio");
@@ -8020,7 +8120,7 @@ class DBSelect {
8020
8120
  const signalFormErrors = this.errors();
8021
8121
  if (Array.isArray(signalFormErrors) && signalFormErrors.length > 0) {
8022
8122
  this._descByIds.set(this._invalidMessageId());
8023
- this._invalidMessage.set(signalFormErrors[0].message ?? DEFAULT_INVALID_MESSAGE);
8123
+ this._invalidMessage.set(this.invalidMessage() || signalFormErrors[0].message || this._ref()?.nativeElement?.validationMessage || DEFAULT_INVALID_MESSAGE);
8024
8124
  this._validMessage.set('');
8025
8125
  this._valid.set('invalid');
8026
8126
  if (hasVoiceOver()) {
@@ -8037,7 +8137,7 @@ class DBSelect {
8037
8137
  }
8038
8138
  // If Signal Forms says "valid" but native validation disagrees, reset _valid
8039
8139
  // so native validation can take over via CSS :user-invalid selectors
8040
- if (this._valid() === 'valid' && this._ref()?.nativeElement && !this._ref()?.nativeElement?.validity?.valid) {
8140
+ if (this._valid() === 'valid' && this._ref()?.nativeElement?.validity && !this._ref()?.nativeElement?.validity?.valid) {
8041
8141
  this._valid.set(undefined);
8042
8142
  this._validMessage.set('');
8043
8143
  }
@@ -8097,6 +8197,7 @@ class DBSelect {
8097
8197
  this.handleValidation();
8098
8198
  }
8099
8199
  handleBlur(event) {
8200
+ this.propagateTouched();
8100
8201
  if (this.blur) {
8101
8202
  this.blur.emit(event);
8102
8203
  }
@@ -8212,6 +8313,14 @@ class DBSelect {
8212
8313
  /** @internal Signal Forms validation state */
8213
8314
  this._valid = signal(undefined, ...(ngDevMode ? [{ debugName: "_valid" }] : /* istanbul ignore next */ []));
8214
8315
  if (typeof window !== "undefined") {
8316
+ // Signal Forms: re-run validation when errors or validation prop changes externally
8317
+ effect(() => {
8318
+ this.errors();
8319
+ this.validation();
8320
+ this.handleValidation();
8321
+ }, Number(VERSION.major) < 19
8322
+ ? { allowSignalWrites: true }
8323
+ : undefined);
8215
8324
  effect(() => {
8216
8325
  // --- Mitosis: Workaround to make sure the effect() is triggered ---
8217
8326
  this.id();
@@ -8336,6 +8445,13 @@ class DBSelect {
8336
8445
  }
8337
8446
  }
8338
8447
  }
8448
+ /**
8449
+ * Reflect Signal Forms hidden state to the host element.
8450
+ * This intentionally intercepts Angular's native [hidden] binding —
8451
+ * consumers using [hidden]="condition" will hide the component via
8452
+ * :host([hidden]) { display: none !important }.
8453
+ */
8454
+ get isHidden() { return this.hidden(); }
8339
8455
  /** @legacy CVA - will be removed in a future major version */
8340
8456
  writeValue(value) {
8341
8457
  this.value.set(value);
@@ -8351,13 +8467,14 @@ class DBSelect {
8351
8467
  }
8352
8468
  /** @legacy CVA - will be removed in a future major version */
8353
8469
  registerOnTouched(onTouched) {
8470
+ this.propagateTouched = onTouched;
8354
8471
  }
8355
8472
  /** @legacy CVA - will be removed in a future major version */
8473
+ propagateTouched() { }
8474
+ /** @legacy CVA - will be removed in a future major version */
8356
8475
  setDisabledState(disabled) {
8357
8476
  this.disabled.set(disabled);
8358
8477
  }
8359
- /** Reflect Signal Forms hidden state to the host element */
8360
- get isHidden() { return this.hidden(); }
8361
8478
  ngAfterViewInit() {
8362
8479
  const element = this._ref()?.nativeElement;
8363
8480
  this.enableAttributePassing(element, "db-select");
@@ -8729,7 +8846,7 @@ class DBSwitch {
8729
8846
  const signalFormErrors = this.errors();
8730
8847
  if (Array.isArray(signalFormErrors) && signalFormErrors.length > 0) {
8731
8848
  this._descByIds.set(this._invalidMessageId());
8732
- this._invalidMessage.set(signalFormErrors[0].message ?? DEFAULT_INVALID_MESSAGE);
8849
+ this._invalidMessage.set(this.invalidMessage() || signalFormErrors[0].message || this._ref()?.nativeElement?.validationMessage || DEFAULT_INVALID_MESSAGE);
8733
8850
  this._validMessage.set('');
8734
8851
  this._valid.set('invalid');
8735
8852
  if (hasVoiceOver()) {
@@ -8746,7 +8863,7 @@ class DBSwitch {
8746
8863
  }
8747
8864
  // If Signal Forms says "valid" but native validation disagrees, reset _valid
8748
8865
  // so native validation can take over via CSS :user-invalid selectors
8749
- if (this._valid() === 'valid' && this._ref()?.nativeElement && !this._ref()?.nativeElement?.validity?.valid) {
8866
+ if (this._valid() === 'valid' && this._ref()?.nativeElement?.validity && !this._ref()?.nativeElement?.validity?.valid) {
8750
8867
  this._valid.set(undefined);
8751
8868
  this._validMessage.set('');
8752
8869
  }
@@ -8793,6 +8910,7 @@ class DBSwitch {
8793
8910
  handleFrameworkEventAngular(this, event, "checked");
8794
8911
  }
8795
8912
  handleBlur(event) {
8913
+ this.propagateTouched();
8796
8914
  if (this.blur) {
8797
8915
  this.blur.emit(event);
8798
8916
  }
@@ -8890,6 +9008,14 @@ class DBSwitch {
8890
9008
  /** @internal Signal Forms validation state */
8891
9009
  this._valid = signal(undefined, ...(ngDevMode ? [{ debugName: "_valid" }] : /* istanbul ignore next */ []));
8892
9010
  if (typeof window !== "undefined") {
9011
+ // Signal Forms: re-run validation when errors or validation prop changes externally
9012
+ effect(() => {
9013
+ this.errors();
9014
+ this.validation();
9015
+ this.handleValidation();
9016
+ }, Number(VERSION.major) < 19
9017
+ ? { allowSignalWrites: true }
9018
+ : undefined);
8893
9019
  effect(() => {
8894
9020
  // --- Mitosis: Workaround to make sure the effect() is triggered ---
8895
9021
  this.id();
@@ -8989,6 +9115,13 @@ class DBSwitch {
8989
9115
  }
8990
9116
  }
8991
9117
  }
9118
+ /**
9119
+ * Reflect Signal Forms hidden state to the host element.
9120
+ * This intentionally intercepts Angular's native [hidden] binding —
9121
+ * consumers using [hidden]="condition" will hide the component via
9122
+ * :host([hidden]) { display: none !important }.
9123
+ */
9124
+ get isHidden() { return this.hidden(); }
8992
9125
  /** @legacy CVA - will be removed in a future major version */
8993
9126
  writeValue(value) {
8994
9127
  this.checked.set(!!value);
@@ -9004,13 +9137,14 @@ class DBSwitch {
9004
9137
  }
9005
9138
  /** @legacy CVA - will be removed in a future major version */
9006
9139
  registerOnTouched(onTouched) {
9140
+ this.propagateTouched = onTouched;
9007
9141
  }
9008
9142
  /** @legacy CVA - will be removed in a future major version */
9143
+ propagateTouched() { }
9144
+ /** @legacy CVA - will be removed in a future major version */
9009
9145
  setDisabledState(disabled) {
9010
9146
  this.disabled.set(disabled);
9011
9147
  }
9012
- /** Reflect Signal Forms hidden state to the host element */
9013
- get isHidden() { return this.hidden(); }
9014
9148
  ngAfterViewInit() {
9015
9149
  const element = this._ref()?.nativeElement;
9016
9150
  this.enableAttributePassing(element, "db-switch");
@@ -9311,6 +9445,13 @@ class DBTabItem {
9311
9445
  }
9312
9446
  }
9313
9447
  }
9448
+ /**
9449
+ * Reflect Signal Forms hidden state to the host element.
9450
+ * This intentionally intercepts Angular's native [hidden] binding —
9451
+ * consumers using [hidden]="condition" will hide the component via
9452
+ * :host([hidden]) { display: none !important }.
9453
+ */
9454
+ get isHidden() { return this.hidden(); }
9314
9455
  /** @legacy CVA - will be removed in a future major version */
9315
9456
  writeValue(value) {
9316
9457
  this.checked.set(!!value);
@@ -9326,13 +9467,14 @@ class DBTabItem {
9326
9467
  }
9327
9468
  /** @legacy CVA - will be removed in a future major version */
9328
9469
  registerOnTouched(onTouched) {
9470
+ this.propagateTouched = onTouched;
9329
9471
  }
9330
9472
  /** @legacy CVA - will be removed in a future major version */
9473
+ propagateTouched() { }
9474
+ /** @legacy CVA - will be removed in a future major version */
9331
9475
  setDisabledState(disabled) {
9332
9476
  this.disabled.set(disabled);
9333
9477
  }
9334
- /** Reflect Signal Forms hidden state to the host element */
9335
- get isHidden() { return this.hidden(); }
9336
9478
  ngAfterViewInit() {
9337
9479
  const element = this._ref()?.nativeElement;
9338
9480
  this.enableAttributePassing(element, "db-tab-item");
@@ -9625,6 +9767,7 @@ class DBTableDataCell {
9625
9767
  this.cls = cls;
9626
9768
  this.getNumber = getNumber;
9627
9769
  this.id = input(...(ngDevMode ? [undefined, { debugName: "id" }] : /* istanbul ignore next */ []));
9770
+ this.propOverrides = input(...(ngDevMode ? [undefined, { debugName: "propOverrides" }] : /* istanbul ignore next */ []));
9628
9771
  this.className = input(...(ngDevMode ? [undefined, { debugName: "className" }] : /* istanbul ignore next */ []));
9629
9772
  this.horizontalAlignment = input(...(ngDevMode ? [undefined, { debugName: "horizontalAlignment" }] : /* istanbul ignore next */ []));
9630
9773
  this.verticalAlignment = input(...(ngDevMode ? [undefined, { debugName: "verticalAlignment" }] : /* istanbul ignore next */ []));
@@ -9681,9 +9824,9 @@ class DBTableDataCell {
9681
9824
  this.enableAttributePassing(element, "db-table-data-cell");
9682
9825
  }
9683
9826
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: DBTableDataCell, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9684
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.17", type: DBTableDataCell, isStandalone: true, selector: "db-table-data-cell", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, horizontalAlignment: { classPropertyName: "horizontalAlignment", publicName: "horizontalAlignment", isSignal: true, isRequired: false, transformFunction: null }, verticalAlignment: { classPropertyName: "verticalAlignment", publicName: "verticalAlignment", isSignal: true, isRequired: false, transformFunction: null }, colSpan: { classPropertyName: "colSpan", publicName: "colSpan", isSignal: true, isRequired: false, transformFunction: null }, colspan: { classPropertyName: "colspan", publicName: "colspan", isSignal: true, isRequired: false, transformFunction: null }, rowSpan: { classPropertyName: "rowSpan", publicName: "rowSpan", isSignal: true, isRequired: false, transformFunction: null }, rowspan: { classPropertyName: "rowspan", publicName: "rowspan", isSignal: true, isRequired: false, transformFunction: null }, headers: { classPropertyName: "headers", publicName: "headers", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "_ref", first: true, predicate: ["_ref"], descendants: true, isSignal: true }], ngImport: i0, template: `<td
9827
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.17", type: DBTableDataCell, isStandalone: true, selector: "db-table-data-cell", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, propOverrides: { classPropertyName: "propOverrides", publicName: "propOverrides", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, horizontalAlignment: { classPropertyName: "horizontalAlignment", publicName: "horizontalAlignment", isSignal: true, isRequired: false, transformFunction: null }, verticalAlignment: { classPropertyName: "verticalAlignment", publicName: "verticalAlignment", isSignal: true, isRequired: false, transformFunction: null }, colSpan: { classPropertyName: "colSpan", publicName: "colSpan", isSignal: true, isRequired: false, transformFunction: null }, colspan: { classPropertyName: "colspan", publicName: "colspan", isSignal: true, isRequired: false, transformFunction: null }, rowSpan: { classPropertyName: "rowSpan", publicName: "rowSpan", isSignal: true, isRequired: false, transformFunction: null }, rowspan: { classPropertyName: "rowspan", publicName: "rowspan", isSignal: true, isRequired: false, transformFunction: null }, headers: { classPropertyName: "headers", publicName: "headers", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "_ref", first: true, predicate: ["_ref"], descendants: true, isSignal: true }], ngImport: i0, template: `<td
9685
9828
  #_ref
9686
- [attr.id]="id()"
9829
+ [attr.id]="id() ?? propOverrides()?.id"
9687
9830
  [class]="cls('db-table-data-cell', className())"
9688
9831
  [attr.data-horizontal-alignment]="horizontalAlignment()"
9689
9832
  [attr.data-vertical-alignment]="verticalAlignment()"
@@ -9698,7 +9841,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
9698
9841
  type: Component,
9699
9842
  args: [{ selector: "db-table-data-cell", standalone: true, imports: [CommonModule], template: `<td
9700
9843
  #_ref
9701
- [attr.id]="id()"
9844
+ [attr.id]="id() ?? propOverrides()?.id"
9702
9845
  [class]="cls('db-table-data-cell', className())"
9703
9846
  [attr.data-horizontal-alignment]="horizontalAlignment()"
9704
9847
  [attr.data-vertical-alignment]="verticalAlignment()"
@@ -9708,7 +9851,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
9708
9851
  >
9709
9852
  <ng-content></ng-content>
9710
9853
  </td> `, styles: [":host{display:contents}\n"] }]
9711
- }], ctorParameters: () => [], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], horizontalAlignment: [{ type: i0.Input, args: [{ isSignal: true, alias: "horizontalAlignment", required: false }] }], verticalAlignment: [{ type: i0.Input, args: [{ isSignal: true, alias: "verticalAlignment", required: false }] }], colSpan: [{ type: i0.Input, args: [{ isSignal: true, alias: "colSpan", required: false }] }], colspan: [{ type: i0.Input, args: [{ isSignal: true, alias: "colspan", required: false }] }], rowSpan: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowSpan", required: false }] }], rowspan: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowspan", required: false }] }], headers: [{ type: i0.Input, args: [{ isSignal: true, alias: "headers", required: false }] }], _ref: [{ type: i0.ViewChild, args: ["_ref", { isSignal: true }] }] } });
9854
+ }], ctorParameters: () => [], propDecorators: { 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 }] }], horizontalAlignment: [{ type: i0.Input, args: [{ isSignal: true, alias: "horizontalAlignment", required: false }] }], verticalAlignment: [{ type: i0.Input, args: [{ isSignal: true, alias: "verticalAlignment", required: false }] }], colSpan: [{ type: i0.Input, args: [{ isSignal: true, alias: "colSpan", required: false }] }], colspan: [{ type: i0.Input, args: [{ isSignal: true, alias: "colspan", required: false }] }], rowSpan: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowSpan", required: false }] }], rowspan: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowspan", required: false }] }], headers: [{ type: i0.Input, args: [{ isSignal: true, alias: "headers", required: false }] }], _ref: [{ type: i0.ViewChild, args: ["_ref", { isSignal: true }] }] } });
9712
9855
 
9713
9856
  const defaultProps$8 = {};
9714
9857
  class DBTableHeaderCell {
@@ -9717,6 +9860,7 @@ class DBTableHeaderCell {
9717
9860
  this.getBooleanAsString = getBooleanAsString;
9718
9861
  this.getNumber = getNumber;
9719
9862
  this.id = input(...(ngDevMode ? [undefined, { debugName: "id" }] : /* istanbul ignore next */ []));
9863
+ this.propOverrides = input(...(ngDevMode ? [undefined, { debugName: "propOverrides" }] : /* istanbul ignore next */ []));
9720
9864
  this.className = input(...(ngDevMode ? [undefined, { debugName: "className" }] : /* istanbul ignore next */ []));
9721
9865
  this.horizontalAlignment = input(...(ngDevMode ? [undefined, { debugName: "horizontalAlignment" }] : /* istanbul ignore next */ []));
9722
9866
  this.verticalAlignment = input(...(ngDevMode ? [undefined, { debugName: "verticalAlignment" }] : /* istanbul ignore next */ []));
@@ -9776,9 +9920,9 @@ class DBTableHeaderCell {
9776
9920
  this.enableAttributePassing(element, "db-table-header-cell");
9777
9921
  }
9778
9922
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: DBTableHeaderCell, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9779
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.17", type: DBTableHeaderCell, isStandalone: true, selector: "db-table-header-cell", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, horizontalAlignment: { classPropertyName: "horizontalAlignment", publicName: "horizontalAlignment", isSignal: true, isRequired: false, transformFunction: null }, verticalAlignment: { classPropertyName: "verticalAlignment", publicName: "verticalAlignment", isSignal: true, isRequired: false, transformFunction: null }, noText: { classPropertyName: "noText", publicName: "noText", isSignal: true, isRequired: false, transformFunction: null }, scope: { classPropertyName: "scope", publicName: "scope", isSignal: true, isRequired: false, transformFunction: null }, colSpan: { classPropertyName: "colSpan", publicName: "colSpan", isSignal: true, isRequired: false, transformFunction: null }, colspan: { classPropertyName: "colspan", publicName: "colspan", isSignal: true, isRequired: false, transformFunction: null }, rowSpan: { classPropertyName: "rowSpan", publicName: "rowSpan", isSignal: true, isRequired: false, transformFunction: null }, rowspan: { classPropertyName: "rowspan", publicName: "rowspan", isSignal: true, isRequired: false, transformFunction: null }, headers: { classPropertyName: "headers", publicName: "headers", isSignal: true, isRequired: false, transformFunction: null }, abbr: { classPropertyName: "abbr", publicName: "abbr", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "_ref", first: true, predicate: ["_ref"], descendants: true, isSignal: true }], ngImport: i0, template: `<th
9923
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.17", type: DBTableHeaderCell, isStandalone: true, selector: "db-table-header-cell", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, propOverrides: { classPropertyName: "propOverrides", publicName: "propOverrides", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, horizontalAlignment: { classPropertyName: "horizontalAlignment", publicName: "horizontalAlignment", isSignal: true, isRequired: false, transformFunction: null }, verticalAlignment: { classPropertyName: "verticalAlignment", publicName: "verticalAlignment", isSignal: true, isRequired: false, transformFunction: null }, noText: { classPropertyName: "noText", publicName: "noText", isSignal: true, isRequired: false, transformFunction: null }, scope: { classPropertyName: "scope", publicName: "scope", isSignal: true, isRequired: false, transformFunction: null }, colSpan: { classPropertyName: "colSpan", publicName: "colSpan", isSignal: true, isRequired: false, transformFunction: null }, colspan: { classPropertyName: "colspan", publicName: "colspan", isSignal: true, isRequired: false, transformFunction: null }, rowSpan: { classPropertyName: "rowSpan", publicName: "rowSpan", isSignal: true, isRequired: false, transformFunction: null }, rowspan: { classPropertyName: "rowspan", publicName: "rowspan", isSignal: true, isRequired: false, transformFunction: null }, headers: { classPropertyName: "headers", publicName: "headers", isSignal: true, isRequired: false, transformFunction: null }, abbr: { classPropertyName: "abbr", publicName: "abbr", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "_ref", first: true, predicate: ["_ref"], descendants: true, isSignal: true }], ngImport: i0, template: `<th
9780
9924
  #_ref
9781
- [attr.id]="id()"
9925
+ [attr.id]="id() ?? propOverrides()?.id"
9782
9926
  [class]="cls('db-table-header-cell', className())"
9783
9927
  [attr.data-horizontal-alignment]="horizontalAlignment()"
9784
9928
  [attr.data-vertical-alignment]="verticalAlignment()"
@@ -9796,7 +9940,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
9796
9940
  type: Component,
9797
9941
  args: [{ selector: "db-table-header-cell", standalone: true, imports: [CommonModule], template: `<th
9798
9942
  #_ref
9799
- [attr.id]="id()"
9943
+ [attr.id]="id() ?? propOverrides()?.id"
9800
9944
  [class]="cls('db-table-header-cell', className())"
9801
9945
  [attr.data-horizontal-alignment]="horizontalAlignment()"
9802
9946
  [attr.data-vertical-alignment]="verticalAlignment()"
@@ -9809,7 +9953,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
9809
9953
  >
9810
9954
  <ng-content></ng-content>
9811
9955
  </th> `, styles: [":host{display:contents}\n"] }]
9812
- }], ctorParameters: () => [], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], horizontalAlignment: [{ type: i0.Input, args: [{ isSignal: true, alias: "horizontalAlignment", required: false }] }], verticalAlignment: [{ type: i0.Input, args: [{ isSignal: true, alias: "verticalAlignment", required: false }] }], noText: [{ type: i0.Input, args: [{ isSignal: true, alias: "noText", required: false }] }], scope: [{ type: i0.Input, args: [{ isSignal: true, alias: "scope", required: false }] }], colSpan: [{ type: i0.Input, args: [{ isSignal: true, alias: "colSpan", required: false }] }], colspan: [{ type: i0.Input, args: [{ isSignal: true, alias: "colspan", required: false }] }], rowSpan: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowSpan", required: false }] }], rowspan: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowspan", required: false }] }], headers: [{ type: i0.Input, args: [{ isSignal: true, alias: "headers", required: false }] }], abbr: [{ type: i0.Input, args: [{ isSignal: true, alias: "abbr", required: false }] }], _ref: [{ type: i0.ViewChild, args: ["_ref", { isSignal: true }] }] } });
9956
+ }], ctorParameters: () => [], propDecorators: { 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 }] }], horizontalAlignment: [{ type: i0.Input, args: [{ isSignal: true, alias: "horizontalAlignment", required: false }] }], verticalAlignment: [{ type: i0.Input, args: [{ isSignal: true, alias: "verticalAlignment", required: false }] }], noText: [{ type: i0.Input, args: [{ isSignal: true, alias: "noText", required: false }] }], scope: [{ type: i0.Input, args: [{ isSignal: true, alias: "scope", required: false }] }], colSpan: [{ type: i0.Input, args: [{ isSignal: true, alias: "colSpan", required: false }] }], colspan: [{ type: i0.Input, args: [{ isSignal: true, alias: "colspan", required: false }] }], rowSpan: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowSpan", required: false }] }], rowspan: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowspan", required: false }] }], headers: [{ type: i0.Input, args: [{ isSignal: true, alias: "headers", required: false }] }], abbr: [{ type: i0.Input, args: [{ isSignal: true, alias: "abbr", required: false }] }], _ref: [{ type: i0.ViewChild, args: ["_ref", { isSignal: true }] }] } });
9813
9957
 
9814
9958
  const defaultProps$7 = {};
9815
9959
  class DBTableRow {
@@ -9824,6 +9968,7 @@ class DBTableRow {
9824
9968
  this.getBooleanAsString = getBooleanAsString;
9825
9969
  this.uuid = uuid;
9826
9970
  this.id = input(...(ngDevMode ? [undefined, { debugName: "id" }] : /* istanbul ignore next */ []));
9971
+ this.propOverrides = input(...(ngDevMode ? [undefined, { debugName: "propOverrides" }] : /* istanbul ignore next */ []));
9827
9972
  this.className = input(...(ngDevMode ? [undefined, { debugName: "className" }] : /* istanbul ignore next */ []));
9828
9973
  this.interactive = input(...(ngDevMode ? [undefined, { debugName: "interactive" }] : /* istanbul ignore next */ []));
9829
9974
  this.subHeaderEmphasis = input(...(ngDevMode ? [undefined, { debugName: "subHeaderEmphasis" }] : /* istanbul ignore next */ []));
@@ -9876,9 +10021,9 @@ class DBTableRow {
9876
10021
  this.enableAttributePassing(element, "db-table-row");
9877
10022
  }
9878
10023
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: DBTableRow, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9879
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: DBTableRow, isStandalone: true, selector: "db-table-row", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, interactive: { classPropertyName: "interactive", publicName: "interactive", isSignal: true, isRequired: false, transformFunction: null }, subHeaderEmphasis: { classPropertyName: "subHeaderEmphasis", publicName: "subHeaderEmphasis", isSignal: true, isRequired: false, transformFunction: null }, cells: { classPropertyName: "cells", publicName: "cells", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "_ref", first: true, predicate: ["_ref"], descendants: true, isSignal: true }], ngImport: i0, template: `<tr
10024
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: DBTableRow, isStandalone: true, selector: "db-table-row", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, propOverrides: { classPropertyName: "propOverrides", publicName: "propOverrides", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, interactive: { classPropertyName: "interactive", publicName: "interactive", isSignal: true, isRequired: false, transformFunction: null }, subHeaderEmphasis: { classPropertyName: "subHeaderEmphasis", publicName: "subHeaderEmphasis", isSignal: true, isRequired: false, transformFunction: null }, cells: { classPropertyName: "cells", publicName: "cells", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "_ref", first: true, predicate: ["_ref"], descendants: true, isSignal: true }], ngImport: i0, template: `<tr
9880
10025
  #_ref
9881
- [attr.id]="id()"
10026
+ [attr.id]="id() ?? propOverrides()?.id"
9882
10027
  [class]="cls('db-table-row', className())"
9883
10028
  [attr.data-interactive]="getBooleanAsString(interactive())"
9884
10029
  [attr.data-sub-header-emphasis]="subHeaderEmphasis()"
@@ -9956,13 +10101,13 @@ class DBTableRow {
9956
10101
  } } }@else{
9957
10102
  <ng-content></ng-content>
9958
10103
  }
9959
- </tr> `, isInline: true, styles: [":host{display:contents}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DBTableDataCell, selector: "db-table-data-cell", inputs: ["id", "className", "horizontalAlignment", "verticalAlignment", "colSpan", "colspan", "rowSpan", "rowspan", "headers"] }, { kind: "component", type: DBLink, selector: "db-link", inputs: ["id", "propOverrides", "className", "href", "target", "rel", "role", "referrerpolicy", "referrerPolicy", "hreflang", "disabled", "size", "showIcon", "variant", "content", "wrap", "text"] }, { kind: "component", type: DBTableHeaderCell, selector: "db-table-header-cell", inputs: ["id", "className", "horizontalAlignment", "verticalAlignment", "noText", "scope", "colSpan", "colspan", "rowSpan", "rowspan", "headers", "abbr"] }] }); }
10104
+ </tr> `, isInline: true, styles: [":host{display:contents}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DBTableDataCell, selector: "db-table-data-cell", inputs: ["id", "propOverrides", "className", "horizontalAlignment", "verticalAlignment", "colSpan", "colspan", "rowSpan", "rowspan", "headers"] }, { kind: "component", type: DBLink, selector: "db-link", inputs: ["id", "propOverrides", "className", "href", "target", "rel", "role", "referrerpolicy", "referrerPolicy", "hreflang", "disabled", "size", "showIcon", "variant", "content", "wrap", "text"] }, { kind: "component", type: DBTableHeaderCell, selector: "db-table-header-cell", inputs: ["id", "propOverrides", "className", "horizontalAlignment", "verticalAlignment", "noText", "scope", "colSpan", "colspan", "rowSpan", "rowspan", "headers", "abbr"] }] }); }
9960
10105
  }
9961
10106
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: DBTableRow, decorators: [{
9962
10107
  type: Component,
9963
10108
  args: [{ selector: "db-table-row", standalone: true, imports: [CommonModule, DBTableDataCell, DBLink, DBTableHeaderCell], template: `<tr
9964
10109
  #_ref
9965
- [attr.id]="id()"
10110
+ [attr.id]="id() ?? propOverrides()?.id"
9966
10111
  [class]="cls('db-table-row', className())"
9967
10112
  [attr.data-interactive]="getBooleanAsString(interactive())"
9968
10113
  [attr.data-sub-header-emphasis]="subHeaderEmphasis()"
@@ -10041,7 +10186,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
10041
10186
  <ng-content></ng-content>
10042
10187
  }
10043
10188
  </tr> `, styles: [":host{display:contents}\n"] }]
10044
- }], ctorParameters: () => [], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], interactive: [{ type: i0.Input, args: [{ isSignal: true, alias: "interactive", required: false }] }], subHeaderEmphasis: [{ type: i0.Input, args: [{ isSignal: true, alias: "subHeaderEmphasis", required: false }] }], cells: [{ type: i0.Input, args: [{ isSignal: true, alias: "cells", required: false }] }], _ref: [{ type: i0.ViewChild, args: ["_ref", { isSignal: true }] }] } });
10189
+ }], ctorParameters: () => [], propDecorators: { 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 }] }], interactive: [{ type: i0.Input, args: [{ isSignal: true, alias: "interactive", required: false }] }], subHeaderEmphasis: [{ type: i0.Input, args: [{ isSignal: true, alias: "subHeaderEmphasis", required: false }] }], cells: [{ type: i0.Input, args: [{ isSignal: true, alias: "cells", required: false }] }], _ref: [{ type: i0.ViewChild, args: ["_ref", { isSignal: true }] }] } });
10045
10190
 
10046
10191
  const defaultProps$6 = {};
10047
10192
  class DBTableBody {
@@ -10052,6 +10197,7 @@ class DBTableBody {
10052
10197
  this.cls = cls;
10053
10198
  this.uuid = uuid;
10054
10199
  this.id = input(...(ngDevMode ? [undefined, { debugName: "id" }] : /* istanbul ignore next */ []));
10200
+ this.propOverrides = input(...(ngDevMode ? [undefined, { debugName: "propOverrides" }] : /* istanbul ignore next */ []));
10055
10201
  this.className = input(...(ngDevMode ? [undefined, { debugName: "className" }] : /* istanbul ignore next */ []));
10056
10202
  this.rows = input(...(ngDevMode ? [undefined, { debugName: "rows" }] : /* istanbul ignore next */ []));
10057
10203
  this._ref = viewChild("_ref", ...(ngDevMode ? [{ debugName: "_ref" }] : /* istanbul ignore next */ []));
@@ -10102,9 +10248,9 @@ class DBTableBody {
10102
10248
  this.enableAttributePassing(element, "db-table-body");
10103
10249
  }
10104
10250
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: DBTableBody, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10105
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: DBTableBody, isStandalone: true, selector: "db-table-body", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "_ref", first: true, predicate: ["_ref"], descendants: true, isSignal: true }], ngImport: i0, template: `<tbody
10251
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: DBTableBody, isStandalone: true, selector: "db-table-body", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, propOverrides: { classPropertyName: "propOverrides", publicName: "propOverrides", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "_ref", first: true, predicate: ["_ref"], descendants: true, isSignal: true }], ngImport: i0, template: `<tbody
10106
10252
  #_ref
10107
- [attr.id]="id()"
10253
+ [attr.id]="id() ?? propOverrides()?.id"
10108
10254
  [class]="cls('db-table-body', className())"
10109
10255
  >
10110
10256
  @if(rows()){ @for (row of rows();track trackByRow0(index, row);let index =
@@ -10118,13 +10264,13 @@ class DBTableBody {
10118
10264
  } }@else{
10119
10265
  <ng-content></ng-content>
10120
10266
  }
10121
- </tbody> `, isInline: true, styles: [":host{display:contents}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DBTableRow, selector: "db-table-row", inputs: ["id", "className", "interactive", "subHeaderEmphasis", "cells"] }] }); }
10267
+ </tbody> `, isInline: true, styles: [":host{display:contents}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DBTableRow, selector: "db-table-row", inputs: ["id", "propOverrides", "className", "interactive", "subHeaderEmphasis", "cells"] }] }); }
10122
10268
  }
10123
10269
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: DBTableBody, decorators: [{
10124
10270
  type: Component,
10125
10271
  args: [{ selector: "db-table-body", standalone: true, imports: [CommonModule, DBTableRow], template: `<tbody
10126
10272
  #_ref
10127
- [attr.id]="id()"
10273
+ [attr.id]="id() ?? propOverrides()?.id"
10128
10274
  [class]="cls('db-table-body', className())"
10129
10275
  >
10130
10276
  @if(rows()){ @for (row of rows();track trackByRow0(index, row);let index =
@@ -10139,7 +10285,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
10139
10285
  <ng-content></ng-content>
10140
10286
  }
10141
10287
  </tbody> `, styles: [":host{display:contents}\n"] }]
10142
- }], ctorParameters: () => [], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], _ref: [{ type: i0.ViewChild, args: ["_ref", { isSignal: true }] }] } });
10288
+ }], ctorParameters: () => [], propDecorators: { 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 }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], _ref: [{ type: i0.ViewChild, args: ["_ref", { isSignal: true }] }] } });
10143
10289
 
10144
10290
  const defaultProps$5 = {};
10145
10291
  class DBTableFooter {
@@ -10150,6 +10296,7 @@ class DBTableFooter {
10150
10296
  this.cls = cls;
10151
10297
  this.uuid = uuid;
10152
10298
  this.id = input(...(ngDevMode ? [undefined, { debugName: "id" }] : /* istanbul ignore next */ []));
10299
+ this.propOverrides = input(...(ngDevMode ? [undefined, { debugName: "propOverrides" }] : /* istanbul ignore next */ []));
10153
10300
  this.className = input(...(ngDevMode ? [undefined, { debugName: "className" }] : /* istanbul ignore next */ []));
10154
10301
  this.rows = input(...(ngDevMode ? [undefined, { debugName: "rows" }] : /* istanbul ignore next */ []));
10155
10302
  this._ref = viewChild("_ref", ...(ngDevMode ? [{ debugName: "_ref" }] : /* istanbul ignore next */ []));
@@ -10200,9 +10347,9 @@ class DBTableFooter {
10200
10347
  this.enableAttributePassing(element, "db-table-footer");
10201
10348
  }
10202
10349
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: DBTableFooter, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10203
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: DBTableFooter, isStandalone: true, selector: "db-table-footer", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "_ref", first: true, predicate: ["_ref"], descendants: true, isSignal: true }], ngImport: i0, template: `<tfoot
10350
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: DBTableFooter, isStandalone: true, selector: "db-table-footer", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, propOverrides: { classPropertyName: "propOverrides", publicName: "propOverrides", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "_ref", first: true, predicate: ["_ref"], descendants: true, isSignal: true }], ngImport: i0, template: `<tfoot
10204
10351
  #_ref
10205
- [attr.id]="id()"
10352
+ [attr.id]="id() ?? propOverrides()?.id"
10206
10353
  [class]="cls('db-table-footer', className())"
10207
10354
  >
10208
10355
  @if(rows()){ @for (row of rows();track trackByRow0(index, row);let index =
@@ -10216,13 +10363,13 @@ class DBTableFooter {
10216
10363
  } }@else{
10217
10364
  <ng-content></ng-content>
10218
10365
  }
10219
- </tfoot> `, isInline: true, styles: [":host{display:contents}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DBTableRow, selector: "db-table-row", inputs: ["id", "className", "interactive", "subHeaderEmphasis", "cells"] }] }); }
10366
+ </tfoot> `, isInline: true, styles: [":host{display:contents}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DBTableRow, selector: "db-table-row", inputs: ["id", "propOverrides", "className", "interactive", "subHeaderEmphasis", "cells"] }] }); }
10220
10367
  }
10221
10368
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: DBTableFooter, decorators: [{
10222
10369
  type: Component,
10223
10370
  args: [{ selector: "db-table-footer", standalone: true, imports: [CommonModule, DBTableRow], template: `<tfoot
10224
10371
  #_ref
10225
- [attr.id]="id()"
10372
+ [attr.id]="id() ?? propOverrides()?.id"
10226
10373
  [class]="cls('db-table-footer', className())"
10227
10374
  >
10228
10375
  @if(rows()){ @for (row of rows();track trackByRow0(index, row);let index =
@@ -10237,7 +10384,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
10237
10384
  <ng-content></ng-content>
10238
10385
  }
10239
10386
  </tfoot> `, styles: [":host{display:contents}\n"] }]
10240
- }], ctorParameters: () => [], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], _ref: [{ type: i0.ViewChild, args: ["_ref", { isSignal: true }] }] } });
10387
+ }], ctorParameters: () => [], propDecorators: { 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 }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], _ref: [{ type: i0.ViewChild, args: ["_ref", { isSignal: true }] }] } });
10241
10388
 
10242
10389
  const defaultProps$4 = {};
10243
10390
  class DBTableHead {
@@ -10273,6 +10420,7 @@ class DBTableHead {
10273
10420
  this.cls = cls;
10274
10421
  this.uuid = uuid;
10275
10422
  this.id = input(...(ngDevMode ? [undefined, { debugName: "id" }] : /* istanbul ignore next */ []));
10423
+ this.propOverrides = input(...(ngDevMode ? [undefined, { debugName: "propOverrides" }] : /* istanbul ignore next */ []));
10276
10424
  this.className = input(...(ngDevMode ? [undefined, { debugName: "className" }] : /* istanbul ignore next */ []));
10277
10425
  this.rows = input(...(ngDevMode ? [undefined, { debugName: "rows" }] : /* istanbul ignore next */ []));
10278
10426
  this._ref = viewChild("_ref", ...(ngDevMode ? [{ debugName: "_ref" }] : /* istanbul ignore next */ []));
@@ -10330,9 +10478,9 @@ class DBTableHead {
10330
10478
  this.observer()?.disconnect();
10331
10479
  }
10332
10480
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: DBTableHead, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10333
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: DBTableHead, isStandalone: true, selector: "db-table-head", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "_ref", first: true, predicate: ["_ref"], descendants: true, isSignal: true }], ngImport: i0, template: `<thead
10481
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: DBTableHead, isStandalone: true, selector: "db-table-head", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, propOverrides: { classPropertyName: "propOverrides", publicName: "propOverrides", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "_ref", first: true, predicate: ["_ref"], descendants: true, isSignal: true }], ngImport: i0, template: `<thead
10334
10482
  #_ref
10335
- [attr.id]="id()"
10483
+ [attr.id]="id() ?? propOverrides()?.id"
10336
10484
  [class]="cls('db-table-head', className())"
10337
10485
  >
10338
10486
  @if(rows()){ @for (row of rows();track trackByRow0(index, row);let index =
@@ -10347,13 +10495,13 @@ class DBTableHead {
10347
10495
  } }@else{
10348
10496
  <ng-content></ng-content>
10349
10497
  }
10350
- </thead> `, isInline: true, styles: [":host{display:contents}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DBTableRow, selector: "db-table-row", inputs: ["id", "className", "interactive", "subHeaderEmphasis", "cells"] }] }); }
10498
+ </thead> `, isInline: true, styles: [":host{display:contents}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DBTableRow, selector: "db-table-row", inputs: ["id", "propOverrides", "className", "interactive", "subHeaderEmphasis", "cells"] }] }); }
10351
10499
  }
10352
10500
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: DBTableHead, decorators: [{
10353
10501
  type: Component,
10354
10502
  args: [{ selector: "db-table-head", standalone: true, imports: [CommonModule, DBTableRow], template: `<thead
10355
10503
  #_ref
10356
- [attr.id]="id()"
10504
+ [attr.id]="id() ?? propOverrides()?.id"
10357
10505
  [class]="cls('db-table-head', className())"
10358
10506
  >
10359
10507
  @if(rows()){ @for (row of rows();track trackByRow0(index, row);let index =
@@ -10369,7 +10517,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
10369
10517
  <ng-content></ng-content>
10370
10518
  }
10371
10519
  </thead> `, styles: [":host{display:contents}\n"] }]
10372
- }], ctorParameters: () => [], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], _ref: [{ type: i0.ViewChild, args: ["_ref", { isSignal: true }] }] } });
10520
+ }], ctorParameters: () => [], propDecorators: { 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 }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], _ref: [{ type: i0.ViewChild, args: ["_ref", { isSignal: true }] }] } });
10373
10521
 
10374
10522
  const defaultProps$3 = {};
10375
10523
  class DBTable {
@@ -10418,6 +10566,7 @@ class DBTable {
10418
10566
  this.showCaption = input(...(ngDevMode ? [undefined, { debugName: "showCaption" }] : /* istanbul ignore next */ []));
10419
10567
  this.stickyHeader = input(...(ngDevMode ? [undefined, { debugName: "stickyHeader" }] : /* istanbul ignore next */ []));
10420
10568
  this.id = input(...(ngDevMode ? [undefined, { debugName: "id" }] : /* istanbul ignore next */ []));
10569
+ this.propOverrides = input(...(ngDevMode ? [undefined, { debugName: "propOverrides" }] : /* istanbul ignore next */ []));
10421
10570
  this.captionPlain = input(...(ngDevMode ? [undefined, { debugName: "captionPlain" }] : /* istanbul ignore next */ []));
10422
10571
  this._ref = viewChild("_ref", ...(ngDevMode ? [{ debugName: "_ref" }] : /* istanbul ignore next */ []));
10423
10572
  this._data = signal(undefined, ...(ngDevMode ? [{ debugName: "_data" }] : /* istanbul ignore next */ []));
@@ -10546,7 +10695,7 @@ class DBTable {
10546
10695
  this.observer()?.disconnect();
10547
10696
  }
10548
10697
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: DBTable, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10549
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: DBTable, isStandalone: true, selector: "db-table", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, mobileVariant: { classPropertyName: "mobileVariant", publicName: "mobileVariant", isSignal: true, isRequired: false, transformFunction: null }, columnSizes: { classPropertyName: "columnSizes", publicName: "columnSizes", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, divider: { classPropertyName: "divider", publicName: "divider", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, showCaption: { classPropertyName: "showCaption", publicName: "showCaption", isSignal: true, isRequired: false, transformFunction: null }, stickyHeader: { classPropertyName: "stickyHeader", publicName: "stickyHeader", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, captionPlain: { classPropertyName: "captionPlain", publicName: "captionPlain", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "_ref", first: true, predicate: ["_ref"], descendants: true, isSignal: true }], ngImport: i0, template: `<div
10698
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: DBTable, isStandalone: true, selector: "db-table", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, mobileVariant: { classPropertyName: "mobileVariant", publicName: "mobileVariant", isSignal: true, isRequired: false, transformFunction: null }, columnSizes: { classPropertyName: "columnSizes", publicName: "columnSizes", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, divider: { classPropertyName: "divider", publicName: "divider", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, showCaption: { classPropertyName: "showCaption", publicName: "showCaption", isSignal: true, isRequired: false, transformFunction: null }, stickyHeader: { classPropertyName: "stickyHeader", publicName: "stickyHeader", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, propOverrides: { classPropertyName: "propOverrides", publicName: "propOverrides", isSignal: true, isRequired: false, transformFunction: null }, captionPlain: { classPropertyName: "captionPlain", publicName: "captionPlain", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "_ref", first: true, predicate: ["_ref"], descendants: true, isSignal: true }], ngImport: i0, template: `<div
10550
10699
  [class]="cls('db-table', className())"
10551
10700
  [ngStyle]="_style()"
10552
10701
  [attr.data-width]="width()"
@@ -10557,7 +10706,7 @@ class DBTable {
10557
10706
  [attr.data-show-caption]="getBooleanAsString(showCaption())"
10558
10707
  [attr.data-sticky-header]="stickyHeader()"
10559
10708
  >
10560
- <table #_ref [attr.id]="id()">
10709
+ <table #_ref [attr.id]="id() ?? propOverrides()?.id">
10561
10710
  @if(captionPlain()){
10562
10711
  <caption>
10563
10712
  {{captionPlain()}}
@@ -10574,7 +10723,7 @@ class DBTable {
10574
10723
  <ng-content></ng-content>
10575
10724
  }
10576
10725
  </table>
10577
- </div> `, isInline: true, styles: [":host{display:contents}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: DBTableHead, selector: "db-table-head", inputs: ["id", "className", "rows"] }, { kind: "component", type: DBTableBody, selector: "db-table-body", inputs: ["id", "className", "rows"] }, { kind: "component", type: DBTableFooter, selector: "db-table-footer", inputs: ["id", "className", "rows"] }] }); }
10726
+ </div> `, isInline: true, styles: [":host{display:contents}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: DBTableHead, selector: "db-table-head", inputs: ["id", "propOverrides", "className", "rows"] }, { kind: "component", type: DBTableBody, selector: "db-table-body", inputs: ["id", "propOverrides", "className", "rows"] }, { kind: "component", type: DBTableFooter, selector: "db-table-footer", inputs: ["id", "propOverrides", "className", "rows"] }] }); }
10578
10727
  }
10579
10728
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: DBTable, decorators: [{
10580
10729
  type: Component,
@@ -10589,7 +10738,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
10589
10738
  [attr.data-show-caption]="getBooleanAsString(showCaption())"
10590
10739
  [attr.data-sticky-header]="stickyHeader()"
10591
10740
  >
10592
- <table #_ref [attr.id]="id()">
10741
+ <table #_ref [attr.id]="id() ?? propOverrides()?.id">
10593
10742
  @if(captionPlain()){
10594
10743
  <caption>
10595
10744
  {{captionPlain()}}
@@ -10607,7 +10756,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
10607
10756
  }
10608
10757
  </table>
10609
10758
  </div> `, styles: [":host{display:contents}\n"] }]
10610
- }], ctorParameters: () => [], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], mobileVariant: [{ type: i0.Input, args: [{ isSignal: true, alias: "mobileVariant", required: false }] }], columnSizes: [{ type: i0.Input, args: [{ isSignal: true, alias: "columnSizes", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], divider: [{ type: i0.Input, args: [{ isSignal: true, alias: "divider", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], showCaption: [{ type: i0.Input, args: [{ isSignal: true, alias: "showCaption", required: false }] }], stickyHeader: [{ type: i0.Input, args: [{ isSignal: true, alias: "stickyHeader", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], captionPlain: [{ type: i0.Input, args: [{ isSignal: true, alias: "captionPlain", required: false }] }], _ref: [{ type: i0.ViewChild, args: ["_ref", { isSignal: true }] }] } });
10759
+ }], ctorParameters: () => [], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], mobileVariant: [{ type: i0.Input, args: [{ isSignal: true, alias: "mobileVariant", required: false }] }], columnSizes: [{ type: i0.Input, args: [{ isSignal: true, alias: "columnSizes", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], divider: [{ type: i0.Input, args: [{ isSignal: true, alias: "divider", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], showCaption: [{ type: i0.Input, args: [{ isSignal: true, alias: "showCaption", required: false }] }], stickyHeader: [{ type: i0.Input, args: [{ isSignal: true, alias: "stickyHeader", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], propOverrides: [{ type: i0.Input, args: [{ isSignal: true, alias: "propOverrides", required: false }] }], captionPlain: [{ type: i0.Input, args: [{ isSignal: true, alias: "captionPlain", required: false }] }], _ref: [{ type: i0.ViewChild, args: ["_ref", { isSignal: true }] }] } });
10611
10760
 
10612
10761
  const defaultProps$2 = {};
10613
10762
  class DBTableCaption {
@@ -10633,6 +10782,7 @@ class DBTableCaption {
10633
10782
  constructor() {
10634
10783
  this.cls = cls;
10635
10784
  this.id = input(...(ngDevMode ? [undefined, { debugName: "id" }] : /* istanbul ignore next */ []));
10785
+ this.propOverrides = input(...(ngDevMode ? [undefined, { debugName: "propOverrides" }] : /* istanbul ignore next */ []));
10636
10786
  this.className = input(...(ngDevMode ? [undefined, { debugName: "className" }] : /* istanbul ignore next */ []));
10637
10787
  this._ref = viewChild("_ref", ...(ngDevMode ? [{ debugName: "_ref" }] : /* istanbul ignore next */ []));
10638
10788
  this.observer = signal(undefined, ...(ngDevMode ? [{ debugName: "observer" }] : /* istanbul ignore next */ []));
@@ -10689,9 +10839,9 @@ class DBTableCaption {
10689
10839
  this.observer()?.disconnect();
10690
10840
  }
10691
10841
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: DBTableCaption, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10692
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.17", type: DBTableCaption, isStandalone: true, selector: "db-table-caption", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "_ref", first: true, predicate: ["_ref"], descendants: true, isSignal: true }], ngImport: i0, template: `<caption
10842
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.17", type: DBTableCaption, isStandalone: true, selector: "db-table-caption", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, propOverrides: { classPropertyName: "propOverrides", publicName: "propOverrides", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "_ref", first: true, predicate: ["_ref"], descendants: true, isSignal: true }], ngImport: i0, template: `<caption
10693
10843
  #_ref
10694
- [attr.id]="id()"
10844
+ [attr.id]="id() ?? propOverrides()?.id"
10695
10845
  [class]="cls('db-table-caption', className())"
10696
10846
  >
10697
10847
  <ng-content></ng-content>
@@ -10701,12 +10851,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
10701
10851
  type: Component,
10702
10852
  args: [{ selector: "db-table-caption", standalone: true, imports: [CommonModule], template: `<caption
10703
10853
  #_ref
10704
- [attr.id]="id()"
10854
+ [attr.id]="id() ?? propOverrides()?.id"
10705
10855
  [class]="cls('db-table-caption', className())"
10706
10856
  >
10707
10857
  <ng-content></ng-content>
10708
10858
  </caption> `, styles: [":host{display:contents}\n"] }]
10709
- }], ctorParameters: () => [], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], _ref: [{ type: i0.ViewChild, args: ["_ref", { isSignal: true }] }] } });
10859
+ }], ctorParameters: () => [], propDecorators: { 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 }] }], _ref: [{ type: i0.ViewChild, args: ["_ref", { isSignal: true }] }] } });
10710
10860
 
10711
10861
  const DBTableHeaderCellScopeList = ['row', 'col', 'rowgroup', 'colgroup'];
10712
10862
 
@@ -11111,7 +11261,7 @@ class DBTextarea {
11111
11261
  const signalFormErrors = this.errors();
11112
11262
  if (Array.isArray(signalFormErrors) && signalFormErrors.length > 0) {
11113
11263
  this._descByIds.set(this._invalidMessageId());
11114
- this._invalidMessage.set(signalFormErrors[0].message ?? DEFAULT_INVALID_MESSAGE);
11264
+ this._invalidMessage.set(this.invalidMessage() || signalFormErrors[0].message || this._ref()?.nativeElement?.validationMessage || DEFAULT_INVALID_MESSAGE);
11115
11265
  this._validMessage.set('');
11116
11266
  this._valid.set('invalid');
11117
11267
  if (hasVoiceOver()) {
@@ -11128,7 +11278,7 @@ class DBTextarea {
11128
11278
  }
11129
11279
  // If Signal Forms says "valid" but native validation disagrees, reset _valid
11130
11280
  // so native validation can take over via CSS :user-invalid selectors
11131
- if (this._valid() === 'valid' && this._ref()?.nativeElement && !this._ref()?.nativeElement?.validity?.valid) {
11281
+ if (this._valid() === 'valid' && this._ref()?.nativeElement?.validity && !this._ref()?.nativeElement?.validity?.valid) {
11132
11282
  this._valid.set(undefined);
11133
11283
  this._validMessage.set('');
11134
11284
  }
@@ -11180,6 +11330,7 @@ class DBTextarea {
11180
11330
  this.handleValidation();
11181
11331
  }
11182
11332
  handleBlur(event) {
11333
+ this.propagateTouched();
11183
11334
  if (this.blur) {
11184
11335
  this.blur.emit(event);
11185
11336
  }
@@ -11283,6 +11434,14 @@ class DBTextarea {
11283
11434
  /** @internal Signal Forms validation state */
11284
11435
  this._valid = signal(undefined, ...(ngDevMode ? [{ debugName: "_valid" }] : /* istanbul ignore next */ []));
11285
11436
  if (typeof window !== "undefined") {
11437
+ // Signal Forms: re-run validation when errors or validation prop changes externally
11438
+ effect(() => {
11439
+ this.errors();
11440
+ this.validation();
11441
+ this.handleValidation();
11442
+ }, Number(VERSION.major) < 19
11443
+ ? { allowSignalWrites: true }
11444
+ : undefined);
11286
11445
  effect(() => {
11287
11446
  // --- Mitosis: Workaround to make sure the effect() is triggered ---
11288
11447
  this.id();
@@ -11397,6 +11556,13 @@ class DBTextarea {
11397
11556
  }
11398
11557
  }
11399
11558
  }
11559
+ /**
11560
+ * Reflect Signal Forms hidden state to the host element.
11561
+ * This intentionally intercepts Angular's native [hidden] binding —
11562
+ * consumers using [hidden]="condition" will hide the component via
11563
+ * :host([hidden]) { display: none !important }.
11564
+ */
11565
+ get isHidden() { return this.hidden(); }
11400
11566
  /** @legacy CVA - will be removed in a future major version */
11401
11567
  writeValue(value) {
11402
11568
  this.value.set(value);
@@ -11412,13 +11578,14 @@ class DBTextarea {
11412
11578
  }
11413
11579
  /** @legacy CVA - will be removed in a future major version */
11414
11580
  registerOnTouched(onTouched) {
11581
+ this.propagateTouched = onTouched;
11415
11582
  }
11416
11583
  /** @legacy CVA - will be removed in a future major version */
11584
+ propagateTouched() { }
11585
+ /** @legacy CVA - will be removed in a future major version */
11417
11586
  setDisabledState(disabled) {
11418
11587
  this.disabled.set(disabled);
11419
11588
  }
11420
- /** Reflect Signal Forms hidden state to the host element */
11421
- get isHidden() { return this.hidden(); }
11422
11589
  ngAfterViewInit() {
11423
11590
  const element = this._ref()?.nativeElement;
11424
11591
  this.enableAttributePassing(element, "db-textarea");