@lekoala/date-picker 0.1.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 (104) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +236 -0
  3. package/custom-elements.json +366 -0
  4. package/dist/date-picker.css +344 -0
  5. package/dist/date-picker.js +2693 -0
  6. package/dist/date-picker.min.css +1 -0
  7. package/dist/date-picker.min.js +17 -0
  8. package/dist/date-picker.standalone.min.js +361 -0
  9. package/dist/types/calendar-model.d.ts +34 -0
  10. package/dist/types/calendar-model.d.ts.map +1 -0
  11. package/dist/types/date-calendar.d.ts +228 -0
  12. package/dist/types/date-calendar.d.ts.map +1 -0
  13. package/dist/types/date-field.d.ts +94 -0
  14. package/dist/types/date-field.d.ts.map +1 -0
  15. package/dist/types/date-picker.d.ts +258 -0
  16. package/dist/types/date-picker.d.ts.map +1 -0
  17. package/dist/types/date-range.d.ts +89 -0
  18. package/dist/types/date-range.d.ts.map +1 -0
  19. package/dist/types/date.d.ts +61 -0
  20. package/dist/types/date.d.ts.map +1 -0
  21. package/dist/types/define.d.ts +2 -0
  22. package/dist/types/define.d.ts.map +1 -0
  23. package/dist/types/index.d.ts +9 -0
  24. package/dist/types/index.d.ts.map +1 -0
  25. package/dist/types/intl.d.ts +33 -0
  26. package/dist/types/intl.d.ts.map +1 -0
  27. package/dist/types/locales/ar.d.ts +22 -0
  28. package/dist/types/locales/ar.d.ts.map +1 -0
  29. package/dist/types/locales/de.d.ts +22 -0
  30. package/dist/types/locales/de.d.ts.map +1 -0
  31. package/dist/types/locales/en.d.ts +22 -0
  32. package/dist/types/locales/en.d.ts.map +1 -0
  33. package/dist/types/locales/es.d.ts +22 -0
  34. package/dist/types/locales/es.d.ts.map +1 -0
  35. package/dist/types/locales/fr.d.ts +22 -0
  36. package/dist/types/locales/fr.d.ts.map +1 -0
  37. package/dist/types/locales/hi.d.ts +22 -0
  38. package/dist/types/locales/hi.d.ts.map +1 -0
  39. package/dist/types/locales/id.d.ts +22 -0
  40. package/dist/types/locales/id.d.ts.map +1 -0
  41. package/dist/types/locales/it.d.ts +22 -0
  42. package/dist/types/locales/it.d.ts.map +1 -0
  43. package/dist/types/locales/ja.d.ts +22 -0
  44. package/dist/types/locales/ja.d.ts.map +1 -0
  45. package/dist/types/locales/ko.d.ts +22 -0
  46. package/dist/types/locales/ko.d.ts.map +1 -0
  47. package/dist/types/locales/nl.d.ts +22 -0
  48. package/dist/types/locales/nl.d.ts.map +1 -0
  49. package/dist/types/locales/pl.d.ts +22 -0
  50. package/dist/types/locales/pl.d.ts.map +1 -0
  51. package/dist/types/locales/pt-BR.d.ts +22 -0
  52. package/dist/types/locales/pt-BR.d.ts.map +1 -0
  53. package/dist/types/locales/pt-PT.d.ts +22 -0
  54. package/dist/types/locales/pt-PT.d.ts.map +1 -0
  55. package/dist/types/locales/ru.d.ts +22 -0
  56. package/dist/types/locales/ru.d.ts.map +1 -0
  57. package/dist/types/locales/tr.d.ts +22 -0
  58. package/dist/types/locales/tr.d.ts.map +1 -0
  59. package/dist/types/locales/zh-CN.d.ts +22 -0
  60. package/dist/types/locales/zh-CN.d.ts.map +1 -0
  61. package/dist/types/messages.d.ts +43 -0
  62. package/dist/types/messages.d.ts.map +1 -0
  63. package/dist/types/source.d.ts +28 -0
  64. package/dist/types/source.d.ts.map +1 -0
  65. package/docs/ACCESSIBILITY.md +128 -0
  66. package/docs/API.md +289 -0
  67. package/docs/ARCHITECTURE.md +183 -0
  68. package/docs/AT-CHECKLIST.md +63 -0
  69. package/docs/CALENDAR-INTEGRATION.md +70 -0
  70. package/docs/DECISIONS.md +40 -0
  71. package/docs/MIGRATION-FLATPICKR.md +92 -0
  72. package/docs/ROADMAP.md +105 -0
  73. package/docs/TESTING.md +73 -0
  74. package/docs/USE_CASES.md +128 -0
  75. package/package.json +174 -0
  76. package/src/calendar-model.js +80 -0
  77. package/src/date-calendar.js +800 -0
  78. package/src/date-field.js +203 -0
  79. package/src/date-picker.css +344 -0
  80. package/src/date-picker.js +1140 -0
  81. package/src/date-range.js +172 -0
  82. package/src/date.js +203 -0
  83. package/src/define.js +9 -0
  84. package/src/index.js +15 -0
  85. package/src/intl.js +155 -0
  86. package/src/locales/ar.js +20 -0
  87. package/src/locales/de.js +20 -0
  88. package/src/locales/en.js +20 -0
  89. package/src/locales/es.js +20 -0
  90. package/src/locales/fr.js +20 -0
  91. package/src/locales/hi.js +20 -0
  92. package/src/locales/id.js +20 -0
  93. package/src/locales/it.js +20 -0
  94. package/src/locales/ja.js +20 -0
  95. package/src/locales/ko.js +20 -0
  96. package/src/locales/nl.js +20 -0
  97. package/src/locales/pl.js +20 -0
  98. package/src/locales/pt-BR.js +20 -0
  99. package/src/locales/pt-PT.js +20 -0
  100. package/src/locales/ru.js +20 -0
  101. package/src/locales/tr.js +20 -0
  102. package/src/locales/zh-CN.js +20 -0
  103. package/src/messages.js +31 -0
  104. package/src/source.js +50 -0
@@ -0,0 +1,228 @@
1
+ import { CalendarModel } from "./calendar-model.js";
2
+ export type DateRange = {
3
+ start: string;
4
+ end: string;
5
+ };
6
+ export type DateState = Record<string, unknown> & {
7
+ disabled?: boolean;
8
+ description?: string;
9
+ };
10
+ export type DateLoader = (range: DateRange, context: {
11
+ signal: AbortSignal;
12
+ }) => unknown | Promise<unknown>;
13
+ export type DateSource = DateLoader | {
14
+ load: DateLoader;
15
+ };
16
+ export type DateStateResolver = (date: string, sourceState: DateState) => DateState | null | undefined;
17
+ export type DayRenderer = (date: string, state: DateState) => Node | string | null | undefined;
18
+ export type DateDisabledPredicate = (date: string) => boolean;
19
+ /**
20
+ * Public inline calendar primitive.
21
+ *
22
+ * State contract:
23
+ * - display: month being rendered (YYYY-MM)
24
+ * - focusedDate: roving keyboard target (YYYY-MM-DD)
25
+ * - value: selected date (YYYY-MM-DD or empty)
26
+ * - highlightedRange: presentation-only range band (never touches the other state)
27
+ * - dateactivate: user explicitly activated one date
28
+ */
29
+ /** @typedef {{start:string,end:string}} DateRange */
30
+ /** @typedef {Record<string, unknown> & {disabled?:boolean, description?:string}} DateState */
31
+ /** @typedef {(range:DateRange, context:{signal:AbortSignal}) => unknown | Promise<unknown>} DateLoader */
32
+ /** @typedef {DateLoader | {load:DateLoader}} DateSource */
33
+ /** @typedef {(date:string, sourceState:DateState) => DateState | null | undefined} DateStateResolver */
34
+ /** @typedef {(date:string, state:DateState) => Node | string | null | undefined} DayRenderer */
35
+ /** @typedef {(date:string) => boolean} DateDisabledPredicate */
36
+ export declare class DateCalendarElement extends HTMLElement {
37
+ _id: string;
38
+ _model: CalendarModel;
39
+ _connected: boolean;
40
+ _rendering: boolean;
41
+ /** @type {DateSource | null} */
42
+ _source: DateSource | null;
43
+ _sourceStates: Map<any, any>;
44
+ _loadedRanges: Set<any>;
45
+ _loadController: AbortController | null;
46
+ _loadingKey: string;
47
+ /** @type {Promise<"loaded" | "cancelled" | "failed"> | null} */
48
+ _loadingPromise: Promise<"loaded" | "cancelled" | "failed"> | null;
49
+ /** @type {DateStateResolver | null} */
50
+ _dateState: DateStateResolver | null;
51
+ /** @type {DayRenderer | null} */
52
+ _renderDay: DayRenderer | null;
53
+ /** @type {DateDisabledPredicate | null} */
54
+ _isDateDisabled: DateDisabledPredicate | null;
55
+ /** @type {DateRange} */
56
+ _highlightedRange: DateRange;
57
+ _messages: {
58
+ chooseDate: string;
59
+ changeDate: string;
60
+ previousMonth: string;
61
+ nextMonth: string;
62
+ month: string;
63
+ year: string;
64
+ calendar: string;
65
+ unavailable: string;
66
+ invalidDate: string;
67
+ unavailableDate: string;
68
+ formatHint: string;
69
+ week: string;
70
+ rangeStart: string;
71
+ rangeInRange: string;
72
+ rangeEnd: string;
73
+ rangeSingle: string;
74
+ rangeOrderStart: string;
75
+ rangeOrderEnd: string;
76
+ };
77
+ static observedAttributes: string[];
78
+ constructor();
79
+ connectedCallback(): void;
80
+ disconnectedCallback(): void;
81
+ attributeChangedCallback(): void;
82
+ /** @public */
83
+ get locale(): string;
84
+ set locale(value: string);
85
+ /** @public */
86
+ get value(): string;
87
+ set value(value: string);
88
+ /** @public */
89
+ get display(): string;
90
+ set display(value: string);
91
+ /** @public */
92
+ get focusedDate(): string;
93
+ set focusedDate(value: string);
94
+ /** @public */
95
+ get min(): string;
96
+ set min(value: string);
97
+ /** @public */
98
+ get max(): string;
99
+ set max(value: string);
100
+ /** @public */
101
+ get firstDay(): number;
102
+ set firstDay(value: number);
103
+ /** @public */
104
+ get selection(): "none" | "single";
105
+ set selection(value: string);
106
+ /** @public */
107
+ get highlightedRange(): {
108
+ start: string;
109
+ end: string;
110
+ };
111
+ set highlightedRange(value: {
112
+ start: string;
113
+ end: string;
114
+ });
115
+ /** @public */
116
+ get fixedWeeks(): boolean;
117
+ set fixedWeeks(value: boolean);
118
+ /** @public */
119
+ get showWeekNumbers(): boolean;
120
+ set showWeekNumbers(value: boolean);
121
+ /** @public */
122
+ get messages(): {
123
+ chooseDate: string;
124
+ changeDate: string;
125
+ previousMonth: string;
126
+ nextMonth: string;
127
+ month: string;
128
+ year: string;
129
+ calendar: string;
130
+ unavailable: string;
131
+ invalidDate: string;
132
+ unavailableDate: string;
133
+ formatHint: string;
134
+ week: string;
135
+ rangeStart: string;
136
+ rangeInRange: string;
137
+ rangeEnd: string;
138
+ rangeSingle: string;
139
+ rangeOrderStart: string;
140
+ rangeOrderEnd: string;
141
+ };
142
+ set messages(value: {
143
+ chooseDate: string;
144
+ changeDate: string;
145
+ previousMonth: string;
146
+ nextMonth: string;
147
+ month: string;
148
+ year: string;
149
+ calendar: string;
150
+ unavailable: string;
151
+ invalidDate: string;
152
+ unavailableDate: string;
153
+ formatHint: string;
154
+ week: string;
155
+ rangeStart: string;
156
+ rangeInRange: string;
157
+ rangeEnd: string;
158
+ rangeSingle: string;
159
+ rangeOrderStart: string;
160
+ rangeOrderEnd: string;
161
+ });
162
+ /** @public @returns {DateSource | null} */
163
+ get source(): DateSource | null;
164
+ set source(value: DateSource | null);
165
+ /** @public @returns {DateStateResolver | null} */
166
+ get dateState(): DateStateResolver | null;
167
+ set dateState(value: DateStateResolver | null);
168
+ /** @public @returns {DayRenderer | null} */
169
+ get renderDay(): DayRenderer | null;
170
+ set renderDay(value: DayRenderer | null);
171
+ /** @public @returns {DateDisabledPredicate | null} */
172
+ get isDateDisabled(): DateDisabledPredicate | null;
173
+ set isDateDisabled(value: DateDisabledPredicate | null);
174
+ _syncModel(): void;
175
+ /** @param {string} name @param {string} value */
176
+ _reflect(name: string, value: string): void;
177
+ /** @param {string} value */
178
+ _clamp(value: string): string;
179
+ _weeks(display?: string): string[][];
180
+ /** @param {HTMLElement} element @returns {string} */
181
+ _focusTargetKey(element: HTMLElement): string;
182
+ /** @param {string} [display] */
183
+ _range(display?: string): {
184
+ start: string;
185
+ end: string;
186
+ };
187
+ /** @public @param {string} date */
188
+ getDateState(date: string): any;
189
+ /** @public */
190
+ refreshSource(): Promise<void>;
191
+ /** @public Ensure source state exists for the month containing a typed/selected date.
192
+ * @param {string} date @returns {Promise<boolean>} */
193
+ ensureDate(date: string): Promise<boolean>;
194
+ /** @param {string} display @param {boolean} [rerender] @returns {Promise<"loaded" | "cancelled" | "failed">} */
195
+ _loadDisplay(display: string, rerender?: boolean): Promise<"loaded" | "cancelled" | "failed">;
196
+ /** @param {string} display @param {{emit?:boolean}} [options] */
197
+ _setDisplay(display: string, options?: {
198
+ emit?: boolean;
199
+ }): string;
200
+ _emitDisplayChange(): void;
201
+ /** @public */
202
+ previousMonth(): string;
203
+ /** @public */
204
+ nextMonth(): string;
205
+ /** @public @param {string} date @param {{moveFocus?:boolean}} [options] */
206
+ focusDate(date: string, options?: {
207
+ moveFocus?: boolean;
208
+ }): void;
209
+ /** @param {string} previous @param {string} next @param {boolean} [moveFocus] */
210
+ _moveFocusDom(previous: string, next: string, moveFocus?: boolean): void;
211
+ /** @param {string} previousValue @param {string} nextValue */
212
+ _moveSelectionDom(previousValue: string, nextValue: string): boolean;
213
+ /** @public */
214
+ focusGrid(): void;
215
+ /** @param {string} date @returns {Promise<boolean>} */
216
+ _activate(date: string): Promise<boolean>;
217
+ /** @param {MouseEvent} event */
218
+ _onClick(event: MouseEvent): void;
219
+ /** @param {Event} event */
220
+ _onChange(event: Event): void;
221
+ /** @param {FocusEvent} event */
222
+ _onFocusIn(event: FocusEvent): void;
223
+ /** @param {KeyboardEvent} event */
224
+ _onKeyDown(event: KeyboardEvent): void;
225
+ /** @public @param {boolean} [load] */
226
+ render(load?: boolean): void;
227
+ }
228
+ //# sourceMappingURL=date-calendar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-calendar.d.ts","sourceRoot":"","sources":["../../src/date-calendar.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Owns a single editable form field inside a picker: the visible input, its
3
+ * hidden canonical ISO field, the Intl adapter and the text commit pipeline
4
+ * (parsing, availability gate, stale-response protection).
5
+ *
6
+ * It deliberately knows nothing about calendars, popups or ranges. Remote
7
+ * availability is injected as an async `confirm(date)` callback and the
8
+ * committed canonical value is applied by the coordinator, so all canonical
9
+ * reflection and events stay at the picker level.
10
+ */
11
+ export declare class DateFieldController {
12
+ input: HTMLInputElement;
13
+ messages: Record<string, string>;
14
+ adapter: {
15
+ locale: string;
16
+ placeholder: string;
17
+ format(value: string): string;
18
+ parse(text: string): string;
19
+ };
20
+ /** @type {HTMLInputElement | null} */
21
+ hidden: HTMLInputElement | null;
22
+ /** Current canonical value (YYYY-MM-DD or ""). */
23
+ canonical: string;
24
+ _dirty: boolean;
25
+ _commitId: number;
26
+ _originalName: string;
27
+ /** @type {MutationObserver | null} */
28
+ _attributeObserver: MutationObserver | null;
29
+ /** @type {(() => void) | null} */
30
+ onAttributesChanged: (() => void) | null;
31
+ /**
32
+ * Async availability gate for a parsed date. Returning `{ ok: false }`
33
+ * marks the target unavailable. Swappable at runtime.
34
+ * @type {((date: string) => Promise<{ok: boolean, message?: string}>) | null}
35
+ */
36
+ confirm: ((date: string) => Promise<{
37
+ ok: boolean;
38
+ message?: string;
39
+ }>) | null;
40
+ /**
41
+ * @param {HTMLInputElement} input
42
+ * @param {{messages?: Record<string, string>, locale?: string}} [options]
43
+ */
44
+ constructor(input: HTMLInputElement, options?: {
45
+ messages?: Record<string, string>;
46
+ locale?: string;
47
+ });
48
+ /** @param {string} locale */
49
+ setLocale(locale: string): void;
50
+ /** @param {Record<string, string>} messages */
51
+ setMessages(messages: Record<string, string>): void;
52
+ /** @param {string} value */
53
+ format(value: string): string;
54
+ /** @param {string} text */
55
+ parse(text: string): string;
56
+ get placeholder(): string;
57
+ get isDisabled(): boolean;
58
+ get isReadOnly(): boolean;
59
+ /** Create the hidden canonical field for an authored `name` and observe the
60
+ * input for dynamic name/form/disabled changes. */
61
+ setupFormValue(): void;
62
+ /** Sync the hidden field with the current dynamic attributes. */
63
+ syncInputState(): void;
64
+ /** Invalidate any pending (possibly in-flight) commit. */
65
+ dirty(): void;
66
+ /** Whether the user edited the visible text since the last application. */
67
+ get isDirty(): boolean;
68
+ /** Live text input: the raw text no longer matches the canonical value, so
69
+ * the hidden ISO must not submit it. */
70
+ handleInput(): void;
71
+ /**
72
+ * Commit the visible text. Returns the parsed canonical date on success, the
73
+ * empty string on a clear, or a falsy marker for invalid/stale commits. The
74
+ * caller applies the canonical value so reflection and events stay central.
75
+ * @returns {Promise<{status: "ok" | "clear" | "invalid" | "stale", value?: string}>}
76
+ */
77
+ commit(): Promise<{
78
+ status: "ok" | "clear" | "invalid" | "stale";
79
+ value?: string;
80
+ }>;
81
+ /**
82
+ * @param {string} value
83
+ * @param {{format?: boolean}} [options]
84
+ */
85
+ setCanonical(value: string, options?: {
86
+ format?: boolean;
87
+ }): void;
88
+ /** Restore value from `input.defaultValue` (native form reset). */
89
+ restoreDefault(): string;
90
+ /** Remove the hidden field and attribute observer, restoring the original
91
+ * authored `name` on the visible input. */
92
+ teardown(): void;
93
+ }
94
+ //# sourceMappingURL=date-field.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-field.d.ts","sourceRoot":"","sources":["../../src/date-field.js"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AACH,qBAAa,mBAAmB;IAMvB,KAAK;IACL,QAAQ;IACR,OAAO;;;;;;IACZ,sCAAsC;IACjC,MAAM,EADA,gBAAgB,GAAG,IAAI;IAElC,kDAAkD;IAC7C,SAAS;IACT,MAAM;IACN,SAAS;IACT,aAAa;IAClB,sCAAsC;IACjC,kBAAkB,EADZ,gBAAgB,GAAG,IAAI;IAElC,kCAAkC;IAC7B,mBAAmB,EADb,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI;IAE9B;;;;OAIG;IACE,OAAO,EAFF,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;QAAC,EAAE,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC,CAAC,GAAG,IAAI;IAtB/E;;;OAGG;IACH,YAAY,KAAK,EAHN,gBAGM,EAAE,OAAO,AAFvB,CAAuE,EAA/D;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAE/B,EAqB9B;IAED,6BAA6B;IAC7B,SAAS,CAAC,MAAM,EADJ,MACI,QAEf;IAED,+CAA+C;IAC/C,WAAW,CAAC,QAAQ,EADR,MAAM,CAAC,MAAM,EAAE,MAAM,CACb,QAEnB;IAED,4BAA4B;IAC5B,MAAM,CAAC,KAAK,EADA,MACA,UAEX;IAED,2BAA2B;IAC3B,KAAK,CAAC,IAAI,EADE,MACF,UAET;IAED,IAAI,WAAW,WAEd;IAED,IAAI,UAAU,YAEb;IAED,IAAI,UAAU,YAEb;IAED;uDACmD;IACnD,cAAc,SASb;IAED,iEAAiE;IACjE,cAAc,SAmBb;IAED,0DAA0D;IAC1D,KAAK,SAEJ;IAED,2EAA2E;IAC3E,IAAI,OAAO,YAEV;IAED;4CACwC;IACxC,WAAW,SAYV;IAED;;;;;OAKG;IACG,MAAM,IAFC,OAAO,CAAC;QAAC,MAAM,EAAE,IAAI,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAC,CAAC,CA4BnF;IAED;;;OAGG;IACH,YAAY,CAAC,KAAK,EAHP,MAGO,EAAE,OAAO,AAFxB,CAAqC,EAA7B;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAEI,QAW/B;IAED,mEAAmE;IACnE,cAAc,WAIb;IAED;+CAC2C;IAC3C,QAAQ,SAOP;CACF"}
@@ -0,0 +1,258 @@
1
+ import { DateCalendarElement } from "./date-calendar.js";
2
+ import { DateFieldController } from "./date-field.js";
3
+ import { DateRangeController } from "./date-range.js";
4
+ export declare class DatePickerElement extends HTMLElement {
5
+ _id: string;
6
+ _connected: boolean;
7
+ _reflecting: boolean;
8
+ _value: string;
9
+ _input: HTMLInputElement | null;
10
+ /** @type {DateFieldController | null} */
11
+ _field: DateFieldController | null;
12
+ /** @type {DateFieldController[] | null} */
13
+ _fields: DateFieldController[] | null;
14
+ /** @type {DateRangeController | null} */
15
+ _range: DateRangeController | null;
16
+ _orderTags: Set<any>;
17
+ /** @type {"" | "start" | "end"} */
18
+ _lastFocusEndpoint: "" | "start" | "end";
19
+ _rangeCommitId: number;
20
+ /** Map of clicked/keyboard-activated grid dates to the generation at click
21
+ * time (range mode supersession/stale protection). @type {Map<string, number>} */
22
+ _pendingIntents: Map<string, number>;
23
+ _button: HTMLButtonElement | null;
24
+ _panel: HTMLDivElement | null;
25
+ _calendar: DateCalendarElement | null;
26
+ _originalDescribedBy: string;
27
+ _rangeOriginalDescribedBy: string[];
28
+ _formatHint: HTMLSpanElement | null;
29
+ _generatedPlaceholder: boolean;
30
+ _controller: AbortController | null;
31
+ _stopTracking: (() => void) | null;
32
+ _open: boolean;
33
+ _suppressFocusOpen: boolean;
34
+ _messages: {
35
+ chooseDate: string;
36
+ changeDate: string;
37
+ previousMonth: string;
38
+ nextMonth: string;
39
+ month: string;
40
+ year: string;
41
+ calendar: string;
42
+ unavailable: string;
43
+ invalidDate: string;
44
+ unavailableDate: string;
45
+ formatHint: string;
46
+ week: string;
47
+ rangeStart: string;
48
+ rangeInRange: string;
49
+ rangeEnd: string;
50
+ rangeSingle: string;
51
+ rangeOrderStart: string;
52
+ rangeOrderEnd: string;
53
+ };
54
+ /** @type {any} */
55
+ _source: any;
56
+ /** @type {any} */
57
+ _dateState: any;
58
+ /** @type {any} */
59
+ _renderDay: any;
60
+ /** @type {any} */
61
+ _isDateDisabled: any;
62
+ static observedAttributes: string[];
63
+ constructor();
64
+ _rangeMode(): boolean;
65
+ connectedCallback(): void;
66
+ _connectSingle(): void;
67
+ _connectRange(): void;
68
+ disconnectedCallback(): void;
69
+ /** @param {DateFieldController | null} field */
70
+ _teardownField(field: DateFieldController | null): void;
71
+ /** @param {string} name @param {string|null} oldValue @param {string|null} newValue */
72
+ attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
73
+ /** @public */
74
+ get input(): HTMLInputElement | null | undefined;
75
+ /** @public */
76
+ get calendar(): DateCalendarElement | null;
77
+ /** @public */
78
+ get value(): string | undefined;
79
+ set value(value: string | undefined);
80
+ /** @public */
81
+ get range(): {
82
+ start: string;
83
+ end: string;
84
+ } | undefined;
85
+ set range(value: {
86
+ start: string;
87
+ end: string;
88
+ } | undefined);
89
+ /** @public */
90
+ get locale(): string;
91
+ set locale(value: string);
92
+ /** @public */
93
+ get min(): string;
94
+ set min(value: string);
95
+ /** @public */
96
+ get max(): string;
97
+ set max(value: string);
98
+ /** @public */
99
+ get openOnFocus(): boolean;
100
+ set openOnFocus(value: boolean);
101
+ /** @public */
102
+ get open(): boolean;
103
+ /** @public */
104
+ get messages(): {
105
+ chooseDate: string;
106
+ changeDate: string;
107
+ previousMonth: string;
108
+ nextMonth: string;
109
+ month: string;
110
+ year: string;
111
+ calendar: string;
112
+ unavailable: string;
113
+ invalidDate: string;
114
+ unavailableDate: string;
115
+ formatHint: string;
116
+ week: string;
117
+ rangeStart: string;
118
+ rangeInRange: string;
119
+ rangeEnd: string;
120
+ rangeSingle: string;
121
+ rangeOrderStart: string;
122
+ rangeOrderEnd: string;
123
+ };
124
+ set messages(value: {
125
+ chooseDate: string;
126
+ changeDate: string;
127
+ previousMonth: string;
128
+ nextMonth: string;
129
+ month: string;
130
+ year: string;
131
+ calendar: string;
132
+ unavailable: string;
133
+ invalidDate: string;
134
+ unavailableDate: string;
135
+ formatHint: string;
136
+ week: string;
137
+ rangeStart: string;
138
+ rangeInRange: string;
139
+ rangeEnd: string;
140
+ rangeSingle: string;
141
+ rangeOrderStart: string;
142
+ rangeOrderEnd: string;
143
+ });
144
+ /** @public @returns {any} */
145
+ get source(): any;
146
+ set source(value: any);
147
+ /** @public @returns {any} */
148
+ get dateState(): any;
149
+ set dateState(value: any);
150
+ /** @public @returns {any} */
151
+ get renderDay(): any;
152
+ set renderDay(value: any);
153
+ /** @public @returns {any} */
154
+ get isDateDisabled(): any;
155
+ set isDateDisabled(value: any);
156
+ _adapter(): {
157
+ locale: string;
158
+ placeholder: string;
159
+ format(value: string): string;
160
+ parse(text: string): string;
161
+ };
162
+ _setupFormValue(): void;
163
+ _syncInputState(): void;
164
+ _syncRangeFields(): void;
165
+ _setRangeAria(): void;
166
+ /** @param {HTMLInputElement} [anchorInput] */
167
+ _build(anchorInput?: HTMLInputElement): void;
168
+ _bind(): void;
169
+ _bindRange(): void;
170
+ /** @param {"" | "start" | "end"} endpoint @param {KeyboardEvent} event */
171
+ _onFieldKeyDown(endpoint: "" | "start" | "end", event: KeyboardEvent): void;
172
+ /** @param {"" | "start" | "end"} endpoint @param {FocusEvent} event */
173
+ _onFieldFocus(endpoint: "" | "start" | "end", event: FocusEvent): void;
174
+ /** Record range-mode grid activation intent (click or keyboard) so a stale,
175
+ * late-confirmed dateactivate can be recognized and dropped. Each new grid
176
+ * activation supersedes every earlier pending one.
177
+ * @param {Event} event */
178
+ _captureGridIntent(event: Event): void;
179
+ /** @param {KeyboardEvent} event */
180
+ _onEscape(event: KeyboardEvent): void;
181
+ _syncCalendarOptions(): void;
182
+ _refreshLocale(): void;
183
+ _refreshButtonLabel(): void;
184
+ _refreshRangeButtonLabel(): void;
185
+ /** @param {string} value */
186
+ _reflectValue(value: string): void;
187
+ /** @param {string} value @param {{emit?:boolean,format?:boolean,reflect?:boolean}} [options] */
188
+ _setValue(value: string, options?: {
189
+ emit?: boolean;
190
+ format?: boolean;
191
+ reflect?: boolean;
192
+ }): void;
193
+ /**
194
+ * Calendar-backed availability gate injected into the field controllers.
195
+ * A cancelled or failed source load confirms nothing: do not fill the
196
+ * submitted ISO field nor treat the date as available.
197
+ * @param {string} date @returns {Promise<{ok: boolean, message?: string}>}
198
+ */
199
+ _confirmDate(date: string): Promise<{
200
+ ok: boolean;
201
+ message?: string;
202
+ }>;
203
+ /** @param {boolean} emit @param {{force?: boolean}} [options] */
204
+ _commitText(emit: boolean, options?: {
205
+ force?: boolean;
206
+ }): Promise<boolean>;
207
+ /** @param {"start" | "end"} which */
208
+ _commitFieldText(which: "start" | "end"): Promise<boolean>;
209
+ /** @param {"start" | "end"} which @param {string} value
210
+ * @param {{emit?:boolean, format?:boolean, user?:boolean}} [options] @returns {boolean} */
211
+ _setBound(which: "start" | "end", value: string, options?: {
212
+ emit?: boolean;
213
+ format?: boolean;
214
+ user?: boolean;
215
+ }): boolean;
216
+ /** Atomic pair update: canonical + visible + hidden before one event.
217
+ * @param {string} start @param {string} end @param {{emit?:boolean, format?:boolean}} [options] */
218
+ _setRange(start: string, end: string, options?: {
219
+ emit?: boolean;
220
+ format?: boolean;
221
+ }): void;
222
+ /** @param {"start" | "end"} which */
223
+ _boundCanonical(which: "start" | "end"): string;
224
+ _emitRangeChange(): void;
225
+ /** Forward only a displayable range to the calendar band. An inverted or
226
+ * start-less business range shows no misleading band. */
227
+ _syncHighlight(): void;
228
+ /**
229
+ * Cross-bound validity: the order error is attributed to the bound that was
230
+ * just modified; the other bound only loses a stale order error, never its
231
+ * independent parse/source validity.
232
+ * @param {"start" | "end"} which
233
+ */
234
+ _revalidateRange(which: "start" | "end"): void;
235
+ _restoreDefault(): void;
236
+ _restoreRangeDefault(): void;
237
+ /** @param {"start" | "end"} which */
238
+ _focusField(which: "start" | "end"): void;
239
+ _focusInput(): void;
240
+ /** @returns {"" | "start" | "end"} */
241
+ _resolveRangeEndpoint(): "" | "start" | "end";
242
+ /** @public */
243
+ validate(): Promise<boolean>;
244
+ /** @public @param {{moveFocus?:boolean}} [options] */
245
+ show(options?: {
246
+ moveFocus?: boolean;
247
+ }): void;
248
+ /** @param {boolean} expanded */
249
+ _setExpanded(expanded: boolean): void;
250
+ /** @public @param {boolean} [restoreFocus] */
251
+ hide(restoreFocus?: boolean): void;
252
+ /** The bound to restore focus to after closing a range popup: the active
253
+ * endpoint first (it moved after the first selection), then the next
254
+ * focusable bound.
255
+ * @returns {"" | "start" | "end"} */
256
+ _restoreFocusEndpoint(): "" | "start" | "end";
257
+ }
258
+ //# sourceMappingURL=date-picker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-picker.d.ts","sourceRoot":"","sources":["../../src/date-picker.js"],"names":[],"mappings":"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"}