@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 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/views/shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,281 @@
1
+ /**
2
+ * @liteforge/calendar - Shared View Utilities
3
+ */
4
+ import { getTimeSlots, formatTime, getSlotPosition, getEventHeight, isEventOnDay, isAllDayEvent, } from '../date-utils.js';
5
+ // ─── Overlap Calculation ───────────────────────────────────
6
+ export function calculateOverlaps(events) {
7
+ if (events.length === 0)
8
+ return [];
9
+ // Sort by start time, then by duration (longer first)
10
+ const sorted = [...events].sort((a, b) => {
11
+ const startDiff = a.start.getTime() - b.start.getTime();
12
+ if (startDiff !== 0)
13
+ return startDiff;
14
+ // Longer events first
15
+ const aDur = a.end.getTime() - a.start.getTime();
16
+ const bDur = b.end.getTime() - b.start.getTime();
17
+ return bDur - aDur;
18
+ });
19
+ const layouts = [];
20
+ const columns = [];
21
+ for (const event of sorted) {
22
+ // Find the first available column
23
+ let column = 0;
24
+ let placed = false;
25
+ for (let i = 0; i < columns.length; i++) {
26
+ const col = columns[i];
27
+ if (col && col.end <= event.start) {
28
+ // This column is free
29
+ columns[i] = { end: event.end, column: i };
30
+ column = i;
31
+ placed = true;
32
+ break;
33
+ }
34
+ }
35
+ if (!placed) {
36
+ // Need a new column
37
+ column = columns.length;
38
+ columns.push({ end: event.end, column });
39
+ }
40
+ layouts.push({
41
+ event,
42
+ column,
43
+ totalColumns: 0, // Will calculate after
44
+ });
45
+ }
46
+ // Calculate total columns for each group
47
+ // Group events that overlap with each other
48
+ for (const layout of layouts) {
49
+ const overlapping = layouts.filter((other) => layout.event.start < other.event.end &&
50
+ layout.event.end > other.event.start);
51
+ const maxColumn = overlapping.length > 0
52
+ ? Math.max(...overlapping.map((l) => l.column))
53
+ : 0;
54
+ layout.totalColumns = maxColumn + 1;
55
+ }
56
+ return layouts;
57
+ }
58
+ // ─── Event Filtering ───────────────────────────────────────
59
+ export function getEventsForDay(events, day, resourceId) {
60
+ return events.filter((event) => {
61
+ if (!isEventOnDay(event, day))
62
+ return false;
63
+ if (resourceId !== undefined && event.resourceId !== resourceId)
64
+ return false;
65
+ return true;
66
+ });
67
+ }
68
+ /**
69
+ * Get only timed (non-all-day) events for a specific day.
70
+ */
71
+ export function getTimedEventsForDay(events, day, resourceId) {
72
+ return getEventsForDay(events, day, resourceId).filter((event) => !isAllDayEvent(event));
73
+ }
74
+ /**
75
+ * Get only all-day events for a specific day.
76
+ */
77
+ export function getAllDayEventsForDay(events, day, resourceId) {
78
+ return getEventsForDay(events, day, resourceId).filter((event) => isAllDayEvent(event));
79
+ }
80
+ export function getEventsForResource(events, resourceId) {
81
+ return events.filter((event) => event.resourceId === resourceId);
82
+ }
83
+ // ─── Time Slot Rendering ───────────────────────────────────
84
+ export function renderTimeColumn(date, config, locale) {
85
+ const column = document.createElement('div');
86
+ column.className = 'lf-cal-time-column';
87
+ const slots = getTimeSlots(date, config.dayStart, config.dayEnd, config.slotDuration);
88
+ for (const slot of slots) {
89
+ const label = document.createElement('div');
90
+ label.className = 'lf-cal-time-label';
91
+ // Only show label on the hour
92
+ if (slot.getMinutes() === 0) {
93
+ label.textContent = formatTime(slot, locale);
94
+ }
95
+ column.appendChild(label);
96
+ }
97
+ return column;
98
+ }
99
+ export function renderTimeSlots(date, config, resource) {
100
+ const container = document.createElement('div');
101
+ container.style.position = 'relative';
102
+ const slots = getTimeSlots(date, config.dayStart, config.dayEnd, config.slotDuration);
103
+ const dayOfWeek = date.getDay();
104
+ for (let i = 0; i < slots.length; i++) {
105
+ const slot = slots[i];
106
+ if (!slot)
107
+ continue;
108
+ const slotEl = document.createElement('div');
109
+ let slotClass = 'lf-cal-time-slot';
110
+ if (slot.getMinutes() === 0) {
111
+ slotClass += ' lf-cal-time-slot--hour';
112
+ }
113
+ // Check if blocked (outside working hours)
114
+ if (resource?.workingHours) {
115
+ const workingHours = resource.workingHours[dayOfWeek];
116
+ if (!workingHours) {
117
+ slotClass += ' lf-cal-time-slot--blocked';
118
+ }
119
+ else {
120
+ const hour = slot.getHours();
121
+ if (hour < workingHours.start || hour >= workingHours.end) {
122
+ slotClass += ' lf-cal-time-slot--blocked';
123
+ }
124
+ }
125
+ }
126
+ slotEl.className = slotClass;
127
+ container.appendChild(slotEl);
128
+ }
129
+ return container;
130
+ }
131
+ // ─── Event Rendering ───────────────────────────────────────
132
+ export function renderEvent(event, config, layout, customContent, onClick, editable, onDragStart, onResizeStart) {
133
+ const eventEl = document.createElement('div');
134
+ eventEl.className = 'lf-cal-event';
135
+ eventEl.dataset.eventId = event.id;
136
+ // ARIA attributes for accessibility
137
+ eventEl.setAttribute('role', 'button');
138
+ eventEl.setAttribute('tabindex', '0');
139
+ eventEl.setAttribute('aria-label', `${event.title}, ${formatTime(event.start)} - ${formatTime(event.end)}`);
140
+ eventEl.title = event.title; // Native tooltip with full title
141
+ // Position
142
+ const slotHeight = 40; // CSS variable --lf-cal-slot-height default
143
+ const top = getSlotPosition(event.start, config.dayStart, config.slotDuration, slotHeight);
144
+ const height = getEventHeight(event.start, event.end, config.slotDuration, slotHeight);
145
+ eventEl.style.top = `${top}px`;
146
+ eventEl.style.height = `${Math.max(height, 20)}px`;
147
+ // Overlap positioning
148
+ const width = 100 / layout.totalColumns;
149
+ const left = layout.column * width;
150
+ eventEl.style.left = `calc(${left}% + 2px)`;
151
+ eventEl.style.width = `calc(${width}% - 4px)`;
152
+ // Color
153
+ if (event.color) {
154
+ eventEl.style.background = event.color;
155
+ }
156
+ // Content
157
+ if (customContent) {
158
+ eventEl.appendChild(customContent(event));
159
+ }
160
+ else {
161
+ const titleEl = document.createElement('div');
162
+ titleEl.className = 'lf-cal-event-title';
163
+ titleEl.textContent = event.title;
164
+ const timeEl = document.createElement('div');
165
+ timeEl.className = 'lf-cal-event-time';
166
+ timeEl.textContent = `${formatTime(event.start)} - ${formatTime(event.end)}`;
167
+ eventEl.appendChild(titleEl);
168
+ eventEl.appendChild(timeEl);
169
+ }
170
+ // Click handler
171
+ if (onClick) {
172
+ eventEl.addEventListener('click', (e) => {
173
+ e.stopPropagation();
174
+ onClick(event);
175
+ });
176
+ }
177
+ // Drag & resize
178
+ const isEditable = event.editable !== false && editable;
179
+ if (isEditable) {
180
+ eventEl.dataset.editable = 'true';
181
+ // Create resize handle if onResizeStart is provided
182
+ if (onResizeStart) {
183
+ const resizeHandle = document.createElement('div');
184
+ resizeHandle.className = 'lf-cal-event-resize-handle';
185
+ eventEl.appendChild(resizeHandle);
186
+ }
187
+ // Call setup functions IMMEDIATELY - they will add their own pointerdown handlers
188
+ // This is called during element creation, before user interaction
189
+ if (onDragStart) {
190
+ onDragStart(event, eventEl);
191
+ }
192
+ if (onResizeStart) {
193
+ onResizeStart(event, eventEl);
194
+ }
195
+ }
196
+ return eventEl;
197
+ }
198
+ // ─── All-Day Event Rendering ───────────────────────────────
199
+ export function renderAllDayEvent(event, onClick) {
200
+ const eventEl = document.createElement('div');
201
+ eventEl.className = 'lf-cal-event lf-cal-event--allday';
202
+ eventEl.dataset.eventId = event.id;
203
+ // Color
204
+ if (event.color) {
205
+ eventEl.style.background = event.color;
206
+ }
207
+ // Title only for all-day events
208
+ const titleEl = document.createElement('div');
209
+ titleEl.className = 'lf-cal-event-title';
210
+ titleEl.textContent = event.title;
211
+ eventEl.appendChild(titleEl);
212
+ // Click handler
213
+ if (onClick) {
214
+ eventEl.addEventListener('click', (e) => {
215
+ e.stopPropagation();
216
+ onClick(event);
217
+ });
218
+ }
219
+ return eventEl;
220
+ }
221
+ export function renderAllDayRow(options) {
222
+ const { days, events, classes, onEventClick, hasTimeColumnSpacer = true } = options;
223
+ const row = document.createElement('div');
224
+ row.className = getClass('header', classes, 'lf-cal-allday-row');
225
+ // Time column spacer (to align with time column below)
226
+ if (hasTimeColumnSpacer) {
227
+ const spacer = document.createElement('div');
228
+ spacer.className = 'lf-cal-allday-label';
229
+ spacer.textContent = 'All-day';
230
+ row.appendChild(spacer);
231
+ }
232
+ // Container for day cells
233
+ const cellsContainer = document.createElement('div');
234
+ cellsContainer.className = 'lf-cal-allday-cells';
235
+ for (const day of days) {
236
+ const cell = document.createElement('div');
237
+ cell.className = 'lf-cal-allday-cell';
238
+ // Get all-day events for this day
239
+ const dayAllDayEvents = events.filter((event) => isAllDayEvent(event) && isEventOnDay(event, day));
240
+ for (const event of dayAllDayEvents) {
241
+ const eventEl = renderAllDayEvent(event, onEventClick);
242
+ cell.appendChild(eventEl);
243
+ }
244
+ cellsContainer.appendChild(cell);
245
+ }
246
+ row.appendChild(cellsContainer);
247
+ return row;
248
+ }
249
+ // ─── Now Indicator ─────────────────────────────────────────
250
+ export function createNowIndicator(config) {
251
+ if (!config.nowIndicator)
252
+ return null;
253
+ const indicator = document.createElement('div');
254
+ indicator.className = 'lf-cal-now-indicator';
255
+ const updatePosition = () => {
256
+ const now = new Date();
257
+ const slotHeight = 40;
258
+ const top = getSlotPosition(now, config.dayStart, config.slotDuration, slotHeight);
259
+ indicator.style.top = `${top}px`;
260
+ // Hide if outside day range
261
+ const hour = now.getHours();
262
+ if (hour < config.dayStart || hour >= config.dayEnd) {
263
+ indicator.style.display = 'none';
264
+ }
265
+ else {
266
+ indicator.style.display = 'block';
267
+ }
268
+ };
269
+ updatePosition();
270
+ // Update every minute
271
+ const intervalId = setInterval(updatePosition, 60000);
272
+ indicator.cleanup = () => {
273
+ clearInterval(intervalId);
274
+ };
275
+ return indicator;
276
+ }
277
+ // ─── CSS Class Helpers ─────────────────────────────────────
278
+ export function getClass(name, classes, defaultClass) {
279
+ return classes?.[name] ?? defaultClass;
280
+ }
281
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/views/shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @liteforge/calendar - Week View Renderer
3
+ */
4
+ import type { CalendarEvent, ResolvedTimeConfig, CalendarClasses } from '../types.js';
5
+ interface WeekViewOptions<T extends CalendarEvent> {
6
+ date: () => Date;
7
+ events: () => T[];
8
+ config: ResolvedTimeConfig;
9
+ locale: string;
10
+ classes: Partial<CalendarClasses>;
11
+ eventContent: ((event: T) => Node) | undefined;
12
+ slotContent: ((date: Date, resourceId?: string) => Node | null) | undefined;
13
+ dayHeaderContent: ((date: Date) => Node) | undefined;
14
+ onEventClick: ((event: T) => void) | undefined;
15
+ onSlotClick: ((start: Date, end: Date, resourceId?: string) => void) | undefined;
16
+ onSlotSelect: ((start: Date, end: Date, resourceId?: string) => void) | undefined;
17
+ onEventDrop: ((event: T, newStart: Date, newEnd: Date, newResourceId?: string) => void) | undefined;
18
+ onEventResize: ((event: T, newEnd: Date) => void) | undefined;
19
+ editable: boolean | undefined;
20
+ selectable: boolean | undefined;
21
+ }
22
+ export declare function renderWeekView<T extends CalendarEvent>(options: WeekViewOptions<T>): HTMLDivElement;
23
+ export {};
24
+ //# sourceMappingURL=week-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"week-view.d.ts","sourceRoot":"","sources":["../../src/views/week-view.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EACV,aAAa,EACb,kBAAkB,EAClB,eAAe,EAChB,MAAM,aAAa,CAAA;AAsBpB,UAAU,eAAe,CAAC,CAAC,SAAS,aAAa;IAC/C,IAAI,EAAE,MAAM,IAAI,CAAA;IAChB,MAAM,EAAE,MAAM,CAAC,EAAE,CAAA;IACjB,MAAM,EAAE,kBAAkB,CAAA;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;IACjC,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;IAC9C,WAAW,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC,GAAG,SAAS,CAAA;IAC3E,gBAAgB,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;IACpD,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;IAC9C,WAAW,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;IAChF,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;IACjF,WAAW,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;IACnG,aAAa,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;IAC7D,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAA;IAC7B,UAAU,EAAE,OAAO,GAAG,SAAS,CAAA;CAChC;AAED,wBAAgB,cAAc,CAAC,CAAC,SAAS,aAAa,EACpD,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,GAC1B,cAAc,CAidhB"}