@lilydesignsystem/angular-date-time-picker 0.1.2 → 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.
- package/fesm2022/lilydesignsystem-angular-date-time-picker.mjs +1480 -1357
- package/fesm2022/lilydesignsystem-angular-date-time-picker.mjs.map +1 -1
- package/package.json +1 -1
- package/types/lilydesignsystem-angular-date-time-picker.d.ts +551 -401
- package/types/lilydesignsystem-angular-date-time-picker.d.ts.map +1 -1
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import { TemplateRef } from
|
|
3
|
-
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import { TemplateRef } from "@angular/core";
|
|
4
3
|
/**
|
|
5
4
|
* Default button glyph: U+1F4C5 CALENDAR, followed by U+FE0E VARIATION
|
|
6
5
|
* SELECTOR-15 to request text (monochrome) presentation.
|
|
@@ -13,7 +12,7 @@ import { TemplateRef } from '@angular/core';
|
|
|
13
12
|
* selector has no visual form at all, so a bare one is invisible in an
|
|
14
13
|
* editor and trivially lost to a careless edit.
|
|
15
14
|
*/
|
|
16
|
-
declare const CALENDAR = "
|
|
15
|
+
export declare const CALENDAR = "📅︎";
|
|
17
16
|
/** What the control collects. */
|
|
18
17
|
type DateTimeMode = "date" | "time" | "datetime";
|
|
19
18
|
/**
|
|
@@ -28,27 +27,27 @@ type DateTimeMode = "date" | "time" | "datetime";
|
|
|
28
27
|
* which has no such edge.
|
|
29
28
|
*/
|
|
30
29
|
type CivilDate = {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
year: number;
|
|
31
|
+
month: number;
|
|
32
|
+
day: number;
|
|
34
33
|
};
|
|
35
34
|
/** A wall-clock time, 24-hour, no seconds. */
|
|
36
35
|
type CivilTime = {
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
hour: number;
|
|
37
|
+
minute: number;
|
|
39
38
|
};
|
|
40
39
|
/** One quick-pick button in the dialog. */
|
|
41
40
|
type DateTimeShortcut = {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
41
|
+
/** Stable identifier, passed back on the `shortcut` output. */
|
|
42
|
+
id: string;
|
|
43
|
+
/** Visible button text. Consumer-supplied, so it localises. */
|
|
44
|
+
label: string;
|
|
45
|
+
/** Days from today. Mutually exclusive with `months` and `date`. */
|
|
46
|
+
days?: number;
|
|
47
|
+
/** Calendar months from today. */
|
|
48
|
+
months?: number;
|
|
49
|
+
/** An absolute ISO date, for shortcuts that are not relative. */
|
|
50
|
+
date?: string;
|
|
52
51
|
};
|
|
53
52
|
/**
|
|
54
53
|
* Every user-facing string the dialog needs.
|
|
@@ -65,80 +64,80 @@ type DateTimeShortcut = {
|
|
|
65
64
|
* avoid. The rest gate optional UI.
|
|
66
65
|
*/
|
|
67
66
|
type DateTimePickerLabels = {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
67
|
+
/** Accessible name for the previous-year button. */
|
|
68
|
+
previousYear: string;
|
|
69
|
+
/** Accessible name for the previous-month button. */
|
|
70
|
+
previousMonth: string;
|
|
71
|
+
/** Accessible name for the previous-week button. */
|
|
72
|
+
previousWeek: string;
|
|
73
|
+
/** Accessible name for the previous-day button. */
|
|
74
|
+
previousDay: string;
|
|
75
|
+
/** Accessible name for the next-day button. */
|
|
76
|
+
nextDay: string;
|
|
77
|
+
/** Accessible name for the next-week button. */
|
|
78
|
+
nextWeek: string;
|
|
79
|
+
/** Accessible name for the next-month button. */
|
|
80
|
+
nextMonth: string;
|
|
81
|
+
/** Accessible name for the next-year button. */
|
|
82
|
+
nextYear: string;
|
|
83
|
+
/** Visible text of the commit button. */
|
|
84
|
+
confirm: string;
|
|
85
|
+
/** Visible text of the dismiss button. */
|
|
86
|
+
cancel: string;
|
|
87
|
+
/** Label for the hour select. Required when `mode` includes a time. */
|
|
88
|
+
hour?: string;
|
|
89
|
+
/** Label for the minute select. Required when `mode` includes a time. */
|
|
90
|
+
minute?: string;
|
|
91
|
+
/** Label for the AM/PM select, when `hour12` resolves true. */
|
|
92
|
+
meridiem?: string;
|
|
93
|
+
/** Column heading for week numbers. Required when `showWeekNumbers`. */
|
|
94
|
+
week?: string;
|
|
95
|
+
/** Visible text of the clear button. The button renders only when set. */
|
|
96
|
+
clear?: string;
|
|
97
|
+
/**
|
|
98
|
+
* Label for the time-zone select. The select renders only when set, for
|
|
99
|
+
* the same reason `clear` gates its button: a zone list is an opt-in
|
|
100
|
+
* part of the form, and we will not name it in English.
|
|
101
|
+
*/
|
|
102
|
+
timeZone?: string;
|
|
103
|
+
/**
|
|
104
|
+
* Message announced when typed text will not parse or is out of range.
|
|
105
|
+
* When set, a `role="status"` live region renders after the field and
|
|
106
|
+
* is wired to it via `aria-errormessage` — without it, `aria-invalid`
|
|
107
|
+
* flips silently and a screen-reader user who has already left the
|
|
108
|
+
* field never hears that their date was refused.
|
|
109
|
+
*/
|
|
110
|
+
invalid?: string;
|
|
111
|
+
/**
|
|
112
|
+
* Keyboard help for the dialog, e.g. "Use the arrow keys to choose a
|
|
113
|
+
* date". When set, it renders inside the dialog and becomes the
|
|
114
|
+
* dialog's `aria-describedby`, so a screen reader speaks it once on
|
|
115
|
+
* open — the APG date-picker dialog ships exactly this affordance.
|
|
116
|
+
*/
|
|
117
|
+
instructions?: string;
|
|
119
118
|
};
|
|
120
119
|
/** Context passed to a projected icon `<ng-template>` (the button glyph). */
|
|
121
120
|
type ChildArgs = {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
121
|
+
/** The committed value, in ISO form. */
|
|
122
|
+
value: string;
|
|
123
|
+
/** Is the dialog open? */
|
|
124
|
+
open: boolean;
|
|
125
|
+
/** The value as the user sees it in the field. */
|
|
126
|
+
display: string;
|
|
128
127
|
};
|
|
129
128
|
/** Payload of the `shortcut` output. */
|
|
130
129
|
type ShortcutEvent = {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
130
|
+
/** The chosen shortcut's `id`. */
|
|
131
|
+
id: string;
|
|
132
|
+
/** The ISO date the shortcut resolved to. */
|
|
133
|
+
isoDate: string;
|
|
135
134
|
};
|
|
136
135
|
/** Zero-pad to `width`. */
|
|
137
|
-
declare function pad(n: number, width?: number): string;
|
|
136
|
+
export declare function pad(n: number, width?: number): string;
|
|
138
137
|
/** Days in a month. `month` is 1-12. */
|
|
139
|
-
declare function daysInMonth(year: number, month: number): number;
|
|
138
|
+
export declare function daysInMonth(year: number, month: number): number;
|
|
140
139
|
/** `{2026, 3, 1}` → `"2026-03-01"`. */
|
|
141
|
-
declare function formatIsoDate(date: CivilDate): string;
|
|
140
|
+
export declare function formatIsoDate(date: CivilDate): string;
|
|
142
141
|
/**
|
|
143
142
|
* `"2026-03-01"` → `{2026, 3, 1}`, or null.
|
|
144
143
|
*
|
|
@@ -146,13 +145,13 @@ declare function formatIsoDate(date: CivilDate): string;
|
|
|
146
145
|
* `"2026-02-31"` is null and not the 3rd of March. A field that silently
|
|
147
146
|
* reinterprets an impossible date is worse than one that refuses it.
|
|
148
147
|
*/
|
|
149
|
-
declare function parseIsoDate(text: string): CivilDate | null;
|
|
148
|
+
export declare function parseIsoDate(text: string): CivilDate | null;
|
|
150
149
|
/** Days since the Unix epoch. The unit all date arithmetic goes through. */
|
|
151
|
-
declare function toEpochDay(date: CivilDate): number;
|
|
150
|
+
export declare function toEpochDay(date: CivilDate): number;
|
|
152
151
|
/** Inverse of `toEpochDay`. */
|
|
153
|
-
declare function fromEpochDay(epochDay: number): CivilDate;
|
|
152
|
+
export declare function fromEpochDay(epochDay: number): CivilDate;
|
|
154
153
|
/** Shift an ISO date by whole days. */
|
|
155
|
-
declare function addDays(isoDate: string, days: number): string;
|
|
154
|
+
export declare function addDays(isoDate: string, days: number): string;
|
|
156
155
|
/**
|
|
157
156
|
* Shift an ISO date by whole months, clamping the day.
|
|
158
157
|
*
|
|
@@ -160,9 +159,9 @@ declare function addDays(isoDate: string, days: number): string;
|
|
|
160
159
|
* Rolling over is what `Date.prototype.setMonth` does and it is almost
|
|
161
160
|
* never what someone paging a calendar means.
|
|
162
161
|
*/
|
|
163
|
-
declare function addMonths(isoDate: string, months: number): string;
|
|
162
|
+
export declare function addMonths(isoDate: string, months: number): string;
|
|
164
163
|
/** Day of week: 0 = Sunday … 6 = Saturday. */
|
|
165
|
-
declare function weekdayOf(isoDate: string): number;
|
|
164
|
+
export declare function weekdayOf(isoDate: string): number;
|
|
166
165
|
/**
|
|
167
166
|
* ISO-8601 week number.
|
|
168
167
|
*
|
|
@@ -171,20 +170,20 @@ declare function weekdayOf(isoDate: string): number;
|
|
|
171
170
|
* January. Public-sector and clinical rotas quote ISO week numbers, so
|
|
172
171
|
* the column is worth getting exactly right.
|
|
173
172
|
*/
|
|
174
|
-
declare function isoWeek(isoDate: string): number;
|
|
173
|
+
export declare function isoWeek(isoDate: string): number;
|
|
175
174
|
/** `"09:30"` → `{9, 30}`, or null. */
|
|
176
|
-
declare function parseIsoTime(text: string): CivilTime | null;
|
|
175
|
+
export declare function parseIsoTime(text: string): CivilTime | null;
|
|
177
176
|
/** `{9, 30}` → `"09:30"`. */
|
|
178
|
-
declare function formatIsoTime(time: CivilTime): string;
|
|
177
|
+
export declare function formatIsoTime(time: CivilTime): string;
|
|
179
178
|
/** Pull the date and time halves out of a mode-appropriate ISO value. */
|
|
180
|
-
declare function splitValue(value: string, mode: DateTimeMode): {
|
|
181
|
-
|
|
182
|
-
|
|
179
|
+
export declare function splitValue(value: string, mode: DateTimeMode): {
|
|
180
|
+
date: string;
|
|
181
|
+
time: string;
|
|
183
182
|
};
|
|
184
183
|
/** Recombine the halves. Returns "" when the value is incomplete. */
|
|
185
|
-
declare function joinValue(date: string, time: string, mode: DateTimeMode): string;
|
|
184
|
+
export declare function joinValue(date: string, time: string, mode: DateTimeMode): string;
|
|
186
185
|
/** Is `isoDate` inside the inclusive [min, max] window? Empty bounds pass. */
|
|
187
|
-
declare function withinRange(isoDate: string, min?: string, max?: string): boolean;
|
|
186
|
+
export declare function withinRange(isoDate: string, min?: string, max?: string): boolean;
|
|
188
187
|
/**
|
|
189
188
|
* First day of the week for a locale: 0 = Sunday … 6 = Saturday.
|
|
190
189
|
*
|
|
@@ -194,7 +193,7 @@ declare function withinRange(isoDate: string, min?: string, max?: string): boole
|
|
|
194
193
|
* region table plus a Monday default, Monday being both the ISO-8601
|
|
195
194
|
* rule and the majority convention worldwide.
|
|
196
195
|
*/
|
|
197
|
-
declare function firstDayOfWeekFor(locale?: string): number;
|
|
196
|
+
export declare function firstDayOfWeekFor(locale?: string): number;
|
|
198
197
|
/**
|
|
199
198
|
* The dates of one month's grid, always six rows of seven.
|
|
200
199
|
*
|
|
@@ -204,17 +203,17 @@ declare function firstDayOfWeekFor(locale?: string): number;
|
|
|
204
203
|
* and it makes the dialog jump under the pointer. A constant six rows
|
|
205
204
|
* costs at most one extra trailing week.
|
|
206
205
|
*/
|
|
207
|
-
declare function monthMatrix(year: number, month: number, firstDayOfWeek: number): string[][];
|
|
206
|
+
export declare function monthMatrix(year: number, month: number, firstDayOfWeek: number): string[][];
|
|
208
207
|
/** Long and short month names for a locale, index 0 = January. */
|
|
209
|
-
declare function monthNames(locale?: string): {
|
|
210
|
-
|
|
211
|
-
|
|
208
|
+
export declare function monthNames(locale?: string): {
|
|
209
|
+
long: string[];
|
|
210
|
+
short: string[];
|
|
212
211
|
};
|
|
213
212
|
/**
|
|
214
213
|
* The order a locale writes a numeric date in — `["day","month","year"]`
|
|
215
214
|
* for en-GB, `["month","day","year"]` for en-US.
|
|
216
215
|
*/
|
|
217
|
-
declare function numericFieldOrder(locale?: string): ("day" | "month" | "year")[];
|
|
216
|
+
export declare function numericFieldOrder(locale?: string): ("day" | "month" | "year")[];
|
|
218
217
|
/**
|
|
219
218
|
* Parse typed text into an ISO date.
|
|
220
219
|
*
|
|
@@ -227,11 +226,11 @@ declare function numericFieldOrder(locale?: string): ("day" | "month" | "year")[
|
|
|
227
226
|
* Anything else is null. Guessing harder than this is how date fields
|
|
228
227
|
* silently record the wrong day.
|
|
229
228
|
*/
|
|
230
|
-
declare function parseDateInput(text: string, locale?: string): string | null;
|
|
229
|
+
export declare function parseDateInput(text: string, locale?: string): string | null;
|
|
231
230
|
/** Accepts `9:30`, `09:30`, `0930`, `9.30`, and a trailing am/pm. */
|
|
232
|
-
declare function parseTimeInput(text: string): string | null;
|
|
231
|
+
export declare function parseTimeInput(text: string): string | null;
|
|
233
232
|
/** Stable per-instance id prefix; SSR-safe (no Math.random / Date.now). */
|
|
234
|
-
declare function nextDateTimePickerId(): string;
|
|
233
|
+
export declare function nextDateTimePickerId(): string;
|
|
235
234
|
/**
|
|
236
235
|
* Optional marker for the projected icon template. Gives consumers typed
|
|
237
236
|
* `let-` variables:
|
|
@@ -245,12 +244,12 @@ declare function nextDateTimePickerId(): string;
|
|
|
245
244
|
* The component queries any projected `<ng-template>`, so the marker is
|
|
246
245
|
* for type-checking and readability, not for matching.
|
|
247
246
|
*/
|
|
248
|
-
declare class DateTimePickerIcon {
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
247
|
+
export declare class DateTimePickerIcon {
|
|
248
|
+
static ngTemplateContextGuard(_dir: DateTimePickerIcon, _ctx: unknown): _ctx is ChildArgs & {
|
|
249
|
+
$implicit: ChildArgs;
|
|
250
|
+
};
|
|
251
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DateTimePickerIcon, never>;
|
|
252
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<DateTimePickerIcon, "ng-template[lilyDateTimePickerIcon]", never, {}, {}, never, never, true, never>;
|
|
254
253
|
}
|
|
255
254
|
/**
|
|
256
255
|
* DateTimePicker — a headless date / time / datetime control.
|
|
@@ -264,295 +263,446 @@ declare class DateTimePickerIcon {
|
|
|
264
263
|
* Unlike the three preference helpers this is a **form control**, not a
|
|
265
264
|
* page-header preference control, and it persists nothing.
|
|
266
265
|
*/
|
|
267
|
-
declare class DateTimePicker {
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
266
|
+
export declare class DateTimePicker {
|
|
267
|
+
/** Accessible name for the trigger button and the dialog. */
|
|
268
|
+
readonly label: import("@angular/core").InputSignal<string>;
|
|
269
|
+
/** Every other user-facing string. See `spec/index.md` §4.2. */
|
|
270
|
+
readonly labels: import("@angular/core").InputSignal<DateTimePickerLabels>;
|
|
271
|
+
/** What to collect: a date, a time, or both. */
|
|
272
|
+
readonly mode: import("@angular/core").InputSignal<DateTimeMode>;
|
|
273
|
+
/** ISO value: `YYYY-MM-DD`, `HH:MM`, or `YYYY-MM-DDTHH:MM`. Two-way bindable. */
|
|
274
|
+
readonly value: import("@angular/core").ModelSignal<string>;
|
|
275
|
+
/** BCP 47 tag driving month names, weekday names and first weekday. */
|
|
276
|
+
readonly locale: import("@angular/core").InputSignal<string>;
|
|
277
|
+
/** Earliest selectable date, ISO. */
|
|
278
|
+
readonly min: import("@angular/core").InputSignal<string>;
|
|
279
|
+
/** Latest selectable date, ISO. */
|
|
280
|
+
readonly max: import("@angular/core").InputSignal<string>;
|
|
281
|
+
/** Veto individual dates — true means "cannot be picked". */
|
|
282
|
+
readonly isDateDisabled: import("@angular/core").InputSignal<((isoDate: string) => boolean) | undefined>;
|
|
283
|
+
/** 0 = Sunday … 6 = Saturday. Defaults to the locale's convention. */
|
|
284
|
+
readonly firstDayOfWeek: import("@angular/core").InputSignal<number | undefined>;
|
|
285
|
+
/** Granularity of the minute select. */
|
|
286
|
+
readonly minuteStep: import("@angular/core").InputSignal<number>;
|
|
287
|
+
/** 12-hour clock. Defaults to the locale's convention. */
|
|
288
|
+
readonly hour12: import("@angular/core").InputSignal<boolean | undefined>;
|
|
289
|
+
/** Render an ISO-8601 week-number column. */
|
|
290
|
+
readonly showWeekNumbers: import("@angular/core").InputSignal<boolean>;
|
|
291
|
+
/** Quick-pick buttons. */
|
|
292
|
+
readonly shortcuts: import("@angular/core").InputSignal<DateTimeShortcut[]>;
|
|
293
|
+
/** Commit and close as soon as a day is chosen. Defaults to date-only. */
|
|
294
|
+
readonly confirmOnSelect: import("@angular/core").InputSignal<boolean | undefined>;
|
|
295
|
+
/** `name` of the hidden input that carries the value in a form post. */
|
|
296
|
+
readonly name: import("@angular/core").InputSignal<string>;
|
|
297
|
+
/**
|
|
298
|
+
* Selected IANA time zone (e.g. `Europe/London`), or `""` for none.
|
|
299
|
+
* Two-way bindable via `[(timeZone)]`, matching `value`. Rides its own
|
|
300
|
+
* hidden input `{name}-time-zone` and is reflected as `data-time-zone`
|
|
301
|
+
* on the root. It is metadata about WHERE the civil value applies, not
|
|
302
|
+
* part of the value — converting to an instant stays the consumer's
|
|
303
|
+
* job. Never guessed from the runtime: the picker no more picks a zone
|
|
304
|
+
* than `locale-picker` picks a locale.
|
|
305
|
+
*/
|
|
306
|
+
readonly timeZone: import("@angular/core").ModelSignal<string>;
|
|
307
|
+
/**
|
|
308
|
+
* Zones offered by the select. Defaults to every zone the runtime
|
|
309
|
+
* knows via `Intl.supportedValuesOf("timeZone")` — never a bundled
|
|
310
|
+
* table, the rule month and weekday names already follow.
|
|
311
|
+
*/
|
|
312
|
+
readonly timeZones: import("@angular/core").InputSignal<string[] | undefined>;
|
|
313
|
+
/** Display text per zone id; a zone without an entry shows its id. */
|
|
314
|
+
readonly timeZoneLabels: import("@angular/core").InputSignal<Record<string, string>>;
|
|
315
|
+
/** `id` of the text field, so a consumer `<label for>` can name it. */
|
|
316
|
+
readonly inputId: import("@angular/core").InputSignal<string>;
|
|
317
|
+
/** Forwarded to the text field as `aria-describedby`. */
|
|
318
|
+
readonly describedBy: import("@angular/core").InputSignal<string>;
|
|
319
|
+
/** Placeholder for the text field. */
|
|
320
|
+
readonly placeholder: import("@angular/core").InputSignal<string>;
|
|
321
|
+
/** Disable the whole control. */
|
|
322
|
+
readonly disabled: import("@angular/core").InputSignal<boolean>;
|
|
323
|
+
/**
|
|
324
|
+
* Show the value but refuse edits.
|
|
325
|
+
*
|
|
326
|
+
* Named `readOnly` (not `readonly`) so the Angular input has an
|
|
327
|
+
* unambiguous identifier distinct from the TypeScript `readonly`
|
|
328
|
+
* modifier — the one Angular-forced rename beyond `class` → `className`.
|
|
329
|
+
*/
|
|
330
|
+
readonly readOnly: import("@angular/core").InputSignal<boolean>;
|
|
331
|
+
/** Mark the field required. */
|
|
332
|
+
readonly required: import("@angular/core").InputSignal<boolean>;
|
|
333
|
+
/** Override how a committed value is rendered into the text field. */
|
|
334
|
+
readonly formatValue: import("@angular/core").InputSignal<((value: string) => string) | undefined>;
|
|
335
|
+
/** Override how typed text is turned back into an ISO value. */
|
|
336
|
+
readonly parseInput: import("@angular/core").InputSignal<((text: string) => string | null) | undefined>;
|
|
337
|
+
/** Extra CSS class on the root `<div>`. */
|
|
338
|
+
readonly className: import("@angular/core").InputSignal<string>;
|
|
339
|
+
/** Fires after a new value is committed. */
|
|
340
|
+
readonly change: import("@angular/core").OutputEmitterRef<string>;
|
|
341
|
+
/** Fires when a shortcut is used, before the value settles. */
|
|
342
|
+
readonly shortcut: import("@angular/core").OutputEmitterRef<ShortcutEvent>;
|
|
343
|
+
/** Fires when typed text cannot be parsed. */
|
|
344
|
+
readonly invalidInput: import("@angular/core").OutputEmitterRef<string>;
|
|
345
|
+
/** Projected icon template; replaces the default glyph when supplied. */
|
|
346
|
+
protected readonly iconTemplate: import("@angular/core").Signal<TemplateRef<any> | undefined>;
|
|
347
|
+
private readonly rootRef;
|
|
348
|
+
private readonly buttonRef;
|
|
349
|
+
private readonly dialogRef;
|
|
350
|
+
/** Optional: the grid renders only when `mode` includes a date. */
|
|
351
|
+
private readonly gridRef;
|
|
352
|
+
protected readonly glyph = "📅︎";
|
|
353
|
+
/**
|
|
354
|
+
* For rendering the view synchronously before a focus move.
|
|
355
|
+
*
|
|
356
|
+
* Svelte updates the DOM synchronously when state changes, so the
|
|
357
|
+
* canonical helper can focus a freshly-paged month from a microtask.
|
|
358
|
+
* Angular renders later — after the microtask queue drains, whether the
|
|
359
|
+
* app is zone-based or zoneless — so a queued focus into a month that
|
|
360
|
+
* has not rendered yet finds nothing (or, worse, finds and focuses a
|
|
361
|
+
* cell that the next render destroys, dropping focus to `<body>`).
|
|
362
|
+
* `cdr.detectChanges()` inside the event handler is the Angular
|
|
363
|
+
* equivalent of Svelte's synchronous flush.
|
|
364
|
+
*/
|
|
365
|
+
private readonly cdr;
|
|
366
|
+
private readonly baseId;
|
|
367
|
+
protected readonly dialogId: string;
|
|
368
|
+
protected readonly periodId: string;
|
|
369
|
+
protected readonly hourId: string;
|
|
370
|
+
protected readonly minuteId: string;
|
|
371
|
+
protected readonly meridiemId: string;
|
|
372
|
+
protected readonly statusId: string;
|
|
373
|
+
protected readonly instructionsId: string;
|
|
374
|
+
protected readonly timeZoneId: string;
|
|
375
|
+
protected readonly open: import("@angular/core").WritableSignal<boolean>;
|
|
376
|
+
protected readonly tooltipId: string;
|
|
377
|
+
protected readonly hoverButton: import("@angular/core").WritableSignal<boolean>;
|
|
378
|
+
protected readonly hoverTooltip: import("@angular/core").WritableSignal<boolean>;
|
|
379
|
+
protected readonly focusButton: import("@angular/core").WritableSignal<boolean>;
|
|
380
|
+
protected readonly dismissed: import("@angular/core").WritableSignal<boolean>;
|
|
381
|
+
protected readonly tooltipVisible: import("@angular/core").Signal<boolean>;
|
|
382
|
+
protected onTooltipButtonEnter(): void;
|
|
383
|
+
protected onTooltipButtonFocusIn(): void;
|
|
384
|
+
protected onTooltipButtonFocusOut(): void;
|
|
385
|
+
protected onTooltipKeydown(event: KeyboardEvent): void;
|
|
386
|
+
private readonly tooltipEscapeListener;
|
|
387
|
+
protected readonly invalid: import("@angular/core").WritableSignal<boolean>;
|
|
388
|
+
/**
|
|
389
|
+
* The element that opened the dialog, so close can return focus to it.
|
|
390
|
+
*
|
|
391
|
+
* The APG rule is "focus returns to the element that invoked the
|
|
392
|
+
* dialog" — which is the trigger button on a click, but the *text
|
|
393
|
+
* field* when the user pressed Alt+ArrowDown. Always refocusing the
|
|
394
|
+
* button strands a keyboard user one Tab stop past where they were.
|
|
395
|
+
*/
|
|
396
|
+
private openerEl;
|
|
397
|
+
/**
|
|
398
|
+
* Text the user has typed but not yet resolved.
|
|
399
|
+
*
|
|
400
|
+
* `null` means "no pending edit, show the formatted value". An empty
|
|
401
|
+
* string is a real state (the user cleared the field) and must not
|
|
402
|
+
* collapse into `null`.
|
|
403
|
+
*/
|
|
404
|
+
protected readonly typed: import("@angular/core").WritableSignal<string | null>;
|
|
405
|
+
/**
|
|
406
|
+
* The pending selection, live only while the dialog is open.
|
|
407
|
+
*
|
|
408
|
+
* Kept separate from `value` so Cancel and Escape can genuinely revert.
|
|
409
|
+
* A picker that writes through on every arrow key has no cancel — only
|
|
410
|
+
* an undo the user has to perform by hand, from memory.
|
|
411
|
+
*/
|
|
412
|
+
protected readonly pendingDate: import("@angular/core").WritableSignal<string>;
|
|
413
|
+
protected readonly pendingTime: import("@angular/core").WritableSignal<string>;
|
|
414
|
+
/** The month on screen. */
|
|
415
|
+
protected readonly viewYear: import("@angular/core").WritableSignal<number>;
|
|
416
|
+
protected readonly viewMonth: import("@angular/core").WritableSignal<number>;
|
|
417
|
+
/** The day the grid's roving tabindex sits on. */
|
|
418
|
+
protected readonly cursor: import("@angular/core").WritableSignal<string>;
|
|
419
|
+
/**
|
|
420
|
+
* Today, sampled once at open and refreshed on the initial effect below.
|
|
421
|
+
* Not re-read per cell: the grid asks "is this today?" 42 times a
|
|
422
|
+
* render, and a clock read per cell buys nothing over a clock read per
|
|
423
|
+
* open.
|
|
424
|
+
*/
|
|
425
|
+
protected readonly today: import("@angular/core").WritableSignal<string>;
|
|
426
|
+
protected readonly fieldId: import("@angular/core").Signal<string>;
|
|
427
|
+
protected readonly committed: import("@angular/core").Signal<{
|
|
428
|
+
date: string;
|
|
429
|
+
time: string;
|
|
430
|
+
}>;
|
|
431
|
+
protected readonly weekStart: import("@angular/core").Signal<number>;
|
|
432
|
+
protected readonly commitOnDay: import("@angular/core").Signal<boolean>;
|
|
433
|
+
protected readonly usesDate: import("@angular/core").Signal<boolean>;
|
|
434
|
+
protected readonly usesTime: import("@angular/core").Signal<boolean>;
|
|
435
|
+
protected readonly clock12: import("@angular/core").Signal<boolean>;
|
|
436
|
+
/**
|
|
437
|
+
* `aria-describedby` for the field: the consumer's hint, plus — while
|
|
438
|
+
* invalid, with `labels().invalid` supplied — the status region, for
|
|
439
|
+
* the assistive technologies that read `aria-describedby` but not the
|
|
440
|
+
* newer `aria-errormessage`.
|
|
441
|
+
*/
|
|
442
|
+
protected readonly fieldDescribedBy: import("@angular/core").Signal<string | null>;
|
|
443
|
+
/** The text shown in the field. A pending edit wins until resolved. */
|
|
444
|
+
protected readonly display: import("@angular/core").Signal<string>;
|
|
445
|
+
/** The "March 2026" heading. */
|
|
446
|
+
/**
|
|
447
|
+
* `Intl.supportedValuesOf` is guarded rather than called bare: an empty
|
|
448
|
+
* select beats a throw at mount on an older embedded runtime that
|
|
449
|
+
* lacks the method entirely.
|
|
450
|
+
*/
|
|
451
|
+
protected readonly zoneOptions: import("@angular/core").Signal<string[]>;
|
|
452
|
+
protected readonly periodText: import("@angular/core").Signal<string>;
|
|
453
|
+
/** Column headings, in this locale, starting on `weekStart`. */
|
|
454
|
+
protected readonly weekdays: import("@angular/core").Signal<{
|
|
455
|
+
short: string;
|
|
456
|
+
long: string;
|
|
457
|
+
}[]>;
|
|
458
|
+
protected readonly weeks: import("@angular/core").Signal<string[][]>;
|
|
459
|
+
protected readonly pendingHour: import("@angular/core").Signal<number>;
|
|
460
|
+
protected readonly pendingMinute: import("@angular/core").Signal<number>;
|
|
461
|
+
/**
|
|
462
|
+
* The hours offered.
|
|
463
|
+
*
|
|
464
|
+
* On a 12-hour clock this lists only the half of the day the meridiem
|
|
465
|
+
* select is currently on, so the two controls together name exactly one
|
|
466
|
+
* hour. Listing 1-12 once and letting the meridiem reinterpret it is
|
|
467
|
+
* the same thing, but it makes "12 AM" ambiguous at precisely the point
|
|
468
|
+
* where users already get it wrong.
|
|
469
|
+
*/
|
|
470
|
+
protected readonly hourOptions: import("@angular/core").Signal<{
|
|
471
|
+
value: number;
|
|
472
|
+
label: string;
|
|
473
|
+
}[]>;
|
|
474
|
+
protected readonly minuteOptions: import("@angular/core").Signal<number[]>;
|
|
475
|
+
protected readonly childContext: import("@angular/core").Signal<{
|
|
476
|
+
/** The committed value, in ISO form. */
|
|
477
|
+
value: string;
|
|
478
|
+
/** Is the dialog open? */
|
|
479
|
+
open: boolean;
|
|
480
|
+
/** The value as the user sees it in the field. */
|
|
481
|
+
display: string;
|
|
482
|
+
$implicit: ChildArgs;
|
|
483
|
+
}>;
|
|
484
|
+
private initialised;
|
|
485
|
+
constructor();
|
|
486
|
+
protected pad2(n: number): string;
|
|
487
|
+
protected isoWeekOf(isoDate: string): number;
|
|
488
|
+
/** Per-cell derived values for the grid template's `@let`. */
|
|
489
|
+
protected parseCell(isoDate: string): {
|
|
490
|
+
day: string;
|
|
491
|
+
outside: boolean;
|
|
492
|
+
};
|
|
493
|
+
/** Accessible name for one day cell, e.g. "Sunday 1 March 2026". */
|
|
494
|
+
protected dayLabel(isoDate: string): string;
|
|
495
|
+
/** The locale's own AM / PM strings, so neither is hardcoded. */
|
|
496
|
+
protected dayPeriodName(pm: boolean): string;
|
|
497
|
+
private formatTimeForDisplay;
|
|
498
|
+
/** Render an ISO value the way this locale writes it. */
|
|
499
|
+
private defaultFormat;
|
|
500
|
+
protected dayDisabled(isoDate: string): boolean;
|
|
501
|
+
/** The nearest selectable day to `isoDate`, searching outwards. */
|
|
502
|
+
private nearestSelectable;
|
|
503
|
+
protected openDialog(): void;
|
|
504
|
+
/** Where an unset time starts: now, snapped down to the step. */
|
|
505
|
+
private defaultTime;
|
|
506
|
+
/** Focus the grid cursor, or the first control when there is no grid. */
|
|
507
|
+
private focusInitial;
|
|
508
|
+
protected closeDialog(refocus?: boolean): void;
|
|
509
|
+
/** Commit the pending selection to `value` and notify. */
|
|
510
|
+
protected commit(): void;
|
|
511
|
+
protected clear(): void;
|
|
512
|
+
/**
|
|
513
|
+
* Move the cursor, paging the view when the target is off-screen.
|
|
514
|
+
*
|
|
515
|
+
* Disabled days are still reachable — the cursor lands on them and the
|
|
516
|
+
* button is `aria-disabled` (so it takes real focus and announces), so
|
|
517
|
+
* arrowing across a blocked range works. What is refused is leaving
|
|
518
|
+
* the min/max window entirely, because there is nothing out there to
|
|
519
|
+
* navigate to.
|
|
520
|
+
*/
|
|
521
|
+
private moveCursor;
|
|
522
|
+
private focusCursor;
|
|
523
|
+
protected selectDay(isoDate: string): void;
|
|
524
|
+
protected shiftMonth(delta: number): void;
|
|
525
|
+
protected shiftYear(delta: number): void;
|
|
526
|
+
/**
|
|
527
|
+
* Week/day steps are the fine end of the header: unlike month/year,
|
|
528
|
+
* which move the GRID and merely carry the cursor, these move the
|
|
529
|
+
* pending day itself by ±7 / ±1 civil days and page the grid only
|
|
530
|
+
* when the new day leaves the shown month. A step off the min/max
|
|
531
|
+
* window is refused outright; a step onto a vetoed day moves the
|
|
532
|
+
* cursor — vetoed days are reachable, as with the arrow keys — but
|
|
533
|
+
* leaves the pending selection where it was. No commit even under
|
|
534
|
+
* `confirmOnSelect`.
|
|
535
|
+
*/
|
|
536
|
+
protected shiftDays(delta: number): void;
|
|
537
|
+
protected onTimeZoneSelect(event: Event): void;
|
|
538
|
+
/**
|
|
539
|
+
* A plain index expression (`timeZoneLabels()[zone] ?? zone`) trips
|
|
540
|
+
* NG8102: without `noUncheckedIndexedAccess`, TypeScript types a
|
|
541
|
+
* `Record<string, string>` index as always `string`, so the compiler
|
|
542
|
+
* sees the `??` as dead code even though a real, unlisted zone id is
|
|
543
|
+
* exactly the case it exists for. The cast documents that the index
|
|
544
|
+
* genuinely can miss.
|
|
545
|
+
*/
|
|
546
|
+
protected zoneLabel(zone: string): string;
|
|
547
|
+
protected onGridKeydown(event: KeyboardEvent): void;
|
|
548
|
+
/** Everything tabbable inside the dialog, in DOM order. */
|
|
549
|
+
private focusables;
|
|
550
|
+
protected onDialogKeydown(event: KeyboardEvent): void;
|
|
551
|
+
/** Default text parsing, per mode. */
|
|
552
|
+
private parseTypedForMode;
|
|
553
|
+
/** Resolve typed text on blur or Enter. */
|
|
554
|
+
protected resolveTyped(): void;
|
|
555
|
+
protected onFieldKeydown(event: KeyboardEvent): void;
|
|
556
|
+
protected setHour(hour: number): void;
|
|
557
|
+
protected setMinute(minute: number): void;
|
|
558
|
+
/** Cross between AM and PM without changing the minute of the hour. */
|
|
559
|
+
protected setMeridiem(pm: boolean): void;
|
|
560
|
+
protected applyShortcut(shortcut: DateTimeShortcut): void;
|
|
561
|
+
protected onDocumentClick(event: Event): void;
|
|
562
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DateTimePicker, never>;
|
|
563
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DateTimePicker, "lily-date-time-picker", never, {
|
|
564
|
+
"label": {
|
|
565
|
+
"alias": "label";
|
|
566
|
+
"required": true;
|
|
567
|
+
"isSignal": true;
|
|
568
|
+
};
|
|
569
|
+
"labels": {
|
|
570
|
+
"alias": "labels";
|
|
571
|
+
"required": true;
|
|
572
|
+
"isSignal": true;
|
|
573
|
+
};
|
|
574
|
+
"mode": {
|
|
575
|
+
"alias": "mode";
|
|
576
|
+
"required": false;
|
|
577
|
+
"isSignal": true;
|
|
578
|
+
};
|
|
579
|
+
"value": {
|
|
580
|
+
"alias": "value";
|
|
581
|
+
"required": false;
|
|
582
|
+
"isSignal": true;
|
|
583
|
+
};
|
|
584
|
+
"locale": {
|
|
585
|
+
"alias": "locale";
|
|
586
|
+
"required": false;
|
|
587
|
+
"isSignal": true;
|
|
588
|
+
};
|
|
589
|
+
"min": {
|
|
590
|
+
"alias": "min";
|
|
591
|
+
"required": false;
|
|
592
|
+
"isSignal": true;
|
|
593
|
+
};
|
|
594
|
+
"max": {
|
|
595
|
+
"alias": "max";
|
|
596
|
+
"required": false;
|
|
597
|
+
"isSignal": true;
|
|
598
|
+
};
|
|
599
|
+
"isDateDisabled": {
|
|
600
|
+
"alias": "isDateDisabled";
|
|
601
|
+
"required": false;
|
|
602
|
+
"isSignal": true;
|
|
603
|
+
};
|
|
604
|
+
"firstDayOfWeek": {
|
|
605
|
+
"alias": "firstDayOfWeek";
|
|
606
|
+
"required": false;
|
|
607
|
+
"isSignal": true;
|
|
608
|
+
};
|
|
609
|
+
"minuteStep": {
|
|
610
|
+
"alias": "minuteStep";
|
|
611
|
+
"required": false;
|
|
612
|
+
"isSignal": true;
|
|
613
|
+
};
|
|
614
|
+
"hour12": {
|
|
615
|
+
"alias": "hour12";
|
|
616
|
+
"required": false;
|
|
617
|
+
"isSignal": true;
|
|
618
|
+
};
|
|
619
|
+
"showWeekNumbers": {
|
|
620
|
+
"alias": "showWeekNumbers";
|
|
621
|
+
"required": false;
|
|
622
|
+
"isSignal": true;
|
|
623
|
+
};
|
|
624
|
+
"shortcuts": {
|
|
625
|
+
"alias": "shortcuts";
|
|
626
|
+
"required": false;
|
|
627
|
+
"isSignal": true;
|
|
628
|
+
};
|
|
629
|
+
"confirmOnSelect": {
|
|
630
|
+
"alias": "confirmOnSelect";
|
|
631
|
+
"required": false;
|
|
632
|
+
"isSignal": true;
|
|
633
|
+
};
|
|
634
|
+
"name": {
|
|
635
|
+
"alias": "name";
|
|
636
|
+
"required": false;
|
|
637
|
+
"isSignal": true;
|
|
638
|
+
};
|
|
639
|
+
"timeZone": {
|
|
640
|
+
"alias": "timeZone";
|
|
641
|
+
"required": false;
|
|
642
|
+
"isSignal": true;
|
|
643
|
+
};
|
|
644
|
+
"timeZones": {
|
|
645
|
+
"alias": "timeZones";
|
|
646
|
+
"required": false;
|
|
647
|
+
"isSignal": true;
|
|
648
|
+
};
|
|
649
|
+
"timeZoneLabels": {
|
|
650
|
+
"alias": "timeZoneLabels";
|
|
651
|
+
"required": false;
|
|
652
|
+
"isSignal": true;
|
|
653
|
+
};
|
|
654
|
+
"inputId": {
|
|
655
|
+
"alias": "inputId";
|
|
656
|
+
"required": false;
|
|
657
|
+
"isSignal": true;
|
|
658
|
+
};
|
|
659
|
+
"describedBy": {
|
|
660
|
+
"alias": "describedBy";
|
|
661
|
+
"required": false;
|
|
662
|
+
"isSignal": true;
|
|
663
|
+
};
|
|
664
|
+
"placeholder": {
|
|
665
|
+
"alias": "placeholder";
|
|
666
|
+
"required": false;
|
|
667
|
+
"isSignal": true;
|
|
668
|
+
};
|
|
669
|
+
"disabled": {
|
|
670
|
+
"alias": "disabled";
|
|
671
|
+
"required": false;
|
|
672
|
+
"isSignal": true;
|
|
673
|
+
};
|
|
674
|
+
"readOnly": {
|
|
675
|
+
"alias": "readOnly";
|
|
676
|
+
"required": false;
|
|
677
|
+
"isSignal": true;
|
|
678
|
+
};
|
|
679
|
+
"required": {
|
|
680
|
+
"alias": "required";
|
|
681
|
+
"required": false;
|
|
682
|
+
"isSignal": true;
|
|
683
|
+
};
|
|
684
|
+
"formatValue": {
|
|
685
|
+
"alias": "formatValue";
|
|
686
|
+
"required": false;
|
|
687
|
+
"isSignal": true;
|
|
688
|
+
};
|
|
689
|
+
"parseInput": {
|
|
690
|
+
"alias": "parseInput";
|
|
691
|
+
"required": false;
|
|
692
|
+
"isSignal": true;
|
|
693
|
+
};
|
|
694
|
+
"className": {
|
|
695
|
+
"alias": "className";
|
|
696
|
+
"required": false;
|
|
697
|
+
"isSignal": true;
|
|
482
698
|
};
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
protected dayDisabled(isoDate: string): boolean;
|
|
491
|
-
/** The nearest selectable day to `isoDate`, searching outwards. */
|
|
492
|
-
private nearestSelectable;
|
|
493
|
-
protected openDialog(): void;
|
|
494
|
-
/** Where an unset time starts: now, snapped down to the step. */
|
|
495
|
-
private defaultTime;
|
|
496
|
-
/** Focus the grid cursor, or the first control when there is no grid. */
|
|
497
|
-
private focusInitial;
|
|
498
|
-
protected closeDialog(refocus?: boolean): void;
|
|
499
|
-
/** Commit the pending selection to `value` and notify. */
|
|
500
|
-
protected commit(): void;
|
|
501
|
-
protected clear(): void;
|
|
502
|
-
/**
|
|
503
|
-
* Move the cursor, paging the view when the target is off-screen.
|
|
504
|
-
*
|
|
505
|
-
* Disabled days are still reachable — the cursor lands on them and the
|
|
506
|
-
* button is `aria-disabled` (so it takes real focus and announces), so
|
|
507
|
-
* arrowing across a blocked range works. What is refused is leaving
|
|
508
|
-
* the min/max window entirely, because there is nothing out there to
|
|
509
|
-
* navigate to.
|
|
510
|
-
*/
|
|
511
|
-
private moveCursor;
|
|
512
|
-
private focusCursor;
|
|
513
|
-
protected selectDay(isoDate: string): void;
|
|
514
|
-
protected shiftMonth(delta: number): void;
|
|
515
|
-
protected shiftYear(delta: number): void;
|
|
516
|
-
/**
|
|
517
|
-
* Week/day steps are the fine end of the header: unlike month/year,
|
|
518
|
-
* which move the GRID and merely carry the cursor, these move the
|
|
519
|
-
* pending day itself by ±7 / ±1 civil days and page the grid only
|
|
520
|
-
* when the new day leaves the shown month. A step off the min/max
|
|
521
|
-
* window is refused outright; a step onto a vetoed day moves the
|
|
522
|
-
* cursor — vetoed days are reachable, as with the arrow keys — but
|
|
523
|
-
* leaves the pending selection where it was. No commit even under
|
|
524
|
-
* `confirmOnSelect`.
|
|
525
|
-
*/
|
|
526
|
-
protected shiftDays(delta: number): void;
|
|
527
|
-
protected onTimeZoneSelect(event: Event): void;
|
|
528
|
-
/**
|
|
529
|
-
* A plain index expression (`timeZoneLabels()[zone] ?? zone`) trips
|
|
530
|
-
* NG8102: without `noUncheckedIndexedAccess`, TypeScript types a
|
|
531
|
-
* `Record<string, string>` index as always `string`, so the compiler
|
|
532
|
-
* sees the `??` as dead code even though a real, unlisted zone id is
|
|
533
|
-
* exactly the case it exists for. The cast documents that the index
|
|
534
|
-
* genuinely can miss.
|
|
535
|
-
*/
|
|
536
|
-
protected zoneLabel(zone: string): string;
|
|
537
|
-
protected onGridKeydown(event: KeyboardEvent): void;
|
|
538
|
-
/** Everything tabbable inside the dialog, in DOM order. */
|
|
539
|
-
private focusables;
|
|
540
|
-
protected onDialogKeydown(event: KeyboardEvent): void;
|
|
541
|
-
/** Default text parsing, per mode. */
|
|
542
|
-
private parseTypedForMode;
|
|
543
|
-
/** Resolve typed text on blur or Enter. */
|
|
544
|
-
protected resolveTyped(): void;
|
|
545
|
-
protected onFieldKeydown(event: KeyboardEvent): void;
|
|
546
|
-
protected setHour(hour: number): void;
|
|
547
|
-
protected setMinute(minute: number): void;
|
|
548
|
-
/** Cross between AM and PM without changing the minute of the hour. */
|
|
549
|
-
protected setMeridiem(pm: boolean): void;
|
|
550
|
-
protected applyShortcut(shortcut: DateTimeShortcut): void;
|
|
551
|
-
protected onDocumentClick(event: Event): void;
|
|
552
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DateTimePicker, never>;
|
|
553
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DateTimePicker, "lily-date-time-picker", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "labels": { "alias": "labels"; "required": true; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "isDateDisabled": { "alias": "isDateDisabled"; "required": false; "isSignal": true; }; "firstDayOfWeek": { "alias": "firstDayOfWeek"; "required": false; "isSignal": true; }; "minuteStep": { "alias": "minuteStep"; "required": false; "isSignal": true; }; "hour12": { "alias": "hour12"; "required": false; "isSignal": true; }; "showWeekNumbers": { "alias": "showWeekNumbers"; "required": false; "isSignal": true; }; "shortcuts": { "alias": "shortcuts"; "required": false; "isSignal": true; }; "confirmOnSelect": { "alias": "confirmOnSelect"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "timeZone": { "alias": "timeZone"; "required": false; "isSignal": true; }; "timeZones": { "alias": "timeZones"; "required": false; "isSignal": true; }; "timeZoneLabels": { "alias": "timeZoneLabels"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "describedBy": { "alias": "describedBy"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readOnly": { "alias": "readOnly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "formatValue": { "alias": "formatValue"; "required": false; "isSignal": true; }; "parseInput": { "alias": "parseInput"; "required": false; "isSignal": true; }; "className": { "alias": "className"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "timeZone": "timeZoneChange"; "change": "change"; "shortcut": "shortcut"; "invalidInput": "invalidInput"; }, ["iconTemplate"], never, true, never>;
|
|
699
|
+
}, {
|
|
700
|
+
"value": "valueChange";
|
|
701
|
+
"timeZone": "timeZoneChange";
|
|
702
|
+
"change": "change";
|
|
703
|
+
"shortcut": "shortcut";
|
|
704
|
+
"invalidInput": "invalidInput";
|
|
705
|
+
}, ["iconTemplate"], never, true, never>;
|
|
554
706
|
}
|
|
555
|
-
|
|
556
|
-
export { CALENDAR, DateTimePicker, DateTimePickerIcon, addDays, addMonths, daysInMonth, firstDayOfWeekFor, formatIsoDate, formatIsoTime, fromEpochDay, isoWeek, joinValue, monthMatrix, monthNames, nextDateTimePickerId, numericFieldOrder, pad, parseDateInput, parseIsoDate, parseIsoTime, parseTimeInput, splitValue, toEpochDay, weekdayOf, withinRange };
|
|
557
707
|
export type { ChildArgs, CivilDate, CivilTime, DateTimeMode, DateTimePickerLabels, DateTimeShortcut, ShortcutEvent };
|
|
558
|
-
//# sourceMappingURL=lilydesignsystem-angular-date-time-picker.d.ts.map
|
|
708
|
+
//# sourceMappingURL=lilydesignsystem-angular-date-time-picker.d.ts.map
|