@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.
Files changed (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +395 -0
  3. package/dist/calendar.d.ts +6 -0
  4. package/dist/calendar.d.ts.map +1 -0
  5. package/dist/calendar.js +318 -0
  6. package/dist/calendar.js.map +1 -0
  7. package/dist/components/toolbar.d.ts +18 -0
  8. package/dist/components/toolbar.d.ts.map +1 -0
  9. package/dist/components/toolbar.js +84 -0
  10. package/dist/components/toolbar.js.map +1 -0
  11. package/dist/date-utils.d.ts +104 -0
  12. package/dist/date-utils.d.ts.map +1 -0
  13. package/dist/date-utils.js +323 -0
  14. package/dist/date-utils.js.map +1 -0
  15. package/dist/index.d.ts +12 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +14 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/interactions/drag-drop.d.ts +30 -0
  20. package/dist/interactions/drag-drop.d.ts.map +1 -0
  21. package/dist/interactions/drag-drop.js +207 -0
  22. package/dist/interactions/drag-drop.js.map +1 -0
  23. package/dist/interactions/index.d.ts +10 -0
  24. package/dist/interactions/index.d.ts.map +1 -0
  25. package/dist/interactions/index.js +7 -0
  26. package/dist/interactions/index.js.map +1 -0
  27. package/dist/interactions/resize.d.ts +25 -0
  28. package/dist/interactions/resize.d.ts.map +1 -0
  29. package/dist/interactions/resize.js +116 -0
  30. package/dist/interactions/resize.js.map +1 -0
  31. package/dist/interactions/slot-selection.d.ts +25 -0
  32. package/dist/interactions/slot-selection.d.ts.map +1 -0
  33. package/dist/interactions/slot-selection.js +151 -0
  34. package/dist/interactions/slot-selection.js.map +1 -0
  35. package/dist/recurring.d.ts +15 -0
  36. package/dist/recurring.d.ts.map +1 -0
  37. package/dist/recurring.js +158 -0
  38. package/dist/recurring.js.map +1 -0
  39. package/dist/styles.d.ts +6 -0
  40. package/dist/styles.d.ts.map +1 -0
  41. package/dist/styles.js +632 -0
  42. package/dist/styles.js.map +1 -0
  43. package/dist/types.d.ts +169 -0
  44. package/dist/types.d.ts.map +1 -0
  45. package/dist/types.js +5 -0
  46. package/dist/types.js.map +1 -0
  47. package/dist/views/agenda-view.d.ts +19 -0
  48. package/dist/views/agenda-view.d.ts.map +1 -0
  49. package/dist/views/agenda-view.js +114 -0
  50. package/dist/views/agenda-view.js.map +1 -0
  51. package/dist/views/day-view.d.ts +30 -0
  52. package/dist/views/day-view.d.ts.map +1 -0
  53. package/dist/views/day-view.js +432 -0
  54. package/dist/views/day-view.js.map +1 -0
  55. package/dist/views/month-view.d.ts +17 -0
  56. package/dist/views/month-view.d.ts.map +1 -0
  57. package/dist/views/month-view.js +123 -0
  58. package/dist/views/month-view.js.map +1 -0
  59. package/dist/views/shared.d.ts +30 -0
  60. package/dist/views/shared.d.ts.map +1 -0
  61. package/dist/views/shared.js +281 -0
  62. package/dist/views/shared.js.map +1 -0
  63. package/dist/views/week-view.d.ts +24 -0
  64. package/dist/views/week-view.d.ts.map +1 -0
  65. package/dist/views/week-view.js +377 -0
  66. package/dist/views/week-view.js.map +1 -0
  67. package/package.json +61 -0
@@ -0,0 +1,323 @@
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
+ // ─── Basic Operations ──────────────────────────────────────
9
+ export function startOfDay(date) {
10
+ const result = new Date(date);
11
+ result.setHours(0, 0, 0, 0);
12
+ return result;
13
+ }
14
+ export function endOfDay(date) {
15
+ const result = new Date(date);
16
+ result.setHours(23, 59, 59, 999);
17
+ return result;
18
+ }
19
+ export function startOfWeek(date, weekStart = 1) {
20
+ const result = new Date(date);
21
+ const day = result.getDay();
22
+ const diff = (day < weekStart ? 7 : 0) + day - weekStart;
23
+ result.setDate(result.getDate() - diff);
24
+ result.setHours(0, 0, 0, 0);
25
+ return result;
26
+ }
27
+ export function endOfWeek(date, weekStart = 1) {
28
+ const start = startOfWeek(date, weekStart);
29
+ const result = new Date(start);
30
+ result.setDate(result.getDate() + 6);
31
+ result.setHours(23, 59, 59, 999);
32
+ return result;
33
+ }
34
+ export function startOfMonth(date) {
35
+ const result = new Date(date);
36
+ result.setDate(1);
37
+ result.setHours(0, 0, 0, 0);
38
+ return result;
39
+ }
40
+ export function endOfMonth(date) {
41
+ const result = new Date(date);
42
+ result.setMonth(result.getMonth() + 1, 0);
43
+ result.setHours(23, 59, 59, 999);
44
+ return result;
45
+ }
46
+ // ─── Add/Subtract ──────────────────────────────────────────
47
+ export function addDays(date, days) {
48
+ const result = new Date(date);
49
+ result.setDate(result.getDate() + days);
50
+ return result;
51
+ }
52
+ export function addWeeks(date, weeks) {
53
+ return addDays(date, weeks * 7);
54
+ }
55
+ export function addMonths(date, months) {
56
+ const result = new Date(date);
57
+ const day = result.getDate();
58
+ result.setMonth(result.getMonth() + months, 1);
59
+ const maxDay = daysInMonth(result);
60
+ result.setDate(Math.min(day, maxDay));
61
+ return result;
62
+ }
63
+ export function addMinutes(date, minutes) {
64
+ const result = new Date(date);
65
+ result.setTime(result.getTime() + minutes * 60 * 1000);
66
+ return result;
67
+ }
68
+ export function addHours(date, hours) {
69
+ return addMinutes(date, hours * 60);
70
+ }
71
+ // ─── Comparisons ───────────────────────────────────────────
72
+ export function isSameDay(a, b) {
73
+ return (a.getFullYear() === b.getFullYear() &&
74
+ a.getMonth() === b.getMonth() &&
75
+ a.getDate() === b.getDate());
76
+ }
77
+ export function isSameMonth(a, b) {
78
+ return (a.getFullYear() === b.getFullYear() &&
79
+ a.getMonth() === b.getMonth());
80
+ }
81
+ export function isToday(date) {
82
+ return isSameDay(date, new Date());
83
+ }
84
+ export function isWeekend(date) {
85
+ const day = date.getDay();
86
+ return day === 0 || day === 6;
87
+ }
88
+ export function isWithinRange(date, start, end) {
89
+ const time = date.getTime();
90
+ return time >= start.getTime() && time <= end.getTime();
91
+ }
92
+ export function isBefore(a, b) {
93
+ return a.getTime() < b.getTime();
94
+ }
95
+ export function isAfter(a, b) {
96
+ return a.getTime() > b.getTime();
97
+ }
98
+ // ─── Getters ───────────────────────────────────────────────
99
+ export function getDayOfWeek(date) {
100
+ return date.getDay();
101
+ }
102
+ export function getWeekNumber(date) {
103
+ // ISO week number
104
+ const target = new Date(date.valueOf());
105
+ const dayNr = (date.getDay() + 6) % 7;
106
+ target.setDate(target.getDate() - dayNr + 3);
107
+ const firstThursday = target.valueOf();
108
+ target.setMonth(0, 1);
109
+ if (target.getDay() !== 4) {
110
+ target.setMonth(0, 1 + ((4 - target.getDay() + 7) % 7));
111
+ }
112
+ return 1 + Math.ceil((firstThursday - target.valueOf()) / 604800000);
113
+ }
114
+ export function daysInMonth(date) {
115
+ return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();
116
+ }
117
+ export function diffInMinutes(a, b) {
118
+ return Math.floor((b.getTime() - a.getTime()) / (1000 * 60));
119
+ }
120
+ export function diffInDays(a, b) {
121
+ const startA = startOfDay(a);
122
+ const startB = startOfDay(b);
123
+ return Math.floor((startB.getTime() - startA.getTime()) / (1000 * 60 * 60 * 24));
124
+ }
125
+ // ─── Slot Generation ───────────────────────────────────────
126
+ export function getSlotsBetween(start, end, slotDuration) {
127
+ const slots = [];
128
+ let current = new Date(start);
129
+ while (current < end) {
130
+ slots.push(new Date(current));
131
+ current = addMinutes(current, slotDuration);
132
+ }
133
+ return slots;
134
+ }
135
+ export function getTimeSlots(date, dayStart, dayEnd, slotDuration) {
136
+ const start = new Date(date);
137
+ start.setHours(dayStart, 0, 0, 0);
138
+ const end = new Date(date);
139
+ end.setHours(dayEnd, 0, 0, 0);
140
+ return getSlotsBetween(start, end, slotDuration);
141
+ }
142
+ export function getDaysInRange(start, end) {
143
+ const days = [];
144
+ let current = startOfDay(start);
145
+ const endDay = startOfDay(end);
146
+ while (current <= endDay) {
147
+ days.push(new Date(current));
148
+ current = addDays(current, 1);
149
+ }
150
+ return days;
151
+ }
152
+ export function getWeekDays(date, weekStart, hiddenDays = []) {
153
+ const start = startOfWeek(date, weekStart);
154
+ const days = [];
155
+ for (let i = 0; i < 7; i++) {
156
+ const day = addDays(start, i);
157
+ const dayOfWeek = day.getDay();
158
+ if (!hiddenDays.includes(dayOfWeek)) {
159
+ days.push(day);
160
+ }
161
+ }
162
+ return days;
163
+ }
164
+ export function getMonthCalendarDays(date, weekStart) {
165
+ const monthStart = startOfMonth(date);
166
+ const monthEnd = endOfMonth(date);
167
+ const calendarStart = startOfWeek(monthStart, weekStart);
168
+ const calendarEnd = endOfWeek(monthEnd, weekStart);
169
+ return getDaysInRange(calendarStart, calendarEnd);
170
+ }
171
+ // ─── Formatting ────────────────────────────────────────────
172
+ export function formatTime(date, locale = 'en-US') {
173
+ return new Intl.DateTimeFormat(locale, {
174
+ hour: '2-digit',
175
+ minute: '2-digit',
176
+ hour12: false,
177
+ }).format(date);
178
+ }
179
+ export function formatDate(date, locale = 'en-US') {
180
+ return new Intl.DateTimeFormat(locale, {
181
+ weekday: 'short',
182
+ day: 'numeric',
183
+ month: 'short',
184
+ }).format(date);
185
+ }
186
+ export function formatDayHeader(date, locale = 'en-US') {
187
+ return new Intl.DateTimeFormat(locale, {
188
+ weekday: 'short',
189
+ day: 'numeric',
190
+ }).format(date);
191
+ }
192
+ export function formatWeekday(date, locale = 'en-US') {
193
+ return new Intl.DateTimeFormat(locale, {
194
+ weekday: 'short',
195
+ }).format(date);
196
+ }
197
+ export function formatDayNumber(date) {
198
+ return String(date.getDate());
199
+ }
200
+ export function formatMonthYear(date, locale = 'en-US') {
201
+ return new Intl.DateTimeFormat(locale, {
202
+ month: 'long',
203
+ year: 'numeric',
204
+ }).format(date);
205
+ }
206
+ export function formatWeekRange(date, locale = 'en-US', weekStart = 1) {
207
+ const start = startOfWeek(date, weekStart);
208
+ const end = endOfWeek(date, weekStart);
209
+ const weekNum = getWeekNumber(date);
210
+ if (start.getMonth() === end.getMonth()) {
211
+ return `KW ${weekNum}, ${new Intl.DateTimeFormat(locale, { month: 'short', year: 'numeric' }).format(start)}`;
212
+ }
213
+ return `KW ${weekNum}, ${new Intl.DateTimeFormat(locale, { month: 'short' }).format(start)} - ${new Intl.DateTimeFormat(locale, { month: 'short', year: 'numeric' }).format(end)}`;
214
+ }
215
+ export function formatFullDate(date, locale = 'en-US') {
216
+ return new Intl.DateTimeFormat(locale, {
217
+ weekday: 'long',
218
+ day: 'numeric',
219
+ month: 'long',
220
+ year: 'numeric',
221
+ }).format(date);
222
+ }
223
+ // ─── Position Calculation ──────────────────────────────────
224
+ export function getMinutesSinceDayStart(date, dayStart) {
225
+ const hours = date.getHours();
226
+ const minutes = date.getMinutes();
227
+ return (hours - dayStart) * 60 + minutes;
228
+ }
229
+ export function getSlotPosition(date, dayStart, slotDuration, slotHeight) {
230
+ const minutes = getMinutesSinceDayStart(date, dayStart);
231
+ return (minutes / slotDuration) * slotHeight;
232
+ }
233
+ export function getEventHeight(start, end, slotDuration, slotHeight) {
234
+ const minutes = diffInMinutes(start, end);
235
+ return (minutes / slotDuration) * slotHeight;
236
+ }
237
+ // ─── Snap to Grid ──────────────────────────────────────────
238
+ export function snapToSlot(date, slotDuration) {
239
+ const result = new Date(date);
240
+ const minutes = result.getMinutes();
241
+ const snapped = Math.round(minutes / slotDuration) * slotDuration;
242
+ result.setMinutes(snapped, 0, 0);
243
+ return result;
244
+ }
245
+ export function floorToSlot(date, slotDuration) {
246
+ const result = new Date(date);
247
+ const minutes = result.getMinutes();
248
+ const snapped = Math.floor(minutes / slotDuration) * slotDuration;
249
+ result.setMinutes(snapped, 0, 0);
250
+ return result;
251
+ }
252
+ // ─── Date Range for Views ──────────────────────────────────
253
+ export function getDayRange(date) {
254
+ return {
255
+ start: startOfDay(date),
256
+ end: endOfDay(date),
257
+ };
258
+ }
259
+ export function getWeekRange(date, weekStart) {
260
+ return {
261
+ start: startOfWeek(date, weekStart),
262
+ end: endOfWeek(date, weekStart),
263
+ };
264
+ }
265
+ export function getMonthRange(date) {
266
+ return {
267
+ start: startOfMonth(date),
268
+ end: endOfMonth(date),
269
+ };
270
+ }
271
+ // ─── Event Overlap Detection ───────────────────────────────
272
+ export function eventsOverlap(a, b) {
273
+ return a.start < b.end && a.end > b.start;
274
+ }
275
+ export function isEventInRange(event, rangeStart, rangeEnd) {
276
+ return event.start < rangeEnd && event.end > rangeStart;
277
+ }
278
+ export function isEventOnDay(event, day) {
279
+ const dayStart = startOfDay(day);
280
+ const dayEnd = endOfDay(day);
281
+ return isEventInRange(event, dayStart, dayEnd);
282
+ }
283
+ // ─── All-Day Event Detection ───────────────────────────────
284
+ /**
285
+ * Check if an event should be treated as all-day.
286
+ * An event is all-day if:
287
+ * - It has allDay: true, OR
288
+ * - It spans 24 hours or more, OR
289
+ * - start === end (no duration - treat as all-day)
290
+ */
291
+ export function isAllDayEvent(event) {
292
+ if (event.allDay)
293
+ return true;
294
+ const durationMs = event.end.getTime() - event.start.getTime();
295
+ // If no duration (start === end), it's effectively invalid - treat as slot-duration event
296
+ // But if duration >= 24 hours, treat as all-day
297
+ const twentyFourHours = 24 * 60 * 60 * 1000;
298
+ if (durationMs >= twentyFourHours)
299
+ return true;
300
+ return false;
301
+ }
302
+ /**
303
+ * Get the duration of an event with safety guards.
304
+ * If end <= start, returns slotDuration as minimum.
305
+ */
306
+ export function getEventDuration(event, slotDurationMinutes) {
307
+ const durationMs = event.end.getTime() - event.start.getTime();
308
+ const minDurationMs = slotDurationMinutes * 60 * 1000;
309
+ if (durationMs <= 0)
310
+ return minDurationMs;
311
+ return durationMs;
312
+ }
313
+ /**
314
+ * Ensure an event has valid end time.
315
+ * If end <= start, returns start + slotDuration.
316
+ */
317
+ export function ensureValidEventEnd(event, slotDurationMinutes) {
318
+ if (event.end.getTime() <= event.start.getTime()) {
319
+ return addMinutes(event.start, slotDurationMinutes);
320
+ }
321
+ return event.end;
322
+ }
323
+ //# sourceMappingURL=date-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-utils.js","sourceRoot":"","sources":["../src/date-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @liteforge/calendar
3
+ *
4
+ * Signals-based scheduling calendar with day/week/month/agenda views,
5
+ * resources (therapists/rooms), drag & drop, and recurring events.
6
+ */
7
+ export { createCalendar } from './calendar.js';
8
+ export type { CalendarOptions, CalendarResult, CalendarEvent, CalendarView, CalendarClasses, Resource, WorkingHours, TimeConfig, ResolvedTimeConfig, RecurringRule, DateRange, SlotSelection, OverlapLayout, RenderedEvent, } from './types.js';
9
+ export { startOfDay, endOfDay, startOfWeek, endOfWeek, startOfMonth, endOfMonth, addDays, addWeeks, addMonths, addMinutes, addHours, isSameDay, isSameMonth, isToday, isWeekend, isWithinRange, isBefore, isAfter, getDayOfWeek, getWeekNumber, daysInMonth, diffInMinutes, diffInDays, getSlotsBetween, getTimeSlots, getDaysInRange, getWeekDays, getMonthCalendarDays, formatTime, formatDate, formatDayHeader, formatWeekday, formatDayNumber, formatMonthYear, formatWeekRange, formatFullDate, snapToSlot, floorToSlot, eventsOverlap, isEventInRange, isEventOnDay, isAllDayEvent, getEventDuration, ensureValidEventEnd, } from './date-utils.js';
10
+ export { expandRecurring, expandAllRecurring } from './recurring.js';
11
+ export { injectCalendarStyles, resetCalendarStylesInjection } from './styles.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9C,YAAY,EAEV,eAAe,EACf,cAAc,EACd,aAAa,EACb,YAAY,EACZ,eAAe,EAGf,QAAQ,EACR,YAAY,EAGZ,UAAU,EACV,kBAAkB,EAGlB,aAAa,EAGb,SAAS,EACT,aAAa,EACb,aAAa,EACb,aAAa,GACd,MAAM,YAAY,CAAA;AAGnB,OAAO,EACL,UAAU,EACV,QAAQ,EACR,WAAW,EACX,SAAS,EACT,YAAY,EACZ,UAAU,EACV,OAAO,EACP,QAAQ,EACR,SAAS,EACT,UAAU,EACV,QAAQ,EACR,SAAS,EACT,WAAW,EACX,OAAO,EACP,SAAS,EACT,aAAa,EACb,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,aAAa,EACb,WAAW,EACX,aAAa,EACb,UAAU,EACV,eAAe,EACf,YAAY,EACZ,cAAc,EACd,WAAW,EACX,oBAAoB,EACpB,UAAU,EACV,UAAU,EACV,eAAe,EACf,aAAa,EACb,eAAe,EACf,eAAe,EACf,eAAe,EACf,cAAc,EACd,UAAU,EACV,WAAW,EACX,aAAa,EACb,cAAc,EACd,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAGpE,OAAO,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @liteforge/calendar
3
+ *
4
+ * Signals-based scheduling calendar with day/week/month/agenda views,
5
+ * resources (therapists/rooms), drag & drop, and recurring events.
6
+ */
7
+ export { createCalendar } from './calendar.js';
8
+ // Date utilities (exported for advanced usage)
9
+ export { startOfDay, endOfDay, startOfWeek, endOfWeek, startOfMonth, endOfMonth, addDays, addWeeks, addMonths, addMinutes, addHours, isSameDay, isSameMonth, isToday, isWeekend, isWithinRange, isBefore, isAfter, getDayOfWeek, getWeekNumber, daysInMonth, diffInMinutes, diffInDays, getSlotsBetween, getTimeSlots, getDaysInRange, getWeekDays, getMonthCalendarDays, formatTime, formatDate, formatDayHeader, formatWeekday, formatDayNumber, formatMonthYear, formatWeekRange, formatFullDate, snapToSlot, floorToSlot, eventsOverlap, isEventInRange, isEventOnDay, isAllDayEvent, getEventDuration, ensureValidEventEnd, } from './date-utils.js';
10
+ // Recurring event expansion
11
+ export { expandRecurring, expandAllRecurring } from './recurring.js';
12
+ // Style injection (for advanced usage)
13
+ export { injectCalendarStyles, resetCalendarStylesInjection } from './styles.js';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AA4B9C,+CAA+C;AAC/C,OAAO,EACL,UAAU,EACV,QAAQ,EACR,WAAW,EACX,SAAS,EACT,YAAY,EACZ,UAAU,EACV,OAAO,EACP,QAAQ,EACR,SAAS,EACT,UAAU,EACV,QAAQ,EACR,SAAS,EACT,WAAW,EACX,OAAO,EACP,SAAS,EACT,aAAa,EACb,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,aAAa,EACb,WAAW,EACX,aAAa,EACb,UAAU,EACV,eAAe,EACf,YAAY,EACZ,cAAc,EACd,WAAW,EACX,oBAAoB,EACpB,UAAU,EACV,UAAU,EACV,eAAe,EACf,aAAa,EACb,eAAe,EACf,eAAe,EACf,eAAe,EACf,cAAc,EACd,UAAU,EACV,WAAW,EACX,aAAa,EACb,cAAc,EACd,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,iBAAiB,CAAA;AAExB,4BAA4B;AAC5B,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAEpE,uCAAuC;AACvC,OAAO,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAA"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @liteforge/calendar - Drag & Drop Interaction
3
+ *
4
+ * Enables moving events by dragging them to a new time slot.
5
+ */
6
+ import type { CalendarEvent, ResolvedTimeConfig } from '../types.js';
7
+ export interface DragDropOptions<T extends CalendarEvent> {
8
+ dayColumns: HTMLElement[];
9
+ days: Date[];
10
+ config: ResolvedTimeConfig;
11
+ resourceIds?: string[];
12
+ onEventDrop?: (event: T, newStart: Date, newEnd: Date, newResourceId?: string) => void;
13
+ }
14
+ export interface DragState<T extends CalendarEvent> {
15
+ isDragging: boolean;
16
+ event: T | null;
17
+ originalElement: HTMLElement | null;
18
+ ghostElement: HTMLElement | null;
19
+ originalStart: Date | null;
20
+ originalEnd: Date | null;
21
+ originalResourceId: string | undefined;
22
+ startX: number;
23
+ startY: number;
24
+ cleanup: () => void;
25
+ }
26
+ /**
27
+ * Set up drag & drop for an event element.
28
+ */
29
+ export declare function setupEventDrag<T extends CalendarEvent>(eventElement: HTMLElement, event: T, options: DragDropOptions<T>): DragState<T>;
30
+ //# sourceMappingURL=drag-drop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drag-drop.d.ts","sourceRoot":"","sources":["../../src/interactions/drag-drop.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAGpE,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,aAAa;IACtD,UAAU,EAAE,WAAW,EAAE,CAAA;IACzB,IAAI,EAAE,IAAI,EAAE,CAAA;IACZ,MAAM,EAAE,kBAAkB,CAAA;IAC1B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CACvF;AAED,MAAM,WAAW,SAAS,CAAC,CAAC,SAAS,aAAa;IAChD,UAAU,EAAE,OAAO,CAAA;IACnB,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;IACf,eAAe,EAAE,WAAW,GAAG,IAAI,CAAA;IACnC,YAAY,EAAE,WAAW,GAAG,IAAI,CAAA;IAChC,aAAa,EAAE,IAAI,GAAG,IAAI,CAAA;IAC1B,WAAW,EAAE,IAAI,GAAG,IAAI,CAAA;IACxB,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAkED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,aAAa,EACpD,YAAY,EAAE,WAAW,EACzB,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,GAC1B,SAAS,CAAC,CAAC,CAAC,CA8Kd"}
@@ -0,0 +1,207 @@
1
+ /**
2
+ * @liteforge/calendar - Drag & Drop Interaction
3
+ *
4
+ * Enables moving events by dragging them to a new time slot.
5
+ */
6
+ import { addMinutes, diffInMinutes } from '../date-utils.js';
7
+ const DRAG_THRESHOLD = 5; // pixels
8
+ /**
9
+ * Create a ghost element for dragging.
10
+ */
11
+ function createGhostElement(original) {
12
+ const ghost = original.cloneNode(true);
13
+ ghost.classList.add('lf-cal-event--ghost');
14
+ ghost.style.position = 'fixed';
15
+ ghost.style.zIndex = '10000';
16
+ ghost.style.width = `${original.offsetWidth}px`;
17
+ ghost.style.height = `${original.offsetHeight}px`;
18
+ ghost.style.opacity = '0.8';
19
+ ghost.style.pointerEvents = 'none';
20
+ ghost.style.boxShadow = '0 4px 12px rgba(0,0,0,0.2)';
21
+ return ghost;
22
+ }
23
+ /**
24
+ * Calculate new event time based on drop position.
25
+ */
26
+ function calculateNewTime(y, dayColumn, day, config) {
27
+ const rect = dayColumn.getBoundingClientRect();
28
+ const relativeY = y - rect.top;
29
+ const slotHeight = 40; // CSS variable --lf-cal-slot-height default
30
+ const totalSlots = (config.dayEnd - config.dayStart) * (60 / config.slotDuration);
31
+ // Calculate which slot index we're in
32
+ const slotIndex = Math.floor(relativeY / slotHeight);
33
+ const clampedIndex = Math.max(0, Math.min(slotIndex, totalSlots - 1));
34
+ // Convert to time
35
+ const minutesFromStart = clampedIndex * config.slotDuration;
36
+ const hours = config.dayStart + Math.floor(minutesFromStart / 60);
37
+ const minutes = minutesFromStart % 60;
38
+ const result = new Date(day);
39
+ result.setHours(hours, minutes, 0, 0);
40
+ return result;
41
+ }
42
+ /**
43
+ * Find which day column the pointer is over.
44
+ */
45
+ function findDayColumnAtX(x, dayColumns) {
46
+ for (let i = 0; i < dayColumns.length; i++) {
47
+ const column = dayColumns[i];
48
+ if (!column)
49
+ continue;
50
+ const rect = column.getBoundingClientRect();
51
+ if (x >= rect.left && x <= rect.right) {
52
+ return { column, index: i };
53
+ }
54
+ }
55
+ return null;
56
+ }
57
+ /**
58
+ * Set up drag & drop for an event element.
59
+ */
60
+ export function setupEventDrag(eventElement, event, options) {
61
+ const { dayColumns, days, config, resourceIds, onEventDrop } = options;
62
+ const state = {
63
+ isDragging: false,
64
+ event: null,
65
+ originalElement: null,
66
+ ghostElement: null,
67
+ originalStart: null,
68
+ originalEnd: null,
69
+ originalResourceId: undefined,
70
+ startX: 0,
71
+ startY: 0,
72
+ cleanup: () => { },
73
+ };
74
+ let thresholdMet = false;
75
+ let currentDropTarget = null;
76
+ const handlePointerDown = (e) => {
77
+ // Only handle left click
78
+ if (e.button !== 0)
79
+ return;
80
+ // Ignore if clicking resize handle
81
+ if (e.target.classList.contains('lf-cal-event-resize-handle')) {
82
+ return;
83
+ }
84
+ state.event = event;
85
+ state.originalElement = eventElement;
86
+ state.originalStart = new Date(event.start);
87
+ state.originalEnd = new Date(event.end);
88
+ state.originalResourceId = event.resourceId;
89
+ state.startX = e.clientX;
90
+ state.startY = e.clientY;
91
+ thresholdMet = false;
92
+ // Add listeners for move/up
93
+ document.addEventListener('pointermove', handlePointerMove);
94
+ document.addEventListener('pointerup', handlePointerUp);
95
+ };
96
+ const handlePointerMove = (e) => {
97
+ if (!state.event || !state.originalElement)
98
+ return;
99
+ const deltaX = Math.abs(e.clientX - state.startX);
100
+ const deltaY = Math.abs(e.clientY - state.startY);
101
+ // Check threshold
102
+ if (!thresholdMet && (deltaX < DRAG_THRESHOLD && deltaY < DRAG_THRESHOLD)) {
103
+ return;
104
+ }
105
+ if (!thresholdMet) {
106
+ thresholdMet = true;
107
+ state.isDragging = true;
108
+ // Create ghost element
109
+ state.ghostElement = createGhostElement(state.originalElement);
110
+ document.body.appendChild(state.ghostElement);
111
+ // Mark original as dragging
112
+ state.originalElement.classList.add('lf-cal-event--dragging');
113
+ // Prevent text selection
114
+ document.body.style.userSelect = 'none';
115
+ document.body.style.cursor = 'grabbing';
116
+ }
117
+ if (!state.ghostElement)
118
+ return;
119
+ // Move ghost
120
+ state.ghostElement.style.left = `${e.clientX - state.ghostElement.offsetWidth / 2}px`;
121
+ state.ghostElement.style.top = `${e.clientY - 10}px`;
122
+ // Find drop target
123
+ const dayColumnInfo = findDayColumnAtX(e.clientX, dayColumns);
124
+ // Clear previous drop target
125
+ if (currentDropTarget && currentDropTarget !== dayColumnInfo?.column) {
126
+ currentDropTarget.classList.remove('lf-cal-day-column--drop-target');
127
+ }
128
+ // Highlight new drop target
129
+ if (dayColumnInfo) {
130
+ dayColumnInfo.column.classList.add('lf-cal-day-column--drop-target');
131
+ currentDropTarget = dayColumnInfo.column;
132
+ }
133
+ else {
134
+ currentDropTarget = null;
135
+ }
136
+ };
137
+ const handlePointerUp = (e) => {
138
+ // Clean up listeners
139
+ document.removeEventListener('pointermove', handlePointerMove);
140
+ document.removeEventListener('pointerup', handlePointerUp);
141
+ if (!state.isDragging || !state.event || !state.originalStart || !state.originalEnd) {
142
+ resetState();
143
+ return;
144
+ }
145
+ // Remove ghost
146
+ if (state.ghostElement) {
147
+ state.ghostElement.remove();
148
+ state.ghostElement = null;
149
+ }
150
+ // Remove dragging class
151
+ if (state.originalElement) {
152
+ state.originalElement.classList.remove('lf-cal-event--dragging');
153
+ }
154
+ // Clear drop target
155
+ if (currentDropTarget) {
156
+ currentDropTarget.classList.remove('lf-cal-day-column--drop-target');
157
+ }
158
+ // Calculate new position
159
+ const dayColumnInfo = findDayColumnAtX(e.clientX, dayColumns);
160
+ if (dayColumnInfo) {
161
+ const dayIndex = dayColumnInfo.index;
162
+ const day = days[dayIndex];
163
+ if (day) {
164
+ const newStart = calculateNewTime(e.clientY, dayColumnInfo.column, day, config);
165
+ // Calculate new end based on original duration
166
+ const durationMinutes = diffInMinutes(state.originalStart, state.originalEnd);
167
+ const newEnd = addMinutes(newStart, durationMinutes);
168
+ // Get new resource ID if we have resources
169
+ const newResourceId = resourceIds?.[dayIndex];
170
+ // Call drop handler
171
+ if (onEventDrop) {
172
+ onEventDrop(state.event, newStart, newEnd, newResourceId);
173
+ }
174
+ }
175
+ }
176
+ resetState();
177
+ };
178
+ const resetState = () => {
179
+ state.isDragging = false;
180
+ state.event = null;
181
+ state.originalElement = null;
182
+ state.originalStart = null;
183
+ state.originalEnd = null;
184
+ state.originalResourceId = undefined;
185
+ document.body.style.userSelect = '';
186
+ document.body.style.cursor = '';
187
+ thresholdMet = false;
188
+ currentDropTarget = null;
189
+ };
190
+ // Attach listener
191
+ eventElement.addEventListener('pointerdown', handlePointerDown);
192
+ // Store cleanup
193
+ state.cleanup = () => {
194
+ eventElement.removeEventListener('pointerdown', handlePointerDown);
195
+ document.removeEventListener('pointermove', handlePointerMove);
196
+ document.removeEventListener('pointerup', handlePointerUp);
197
+ if (state.ghostElement) {
198
+ state.ghostElement.remove();
199
+ }
200
+ if (currentDropTarget) {
201
+ currentDropTarget.classList.remove('lf-cal-day-column--drop-target');
202
+ }
203
+ resetState();
204
+ };
205
+ return state;
206
+ }
207
+ //# sourceMappingURL=drag-drop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drag-drop.js","sourceRoot":"","sources":["../../src/interactions/drag-drop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @liteforge/calendar - Interactions Module
3
+ */
4
+ export { setupSlotSelection } from './slot-selection.js';
5
+ export type { SlotSelectionOptions, SlotSelectionState } from './slot-selection.js';
6
+ export { setupEventDrag } from './drag-drop.js';
7
+ export type { DragDropOptions, DragState } from './drag-drop.js';
8
+ export { setupEventResize } from './resize.js';
9
+ export type { ResizeOptions, ResizeState } from './resize.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interactions/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACxD,YAAY,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAEnF,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAEhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9C,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA"}