@liteforge/calendar 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.
- package/LICENSE +21 -0
- package/README.md +395 -0
- package/dist/calendar.d.ts +6 -0
- package/dist/calendar.d.ts.map +1 -0
- package/dist/calendar.js +318 -0
- package/dist/calendar.js.map +1 -0
- package/dist/components/toolbar.d.ts +18 -0
- package/dist/components/toolbar.d.ts.map +1 -0
- package/dist/components/toolbar.js +84 -0
- package/dist/components/toolbar.js.map +1 -0
- package/dist/date-utils.d.ts +104 -0
- package/dist/date-utils.d.ts.map +1 -0
- package/dist/date-utils.js +323 -0
- package/dist/date-utils.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/interactions/drag-drop.d.ts +30 -0
- package/dist/interactions/drag-drop.d.ts.map +1 -0
- package/dist/interactions/drag-drop.js +207 -0
- package/dist/interactions/drag-drop.js.map +1 -0
- package/dist/interactions/index.d.ts +10 -0
- package/dist/interactions/index.d.ts.map +1 -0
- package/dist/interactions/index.js +7 -0
- package/dist/interactions/index.js.map +1 -0
- package/dist/interactions/resize.d.ts +25 -0
- package/dist/interactions/resize.d.ts.map +1 -0
- package/dist/interactions/resize.js +116 -0
- package/dist/interactions/resize.js.map +1 -0
- package/dist/interactions/slot-selection.d.ts +25 -0
- package/dist/interactions/slot-selection.d.ts.map +1 -0
- package/dist/interactions/slot-selection.js +151 -0
- package/dist/interactions/slot-selection.js.map +1 -0
- package/dist/recurring.d.ts +15 -0
- package/dist/recurring.d.ts.map +1 -0
- package/dist/recurring.js +158 -0
- package/dist/recurring.js.map +1 -0
- package/dist/styles.d.ts +6 -0
- package/dist/styles.d.ts.map +1 -0
- package/dist/styles.js +632 -0
- package/dist/styles.js.map +1 -0
- package/dist/types.d.ts +169 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/views/agenda-view.d.ts +19 -0
- package/dist/views/agenda-view.d.ts.map +1 -0
- package/dist/views/agenda-view.js +114 -0
- package/dist/views/agenda-view.js.map +1 -0
- package/dist/views/day-view.d.ts +30 -0
- package/dist/views/day-view.d.ts.map +1 -0
- package/dist/views/day-view.js +432 -0
- package/dist/views/day-view.js.map +1 -0
- package/dist/views/month-view.d.ts +17 -0
- package/dist/views/month-view.d.ts.map +1 -0
- package/dist/views/month-view.js +123 -0
- package/dist/views/month-view.js.map +1 -0
- package/dist/views/shared.d.ts +30 -0
- package/dist/views/shared.d.ts.map +1 -0
- package/dist/views/shared.js +281 -0
- package/dist/views/shared.js.map +1 -0
- package/dist/views/week-view.d.ts +24 -0
- package/dist/views/week-view.d.ts.map +1 -0
- package/dist/views/week-view.js +377 -0
- package/dist/views/week-view.js.map +1 -0
- package/package.json +61 -0
package/dist/calendar.js
ADDED
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @liteforge/calendar - createCalendar Implementation
|
|
3
|
+
*/
|
|
4
|
+
import { signal, computed, effect } from '@liteforge/core';
|
|
5
|
+
import { startOfDay, addDays, addWeeks, addMonths, getDayRange, getWeekRange, getMonthRange, } from './date-utils.js';
|
|
6
|
+
import { expandAllRecurring } from './recurring.js';
|
|
7
|
+
import { injectCalendarStyles } from './styles.js';
|
|
8
|
+
import { renderWeekView } from './views/week-view.js';
|
|
9
|
+
import { renderDayView } from './views/day-view.js';
|
|
10
|
+
import { renderMonthView } from './views/month-view.js';
|
|
11
|
+
import { renderAgendaView } from './views/agenda-view.js';
|
|
12
|
+
import { renderToolbar } from './components/toolbar.js';
|
|
13
|
+
// ─── Resolve Time Config ───────────────────────────────────
|
|
14
|
+
function resolveTimeConfig(config) {
|
|
15
|
+
return {
|
|
16
|
+
slotDuration: config?.slotDuration ?? 30,
|
|
17
|
+
dayStart: config?.dayStart ?? 0,
|
|
18
|
+
dayEnd: config?.dayEnd ?? 24,
|
|
19
|
+
weekStart: config?.weekStart ?? 1,
|
|
20
|
+
hiddenDays: config?.hiddenDays ?? [],
|
|
21
|
+
nowIndicator: config?.nowIndicator ?? true,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
// ─── Calculate Date Range ──────────────────────────────────
|
|
25
|
+
function calculateDateRange(date, view, weekStart) {
|
|
26
|
+
switch (view) {
|
|
27
|
+
case 'day':
|
|
28
|
+
return getDayRange(date);
|
|
29
|
+
case 'week':
|
|
30
|
+
return getWeekRange(date, weekStart);
|
|
31
|
+
case 'month': {
|
|
32
|
+
// For month view, we need to include partial weeks
|
|
33
|
+
const monthRange = getMonthRange(date);
|
|
34
|
+
// Extend to full calendar weeks
|
|
35
|
+
const calStart = getWeekRange(monthRange.start, weekStart).start;
|
|
36
|
+
const calEnd = getWeekRange(monthRange.end, weekStart).end;
|
|
37
|
+
return { start: calStart, end: calEnd };
|
|
38
|
+
}
|
|
39
|
+
case 'agenda':
|
|
40
|
+
// Show current month for agenda
|
|
41
|
+
return getMonthRange(date);
|
|
42
|
+
default:
|
|
43
|
+
return getWeekRange(date, weekStart);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// ─── createCalendar ────────────────────────────────────────
|
|
47
|
+
export function createCalendar(options) {
|
|
48
|
+
const { events: eventsSource, view: initialView = 'week', defaultDate = new Date(), time, resources: resourcesInput = [], editable = false, selectable = false, onEventClick, onEventDrop, onEventResize, onSlotClick, onSlotSelect, onViewChange, onDateChange, eventContent, slotContent, dayHeaderContent, unstyled = false, classes, locale = 'en-US', } = options;
|
|
49
|
+
// Inject styles
|
|
50
|
+
if (!unstyled) {
|
|
51
|
+
injectCalendarStyles();
|
|
52
|
+
}
|
|
53
|
+
// Resolve config
|
|
54
|
+
const config = resolveTimeConfig(time);
|
|
55
|
+
// ─── State ───────────────────────────────────────────────
|
|
56
|
+
const currentDateSignal = signal(startOfDay(defaultDate));
|
|
57
|
+
const currentViewSignal = signal(initialView);
|
|
58
|
+
// Resource visibility
|
|
59
|
+
const resourceVisibility = signal(Object.fromEntries(resourcesInput.map((r) => [r.id, true])));
|
|
60
|
+
// Selection state
|
|
61
|
+
const selectedEventSignal = signal(null);
|
|
62
|
+
const selectedSlotSignal = signal(null);
|
|
63
|
+
// Local events (for addEvent/updateEvent/removeEvent)
|
|
64
|
+
const localEvents = signal([]);
|
|
65
|
+
// ─── Computed ────────────────────────────────────────────
|
|
66
|
+
const dateRangeComputed = computed(() => {
|
|
67
|
+
return calculateDateRange(currentDateSignal(), currentViewSignal(), config.weekStart);
|
|
68
|
+
});
|
|
69
|
+
const resourcesComputed = computed(() => resourcesInput);
|
|
70
|
+
const visibleResourcesComputed = computed(() => {
|
|
71
|
+
const visibility = resourceVisibility();
|
|
72
|
+
return resourcesInput.filter((r) => visibility[r.id] !== false).map((r) => r.id);
|
|
73
|
+
});
|
|
74
|
+
// Combine source events + local events, expand recurring, filter to range and visible resources
|
|
75
|
+
const visibleEvents = computed(() => {
|
|
76
|
+
const range = dateRangeComputed();
|
|
77
|
+
const sourceEvts = eventsSource();
|
|
78
|
+
const localEvts = localEvents();
|
|
79
|
+
const allEvents = [...sourceEvts, ...localEvts];
|
|
80
|
+
// Expand recurring events
|
|
81
|
+
const expanded = expandAllRecurring(allEvents, range.start, range.end);
|
|
82
|
+
// Filter by visible resources - use visibleResourcesComputed to ensure reactivity
|
|
83
|
+
const visibleRes = visibleResourcesComputed();
|
|
84
|
+
const filtered = expanded.filter((event) => {
|
|
85
|
+
// If event has no resourceId, always show it
|
|
86
|
+
if (!event.resourceId)
|
|
87
|
+
return true;
|
|
88
|
+
// Show event only if its resource is visible
|
|
89
|
+
return visibleRes.includes(event.resourceId);
|
|
90
|
+
});
|
|
91
|
+
return filtered;
|
|
92
|
+
});
|
|
93
|
+
// ─── Navigation ──────────────────────────────────────────
|
|
94
|
+
const today = () => {
|
|
95
|
+
currentDateSignal.set(startOfDay(new Date()));
|
|
96
|
+
onDateChange?.(currentDateSignal());
|
|
97
|
+
};
|
|
98
|
+
const next = () => {
|
|
99
|
+
const current = currentDateSignal();
|
|
100
|
+
const view = currentViewSignal();
|
|
101
|
+
let newDate;
|
|
102
|
+
switch (view) {
|
|
103
|
+
case 'day':
|
|
104
|
+
newDate = addDays(current, 1);
|
|
105
|
+
break;
|
|
106
|
+
case 'week':
|
|
107
|
+
newDate = addWeeks(current, 1);
|
|
108
|
+
break;
|
|
109
|
+
case 'month':
|
|
110
|
+
case 'agenda':
|
|
111
|
+
newDate = addMonths(current, 1);
|
|
112
|
+
break;
|
|
113
|
+
default:
|
|
114
|
+
newDate = addWeeks(current, 1);
|
|
115
|
+
}
|
|
116
|
+
currentDateSignal.set(newDate);
|
|
117
|
+
onDateChange?.(newDate);
|
|
118
|
+
};
|
|
119
|
+
const prev = () => {
|
|
120
|
+
const current = currentDateSignal();
|
|
121
|
+
const view = currentViewSignal();
|
|
122
|
+
let newDate;
|
|
123
|
+
switch (view) {
|
|
124
|
+
case 'day':
|
|
125
|
+
newDate = addDays(current, -1);
|
|
126
|
+
break;
|
|
127
|
+
case 'week':
|
|
128
|
+
newDate = addWeeks(current, -1);
|
|
129
|
+
break;
|
|
130
|
+
case 'month':
|
|
131
|
+
case 'agenda':
|
|
132
|
+
newDate = addMonths(current, -1);
|
|
133
|
+
break;
|
|
134
|
+
default:
|
|
135
|
+
newDate = addWeeks(current, -1);
|
|
136
|
+
}
|
|
137
|
+
currentDateSignal.set(newDate);
|
|
138
|
+
onDateChange?.(newDate);
|
|
139
|
+
};
|
|
140
|
+
const goTo = (date) => {
|
|
141
|
+
currentDateSignal.set(startOfDay(date));
|
|
142
|
+
onDateChange?.(currentDateSignal());
|
|
143
|
+
};
|
|
144
|
+
const setView = (view) => {
|
|
145
|
+
currentViewSignal.set(view);
|
|
146
|
+
onViewChange?.(view, dateRangeComputed());
|
|
147
|
+
};
|
|
148
|
+
// ─── Event Management ────────────────────────────────────
|
|
149
|
+
const getEvent = (id) => {
|
|
150
|
+
return visibleEvents().find((e) => e.id === id);
|
|
151
|
+
};
|
|
152
|
+
const addEvent = (event) => {
|
|
153
|
+
localEvents.update((evts) => [...evts, event]);
|
|
154
|
+
};
|
|
155
|
+
const updateEvent = (id, changes) => {
|
|
156
|
+
localEvents.update((evts) => evts.map((e) => (e.id === id ? { ...e, ...changes } : e)));
|
|
157
|
+
};
|
|
158
|
+
const removeEvent = (id) => {
|
|
159
|
+
localEvents.update((evts) => evts.filter((e) => e.id !== id));
|
|
160
|
+
};
|
|
161
|
+
// ─── Resource Management ─────────────────────────────────
|
|
162
|
+
const showResource = (id) => {
|
|
163
|
+
resourceVisibility.update((v) => ({ ...v, [id]: true }));
|
|
164
|
+
};
|
|
165
|
+
const hideResource = (id) => {
|
|
166
|
+
resourceVisibility.update((v) => ({ ...v, [id]: false }));
|
|
167
|
+
};
|
|
168
|
+
const toggleResource = (id) => {
|
|
169
|
+
resourceVisibility.update((v) => ({ ...v, [id]: !v[id] }));
|
|
170
|
+
};
|
|
171
|
+
// ─── Event Handlers for Views ────────────────────────────
|
|
172
|
+
const handleEventClick = (event) => {
|
|
173
|
+
selectedEventSignal.set(event);
|
|
174
|
+
onEventClick?.(event);
|
|
175
|
+
};
|
|
176
|
+
const handleSlotClick = (start, end, resourceId) => {
|
|
177
|
+
selectedSlotSignal.set({ start, end, resourceId });
|
|
178
|
+
onSlotClick?.(start, end, resourceId);
|
|
179
|
+
};
|
|
180
|
+
const handleSlotSelect = (start, end, resourceId) => {
|
|
181
|
+
selectedSlotSignal.set({ start, end, resourceId });
|
|
182
|
+
onSlotSelect?.(start, end, resourceId);
|
|
183
|
+
};
|
|
184
|
+
const handleEventDrop = (event, newStart, newEnd, newResourceId) => {
|
|
185
|
+
onEventDrop?.(event, newStart, newEnd, newResourceId);
|
|
186
|
+
};
|
|
187
|
+
const handleEventResize = (event, newEnd) => {
|
|
188
|
+
onEventResize?.(event, newEnd);
|
|
189
|
+
};
|
|
190
|
+
// ─── Root Component ──────────────────────────────────────
|
|
191
|
+
const Root = () => {
|
|
192
|
+
const container = document.createElement('div');
|
|
193
|
+
container.className = classes?.root ?? 'lf-cal';
|
|
194
|
+
let currentViewEl = null;
|
|
195
|
+
// Reactively render the appropriate view
|
|
196
|
+
effect(() => {
|
|
197
|
+
const view = currentViewSignal();
|
|
198
|
+
// Remove old view
|
|
199
|
+
if (currentViewEl) {
|
|
200
|
+
currentViewEl.remove();
|
|
201
|
+
}
|
|
202
|
+
// Render new view
|
|
203
|
+
switch (view) {
|
|
204
|
+
case 'day':
|
|
205
|
+
currentViewEl = renderDayView({
|
|
206
|
+
date: () => currentDateSignal(),
|
|
207
|
+
events: () => visibleEvents(),
|
|
208
|
+
resources: resourcesComputed,
|
|
209
|
+
visibleResources: visibleResourcesComputed,
|
|
210
|
+
config,
|
|
211
|
+
locale,
|
|
212
|
+
classes: classes ?? {},
|
|
213
|
+
eventContent,
|
|
214
|
+
slotContent,
|
|
215
|
+
dayHeaderContent,
|
|
216
|
+
onEventClick: handleEventClick,
|
|
217
|
+
onSlotClick: selectable ? handleSlotClick : undefined,
|
|
218
|
+
onSlotSelect: selectable ? handleSlotSelect : undefined,
|
|
219
|
+
onEventDrop: editable ? handleEventDrop : undefined,
|
|
220
|
+
onEventResize: editable ? handleEventResize : undefined,
|
|
221
|
+
editable,
|
|
222
|
+
selectable,
|
|
223
|
+
});
|
|
224
|
+
break;
|
|
225
|
+
case 'week':
|
|
226
|
+
currentViewEl = renderWeekView({
|
|
227
|
+
date: () => currentDateSignal(),
|
|
228
|
+
events: () => visibleEvents(),
|
|
229
|
+
config,
|
|
230
|
+
locale,
|
|
231
|
+
classes: classes ?? {},
|
|
232
|
+
eventContent,
|
|
233
|
+
slotContent,
|
|
234
|
+
dayHeaderContent,
|
|
235
|
+
onEventClick: handleEventClick,
|
|
236
|
+
onSlotClick: selectable ? handleSlotClick : undefined,
|
|
237
|
+
onSlotSelect: selectable ? handleSlotSelect : undefined,
|
|
238
|
+
onEventDrop: editable ? handleEventDrop : undefined,
|
|
239
|
+
onEventResize: editable ? handleEventResize : undefined,
|
|
240
|
+
editable,
|
|
241
|
+
selectable,
|
|
242
|
+
});
|
|
243
|
+
break;
|
|
244
|
+
case 'month':
|
|
245
|
+
currentViewEl = renderMonthView({
|
|
246
|
+
date: () => currentDateSignal(),
|
|
247
|
+
events: () => visibleEvents(),
|
|
248
|
+
config,
|
|
249
|
+
locale,
|
|
250
|
+
classes: classes ?? {},
|
|
251
|
+
onEventClick: handleEventClick,
|
|
252
|
+
onSlotClick: selectable ? handleSlotClick : undefined,
|
|
253
|
+
selectable,
|
|
254
|
+
});
|
|
255
|
+
break;
|
|
256
|
+
case 'agenda':
|
|
257
|
+
currentViewEl = renderAgendaView({
|
|
258
|
+
dateRange: dateRangeComputed,
|
|
259
|
+
events: () => visibleEvents(),
|
|
260
|
+
resources: resourcesComputed,
|
|
261
|
+
config,
|
|
262
|
+
locale,
|
|
263
|
+
classes: classes ?? {},
|
|
264
|
+
onEventClick: handleEventClick,
|
|
265
|
+
});
|
|
266
|
+
break;
|
|
267
|
+
}
|
|
268
|
+
if (currentViewEl) {
|
|
269
|
+
container.appendChild(currentViewEl);
|
|
270
|
+
}
|
|
271
|
+
});
|
|
272
|
+
return container;
|
|
273
|
+
};
|
|
274
|
+
// ─── Toolbar Component ───────────────────────────────────
|
|
275
|
+
const Toolbar = () => {
|
|
276
|
+
return renderToolbar({
|
|
277
|
+
currentDate: () => currentDateSignal(),
|
|
278
|
+
currentView: () => currentViewSignal(),
|
|
279
|
+
locale,
|
|
280
|
+
weekStart: config.weekStart,
|
|
281
|
+
classes: classes ?? {},
|
|
282
|
+
onPrev: prev,
|
|
283
|
+
onNext: next,
|
|
284
|
+
onToday: today,
|
|
285
|
+
onViewChange: setView,
|
|
286
|
+
});
|
|
287
|
+
};
|
|
288
|
+
// ─── Return API ──────────────────────────────────────────
|
|
289
|
+
return {
|
|
290
|
+
Root,
|
|
291
|
+
Toolbar,
|
|
292
|
+
// Navigation
|
|
293
|
+
currentDate: () => currentDateSignal(),
|
|
294
|
+
currentView: () => currentViewSignal(),
|
|
295
|
+
dateRange: () => dateRangeComputed(),
|
|
296
|
+
today,
|
|
297
|
+
next,
|
|
298
|
+
prev,
|
|
299
|
+
goTo,
|
|
300
|
+
setView,
|
|
301
|
+
// Events
|
|
302
|
+
events: () => visibleEvents(),
|
|
303
|
+
getEvent,
|
|
304
|
+
addEvent,
|
|
305
|
+
updateEvent,
|
|
306
|
+
removeEvent,
|
|
307
|
+
// Resources
|
|
308
|
+
resources: () => resourcesComputed(),
|
|
309
|
+
visibleResources: () => visibleResourcesComputed(),
|
|
310
|
+
showResource,
|
|
311
|
+
hideResource,
|
|
312
|
+
toggleResource,
|
|
313
|
+
// Selection
|
|
314
|
+
selectedEvent: () => selectedEventSignal(),
|
|
315
|
+
selectedSlot: () => selectedSlotSignal(),
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
//# sourceMappingURL=calendar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar.js","sourceRoot":"","sources":["../src/calendar.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @liteforge/calendar - Toolbar Component
|
|
3
|
+
*/
|
|
4
|
+
import type { CalendarView, CalendarClasses } from '../types.js';
|
|
5
|
+
interface ToolbarOptions {
|
|
6
|
+
currentDate: () => Date;
|
|
7
|
+
currentView: () => CalendarView;
|
|
8
|
+
locale: string;
|
|
9
|
+
weekStart: number;
|
|
10
|
+
classes: Partial<CalendarClasses>;
|
|
11
|
+
onPrev: () => void;
|
|
12
|
+
onNext: () => void;
|
|
13
|
+
onToday: () => void;
|
|
14
|
+
onViewChange: (view: CalendarView) => void;
|
|
15
|
+
}
|
|
16
|
+
export declare function renderToolbar(options: ToolbarOptions): HTMLDivElement;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=toolbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolbar.d.ts","sourceRoot":"","sources":["../../src/components/toolbar.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAQhE,UAAU,cAAc;IACtB,WAAW,EAAE,MAAM,IAAI,CAAA;IACvB,WAAW,EAAE,MAAM,YAAY,CAAA;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;IACjC,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,YAAY,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAA;CAC3C;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,cAAc,CAwGrE"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @liteforge/calendar - Toolbar Component
|
|
3
|
+
*/
|
|
4
|
+
import { effect } from '@liteforge/core';
|
|
5
|
+
import { formatFullDate, formatWeekRange, formatMonthYear, } from '../date-utils.js';
|
|
6
|
+
import { getClass } from '../views/shared.js';
|
|
7
|
+
export function renderToolbar(options) {
|
|
8
|
+
const { currentDate, currentView, locale, weekStart, classes, onPrev, onNext, onToday, onViewChange, } = options;
|
|
9
|
+
const toolbar = document.createElement('div');
|
|
10
|
+
toolbar.className = getClass('toolbar', classes, 'lf-cal-toolbar');
|
|
11
|
+
// Navigation
|
|
12
|
+
const nav = document.createElement('div');
|
|
13
|
+
nav.className = getClass('toolbarNav', classes, 'lf-cal-toolbar-nav');
|
|
14
|
+
const prevBtn = document.createElement('button');
|
|
15
|
+
prevBtn.type = 'button';
|
|
16
|
+
prevBtn.textContent = '←';
|
|
17
|
+
prevBtn.title = 'Previous';
|
|
18
|
+
prevBtn.addEventListener('click', onPrev);
|
|
19
|
+
const todayBtn = document.createElement('button');
|
|
20
|
+
todayBtn.type = 'button';
|
|
21
|
+
todayBtn.textContent = 'Today';
|
|
22
|
+
todayBtn.addEventListener('click', onToday);
|
|
23
|
+
const nextBtn = document.createElement('button');
|
|
24
|
+
nextBtn.type = 'button';
|
|
25
|
+
nextBtn.textContent = '→';
|
|
26
|
+
nextBtn.title = 'Next';
|
|
27
|
+
nextBtn.addEventListener('click', onNext);
|
|
28
|
+
nav.appendChild(prevBtn);
|
|
29
|
+
nav.appendChild(todayBtn);
|
|
30
|
+
nav.appendChild(nextBtn);
|
|
31
|
+
toolbar.appendChild(nav);
|
|
32
|
+
// Title
|
|
33
|
+
const title = document.createElement('div');
|
|
34
|
+
title.className = getClass('toolbarTitle', classes, 'lf-cal-toolbar-title');
|
|
35
|
+
// Update title reactively
|
|
36
|
+
effect(() => {
|
|
37
|
+
const date = currentDate();
|
|
38
|
+
const view = currentView();
|
|
39
|
+
switch (view) {
|
|
40
|
+
case 'day':
|
|
41
|
+
title.textContent = formatFullDate(date, locale);
|
|
42
|
+
break;
|
|
43
|
+
case 'week':
|
|
44
|
+
title.textContent = formatWeekRange(date, locale, weekStart);
|
|
45
|
+
break;
|
|
46
|
+
case 'month':
|
|
47
|
+
title.textContent = formatMonthYear(date, locale);
|
|
48
|
+
break;
|
|
49
|
+
case 'agenda':
|
|
50
|
+
title.textContent = formatMonthYear(date, locale);
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
toolbar.appendChild(title);
|
|
55
|
+
// View switcher
|
|
56
|
+
const views = document.createElement('div');
|
|
57
|
+
views.className = getClass('toolbarViews', classes, 'lf-cal-toolbar-views');
|
|
58
|
+
const viewButtons = [
|
|
59
|
+
{ view: 'day', label: 'Day' },
|
|
60
|
+
{ view: 'week', label: 'Week' },
|
|
61
|
+
{ view: 'month', label: 'Month' },
|
|
62
|
+
{ view: 'agenda', label: 'Agenda' },
|
|
63
|
+
];
|
|
64
|
+
const buttonEls = [];
|
|
65
|
+
for (const { view, label } of viewButtons) {
|
|
66
|
+
const btn = document.createElement('button');
|
|
67
|
+
btn.type = 'button';
|
|
68
|
+
btn.textContent = label;
|
|
69
|
+
btn.dataset.view = view;
|
|
70
|
+
btn.addEventListener('click', () => onViewChange(view));
|
|
71
|
+
views.appendChild(btn);
|
|
72
|
+
buttonEls.push(btn);
|
|
73
|
+
}
|
|
74
|
+
// Update active state reactively
|
|
75
|
+
effect(() => {
|
|
76
|
+
const view = currentView();
|
|
77
|
+
for (const btn of buttonEls) {
|
|
78
|
+
btn.classList.toggle('active', btn.dataset.view === view);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
toolbar.appendChild(views);
|
|
82
|
+
return toolbar;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=toolbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolbar.js","sourceRoot":"","sources":["../../src/components/toolbar.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @liteforge/calendar - Date Utilities
|
|
3
|
+
*
|
|
4
|
+
* All date operations from scratch. NO external dependencies.
|
|
5
|
+
* Uses native Date and Intl.DateTimeFormat.
|
|
6
|
+
* All functions return NEW Date objects - never mutate.
|
|
7
|
+
*/
|
|
8
|
+
export declare function startOfDay(date: Date): Date;
|
|
9
|
+
export declare function endOfDay(date: Date): Date;
|
|
10
|
+
export declare function startOfWeek(date: Date, weekStart?: number): Date;
|
|
11
|
+
export declare function endOfWeek(date: Date, weekStart?: number): Date;
|
|
12
|
+
export declare function startOfMonth(date: Date): Date;
|
|
13
|
+
export declare function endOfMonth(date: Date): Date;
|
|
14
|
+
export declare function addDays(date: Date, days: number): Date;
|
|
15
|
+
export declare function addWeeks(date: Date, weeks: number): Date;
|
|
16
|
+
export declare function addMonths(date: Date, months: number): Date;
|
|
17
|
+
export declare function addMinutes(date: Date, minutes: number): Date;
|
|
18
|
+
export declare function addHours(date: Date, hours: number): Date;
|
|
19
|
+
export declare function isSameDay(a: Date, b: Date): boolean;
|
|
20
|
+
export declare function isSameMonth(a: Date, b: Date): boolean;
|
|
21
|
+
export declare function isToday(date: Date): boolean;
|
|
22
|
+
export declare function isWeekend(date: Date): boolean;
|
|
23
|
+
export declare function isWithinRange(date: Date, start: Date, end: Date): boolean;
|
|
24
|
+
export declare function isBefore(a: Date, b: Date): boolean;
|
|
25
|
+
export declare function isAfter(a: Date, b: Date): boolean;
|
|
26
|
+
export declare function getDayOfWeek(date: Date): number;
|
|
27
|
+
export declare function getWeekNumber(date: Date): number;
|
|
28
|
+
export declare function daysInMonth(date: Date): number;
|
|
29
|
+
export declare function diffInMinutes(a: Date, b: Date): number;
|
|
30
|
+
export declare function diffInDays(a: Date, b: Date): number;
|
|
31
|
+
export declare function getSlotsBetween(start: Date, end: Date, slotDuration: number): Date[];
|
|
32
|
+
export declare function getTimeSlots(date: Date, dayStart: number, dayEnd: number, slotDuration: number): Date[];
|
|
33
|
+
export declare function getDaysInRange(start: Date, end: Date): Date[];
|
|
34
|
+
export declare function getWeekDays(date: Date, weekStart: number, hiddenDays?: number[]): Date[];
|
|
35
|
+
export declare function getMonthCalendarDays(date: Date, weekStart: number): Date[];
|
|
36
|
+
export declare function formatTime(date: Date, locale?: string): string;
|
|
37
|
+
export declare function formatDate(date: Date, locale?: string): string;
|
|
38
|
+
export declare function formatDayHeader(date: Date, locale?: string): string;
|
|
39
|
+
export declare function formatWeekday(date: Date, locale?: string): string;
|
|
40
|
+
export declare function formatDayNumber(date: Date): string;
|
|
41
|
+
export declare function formatMonthYear(date: Date, locale?: string): string;
|
|
42
|
+
export declare function formatWeekRange(date: Date, locale?: string, weekStart?: number): string;
|
|
43
|
+
export declare function formatFullDate(date: Date, locale?: string): string;
|
|
44
|
+
export declare function getMinutesSinceDayStart(date: Date, dayStart: number): number;
|
|
45
|
+
export declare function getSlotPosition(date: Date, dayStart: number, slotDuration: number, slotHeight: number): number;
|
|
46
|
+
export declare function getEventHeight(start: Date, end: Date, slotDuration: number, slotHeight: number): number;
|
|
47
|
+
export declare function snapToSlot(date: Date, slotDuration: number): Date;
|
|
48
|
+
export declare function floorToSlot(date: Date, slotDuration: number): Date;
|
|
49
|
+
export declare function getDayRange(date: Date): {
|
|
50
|
+
start: Date;
|
|
51
|
+
end: Date;
|
|
52
|
+
};
|
|
53
|
+
export declare function getWeekRange(date: Date, weekStart: number): {
|
|
54
|
+
start: Date;
|
|
55
|
+
end: Date;
|
|
56
|
+
};
|
|
57
|
+
export declare function getMonthRange(date: Date): {
|
|
58
|
+
start: Date;
|
|
59
|
+
end: Date;
|
|
60
|
+
};
|
|
61
|
+
export declare function eventsOverlap(a: {
|
|
62
|
+
start: Date;
|
|
63
|
+
end: Date;
|
|
64
|
+
}, b: {
|
|
65
|
+
start: Date;
|
|
66
|
+
end: Date;
|
|
67
|
+
}): boolean;
|
|
68
|
+
export declare function isEventInRange(event: {
|
|
69
|
+
start: Date;
|
|
70
|
+
end: Date;
|
|
71
|
+
}, rangeStart: Date, rangeEnd: Date): boolean;
|
|
72
|
+
export declare function isEventOnDay(event: {
|
|
73
|
+
start: Date;
|
|
74
|
+
end: Date;
|
|
75
|
+
}, day: Date): boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Check if an event should be treated as all-day.
|
|
78
|
+
* An event is all-day if:
|
|
79
|
+
* - It has allDay: true, OR
|
|
80
|
+
* - It spans 24 hours or more, OR
|
|
81
|
+
* - start === end (no duration - treat as all-day)
|
|
82
|
+
*/
|
|
83
|
+
export declare function isAllDayEvent(event: {
|
|
84
|
+
start: Date;
|
|
85
|
+
end: Date;
|
|
86
|
+
allDay?: boolean;
|
|
87
|
+
}): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Get the duration of an event with safety guards.
|
|
90
|
+
* If end <= start, returns slotDuration as minimum.
|
|
91
|
+
*/
|
|
92
|
+
export declare function getEventDuration(event: {
|
|
93
|
+
start: Date;
|
|
94
|
+
end: Date;
|
|
95
|
+
}, slotDurationMinutes: number): number;
|
|
96
|
+
/**
|
|
97
|
+
* Ensure an event has valid end time.
|
|
98
|
+
* If end <= start, returns start + slotDuration.
|
|
99
|
+
*/
|
|
100
|
+
export declare function ensureValidEventEnd(event: {
|
|
101
|
+
start: Date;
|
|
102
|
+
end: Date;
|
|
103
|
+
}, slotDurationMinutes: number): Date;
|
|
104
|
+
//# sourceMappingURL=date-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-utils.d.ts","sourceRoot":"","sources":["../src/date-utils.ts"],"names":[],"mappings":"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"}
|