@cdevhub/ngx-tw 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/README.md +264 -49
  2. package/fesm2022/cdevhub-ngx-tw-accordion.mjs +11 -7
  3. package/fesm2022/cdevhub-ngx-tw-accordion.mjs.map +1 -1
  4. package/fesm2022/cdevhub-ngx-tw-alert.mjs +43 -29
  5. package/fesm2022/cdevhub-ngx-tw-alert.mjs.map +1 -1
  6. package/fesm2022/cdevhub-ngx-tw-aspect-ratio.mjs +103 -0
  7. package/fesm2022/cdevhub-ngx-tw-aspect-ratio.mjs.map +1 -0
  8. package/fesm2022/cdevhub-ngx-tw-avatar.mjs +56 -31
  9. package/fesm2022/cdevhub-ngx-tw-avatar.mjs.map +1 -1
  10. package/fesm2022/cdevhub-ngx-tw-badge.mjs +61 -35
  11. package/fesm2022/cdevhub-ngx-tw-badge.mjs.map +1 -1
  12. package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs +154 -93
  13. package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs.map +1 -1
  14. package/fesm2022/cdevhub-ngx-tw-button.mjs +24 -15
  15. package/fesm2022/cdevhub-ngx-tw-button.mjs.map +1 -1
  16. package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs +3 -3
  17. package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs.map +1 -1
  18. package/fesm2022/cdevhub-ngx-tw-calendar.mjs +408 -215
  19. package/fesm2022/cdevhub-ngx-tw-calendar.mjs.map +1 -1
  20. package/fesm2022/cdevhub-ngx-tw-card.mjs +33 -24
  21. package/fesm2022/cdevhub-ngx-tw-card.mjs.map +1 -1
  22. package/fesm2022/cdevhub-ngx-tw-carousel.mjs +144 -79
  23. package/fesm2022/cdevhub-ngx-tw-carousel.mjs.map +1 -1
  24. package/fesm2022/cdevhub-ngx-tw-checkbox.mjs +99 -47
  25. package/fesm2022/cdevhub-ngx-tw-checkbox.mjs.map +1 -1
  26. package/fesm2022/cdevhub-ngx-tw-code-block.mjs +34 -20
  27. package/fesm2022/cdevhub-ngx-tw-code-block.mjs.map +1 -1
  28. package/fesm2022/cdevhub-ngx-tw-collapsible.mjs +46 -29
  29. package/fesm2022/cdevhub-ngx-tw-collapsible.mjs.map +1 -1
  30. package/fesm2022/cdevhub-ngx-tw-combobox.mjs +195 -110
  31. package/fesm2022/cdevhub-ngx-tw-combobox.mjs.map +1 -1
  32. package/fesm2022/cdevhub-ngx-tw-command-palette.mjs +140 -73
  33. package/fesm2022/cdevhub-ngx-tw-command-palette.mjs.map +1 -1
  34. package/fesm2022/cdevhub-ngx-tw-core.mjs +16 -11
  35. package/fesm2022/cdevhub-ngx-tw-core.mjs.map +1 -1
  36. package/fesm2022/cdevhub-ngx-tw-date-picker.mjs +393 -149
  37. package/fesm2022/cdevhub-ngx-tw-date-picker.mjs.map +1 -1
  38. package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs +305 -150
  39. package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs.map +1 -1
  40. package/fesm2022/cdevhub-ngx-tw-dialog.mjs +56 -43
  41. package/fesm2022/cdevhub-ngx-tw-dialog.mjs.map +1 -1
  42. package/fesm2022/cdevhub-ngx-tw-empty-state.mjs +51 -33
  43. package/fesm2022/cdevhub-ngx-tw-empty-state.mjs.map +1 -1
  44. package/fesm2022/cdevhub-ngx-tw-file-upload.mjs +905 -0
  45. package/fesm2022/cdevhub-ngx-tw-file-upload.mjs.map +1 -0
  46. package/fesm2022/cdevhub-ngx-tw-flip-card.mjs +49 -26
  47. package/fesm2022/cdevhub-ngx-tw-flip-card.mjs.map +1 -1
  48. package/fesm2022/cdevhub-ngx-tw-form-field.mjs +133 -74
  49. package/fesm2022/cdevhub-ngx-tw-form-field.mjs.map +1 -1
  50. package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs +2 -2
  51. package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs.map +1 -1
  52. package/fesm2022/cdevhub-ngx-tw-icon.mjs +28 -17
  53. package/fesm2022/cdevhub-ngx-tw-icon.mjs.map +1 -1
  54. package/fesm2022/cdevhub-ngx-tw-input.mjs +37 -21
  55. package/fesm2022/cdevhub-ngx-tw-input.mjs.map +1 -1
  56. package/fesm2022/cdevhub-ngx-tw-item.mjs +33 -24
  57. package/fesm2022/cdevhub-ngx-tw-item.mjs.map +1 -1
  58. package/fesm2022/cdevhub-ngx-tw-menu.mjs +63 -48
  59. package/fesm2022/cdevhub-ngx-tw-menu.mjs.map +1 -1
  60. package/fesm2022/cdevhub-ngx-tw-number-input.mjs +622 -0
  61. package/fesm2022/cdevhub-ngx-tw-number-input.mjs.map +1 -0
  62. package/fesm2022/cdevhub-ngx-tw-paginator.mjs +137 -71
  63. package/fesm2022/cdevhub-ngx-tw-paginator.mjs.map +1 -1
  64. package/fesm2022/cdevhub-ngx-tw-popover.mjs +101 -46
  65. package/fesm2022/cdevhub-ngx-tw-popover.mjs.map +1 -1
  66. package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs +57 -30
  67. package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs.map +1 -1
  68. package/fesm2022/cdevhub-ngx-tw-radio.mjs +108 -57
  69. package/fesm2022/cdevhub-ngx-tw-radio.mjs.map +1 -1
  70. package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs +46 -26
  71. package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs.map +1 -1
  72. package/fesm2022/cdevhub-ngx-tw-select.mjs +217 -122
  73. package/fesm2022/cdevhub-ngx-tw-select.mjs.map +1 -1
  74. package/fesm2022/cdevhub-ngx-tw-separator.mjs +21 -12
  75. package/fesm2022/cdevhub-ngx-tw-separator.mjs.map +1 -1
  76. package/fesm2022/cdevhub-ngx-tw-sheet.mjs +58 -44
  77. package/fesm2022/cdevhub-ngx-tw-sheet.mjs.map +1 -1
  78. package/fesm2022/cdevhub-ngx-tw-skeleton.mjs +25 -14
  79. package/fesm2022/cdevhub-ngx-tw-skeleton.mjs.map +1 -1
  80. package/fesm2022/cdevhub-ngx-tw-slider.mjs +155 -79
  81. package/fesm2022/cdevhub-ngx-tw-slider.mjs.map +1 -1
  82. package/fesm2022/cdevhub-ngx-tw-sort.mjs +44 -25
  83. package/fesm2022/cdevhub-ngx-tw-sort.mjs.map +1 -1
  84. package/fesm2022/cdevhub-ngx-tw-spinner.mjs +29 -16
  85. package/fesm2022/cdevhub-ngx-tw-spinner.mjs.map +1 -1
  86. package/fesm2022/cdevhub-ngx-tw-split.mjs +72 -42
  87. package/fesm2022/cdevhub-ngx-tw-split.mjs.map +1 -1
  88. package/fesm2022/cdevhub-ngx-tw-stat.mjs +107 -64
  89. package/fesm2022/cdevhub-ngx-tw-stat.mjs.map +1 -1
  90. package/fesm2022/cdevhub-ngx-tw-stepper.mjs +113 -47
  91. package/fesm2022/cdevhub-ngx-tw-stepper.mjs.map +1 -1
  92. package/fesm2022/cdevhub-ngx-tw-switch.mjs +61 -32
  93. package/fesm2022/cdevhub-ngx-tw-switch.mjs.map +1 -1
  94. package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs +88 -42
  95. package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs.map +1 -1
  96. package/fesm2022/cdevhub-ngx-tw-table.mjs +266 -118
  97. package/fesm2022/cdevhub-ngx-tw-table.mjs.map +1 -1
  98. package/fesm2022/cdevhub-ngx-tw-tabs.mjs +101 -51
  99. package/fesm2022/cdevhub-ngx-tw-tabs.mjs.map +1 -1
  100. package/fesm2022/cdevhub-ngx-tw-tags-input.mjs +798 -0
  101. package/fesm2022/cdevhub-ngx-tw-tags-input.mjs.map +1 -0
  102. package/fesm2022/cdevhub-ngx-tw-textarea.mjs +11 -7
  103. package/fesm2022/cdevhub-ngx-tw-textarea.mjs.map +1 -1
  104. package/fesm2022/cdevhub-ngx-tw-theme.mjs +22 -14
  105. package/fesm2022/cdevhub-ngx-tw-theme.mjs.map +1 -1
  106. package/fesm2022/cdevhub-ngx-tw-time-picker.mjs +243 -95
  107. package/fesm2022/cdevhub-ngx-tw-time-picker.mjs.map +1 -1
  108. package/fesm2022/cdevhub-ngx-tw-timeline.mjs +149 -82
  109. package/fesm2022/cdevhub-ngx-tw-timeline.mjs.map +1 -1
  110. package/fesm2022/cdevhub-ngx-tw-toast.mjs +89 -55
  111. package/fesm2022/cdevhub-ngx-tw-toast.mjs.map +1 -1
  112. package/fesm2022/cdevhub-ngx-tw-tooltip.mjs +50 -28
  113. package/fesm2022/cdevhub-ngx-tw-tooltip.mjs.map +1 -1
  114. package/fesm2022/cdevhub-ngx-tw-transfer.mjs +1129 -0
  115. package/fesm2022/cdevhub-ngx-tw-transfer.mjs.map +1 -0
  116. package/fesm2022/cdevhub-ngx-tw-tree.mjs +554 -0
  117. package/fesm2022/cdevhub-ngx-tw-tree.mjs.map +1 -0
  118. package/fesm2022/cdevhub-ngx-tw.mjs +7 -0
  119. package/fesm2022/cdevhub-ngx-tw.mjs.map +1 -1
  120. package/package.json +45 -20
  121. package/theme/index.css +10 -2
  122. package/types/cdevhub-ngx-tw-aspect-ratio.d.ts +40 -0
  123. package/types/cdevhub-ngx-tw-calendar.d.ts +39 -8
  124. package/types/cdevhub-ngx-tw-command-palette.d.ts +7 -0
  125. package/types/cdevhub-ngx-tw-date-picker.d.ts +36 -10
  126. package/types/cdevhub-ngx-tw-file-upload.d.ts +250 -0
  127. package/types/cdevhub-ngx-tw-form-field.d.ts +22 -3
  128. package/types/cdevhub-ngx-tw-icon-lucide.d.ts +21 -3
  129. package/types/cdevhub-ngx-tw-number-input.d.ts +130 -0
  130. package/types/cdevhub-ngx-tw-popover.d.ts +8 -0
  131. package/types/cdevhub-ngx-tw-stepper.d.ts +30 -2
  132. package/types/cdevhub-ngx-tw-tab-nav.d.ts +8 -0
  133. package/types/cdevhub-ngx-tw-table.d.ts +30 -1
  134. package/types/cdevhub-ngx-tw-tabs.d.ts +8 -0
  135. package/types/cdevhub-ngx-tw-tags-input.d.ts +217 -0
  136. package/types/cdevhub-ngx-tw-time-picker.d.ts +31 -6
  137. package/types/cdevhub-ngx-tw-transfer.d.ts +330 -0
  138. package/types/cdevhub-ngx-tw-tree.d.ts +189 -0
  139. package/types/cdevhub-ngx-tw.d.ts +7 -0
@@ -1,13 +1,13 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, ElementRef, signal, Directive, viewChild, viewChildren, computed, afterRenderEffect, ChangeDetectionStrategy, Component, input, booleanAttribute, model, output, ViewContainerRef, Injector, DestroyRef, linkedSignal, effect, untracked, afterNextRender, isDevMode, forwardRef } from '@angular/core';
3
- import { NgForm, FormGroupDirective, Validators, NgControl, NG_VALIDATORS } from '@angular/forms';
3
+ import { NgForm, FormGroupDirective, Validators, NgControl, NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
4
4
  import { Overlay } from '@angular/cdk/overlay';
5
5
  import { FocusMonitor, LiveAnnouncer } from '@angular/cdk/a11y';
6
6
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
7
7
  import { merge } from 'rxjs';
8
8
  import { tv } from 'tailwind-variants';
9
9
  import { PickerOverlayCoordinator, TW_ERROR_STATE_MATCHER, resolveSelectScrollStrategy, buildSelectLikePositions } from '@cdevhub/ngx-tw/core';
10
- import { FormFieldControl, FormFieldComponent, TW_FORM_FIELD_CONTROL } from '@cdevhub/ngx-tw/form-field';
10
+ import { FormFieldControl, TW_FORM_FIELD, TW_FORM_FIELD_CONTROL } from '@cdevhub/ngx-tw/form-field';
11
11
  import { TwDateRange, CalendarComponent, provideRangeSelectionStrategy, DATE_ADAPTER, calendarValidator } from '@cdevhub/ngx-tw/calendar';
12
12
  import { ButtonDirective } from '@cdevhub/ngx-tw/button';
13
13
  import { TimePickerComponent } from '@cdevhub/ngx-tw/time-picker';
@@ -23,15 +23,16 @@ import { TimePickerComponent } from '@cdevhub/ngx-tw/time-picker';
23
23
  class DateRangePresetOptionDirective {
24
24
  elementRef = inject((ElementRef));
25
25
  /** @internal Tab-index — `'0'` on the active option, `'-1'` on the rest. */
26
- tabindex = signal('-1', ...(ngDevMode ? [{ debugName: "tabindex" }] : /* istanbul ignore next */ []));
26
+ tabindex = signal('-1', /* @ts-ignore */
27
+ ...(ngDevMode ? [{ debugName: "tabindex" }] : /* istanbul ignore next */ []));
27
28
  /** @internal */
28
29
  focus() {
29
30
  this.elementRef.nativeElement.focus();
30
31
  }
31
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DateRangePresetOptionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
32
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: DateRangePresetOptionDirective, isStandalone: true, selector: "button[twDateRangePresetOption]", host: { properties: { "attr.tabindex": "tabindex()" } }, ngImport: i0 });
32
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: DateRangePresetOptionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
33
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.7", type: DateRangePresetOptionDirective, isStandalone: true, selector: "button[twDateRangePresetOption]", host: { properties: { "attr.tabindex": "tabindex()" } }, ngImport: i0 });
33
34
  }
34
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DateRangePresetOptionDirective, decorators: [{
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: DateRangePresetOptionDirective, decorators: [{
35
36
  type: Directive,
36
37
  args: [{
37
38
  selector: 'button[twDateRangePresetOption]',
@@ -50,123 +51,174 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
50
51
  */
51
52
  class DateRangePickerOverlayComponent {
52
53
  elementRef = inject((ElementRef));
53
- calendarRef = viewChild('calendar', ...(ngDevMode ? [{ debugName: "calendarRef" }] : /* istanbul ignore next */ []));
54
- presetOptions = viewChildren(DateRangePresetOptionDirective, ...(ngDevMode ? [{ debugName: "presetOptions" }] : /* istanbul ignore next */ []));
54
+ calendarRef = viewChild('calendar', /* @ts-ignore */
55
+ ...(ngDevMode ? [{ debugName: "calendarRef" }] : /* istanbul ignore next */ []));
56
+ presetOptions = viewChildren(DateRangePresetOptionDirective, /* @ts-ignore */
57
+ ...(ngDevMode ? [{ debugName: "presetOptions" }] : /* istanbul ignore next */ []));
55
58
  // ── Config signals set by the parent ──
56
59
  /** @internal */
57
- size = signal('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
60
+ size = signal('md', /* @ts-ignore */
61
+ ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
58
62
  /** @internal */
59
- color = signal('primary', ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
63
+ color = signal('primary', /* @ts-ignore */
64
+ ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
60
65
  /** @internal */
61
- minDate = signal(null, ...(ngDevMode ? [{ debugName: "minDate" }] : /* istanbul ignore next */ []));
66
+ minDate = signal(null, /* @ts-ignore */
67
+ ...(ngDevMode ? [{ debugName: "minDate" }] : /* istanbul ignore next */ []));
62
68
  /** @internal */
63
- maxDate = signal(null, ...(ngDevMode ? [{ debugName: "maxDate" }] : /* istanbul ignore next */ []));
69
+ maxDate = signal(null, /* @ts-ignore */
70
+ ...(ngDevMode ? [{ debugName: "maxDate" }] : /* istanbul ignore next */ []));
64
71
  /** @internal */
65
- dateFilter = signal(null, ...(ngDevMode ? [{ debugName: "dateFilter" }] : /* istanbul ignore next */ []));
72
+ dateFilter = signal(null, /* @ts-ignore */
73
+ ...(ngDevMode ? [{ debugName: "dateFilter" }] : /* istanbul ignore next */ []));
66
74
  /** @internal */
67
- startView = signal('day', ...(ngDevMode ? [{ debugName: "startView" }] : /* istanbul ignore next */ []));
75
+ startView = signal('day', /* @ts-ignore */
76
+ ...(ngDevMode ? [{ debugName: "startView" }] : /* istanbul ignore next */ []));
68
77
  /** @internal */
69
- numberOfMonths = signal(2, ...(ngDevMode ? [{ debugName: "numberOfMonths" }] : /* istanbul ignore next */ []));
78
+ numberOfMonths = signal(2, /* @ts-ignore */
79
+ ...(ngDevMode ? [{ debugName: "numberOfMonths" }] : /* istanbul ignore next */ []));
70
80
  /** @internal Current pending range shown as selected in the calendar. */
71
- pendingRange = signal(null, ...(ngDevMode ? [{ debugName: "pendingRange" }] : /* istanbul ignore next */ []));
81
+ pendingRange = signal(null, /* @ts-ignore */
82
+ ...(ngDevMode ? [{ debugName: "pendingRange" }] : /* istanbul ignore next */ []));
72
83
  /** @internal */
73
- currentView = signal('day', ...(ngDevMode ? [{ debugName: "currentView" }] : /* istanbul ignore next */ []));
84
+ currentView = signal('day', /* @ts-ignore */
85
+ ...(ngDevMode ? [{ debugName: "currentView" }] : /* istanbul ignore next */ []));
74
86
  /** @internal */
75
- presets = signal([], ...(ngDevMode ? [{ debugName: "presets" }] : /* istanbul ignore next */ []));
87
+ presets = signal([], /* @ts-ignore */
88
+ ...(ngDevMode ? [{ debugName: "presets" }] : /* istanbul ignore next */ []));
76
89
  /** @internal */
77
- activePresetId = signal(undefined, ...(ngDevMode ? [{ debugName: "activePresetId" }] : /* istanbul ignore next */ []));
90
+ activePresetId = signal(undefined, /* @ts-ignore */
91
+ ...(ngDevMode ? [{ debugName: "activePresetId" }] : /* istanbul ignore next */ []));
78
92
  /** @internal */
79
- showActions = signal(false, ...(ngDevMode ? [{ debugName: "showActions" }] : /* istanbul ignore next */ []));
93
+ showActions = signal(false, /* @ts-ignore */
94
+ ...(ngDevMode ? [{ debugName: "showActions" }] : /* istanbul ignore next */ []));
80
95
  /** @internal */
81
- showTime = signal(false, ...(ngDevMode ? [{ debugName: "showTime" }] : /* istanbul ignore next */ []));
96
+ showTime = signal(false, /* @ts-ignore */
97
+ ...(ngDevMode ? [{ debugName: "showTime" }] : /* istanbul ignore next */ []));
82
98
  /** @internal */
83
- timeFormat = signal('24h', ...(ngDevMode ? [{ debugName: "timeFormat" }] : /* istanbul ignore next */ []));
99
+ timeFormat = signal('24h', /* @ts-ignore */
100
+ ...(ngDevMode ? [{ debugName: "timeFormat" }] : /* istanbul ignore next */ []));
84
101
  /** @internal */
85
- showSeconds = signal(false, ...(ngDevMode ? [{ debugName: "showSeconds" }] : /* istanbul ignore next */ []));
102
+ showSeconds = signal(false, /* @ts-ignore */
103
+ ...(ngDevMode ? [{ debugName: "showSeconds" }] : /* istanbul ignore next */ []));
86
104
  /** @internal */
87
- hourStep = signal(1, ...(ngDevMode ? [{ debugName: "hourStep" }] : /* istanbul ignore next */ []));
105
+ hourStep = signal(1, /* @ts-ignore */
106
+ ...(ngDevMode ? [{ debugName: "hourStep" }] : /* istanbul ignore next */ []));
88
107
  /** @internal */
89
- minuteStep = signal(1, ...(ngDevMode ? [{ debugName: "minuteStep" }] : /* istanbul ignore next */ []));
108
+ minuteStep = signal(1, /* @ts-ignore */
109
+ ...(ngDevMode ? [{ debugName: "minuteStep" }] : /* istanbul ignore next */ []));
90
110
  /** @internal */
91
- secondStep = signal(1, ...(ngDevMode ? [{ debugName: "secondStep" }] : /* istanbul ignore next */ []));
111
+ secondStep = signal(1, /* @ts-ignore */
112
+ ...(ngDevMode ? [{ debugName: "secondStep" }] : /* istanbul ignore next */ []));
92
113
  /** @internal */
93
- todayLabel = signal('Today', ...(ngDevMode ? [{ debugName: "todayLabel" }] : /* istanbul ignore next */ []));
114
+ todayLabel = signal('Today', /* @ts-ignore */
115
+ ...(ngDevMode ? [{ debugName: "todayLabel" }] : /* istanbul ignore next */ []));
94
116
  /** @internal */
95
- clearLabel = signal('Clear', ...(ngDevMode ? [{ debugName: "clearLabel" }] : /* istanbul ignore next */ []));
117
+ clearLabel = signal('Clear', /* @ts-ignore */
118
+ ...(ngDevMode ? [{ debugName: "clearLabel" }] : /* istanbul ignore next */ []));
96
119
  /** @internal */
97
- cancelLabel = signal('Cancel', ...(ngDevMode ? [{ debugName: "cancelLabel" }] : /* istanbul ignore next */ []));
120
+ cancelLabel = signal('Cancel', /* @ts-ignore */
121
+ ...(ngDevMode ? [{ debugName: "cancelLabel" }] : /* istanbul ignore next */ []));
98
122
  /** @internal */
99
- applyLabel = signal('Apply', ...(ngDevMode ? [{ debugName: "applyLabel" }] : /* istanbul ignore next */ []));
123
+ applyLabel = signal('Apply', /* @ts-ignore */
124
+ ...(ngDevMode ? [{ debugName: "applyLabel" }] : /* istanbul ignore next */ []));
100
125
  /** @internal */
101
- rangeSeparator = signal(' – ', ...(ngDevMode ? [{ debugName: "rangeSeparator" }] : /* istanbul ignore next */ []));
126
+ rangeSeparator = signal(' – ', /* @ts-ignore */
127
+ ...(ngDevMode ? [{ debugName: "rangeSeparator" }] : /* istanbul ignore next */ []));
102
128
  /** @internal */
103
- dialogId = signal('', ...(ngDevMode ? [{ debugName: "dialogId" }] : /* istanbul ignore next */ []));
129
+ dialogId = signal('', /* @ts-ignore */
130
+ ...(ngDevMode ? [{ debugName: "dialogId" }] : /* istanbul ignore next */ []));
104
131
  /** @internal */
105
- dialogAriaLabel = signal('Choose a date range', ...(ngDevMode ? [{ debugName: "dialogAriaLabel" }] : /* istanbul ignore next */ []));
132
+ dialogAriaLabel = signal('Choose a date range', /* @ts-ignore */
133
+ ...(ngDevMode ? [{ debugName: "dialogAriaLabel" }] : /* istanbul ignore next */ []));
106
134
  /** @internal */
107
- panelClassValue = signal('', ...(ngDevMode ? [{ debugName: "panelClassValue" }] : /* istanbul ignore next */ []));
135
+ panelClassValue = signal('', /* @ts-ignore */
136
+ ...(ngDevMode ? [{ debugName: "panelClassValue" }] : /* istanbul ignore next */ []));
108
137
  /** @internal */
109
- leaving = signal(false, ...(ngDevMode ? [{ debugName: "leaving" }] : /* istanbul ignore next */ []));
138
+ leaving = signal(false, /* @ts-ignore */
139
+ ...(ngDevMode ? [{ debugName: "leaving" }] : /* istanbul ignore next */ []));
110
140
  // ── Forwarded calendar config ──
111
141
  /** @internal */
112
- minRangeLength = signal(null, ...(ngDevMode ? [{ debugName: "minRangeLength" }] : /* istanbul ignore next */ []));
142
+ minRangeLength = signal(null, /* @ts-ignore */
143
+ ...(ngDevMode ? [{ debugName: "minRangeLength" }] : /* istanbul ignore next */ []));
113
144
  /** @internal */
114
- maxRangeLength = signal(null, ...(ngDevMode ? [{ debugName: "maxRangeLength" }] : /* istanbul ignore next */ []));
145
+ maxRangeLength = signal(null, /* @ts-ignore */
146
+ ...(ngDevMode ? [{ debugName: "maxRangeLength" }] : /* istanbul ignore next */ []));
115
147
  /** @internal */
116
- rangeBehavior = signal({}, ...(ngDevMode ? [{ debugName: "rangeBehavior" }] : /* istanbul ignore next */ []));
148
+ rangeBehavior = signal({}, /* @ts-ignore */
149
+ ...(ngDevMode ? [{ debugName: "rangeBehavior" }] : /* istanbul ignore next */ []));
117
150
  /** @internal */
118
- rangeClickBehavior = signal('restart', ...(ngDevMode ? [{ debugName: "rangeClickBehavior" }] : /* istanbul ignore next */ []));
151
+ rangeClickBehavior = signal('restart', /* @ts-ignore */
152
+ ...(ngDevMode ? [{ debugName: "rangeClickBehavior" }] : /* istanbul ignore next */ []));
119
153
  /** @internal */
120
- firstDayOfWeek = signal(null, ...(ngDevMode ? [{ debugName: "firstDayOfWeek" }] : /* istanbul ignore next */ []));
154
+ firstDayOfWeek = signal(null, /* @ts-ignore */
155
+ ...(ngDevMode ? [{ debugName: "firstDayOfWeek" }] : /* istanbul ignore next */ []));
121
156
  /** @internal */
122
- locale = signal(null, ...(ngDevMode ? [{ debugName: "locale" }] : /* istanbul ignore next */ []));
157
+ locale = signal(null, /* @ts-ignore */
158
+ ...(ngDevMode ? [{ debugName: "locale" }] : /* istanbul ignore next */ []));
123
159
  /** @internal */
124
- dateClass = signal(null, ...(ngDevMode ? [{ debugName: "dateClass" }] : /* istanbul ignore next */ []));
160
+ dateClass = signal(null, /* @ts-ignore */
161
+ ...(ngDevMode ? [{ debugName: "dateClass" }] : /* istanbul ignore next */ []));
125
162
  /** @internal */
126
- cellTemplate = signal(null, ...(ngDevMode ? [{ debugName: "cellTemplate" }] : /* istanbul ignore next */ []));
163
+ cellTemplate = signal(null, /* @ts-ignore */
164
+ ...(ngDevMode ? [{ debugName: "cellTemplate" }] : /* istanbul ignore next */ []));
127
165
  // ── Callbacks set by the parent ──
128
166
  /** @internal */
129
- onCalendarSelect = signal(() => { }, ...(ngDevMode ? [{ debugName: "onCalendarSelect" }] : /* istanbul ignore next */ []));
167
+ onCalendarSelect = signal(() => { }, /* @ts-ignore */
168
+ ...(ngDevMode ? [{ debugName: "onCalendarSelect" }] : /* istanbul ignore next */ []));
130
169
  /** @internal */
131
- onPresetSelect = signal(() => { }, ...(ngDevMode ? [{ debugName: "onPresetSelect" }] : /* istanbul ignore next */ []));
170
+ onPresetSelect = signal(() => { }, /* @ts-ignore */
171
+ ...(ngDevMode ? [{ debugName: "onPresetSelect" }] : /* istanbul ignore next */ []));
132
172
  /** @internal */
133
- onStartTimeChange = signal(() => { }, ...(ngDevMode ? [{ debugName: "onStartTimeChange" }] : /* istanbul ignore next */ []));
173
+ onStartTimeChange = signal(() => { }, /* @ts-ignore */
174
+ ...(ngDevMode ? [{ debugName: "onStartTimeChange" }] : /* istanbul ignore next */ []));
134
175
  /** @internal */
135
- onEndTimeChange = signal(() => { }, ...(ngDevMode ? [{ debugName: "onEndTimeChange" }] : /* istanbul ignore next */ []));
176
+ onEndTimeChange = signal(() => { }, /* @ts-ignore */
177
+ ...(ngDevMode ? [{ debugName: "onEndTimeChange" }] : /* istanbul ignore next */ []));
136
178
  /** @internal */
137
- onViewChange = signal(() => { }, ...(ngDevMode ? [{ debugName: "onViewChange" }] : /* istanbul ignore next */ []));
179
+ onViewChange = signal(() => { }, /* @ts-ignore */
180
+ ...(ngDevMode ? [{ debugName: "onViewChange" }] : /* istanbul ignore next */ []));
138
181
  /** @internal */
139
- onToday = signal(() => { }, ...(ngDevMode ? [{ debugName: "onToday" }] : /* istanbul ignore next */ []));
182
+ onToday = signal(() => { }, /* @ts-ignore */
183
+ ...(ngDevMode ? [{ debugName: "onToday" }] : /* istanbul ignore next */ []));
140
184
  /** @internal */
141
- onClear = signal(() => { }, ...(ngDevMode ? [{ debugName: "onClear" }] : /* istanbul ignore next */ []));
185
+ onClear = signal(() => { }, /* @ts-ignore */
186
+ ...(ngDevMode ? [{ debugName: "onClear" }] : /* istanbul ignore next */ []));
142
187
  /** @internal */
143
- onCancel = signal(() => { }, ...(ngDevMode ? [{ debugName: "onCancel" }] : /* istanbul ignore next */ []));
188
+ onCancel = signal(() => { }, /* @ts-ignore */
189
+ ...(ngDevMode ? [{ debugName: "onCancel" }] : /* istanbul ignore next */ []));
144
190
  /** @internal */
145
- onApply = signal(() => { }, ...(ngDevMode ? [{ debugName: "onApply" }] : /* istanbul ignore next */ []));
191
+ onApply = signal(() => { }, /* @ts-ignore */
192
+ ...(ngDevMode ? [{ debugName: "onApply" }] : /* istanbul ignore next */ []));
146
193
  // ── Derived ──
147
194
  /** @internal */
148
195
  panelClasses = computed(() => {
149
196
  const base = 'block bg-surface-overlay border border-border rounded-lg shadow-md overflow-hidden flex max-w-[calc(100vw-16px)]';
150
197
  const custom = this.panelClassValue();
151
198
  return custom ? `${base} ${custom}` : base;
152
- }, ...(ngDevMode ? [{ debugName: "panelClasses" }] : /* istanbul ignore next */ []));
199
+ }, /* @ts-ignore */
200
+ ...(ngDevMode ? [{ debugName: "panelClasses" }] : /* istanbul ignore next */ []));
153
201
  /** @internal */
154
- calendarAriaLabel = computed(() => this.numberOfMonths() === 2 ? 'Date range calendar (two months)' : 'Date range calendar', ...(ngDevMode ? [{ debugName: "calendarAriaLabel" }] : /* istanbul ignore next */ []));
202
+ calendarAriaLabel = computed(() => this.numberOfMonths() === 2 ? 'Date range calendar (two months)' : 'Date range calendar', /* @ts-ignore */
203
+ ...(ngDevMode ? [{ debugName: "calendarAriaLabel" }] : /* istanbul ignore next */ []));
155
204
  /** @internal The time row requires both endpoints to be set — each time-picker needs a concrete date. */
156
205
  hasTimeablePending = computed(() => {
157
206
  const v = this.pendingRange();
158
207
  return v !== null && v.start !== null && v.end !== null;
159
- }, ...(ngDevMode ? [{ debugName: "hasTimeablePending" }] : /* istanbul ignore next */ []));
208
+ }, /* @ts-ignore */
209
+ ...(ngDevMode ? [{ debugName: "hasTimeablePending" }] : /* istanbul ignore next */ []));
160
210
  /** @internal Adapts `TwDateRange<D> | null` to the `CalendarRangeValue<D>` shape the calendar's `value` input expects. */
161
211
  pendingRangeAsRange = computed(() => {
162
212
  const v = this.pendingRange();
163
213
  return v ? { start: v.start, end: v.end } : { start: null, end: null };
164
- }, ...(ngDevMode ? [{ debugName: "pendingRangeAsRange" }] : /* istanbul ignore next */ []));
214
+ }, /* @ts-ignore */
215
+ ...(ngDevMode ? [{ debugName: "pendingRangeAsRange" }] : /* istanbul ignore next */ []));
165
216
  /** @internal Seeds the calendar's active month on first attach so it anchors to the current value rather than today. */
166
217
  initialStartAt = computed(() => {
167
218
  const v = this.pendingRange();
168
219
  return v?.start ?? null;
169
- }, ...(ngDevMode ? [{ debugName: "initialStartAt" }] : /* istanbul ignore next */ []));
220
+ }, /* @ts-ignore */
221
+ ...(ngDevMode ? [{ debugName: "initialStartAt" }] : /* istanbul ignore next */ []));
170
222
  // ── Template handlers ──
171
223
  /** @internal */
172
224
  presetKey(index, preset) {
@@ -204,7 +256,8 @@ class DateRangePickerOverlayComponent {
204
256
  }
205
257
  // ── Preset listbox keyboard ──
206
258
  /** @internal Roving tabindex pointer — index of the focusable preset option. */
207
- activeOptionIndex = signal(0, ...(ngDevMode ? [{ debugName: "activeOptionIndex" }] : /* istanbul ignore next */ []));
259
+ activeOptionIndex = signal(0, /* @ts-ignore */
260
+ ...(ngDevMode ? [{ debugName: "activeOptionIndex" }] : /* istanbul ignore next */ []));
208
261
  constructor() {
209
262
  // Drive the directive's `tabindex` signal from `activeOptionIndex`. We
210
263
  // use `afterRenderEffect` so the directive instances are already created
@@ -289,8 +342,8 @@ class DateRangePickerOverlayComponent {
289
342
  getElement() {
290
343
  return this.elementRef.nativeElement;
291
344
  }
292
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DateRangePickerOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
293
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: DateRangePickerOverlayComponent, isStandalone: true, selector: "tw-date-range-picker-overlay", host: { properties: { "class": "panelClasses()", "id": "dialogId()", "attr.role": "\"dialog\"", "attr.aria-modal": "\"true\"", "attr.aria-label": "dialogAriaLabel()", "animate.enter": "\"scale-in\"", "animate.leave": "leaving() ? \"scale-out\" : \"\"" } }, providers: [provideRangeSelectionStrategy()], viewQueries: [{ propertyName: "calendarRef", first: true, predicate: ["calendar"], descendants: true, isSignal: true }, { propertyName: "presetOptions", predicate: DateRangePresetOptionDirective, descendants: true, isSignal: true }], ngImport: i0, template: `
345
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: DateRangePickerOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
346
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: DateRangePickerOverlayComponent, isStandalone: true, selector: "tw-date-range-picker-overlay", host: { properties: { "class": "panelClasses()", "id": "dialogId()", "attr.role": "\"dialog\"", "attr.aria-modal": "\"true\"", "attr.aria-label": "dialogAriaLabel()", "animate.enter": "\"scale-in\"", "animate.leave": "leaving() ? \"scale-out\" : \"\"" } }, providers: [provideRangeSelectionStrategy()], viewQueries: [{ propertyName: "calendarRef", first: true, predicate: ["calendar"], descendants: true, isSignal: true }, { propertyName: "presetOptions", predicate: DateRangePresetOptionDirective, descendants: true, isSignal: true }], ngImport: i0, template: `
294
347
  @if (presets().length) {
295
348
  <div
296
349
  class="flex flex-col gap-1 p-2 border-r border-border bg-surface-muted min-w-40"
@@ -408,9 +461,9 @@ class DateRangePickerOverlayComponent {
408
461
  </div>
409
462
  }
410
463
  </div>
411
- `, isInline: true, dependencies: [{ kind: "component", type: CalendarComponent, selector: "tw-calendar", inputs: ["mode", "value", "startAt", "minDate", "maxDate", "dateFilter", "disabledDates", "disabledDaysOfWeek", "constraints", "minRangeLength", "maxRangeLength", "maxSelections", "maxSelectionBehavior", "errorAriaDescribedBy", "rangeClickBehavior", "rangeBehavior", "dateClass", "bordered", "startView", "firstDayOfWeek", "monthColumns", "disabled", "readonly", "resetBehavior", "cellTemplate", "locale", "intl"], outputs: ["modeChange", "valueChange", "selectionStart", "rangePreview", "selectionComplete", "selectionRestart", "selectionCleared", "selectionLimitReached", "presetChange", "viewChange", "activeDateChange", "monthChange", "yearChange", "cellClick", "cellHover"] }, { kind: "component", type: TimePickerComponent, selector: "tw-time-picker", inputs: ["id", "disabled", "required", "readonly", "size", "color", "variant", "format", "showSeconds", "hourStep", "minuteStep", "secondStep", "minTime", "maxTime", "referenceDate", "placeholder", "showSteppers", "showClear", "clearLabel", "errorStateMatcher", "aria-label", "aria-labelledby", "aria-describedby", "value"], outputs: ["valueChange", "timeInput", "timeChange"] }, { kind: "directive", type: ButtonDirective, selector: "[twButton]", inputs: ["variant", "color", "size", "disabled", "loading"], exportAs: ["twButton"] }, { kind: "directive", type: DateRangePresetOptionDirective, selector: "button[twDateRangePresetOption]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
464
+ `, isInline: true, dependencies: [{ kind: "component", type: CalendarComponent, selector: "tw-calendar", inputs: ["mode", "value", "startAt", "minDate", "maxDate", "dateFilter", "disabledDates", "disabledDaysOfWeek", "constraints", "minRangeLength", "maxRangeLength", "maxSelections", "maxSelectionBehavior", "errorAriaDescribedBy", "rangeClickBehavior", "rangeBehavior", "dateClass", "bordered", "startView", "firstDayOfWeek", "monthColumns", "disabled", "readonly", "resetBehavior", "cellTemplate", "locale", "intl"], outputs: ["valueChange", "selectionStart", "rangePreview", "selectionComplete", "selectionRestart", "selectionCleared", "selectionLimitReached", "presetChange", "viewChange", "activeDateChange", "monthChange", "yearChange", "cellClick", "cellHover", "modeChange"] }, { kind: "component", type: TimePickerComponent, selector: "tw-time-picker", inputs: ["id", "disabled", "required", "readonly", "size", "color", "variant", "format", "showSeconds", "hourStep", "minuteStep", "secondStep", "minTime", "maxTime", "referenceDate", "placeholder", "showSteppers", "showClear", "clearLabel", "errorStateMatcher", "aria-label", "aria-labelledby", "aria-describedby", "value"], outputs: ["valueChange", "timeInput", "timeChange"] }, { kind: "directive", type: ButtonDirective, selector: "[twButton]", inputs: ["variant", "color", "size", "disabled", "loading"], exportAs: ["twButton"] }, { kind: "directive", type: DateRangePresetOptionDirective, selector: "button[twDateRangePresetOption]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
412
465
  }
413
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DateRangePickerOverlayComponent, decorators: [{
466
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: DateRangePickerOverlayComponent, decorators: [{
414
467
  type: Component,
415
468
  args: [{
416
469
  selector: 'tw-date-range-picker-overlay',
@@ -674,25 +727,35 @@ class DateRangePickerComponent extends FormFieldControl {
674
727
  /** Id on the trigger element. Auto-generated when not provided. Used by the form-field's `<label for>` attribute. */
675
728
  idInput = input(undefined, { ...(ngDevMode ? { debugName: "idInput" } : /* istanbul ignore next */ {}), alias: 'id' });
676
729
  /** Earliest selectable date for either endpoint. Presets and calendar cells earlier than this are rejected or disabled. Defaults to `null`. */
677
- minDate = input(null, ...(ngDevMode ? [{ debugName: "minDate" }] : /* istanbul ignore next */ []));
730
+ minDate = input(null, /* @ts-ignore */
731
+ ...(ngDevMode ? [{ debugName: "minDate" }] : /* istanbul ignore next */ []));
678
732
  /** Latest selectable date for either endpoint. Presets and calendar cells later than this are rejected or disabled. Defaults to `null`. */
679
- maxDate = input(null, ...(ngDevMode ? [{ debugName: "maxDate" }] : /* istanbul ignore next */ []));
733
+ maxDate = input(null, /* @ts-ignore */
734
+ ...(ngDevMode ? [{ debugName: "maxDate" }] : /* istanbul ignore next */ []));
680
735
  /** Per-date predicate — return `false` to disable. Applied in both calendars. Presets that fall on a filtered date are skipped. */
681
- dateFilter = input(null, ...(ngDevMode ? [{ debugName: "dateFilter" }] : /* istanbul ignore next */ []));
736
+ dateFilter = input(null, /* @ts-ignore */
737
+ ...(ngDevMode ? [{ debugName: "dateFilter" }] : /* istanbul ignore next */ []));
682
738
  /** Which calendar view opens first — `'day'`, `'month'`, or `'year'`. Defaults to `'day'`. */
683
- startView = input('day', ...(ngDevMode ? [{ debugName: "startView" }] : /* istanbul ignore next */ []));
739
+ startView = input('day', /* @ts-ignore */
740
+ ...(ngDevMode ? [{ debugName: "startView" }] : /* istanbul ignore next */ []));
684
741
  /** Date the left calendar focuses on when opened with no value. Falls back to today. Ignored when a value is already set. */
685
- startAt = input(null, ...(ngDevMode ? [{ debugName: "startAt" }] : /* istanbul ignore next */ []));
742
+ startAt = input(null, /* @ts-ignore */
743
+ ...(ngDevMode ? [{ debugName: "startAt" }] : /* istanbul ignore next */ []));
686
744
  /** Display format for each endpoint, passed to `DateAdapter.format()`. When `showTime` is true and this is left at the default, hour/minute (and optional seconds) are folded in automatically. */
687
- format = input(DEFAULT_DISPLAY_FORMAT, ...(ngDevMode ? [{ debugName: "format" }] : /* istanbul ignore next */ []));
745
+ format = input(DEFAULT_DISPLAY_FORMAT, /* @ts-ignore */
746
+ ...(ngDevMode ? [{ debugName: "format" }] : /* istanbul ignore next */ []));
688
747
  /** Separator rendered between the two formatted endpoints in the trigger. Defaults to `" – "`. */
689
- rangeSeparator = input(' – ', ...(ngDevMode ? [{ debugName: "rangeSeparator" }] : /* istanbul ignore next */ []));
748
+ rangeSeparator = input(' – ', /* @ts-ignore */
749
+ ...(ngDevMode ? [{ debugName: "rangeSeparator" }] : /* istanbul ignore next */ []));
690
750
  /** Placeholder text shown in the trigger for an empty `start` endpoint. */
691
- emptyStartLabel = input('Start date', ...(ngDevMode ? [{ debugName: "emptyStartLabel" }] : /* istanbul ignore next */ []));
751
+ emptyStartLabel = input('Start date', /* @ts-ignore */
752
+ ...(ngDevMode ? [{ debugName: "emptyStartLabel" }] : /* istanbul ignore next */ []));
692
753
  /** Placeholder text shown in the trigger for an empty `end` endpoint. */
693
- emptyEndLabel = input('End date', ...(ngDevMode ? [{ debugName: "emptyEndLabel" }] : /* istanbul ignore next */ []));
754
+ emptyEndLabel = input('End date', /* @ts-ignore */
755
+ ...(ngDevMode ? [{ debugName: "emptyEndLabel" }] : /* istanbul ignore next */ []));
694
756
  /** When set, overrides the composed `${emptyStartLabel}${rangeSeparator}${emptyEndLabel}` placeholder with a single string. */
695
- placeholder = input(undefined, ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
757
+ placeholder = input(undefined, /* @ts-ignore */
758
+ ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
696
759
  /** When true, the trigger cannot open the overlay and `aria-disabled="true"` is set. Defaults to `false`. */
697
760
  disabledInput = input(false, { ...(ngDevMode ? { debugName: "disabledInput" } : /* istanbul ignore next */ {}), alias: 'disabled',
698
761
  transform: booleanAttribute });
@@ -700,70 +763,100 @@ class DateRangePickerComponent extends FormFieldControl {
700
763
  requiredInput = input(false, { ...(ngDevMode ? { debugName: "requiredInput" } : /* istanbul ignore next */ {}), alias: 'required',
701
764
  transform: booleanAttribute });
702
765
  /** Trigger padding, font size, and calendar cell density. Uses the shared `TwSize` scale. Defaults to `'md'`. */
703
- size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
766
+ size = input('md', /* @ts-ignore */
767
+ ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
704
768
  /** Semantic color for focused border, calendar range fill, and preset active state. Defaults to `'primary'`. */
705
- color = input('primary', ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
769
+ color = input('primary', /* @ts-ignore */
770
+ ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
706
771
  /** Visual style of the trigger. `'default'` draws its own border; `'naked'` strips chrome so a parent (e.g. `tw-form-field`) owns it. Auto-resolves to `'naked'` when inside a form-field; otherwise `'default'`. */
707
- variant = input(undefined, ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
772
+ variant = input(undefined, /* @ts-ignore */
773
+ ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
708
774
  /** How many months the overlay shows side-by-side. `2` is the standard range-picker layout; use `1` for compact contexts. Defaults to `2`. */
709
- numberOfMonths = input(2, ...(ngDevMode ? [{ debugName: "numberOfMonths" }] : /* istanbul ignore next */ []));
775
+ numberOfMonths = input(2, /* @ts-ignore */
776
+ ...(ngDevMode ? [{ debugName: "numberOfMonths" }] : /* istanbul ignore next */ []));
710
777
  /** Optional quick-select presets rendered as a vertical list before the calendars. Each preset provides a label and a factory returning a `TwDateRange<D>`. An empty array hides the preset panel. */
711
- presets = input([], ...(ngDevMode ? [{ debugName: "presets" }] : /* istanbul ignore next */ []));
778
+ presets = input([], /* @ts-ignore */
779
+ ...(ngDevMode ? [{ debugName: "presets" }] : /* istanbul ignore next */ []));
712
780
  /** Whether to show a clear-button affordance inside the trigger when a value is set. Defaults to `true`. */
713
781
  // TRUE-default: a picker without a clear affordance forces consumers to wire one — most form pickers expect the inline clear, matching `<tw-input>`'s clear button.
714
- showClear = input(true, ...(ngDevMode ? [{ debugName: "showClear" }] : /* istanbul ignore next */ []));
782
+ showClear = input(true, /* @ts-ignore */
783
+ ...(ngDevMode ? [{ debugName: "showClear" }] : /* istanbul ignore next */ []));
715
784
  /** Minimum range length in days, inclusive. Commits shorter than this are rejected and surface `calendarRangeTooShort` on the bound `NgControl`. `null` = no minimum. Defaults to `null`. */
716
- minRangeLength = input(null, ...(ngDevMode ? [{ debugName: "minRangeLength" }] : /* istanbul ignore next */ []));
785
+ minRangeLength = input(null, /* @ts-ignore */
786
+ ...(ngDevMode ? [{ debugName: "minRangeLength" }] : /* istanbul ignore next */ []));
717
787
  /** Maximum range length in days, inclusive. Commits longer than this are rejected and surface `calendarRangeTooLong` on the bound `NgControl`. `null` = no maximum. Defaults to `null`. */
718
- maxRangeLength = input(null, ...(ngDevMode ? [{ debugName: "maxRangeLength" }] : /* istanbul ignore next */ []));
788
+ maxRangeLength = input(null, /* @ts-ignore */
789
+ ...(ngDevMode ? [{ debugName: "maxRangeLength" }] : /* istanbul ignore next */ []));
719
790
  /**
720
791
  * Range-mode behavior knobs forwarded to the embedded calendar. Accepts a
721
792
  * partial config — unset fields use the documented defaults on
722
793
  * `RangeBehaviorConfig`. Defaults: `{ allowSingleDayRange: true, persistPartialRange: true, allowBackwardRange: false, disableRangesCrossingDisabledDates: false }`.
723
794
  */
724
- rangeBehavior = input({}, ...(ngDevMode ? [{ debugName: "rangeBehavior" }] : /* istanbul ignore next */ []));
795
+ rangeBehavior = input({}, /* @ts-ignore */
796
+ ...(ngDevMode ? [{ debugName: "rangeBehavior" }] : /* istanbul ignore next */ []));
725
797
  /** How the embedded calendar reacts to a click after a complete range. `'restart'` (default) starts a fresh draft; `'nearest-edge'` moves the nearer endpoint; `'require-clear'` blocks until cleared. */
726
- rangeClickBehavior = input('restart', ...(ngDevMode ? [{ debugName: "rangeClickBehavior" }] : /* istanbul ignore next */ []));
798
+ rangeClickBehavior = input('restart', /* @ts-ignore */
799
+ ...(ngDevMode ? [{ debugName: "rangeClickBehavior" }] : /* istanbul ignore next */ []));
727
800
  /** Override first day of week (0=Sun, 1=Mon) on the embedded calendar. Falls back to the adapter's default. */
728
- firstDayOfWeek = input(null, ...(ngDevMode ? [{ debugName: "firstDayOfWeek" }] : /* istanbul ignore next */ []));
801
+ firstDayOfWeek = input(null, /* @ts-ignore */
802
+ ...(ngDevMode ? [{ debugName: "firstDayOfWeek" }] : /* istanbul ignore next */ []));
729
803
  /** Per-instance locale override. Forwarded to the embedded calendar and the underlying `DateAdapter` so the trigger display tracks the picker's locale. Falls back to Angular `LOCALE_ID` when `null`. */
730
- locale = input(null, ...(ngDevMode ? [{ debugName: "locale" }] : /* istanbul ignore next */ []));
804
+ locale = input(null, /* @ts-ignore */
805
+ ...(ngDevMode ? [{ debugName: "locale" }] : /* istanbul ignore next */ []));
731
806
  /** Function producing per-cell CSS classes on the embedded calendar. */
732
- dateClass = input(null, ...(ngDevMode ? [{ debugName: "dateClass" }] : /* istanbul ignore next */ []));
807
+ dateClass = input(null, /* @ts-ignore */
808
+ ...(ngDevMode ? [{ debugName: "dateClass" }] : /* istanbul ignore next */ []));
733
809
  /** Optional cell-content template, forwarded to the embedded calendar. Use to customize cell visuals beyond `dateClass`. */
734
- cellTemplate = input(null, ...(ngDevMode ? [{ debugName: "cellTemplate" }] : /* istanbul ignore next */ []));
810
+ cellTemplate = input(null, /* @ts-ignore */
811
+ ...(ngDevMode ? [{ debugName: "cellTemplate" }] : /* istanbul ignore next */ []));
735
812
  /** When true, renders a `Today / Clear / Cancel / Apply` action bar at the bottom of the overlay. The calendar commits on the second click by default — turn this on for touch-heavy contexts. Defaults to `false`. */
736
- showActions = input(false, ...(ngDevMode ? [{ debugName: "showActions" }] : /* istanbul ignore next */ []));
813
+ showActions = input(false, /* @ts-ignore */
814
+ ...(ngDevMode ? [{ debugName: "showActions" }] : /* istanbul ignore next */ []));
737
815
  /** When true, the overlay renders two `<tw-time-picker>` instances so users can pick times for the start and end of the range. Defaults to `false`. */
738
- showTime = input(false, ...(ngDevMode ? [{ debugName: "showTime" }] : /* istanbul ignore next */ []));
816
+ showTime = input(false, /* @ts-ignore */
817
+ ...(ngDevMode ? [{ debugName: "showTime" }] : /* istanbul ignore next */ []));
739
818
  /** Format of the embedded time-pickers. `'24h'` renders 00–23; `'12h'` adds an AM/PM toggle. Defaults to `'24h'`. */
740
- timeFormat = input('24h', ...(ngDevMode ? [{ debugName: "timeFormat" }] : /* istanbul ignore next */ []));
819
+ timeFormat = input('24h', /* @ts-ignore */
820
+ ...(ngDevMode ? [{ debugName: "timeFormat" }] : /* istanbul ignore next */ []));
741
821
  /** Whether the embedded time-pickers expose a seconds field. Defaults to `false`. */
742
- showSeconds = input(false, ...(ngDevMode ? [{ debugName: "showSeconds" }] : /* istanbul ignore next */ []));
822
+ showSeconds = input(false, /* @ts-ignore */
823
+ ...(ngDevMode ? [{ debugName: "showSeconds" }] : /* istanbul ignore next */ []));
743
824
  /** Step for the embedded time-pickers' hour fields. Defaults to `1`. */
744
- hourStep = input(1, ...(ngDevMode ? [{ debugName: "hourStep" }] : /* istanbul ignore next */ []));
825
+ hourStep = input(1, /* @ts-ignore */
826
+ ...(ngDevMode ? [{ debugName: "hourStep" }] : /* istanbul ignore next */ []));
745
827
  /** Step for the embedded time-pickers' minute fields. Defaults to `1`. */
746
- minuteStep = input(1, ...(ngDevMode ? [{ debugName: "minuteStep" }] : /* istanbul ignore next */ []));
828
+ minuteStep = input(1, /* @ts-ignore */
829
+ ...(ngDevMode ? [{ debugName: "minuteStep" }] : /* istanbul ignore next */ []));
747
830
  /** Step for the embedded time-pickers' second fields. Defaults to `1`. */
748
- secondStep = input(1, ...(ngDevMode ? [{ debugName: "secondStep" }] : /* istanbul ignore next */ []));
831
+ secondStep = input(1, /* @ts-ignore */
832
+ ...(ngDevMode ? [{ debugName: "secondStep" }] : /* istanbul ignore next */ []));
749
833
  /** Label for the `Today` action in the overlay's action bar. */
750
- todayLabel = input('Today', ...(ngDevMode ? [{ debugName: "todayLabel" }] : /* istanbul ignore next */ []));
834
+ todayLabel = input('Today', /* @ts-ignore */
835
+ ...(ngDevMode ? [{ debugName: "todayLabel" }] : /* istanbul ignore next */ []));
751
836
  /** Label for the `Clear` action in the overlay's action bar. */
752
- clearLabel = input('Clear', ...(ngDevMode ? [{ debugName: "clearLabel" }] : /* istanbul ignore next */ []));
837
+ clearLabel = input('Clear', /* @ts-ignore */
838
+ ...(ngDevMode ? [{ debugName: "clearLabel" }] : /* istanbul ignore next */ []));
753
839
  /** Label for the `Cancel` action in the overlay's action bar. */
754
- cancelLabel = input('Cancel', ...(ngDevMode ? [{ debugName: "cancelLabel" }] : /* istanbul ignore next */ []));
840
+ cancelLabel = input('Cancel', /* @ts-ignore */
841
+ ...(ngDevMode ? [{ debugName: "cancelLabel" }] : /* istanbul ignore next */ []));
755
842
  /** Label for the `Apply` action in the overlay's action bar. */
756
- applyLabel = input('Apply', ...(ngDevMode ? [{ debugName: "applyLabel" }] : /* istanbul ignore next */ []));
843
+ applyLabel = input('Apply', /* @ts-ignore */
844
+ ...(ngDevMode ? [{ debugName: "applyLabel" }] : /* istanbul ignore next */ []));
757
845
  /** Extra class(es) applied to the overlay panel element. `twMerge` resolves conflicts with internal classes. */
758
- panelClass = input('', ...(ngDevMode ? [{ debugName: "panelClass" }] : /* istanbul ignore next */ []));
846
+ panelClass = input('', /* @ts-ignore */
847
+ ...(ngDevMode ? [{ debugName: "panelClass" }] : /* istanbul ignore next */ []));
759
848
  /** CDK scroll strategy for the overlay. Defaults to `'reposition'`. */
760
- scrollStrategy = input('reposition', ...(ngDevMode ? [{ debugName: "scrollStrategy" }] : /* istanbul ignore next */ []));
849
+ scrollStrategy = input('reposition', /* @ts-ignore */
850
+ ...(ngDevMode ? [{ debugName: "scrollStrategy" }] : /* istanbul ignore next */ []));
761
851
  /** Pixel distance between trigger and overlay. Defaults to `4`. */
762
- offset = input(4, ...(ngDevMode ? [{ debugName: "offset" }] : /* istanbul ignore next */ []));
852
+ offset = input(4, /* @ts-ignore */
853
+ ...(ngDevMode ? [{ debugName: "offset" }] : /* istanbul ignore next */ []));
763
854
  /** Accessible label for the clear button. Defaults to `'Clear date range'`. */
764
- clearAriaLabel = input('Clear date range', ...(ngDevMode ? [{ debugName: "clearAriaLabel" }] : /* istanbul ignore next */ []));
855
+ clearAriaLabel = input('Clear date range', /* @ts-ignore */
856
+ ...(ngDevMode ? [{ debugName: "clearAriaLabel" }] : /* istanbul ignore next */ []));
765
857
  /** Per-instance override of the `ErrorStateMatcher`. When omitted, uses the injected `TW_ERROR_STATE_MATCHER`. */
766
- errorStateMatcher = input(undefined, ...(ngDevMode ? [{ debugName: "errorStateMatcher" }] : /* istanbul ignore next */ []));
858
+ errorStateMatcher = input(undefined, /* @ts-ignore */
859
+ ...(ngDevMode ? [{ debugName: "errorStateMatcher" }] : /* istanbul ignore next */ []));
767
860
  /** Accessible name for the trigger. Required when no visible label is supplied via `tw-form-field` or an external `aria-labelledby`. Alias: `aria-label`. */
768
861
  ariaLabel = input(undefined, { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
769
862
  /** ID of an external element that labels the trigger. Alias: `aria-labelledby`. */
@@ -772,9 +865,11 @@ class DateRangePickerComponent extends FormFieldControl {
772
865
  userAriaDescribedByInput = input(undefined, { ...(ngDevMode ? { debugName: "userAriaDescribedByInput" } : /* istanbul ignore next */ {}), alias: 'aria-describedby' });
773
866
  // ── Models (two-way) ──
774
867
  /** Two-way bound selected range. `null` when no selection. Setting programmatically updates the trigger display and the calendar selection; it does NOT trigger `onChange`. */
775
- value = model(null, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
868
+ value = model(null, /* @ts-ignore */
869
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
776
870
  /** Two-way bound open state of the overlay. Setting to `true` opens; setting to `false` closes. */
777
- open = model(false, ...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
871
+ open = model(false, /* @ts-ignore */
872
+ ...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
778
873
  // ── Outputs ──
779
874
  /** Fires after the overlay's enter animation completes. Payload is the trigger element. */
780
875
  opened = output();
@@ -794,7 +889,7 @@ class DateRangePickerComponent extends FormFieldControl {
794
889
  viewContainerRef = inject(ViewContainerRef);
795
890
  injector = inject(Injector);
796
891
  destroyRef = inject(DestroyRef);
797
- formField = inject(FormFieldComponent, { optional: true });
892
+ formField = inject(TW_FORM_FIELD, { optional: true });
798
893
  // Lazy NgControl lookup avoids the construction-time cycle with NG_VALIDATORS
799
894
  // (the host registers itself as a validator via `useExisting`, and NgModel's
800
895
  // constructor pulls the validator set — eager `inject(NgControl, {self})`
@@ -804,7 +899,8 @@ class DateRangePickerComponent extends FormFieldControl {
804
899
  parentFormGroup = inject(FormGroupDirective, { optional: true });
805
900
  defaultMatcher = inject(TW_ERROR_STATE_MATCHER);
806
901
  // ── View refs ──
807
- triggerRef = viewChild.required('trigger');
902
+ triggerRef = viewChild.required('trigger', /* @ts-ignore */
903
+ ...(ngDevMode ? [{ debugName: "triggerRef" }] : /* istanbul ignore next */ []));
808
904
  // ── Identity ──
809
905
  uid = nextDateRangePickerId++;
810
906
  /** @internal */
@@ -813,24 +909,37 @@ class DateRangePickerComponent extends FormFieldControl {
813
909
  dialogId = `${this.hostId}-dialog`;
814
910
  // ── Internal state ──
815
911
  /** @internal Decouples programmatic writes from user commits. */
816
- internalValue = linkedSignal(() => this.value(), ...(ngDevMode ? [{ debugName: "internalValue" }] : /* istanbul ignore next */ []));
817
- /** @internal */
818
- parseError = signal(false, ...(ngDevMode ? [{ debugName: "parseError" }] : /* istanbul ignore next */ []));
819
- /** @internal */
820
- rangeError = signal(false, ...(ngDevMode ? [{ debugName: "rangeError" }] : /* istanbul ignore next */ []));
821
- /** @internal */
822
- focusedSignal = signal(false, ...(ngDevMode ? [{ debugName: "focusedSignal" }] : /* istanbul ignore next */ []));
823
- cvaDisabled = signal(false, ...(ngDevMode ? [{ debugName: "cvaDisabled" }] : /* istanbul ignore next */ []));
824
- describedByIdsSignal = signal([], ...(ngDevMode ? [{ debugName: "describedByIdsSignal" }] : /* istanbul ignore next */ []));
825
- closingSignal = signal(false, ...(ngDevMode ? [{ debugName: "closingSignal" }] : /* istanbul ignore next */ []));
826
- lastValueBeforeOpen = signal(null, ...(ngDevMode ? [{ debugName: "lastValueBeforeOpen" }] : /* istanbul ignore next */ []));
827
- pendingRange = signal(null, ...(ngDevMode ? [{ debugName: "pendingRange" }] : /* istanbul ignore next */ []));
828
- currentView = signal('day', ...(ngDevMode ? [{ debugName: "currentView" }] : /* istanbul ignore next */ []));
829
- _ngControlRev = signal(0, ...(ngDevMode ? [{ debugName: "_ngControlRev" }] : /* istanbul ignore next */ []));
830
- _formSubmitRev = signal(0, ...(ngDevMode ? [{ debugName: "_formSubmitRev" }] : /* istanbul ignore next */ []));
912
+ internalValue = linkedSignal(() => this.value(), /* @ts-ignore */
913
+ ...(ngDevMode ? [{ debugName: "internalValue" }] : /* istanbul ignore next */ []));
914
+ /** @internal */
915
+ parseError = signal(false, /* @ts-ignore */
916
+ ...(ngDevMode ? [{ debugName: "parseError" }] : /* istanbul ignore next */ []));
917
+ /** @internal */
918
+ rangeError = signal(false, /* @ts-ignore */
919
+ ...(ngDevMode ? [{ debugName: "rangeError" }] : /* istanbul ignore next */ []));
920
+ /** @internal */
921
+ focusedSignal = signal(false, /* @ts-ignore */
922
+ ...(ngDevMode ? [{ debugName: "focusedSignal" }] : /* istanbul ignore next */ []));
923
+ cvaDisabled = signal(false, /* @ts-ignore */
924
+ ...(ngDevMode ? [{ debugName: "cvaDisabled" }] : /* istanbul ignore next */ []));
925
+ describedByIdsSignal = signal([], /* @ts-ignore */
926
+ ...(ngDevMode ? [{ debugName: "describedByIdsSignal" }] : /* istanbul ignore next */ []));
927
+ closingSignal = signal(false, /* @ts-ignore */
928
+ ...(ngDevMode ? [{ debugName: "closingSignal" }] : /* istanbul ignore next */ []));
929
+ lastValueBeforeOpen = signal(null, /* @ts-ignore */
930
+ ...(ngDevMode ? [{ debugName: "lastValueBeforeOpen" }] : /* istanbul ignore next */ []));
931
+ pendingRange = signal(null, /* @ts-ignore */
932
+ ...(ngDevMode ? [{ debugName: "pendingRange" }] : /* istanbul ignore next */ []));
933
+ currentView = signal('day', /* @ts-ignore */
934
+ ...(ngDevMode ? [{ debugName: "currentView" }] : /* istanbul ignore next */ []));
935
+ _ngControlRev = signal(0, /* @ts-ignore */
936
+ ...(ngDevMode ? [{ debugName: "_ngControlRev" }] : /* istanbul ignore next */ []));
937
+ _formSubmitRev = signal(0, /* @ts-ignore */
938
+ ...(ngDevMode ? [{ debugName: "_formSubmitRev" }] : /* istanbul ignore next */ []));
831
939
  onChange = () => { };
832
940
  onTouched = () => { };
833
- overlayInstanceSignal = signal(null, ...(ngDevMode ? [{ debugName: "overlayInstanceSignal" }] : /* istanbul ignore next */ []));
941
+ overlayInstanceSignal = signal(null, /* @ts-ignore */
942
+ ...(ngDevMode ? [{ debugName: "overlayInstanceSignal" }] : /* istanbul ignore next */ []));
834
943
  get overlayInstance() {
835
944
  return this.overlayInstanceSignal();
836
945
  }
@@ -839,14 +948,17 @@ class DateRangePickerComponent extends FormFieldControl {
839
948
  isDisabled = computed(() => {
840
949
  this._ngControlRev();
841
950
  return this.disabledInput() || this.cvaDisabled() || !!this.ngControl?.disabled;
842
- }, ...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
951
+ }, /* @ts-ignore */
952
+ ...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
843
953
  /** @internal Effective variant — auto-naked when wrapped in tw-form-field. */
844
- resolvedVariant = computed(() => this.variant() ?? (this.formField ? 'naked' : 'default'), ...(ngDevMode ? [{ debugName: "resolvedVariant" }] : /* istanbul ignore next */ []));
954
+ resolvedVariant = computed(() => this.variant() ?? (this.formField ? 'naked' : 'default'), /* @ts-ignore */
955
+ ...(ngDevMode ? [{ debugName: "resolvedVariant" }] : /* istanbul ignore next */ []));
845
956
  /** @internal */
846
957
  isEmpty = computed(() => {
847
958
  const v = this.internalValue();
848
959
  return v === null || (v.start === null && v.end === null);
849
- }, ...(ngDevMode ? [{ debugName: "isEmpty" }] : /* istanbul ignore next */ []));
960
+ }, /* @ts-ignore */
961
+ ...(ngDevMode ? [{ debugName: "isEmpty" }] : /* istanbul ignore next */ []));
850
962
  /** @internal Effective display format — folds hour/minute (and optional seconds) into the default when `showTime` is on and the user hasn't overridden `format`. */
851
963
  effectiveFormat = computed(() => {
852
964
  const fmt = this.format();
@@ -864,7 +976,8 @@ class DateRangePickerComponent extends FormFieldControl {
864
976
  if (this.showSeconds())
865
977
  base.second = '2-digit';
866
978
  return { dateTimeFormat: base };
867
- }, ...(ngDevMode ? [{ debugName: "effectiveFormat" }] : /* istanbul ignore next */ []));
979
+ }, /* @ts-ignore */
980
+ ...(ngDevMode ? [{ debugName: "effectiveFormat" }] : /* istanbul ignore next */ []));
868
981
  /** @internal */
869
982
  startDisplay = computed(() => {
870
983
  const v = this.internalValue();
@@ -873,7 +986,8 @@ class DateRangePickerComponent extends FormFieldControl {
873
986
  return v.start !== null
874
987
  ? this.adapter.format(v.start, this.effectiveFormat())
875
988
  : this.emptyStartLabel();
876
- }, ...(ngDevMode ? [{ debugName: "startDisplay" }] : /* istanbul ignore next */ []));
989
+ }, /* @ts-ignore */
990
+ ...(ngDevMode ? [{ debugName: "startDisplay" }] : /* istanbul ignore next */ []));
877
991
  /** @internal */
878
992
  endDisplay = computed(() => {
879
993
  const v = this.internalValue();
@@ -882,14 +996,16 @@ class DateRangePickerComponent extends FormFieldControl {
882
996
  return v.end !== null
883
997
  ? this.adapter.format(v.end, this.effectiveFormat())
884
998
  : this.emptyEndLabel();
885
- }, ...(ngDevMode ? [{ debugName: "endDisplay" }] : /* istanbul ignore next */ []));
999
+ }, /* @ts-ignore */
1000
+ ...(ngDevMode ? [{ debugName: "endDisplay" }] : /* istanbul ignore next */ []));
886
1001
  /** @internal */
887
1002
  placeholderDisplay = computed(() => {
888
1003
  const custom = this.placeholder();
889
1004
  if (custom)
890
1005
  return custom;
891
1006
  return `${this.emptyStartLabel()}${this.rangeSeparator()}${this.emptyEndLabel()}`;
892
- }, ...(ngDevMode ? [{ debugName: "placeholderDisplay" }] : /* istanbul ignore next */ []));
1007
+ }, /* @ts-ignore */
1008
+ ...(ngDevMode ? [{ debugName: "placeholderDisplay" }] : /* istanbul ignore next */ []));
893
1009
  /** @internal Accessible name composed from explicit aria-label plus the current range. */
894
1010
  triggerAccessibleName = computed(() => {
895
1011
  const label = this.ariaLabel();
@@ -904,7 +1020,8 @@ class DateRangePickerComponent extends FormFieldControl {
904
1020
  if (label)
905
1021
  return label;
906
1022
  return undefined;
907
- }, ...(ngDevMode ? [{ debugName: "triggerAccessibleName" }] : /* istanbul ignore next */ []));
1023
+ }, /* @ts-ignore */
1024
+ ...(ngDevMode ? [{ debugName: "triggerAccessibleName" }] : /* istanbul ignore next */ []));
908
1025
  /** @internal */
909
1026
  activePresetId = computed(() => {
910
1027
  const v = this.internalValue();
@@ -924,7 +1041,8 @@ class DateRangePickerComponent extends FormFieldControl {
924
1041
  return preset.id;
925
1042
  }
926
1043
  return undefined;
927
- }, ...(ngDevMode ? [{ debugName: "activePresetId" }] : /* istanbul ignore next */ []));
1044
+ }, /* @ts-ignore */
1045
+ ...(ngDevMode ? [{ debugName: "activePresetId" }] : /* istanbul ignore next */ []));
928
1046
  /** @internal */
929
1047
  describedBy = computed(() => {
930
1048
  const extra = this.describedByIdsSignal();
@@ -937,7 +1055,8 @@ class DateRangePickerComponent extends FormFieldControl {
937
1055
  }
938
1056
  }
939
1057
  return merged.length ? merged.join(' ') : '';
940
- }, ...(ngDevMode ? [{ debugName: "describedBy" }] : /* istanbul ignore next */ []));
1058
+ }, /* @ts-ignore */
1059
+ ...(ngDevMode ? [{ debugName: "describedBy" }] : /* istanbul ignore next */ []));
941
1060
  // ── tv() output ──
942
1061
  variantResult = computed(() => dateRangePickerVariants({
943
1062
  size: this.size(),
@@ -947,28 +1066,39 @@ class DateRangePickerComponent extends FormFieldControl {
947
1066
  errorState: this.errorState(),
948
1067
  focused: this.focusedSignal(),
949
1068
  color: this.color(),
950
- }), ...(ngDevMode ? [{ debugName: "variantResult" }] : /* istanbul ignore next */ []));
1069
+ }), /* @ts-ignore */
1070
+ ...(ngDevMode ? [{ debugName: "variantResult" }] : /* istanbul ignore next */ []));
951
1071
  /** @internal */
952
- rootClasses = computed(() => this.variantResult().root(), ...(ngDevMode ? [{ debugName: "rootClasses" }] : /* istanbul ignore next */ []));
1072
+ rootClasses = computed(() => this.variantResult().root(), /* @ts-ignore */
1073
+ ...(ngDevMode ? [{ debugName: "rootClasses" }] : /* istanbul ignore next */ []));
953
1074
  /** @internal */
954
- triggerClasses = computed(() => this.variantResult().trigger(), ...(ngDevMode ? [{ debugName: "triggerClasses" }] : /* istanbul ignore next */ []));
1075
+ triggerClasses = computed(() => this.variantResult().trigger(), /* @ts-ignore */
1076
+ ...(ngDevMode ? [{ debugName: "triggerClasses" }] : /* istanbul ignore next */ []));
955
1077
  /** @internal */
956
- startTextClasses = computed(() => this.variantResult().startText(), ...(ngDevMode ? [{ debugName: "startTextClasses" }] : /* istanbul ignore next */ []));
1078
+ startTextClasses = computed(() => this.variantResult().startText(), /* @ts-ignore */
1079
+ ...(ngDevMode ? [{ debugName: "startTextClasses" }] : /* istanbul ignore next */ []));
957
1080
  /** @internal */
958
- separatorClasses = computed(() => this.variantResult().separator(), ...(ngDevMode ? [{ debugName: "separatorClasses" }] : /* istanbul ignore next */ []));
1081
+ separatorClasses = computed(() => this.variantResult().separator(), /* @ts-ignore */
1082
+ ...(ngDevMode ? [{ debugName: "separatorClasses" }] : /* istanbul ignore next */ []));
959
1083
  /** @internal */
960
- endTextClasses = computed(() => this.variantResult().endText(), ...(ngDevMode ? [{ debugName: "endTextClasses" }] : /* istanbul ignore next */ []));
1084
+ endTextClasses = computed(() => this.variantResult().endText(), /* @ts-ignore */
1085
+ ...(ngDevMode ? [{ debugName: "endTextClasses" }] : /* istanbul ignore next */ []));
961
1086
  /** @internal */
962
- placeholderClasses = computed(() => this.variantResult().placeholderText(), ...(ngDevMode ? [{ debugName: "placeholderClasses" }] : /* istanbul ignore next */ []));
1087
+ placeholderClasses = computed(() => this.variantResult().placeholderText(), /* @ts-ignore */
1088
+ ...(ngDevMode ? [{ debugName: "placeholderClasses" }] : /* istanbul ignore next */ []));
963
1089
  /** @internal */
964
- triggerIconClasses = computed(() => this.variantResult().triggerIcon(), ...(ngDevMode ? [{ debugName: "triggerIconClasses" }] : /* istanbul ignore next */ []));
1090
+ triggerIconClasses = computed(() => this.variantResult().triggerIcon(), /* @ts-ignore */
1091
+ ...(ngDevMode ? [{ debugName: "triggerIconClasses" }] : /* istanbul ignore next */ []));
965
1092
  /** @internal */
966
- triggerIconWrapperClasses = computed(() => this.variantResult().triggerIconWrapper(), ...(ngDevMode ? [{ debugName: "triggerIconWrapperClasses" }] : /* istanbul ignore next */ []));
1093
+ triggerIconWrapperClasses = computed(() => this.variantResult().triggerIconWrapper(), /* @ts-ignore */
1094
+ ...(ngDevMode ? [{ debugName: "triggerIconWrapperClasses" }] : /* istanbul ignore next */ []));
967
1095
  /** @internal */
968
- clearButtonClasses = computed(() => this.variantResult().clearButton(), ...(ngDevMode ? [{ debugName: "clearButtonClasses" }] : /* istanbul ignore next */ []));
1096
+ clearButtonClasses = computed(() => this.variantResult().clearButton(), /* @ts-ignore */
1097
+ ...(ngDevMode ? [{ debugName: "clearButtonClasses" }] : /* istanbul ignore next */ []));
969
1098
  // ── FormFieldControl impl ──
970
1099
  /** @internal */
971
- id = computed(() => this.idInput() ?? this.hostId, ...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
1100
+ id = computed(() => this.idInput() ?? this.hostId, /* @ts-ignore */
1101
+ ...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
972
1102
  /** @internal */
973
1103
  focused = this.focusedSignal.asReadonly();
974
1104
  /** @internal */
@@ -981,7 +1111,8 @@ class DateRangePickerComponent extends FormFieldControl {
981
1111
  if (this.requiredInput())
982
1112
  return true;
983
1113
  return !!this.ngControl?.control?.hasValidator(Validators.required);
984
- }, ...(ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []));
1114
+ }, /* @ts-ignore */
1115
+ ...(ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []));
985
1116
  /** @internal */
986
1117
  errorState = computed(() => {
987
1118
  this._ngControlRev();
@@ -993,11 +1124,13 @@ class DateRangePickerComponent extends FormFieldControl {
993
1124
  const form = this.parentFormGroup ??
994
1125
  this.parentForm;
995
1126
  return matcher.isErrorState(this.ngControl?.control ?? null, form);
996
- }, ...(ngDevMode ? [{ debugName: "errorState" }] : /* istanbul ignore next */ []));
1127
+ }, /* @ts-ignore */
1128
+ ...(ngDevMode ? [{ debugName: "errorState" }] : /* istanbul ignore next */ []));
997
1129
  /** @internal */
998
1130
  controlType = 'date-range-picker';
999
1131
  /** @internal */
1000
- userAriaDescribedBy = computed(() => this.userAriaDescribedByInput(), ...(ngDevMode ? [{ debugName: "userAriaDescribedBy" }] : /* istanbul ignore next */ []));
1132
+ userAriaDescribedBy = computed(() => this.userAriaDescribedByInput(), /* @ts-ignore */
1133
+ ...(ngDevMode ? [{ debugName: "userAriaDescribedBy" }] : /* istanbul ignore next */ []));
1001
1134
  // ── Constructor ──
1002
1135
  constructor() {
1003
1136
  super();
@@ -1117,7 +1250,7 @@ class DateRangePickerComponent extends FormFieldControl {
1117
1250
  return;
1118
1251
  const hasLabel = !!this.ariaLabel() ||
1119
1252
  !!this.ariaLabelledby() ||
1120
- !!this.formField?.labelChild();
1253
+ !!this.formField?.hasLabel();
1121
1254
  if (!hasLabel) {
1122
1255
  console.warn('[tw-date-range-picker] The date-range-picker has no accessible name. Set aria-label, aria-labelledby, or wrap the component in a <tw-form-field> with a <label twLabel>.');
1123
1256
  }
@@ -1649,8 +1782,8 @@ class DateRangePickerComponent extends FormFieldControl {
1649
1782
  triggerEl.focus();
1650
1783
  }
1651
1784
  }
1652
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DateRangePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1653
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: DateRangePickerComponent, isStandalone: true, selector: "tw-date-range-picker", inputs: { idInput: { classPropertyName: "idInput", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null }, dateFilter: { classPropertyName: "dateFilter", publicName: "dateFilter", isSignal: true, isRequired: false, transformFunction: null }, startView: { classPropertyName: "startView", publicName: "startView", isSignal: true, isRequired: false, transformFunction: null }, startAt: { classPropertyName: "startAt", publicName: "startAt", isSignal: true, isRequired: false, transformFunction: null }, format: { classPropertyName: "format", publicName: "format", isSignal: true, isRequired: false, transformFunction: null }, rangeSeparator: { classPropertyName: "rangeSeparator", publicName: "rangeSeparator", isSignal: true, isRequired: false, transformFunction: null }, emptyStartLabel: { classPropertyName: "emptyStartLabel", publicName: "emptyStartLabel", isSignal: true, isRequired: false, transformFunction: null }, emptyEndLabel: { classPropertyName: "emptyEndLabel", publicName: "emptyEndLabel", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, requiredInput: { classPropertyName: "requiredInput", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, numberOfMonths: { classPropertyName: "numberOfMonths", publicName: "numberOfMonths", isSignal: true, isRequired: false, transformFunction: null }, presets: { classPropertyName: "presets", publicName: "presets", isSignal: true, isRequired: false, transformFunction: null }, showClear: { classPropertyName: "showClear", publicName: "showClear", isSignal: true, isRequired: false, transformFunction: null }, minRangeLength: { classPropertyName: "minRangeLength", publicName: "minRangeLength", isSignal: true, isRequired: false, transformFunction: null }, maxRangeLength: { classPropertyName: "maxRangeLength", publicName: "maxRangeLength", isSignal: true, isRequired: false, transformFunction: null }, rangeBehavior: { classPropertyName: "rangeBehavior", publicName: "rangeBehavior", isSignal: true, isRequired: false, transformFunction: null }, rangeClickBehavior: { classPropertyName: "rangeClickBehavior", publicName: "rangeClickBehavior", isSignal: true, isRequired: false, transformFunction: null }, firstDayOfWeek: { classPropertyName: "firstDayOfWeek", publicName: "firstDayOfWeek", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, dateClass: { classPropertyName: "dateClass", publicName: "dateClass", isSignal: true, isRequired: false, transformFunction: null }, cellTemplate: { classPropertyName: "cellTemplate", publicName: "cellTemplate", isSignal: true, isRequired: false, transformFunction: null }, showActions: { classPropertyName: "showActions", publicName: "showActions", isSignal: true, isRequired: false, transformFunction: null }, showTime: { classPropertyName: "showTime", publicName: "showTime", isSignal: true, isRequired: false, transformFunction: null }, timeFormat: { classPropertyName: "timeFormat", publicName: "timeFormat", isSignal: true, isRequired: false, transformFunction: null }, showSeconds: { classPropertyName: "showSeconds", publicName: "showSeconds", isSignal: true, isRequired: false, transformFunction: null }, hourStep: { classPropertyName: "hourStep", publicName: "hourStep", isSignal: true, isRequired: false, transformFunction: null }, minuteStep: { classPropertyName: "minuteStep", publicName: "minuteStep", isSignal: true, isRequired: false, transformFunction: null }, secondStep: { classPropertyName: "secondStep", publicName: "secondStep", isSignal: true, isRequired: false, transformFunction: null }, todayLabel: { classPropertyName: "todayLabel", publicName: "todayLabel", isSignal: true, isRequired: false, transformFunction: null }, clearLabel: { classPropertyName: "clearLabel", publicName: "clearLabel", isSignal: true, isRequired: false, transformFunction: null }, cancelLabel: { classPropertyName: "cancelLabel", publicName: "cancelLabel", isSignal: true, isRequired: false, transformFunction: null }, applyLabel: { classPropertyName: "applyLabel", publicName: "applyLabel", isSignal: true, isRequired: false, transformFunction: null }, panelClass: { classPropertyName: "panelClass", publicName: "panelClass", isSignal: true, isRequired: false, transformFunction: null }, scrollStrategy: { classPropertyName: "scrollStrategy", publicName: "scrollStrategy", isSignal: true, isRequired: false, transformFunction: null }, offset: { classPropertyName: "offset", publicName: "offset", isSignal: true, isRequired: false, transformFunction: null }, clearAriaLabel: { classPropertyName: "clearAriaLabel", publicName: "clearAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, errorStateMatcher: { classPropertyName: "errorStateMatcher", publicName: "errorStateMatcher", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledby: { classPropertyName: "ariaLabelledby", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null }, userAriaDescribedByInput: { classPropertyName: "userAriaDescribedByInput", publicName: "aria-describedby", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", open: "openChange", opened: "opened", closed: "closed", rangeChange: "rangeChange", presetSelected: "presetSelected" }, host: { properties: { "class": "rootClasses()" } }, providers: [
1785
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: DateRangePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1786
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: DateRangePickerComponent, isStandalone: true, selector: "tw-date-range-picker", inputs: { idInput: { classPropertyName: "idInput", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null }, dateFilter: { classPropertyName: "dateFilter", publicName: "dateFilter", isSignal: true, isRequired: false, transformFunction: null }, startView: { classPropertyName: "startView", publicName: "startView", isSignal: true, isRequired: false, transformFunction: null }, startAt: { classPropertyName: "startAt", publicName: "startAt", isSignal: true, isRequired: false, transformFunction: null }, format: { classPropertyName: "format", publicName: "format", isSignal: true, isRequired: false, transformFunction: null }, rangeSeparator: { classPropertyName: "rangeSeparator", publicName: "rangeSeparator", isSignal: true, isRequired: false, transformFunction: null }, emptyStartLabel: { classPropertyName: "emptyStartLabel", publicName: "emptyStartLabel", isSignal: true, isRequired: false, transformFunction: null }, emptyEndLabel: { classPropertyName: "emptyEndLabel", publicName: "emptyEndLabel", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, requiredInput: { classPropertyName: "requiredInput", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, numberOfMonths: { classPropertyName: "numberOfMonths", publicName: "numberOfMonths", isSignal: true, isRequired: false, transformFunction: null }, presets: { classPropertyName: "presets", publicName: "presets", isSignal: true, isRequired: false, transformFunction: null }, showClear: { classPropertyName: "showClear", publicName: "showClear", isSignal: true, isRequired: false, transformFunction: null }, minRangeLength: { classPropertyName: "minRangeLength", publicName: "minRangeLength", isSignal: true, isRequired: false, transformFunction: null }, maxRangeLength: { classPropertyName: "maxRangeLength", publicName: "maxRangeLength", isSignal: true, isRequired: false, transformFunction: null }, rangeBehavior: { classPropertyName: "rangeBehavior", publicName: "rangeBehavior", isSignal: true, isRequired: false, transformFunction: null }, rangeClickBehavior: { classPropertyName: "rangeClickBehavior", publicName: "rangeClickBehavior", isSignal: true, isRequired: false, transformFunction: null }, firstDayOfWeek: { classPropertyName: "firstDayOfWeek", publicName: "firstDayOfWeek", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, dateClass: { classPropertyName: "dateClass", publicName: "dateClass", isSignal: true, isRequired: false, transformFunction: null }, cellTemplate: { classPropertyName: "cellTemplate", publicName: "cellTemplate", isSignal: true, isRequired: false, transformFunction: null }, showActions: { classPropertyName: "showActions", publicName: "showActions", isSignal: true, isRequired: false, transformFunction: null }, showTime: { classPropertyName: "showTime", publicName: "showTime", isSignal: true, isRequired: false, transformFunction: null }, timeFormat: { classPropertyName: "timeFormat", publicName: "timeFormat", isSignal: true, isRequired: false, transformFunction: null }, showSeconds: { classPropertyName: "showSeconds", publicName: "showSeconds", isSignal: true, isRequired: false, transformFunction: null }, hourStep: { classPropertyName: "hourStep", publicName: "hourStep", isSignal: true, isRequired: false, transformFunction: null }, minuteStep: { classPropertyName: "minuteStep", publicName: "minuteStep", isSignal: true, isRequired: false, transformFunction: null }, secondStep: { classPropertyName: "secondStep", publicName: "secondStep", isSignal: true, isRequired: false, transformFunction: null }, todayLabel: { classPropertyName: "todayLabel", publicName: "todayLabel", isSignal: true, isRequired: false, transformFunction: null }, clearLabel: { classPropertyName: "clearLabel", publicName: "clearLabel", isSignal: true, isRequired: false, transformFunction: null }, cancelLabel: { classPropertyName: "cancelLabel", publicName: "cancelLabel", isSignal: true, isRequired: false, transformFunction: null }, applyLabel: { classPropertyName: "applyLabel", publicName: "applyLabel", isSignal: true, isRequired: false, transformFunction: null }, panelClass: { classPropertyName: "panelClass", publicName: "panelClass", isSignal: true, isRequired: false, transformFunction: null }, scrollStrategy: { classPropertyName: "scrollStrategy", publicName: "scrollStrategy", isSignal: true, isRequired: false, transformFunction: null }, offset: { classPropertyName: "offset", publicName: "offset", isSignal: true, isRequired: false, transformFunction: null }, clearAriaLabel: { classPropertyName: "clearAriaLabel", publicName: "clearAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, errorStateMatcher: { classPropertyName: "errorStateMatcher", publicName: "errorStateMatcher", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledby: { classPropertyName: "ariaLabelledby", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null }, userAriaDescribedByInput: { classPropertyName: "userAriaDescribedByInput", publicName: "aria-describedby", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", open: "openChange", opened: "opened", closed: "closed", rangeChange: "rangeChange", presetSelected: "presetSelected" }, host: { properties: { "class": "rootClasses()" } }, providers: [
1654
1787
  {
1655
1788
  provide: TW_FORM_FIELD_CONTROL,
1656
1789
  useExisting: forwardRef(() => DateRangePickerComponent),
@@ -1660,6 +1793,17 @@ class DateRangePickerComponent extends FormFieldControl {
1660
1793
  useExisting: forwardRef(() => DateRangePickerComponent),
1661
1794
  multi: true,
1662
1795
  },
1796
+ // Angular v22 routes a CVA component's own NG_VALIDATORS through the
1797
+ // value-accessor channel. The runtime `ngControl.valueAccessor = this`
1798
+ // assignment below happens too late for that wiring, so `validate()` is
1799
+ // never invoked and every calendar error code silently disappears. The
1800
+ // static provider is what registers this component on the channel in time.
1801
+ // Mirrors `calendar.ts`, which has always provided both tokens.
1802
+ {
1803
+ provide: NG_VALUE_ACCESSOR,
1804
+ useExisting: forwardRef(() => DateRangePickerComponent),
1805
+ multi: true,
1806
+ },
1663
1807
  PickerOverlayCoordinator,
1664
1808
  ], viewQueries: [{ propertyName: "triggerRef", first: true, predicate: ["trigger"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
1665
1809
  <button
@@ -1732,7 +1876,7 @@ class DateRangePickerComponent extends FormFieldControl {
1732
1876
  }
1733
1877
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
1734
1878
  }
1735
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DateRangePickerComponent, decorators: [{
1879
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: DateRangePickerComponent, decorators: [{
1736
1880
  type: Component,
1737
1881
  args: [{
1738
1882
  selector: 'tw-date-range-picker',
@@ -1747,6 +1891,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
1747
1891
  useExisting: forwardRef(() => DateRangePickerComponent),
1748
1892
  multi: true,
1749
1893
  },
1894
+ // Angular v22 routes a CVA component's own NG_VALIDATORS through the
1895
+ // value-accessor channel. The runtime `ngControl.valueAccessor = this`
1896
+ // assignment below happens too late for that wiring, so `validate()` is
1897
+ // never invoked and every calendar error code silently disappears. The
1898
+ // static provider is what registers this component on the channel in time.
1899
+ // Mirrors `calendar.ts`, which has always provided both tokens.
1900
+ {
1901
+ provide: NG_VALUE_ACCESSOR,
1902
+ useExisting: forwardRef(() => DateRangePickerComponent),
1903
+ multi: true,
1904
+ },
1750
1905
  PickerOverlayCoordinator,
1751
1906
  ],
1752
1907
  template: `