forty-cdk 0.2.0 → 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 (220) hide show
  1. package/accordion/README.md +122 -0
  2. package/aspect-ratio/README.md +76 -0
  3. package/avatar/README.md +100 -0
  4. package/breadcrumbs/README.md +49 -0
  5. package/breakpoints/README.md +81 -0
  6. package/button/README.md +49 -0
  7. package/calendar/README.md +458 -0
  8. package/carousel/README.md +358 -0
  9. package/checkbox/README.md +146 -0
  10. package/combobox/README.md +535 -0
  11. package/context-menu/README.md +139 -0
  12. package/date-field/README.md +184 -0
  13. package/date-picker/README.md +338 -0
  14. package/dialog/README.md +388 -0
  15. package/disclosure/README.md +114 -0
  16. package/drag-drop/README.md +359 -0
  17. package/drawer/README.md +560 -0
  18. package/dropdown-menu/README.md +176 -0
  19. package/fesm2022/forty-cdk-accordion.mjs +348 -0
  20. package/fesm2022/forty-cdk-accordion.mjs.map +1 -0
  21. package/fesm2022/forty-cdk-aspect-ratio.mjs +74 -0
  22. package/fesm2022/forty-cdk-aspect-ratio.mjs.map +1 -0
  23. package/fesm2022/forty-cdk-avatar.mjs +308 -0
  24. package/fesm2022/forty-cdk-avatar.mjs.map +1 -0
  25. package/fesm2022/forty-cdk-breadcrumbs.mjs +125 -0
  26. package/fesm2022/forty-cdk-breadcrumbs.mjs.map +1 -0
  27. package/fesm2022/forty-cdk-breakpoints.mjs +117 -0
  28. package/fesm2022/forty-cdk-breakpoints.mjs.map +1 -0
  29. package/fesm2022/forty-cdk-button.mjs +134 -0
  30. package/fesm2022/forty-cdk-button.mjs.map +1 -0
  31. package/fesm2022/forty-cdk-calendar.mjs +2034 -0
  32. package/fesm2022/forty-cdk-calendar.mjs.map +1 -0
  33. package/fesm2022/forty-cdk-carousel.mjs +968 -0
  34. package/fesm2022/forty-cdk-carousel.mjs.map +1 -0
  35. package/fesm2022/forty-cdk-checkbox.mjs +226 -0
  36. package/fesm2022/forty-cdk-checkbox.mjs.map +1 -0
  37. package/fesm2022/forty-cdk-combobox.mjs +2596 -0
  38. package/fesm2022/forty-cdk-combobox.mjs.map +1 -0
  39. package/fesm2022/forty-cdk-context-menu.mjs +413 -0
  40. package/fesm2022/forty-cdk-context-menu.mjs.map +1 -0
  41. package/fesm2022/forty-cdk-core.mjs +9022 -0
  42. package/fesm2022/forty-cdk-core.mjs.map +1 -0
  43. package/fesm2022/forty-cdk-date-field.mjs +744 -0
  44. package/fesm2022/forty-cdk-date-field.mjs.map +1 -0
  45. package/fesm2022/forty-cdk-date-picker.mjs +1011 -0
  46. package/fesm2022/forty-cdk-date-picker.mjs.map +1 -0
  47. package/fesm2022/forty-cdk-dialog.mjs +707 -0
  48. package/fesm2022/forty-cdk-dialog.mjs.map +1 -0
  49. package/fesm2022/forty-cdk-disclosure.mjs +190 -0
  50. package/fesm2022/forty-cdk-disclosure.mjs.map +1 -0
  51. package/fesm2022/forty-cdk-drag-drop.mjs +1180 -0
  52. package/fesm2022/forty-cdk-drag-drop.mjs.map +1 -0
  53. package/fesm2022/forty-cdk-drawer.mjs +1641 -0
  54. package/fesm2022/forty-cdk-drawer.mjs.map +1 -0
  55. package/fesm2022/forty-cdk-dropdown-menu.mjs +350 -0
  56. package/fesm2022/forty-cdk-dropdown-menu.mjs.map +1 -0
  57. package/fesm2022/forty-cdk-field.mjs +425 -0
  58. package/fesm2022/forty-cdk-field.mjs.map +1 -0
  59. package/fesm2022/forty-cdk-fieldset.mjs +164 -0
  60. package/fesm2022/forty-cdk-fieldset.mjs.map +1 -0
  61. package/fesm2022/forty-cdk-file-upload.mjs +221 -0
  62. package/fesm2022/forty-cdk-file-upload.mjs.map +1 -0
  63. package/fesm2022/forty-cdk-hover-card.mjs +496 -0
  64. package/fesm2022/forty-cdk-hover-card.mjs.map +1 -0
  65. package/fesm2022/forty-cdk-input.mjs +274 -0
  66. package/fesm2022/forty-cdk-input.mjs.map +1 -0
  67. package/fesm2022/forty-cdk-internationalized-date.mjs +1 -1
  68. package/fesm2022/forty-cdk-internationalized-date.mjs.map +1 -1
  69. package/fesm2022/forty-cdk-listbox.mjs +1279 -0
  70. package/fesm2022/forty-cdk-listbox.mjs.map +1 -0
  71. package/fesm2022/forty-cdk-menu.mjs +1439 -0
  72. package/fesm2022/forty-cdk-menu.mjs.map +1 -0
  73. package/fesm2022/forty-cdk-menubar.mjs +787 -0
  74. package/fesm2022/forty-cdk-menubar.mjs.map +1 -0
  75. package/fesm2022/forty-cdk-meter.mjs +211 -0
  76. package/fesm2022/forty-cdk-meter.mjs.map +1 -0
  77. package/fesm2022/forty-cdk-navigation-menu.mjs +1145 -0
  78. package/fesm2022/forty-cdk-navigation-menu.mjs.map +1 -0
  79. package/fesm2022/forty-cdk-number-input.mjs +559 -0
  80. package/fesm2022/forty-cdk-number-input.mjs.map +1 -0
  81. package/fesm2022/forty-cdk-otp-input.mjs +527 -0
  82. package/fesm2022/forty-cdk-otp-input.mjs.map +1 -0
  83. package/fesm2022/forty-cdk-pagination.mjs +323 -0
  84. package/fesm2022/forty-cdk-pagination.mjs.map +1 -0
  85. package/fesm2022/forty-cdk-pane-resizer.mjs +297 -0
  86. package/fesm2022/forty-cdk-pane-resizer.mjs.map +1 -0
  87. package/fesm2022/forty-cdk-popover.mjs +698 -0
  88. package/fesm2022/forty-cdk-popover.mjs.map +1 -0
  89. package/fesm2022/forty-cdk-progress.mjs +226 -0
  90. package/fesm2022/forty-cdk-progress.mjs.map +1 -0
  91. package/fesm2022/forty-cdk-radio-group.mjs +378 -0
  92. package/fesm2022/forty-cdk-radio-group.mjs.map +1 -0
  93. package/fesm2022/forty-cdk-scroll-area.mjs +640 -0
  94. package/fesm2022/forty-cdk-scroll-area.mjs.map +1 -0
  95. package/fesm2022/forty-cdk-search.mjs +205 -0
  96. package/fesm2022/forty-cdk-search.mjs.map +1 -0
  97. package/fesm2022/forty-cdk-select.mjs +1661 -0
  98. package/fesm2022/forty-cdk-select.mjs.map +1 -0
  99. package/fesm2022/forty-cdk-separator.mjs +82 -0
  100. package/fesm2022/forty-cdk-separator.mjs.map +1 -0
  101. package/fesm2022/forty-cdk-signal-forms.mjs +97 -0
  102. package/fesm2022/forty-cdk-signal-forms.mjs.map +1 -0
  103. package/fesm2022/forty-cdk-slider.mjs +803 -0
  104. package/fesm2022/forty-cdk-slider.mjs.map +1 -0
  105. package/fesm2022/forty-cdk-stepper.mjs +886 -0
  106. package/fesm2022/forty-cdk-stepper.mjs.map +1 -0
  107. package/fesm2022/forty-cdk-switch.mjs +137 -0
  108. package/fesm2022/forty-cdk-switch.mjs.map +1 -0
  109. package/fesm2022/forty-cdk-table.mjs +1518 -0
  110. package/fesm2022/forty-cdk-table.mjs.map +1 -0
  111. package/fesm2022/forty-cdk-tabs.mjs +400 -0
  112. package/fesm2022/forty-cdk-tabs.mjs.map +1 -0
  113. package/fesm2022/forty-cdk-time-field.mjs +593 -0
  114. package/fesm2022/forty-cdk-time-field.mjs.map +1 -0
  115. package/fesm2022/forty-cdk-time-picker.mjs +1013 -0
  116. package/fesm2022/forty-cdk-time-picker.mjs.map +1 -0
  117. package/fesm2022/forty-cdk-toast.mjs +1153 -0
  118. package/fesm2022/forty-cdk-toast.mjs.map +1 -0
  119. package/fesm2022/forty-cdk-toggle.mjs +516 -0
  120. package/fesm2022/forty-cdk-toggle.mjs.map +1 -0
  121. package/fesm2022/forty-cdk-toolbar.mjs +374 -0
  122. package/fesm2022/forty-cdk-toolbar.mjs.map +1 -0
  123. package/fesm2022/forty-cdk-tooltip.mjs +672 -0
  124. package/fesm2022/forty-cdk-tooltip.mjs.map +1 -0
  125. package/fesm2022/forty-cdk-tree.mjs +2007 -0
  126. package/fesm2022/forty-cdk-tree.mjs.map +1 -0
  127. package/fesm2022/forty-cdk-virtualization.mjs +1 -1
  128. package/fesm2022/forty-cdk-virtualization.mjs.map +1 -1
  129. package/fesm2022/forty-cdk.mjs +0 -43310
  130. package/fesm2022/forty-cdk.mjs.map +1 -1
  131. package/field/README.md +97 -0
  132. package/fieldset/README.md +86 -0
  133. package/file-upload/README.md +73 -0
  134. package/hover-card/README.md +171 -0
  135. package/input/README.md +156 -0
  136. package/listbox/README.md +424 -0
  137. package/menu/README.md +181 -0
  138. package/menubar/README.md +140 -0
  139. package/meter/README.md +128 -0
  140. package/navigation-menu/README.md +253 -0
  141. package/number-input/README.md +171 -0
  142. package/otp-input/README.md +198 -0
  143. package/package.json +213 -1
  144. package/pagination/README.md +61 -0
  145. package/pane-resizer/README.md +136 -0
  146. package/popover/README.md +262 -0
  147. package/progress/README.md +115 -0
  148. package/radio-group/README.md +129 -0
  149. package/scroll-area/README.md +184 -0
  150. package/search/README.md +42 -0
  151. package/select/README.md +488 -0
  152. package/separator/README.md +84 -0
  153. package/signal-forms/README.md +72 -0
  154. package/slider/README.md +152 -0
  155. package/stepper/README.md +292 -0
  156. package/switch/README.md +116 -0
  157. package/table/README.md +769 -0
  158. package/tabs/README.md +130 -0
  159. package/time-field/README.md +157 -0
  160. package/time-picker/README.md +172 -0
  161. package/toast/README.md +398 -0
  162. package/toggle/README.md +224 -0
  163. package/toolbar/README.md +109 -0
  164. package/tooltip/README.md +274 -0
  165. package/tree/README.md +708 -0
  166. package/types/forty-cdk-accordion.d.ts +242 -0
  167. package/types/forty-cdk-aspect-ratio.d.ts +59 -0
  168. package/types/forty-cdk-avatar.d.ts +133 -0
  169. package/types/forty-cdk-breadcrumbs.d.ts +92 -0
  170. package/types/forty-cdk-breakpoints.d.ts +141 -0
  171. package/types/forty-cdk-button.d.ts +80 -0
  172. package/types/forty-cdk-calendar.d.ts +914 -0
  173. package/types/forty-cdk-carousel.d.ts +530 -0
  174. package/types/forty-cdk-checkbox.d.ts +141 -0
  175. package/types/forty-cdk-combobox.d.ts +1259 -0
  176. package/types/forty-cdk-context-menu.d.ts +313 -0
  177. package/types/forty-cdk-core.d.ts +5774 -0
  178. package/types/forty-cdk-date-field.d.ts +307 -0
  179. package/types/forty-cdk-date-picker.d.ts +622 -0
  180. package/types/forty-cdk-dialog.d.ts +546 -0
  181. package/types/forty-cdk-disclosure.d.ts +127 -0
  182. package/types/forty-cdk-drag-drop.d.ts +456 -0
  183. package/types/forty-cdk-drawer.d.ts +871 -0
  184. package/types/forty-cdk-dropdown-menu.d.ts +242 -0
  185. package/types/forty-cdk-field.d.ts +236 -0
  186. package/types/forty-cdk-fieldset.d.ts +119 -0
  187. package/types/forty-cdk-file-upload.d.ts +124 -0
  188. package/types/forty-cdk-hover-card.d.ts +320 -0
  189. package/types/forty-cdk-input.d.ts +169 -0
  190. package/types/forty-cdk-internationalized-date.d.ts +1 -1
  191. package/types/forty-cdk-listbox.d.ts +513 -0
  192. package/types/forty-cdk-menu.d.ts +629 -0
  193. package/types/forty-cdk-menubar.d.ts +451 -0
  194. package/types/forty-cdk-meter.d.ts +122 -0
  195. package/types/forty-cdk-navigation-menu.d.ts +514 -0
  196. package/types/forty-cdk-number-input.d.ts +319 -0
  197. package/types/forty-cdk-otp-input.d.ts +248 -0
  198. package/types/forty-cdk-pagination.d.ts +214 -0
  199. package/types/forty-cdk-pane-resizer.d.ts +145 -0
  200. package/types/forty-cdk-popover.d.ts +509 -0
  201. package/types/forty-cdk-progress.d.ts +143 -0
  202. package/types/forty-cdk-radio-group.d.ts +222 -0
  203. package/types/forty-cdk-scroll-area.d.ts +258 -0
  204. package/types/forty-cdk-search.d.ts +142 -0
  205. package/types/forty-cdk-select.d.ts +899 -0
  206. package/types/forty-cdk-separator.d.ts +59 -0
  207. package/types/forty-cdk-signal-forms.d.ts +58 -0
  208. package/types/forty-cdk-slider.d.ts +379 -0
  209. package/types/forty-cdk-stepper.d.ts +650 -0
  210. package/types/forty-cdk-switch.d.ts +87 -0
  211. package/types/forty-cdk-table.d.ts +723 -0
  212. package/types/forty-cdk-tabs.d.ts +235 -0
  213. package/types/forty-cdk-time-field.d.ts +307 -0
  214. package/types/forty-cdk-time-picker.d.ts +578 -0
  215. package/types/forty-cdk-toast.d.ts +598 -0
  216. package/types/forty-cdk-toggle.d.ts +310 -0
  217. package/types/forty-cdk-toolbar.d.ts +217 -0
  218. package/types/forty-cdk-tooltip.d.ts +436 -0
  219. package/types/forty-cdk-tree.d.ts +688 -0
  220. package/types/forty-cdk.d.ts +1 -19743
@@ -0,0 +1,307 @@
1
+ import * as forty_cdk_core from 'forty-cdk/core';
2
+ import { FieldSegment, SegmentEditorContext, SegmentHandle, FormUiControlBase, DateAdapter, SegmentType, WritingDirection, RovingTabindex, ForDateTimeSegmentBase, ForDateTimeLiteralBase } from 'forty-cdk/core';
3
+ export { DateSegmentType, SegmentType as DateTimeSegmentType } from 'forty-cdk/core';
4
+ import * as _angular_core from '@angular/core';
5
+ import { InjectionToken, Provider } from '@angular/core';
6
+ import { FormValueControl } from '@angular/forms/signals';
7
+
8
+ /** Date-time precision of a date field; `'day'` keeps it date-only. */
9
+ type FieldGranularity = 'day' | 'hour' | 'minute' | 'second';
10
+
11
+ /**
12
+ * A rendered segment descriptor exposed by `ForDateField.segments()` for the
13
+ * consumer's `@for`. Covers both editable spinbutton segments and the
14
+ * decorative literal separators between them.
15
+ */
16
+ type DateFieldSegment = FieldSegment;
17
+ /** Handle a `[forDateFieldSegment]` registers with the root for focus moves. */
18
+ type ForDateFieldSegmentHandle = SegmentHandle;
19
+ /**
20
+ * The coordination surface `ForDateField` exposes to its segment / literal
21
+ * children. Segments read the reactive per-part accessors for their ARIA and
22
+ * display bindings, and call the behavior methods to type, step, clear, and
23
+ * move focus — all canonical state lives on the root, never on the segment.
24
+ *
25
+ * It is the shared {@link SegmentEditorContext} backing both date and time
26
+ * fields; `ForDateField` satisfies it by forwarding to its `SegmentEditor`.
27
+ */
28
+ type ForDateFieldContext = SegmentEditorContext;
29
+ /**
30
+ * Injection token for the {@link ForDateFieldContext} provided by
31
+ * `[forDateField]`. Segment and literal children inject it to coordinate with
32
+ * the root.
33
+ */
34
+ declare const FOR_DATE_FIELD_CONTEXT: InjectionToken<SegmentEditorContext>;
35
+
36
+ /**
37
+ * Headless, segmented, spin-editable date input — the keyboard-first
38
+ * counterpart to `ForCalendar`. There is no single WAI-ARIA APG pattern for a
39
+ * date field; it is a composition of
40
+ * [Spinbuttons](https://www.w3.org/WAI/ARIA/apg/patterns/spinbutton/) inside a
41
+ * labelled `role="group"`.
42
+ * Each day / month / year part is an independent `role="spinbutton"` segment
43
+ * (`[forDateFieldSegment]`) so entry is unambiguous and locale-correct — no
44
+ * free-text parsing, no `03/04`-is-it-March-4th guesswork.
45
+ *
46
+ * `ForDateField` is the root: it owns the entered parts, composes them into the
47
+ * adapter's date type, resolves the locale-ordered segment list, and exposes
48
+ * everything to the segment / literal children through
49
+ * {@link FOR_DATE_FIELD_CONTEXT}. The spin-button engine (digit typing, stepping,
50
+ * Home/End, RTL focus moves, the segment registry) lives in the shared
51
+ * `_internal/datetime` {@link SegmentEditor}; the root supplies only the
52
+ * date-specific bits (segment bounds, the today-seed, the month-name
53
+ * `aria-valuetext`, and the create/clamp compose). All date math goes through
54
+ * the pluggable {@link DateAdapter} shared with `ForCalendar`
55
+ * (`provideInternationalizedDateAdapter()` / `provideNativeDateAdapter()`), so
56
+ * the field hard-depends on no date library.
57
+ *
58
+ * Set `granularity` coarser-than-a-day off (`'hour'` / `'minute'` / `'second'`)
59
+ * to make it a **date-time field**: time segments (hour / minute / second and,
60
+ * in 12-hour mode, an AM·PM `dayPeriod`) are appended after the date segments in
61
+ * the same `role="group"`, sharing the one roving tab stop. This needs a
62
+ * time-capable adapter (`provideNativeDateAdapter()` /
63
+ * `provideInternationalizedDateTimeAdapter()`); `granularity = 'day'` (default)
64
+ * is unchanged and works with any adapter.
65
+ *
66
+ * It implements `FormValueControl<D | null>` from `@angular/forms/signals`, so
67
+ * it auto-wires with `[formField]` and auto-associates inside a `[forField]`.
68
+ * The value stays `null` until every visible segment is filled.
69
+ *
70
+ * @typeParam D The adapter's immutable date (or, with `granularity > 'day'`,
71
+ * date-time) type.
72
+ *
73
+ * Note: the date bounds are named `minDate` / `maxDate`, not `min` / `max` —
74
+ * the latter are reserved `FormUiControl` members typed `number | undefined`
75
+ * for numeric validators, so a date-typed `min` / `max` would break the
76
+ * `FormValueControl` contract.
77
+ *
78
+ * @example
79
+ * ```html
80
+ * <div forDateField [(value)]="date" [minDate]="min" [maxDate]="max" name="dob"
81
+ * [ariaLabel]="'Date of birth'" #field="forDateField">
82
+ * @for (seg of field.segments(); track seg.id) {
83
+ * @if (seg.isLiteral) {
84
+ * <span forDateFieldLiteral>{{ seg.text }}</span>
85
+ * } @else {
86
+ * <span forDateFieldSegment [segment]="seg.type!">{{ seg.text }}</span>
87
+ * }
88
+ * }
89
+ * </div>
90
+ * ```
91
+ */
92
+ declare class ForDateField<D> extends FormUiControlBase implements FormValueControl<D | null>, ForDateFieldContext {
93
+ #private;
94
+ /** The active date adapter, resolved from `FOR_DATE_ADAPTER` (shared with `ForCalendar`). */
95
+ readonly adapter: DateAdapter<D>;
96
+ /**
97
+ * Two-way bindable entered date, or `null` while any segment is empty.
98
+ * Required by `FormValueControl<D | null>`. The `model()` change emitter
99
+ * (`(valueChange)`) fires only when the field itself composes a new value,
100
+ * never on consumer writes via `[(value)]`.
101
+ */
102
+ readonly value: _angular_core.ModelSignal<D | null>;
103
+ /**
104
+ * Minimum selectable date (inclusive). A composed value below it is clamped
105
+ * up. The comparison is by the **full instant** (`DateAdapter.compare`), so at
106
+ * `granularity > 'day'` a non-midnight `minDate` clamps the time too, and the
107
+ * result is identical across time-capable adapters. Named `minDate` (not
108
+ * `min`) because `FormUiControl.min` is reserved for a numeric validator bound
109
+ * by `[formField]`.
110
+ */
111
+ readonly minDate: _angular_core.InputSignal<D | null>;
112
+ /**
113
+ * Maximum selectable date (inclusive). A composed value above it is clamped
114
+ * down. Compared by the **full instant** like {@link minDate}. Named `maxDate`
115
+ * (not `max`) for the same reason as {@link minDate}.
116
+ */
117
+ readonly maxDate: _angular_core.InputSignal<D | null>;
118
+ /**
119
+ * Date-time precision. `'day'` (default, **non-breaking**) is a pure date
120
+ * field. `'hour'` / `'minute'` / `'second'` append the matching time segments
121
+ * and the value carries a time component — which requires a time-capable
122
+ * adapter (`provideNativeDateAdapter()` /
123
+ * `provideInternationalizedDateTimeAdapter()`).
124
+ */
125
+ readonly granularity: _angular_core.InputSignal<FieldGranularity>;
126
+ /**
127
+ * 12- or 24-hour cycle for the time segments. When `null` (default) it is
128
+ * derived from the locale. A 12-hour cycle adds the AM/PM `dayPeriod` segment.
129
+ * Only meaningful when `granularity > 'day'`.
130
+ */
131
+ readonly hourCycle: _angular_core.InputSignal<12 | 24 | null>;
132
+ /** BCP 47 locale driving segment order and separators. Defaults to the runtime locale. */
133
+ readonly locale: _angular_core.InputSignal<string | null>;
134
+ /**
135
+ * Per-segment placeholder shown while empty. Unspecified parts fall back to a
136
+ * letter-repeat default (`dd` / `mm` / `yyyy` / `hh` / `mm` / `ss` / `--`).
137
+ */
138
+ readonly placeholder: _angular_core.InputSignal<Partial<Record<SegmentType, string>>>;
139
+ /** Accessible name for the field group. Emits no `aria-label` while `null`. */
140
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
141
+ /**
142
+ * Writing direction. When unset (default `null`), the inherited ambient
143
+ * direction is resolved from the nearest ancestor carrying a `dir` attribute
144
+ * (or `<html dir>`), defaulting to `'ltr'`. An explicit `[dir]` always wins.
145
+ * The resolved value is reflected to the host `dir` attribute and mirrors the
146
+ * ArrowLeft / ArrowRight segment navigation in RTL.
147
+ */
148
+ readonly _dirInput: _angular_core.InputSignal<WritingDirection | null>;
149
+ readonly dir: _angular_core.Signal<WritingDirection>;
150
+ /** Shared roving-tabindex tracker: exactly one segment owns `tabindex=0`. */
151
+ readonly roving: RovingTabindex;
152
+ /**
153
+ * The ordered, locale-derived segments (editable + literals) to render. Each
154
+ * entry carries the text to display: the formatted value when filled, the
155
+ * placeholder while empty, or the literal separator.
156
+ */
157
+ readonly segments: _angular_core.Signal<readonly forty_cdk_core.FieldSegment<SegmentType>[]>;
158
+ constructor();
159
+ segmentValue(type: SegmentType): number | null;
160
+ segmentMin(type: SegmentType): number;
161
+ segmentMax(type: SegmentType): number;
162
+ segmentValueText(type: SegmentType): string | null;
163
+ segmentDisplayText(type: SegmentType): string;
164
+ isSegmentEmpty(type: SegmentType): boolean;
165
+ isFirstSegmentType(type: SegmentType): boolean;
166
+ registerSegment(handle: SegmentHandle): void;
167
+ unregisterSegment(handle: SegmentHandle): void;
168
+ focusSegment(type: SegmentType): void;
169
+ typeDigit(type: SegmentType, digit: number): void;
170
+ step(type: SegmentType, delta: number): void;
171
+ goToBound(type: SegmentType, bound: 'min' | 'max'): void;
172
+ setDayPeriod(period: 'am' | 'pm'): void;
173
+ clear(type: SegmentType): void;
174
+ focusSibling(type: SegmentType, step: -1 | 1): void;
175
+ protected onFocusOut(event: FocusEvent): void;
176
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForDateField<any>, never>;
177
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForDateField<any>, "[forDateField]", ["forDateField"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "granularity": { "alias": "granularity"; "required": false; "isSignal": true; }; "hourCycle": { "alias": "hourCycle"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "_dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
178
+ }
179
+
180
+ /**
181
+ * One editable spinbutton segment of a `[forDateField]` — the day, month, or
182
+ * year part (and, at `granularity > 'day'`, hour / minute / second / the AM·PM
183
+ * `dayPeriod`). Apply on a focusable element (typically a `<span>`); the shared
184
+ * {@link ForDateTimeSegmentBase} adds `role="spinbutton"`, the `aria-valuemin` /
185
+ * `aria-valuemax` / `aria-valuenow` / `aria-valuetext` reflection, the roving
186
+ * tabindex, and the full keyboard map:
187
+ *
188
+ * - **digits** fill a numeric segment and auto-advance to the next when full;
189
+ * - **a / p** set the period on the AM/PM (`dayPeriod`) segment;
190
+ * - **ArrowUp / ArrowDown** step the value (day / month / hour / minute / second
191
+ * wrap, year clamps, dayPeriod toggles);
192
+ * - **ArrowLeft / ArrowRight** move between segments (mirrored under RTL, no wrap);
193
+ * - **Home / End** jump to the segment minimum / maximum (dayPeriod → AM / PM);
194
+ * - **Backspace / Delete** clear a numeric segment.
195
+ *
196
+ * All state lives on the root `ForDateField`; the segment only reads it and
197
+ * forwards intents. The rendered text comes from the root's `segments()` list
198
+ * (`{{ seg.text }}`), so this element carries behavior and ARIA, not content.
199
+ */
200
+ declare class ForDateFieldSegment extends ForDateTimeSegmentBase {
201
+ #private;
202
+ protected readonly ctx: forty_cdk_core.SegmentEditorContext;
203
+ /** Which date or time part this segment edits. */
204
+ readonly segment: _angular_core.InputSignal<SegmentType>;
205
+ /**
206
+ * Accessible name for this segment. Falls back to the scope's localized
207
+ * default label for the part (via `provideForDateFieldDefaults`), which in
208
+ * turn defaults to the part name — and `'AM/PM'` for the `dayPeriod` segment.
209
+ */
210
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
211
+ protected readonly resolvedAriaLabel: _angular_core.Signal<string>;
212
+ constructor();
213
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForDateFieldSegment, never>;
214
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForDateFieldSegment, "[forDateFieldSegment]", ["forDateFieldSegment"], { "segment": { "alias": "segment"; "required": true; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
215
+ }
216
+
217
+ /**
218
+ * A decorative separator (`/`, `.`, `-`) between the editable segments of a
219
+ * `[forDateField]`. Apply on the element rendering the literal text; it is
220
+ * marked `aria-hidden` and stays out of the tab order, so assistive tech reads
221
+ * only the spinbutton segments. The separator characters come from the root's
222
+ * locale-ordered `segments()` list (`{{ seg.text }}`).
223
+ */
224
+ declare class ForDateFieldLiteral extends ForDateTimeLiteralBase {
225
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForDateFieldLiteral, never>;
226
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForDateFieldLiteral, "[forDateFieldLiteral]", ["forDateFieldLiteral"], {}, {}, never, never, true, never>;
227
+ }
228
+
229
+ /**
230
+ * Accessible name announced for each editable segment, keyed by its part type.
231
+ * Override individually (or wholesale) for localization; any key left unset
232
+ * falls back to the library default for that part — so overriding just
233
+ * `dayPeriod` keeps the English labels for the rest.
234
+ */
235
+ type ForDateFieldSegmentLabels = Partial<Record<SegmentType, string>>;
236
+ /**
237
+ * Defaults inherited by descendant `[forDateField]` controls in the
238
+ * surrounding injector scope. Configure with `provideForDateFieldDefaults` at
239
+ * the application root or in any component's `providers`; partial overrides
240
+ * merge with the parent scope.
241
+ */
242
+ interface ForDateFieldDefaults {
243
+ /**
244
+ * Accessible value announced (via `aria-valuetext`) for an empty editable
245
+ * segment, so screen readers report the segment's empty state instead of
246
+ * silence. Override for localization.
247
+ */
248
+ emptySegmentText: string;
249
+ /**
250
+ * Accessible names announced for each editable segment (via `aria-label`),
251
+ * keyed by part type, used when a segment has no explicit `ariaLabel`. The
252
+ * AM/PM `dayPeriod` defaults to `'AM/PM'` instead of leaking the raw token.
253
+ * Override for localization; unset keys keep the library default.
254
+ */
255
+ segmentLabels: ForDateFieldSegmentLabels;
256
+ }
257
+ /**
258
+ * Library default accessible name for each editable segment. Used when neither
259
+ * the segment's explicit `ariaLabel` nor a `provideForDateFieldDefaults`
260
+ * override supplies one for that part.
261
+ */
262
+ declare const DEFAULT_DATE_FIELD_SEGMENT_LABELS: Readonly<Record<SegmentType, string>>;
263
+ /** Token holding the resolved date-field defaults for the current scope. */
264
+ declare const FOR_DATE_FIELD_DEFAULTS: _angular_core.InjectionToken<ForDateFieldDefaults>;
265
+ /**
266
+ * Configures forty-cdk date-field defaults for this injector scope. Partial
267
+ * overrides inherit unspecified keys from the parent scope (or library
268
+ * defaults at the root).
269
+ */
270
+ declare function provideForDateFieldDefaults(defaults?: Partial<ForDateFieldDefaults>): Provider[];
271
+
272
+ /**
273
+ * Exact public names of every `ForDateField` input, its models included. Spread it into the
274
+ * `inputs` array of a `hostDirectives` entry so a wrapper component re-exposes the
275
+ * primitive's full surface — the Signal Forms members `[formField]` binds among them —
276
+ * without hand-maintaining the list. Always spread into an inline object literal as shown
277
+ * below: the literal is what keeps the entry statically analyzable for consumers compiling
278
+ * against the published package. An anti-drift spec fails when this list no longer matches
279
+ * the directive's actual API. See `docs/wrapping-form-primitives.md` for both supported
280
+ * wrapping patterns.
281
+ *
282
+ * @example
283
+ * ```ts
284
+ * @Component({
285
+ * selector: 'div[myDateField]',
286
+ * template: '',
287
+ * hostDirectives: [
288
+ * {
289
+ * directive: ForDateField,
290
+ * inputs: [...FOR_DATE_FIELD_HOST_DIRECTIVE_INPUTS],
291
+ * outputs: [...FOR_DATE_FIELD_HOST_DIRECTIVE_OUTPUTS],
292
+ * },
293
+ * ],
294
+ * })
295
+ * export class MyDateField {}
296
+ * ```
297
+ */
298
+ declare const FOR_DATE_FIELD_HOST_DIRECTIVE_INPUTS: readonly ["value", "ariaLabel", "dir", "dirty", "disabled", "errors", "granularity", "hourCycle", "invalid", "locale", "maxDate", "minDate", "name", "pending", "placeholder", "readonly", "required", "touched"];
299
+ /**
300
+ * Exact public names of every `ForDateField` output, the Signal Forms `touch` output
301
+ * included. Spread it into the `outputs` array of the same `hostDirectives` entry as
302
+ * {@link FOR_DATE_FIELD_HOST_DIRECTIVE_INPUTS}.
303
+ */
304
+ declare const FOR_DATE_FIELD_HOST_DIRECTIVE_OUTPUTS: readonly ["valueChange", "touchedChange", "touch"];
305
+
306
+ export { DEFAULT_DATE_FIELD_SEGMENT_LABELS, FOR_DATE_FIELD_CONTEXT, FOR_DATE_FIELD_DEFAULTS, FOR_DATE_FIELD_HOST_DIRECTIVE_INPUTS, FOR_DATE_FIELD_HOST_DIRECTIVE_OUTPUTS, ForDateField, ForDateFieldLiteral, ForDateFieldSegment, provideForDateFieldDefaults };
307
+ export type { DateFieldSegment, FieldGranularity, ForDateFieldContext, ForDateFieldDefaults, ForDateFieldSegmentHandle, ForDateFieldSegmentLabels };