@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
|
@@ -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":"AAAA;;;;;;GAMG;AAEH,8DAA8D;AAE9D,MAAM,UAAU,UAAU,CAAC,IAAU;IACnC,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7B,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3B,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAU;IACjC,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7B,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;IAChC,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAU,EAAE,YAAoB,CAAC;IAC3D,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;IAC3B,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,SAAS,CAAA;IACxD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAA;IACvC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3B,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAU,EAAE,YAAoB,CAAC;IACzD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAC1C,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAA;IAC9B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;IACpC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;IAChC,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAU;IACrC,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IACjB,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3B,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAU;IACnC,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7B,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IACzC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;IAChC,OAAO,MAAM,CAAA;AACf,CAAC;AAED,8DAA8D;AAE9D,MAAM,UAAU,OAAO,CAAC,IAAU,EAAE,IAAY;IAC9C,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAA;IACvC,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAU,EAAE,KAAa;IAChD,OAAO,OAAO,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;AACjC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAU,EAAE,MAAc;IAClD,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,EAAE,CAAA;IAC5B,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAA;IAC9C,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAA;IAClC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAA;IACrC,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAU,EAAE,OAAe;IACpD,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;IACtD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAU,EAAE,KAAa;IAChD,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC,CAAA;AACrC,CAAC;AAED,8DAA8D;AAE9D,MAAM,UAAU,SAAS,CAAC,CAAO,EAAE,CAAO;IACxC,OAAO,CACL,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE;QACnC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE;QAC7B,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,CAC5B,CAAA;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAO,EAAE,CAAO;IAC1C,OAAO,CACL,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE;QACnC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE,CAC9B,CAAA;AACH,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAU;IAChC,OAAO,SAAS,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAA;AACpC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAU;IAClC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;IACzB,OAAO,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAA;AAC/B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAU,EAAE,KAAW,EAAE,GAAS;IAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;IAC3B,OAAO,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAA;AACzD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,CAAO,EAAE,CAAO;IACvC,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,CAAO,EAAE,CAAO;IACtC,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAA;AAClC,CAAC;AAED,8DAA8D;AAE9D,MAAM,UAAU,YAAY,CAAC,IAAU;IACrC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAA;AACtB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAU;IACtC,kBAAkB;IAClB,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;IACvC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;IACrC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC,CAAA;IAC5C,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,EAAE,CAAA;IACtC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACrB,IAAI,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IACzD,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,aAAa,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,SAAS,CAAC,CAAA;AACtE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAU;IACpC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;AACvE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,CAAO,EAAE,CAAO;IAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAA;AAC9D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,CAAO,EAAE,CAAO;IACzC,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;IAC5B,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;IAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;AAClF,CAAC;AAED,8DAA8D;AAE9D,MAAM,UAAU,eAAe,CAC7B,KAAW,EACX,GAAS,EACT,YAAoB;IAEpB,MAAM,KAAK,GAAW,EAAE,CAAA;IACxB,IAAI,OAAO,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAA;IAE7B,OAAO,OAAO,GAAG,GAAG,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;QAC7B,OAAO,GAAG,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;IAC7C,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,IAAU,EACV,QAAgB,EAChB,MAAc,EACd,YAAoB;IAEpB,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAA;IAC5B,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAEjC,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1B,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAE7B,OAAO,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,YAAY,CAAC,CAAA;AAClD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAW,EAAE,GAAS;IACnD,MAAM,IAAI,GAAW,EAAE,CAAA;IACvB,IAAI,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;IAC/B,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;IAE9B,OAAO,OAAO,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;QAC5B,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;IAC/B,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAU,EAAE,SAAiB,EAAE,aAAuB,EAAE;IAClF,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAC1C,MAAM,IAAI,GAAW,EAAE,CAAA;IAEvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QAC7B,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,CAAA;QAC9B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAChB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAU,EAAE,SAAiB;IAChE,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;IACrC,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;IACjC,MAAM,aAAa,GAAG,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;IACxD,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;IAElD,OAAO,cAAc,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA;AACnD,CAAC;AAED,8DAA8D;AAE9D,MAAM,UAAU,UAAU,CAAC,IAAU,EAAE,SAAiB,OAAO;IAC7D,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;QACrC,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,KAAK;KACd,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AACjB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAU,EAAE,SAAiB,OAAO;IAC7D,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;QACrC,OAAO,EAAE,OAAO;QAChB,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,OAAO;KACf,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AACjB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAU,EAAE,SAAiB,OAAO;IAClE,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;QACrC,OAAO,EAAE,OAAO;QAChB,GAAG,EAAE,SAAS;KACf,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AACjB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAU,EAAE,SAAiB,OAAO;IAChE,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;QACrC,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AACjB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAU;IACxC,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;AAC/B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAU,EAAE,SAAiB,OAAO;IAClE,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;QACrC,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,SAAS;KAChB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AACjB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAU,EAAE,SAAiB,OAAO,EAAE,YAAoB,CAAC;IACzF,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAC1C,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAEtC,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;IAEnC,IAAI,KAAK,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;QACxC,OAAO,MAAM,OAAO,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAA;IAC/G,CAAC;IAED,OAAO,MAAM,OAAO,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAA;AACpL,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAU,EAAE,SAAiB,OAAO;IACjE,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;QACrC,OAAO,EAAE,MAAM;QACf,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,SAAS;KAChB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AACjB,CAAC;AAED,8DAA8D;AAE9D,MAAM,UAAU,uBAAuB,CAAC,IAAU,EAAE,QAAgB;IAClE,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;IAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;IACjC,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,GAAG,OAAO,CAAA;AAC1C,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,IAAU,EACV,QAAgB,EAChB,YAAoB,EACpB,UAAkB;IAElB,MAAM,OAAO,GAAG,uBAAuB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IACvD,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,GAAG,UAAU,CAAA;AAC9C,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,KAAW,EACX,GAAS,EACT,YAAoB,EACpB,UAAkB;IAElB,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IACzC,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,GAAG,UAAU,CAAA;AAC9C,CAAC;AAED,8DAA8D;AAE9D,MAAM,UAAU,UAAU,CAAC,IAAU,EAAE,YAAoB;IACzD,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAA;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,YAAY,CAAC,GAAG,YAAY,CAAA;IACjE,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAChC,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAU,EAAE,YAAoB;IAC1D,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAA;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,YAAY,CAAC,GAAG,YAAY,CAAA;IACjE,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAChC,OAAO,MAAM,CAAA;AACf,CAAC;AAED,8DAA8D;AAE9D,MAAM,UAAU,WAAW,CAAC,IAAU;IACpC,OAAO;QACL,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC;QACvB,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC;KACpB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAU,EAAE,SAAiB;IACxD,OAAO;QACL,KAAK,EAAE,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC;QACnC,GAAG,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC;KAChC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAU;IACtC,OAAO;QACL,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC;QACzB,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC;KACtB,CAAA;AACH,CAAC;AAED,8DAA8D;AAE9D,MAAM,UAAU,aAAa,CAC3B,CAA6B,EAC7B,CAA6B;IAE7B,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAA;AAC3C,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,KAAiC,EACjC,UAAgB,EAChB,QAAc;IAEd,OAAO,KAAK,CAAC,KAAK,GAAG,QAAQ,IAAI,KAAK,CAAC,GAAG,GAAG,UAAU,CAAA;AACzD,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,KAAiC,EACjC,GAAS;IAET,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;IAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;IAC5B,OAAO,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;AAChD,CAAC;AAED,8DAA8D;AAE9D;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,KAAmD;IAC/E,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IAE7B,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAA;IAE9D,0FAA0F;IAC1F,gDAAgD;IAChD,MAAM,eAAe,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;IAC3C,IAAI,UAAU,IAAI,eAAe;QAAE,OAAO,IAAI,CAAA;IAE9C,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAiC,EACjC,mBAA2B;IAE3B,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAA;IAC9D,MAAM,aAAa,GAAG,mBAAmB,GAAG,EAAE,GAAG,IAAI,CAAA;IAErD,IAAI,UAAU,IAAI,CAAC;QAAE,OAAO,aAAa,CAAA;IACzC,OAAO,UAAU,CAAA;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAiC,EACjC,mBAA2B;IAE3B,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QACjD,OAAO,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAA;IACrD,CAAC;IACD,OAAO,KAAK,CAAC,GAAG,CAAA;AAClB,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -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"}
|