@cdevhub/ngx-tw 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +134 -0
  3. package/fesm2022/cdevhub-ngx-tw-accordion.mjs +108 -0
  4. package/fesm2022/cdevhub-ngx-tw-accordion.mjs.map +1 -0
  5. package/fesm2022/cdevhub-ngx-tw-alert.mjs +240 -0
  6. package/fesm2022/cdevhub-ngx-tw-alert.mjs.map +1 -0
  7. package/fesm2022/cdevhub-ngx-tw-avatar.mjs +287 -0
  8. package/fesm2022/cdevhub-ngx-tw-avatar.mjs.map +1 -0
  9. package/fesm2022/cdevhub-ngx-tw-badge.mjs +332 -0
  10. package/fesm2022/cdevhub-ngx-tw-badge.mjs.map +1 -0
  11. package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs +452 -0
  12. package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs.map +1 -0
  13. package/fesm2022/cdevhub-ngx-tw-button.mjs +227 -0
  14. package/fesm2022/cdevhub-ngx-tw-button.mjs.map +1 -0
  15. package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs +417 -0
  16. package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs.map +1 -0
  17. package/fesm2022/cdevhub-ngx-tw-calendar-testing.mjs +232 -0
  18. package/fesm2022/cdevhub-ngx-tw-calendar-testing.mjs.map +1 -0
  19. package/fesm2022/cdevhub-ngx-tw-calendar.mjs +4482 -0
  20. package/fesm2022/cdevhub-ngx-tw-calendar.mjs.map +1 -0
  21. package/fesm2022/cdevhub-ngx-tw-card.mjs +157 -0
  22. package/fesm2022/cdevhub-ngx-tw-card.mjs.map +1 -0
  23. package/fesm2022/cdevhub-ngx-tw-carousel.mjs +1454 -0
  24. package/fesm2022/cdevhub-ngx-tw-carousel.mjs.map +1 -0
  25. package/fesm2022/cdevhub-ngx-tw-checkbox.mjs +593 -0
  26. package/fesm2022/cdevhub-ngx-tw-checkbox.mjs.map +1 -0
  27. package/fesm2022/cdevhub-ngx-tw-code-block.mjs +228 -0
  28. package/fesm2022/cdevhub-ngx-tw-code-block.mjs.map +1 -0
  29. package/fesm2022/cdevhub-ngx-tw-collapsible.mjs +510 -0
  30. package/fesm2022/cdevhub-ngx-tw-collapsible.mjs.map +1 -0
  31. package/fesm2022/cdevhub-ngx-tw-combobox.mjs +1721 -0
  32. package/fesm2022/cdevhub-ngx-tw-combobox.mjs.map +1 -0
  33. package/fesm2022/cdevhub-ngx-tw-command-palette.mjs +721 -0
  34. package/fesm2022/cdevhub-ngx-tw-command-palette.mjs.map +1 -0
  35. package/fesm2022/cdevhub-ngx-tw-core.mjs +861 -0
  36. package/fesm2022/cdevhub-ngx-tw-core.mjs.map +1 -0
  37. package/fesm2022/cdevhub-ngx-tw-date-picker.mjs +1558 -0
  38. package/fesm2022/cdevhub-ngx-tw-date-picker.mjs.map +1 -0
  39. package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs +1833 -0
  40. package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs.map +1 -0
  41. package/fesm2022/cdevhub-ngx-tw-dialog.mjs +693 -0
  42. package/fesm2022/cdevhub-ngx-tw-dialog.mjs.map +1 -0
  43. package/fesm2022/cdevhub-ngx-tw-empty-state.mjs +331 -0
  44. package/fesm2022/cdevhub-ngx-tw-empty-state.mjs.map +1 -0
  45. package/fesm2022/cdevhub-ngx-tw-flip-card.mjs +289 -0
  46. package/fesm2022/cdevhub-ngx-tw-flip-card.mjs.map +1 -0
  47. package/fesm2022/cdevhub-ngx-tw-form-field.mjs +572 -0
  48. package/fesm2022/cdevhub-ngx-tw-form-field.mjs.map +1 -0
  49. package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs +36 -0
  50. package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs.map +1 -0
  51. package/fesm2022/cdevhub-ngx-tw-icon.mjs +278 -0
  52. package/fesm2022/cdevhub-ngx-tw-icon.mjs.map +1 -0
  53. package/fesm2022/cdevhub-ngx-tw-input.mjs +355 -0
  54. package/fesm2022/cdevhub-ngx-tw-input.mjs.map +1 -0
  55. package/fesm2022/cdevhub-ngx-tw-item.mjs +241 -0
  56. package/fesm2022/cdevhub-ngx-tw-item.mjs.map +1 -0
  57. package/fesm2022/cdevhub-ngx-tw-menu.mjs +433 -0
  58. package/fesm2022/cdevhub-ngx-tw-menu.mjs.map +1 -0
  59. package/fesm2022/cdevhub-ngx-tw-paginator.mjs +691 -0
  60. package/fesm2022/cdevhub-ngx-tw-paginator.mjs.map +1 -0
  61. package/fesm2022/cdevhub-ngx-tw-popover.mjs +678 -0
  62. package/fesm2022/cdevhub-ngx-tw-popover.mjs.map +1 -0
  63. package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs +335 -0
  64. package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs.map +1 -0
  65. package/fesm2022/cdevhub-ngx-tw-radio.mjs +708 -0
  66. package/fesm2022/cdevhub-ngx-tw-radio.mjs.map +1 -0
  67. package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs +319 -0
  68. package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs.map +1 -0
  69. package/fesm2022/cdevhub-ngx-tw-select.mjs +1722 -0
  70. package/fesm2022/cdevhub-ngx-tw-select.mjs.map +1 -0
  71. package/fesm2022/cdevhub-ngx-tw-separator.mjs +115 -0
  72. package/fesm2022/cdevhub-ngx-tw-separator.mjs.map +1 -0
  73. package/fesm2022/cdevhub-ngx-tw-sheet.mjs +768 -0
  74. package/fesm2022/cdevhub-ngx-tw-sheet.mjs.map +1 -0
  75. package/fesm2022/cdevhub-ngx-tw-skeleton.mjs +149 -0
  76. package/fesm2022/cdevhub-ngx-tw-skeleton.mjs.map +1 -0
  77. package/fesm2022/cdevhub-ngx-tw-slider.mjs +1147 -0
  78. package/fesm2022/cdevhub-ngx-tw-slider.mjs.map +1 -0
  79. package/fesm2022/cdevhub-ngx-tw-sort.mjs +346 -0
  80. package/fesm2022/cdevhub-ngx-tw-sort.mjs.map +1 -0
  81. package/fesm2022/cdevhub-ngx-tw-spinner.mjs +186 -0
  82. package/fesm2022/cdevhub-ngx-tw-spinner.mjs.map +1 -0
  83. package/fesm2022/cdevhub-ngx-tw-split.mjs +1082 -0
  84. package/fesm2022/cdevhub-ngx-tw-split.mjs.map +1 -0
  85. package/fesm2022/cdevhub-ngx-tw-stat.mjs +579 -0
  86. package/fesm2022/cdevhub-ngx-tw-stat.mjs.map +1 -0
  87. package/fesm2022/cdevhub-ngx-tw-stepper.mjs +443 -0
  88. package/fesm2022/cdevhub-ngx-tw-stepper.mjs.map +1 -0
  89. package/fesm2022/cdevhub-ngx-tw-switch.mjs +391 -0
  90. package/fesm2022/cdevhub-ngx-tw-switch.mjs.map +1 -0
  91. package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs +315 -0
  92. package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs.map +1 -0
  93. package/fesm2022/cdevhub-ngx-tw-table.mjs +994 -0
  94. package/fesm2022/cdevhub-ngx-tw-table.mjs.map +1 -0
  95. package/fesm2022/cdevhub-ngx-tw-tabs.mjs +508 -0
  96. package/fesm2022/cdevhub-ngx-tw-tabs.mjs.map +1 -0
  97. package/fesm2022/cdevhub-ngx-tw-textarea.mjs +147 -0
  98. package/fesm2022/cdevhub-ngx-tw-textarea.mjs.map +1 -0
  99. package/fesm2022/cdevhub-ngx-tw-theme.mjs +178 -0
  100. package/fesm2022/cdevhub-ngx-tw-theme.mjs.map +1 -0
  101. package/fesm2022/cdevhub-ngx-tw-time-picker.mjs +1344 -0
  102. package/fesm2022/cdevhub-ngx-tw-time-picker.mjs.map +1 -0
  103. package/fesm2022/cdevhub-ngx-tw-timeline.mjs +1136 -0
  104. package/fesm2022/cdevhub-ngx-tw-timeline.mjs.map +1 -0
  105. package/fesm2022/cdevhub-ngx-tw-toast.mjs +1311 -0
  106. package/fesm2022/cdevhub-ngx-tw-toast.mjs.map +1 -0
  107. package/fesm2022/cdevhub-ngx-tw-tooltip.mjs +533 -0
  108. package/fesm2022/cdevhub-ngx-tw-tooltip.mjs.map +1 -0
  109. package/fesm2022/cdevhub-ngx-tw.mjs +61 -0
  110. package/fesm2022/cdevhub-ngx-tw.mjs.map +1 -0
  111. package/package.json +265 -0
  112. package/theme/_base.css +394 -0
  113. package/theme/_dark.css +510 -0
  114. package/theme/_high-contrast.css +290 -0
  115. package/theme/_semantic.css +317 -0
  116. package/theme/_typography.css +9 -0
  117. package/theme/index.css +54 -0
  118. package/types/cdevhub-ngx-tw-accordion.d.ts +48 -0
  119. package/types/cdevhub-ngx-tw-alert.d.ts +67 -0
  120. package/types/cdevhub-ngx-tw-avatar.d.ts +79 -0
  121. package/types/cdevhub-ngx-tw-badge.d.ts +94 -0
  122. package/types/cdevhub-ngx-tw-breadcrumbs.d.ts +227 -0
  123. package/types/cdevhub-ngx-tw-button.d.ts +74 -0
  124. package/types/cdevhub-ngx-tw-calendar-luxon.d.ts +200 -0
  125. package/types/cdevhub-ngx-tw-calendar-testing.d.ts +113 -0
  126. package/types/cdevhub-ngx-tw-calendar.d.ts +1704 -0
  127. package/types/cdevhub-ngx-tw-card.d.ts +48 -0
  128. package/types/cdevhub-ngx-tw-carousel.d.ts +406 -0
  129. package/types/cdevhub-ngx-tw-checkbox.d.ts +136 -0
  130. package/types/cdevhub-ngx-tw-code-block.d.ts +93 -0
  131. package/types/cdevhub-ngx-tw-collapsible.d.ts +151 -0
  132. package/types/cdevhub-ngx-tw-combobox.d.ts +389 -0
  133. package/types/cdevhub-ngx-tw-command-palette.d.ts +215 -0
  134. package/types/cdevhub-ngx-tw-core.d.ts +719 -0
  135. package/types/cdevhub-ngx-tw-date-picker.d.ts +317 -0
  136. package/types/cdevhub-ngx-tw-date-range-picker.d.ts +313 -0
  137. package/types/cdevhub-ngx-tw-dialog.d.ts +303 -0
  138. package/types/cdevhub-ngx-tw-empty-state.d.ts +104 -0
  139. package/types/cdevhub-ngx-tw-flip-card.d.ts +95 -0
  140. package/types/cdevhub-ngx-tw-form-field.d.ts +210 -0
  141. package/types/cdevhub-ngx-tw-icon-lucide.d.ts +29 -0
  142. package/types/cdevhub-ngx-tw-icon.d.ts +134 -0
  143. package/types/cdevhub-ngx-tw-input.d.ts +110 -0
  144. package/types/cdevhub-ngx-tw-item.d.ts +70 -0
  145. package/types/cdevhub-ngx-tw-menu.d.ts +99 -0
  146. package/types/cdevhub-ngx-tw-paginator.d.ts +305 -0
  147. package/types/cdevhub-ngx-tw-popover.d.ts +157 -0
  148. package/types/cdevhub-ngx-tw-progress-bar.d.ts +100 -0
  149. package/types/cdevhub-ngx-tw-radio.d.ts +174 -0
  150. package/types/cdevhub-ngx-tw-segmented-control.d.ts +66 -0
  151. package/types/cdevhub-ngx-tw-select.d.ts +384 -0
  152. package/types/cdevhub-ngx-tw-separator.d.ts +28 -0
  153. package/types/cdevhub-ngx-tw-sheet.d.ts +335 -0
  154. package/types/cdevhub-ngx-tw-skeleton.d.ts +52 -0
  155. package/types/cdevhub-ngx-tw-slider.d.ts +258 -0
  156. package/types/cdevhub-ngx-tw-sort.d.ts +136 -0
  157. package/types/cdevhub-ngx-tw-spinner.d.ts +50 -0
  158. package/types/cdevhub-ngx-tw-split.d.ts +265 -0
  159. package/types/cdevhub-ngx-tw-stat.d.ts +140 -0
  160. package/types/cdevhub-ngx-tw-stepper.d.ts +127 -0
  161. package/types/cdevhub-ngx-tw-switch.d.ts +88 -0
  162. package/types/cdevhub-ngx-tw-tab-nav.d.ts +107 -0
  163. package/types/cdevhub-ngx-tw-table.d.ts +479 -0
  164. package/types/cdevhub-ngx-tw-tabs.d.ts +121 -0
  165. package/types/cdevhub-ngx-tw-textarea.d.ts +62 -0
  166. package/types/cdevhub-ngx-tw-theme.d.ts +106 -0
  167. package/types/cdevhub-ngx-tw-time-picker.d.ts +303 -0
  168. package/types/cdevhub-ngx-tw-timeline.d.ts +278 -0
  169. package/types/cdevhub-ngx-tw-toast.d.ts +388 -0
  170. package/types/cdevhub-ngx-tw-tooltip.d.ts +95 -0
  171. package/types/cdevhub-ngx-tw.d.ts +49 -0
@@ -0,0 +1,317 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { OnInit, TemplateRef, Signal } from '@angular/core';
3
+ import { ControlValueAccessor } from '@angular/forms';
4
+ import { TwSize, TwColor, TimePickerFormat, ErrorStateMatcher } from '@cdevhub/ngx-tw/core';
5
+ export { TimePickerFormat } from '@cdevhub/ngx-tw/core';
6
+ import { FormFieldControl } from '@cdevhub/ngx-tw/form-field';
7
+ import { DateFilterFn, CalendarViewState, DateClassFn, CalendarCell } from '@cdevhub/ngx-tw/calendar';
8
+ export { CalendarViewState, DateClassFn, DateFilterFn } from '@cdevhub/ngx-tw/calendar';
9
+
10
+ /** Visual style of the date-picker trigger. */
11
+ type DatePickerVariant = 'default' | 'naked';
12
+ /** Origin of a value change, used to distinguish user input from programmatic writes. */
13
+ type DatePickerChangeSource = 'input' | 'calendar' | 'apply' | 'clear' | 'today' | 'programmatic';
14
+ /** Reason the overlay closed. */
15
+ type DatePickerCloseReason = 'select' | 'apply' | 'cancel' | 'escape' | 'backdrop' | 'programmatic';
16
+ /** Emitted by `dateInput`. */
17
+ interface DatePickerInputEvent<D> {
18
+ /** The raw string currently in the input (pre-parse). */
19
+ readonly rawText: string;
20
+ /** The parsed value if parsing succeeded and it's in range; otherwise `null`. */
21
+ readonly parsed: D | null;
22
+ /** The input element itself. */
23
+ readonly target: HTMLInputElement;
24
+ }
25
+ /** Emitted by `dateChange`. */
26
+ interface DatePickerChangeEvent<D> {
27
+ /** The committed value (`null` when cleared). */
28
+ readonly value: D | null;
29
+ /** The value before this change. */
30
+ readonly previousValue: D | null;
31
+ /** What triggered the change. */
32
+ readonly source: DatePickerChangeSource;
33
+ }
34
+ /** Emitted by `opened` and `closed`. */
35
+ interface DatePickerOpenedEvent {
36
+ /** The trigger (input) element. */
37
+ readonly trigger: HTMLElement;
38
+ }
39
+ /** A quick-select preset rendered above the calendar in the overlay. Mirrors `DateRangePreset`. */
40
+ interface DatePickerPreset<D = Date> {
41
+ /** Label shown on the preset button. */
42
+ readonly label: string;
43
+ /** Factory returning the date to apply when this preset is chosen. Called fresh each click so "today"-relative presets stay current. */
44
+ readonly date: () => D;
45
+ /** Optional identifier — surfaced in `presetSelected` and used to detect the active preset for visual state. */
46
+ readonly id?: string;
47
+ }
48
+ /** Bundle of time-of-day configuration forwarded to the embedded `<tw-time-picker>`. Passing a non-null object turns the time-picker on and forwards each field; pass `{}` to enable with all defaults. */
49
+ interface DatePickerTimeConfig<D = Date> {
50
+ /** Clock format. Defaults to `'24h'`. */
51
+ readonly format?: TimePickerFormat;
52
+ /** Whether to expose a seconds field. Defaults to `false`. */
53
+ readonly showSeconds?: boolean;
54
+ /** Hour step. Defaults to `1`. */
55
+ readonly hourStep?: number;
56
+ /** Minute step. Defaults to `1`. */
57
+ readonly minuteStep?: number;
58
+ /** Second step. Defaults to `1`. */
59
+ readonly secondStep?: number;
60
+ /** Earliest accepted time-of-day. Values earlier than this set `errorState`. */
61
+ readonly minTime?: D | null;
62
+ /** Latest accepted time-of-day. Values later than this set `errorState`. */
63
+ readonly maxTime?: D | null;
64
+ }
65
+
66
+ /**
67
+ * ARIA date-picker dialog. Combines a typable text input with a popover
68
+ * calendar. All three Angular forms strategies (reactive, template-driven,
69
+ * signal-forms) are supported via `ControlValueAccessor`, and the component
70
+ * integrates with `<tw-form-field>` by implementing `FormFieldControl`.
71
+ *
72
+ * All date operations go through the injected `DateAdapter<D>`; call
73
+ * `provideNativeDateAdapter()` in your app providers to bootstrap the default.
74
+ */
75
+ declare class DatePickerComponent<D = Date> extends FormFieldControl<D> implements ControlValueAccessor, OnInit {
76
+ /** Id on the date-picker's input element. Auto-generated when not provided. Used by the form-field's `<label for>` attribute. */
77
+ readonly idInput: _angular_core.InputSignal<string | undefined>;
78
+ /** Minimum selectable date. Typed input earlier than this sets `errorState` and the calendar disables the cell. Defaults to `null`. */
79
+ readonly minDate: _angular_core.InputSignal<D | null>;
80
+ /** Maximum selectable date. Typed input later than this sets `errorState` and the calendar disables the cell. Defaults to `null`. */
81
+ readonly maxDate: _angular_core.InputSignal<D | null>;
82
+ /** Per-date predicate — return `false` to disable. Applied in both the calendar and the text-parse path. */
83
+ readonly dateFilter: _angular_core.InputSignal<DateFilterFn<D> | null>;
84
+ /** Which calendar view opens first — `'day'`, `'month'`, or `'year'`. Defaults to `'day'`. */
85
+ readonly startView: _angular_core.InputSignal<CalendarViewState>;
86
+ /** Date to focus when the calendar opens with no selection. Falls back to today. */
87
+ readonly startAt: _angular_core.InputSignal<D | null>;
88
+ /** Display format passed to `DateAdapter.format()`. With the default adapter, accepts `{ dateTimeFormat: Intl.DateTimeFormatOptions }`. When `withTime` is true and this is left at the default, hour/minute (and optional seconds) are folded in automatically. */
89
+ readonly format: _angular_core.InputSignal<unknown>;
90
+ /** Optional format hint passed to `DateAdapter.parse()`. Ignored by the native adapter. */
91
+ readonly parseFormat: _angular_core.InputSignal<unknown>;
92
+ /** Placeholder text shown in the input when no value is entered. */
93
+ readonly placeholder: _angular_core.InputSignal<string | undefined>;
94
+ /** When true, the input is disabled, the trigger cannot open the calendar, and `aria-disabled="true"` is set. Defaults to `false`. */
95
+ readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
96
+ /** When true, exposes `aria-required="true"`. Validators.required on a bound NgControl is also honoured. Defaults to `false`. */
97
+ readonly requiredInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
98
+ /** When true, blocks typing but still allows picking via the calendar trigger. Defaults to `false`. */
99
+ readonly readonlyInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
100
+ /** Trigger padding, font size, and calendar cell density. Defaults to `'md'`. */
101
+ readonly size: _angular_core.InputSignal<TwSize>;
102
+ /** Semantic color for focused border, calendar selection ring, and today marker. Defaults to `'primary'`. */
103
+ readonly color: _angular_core.InputSignal<TwColor>;
104
+ /** Visual style of the trigger. `'default'` draws its own border; `'naked'` strips chrome. Auto-resolves to `'naked'` when inside `<tw-form-field>`. */
105
+ readonly variant: _angular_core.InputSignal<DatePickerVariant | undefined>;
106
+ /** Whether to show a clear-button affordance inside the trigger when a value is set. Defaults to `true`. */
107
+ readonly showClear: _angular_core.InputSignal<boolean>;
108
+ /** When true, renders a `Today / Clear / Cancel / Apply` action bar at the bottom of the overlay. Defaults to `false`. */
109
+ readonly showActions: _angular_core.InputSignal<boolean>;
110
+ /** Label for the `Today` action in the overlay's action bar. */
111
+ readonly todayLabel: _angular_core.InputSignal<string>;
112
+ /** Label for the `Clear` action in the overlay's action bar. */
113
+ readonly clearLabel: _angular_core.InputSignal<string>;
114
+ /** Label for the `Cancel` action in the overlay's action bar. */
115
+ readonly cancelLabel: _angular_core.InputSignal<string>;
116
+ /** Label for the `Apply` action in the overlay's action bar. */
117
+ readonly applyLabel: _angular_core.InputSignal<string>;
118
+ /** When true, focusing the text input opens the overlay. Defaults to `false`. */
119
+ readonly openOnFocus: _angular_core.InputSignal<boolean>;
120
+ /** Extra class(es) applied to the overlay panel element. */
121
+ readonly panelClass: _angular_core.InputSignal<string | readonly string[]>;
122
+ /** CDK scroll strategy for the overlay. Defaults to `'reposition'`. */
123
+ readonly scrollStrategy: _angular_core.InputSignal<"reposition" | "close" | "block">;
124
+ /** Pixel distance between trigger and overlay. Defaults to `4`. */
125
+ readonly offset: _angular_core.InputSignal<number>;
126
+ /** Accessible name for the calendar trigger button. Defaults to `'Open calendar'`. */
127
+ readonly triggerAriaLabel: _angular_core.InputSignal<string>;
128
+ /**
129
+ * Bundles the time-of-day configuration. Passing a non-null object turns on the embedded `<tw-time-picker>` and forwards each field.
130
+ *
131
+ * Defaults to `null` (no time field). Pass an empty object `{}` to enable the time picker with all defaults.
132
+ */
133
+ readonly timeConfig: _angular_core.InputSignal<DatePickerTimeConfig<D> | null>;
134
+ /** Per-instance locale override. Forwarded to the embedded calendar and the underlying `DateAdapter` for parse/format. Falls back to Angular `LOCALE_ID` when `null`. */
135
+ readonly locale: _angular_core.InputSignal<string | null>;
136
+ /** Function producing per-cell CSS classes, forwarded to the embedded calendar. Useful for visually marking special dates (holidays, billing cycles). */
137
+ readonly dateClass: _angular_core.InputSignal<DateClassFn<D> | null>;
138
+ /** Optional cell-content template, forwarded to the embedded calendar. Use to customize cell visuals beyond `dateClass`. */
139
+ readonly cellTemplate: _angular_core.InputSignal<TemplateRef<{
140
+ $implicit: CalendarCell<D>;
141
+ }> | null>;
142
+ /** Optional quick-select presets rendered as a vertical list before the calendar. Each preset provides a `label` and a `date` factory. An empty array hides the preset panel. */
143
+ readonly presets: _angular_core.InputSignal<readonly DatePickerPreset<D>[]>;
144
+ /** Per-instance override of the `ErrorStateMatcher`. */
145
+ readonly errorStateMatcher: _angular_core.InputSignal<ErrorStateMatcher | undefined>;
146
+ /** Accessible name for the input. Required when no visible label is supplied. Alias: `aria-label`. */
147
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
148
+ /** ID of an external element that labels the input. Alias: `aria-labelledby`. */
149
+ readonly ariaLabelledby: _angular_core.InputSignal<string | undefined>;
150
+ /** Consumer-supplied `aria-describedby` ids. The form-field preserves these when merging hint/error ids. Alias: `aria-describedby`. */
151
+ readonly userAriaDescribedByInput: _angular_core.InputSignal<string | undefined>;
152
+ /** Two-way bound selected date. `null` when no selection. Setting programmatically updates the display; does NOT trigger `onChange`. */
153
+ readonly value: _angular_core.ModelSignal<D | null>;
154
+ /** Two-way bound open state of the calendar overlay. */
155
+ readonly open: _angular_core.ModelSignal<boolean>;
156
+ /** Fires after the overlay's enter animation completes. Payload is the trigger element. */
157
+ readonly opened: _angular_core.OutputEmitterRef<DatePickerOpenedEvent>;
158
+ /** Fires after the overlay's leave animation completes. Payload is the reason it closed. */
159
+ readonly closed: _angular_core.OutputEmitterRef<DatePickerCloseReason>;
160
+ /** Fires on every keystroke in the text input (before parsing). Does NOT mean the value has committed. */
161
+ readonly dateInput: _angular_core.OutputEmitterRef<DatePickerInputEvent<D>>;
162
+ /** Fires after a commit — from parsing typed input or picking in the calendar. */
163
+ readonly dateChange: _angular_core.OutputEmitterRef<DatePickerChangeEvent<D>>;
164
+ /** Fires when the user picks one of the entries from `presets`. Payload is the preset that fired. */
165
+ readonly presetSelected: _angular_core.OutputEmitterRef<DatePickerPreset<D>>;
166
+ private readonly adapter;
167
+ private readonly overlayService;
168
+ private readonly focusMonitor;
169
+ private readonly liveAnnouncer;
170
+ private readonly coordinator;
171
+ private readonly elementRef;
172
+ private readonly viewContainerRef;
173
+ private readonly injector;
174
+ private readonly destroyRef;
175
+ private readonly formField;
176
+ private readonly ngControl;
177
+ private readonly parentForm;
178
+ private readonly parentFormGroup;
179
+ private readonly defaultMatcher;
180
+ private readonly inputRef;
181
+ private readonly triggerRef;
182
+ /** @internal Whether a `[slot=trigger]` is projected. Detected post-mount via DOM query so we can drop the default chrome. */
183
+ readonly hasCustomTrigger: _angular_core.WritableSignal<boolean>;
184
+ private readonly uid;
185
+ /** @internal */
186
+ readonly hostId: string;
187
+ /** @internal */
188
+ readonly dialogId: string;
189
+ /** @internal Decouples programmatic writes from user commits so `writeValue` doesn't re-trigger parent effects. */
190
+ readonly internalValue: _angular_core.WritableSignal<D | null>;
191
+ /** @internal */
192
+ readonly rawInputText: _angular_core.WritableSignal<string>;
193
+ /** @internal */
194
+ readonly parseError: _angular_core.WritableSignal<boolean>;
195
+ /** @internal */
196
+ readonly rangeError: _angular_core.WritableSignal<boolean>;
197
+ /** @internal */
198
+ readonly focusedSignal: _angular_core.WritableSignal<boolean>;
199
+ private readonly cvaDisabled;
200
+ private readonly describedByIdsSignal;
201
+ private readonly closingSignal;
202
+ private readonly lastValueBeforeOpen;
203
+ private readonly pendingCalendarValue;
204
+ private readonly activePresetIdSignal;
205
+ private readonly _ngControlRev;
206
+ private readonly _formSubmitRev;
207
+ private onChange;
208
+ private onTouched;
209
+ private readonly overlayInstanceSignal;
210
+ private returnFocusTo;
211
+ private get overlayInstance();
212
+ /** @internal */
213
+ readonly isDisabled: Signal<boolean>;
214
+ /** @internal Effective variant — auto-naked when wrapped in tw-form-field. */
215
+ readonly resolvedVariant: Signal<DatePickerVariant>;
216
+ /** @internal */
217
+ readonly isEmpty: Signal<boolean>;
218
+ /** Whether the time picker is rendered inside the overlay. True iff `timeConfig` is non-null. */
219
+ readonly withTime: Signal<boolean>;
220
+ /** @internal Effective time-of-day configuration — merges `timeConfig` over the documented per-field defaults. */
221
+ readonly effectiveTimeConfig: Signal<Required<Omit<DatePickerTimeConfig<D>, "minTime" | "maxTime">> & {
222
+ minTime: D | null;
223
+ maxTime: D | null;
224
+ }>;
225
+ /** @internal Effective display format — folds hour/minute (and optional seconds) into the default when `withTime` is on and the user hasn't overridden `format`. */
226
+ readonly effectiveFormat: Signal<unknown>;
227
+ /** @internal */
228
+ readonly describedBy: Signal<string>;
229
+ private readonly variantResult;
230
+ /** @internal */
231
+ readonly rootClasses: Signal<string>;
232
+ /** @internal */
233
+ readonly inputClasses: Signal<string>;
234
+ /** @internal */
235
+ readonly triggerButtonClasses: Signal<string>;
236
+ /** @internal */
237
+ readonly triggerIconClasses: Signal<string>;
238
+ /** @internal */
239
+ readonly clearButtonClasses: Signal<string>;
240
+ /** @internal */
241
+ readonly id: Signal<string>;
242
+ /** @internal */
243
+ readonly focused: Signal<boolean>;
244
+ /** @internal */
245
+ readonly empty: Signal<boolean>;
246
+ /** @internal */
247
+ readonly disabled: Signal<boolean>;
248
+ /** @internal */
249
+ readonly required: Signal<boolean>;
250
+ /** @internal */
251
+ readonly errorState: Signal<boolean>;
252
+ /** @internal */
253
+ readonly controlType = "date-picker";
254
+ /** @internal */
255
+ readonly userAriaDescribedBy: Signal<string | undefined>;
256
+ constructor();
257
+ ngOnInit(): void;
258
+ /** Opens the overlay. No-op when disabled or already open. */
259
+ openPicker(): void;
260
+ /** Closes the overlay. No-op when already closed. */
261
+ closePicker(): void;
262
+ /** Toggles the overlay's open state. */
263
+ toggle(): void;
264
+ /** Clears the current value and emits `dateChange` with `source: 'clear'`. */
265
+ clear(): void;
266
+ /** @internal */
267
+ onInputEvent(event: Event): void;
268
+ /** @internal */
269
+ onInputBlur(): void;
270
+ /** @internal */
271
+ onInputFocus(): void;
272
+ /** @internal */
273
+ onInputKeydown(event: KeyboardEvent): void;
274
+ /** @internal */
275
+ onClearClick(event: MouseEvent): void;
276
+ /** @internal */
277
+ onTriggerClick(): void;
278
+ /** @internal */
279
+ onTriggerKeydown(event: KeyboardEvent): void;
280
+ /** @internal */
281
+ onCustomTriggerClick(event: MouseEvent): void;
282
+ /** @internal */
283
+ onCustomTriggerKeydown(event: KeyboardEvent): void;
284
+ private commitFromInput;
285
+ private commit;
286
+ private isInRange;
287
+ private isTimeInRange;
288
+ private openOverlay;
289
+ private closeOverlay;
290
+ private onCalendarSelection;
291
+ /** @internal Called by the overlay when the embedded time-picker reports a new value. */
292
+ private onTimeInput;
293
+ private onTodayClicked;
294
+ /** Copies the time-of-day from the current pending/selected value onto `picked`. */
295
+ private carryTimeOfDay;
296
+ private onClearAction;
297
+ private onCancelAction;
298
+ private onApplyAction;
299
+ private onPresetClick;
300
+ private resolveDialogAriaLabel;
301
+ private resolvePanelClass;
302
+ /** Picks the best element to receive focus on overlay close. Prefers the explicit `returnFocusTo` source, then the trigger button, the projected custom trigger, and finally the input. */
303
+ private resolveFocusTarget;
304
+ writeValue(value: unknown): void;
305
+ registerOnChange(fn: (value: D | null) => void): void;
306
+ registerOnTouched(fn: () => void): void;
307
+ setDisabledState(isDisabled: boolean): void;
308
+ /** @internal */
309
+ setDescribedByIds(ids: string[]): void;
310
+ /** @internal */
311
+ onContainerClick(event: MouseEvent): void;
312
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DatePickerComponent<any>, never>;
313
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DatePickerComponent<any>, "tw-date-picker", never, { "idInput": { "alias": "id"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "dateFilter": { "alias": "dateFilter"; "required": false; "isSignal": true; }; "startView": { "alias": "startView"; "required": false; "isSignal": true; }; "startAt": { "alias": "startAt"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "parseFormat": { "alias": "parseFormat"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "requiredInput": { "alias": "required"; "required": false; "isSignal": true; }; "readonlyInput": { "alias": "readonly"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "showClear": { "alias": "showClear"; "required": false; "isSignal": true; }; "showActions": { "alias": "showActions"; "required": false; "isSignal": true; }; "todayLabel": { "alias": "todayLabel"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "cancelLabel": { "alias": "cancelLabel"; "required": false; "isSignal": true; }; "applyLabel": { "alias": "applyLabel"; "required": false; "isSignal": true; }; "openOnFocus": { "alias": "openOnFocus"; "required": false; "isSignal": true; }; "panelClass": { "alias": "panelClass"; "required": false; "isSignal": true; }; "scrollStrategy": { "alias": "scrollStrategy"; "required": false; "isSignal": true; }; "offset": { "alias": "offset"; "required": false; "isSignal": true; }; "triggerAriaLabel": { "alias": "triggerAriaLabel"; "required": false; "isSignal": true; }; "timeConfig": { "alias": "timeConfig"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "dateClass": { "alias": "dateClass"; "required": false; "isSignal": true; }; "cellTemplate": { "alias": "cellTemplate"; "required": false; "isSignal": true; }; "presets": { "alias": "presets"; "required": false; "isSignal": true; }; "errorStateMatcher": { "alias": "errorStateMatcher"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "ariaLabelledby": { "alias": "aria-labelledby"; "required": false; "isSignal": true; }; "userAriaDescribedByInput": { "alias": "aria-describedby"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "open": "openChange"; "opened": "opened"; "closed": "closed"; "dateInput": "dateInput"; "dateChange": "dateChange"; "presetSelected": "presetSelected"; }, never, ["[slot=trigger]", "[slot=trigger-icon]"], true, never>;
314
+ }
315
+
316
+ export { DatePickerComponent };
317
+ export type { DatePickerChangeEvent, DatePickerChangeSource, DatePickerCloseReason, DatePickerInputEvent, DatePickerOpenedEvent, DatePickerPreset, DatePickerTimeConfig, DatePickerVariant };
@@ -0,0 +1,313 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { OnInit, TemplateRef, Signal } from '@angular/core';
3
+ import { ControlValueAccessor, Validator, AbstractControl, ValidationErrors } from '@angular/forms';
4
+ import { TwSize, TwColor, RangeBehaviorConfig, TimePickerFormat, ErrorStateMatcher } from '@cdevhub/ngx-tw/core';
5
+ import { FormFieldControl } from '@cdevhub/ngx-tw/form-field';
6
+ import { TwDateRange, DateFilterFn, CalendarViewState, RangeClickBehavior, DateClassFn, CalendarCell } from '@cdevhub/ngx-tw/calendar';
7
+
8
+ /** Visual style of the date-range-picker trigger. */
9
+ type DateRangePickerVariant = 'default' | 'naked';
10
+ /** How many months the overlay displays side-by-side. */
11
+ type DateRangePickerMonths = 1 | 2;
12
+ /** Origin of a value change, used to distinguish user input from programmatic writes. */
13
+ type DateRangePickerChangeSource = 'calendar' | 'preset' | 'time' | 'apply' | 'clear' | 'programmatic';
14
+ /** Reason the overlay closed. */
15
+ type DateRangePickerCloseReason = 'select' | 'apply' | 'cancel' | 'escape' | 'backdrop' | 'programmatic';
16
+ /** Emitted by `rangeChange` after a committed value update. */
17
+ interface DateRangePickerChangeEvent<D> {
18
+ /** The committed range (`null` when cleared). */
19
+ readonly value: TwDateRange<D> | null;
20
+ /** The range before this change. */
21
+ readonly previousValue: TwDateRange<D> | null;
22
+ /** What triggered the change. */
23
+ readonly source: DateRangePickerChangeSource;
24
+ }
25
+ /** Emitted by `opened`. */
26
+ interface DateRangePickerOpenedEvent {
27
+ /** The trigger element. */
28
+ readonly trigger: HTMLElement;
29
+ }
30
+ /** A quick-select preset rendered in the overlay's preset list. */
31
+ interface DateRangePreset<D = Date> {
32
+ /** Label shown on the preset button. */
33
+ readonly label: string;
34
+ /** Factory returning the range to apply when this preset is chosen. Called fresh each click so "today"-relative presets stay current. */
35
+ readonly range: () => TwDateRange<D>;
36
+ /** Optional identifier — surfaced in `presetSelected` and used to detect the active preset for visual state. */
37
+ readonly id?: string;
38
+ }
39
+ /**
40
+ * ARIA date-picker dialog for two-endpoint date ranges. Composes `tw-calendar`
41
+ * in `selectionMode="range"` inside a CDK overlay. Supports optional time
42
+ * selection via embedded `tw-time-picker`s and optional quick-select presets.
43
+ *
44
+ * All three Angular forms strategies (reactive, template-driven, signal-forms)
45
+ * are supported via `ControlValueAccessor`, and the component integrates with
46
+ * `<tw-form-field>` by implementing `FormFieldControl`.
47
+ *
48
+ * All date operations go through the injected `DateAdapter<D>`; call
49
+ * `provideNativeDateAdapter()` in your app providers to bootstrap the default.
50
+ */
51
+ declare class DateRangePickerComponent<D = Date> extends FormFieldControl<TwDateRange<D>> implements ControlValueAccessor, Validator, OnInit {
52
+ /** Id on the trigger element. Auto-generated when not provided. Used by the form-field's `<label for>` attribute. */
53
+ readonly idInput: _angular_core.InputSignal<string | undefined>;
54
+ /** Earliest selectable date for either endpoint. Presets and calendar cells earlier than this are rejected or disabled. Defaults to `null`. */
55
+ readonly minDate: _angular_core.InputSignal<D | null>;
56
+ /** Latest selectable date for either endpoint. Presets and calendar cells later than this are rejected or disabled. Defaults to `null`. */
57
+ readonly maxDate: _angular_core.InputSignal<D | null>;
58
+ /** Per-date predicate — return `false` to disable. Applied in both calendars. Presets that fall on a filtered date are skipped. */
59
+ readonly dateFilter: _angular_core.InputSignal<DateFilterFn<D> | null>;
60
+ /** Which calendar view opens first — `'day'`, `'month'`, or `'year'`. Defaults to `'day'`. */
61
+ readonly startView: _angular_core.InputSignal<CalendarViewState>;
62
+ /** Date the left calendar focuses on when opened with no value. Falls back to today. Ignored when a value is already set. */
63
+ readonly startAt: _angular_core.InputSignal<D | null>;
64
+ /** 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. */
65
+ readonly format: _angular_core.InputSignal<unknown>;
66
+ /** Separator rendered between the two formatted endpoints in the trigger. Defaults to `" – "`. */
67
+ readonly rangeSeparator: _angular_core.InputSignal<string>;
68
+ /** Placeholder text shown in the trigger for an empty `start` endpoint. */
69
+ readonly emptyStartLabel: _angular_core.InputSignal<string>;
70
+ /** Placeholder text shown in the trigger for an empty `end` endpoint. */
71
+ readonly emptyEndLabel: _angular_core.InputSignal<string>;
72
+ /** When set, overrides the composed `${emptyStartLabel}${rangeSeparator}${emptyEndLabel}` placeholder with a single string. */
73
+ readonly placeholder: _angular_core.InputSignal<string | undefined>;
74
+ /** When true, the trigger cannot open the overlay and `aria-disabled="true"` is set. Defaults to `false`. */
75
+ readonly disabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
76
+ /** When true, exposes `aria-required="true"`. `Validators.required` on a bound `NgControl` is also honoured. Defaults to `false`. */
77
+ readonly requiredInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
78
+ /** Trigger padding, font size, and calendar cell density. Uses the shared `TwSize` scale. Defaults to `'md'`. */
79
+ readonly size: _angular_core.InputSignal<TwSize>;
80
+ /** Semantic color for focused border, calendar range fill, and preset active state. Defaults to `'primary'`. */
81
+ readonly color: _angular_core.InputSignal<TwColor>;
82
+ /** 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'`. */
83
+ readonly variant: _angular_core.InputSignal<DateRangePickerVariant | undefined>;
84
+ /** How many months the overlay shows side-by-side. `2` is the standard range-picker layout; use `1` for compact contexts. Defaults to `2`. */
85
+ readonly numberOfMonths: _angular_core.InputSignal<DateRangePickerMonths>;
86
+ /** 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. */
87
+ readonly presets: _angular_core.InputSignal<readonly DateRangePreset<D>[]>;
88
+ /** Whether to show a clear-button affordance inside the trigger when a value is set. Defaults to `true`. */
89
+ readonly showClear: _angular_core.InputSignal<boolean>;
90
+ /** 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`. */
91
+ readonly minRangeLength: _angular_core.InputSignal<number | null>;
92
+ /** 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`. */
93
+ readonly maxRangeLength: _angular_core.InputSignal<number | null>;
94
+ /**
95
+ * Range-mode behavior knobs forwarded to the embedded calendar. Accepts a
96
+ * partial config — unset fields use the documented defaults on
97
+ * `RangeBehaviorConfig`. Defaults: `{ allowSingleDayRange: true, persistPartialRange: true, allowBackwardRange: false, disableRangesCrossingDisabledDates: false }`.
98
+ */
99
+ readonly rangeBehavior: _angular_core.InputSignal<Partial<RangeBehaviorConfig>>;
100
+ /** 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. */
101
+ readonly rangeClickBehavior: _angular_core.InputSignal<RangeClickBehavior>;
102
+ /** Override first day of week (0=Sun, 1=Mon) on the embedded calendar. Falls back to the adapter's default. */
103
+ readonly firstDayOfWeek: _angular_core.InputSignal<number | null>;
104
+ /** 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`. */
105
+ readonly locale: _angular_core.InputSignal<string | null>;
106
+ /** Function producing per-cell CSS classes on the embedded calendar. */
107
+ readonly dateClass: _angular_core.InputSignal<DateClassFn<D> | null>;
108
+ /** Optional cell-content template, forwarded to the embedded calendar. Use to customize cell visuals beyond `dateClass`. */
109
+ readonly cellTemplate: _angular_core.InputSignal<TemplateRef<{
110
+ $implicit: CalendarCell<D>;
111
+ }> | null>;
112
+ /** 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`. */
113
+ readonly showActions: _angular_core.InputSignal<boolean>;
114
+ /** 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`. */
115
+ readonly showTime: _angular_core.InputSignal<boolean>;
116
+ /** Format of the embedded time-pickers. `'24h'` renders 00–23; `'12h'` adds an AM/PM toggle. Defaults to `'24h'`. */
117
+ readonly timeFormat: _angular_core.InputSignal<TimePickerFormat>;
118
+ /** Whether the embedded time-pickers expose a seconds field. Defaults to `false`. */
119
+ readonly showSeconds: _angular_core.InputSignal<boolean>;
120
+ /** Step for the embedded time-pickers' hour fields. Defaults to `1`. */
121
+ readonly hourStep: _angular_core.InputSignal<number>;
122
+ /** Step for the embedded time-pickers' minute fields. Defaults to `1`. */
123
+ readonly minuteStep: _angular_core.InputSignal<number>;
124
+ /** Step for the embedded time-pickers' second fields. Defaults to `1`. */
125
+ readonly secondStep: _angular_core.InputSignal<number>;
126
+ /** Label for the `Today` action in the overlay's action bar. */
127
+ readonly todayLabel: _angular_core.InputSignal<string>;
128
+ /** Label for the `Clear` action in the overlay's action bar. */
129
+ readonly clearLabel: _angular_core.InputSignal<string>;
130
+ /** Label for the `Cancel` action in the overlay's action bar. */
131
+ readonly cancelLabel: _angular_core.InputSignal<string>;
132
+ /** Label for the `Apply` action in the overlay's action bar. */
133
+ readonly applyLabel: _angular_core.InputSignal<string>;
134
+ /** Extra class(es) applied to the overlay panel element. `twMerge` resolves conflicts with internal classes. */
135
+ readonly panelClass: _angular_core.InputSignal<string | readonly string[]>;
136
+ /** CDK scroll strategy for the overlay. Defaults to `'reposition'`. */
137
+ readonly scrollStrategy: _angular_core.InputSignal<"reposition" | "close" | "block">;
138
+ /** Pixel distance between trigger and overlay. Defaults to `4`. */
139
+ readonly offset: _angular_core.InputSignal<number>;
140
+ /** Accessible label for the clear button. Defaults to `'Clear date range'`. */
141
+ readonly clearAriaLabel: _angular_core.InputSignal<string>;
142
+ /** Per-instance override of the `ErrorStateMatcher`. When omitted, uses the injected `TW_ERROR_STATE_MATCHER`. */
143
+ readonly errorStateMatcher: _angular_core.InputSignal<ErrorStateMatcher | undefined>;
144
+ /** Accessible name for the trigger. Required when no visible label is supplied via `tw-form-field` or an external `aria-labelledby`. Alias: `aria-label`. */
145
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
146
+ /** ID of an external element that labels the trigger. Alias: `aria-labelledby`. */
147
+ readonly ariaLabelledby: _angular_core.InputSignal<string | undefined>;
148
+ /** Consumer-supplied `aria-describedby` ids. The form-field preserves these when merging hint/error ids. Alias: `aria-describedby`. */
149
+ readonly userAriaDescribedByInput: _angular_core.InputSignal<string | undefined>;
150
+ /** Two-way bound selected range. `null` when no selection. Setting programmatically updates the trigger display and the calendar selection; it does NOT trigger `onChange`. */
151
+ readonly value: _angular_core.ModelSignal<TwDateRange<D> | null>;
152
+ /** Two-way bound open state of the overlay. Setting to `true` opens; setting to `false` closes. */
153
+ readonly open: _angular_core.ModelSignal<boolean>;
154
+ /** Fires after the overlay's enter animation completes. Payload is the trigger element. */
155
+ readonly opened: _angular_core.OutputEmitterRef<DateRangePickerOpenedEvent>;
156
+ /** Fires after the overlay's leave animation completes. Payload is the reason it closed. */
157
+ readonly closed: _angular_core.OutputEmitterRef<DateRangePickerCloseReason>;
158
+ /** Fires after a commit — either from completing a range in the calendar, picking a preset, or applying via the action bar. */
159
+ readonly rangeChange: _angular_core.OutputEmitterRef<DateRangePickerChangeEvent<D>>;
160
+ /** Fires when the user picks a preset from the list. Payload is the preset descriptor. Fires in addition to `rangeChange`. */
161
+ readonly presetSelected: _angular_core.OutputEmitterRef<DateRangePreset<D>>;
162
+ private readonly adapter;
163
+ private readonly overlayService;
164
+ private readonly focusMonitor;
165
+ private readonly liveAnnouncer;
166
+ private readonly coordinator;
167
+ private readonly elementRef;
168
+ private readonly viewContainerRef;
169
+ private readonly injector;
170
+ private readonly destroyRef;
171
+ private readonly formField;
172
+ private ngControl;
173
+ private readonly parentForm;
174
+ private readonly parentFormGroup;
175
+ private readonly defaultMatcher;
176
+ private readonly triggerRef;
177
+ private readonly uid;
178
+ /** @internal */
179
+ readonly hostId: string;
180
+ /** @internal */
181
+ readonly dialogId: string;
182
+ /** @internal Decouples programmatic writes from user commits. */
183
+ readonly internalValue: _angular_core.WritableSignal<TwDateRange<D> | null>;
184
+ /** @internal */
185
+ readonly parseError: _angular_core.WritableSignal<boolean>;
186
+ /** @internal */
187
+ readonly rangeError: _angular_core.WritableSignal<boolean>;
188
+ /** @internal */
189
+ readonly focusedSignal: _angular_core.WritableSignal<boolean>;
190
+ private readonly cvaDisabled;
191
+ private readonly describedByIdsSignal;
192
+ private readonly closingSignal;
193
+ private readonly lastValueBeforeOpen;
194
+ private readonly pendingRange;
195
+ private readonly currentView;
196
+ private readonly _ngControlRev;
197
+ private readonly _formSubmitRev;
198
+ private onChange;
199
+ private onTouched;
200
+ private readonly overlayInstanceSignal;
201
+ private get overlayInstance();
202
+ /** @internal */
203
+ readonly isDisabled: Signal<boolean>;
204
+ /** @internal Effective variant — auto-naked when wrapped in tw-form-field. */
205
+ readonly resolvedVariant: Signal<DateRangePickerVariant>;
206
+ /** @internal */
207
+ readonly isEmpty: Signal<boolean>;
208
+ /** @internal Effective display format — folds hour/minute (and optional seconds) into the default when `showTime` is on and the user hasn't overridden `format`. */
209
+ readonly effectiveFormat: Signal<unknown>;
210
+ /** @internal */
211
+ readonly startDisplay: Signal<string>;
212
+ /** @internal */
213
+ readonly endDisplay: Signal<string>;
214
+ /** @internal */
215
+ readonly placeholderDisplay: Signal<string>;
216
+ /** @internal Accessible name composed from explicit aria-label plus the current range. */
217
+ readonly triggerAccessibleName: Signal<string | undefined>;
218
+ /** @internal */
219
+ readonly activePresetId: Signal<string | undefined>;
220
+ /** @internal */
221
+ readonly describedBy: Signal<string>;
222
+ private readonly variantResult;
223
+ /** @internal */
224
+ readonly rootClasses: Signal<string>;
225
+ /** @internal */
226
+ readonly triggerClasses: Signal<string>;
227
+ /** @internal */
228
+ readonly startTextClasses: Signal<string>;
229
+ /** @internal */
230
+ readonly separatorClasses: Signal<string>;
231
+ /** @internal */
232
+ readonly endTextClasses: Signal<string>;
233
+ /** @internal */
234
+ readonly placeholderClasses: Signal<string>;
235
+ /** @internal */
236
+ readonly triggerIconClasses: Signal<string>;
237
+ /** @internal */
238
+ readonly triggerIconWrapperClasses: Signal<string>;
239
+ /** @internal */
240
+ readonly clearButtonClasses: Signal<string>;
241
+ /** @internal */
242
+ readonly id: Signal<string>;
243
+ /** @internal */
244
+ readonly focused: Signal<boolean>;
245
+ /** @internal */
246
+ readonly empty: Signal<boolean>;
247
+ /** @internal */
248
+ readonly disabled: Signal<boolean>;
249
+ /** @internal */
250
+ readonly required: Signal<boolean>;
251
+ /** @internal */
252
+ readonly errorState: Signal<boolean>;
253
+ /** @internal */
254
+ readonly controlType = "date-range-picker";
255
+ /** @internal */
256
+ readonly userAriaDescribedBy: Signal<string | undefined>;
257
+ constructor();
258
+ ngOnInit(): void;
259
+ /** Opens the overlay. No-op when disabled or already open. */
260
+ openPicker(): void;
261
+ /** Closes the overlay. No-op when already closed. */
262
+ closePicker(): void;
263
+ /** Toggles the overlay's open state. */
264
+ toggle(): void;
265
+ /** Clears the current range and emits `rangeChange` with `source: 'clear'`. */
266
+ clear(): void;
267
+ /** @internal */
268
+ onTriggerClick(): void;
269
+ /** @internal */
270
+ onTriggerKeydown(event: KeyboardEvent): void;
271
+ /** @internal */
272
+ onClearClick(event: MouseEvent): void;
273
+ private commit;
274
+ private announce;
275
+ private normalizeRange;
276
+ private clampRange;
277
+ private isRangeValid;
278
+ private rangeLengthInDays;
279
+ private openOverlay;
280
+ private closeOverlay;
281
+ /** @internal */
282
+ private onCalendarSelection;
283
+ private onPresetClick;
284
+ private onStartTimeChange;
285
+ private onEndTimeChange;
286
+ private onViewChanged;
287
+ private onTodayClicked;
288
+ private onClearAction;
289
+ private onCancelAction;
290
+ private onApplyAction;
291
+ private resolveDialogAriaLabel;
292
+ private resolvePanelClass;
293
+ writeValue(value: unknown): void;
294
+ private coerceRange;
295
+ private coerceEndpoint;
296
+ registerOnChange(fn: (value: TwDateRange<D> | null) => void): void;
297
+ registerOnTouched(fn: () => void): void;
298
+ setDisabledState(isDisabled: boolean): void;
299
+ private validatorOnChange;
300
+ /** @internal */
301
+ validate(control: AbstractControl): ValidationErrors | null;
302
+ /** @internal */
303
+ registerOnValidatorChange(fn: () => void): void;
304
+ /** @internal */
305
+ setDescribedByIds(ids: string[]): void;
306
+ /** @internal */
307
+ onContainerClick(event: MouseEvent): void;
308
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DateRangePickerComponent<any>, never>;
309
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DateRangePickerComponent<any>, "tw-date-range-picker", never, { "idInput": { "alias": "id"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "dateFilter": { "alias": "dateFilter"; "required": false; "isSignal": true; }; "startView": { "alias": "startView"; "required": false; "isSignal": true; }; "startAt": { "alias": "startAt"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "rangeSeparator": { "alias": "rangeSeparator"; "required": false; "isSignal": true; }; "emptyStartLabel": { "alias": "emptyStartLabel"; "required": false; "isSignal": true; }; "emptyEndLabel": { "alias": "emptyEndLabel"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabledInput": { "alias": "disabled"; "required": false; "isSignal": true; }; "requiredInput": { "alias": "required"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "numberOfMonths": { "alias": "numberOfMonths"; "required": false; "isSignal": true; }; "presets": { "alias": "presets"; "required": false; "isSignal": true; }; "showClear": { "alias": "showClear"; "required": false; "isSignal": true; }; "minRangeLength": { "alias": "minRangeLength"; "required": false; "isSignal": true; }; "maxRangeLength": { "alias": "maxRangeLength"; "required": false; "isSignal": true; }; "rangeBehavior": { "alias": "rangeBehavior"; "required": false; "isSignal": true; }; "rangeClickBehavior": { "alias": "rangeClickBehavior"; "required": false; "isSignal": true; }; "firstDayOfWeek": { "alias": "firstDayOfWeek"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "dateClass": { "alias": "dateClass"; "required": false; "isSignal": true; }; "cellTemplate": { "alias": "cellTemplate"; "required": false; "isSignal": true; }; "showActions": { "alias": "showActions"; "required": false; "isSignal": true; }; "showTime": { "alias": "showTime"; "required": false; "isSignal": true; }; "timeFormat": { "alias": "timeFormat"; "required": false; "isSignal": true; }; "showSeconds": { "alias": "showSeconds"; "required": false; "isSignal": true; }; "hourStep": { "alias": "hourStep"; "required": false; "isSignal": true; }; "minuteStep": { "alias": "minuteStep"; "required": false; "isSignal": true; }; "secondStep": { "alias": "secondStep"; "required": false; "isSignal": true; }; "todayLabel": { "alias": "todayLabel"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "cancelLabel": { "alias": "cancelLabel"; "required": false; "isSignal": true; }; "applyLabel": { "alias": "applyLabel"; "required": false; "isSignal": true; }; "panelClass": { "alias": "panelClass"; "required": false; "isSignal": true; }; "scrollStrategy": { "alias": "scrollStrategy"; "required": false; "isSignal": true; }; "offset": { "alias": "offset"; "required": false; "isSignal": true; }; "clearAriaLabel": { "alias": "clearAriaLabel"; "required": false; "isSignal": true; }; "errorStateMatcher": { "alias": "errorStateMatcher"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "ariaLabelledby": { "alias": "aria-labelledby"; "required": false; "isSignal": true; }; "userAriaDescribedByInput": { "alias": "aria-describedby"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "open": "openChange"; "opened": "opened"; "closed": "closed"; "rangeChange": "rangeChange"; "presetSelected": "presetSelected"; }, never, ["[slot=trigger-icon]"], true, never>;
310
+ }
311
+
312
+ export { DateRangePickerComponent };
313
+ export type { DateRangePickerChangeEvent, DateRangePickerChangeSource, DateRangePickerCloseReason, DateRangePickerMonths, DateRangePickerOpenedEvent, DateRangePickerVariant, DateRangePreset };