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.
- package/accordion/README.md +122 -0
- package/aspect-ratio/README.md +76 -0
- package/avatar/README.md +100 -0
- package/breadcrumbs/README.md +49 -0
- package/breakpoints/README.md +81 -0
- package/button/README.md +49 -0
- package/calendar/README.md +458 -0
- package/carousel/README.md +358 -0
- package/checkbox/README.md +146 -0
- package/combobox/README.md +535 -0
- package/context-menu/README.md +139 -0
- package/date-field/README.md +184 -0
- package/date-picker/README.md +338 -0
- package/dialog/README.md +388 -0
- package/disclosure/README.md +114 -0
- package/drag-drop/README.md +359 -0
- package/drawer/README.md +560 -0
- package/dropdown-menu/README.md +176 -0
- package/fesm2022/forty-cdk-accordion.mjs +348 -0
- package/fesm2022/forty-cdk-accordion.mjs.map +1 -0
- package/fesm2022/forty-cdk-aspect-ratio.mjs +74 -0
- package/fesm2022/forty-cdk-aspect-ratio.mjs.map +1 -0
- package/fesm2022/forty-cdk-avatar.mjs +308 -0
- package/fesm2022/forty-cdk-avatar.mjs.map +1 -0
- package/fesm2022/forty-cdk-breadcrumbs.mjs +125 -0
- package/fesm2022/forty-cdk-breadcrumbs.mjs.map +1 -0
- package/fesm2022/forty-cdk-breakpoints.mjs +117 -0
- package/fesm2022/forty-cdk-breakpoints.mjs.map +1 -0
- package/fesm2022/forty-cdk-button.mjs +134 -0
- package/fesm2022/forty-cdk-button.mjs.map +1 -0
- package/fesm2022/forty-cdk-calendar.mjs +2034 -0
- package/fesm2022/forty-cdk-calendar.mjs.map +1 -0
- package/fesm2022/forty-cdk-carousel.mjs +968 -0
- package/fesm2022/forty-cdk-carousel.mjs.map +1 -0
- package/fesm2022/forty-cdk-checkbox.mjs +226 -0
- package/fesm2022/forty-cdk-checkbox.mjs.map +1 -0
- package/fesm2022/forty-cdk-combobox.mjs +2596 -0
- package/fesm2022/forty-cdk-combobox.mjs.map +1 -0
- package/fesm2022/forty-cdk-context-menu.mjs +413 -0
- package/fesm2022/forty-cdk-context-menu.mjs.map +1 -0
- package/fesm2022/forty-cdk-core.mjs +9022 -0
- package/fesm2022/forty-cdk-core.mjs.map +1 -0
- package/fesm2022/forty-cdk-date-field.mjs +744 -0
- package/fesm2022/forty-cdk-date-field.mjs.map +1 -0
- package/fesm2022/forty-cdk-date-picker.mjs +1011 -0
- package/fesm2022/forty-cdk-date-picker.mjs.map +1 -0
- package/fesm2022/forty-cdk-dialog.mjs +707 -0
- package/fesm2022/forty-cdk-dialog.mjs.map +1 -0
- package/fesm2022/forty-cdk-disclosure.mjs +190 -0
- package/fesm2022/forty-cdk-disclosure.mjs.map +1 -0
- package/fesm2022/forty-cdk-drag-drop.mjs +1180 -0
- package/fesm2022/forty-cdk-drag-drop.mjs.map +1 -0
- package/fesm2022/forty-cdk-drawer.mjs +1641 -0
- package/fesm2022/forty-cdk-drawer.mjs.map +1 -0
- package/fesm2022/forty-cdk-dropdown-menu.mjs +350 -0
- package/fesm2022/forty-cdk-dropdown-menu.mjs.map +1 -0
- package/fesm2022/forty-cdk-field.mjs +425 -0
- package/fesm2022/forty-cdk-field.mjs.map +1 -0
- package/fesm2022/forty-cdk-fieldset.mjs +164 -0
- package/fesm2022/forty-cdk-fieldset.mjs.map +1 -0
- package/fesm2022/forty-cdk-file-upload.mjs +221 -0
- package/fesm2022/forty-cdk-file-upload.mjs.map +1 -0
- package/fesm2022/forty-cdk-hover-card.mjs +496 -0
- package/fesm2022/forty-cdk-hover-card.mjs.map +1 -0
- package/fesm2022/forty-cdk-input.mjs +274 -0
- package/fesm2022/forty-cdk-input.mjs.map +1 -0
- package/fesm2022/forty-cdk-internationalized-date.mjs +1 -1
- package/fesm2022/forty-cdk-internationalized-date.mjs.map +1 -1
- package/fesm2022/forty-cdk-listbox.mjs +1279 -0
- package/fesm2022/forty-cdk-listbox.mjs.map +1 -0
- package/fesm2022/forty-cdk-menu.mjs +1439 -0
- package/fesm2022/forty-cdk-menu.mjs.map +1 -0
- package/fesm2022/forty-cdk-menubar.mjs +787 -0
- package/fesm2022/forty-cdk-menubar.mjs.map +1 -0
- package/fesm2022/forty-cdk-meter.mjs +211 -0
- package/fesm2022/forty-cdk-meter.mjs.map +1 -0
- package/fesm2022/forty-cdk-navigation-menu.mjs +1145 -0
- package/fesm2022/forty-cdk-navigation-menu.mjs.map +1 -0
- package/fesm2022/forty-cdk-number-input.mjs +559 -0
- package/fesm2022/forty-cdk-number-input.mjs.map +1 -0
- package/fesm2022/forty-cdk-otp-input.mjs +527 -0
- package/fesm2022/forty-cdk-otp-input.mjs.map +1 -0
- package/fesm2022/forty-cdk-pagination.mjs +323 -0
- package/fesm2022/forty-cdk-pagination.mjs.map +1 -0
- package/fesm2022/forty-cdk-pane-resizer.mjs +297 -0
- package/fesm2022/forty-cdk-pane-resizer.mjs.map +1 -0
- package/fesm2022/forty-cdk-popover.mjs +698 -0
- package/fesm2022/forty-cdk-popover.mjs.map +1 -0
- package/fesm2022/forty-cdk-progress.mjs +226 -0
- package/fesm2022/forty-cdk-progress.mjs.map +1 -0
- package/fesm2022/forty-cdk-radio-group.mjs +378 -0
- package/fesm2022/forty-cdk-radio-group.mjs.map +1 -0
- package/fesm2022/forty-cdk-scroll-area.mjs +640 -0
- package/fesm2022/forty-cdk-scroll-area.mjs.map +1 -0
- package/fesm2022/forty-cdk-search.mjs +205 -0
- package/fesm2022/forty-cdk-search.mjs.map +1 -0
- package/fesm2022/forty-cdk-select.mjs +1661 -0
- package/fesm2022/forty-cdk-select.mjs.map +1 -0
- package/fesm2022/forty-cdk-separator.mjs +82 -0
- package/fesm2022/forty-cdk-separator.mjs.map +1 -0
- package/fesm2022/forty-cdk-signal-forms.mjs +97 -0
- package/fesm2022/forty-cdk-signal-forms.mjs.map +1 -0
- package/fesm2022/forty-cdk-slider.mjs +803 -0
- package/fesm2022/forty-cdk-slider.mjs.map +1 -0
- package/fesm2022/forty-cdk-stepper.mjs +886 -0
- package/fesm2022/forty-cdk-stepper.mjs.map +1 -0
- package/fesm2022/forty-cdk-switch.mjs +137 -0
- package/fesm2022/forty-cdk-switch.mjs.map +1 -0
- package/fesm2022/forty-cdk-table.mjs +1518 -0
- package/fesm2022/forty-cdk-table.mjs.map +1 -0
- package/fesm2022/forty-cdk-tabs.mjs +400 -0
- package/fesm2022/forty-cdk-tabs.mjs.map +1 -0
- package/fesm2022/forty-cdk-time-field.mjs +593 -0
- package/fesm2022/forty-cdk-time-field.mjs.map +1 -0
- package/fesm2022/forty-cdk-time-picker.mjs +1013 -0
- package/fesm2022/forty-cdk-time-picker.mjs.map +1 -0
- package/fesm2022/forty-cdk-toast.mjs +1153 -0
- package/fesm2022/forty-cdk-toast.mjs.map +1 -0
- package/fesm2022/forty-cdk-toggle.mjs +516 -0
- package/fesm2022/forty-cdk-toggle.mjs.map +1 -0
- package/fesm2022/forty-cdk-toolbar.mjs +374 -0
- package/fesm2022/forty-cdk-toolbar.mjs.map +1 -0
- package/fesm2022/forty-cdk-tooltip.mjs +672 -0
- package/fesm2022/forty-cdk-tooltip.mjs.map +1 -0
- package/fesm2022/forty-cdk-tree.mjs +2007 -0
- package/fesm2022/forty-cdk-tree.mjs.map +1 -0
- package/fesm2022/forty-cdk-virtualization.mjs +1 -1
- package/fesm2022/forty-cdk-virtualization.mjs.map +1 -1
- package/fesm2022/forty-cdk.mjs +0 -43310
- package/fesm2022/forty-cdk.mjs.map +1 -1
- package/field/README.md +97 -0
- package/fieldset/README.md +86 -0
- package/file-upload/README.md +73 -0
- package/hover-card/README.md +171 -0
- package/input/README.md +156 -0
- package/listbox/README.md +424 -0
- package/menu/README.md +181 -0
- package/menubar/README.md +140 -0
- package/meter/README.md +128 -0
- package/navigation-menu/README.md +253 -0
- package/number-input/README.md +171 -0
- package/otp-input/README.md +198 -0
- package/package.json +213 -1
- package/pagination/README.md +61 -0
- package/pane-resizer/README.md +136 -0
- package/popover/README.md +262 -0
- package/progress/README.md +115 -0
- package/radio-group/README.md +129 -0
- package/scroll-area/README.md +184 -0
- package/search/README.md +42 -0
- package/select/README.md +488 -0
- package/separator/README.md +84 -0
- package/signal-forms/README.md +72 -0
- package/slider/README.md +152 -0
- package/stepper/README.md +292 -0
- package/switch/README.md +116 -0
- package/table/README.md +769 -0
- package/tabs/README.md +130 -0
- package/time-field/README.md +157 -0
- package/time-picker/README.md +172 -0
- package/toast/README.md +398 -0
- package/toggle/README.md +224 -0
- package/toolbar/README.md +109 -0
- package/tooltip/README.md +274 -0
- package/tree/README.md +708 -0
- package/types/forty-cdk-accordion.d.ts +242 -0
- package/types/forty-cdk-aspect-ratio.d.ts +59 -0
- package/types/forty-cdk-avatar.d.ts +133 -0
- package/types/forty-cdk-breadcrumbs.d.ts +92 -0
- package/types/forty-cdk-breakpoints.d.ts +141 -0
- package/types/forty-cdk-button.d.ts +80 -0
- package/types/forty-cdk-calendar.d.ts +914 -0
- package/types/forty-cdk-carousel.d.ts +530 -0
- package/types/forty-cdk-checkbox.d.ts +141 -0
- package/types/forty-cdk-combobox.d.ts +1259 -0
- package/types/forty-cdk-context-menu.d.ts +313 -0
- package/types/forty-cdk-core.d.ts +5774 -0
- package/types/forty-cdk-date-field.d.ts +307 -0
- package/types/forty-cdk-date-picker.d.ts +622 -0
- package/types/forty-cdk-dialog.d.ts +546 -0
- package/types/forty-cdk-disclosure.d.ts +127 -0
- package/types/forty-cdk-drag-drop.d.ts +456 -0
- package/types/forty-cdk-drawer.d.ts +871 -0
- package/types/forty-cdk-dropdown-menu.d.ts +242 -0
- package/types/forty-cdk-field.d.ts +236 -0
- package/types/forty-cdk-fieldset.d.ts +119 -0
- package/types/forty-cdk-file-upload.d.ts +124 -0
- package/types/forty-cdk-hover-card.d.ts +320 -0
- package/types/forty-cdk-input.d.ts +169 -0
- package/types/forty-cdk-internationalized-date.d.ts +1 -1
- package/types/forty-cdk-listbox.d.ts +513 -0
- package/types/forty-cdk-menu.d.ts +629 -0
- package/types/forty-cdk-menubar.d.ts +451 -0
- package/types/forty-cdk-meter.d.ts +122 -0
- package/types/forty-cdk-navigation-menu.d.ts +514 -0
- package/types/forty-cdk-number-input.d.ts +319 -0
- package/types/forty-cdk-otp-input.d.ts +248 -0
- package/types/forty-cdk-pagination.d.ts +214 -0
- package/types/forty-cdk-pane-resizer.d.ts +145 -0
- package/types/forty-cdk-popover.d.ts +509 -0
- package/types/forty-cdk-progress.d.ts +143 -0
- package/types/forty-cdk-radio-group.d.ts +222 -0
- package/types/forty-cdk-scroll-area.d.ts +258 -0
- package/types/forty-cdk-search.d.ts +142 -0
- package/types/forty-cdk-select.d.ts +899 -0
- package/types/forty-cdk-separator.d.ts +59 -0
- package/types/forty-cdk-signal-forms.d.ts +58 -0
- package/types/forty-cdk-slider.d.ts +379 -0
- package/types/forty-cdk-stepper.d.ts +650 -0
- package/types/forty-cdk-switch.d.ts +87 -0
- package/types/forty-cdk-table.d.ts +723 -0
- package/types/forty-cdk-tabs.d.ts +235 -0
- package/types/forty-cdk-time-field.d.ts +307 -0
- package/types/forty-cdk-time-picker.d.ts +578 -0
- package/types/forty-cdk-toast.d.ts +598 -0
- package/types/forty-cdk-toggle.d.ts +310 -0
- package/types/forty-cdk-toolbar.d.ts +217 -0
- package/types/forty-cdk-tooltip.d.ts +436 -0
- package/types/forty-cdk-tree.d.ts +688 -0
- 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 };
|