universal-datetime-picker 2.0.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.
@@ -0,0 +1,271 @@
1
+ import { Dayjs } from 'dayjs';
2
+
3
+ type DateTimeMode = "datetime" | "date" | "time";
4
+ /**
5
+ * How date and time panels are arranged when `mode="datetime"`.
6
+ * - `combined` (default): both panels visible at once (no Date/Time tabs)
7
+ * - `tabs`: separate Date / Time tabs (legacy layout)
8
+ */
9
+ type DateTimeLayout = "combined" | "tabs";
10
+ type DateTimeValue = Date | string | Dayjs | null;
11
+ /**
12
+ * Time-only selection when `asString={false}` and `mode="time"`.
13
+ * `hour` is 1–12; `hour24` is 0–23.
14
+ */
15
+ interface TimeValue {
16
+ hour: number;
17
+ hour24: number;
18
+ minute: number;
19
+ second: number;
20
+ ampm: "AM" | "PM";
21
+ formatted: string;
22
+ }
23
+ /** Value passed to `onChange` for DateTime / DateTimeInput. */
24
+ type DateTimeChangeValue = Date | TimeValue | string | null;
25
+ /** Optional chrome strings for UI labels (not a full i18n suite). */
26
+ interface DateTimeLabels {
27
+ date?: string;
28
+ time?: string;
29
+ clear?: string;
30
+ close?: string;
31
+ ok?: string;
32
+ start?: string;
33
+ end?: string;
34
+ chooseDate?: string;
35
+ chooseDateRange?: string;
36
+ chooseMonth?: string;
37
+ chooseYear?: string;
38
+ previousMonth?: string;
39
+ nextMonth?: string;
40
+ previousYear?: string;
41
+ nextYear?: string;
42
+ selectEnd?: string;
43
+ }
44
+ declare const DEFAULT_LABELS: Required<DateTimeLabels>;
45
+ /** Calendar drill-down panel for month / year selection. */
46
+ type CalendarPanel = "day" | "month" | "year";
47
+ /** Shared picker options (framework-agnostic). */
48
+ interface DateTimeBaseOptions {
49
+ value?: DateTimeValue;
50
+ defaultValue?: DateTimeValue;
51
+ onChange?: (value: DateTimeChangeValue) => void;
52
+ asString?: boolean;
53
+ showSeconds?: boolean;
54
+ format?: string;
55
+ mode?: DateTimeMode;
56
+ layout?: DateTimeLayout;
57
+ minDate?: DateTimeValue;
58
+ maxDate?: DateTimeValue;
59
+ disablePastDates?: boolean;
60
+ disableFutureDates?: boolean;
61
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
62
+ use12Hours?: boolean;
63
+ inline?: boolean;
64
+ className?: string;
65
+ /** Inline style object or CSS string (vanilla / WC). */
66
+ style?: Partial<CSSStyleDeclaration> | string | Record<string, string | number>;
67
+ locale?: string;
68
+ labels?: DateTimeLabels;
69
+ theme?: "light" | "dark";
70
+ open?: boolean;
71
+ defaultOpen?: boolean;
72
+ onOpenChange?: (open: boolean) => void;
73
+ anchorEl?: HTMLElement | null;
74
+ popover?: boolean;
75
+ }
76
+ interface DateRangeValue {
77
+ start: Date | string | null;
78
+ end: Date | string | null;
79
+ }
80
+ interface DateTimeRangeOptions {
81
+ value?: {
82
+ start: DateTimeValue;
83
+ end: DateTimeValue;
84
+ } | null;
85
+ defaultValue?: {
86
+ start: DateTimeValue;
87
+ end: DateTimeValue;
88
+ } | null;
89
+ onChange?: (value: DateRangeValue) => void;
90
+ asString?: boolean;
91
+ format?: string;
92
+ minDate?: DateTimeValue;
93
+ maxDate?: DateTimeValue;
94
+ disablePastDates?: boolean;
95
+ disableFutureDates?: boolean;
96
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
97
+ locale?: string;
98
+ labels?: DateTimeLabels;
99
+ open?: boolean;
100
+ defaultOpen?: boolean;
101
+ onOpenChange?: (open: boolean) => void;
102
+ inline?: boolean;
103
+ className?: string;
104
+ style?: Partial<CSSStyleDeclaration> | string | Record<string, string | number>;
105
+ }
106
+ interface CalendarDay {
107
+ date: Dayjs;
108
+ isCurrentMonth: boolean;
109
+ isCurrentDate: boolean;
110
+ isFuture: boolean;
111
+ isPast: boolean;
112
+ isWeekend: boolean;
113
+ isDisabled: boolean;
114
+ isSelected: boolean;
115
+ isInRange?: boolean;
116
+ isRangeStart?: boolean;
117
+ isRangeEnd?: boolean;
118
+ }
119
+
120
+ type Listener = () => void;
121
+ interface PickerSnapshot {
122
+ draft: Dayjs;
123
+ viewMonth: Dayjs;
124
+ calPanel: CalendarPanel;
125
+ tab: "date" | "time";
126
+ showHours: boolean;
127
+ showMinutes: boolean;
128
+ showSecondsOpen: boolean;
129
+ showAmPm: boolean;
130
+ focusedDay: Dayjs;
131
+ open: boolean;
132
+ mode: DateTimeMode;
133
+ layout: DateTimeLayout;
134
+ showSeconds: boolean;
135
+ use12Hours: boolean;
136
+ inline: boolean;
137
+ popover: boolean;
138
+ weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6;
139
+ locale: string;
140
+ labels: Required<DateTimeLabels>;
141
+ resolvedFormat: string;
142
+ asString: boolean | undefined;
143
+ className?: string;
144
+ theme?: "light" | "dark";
145
+ weeks: CalendarDay[][];
146
+ weekdayLabels: string[];
147
+ showDate: boolean;
148
+ showTime: boolean;
149
+ useTabs: boolean;
150
+ showDatePanel: boolean;
151
+ showTimePanel: boolean;
152
+ showModeTabs: boolean;
153
+ hour24: number;
154
+ hour12: number;
155
+ isAm: boolean;
156
+ hourOptions: string[];
157
+ displayHour: string;
158
+ displayMinute: string;
159
+ displaySecond: string;
160
+ minuteOptions: string[];
161
+ }
162
+ type PickerControllerOptions = DateTimeBaseOptions;
163
+ declare class PickerController {
164
+ private listeners;
165
+ private options;
166
+ private draft;
167
+ private viewMonth;
168
+ private calPanel;
169
+ private tab;
170
+ private showHours;
171
+ private showMinutes;
172
+ private showSecondsOpen;
173
+ private showAmPm;
174
+ private focusedDay;
175
+ private open;
176
+ private snapshot;
177
+ constructor(options?: PickerControllerOptions);
178
+ subscribe: (listener: Listener) => (() => void);
179
+ getSnapshot: () => PickerSnapshot;
180
+ /** Stable for useSyncExternalStore — returns same reference until mutate. */
181
+ getServerSnapshot: () => PickerSnapshot;
182
+ setOptions(partial: Partial<PickerControllerOptions>): void;
183
+ private getResolvedFormat;
184
+ private getLabels;
185
+ private emit;
186
+ private buildSnapshot;
187
+ setOpen(open: boolean): void;
188
+ close(): void;
189
+ setTab(tab: "date" | "time"): void;
190
+ setCalPanel(panel: CalendarPanel): void;
191
+ setViewMonth(next: Dayjs | ((prev: Dayjs) => Dayjs)): void;
192
+ selectDay(day: Dayjs): void;
193
+ setHour(hourValue: number): void;
194
+ setMinute(minute: number): void;
195
+ setSecond(second: number): void;
196
+ setAmPm(isAm: boolean): void;
197
+ toggleHours(): void;
198
+ toggleMinutes(): void;
199
+ toggleSeconds(): void;
200
+ toggleAmPm(): void;
201
+ closeTimeColumns(): void;
202
+ selectHourOption(opt: string): void;
203
+ selectMinuteOption(opt: string): void;
204
+ selectSecondOption(opt: string): void;
205
+ selectAmPmOption(opt: string): void;
206
+ handleGridKeyDown(key: string): boolean;
207
+ confirm(): DateTimeChangeValue;
208
+ clear(): void;
209
+ /** Year window helpers for month/year panels */
210
+ yearWindowStart(year: number): number;
211
+ navigatePrev(): void;
212
+ navigateNext(): void;
213
+ selectMonth(monthIndex: number): void;
214
+ selectYear(year: number): void;
215
+ }
216
+
217
+ interface RangeSnapshot {
218
+ start: Dayjs | null;
219
+ end: Dayjs | null;
220
+ hoverEnd: Dayjs | null;
221
+ viewMonth: Dayjs;
222
+ focusedDay: Dayjs;
223
+ calPanel: CalendarPanel;
224
+ open: boolean;
225
+ inline: boolean;
226
+ format: string;
227
+ asString: boolean | undefined;
228
+ weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6;
229
+ locale: string;
230
+ labels: Required<DateTimeLabels>;
231
+ className?: string;
232
+ weeks: CalendarDay[][];
233
+ weekdayLabels: string[];
234
+ }
235
+ declare class RangeController {
236
+ private listeners;
237
+ private options;
238
+ private start;
239
+ private end;
240
+ private hoverEnd;
241
+ private viewMonth;
242
+ private focusedDay;
243
+ private calPanel;
244
+ private open;
245
+ private snapshot;
246
+ constructor(options?: DateTimeRangeOptions);
247
+ private parseRange;
248
+ subscribe: (listener: Listener) => (() => void);
249
+ getSnapshot: () => RangeSnapshot;
250
+ getServerSnapshot: () => RangeSnapshot;
251
+ setOptions(partial: Partial<DateTimeRangeOptions>): void;
252
+ private getLabels;
253
+ private emit;
254
+ private buildSnapshot;
255
+ setOpen(open: boolean): void;
256
+ close(): void;
257
+ setCalPanel(panel: CalendarPanel): void;
258
+ setViewMonth(next: Dayjs | ((prev: Dayjs) => Dayjs)): void;
259
+ navigatePrev(): void;
260
+ navigateNext(): void;
261
+ selectMonth(monthIndex: number): void;
262
+ selectYear(year: number): void;
263
+ private emitRange;
264
+ pickDay(day: Dayjs): void;
265
+ setHoverEnd(day: Dayjs | null): void;
266
+ handleGridKeyDown(key: string): boolean;
267
+ confirm(): DateRangeValue | null;
268
+ clear(): void;
269
+ }
270
+
271
+ export { type CalendarDay as C, type DateTimeMode as D, type Listener as L, PickerController as P, RangeController as R, type TimeValue as T, type DateTimeValue as a, type CalendarPanel as b, DEFAULT_LABELS as c, type DateRangeValue as d, type DateTimeBaseOptions as e, type DateTimeChangeValue as f, type DateTimeLabels as g, type DateTimeLayout as h, type DateTimeRangeOptions as i, type PickerControllerOptions as j, type PickerSnapshot as k, type RangeSnapshot as l };
@@ -0,0 +1,271 @@
1
+ import { Dayjs } from 'dayjs';
2
+
3
+ type DateTimeMode = "datetime" | "date" | "time";
4
+ /**
5
+ * How date and time panels are arranged when `mode="datetime"`.
6
+ * - `combined` (default): both panels visible at once (no Date/Time tabs)
7
+ * - `tabs`: separate Date / Time tabs (legacy layout)
8
+ */
9
+ type DateTimeLayout = "combined" | "tabs";
10
+ type DateTimeValue = Date | string | Dayjs | null;
11
+ /**
12
+ * Time-only selection when `asString={false}` and `mode="time"`.
13
+ * `hour` is 1–12; `hour24` is 0–23.
14
+ */
15
+ interface TimeValue {
16
+ hour: number;
17
+ hour24: number;
18
+ minute: number;
19
+ second: number;
20
+ ampm: "AM" | "PM";
21
+ formatted: string;
22
+ }
23
+ /** Value passed to `onChange` for DateTime / DateTimeInput. */
24
+ type DateTimeChangeValue = Date | TimeValue | string | null;
25
+ /** Optional chrome strings for UI labels (not a full i18n suite). */
26
+ interface DateTimeLabels {
27
+ date?: string;
28
+ time?: string;
29
+ clear?: string;
30
+ close?: string;
31
+ ok?: string;
32
+ start?: string;
33
+ end?: string;
34
+ chooseDate?: string;
35
+ chooseDateRange?: string;
36
+ chooseMonth?: string;
37
+ chooseYear?: string;
38
+ previousMonth?: string;
39
+ nextMonth?: string;
40
+ previousYear?: string;
41
+ nextYear?: string;
42
+ selectEnd?: string;
43
+ }
44
+ declare const DEFAULT_LABELS: Required<DateTimeLabels>;
45
+ /** Calendar drill-down panel for month / year selection. */
46
+ type CalendarPanel = "day" | "month" | "year";
47
+ /** Shared picker options (framework-agnostic). */
48
+ interface DateTimeBaseOptions {
49
+ value?: DateTimeValue;
50
+ defaultValue?: DateTimeValue;
51
+ onChange?: (value: DateTimeChangeValue) => void;
52
+ asString?: boolean;
53
+ showSeconds?: boolean;
54
+ format?: string;
55
+ mode?: DateTimeMode;
56
+ layout?: DateTimeLayout;
57
+ minDate?: DateTimeValue;
58
+ maxDate?: DateTimeValue;
59
+ disablePastDates?: boolean;
60
+ disableFutureDates?: boolean;
61
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
62
+ use12Hours?: boolean;
63
+ inline?: boolean;
64
+ className?: string;
65
+ /** Inline style object or CSS string (vanilla / WC). */
66
+ style?: Partial<CSSStyleDeclaration> | string | Record<string, string | number>;
67
+ locale?: string;
68
+ labels?: DateTimeLabels;
69
+ theme?: "light" | "dark";
70
+ open?: boolean;
71
+ defaultOpen?: boolean;
72
+ onOpenChange?: (open: boolean) => void;
73
+ anchorEl?: HTMLElement | null;
74
+ popover?: boolean;
75
+ }
76
+ interface DateRangeValue {
77
+ start: Date | string | null;
78
+ end: Date | string | null;
79
+ }
80
+ interface DateTimeRangeOptions {
81
+ value?: {
82
+ start: DateTimeValue;
83
+ end: DateTimeValue;
84
+ } | null;
85
+ defaultValue?: {
86
+ start: DateTimeValue;
87
+ end: DateTimeValue;
88
+ } | null;
89
+ onChange?: (value: DateRangeValue) => void;
90
+ asString?: boolean;
91
+ format?: string;
92
+ minDate?: DateTimeValue;
93
+ maxDate?: DateTimeValue;
94
+ disablePastDates?: boolean;
95
+ disableFutureDates?: boolean;
96
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
97
+ locale?: string;
98
+ labels?: DateTimeLabels;
99
+ open?: boolean;
100
+ defaultOpen?: boolean;
101
+ onOpenChange?: (open: boolean) => void;
102
+ inline?: boolean;
103
+ className?: string;
104
+ style?: Partial<CSSStyleDeclaration> | string | Record<string, string | number>;
105
+ }
106
+ interface CalendarDay {
107
+ date: Dayjs;
108
+ isCurrentMonth: boolean;
109
+ isCurrentDate: boolean;
110
+ isFuture: boolean;
111
+ isPast: boolean;
112
+ isWeekend: boolean;
113
+ isDisabled: boolean;
114
+ isSelected: boolean;
115
+ isInRange?: boolean;
116
+ isRangeStart?: boolean;
117
+ isRangeEnd?: boolean;
118
+ }
119
+
120
+ type Listener = () => void;
121
+ interface PickerSnapshot {
122
+ draft: Dayjs;
123
+ viewMonth: Dayjs;
124
+ calPanel: CalendarPanel;
125
+ tab: "date" | "time";
126
+ showHours: boolean;
127
+ showMinutes: boolean;
128
+ showSecondsOpen: boolean;
129
+ showAmPm: boolean;
130
+ focusedDay: Dayjs;
131
+ open: boolean;
132
+ mode: DateTimeMode;
133
+ layout: DateTimeLayout;
134
+ showSeconds: boolean;
135
+ use12Hours: boolean;
136
+ inline: boolean;
137
+ popover: boolean;
138
+ weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6;
139
+ locale: string;
140
+ labels: Required<DateTimeLabels>;
141
+ resolvedFormat: string;
142
+ asString: boolean | undefined;
143
+ className?: string;
144
+ theme?: "light" | "dark";
145
+ weeks: CalendarDay[][];
146
+ weekdayLabels: string[];
147
+ showDate: boolean;
148
+ showTime: boolean;
149
+ useTabs: boolean;
150
+ showDatePanel: boolean;
151
+ showTimePanel: boolean;
152
+ showModeTabs: boolean;
153
+ hour24: number;
154
+ hour12: number;
155
+ isAm: boolean;
156
+ hourOptions: string[];
157
+ displayHour: string;
158
+ displayMinute: string;
159
+ displaySecond: string;
160
+ minuteOptions: string[];
161
+ }
162
+ type PickerControllerOptions = DateTimeBaseOptions;
163
+ declare class PickerController {
164
+ private listeners;
165
+ private options;
166
+ private draft;
167
+ private viewMonth;
168
+ private calPanel;
169
+ private tab;
170
+ private showHours;
171
+ private showMinutes;
172
+ private showSecondsOpen;
173
+ private showAmPm;
174
+ private focusedDay;
175
+ private open;
176
+ private snapshot;
177
+ constructor(options?: PickerControllerOptions);
178
+ subscribe: (listener: Listener) => (() => void);
179
+ getSnapshot: () => PickerSnapshot;
180
+ /** Stable for useSyncExternalStore — returns same reference until mutate. */
181
+ getServerSnapshot: () => PickerSnapshot;
182
+ setOptions(partial: Partial<PickerControllerOptions>): void;
183
+ private getResolvedFormat;
184
+ private getLabels;
185
+ private emit;
186
+ private buildSnapshot;
187
+ setOpen(open: boolean): void;
188
+ close(): void;
189
+ setTab(tab: "date" | "time"): void;
190
+ setCalPanel(panel: CalendarPanel): void;
191
+ setViewMonth(next: Dayjs | ((prev: Dayjs) => Dayjs)): void;
192
+ selectDay(day: Dayjs): void;
193
+ setHour(hourValue: number): void;
194
+ setMinute(minute: number): void;
195
+ setSecond(second: number): void;
196
+ setAmPm(isAm: boolean): void;
197
+ toggleHours(): void;
198
+ toggleMinutes(): void;
199
+ toggleSeconds(): void;
200
+ toggleAmPm(): void;
201
+ closeTimeColumns(): void;
202
+ selectHourOption(opt: string): void;
203
+ selectMinuteOption(opt: string): void;
204
+ selectSecondOption(opt: string): void;
205
+ selectAmPmOption(opt: string): void;
206
+ handleGridKeyDown(key: string): boolean;
207
+ confirm(): DateTimeChangeValue;
208
+ clear(): void;
209
+ /** Year window helpers for month/year panels */
210
+ yearWindowStart(year: number): number;
211
+ navigatePrev(): void;
212
+ navigateNext(): void;
213
+ selectMonth(monthIndex: number): void;
214
+ selectYear(year: number): void;
215
+ }
216
+
217
+ interface RangeSnapshot {
218
+ start: Dayjs | null;
219
+ end: Dayjs | null;
220
+ hoverEnd: Dayjs | null;
221
+ viewMonth: Dayjs;
222
+ focusedDay: Dayjs;
223
+ calPanel: CalendarPanel;
224
+ open: boolean;
225
+ inline: boolean;
226
+ format: string;
227
+ asString: boolean | undefined;
228
+ weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6;
229
+ locale: string;
230
+ labels: Required<DateTimeLabels>;
231
+ className?: string;
232
+ weeks: CalendarDay[][];
233
+ weekdayLabels: string[];
234
+ }
235
+ declare class RangeController {
236
+ private listeners;
237
+ private options;
238
+ private start;
239
+ private end;
240
+ private hoverEnd;
241
+ private viewMonth;
242
+ private focusedDay;
243
+ private calPanel;
244
+ private open;
245
+ private snapshot;
246
+ constructor(options?: DateTimeRangeOptions);
247
+ private parseRange;
248
+ subscribe: (listener: Listener) => (() => void);
249
+ getSnapshot: () => RangeSnapshot;
250
+ getServerSnapshot: () => RangeSnapshot;
251
+ setOptions(partial: Partial<DateTimeRangeOptions>): void;
252
+ private getLabels;
253
+ private emit;
254
+ private buildSnapshot;
255
+ setOpen(open: boolean): void;
256
+ close(): void;
257
+ setCalPanel(panel: CalendarPanel): void;
258
+ setViewMonth(next: Dayjs | ((prev: Dayjs) => Dayjs)): void;
259
+ navigatePrev(): void;
260
+ navigateNext(): void;
261
+ selectMonth(monthIndex: number): void;
262
+ selectYear(year: number): void;
263
+ private emitRange;
264
+ pickDay(day: Dayjs): void;
265
+ setHoverEnd(day: Dayjs | null): void;
266
+ handleGridKeyDown(key: string): boolean;
267
+ confirm(): DateRangeValue | null;
268
+ clear(): void;
269
+ }
270
+
271
+ export { type CalendarDay as C, type DateTimeMode as D, type Listener as L, PickerController as P, RangeController as R, type TimeValue as T, type DateTimeValue as a, type CalendarPanel as b, DEFAULT_LABELS as c, type DateRangeValue as d, type DateTimeBaseOptions as e, type DateTimeChangeValue as f, type DateTimeLabels as g, type DateTimeLayout as h, type DateTimeRangeOptions as i, type PickerControllerOptions as j, type PickerSnapshot as k, type RangeSnapshot as l };
@@ -0,0 +1,21 @@
1
+ import { j as PickerControllerOptions, P as PickerController, i as DateTimeRangeOptions, R as RangeController } from './rangeController-Bq35aBwe.mjs';
2
+
3
+ interface DateTimePickerHandle {
4
+ update: (options: Partial<PickerControllerOptions>) => void;
5
+ destroy: () => void;
6
+ getController: () => PickerController;
7
+ }
8
+ /**
9
+ * Mount a date/time picker into `target` (or as overlay/popover).
10
+ * Returns `{ update, destroy }` for imperative control.
11
+ */
12
+ declare function createDateTimePicker(target: HTMLElement, options?: PickerControllerOptions): DateTimePickerHandle;
13
+
14
+ interface DateTimeRangePickerHandle {
15
+ update: (options: Partial<DateTimeRangeOptions>) => void;
16
+ destroy: () => void;
17
+ getController: () => RangeController;
18
+ }
19
+ declare function createDateTimeRangePicker(target: HTMLElement, options?: DateTimeRangeOptions): DateTimeRangePickerHandle;
20
+
21
+ export { type DateTimePickerHandle as D, type DateTimeRangePickerHandle as a, createDateTimeRangePicker as b, createDateTimePicker as c };
@@ -0,0 +1,21 @@
1
+ import { j as PickerControllerOptions, P as PickerController, i as DateTimeRangeOptions, R as RangeController } from './rangeController-Bq35aBwe.js';
2
+
3
+ interface DateTimePickerHandle {
4
+ update: (options: Partial<PickerControllerOptions>) => void;
5
+ destroy: () => void;
6
+ getController: () => PickerController;
7
+ }
8
+ /**
9
+ * Mount a date/time picker into `target` (or as overlay/popover).
10
+ * Returns `{ update, destroy }` for imperative control.
11
+ */
12
+ declare function createDateTimePicker(target: HTMLElement, options?: PickerControllerOptions): DateTimePickerHandle;
13
+
14
+ interface DateTimeRangePickerHandle {
15
+ update: (options: Partial<DateTimeRangeOptions>) => void;
16
+ destroy: () => void;
17
+ getController: () => RangeController;
18
+ }
19
+ declare function createDateTimeRangePicker(target: HTMLElement, options?: DateTimeRangeOptions): DateTimeRangePickerHandle;
20
+
21
+ export { type DateTimePickerHandle as D, type DateTimeRangePickerHandle as a, createDateTimeRangePicker as b, createDateTimePicker as c };
package/dist/style.css ADDED
@@ -0,0 +1 @@
1
+ :root{--ctp-primary: #7cb342;--ctp-primary-dark: #558b2f;--ctp-primary-alt: #8bc34a;--ctp-surface: #ffffff;--ctp-surface-elevated: #ffffff;--ctp-muted: #f3f4f3;--ctp-muted-text: #6b7280;--ctp-fg: #1f2937;--ctp-fg-muted: #9ca3af;--ctp-weekend: transparent;--ctp-disabled: #d1d5db;--ctp-danger: #dc2626;--ctp-overlay: rgba(15, 23, 42, 0.45);--ctp-shadow: 0 10px 30px rgba(15, 23, 42, 0.12), 0 2px 8px rgba(15, 23, 42, 0.06);--ctp-border: #e5e7eb;--ctp-border-radius: 12px;--ctp-width: 320px;--ctp-font-size: 14px;--ctp-focus: #7cb342;--ctp-today: #7cb342;--ctp-selected-bg: #558b2f;--ctp-selected-fg: #ffffff;--ctp-hover-bg: color-mix(in srgb, var(--ctp-primary) 16%, white);--ctp-range-bg: color-mix(in srgb, var(--ctp-primary) 28%, white);--ctp-range-fg: #1f2937;--ctp-z-index: 1000;--ctp-day-size: 36px;--ctp-transition: 150ms ease}[data-ctp-theme=dark]{--ctp-primary: #9ccc65;--ctp-primary-dark: #aed581;--ctp-primary-alt: #8bc34a;--ctp-surface: #1f2937;--ctp-surface-elevated: #273549;--ctp-muted: #374151;--ctp-muted-text: #9ca3af;--ctp-fg: #f3f4f6;--ctp-fg-muted: #9ca3af;--ctp-weekend: transparent;--ctp-disabled: #4b5563;--ctp-danger: #f87171;--ctp-overlay: rgba(0, 0, 0, 0.6);--ctp-shadow: 0 12px 32px rgba(0, 0, 0, 0.45);--ctp-border: #374151;--ctp-focus: #9ccc65;--ctp-today: #9ccc65;--ctp-selected-bg: #8bc34a;--ctp-selected-fg: #14201a;--ctp-hover-bg: color-mix(in srgb, var(--ctp-primary) 22%, #1f2937);--ctp-range-bg: color-mix(in srgb, var(--ctp-primary) 32%, #1f2937);--ctp-range-fg: #f3f4f6}[data-ctp-theme=light]{--ctp-primary: #7cb342;--ctp-primary-dark: #558b2f;--ctp-primary-alt: #8bc34a;--ctp-surface: #ffffff;--ctp-surface-elevated: #ffffff;--ctp-muted: #f3f4f3;--ctp-muted-text: #6b7280;--ctp-fg: #1f2937;--ctp-fg-muted: #9ca3af;--ctp-weekend: transparent;--ctp-disabled: #d1d5db;--ctp-danger: #dc2626;--ctp-overlay: rgba(15, 23, 42, 0.45);--ctp-shadow: 0 10px 30px rgba(15, 23, 42, 0.12), 0 2px 8px rgba(15, 23, 42, 0.06);--ctp-border: #e5e7eb;--ctp-focus: #7cb342;--ctp-today: #7cb342;--ctp-selected-bg: #558b2f;--ctp-selected-fg: #ffffff;--ctp-hover-bg: color-mix(in srgb, var(--ctp-primary) 16%, white);--ctp-range-bg: color-mix(in srgb, var(--ctp-primary) 28%, white);--ctp-range-fg: #1f2937}@media(prefers-reduced-motion: reduce){:root{--ctp-transition: 0ms}}.ctp-visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.ctp-calendar-time-picker-absolute-container{position:fixed;inset:0;display:flex;justify-content:center;align-items:center;background-color:var(--ctp-overlay);overflow:auto;z-index:var(--ctp-z-index)}.ctp-input-root{display:inline-flex;flex-direction:column;gap:4px}.ctp-input{font:inherit;color:var(--ctp-fg);padding:10px 12px;border:1px solid var(--ctp-border);border-radius:8px;min-width:220px;background:var(--ctp-surface);cursor:pointer;transition:border-color var(--ctp-transition),box-shadow var(--ctp-transition)}.ctp-input:hover:not(:disabled){border-color:color-mix(in srgb, var(--ctp-primary) 50%, var(--ctp-border))}.ctp-input:focus-visible{outline:2px solid var(--ctp-focus);outline-offset:2px;border-color:var(--ctp-focus)}.ctp-input:disabled{cursor:not-allowed;opacity:.6}.ctp-calendar-time-picker{width:var(--ctp-width);max-width:calc(100vw - 24px);background-color:var(--ctp-surface-elevated);color:var(--ctp-fg);font-size:var(--ctp-font-size);border:1px solid var(--ctp-border);box-shadow:var(--ctp-shadow);border-radius:var(--ctp-border-radius);z-index:calc(var(--ctp-z-index) + 1);overflow:hidden;animation:ctp-popover-in var(--ctp-transition)}.ctp-calendar-time-picker.ctp-mode-time{width:200px}.ctp-calendar-time-picker.ctp-mode-time.ctp-use-12h{width:220px}.ctp-calendar-time-picker.ctp-mode-time.ctp-no-seconds{width:180px}.ctp-calendar-time-picker.ctp-mode-time.ctp-no-seconds.ctp-use-12h{width:200px}.ctp-mode-time .ctp-main-time{height:auto;min-height:0;padding:6px 8px 2px}.ctp-mode-time .ctp-main-time-header,.ctp-mode-time .ctp-main-time-body{padding:6px 0;gap:8px}.ctp-mode-time .ctp-main-time-body{position:static;top:auto;left:auto;margin-top:0;transform:none}.ctp-calendar-time-picker.ctp-mode-time{overflow:visible}.ctp-mode-time .ctp-main-time,.ctp-mode-time .ctp-main-time-body,.ctp-mode-time .ctp-box-time{overflow:visible}.ctp-mode-time .ctp-overflow-hours,.ctp-mode-time .ctp-overflow-minutes,.ctp-mode-time .ctp-overflow-seconds,.ctp-mode-time .ctp-overflow-am-pm{margin-top:0;z-index:3}.ctp-mode-time .ctp-footer{padding:8px;gap:4px}.ctp-mode-time .ctp-footer button{padding:5px 8px;font-size:.85em}.ctp-calendar-time-picker.ctp-popover{z-index:calc(var(--ctp-z-index) + 2)}@keyframes ctp-popover-in{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@media(prefers-reduced-motion: reduce){.ctp-calendar-time-picker{animation:none}}.ctp-header{display:flex;justify-content:center;align-items:center;padding:12px 14px;border-bottom:1px solid var(--ctp-border)}.ctp-range-title{font-weight:600;color:var(--ctp-primary-dark)}.ctp-button-container{display:flex;gap:4px;padding:3px;background:var(--ctp-muted);border-radius:999px}.ctp-button-container>*{padding:6px 16px;border-radius:999px;background-color:rgba(0,0,0,0);color:var(--ctp-muted-text);z-index:0;position:relative;cursor:pointer;display:inline-block;border:none;font:inherit;transition:background-color var(--ctp-transition),color var(--ctp-transition)}.ctp-button-container>*.ctp-active{background-color:var(--ctp-surface);color:var(--ctp-fg);box-shadow:0 1px 2px rgba(15,23,42,.08);z-index:1}.ctp-button-container>*:focus-visible{outline:2px solid var(--ctp-focus);outline-offset:1px}.ctp-date.ctp-active{margin-right:0}.ctp-time.ctp-active{margin-left:0}.ctp-body .ctp-month-year{display:flex;justify-content:space-between;align-items:center;color:var(--ctp-fg);padding:8px 12px 0;font-weight:600}.ctp-prev-month,.ctp-next-month{cursor:pointer;padding:6px 10px;background:rgba(0,0,0,0);border:none;color:inherit;font-size:1.25rem;line-height:1;border-radius:8px}.ctp-prev-month:hover,.ctp-next-month:hover{background:var(--ctp-muted)}.ctp-prev-month:focus-visible,.ctp-next-month:focus-visible{outline:2px solid var(--ctp-focus);outline-offset:1px}.ctp-current-month{font:inherit;font-weight:600;color:inherit;background:rgba(0,0,0,0);border:none;padding:4px 8px;border-radius:8px;cursor:pointer;line-height:1.2}button.ctp-current-month:hover{background:var(--ctp-muted)}button.ctp-current-month:focus-visible{outline:2px solid var(--ctp-focus);outline-offset:1px}span.ctp-current-month{cursor:default}.ctp-main-calendar{display:grid;gap:4px;grid-template-columns:repeat(7, 1fr);padding:10px 14px 14px}.ctp-month-grid,.ctp-year-grid{display:grid;gap:6px;grid-template-columns:repeat(3, 1fr);padding:10px 14px 14px;min-height:calc(var(--ctp-day-size)*6 + 20px + 20px)}.ctp-box-month,.ctp-box-year{width:100%;min-height:calc(var(--ctp-day-size) + 8px);padding:8px 4px;border-radius:8px;background-color:rgba(0,0,0,0);border:none;font:inherit;color:inherit;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:background-color var(--ctp-transition),color var(--ctp-transition)}.ctp-box-month:hover,.ctp-box-year:hover{background-color:var(--ctp-hover-bg);color:var(--ctp-fg)}.ctp-box-month:focus-visible,.ctp-box-year:focus-visible{outline:2px solid var(--ctp-focus);outline-offset:1px}.ctp-box-month.ctp-current,.ctp-box-year.ctp-current{color:var(--ctp-today);font-weight:700;box-shadow:inset 0 0 0 1px var(--ctp-today)}.ctp-box-month.ctp-current:hover,.ctp-box-year.ctp-current:hover{color:var(--ctp-today)}.ctp-main-calendar .ctp-box{text-align:center}.ctp-box-days{color:var(--ctp-fg-muted);font-size:.8em;font-weight:600;text-transform:uppercase;letter-spacing:.02em;padding:4px 0}.ctp-box-date{width:100%;min-height:var(--ctp-day-size);padding:0;border-radius:8px;background-color:rgba(0,0,0,0);border:none;font:inherit;color:inherit;display:inline-flex;align-items:center;justify-content:center;position:relative;transition:background-color var(--ctp-transition),color var(--ctp-transition)}.ctp-box-date:not(.not-current-month):not(.disabled-date):not(:disabled){cursor:pointer}.ctp-box-date:not(.not-current-month):not(.disabled-date):not(:disabled):not(.selected):not(.ctp-range-start):not(.ctp-range-end):hover{background-color:var(--ctp-hover-bg);color:var(--ctp-fg)}.ctp-box-date:focus-visible{outline:2px solid var(--ctp-focus);outline-offset:1px;z-index:1}.ctp-box-date.weekend-day:not(.selected):not(.ctp-in-range):not(.ctp-range-start):not(.ctp-range-end){color:var(--ctp-muted-text)}.ctp-box-date.selected,.ctp-box-date.ctp-range-start,.ctp-box-date.ctp-range-end{background-color:var(--ctp-selected-bg);color:var(--ctp-selected-fg)}.ctp-box-date.ctp-in-range:not(.selected):not(.ctp-range-start):not(.ctp-range-end){background-color:var(--ctp-range-bg);color:var(--ctp-range-fg);border-radius:0}.ctp-box-date.ctp-in-range:not(.selected):not(.ctp-range-start):not(.ctp-range-end):hover{background-color:color-mix(in srgb, var(--ctp-primary) 40%, var(--ctp-range-bg));color:var(--ctp-range-fg)}.ctp-box-date.ctp-range-start{border-radius:8px 0 0 8px}.ctp-box-date.ctp-range-end{border-radius:0 8px 8px 0}.ctp-box-date.ctp-range-start.ctp-range-end{border-radius:8px}.ctp-box-date.ctp-today:not(.selected):not(.ctp-range-start):not(.ctp-range-end)::after{content:"";position:absolute;bottom:5px;left:50%;width:4px;height:4px;border-radius:50%;background:var(--ctp-today);transform:translateX(-50%)}.ctp-box-date.not-current-month{cursor:not-allowed;color:var(--ctp-fg-muted);background-color:rgba(0,0,0,0);opacity:.45}.ctp-box-date.disabled-date:not(.not-current-month),.ctp-box-date:disabled:not(.not-current-month){cursor:not-allowed;background-color:rgba(0,0,0,0);color:var(--ctp-disabled);opacity:.7}.ctp-main-time{height:250px;position:relative}.ctp-layout-combined .ctp-body-calendar-time{border-top:1px solid var(--ctp-border);padding-bottom:8px}.ctp-layout-combined .ctp-main-time{height:auto;min-height:88px;padding:4px 0 12px}.ctp-layout-combined .ctp-main-time-body{position:static;top:auto;left:auto;margin-top:0;transform:none}.ctp-section-label{font-size:.75rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--ctp-fg-muted);padding:10px 14px 0}.ctp-main-time-header,.ctp-main-time-body{display:grid;gap:10px;grid-template-rows:30px;grid-template-columns:repeat(3, 36px);padding:10px 0;width:140px;margin:auto}.ctp-use-12h .ctp-main-time-header,.ctp-use-12h .ctp-main-time-body{grid-template-columns:repeat(4, 36px);width:180px}.ctp-no-seconds .ctp-main-time-header,.ctp-no-seconds .ctp-main-time-body{grid-template-columns:repeat(2, 36px);width:92px}.ctp-no-seconds.ctp-use-12h .ctp-main-time-header,.ctp-no-seconds.ctp-use-12h .ctp-main-time-body{grid-template-columns:repeat(3, 36px);width:132px}.ctp-main-time-header .ctp-box,.ctp-main-time-body .ctp-box{display:flex;justify-content:center;align-items:center;color:var(--ctp-fg-muted);font-size:.8em;font-weight:600}.ctp-box-time.not-opened .ctp-hour,.ctp-box-time.not-opened .ctp-minute,.ctp-box-time.not-opened .ctp-second,.ctp-box-time.not-opened .ctp-am-pm{background-color:var(--ctp-selected-bg);color:var(--ctp-selected-fg)}.ctp-box-time{position:relative}.ctp-box-time .ctp-initial-time{display:none;border:none;font:inherit;padding:6px;border-radius:6px;cursor:pointer;min-width:36px}.ctp-box-time .ctp-initial-time:focus-visible{outline:2px solid var(--ctp-focus);outline-offset:1px}.ctp-box-time.not-opened .ctp-initial-time{display:block}.ctp-overflow-hours,.ctp-overflow-minutes,.ctp-overflow-seconds,.ctp-overflow-am-pm{max-height:170px;overflow:auto;position:absolute;display:flex;flex-direction:column;align-items:center;gap:6px;margin-top:-23px;border:1px solid var(--ctp-border);border-radius:8px;z-index:2;background:var(--ctp-surface-elevated);padding:6px;box-shadow:var(--ctp-shadow)}.ctp-overflow-hours::-webkit-scrollbar,.ctp-overflow-minutes::-webkit-scrollbar,.ctp-overflow-seconds::-webkit-scrollbar,.ctp-overflow-am-pm::-webkit-scrollbar{width:0}.ctp-overflow-hours.not-visible,.ctp-overflow-minutes.not-visible,.ctp-overflow-seconds.not-visible,.ctp-overflow-am-pm.not-visible{display:none}.ctp-hour,.ctp-minute,.ctp-second,.ctp-am-pm{cursor:pointer;padding:5px 8px;border-radius:5px;background-color:var(--ctp-muted);border:none;font:inherit;color:var(--ctp-fg)}.ctp-hour:focus-visible,.ctp-minute:focus-visible,.ctp-second:focus-visible,.ctp-am-pm:focus-visible{outline:2px solid var(--ctp-focus);outline-offset:1px}.ctp-main-time-body{position:absolute;top:50%;left:50%;margin-top:15px;transform:translate(-50%, -50%)}.ctp-footer{display:flex;justify-content:space-between;align-items:center;padding:10px 12px;gap:8px;border-top:1px solid var(--ctp-border);background:color-mix(in srgb, var(--ctp-muted) 60%, var(--ctp-surface))}.ctp-footer button{background-color:var(--ctp-primary);color:#fff;border:none;padding:7px 12px;font-weight:600;border-radius:8px;cursor:pointer;font:inherit;transition:filter var(--ctp-transition)}.ctp-footer button:hover:not(:disabled){filter:brightness(0.96)}.ctp-footer button:focus-visible{outline:2px solid var(--ctp-focus);outline-offset:2px}.ctp-footer button:disabled{opacity:.5;cursor:not-allowed}.ctp-footer button.close-button{background-color:var(--ctp-danger)}.ctp-footer button.ctp-cancel{background-color:var(--ctp-muted);color:var(--ctp-fg);margin-left:auto}
@@ -0,0 +1,11 @@
1
+ export { defineCustomElements } from '../wc/index.mjs';
2
+ import '../rangeRenderer-AVv6PJbW.mjs';
3
+ import '../rangeController-Bq35aBwe.mjs';
4
+ import 'dayjs';
5
+
6
+ /** Svelte action: mounts nothing; ensures custom elements are defined. */
7
+ declare function calendarTime(_node: HTMLElement): {
8
+ destroy?: () => void;
9
+ };
10
+
11
+ export { calendarTime };
@@ -0,0 +1,11 @@
1
+ export { defineCustomElements } from '../wc/index.js';
2
+ import '../rangeRenderer-a3hFk-kK.js';
3
+ import '../rangeController-Bq35aBwe.js';
4
+ import 'dayjs';
5
+
6
+ /** Svelte action: mounts nothing; ensures custom elements are defined. */
7
+ declare function calendarTime(_node: HTMLElement): {
8
+ destroy?: () => void;
9
+ };
10
+
11
+ export { calendarTime };