react-weekly-planning 1.0.30 → 1.0.32
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/README.md +90 -0
- package/__tests__/page.test.js +92 -92
- package/components/AddTask/index.js +17 -17
- package/components/CalendarForWeek.js +49 -50
- package/components/CalendarForWeek.tsx +7 -3
- package/components/CalendarForday.js +33 -34
- package/components/CalendarForday.tsx +3 -2
- package/components/DayContainer/index.js +15 -15
- package/components/GroupContainer/index.js +15 -15
- package/components/GroupsHeadContainer/index.js +9 -9
- package/components/SumHoursContainer/index.js +16 -15
- package/components/SumHoursContainer/index.tsx +2 -1
- package/components/SumHoursHead/index.js +9 -9
- package/components/TaskContainer/index.js +35 -35
- package/components/TaskList/index.js +4 -5
- package/components/TaskList/index.tsx +6 -13
- package/contexts/CalendarContext.js +12 -12
- package/definitions/index.js +1 -1
- package/definitions/index.ts +1 -0
- package/hooks/useCalendarDateState.js +19 -19
- package/hooks/useCalendarDateState.ts +5 -4
- package/index.js +70 -70
- package/index.tsx +1 -1
- package/jest.config.js +9 -9
- package/lib/slyles.js +21 -21
- package/lib/utils.js +636 -605
- package/lib/utils.ts +107 -64
- package/package.json +28 -31
package/lib/utils.ts
CHANGED
|
@@ -31,7 +31,7 @@ endDate.setDate(endDate.getDate() + (6 - currentDayOfWeek));
|
|
|
31
31
|
endDate.setHours(23, 59, 59, 999);
|
|
32
32
|
export const endDateMilliseconds = endDate.getTime();
|
|
33
33
|
|
|
34
|
-
export function getDayHourly(weekOffset: number) {
|
|
34
|
+
export function getDayHourly(weekOffset: number, timeZone?: TimeZone) {
|
|
35
35
|
const dailyHours: {
|
|
36
36
|
positionDay: number;
|
|
37
37
|
day: Date;
|
|
@@ -40,15 +40,16 @@ export function getDayHourly(weekOffset: number) {
|
|
|
40
40
|
}[] = [];
|
|
41
41
|
let dayOffset = weekOffset;
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
43
|
+
const resolvedCurrentDate = timeZone ? getDateObjectInTimeZone(timeZone) : new Date();
|
|
44
|
+
const currentDayOfWeek = resolvedCurrentDate.getDay();
|
|
45
|
+
const resolvedStartDate = new Date(resolvedCurrentDate);
|
|
46
|
+
resolvedStartDate.setDate(resolvedStartDate.getDate() - currentDayOfWeek);
|
|
47
|
+
resolvedStartDate.setHours(0, 0, 0, 0);
|
|
47
48
|
|
|
48
49
|
// Loop to calculate the start and end hours for each day of the week
|
|
49
50
|
for (let i = 0; i < 7; i++) {
|
|
50
|
-
const dayDate = new Date(
|
|
51
|
-
dayDate.setDate(
|
|
51
|
+
const dayDate = new Date(resolvedStartDate);
|
|
52
|
+
dayDate.setDate(resolvedStartDate.getDate() + i);
|
|
52
53
|
const dayStart = new Date(dayDate);
|
|
53
54
|
dayStart.setHours(1, 0, 0, 0);
|
|
54
55
|
const dayEnd = new Date(dayDate);
|
|
@@ -56,9 +57,9 @@ export function getDayHourly(weekOffset: number) {
|
|
|
56
57
|
|
|
57
58
|
dailyHours.push({
|
|
58
59
|
positionDay: i,
|
|
59
|
-
day: new Date(dayStart.getTime() + dayOffset * DAY_IN_MILLISECONDS),
|
|
60
|
-
start: dayStart.getTime() + dayOffset * DAY_IN_MILLISECONDS,
|
|
61
|
-
end: dayEnd.getTime() + dayOffset * DAY_IN_MILLISECONDS,
|
|
60
|
+
day: new Date(dayStart.getTime() + (dayOffset * DAY_IN_MILLISECONDS)),
|
|
61
|
+
start: dayStart.getTime() + (dayOffset * DAY_IN_MILLISECONDS),
|
|
62
|
+
end: dayEnd.getTime() + (dayOffset * DAY_IN_MILLISECONDS),
|
|
62
63
|
});
|
|
63
64
|
}
|
|
64
65
|
return dailyHours;
|
|
@@ -114,7 +115,7 @@ export function millisecondsToInt(milliseconds: number) {
|
|
|
114
115
|
}
|
|
115
116
|
|
|
116
117
|
// Get days of the week with a jump offset
|
|
117
|
-
export function getWeekDays(jump: number) {
|
|
118
|
+
export function getWeekDays(jump: number, timeZone?: TimeZone) {
|
|
118
119
|
const days = ["Sun", "Mon", "Tues", "Wed", "Thur", "Frid", "Sat"];
|
|
119
120
|
const month = [
|
|
120
121
|
"Jan",
|
|
@@ -130,21 +131,20 @@ export function getWeekDays(jump: number) {
|
|
|
130
131
|
"Nov",
|
|
131
132
|
"Dec",
|
|
132
133
|
];
|
|
133
|
-
const currentDate = new Date();
|
|
134
|
+
const currentDate = timeZone ? getDateObjectInTimeZone(timeZone) : new Date();
|
|
134
135
|
const currentDayOfWeek = currentDate.getDay();
|
|
135
136
|
let weekDays = [];
|
|
136
137
|
|
|
137
138
|
for (let i = 0; i < 7; i++) {
|
|
138
|
-
const day = new Date();
|
|
139
|
+
const day = timeZone ? getDateObjectInTimeZone(timeZone) : new Date();
|
|
139
140
|
const diff = i - currentDayOfWeek;
|
|
140
141
|
if (currentDayOfWeek === 0) {
|
|
141
142
|
day.setDate(currentDate.getDate() + diff + jump - 7);
|
|
142
143
|
} else {
|
|
143
144
|
day.setDate(currentDate.getDate() + diff + jump);
|
|
144
145
|
}
|
|
145
|
-
const formattedDay = `${days[day.getDay()]}. ${day.getDate()}, ${
|
|
146
|
-
|
|
147
|
-
} ${day.getFullYear()}`;
|
|
146
|
+
const formattedDay = `${days[day.getDay()]}. ${day.getDate()}, ${month[day.getMonth()]
|
|
147
|
+
} ${day.getFullYear()}`;
|
|
148
148
|
weekDays.push({
|
|
149
149
|
day: days[day.getDay()],
|
|
150
150
|
dayMonth: month[day.getMonth()],
|
|
@@ -192,25 +192,16 @@ function updateSelectedDateForEcartSemaine(dateSelectionnee: Date): Date {
|
|
|
192
192
|
* @param dateSelectionnee - The selected date.
|
|
193
193
|
* @returns The week difference in days.
|
|
194
194
|
*/
|
|
195
|
-
export function calculerEcartSemaine(dateSelectionnee: Date): number {
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
}
|
|
199
|
-
const selectedDateUpdated =
|
|
200
|
-
updateSelectedDateForEcartSemaine(dateSelectionnee);
|
|
195
|
+
export function calculerEcartSemaine(dateSelectionnee: Date, timeZone?: TimeZone): number {
|
|
196
|
+
const dateActuelle = timeZone ? getDateObjectInTimeZone(timeZone) : new Date()
|
|
197
|
+
const recupDate = new Date(dateSelectionnee)
|
|
201
198
|
|
|
202
|
-
const dateActuelle = new Date();
|
|
203
|
-
const anneeActuelle = dateActuelle.getFullYear();
|
|
204
|
-
const numeroSemaineActuelle = getWeekNumber(dateActuelle);
|
|
205
199
|
|
|
206
|
-
|
|
207
|
-
|
|
200
|
+
recupDate.setUTCDate(recupDate.getUTCDate() + 4 - (recupDate.getUTCDay() || 7));
|
|
201
|
+
dateActuelle.setUTCDate(dateActuelle.getUTCDate() + 4 - (dateActuelle.getUTCDay() || 7));
|
|
208
202
|
|
|
209
|
-
const ecartSemaine =
|
|
210
|
-
semainesDepuisOrigine(anneeSelectionnee, numeroSemaineSelectionnee) -
|
|
211
|
-
semainesDepuisOrigine(anneeActuelle, numeroSemaineActuelle);
|
|
212
203
|
|
|
213
|
-
return
|
|
204
|
+
return Math.ceil((recupDate.getTime() - dateActuelle.getTime()) / 86400000)
|
|
214
205
|
}
|
|
215
206
|
|
|
216
207
|
/**
|
|
@@ -281,33 +272,43 @@ export function getSessionStorageRecordForDragAndDrop(
|
|
|
281
272
|
export function compareWeekOffset(
|
|
282
273
|
calendarDate: Date,
|
|
283
274
|
weekOffset: number,
|
|
284
|
-
taskDate: Date
|
|
275
|
+
taskDate: Date,
|
|
276
|
+
timeZone?: TimeZone
|
|
285
277
|
) {
|
|
286
278
|
// if (taskDate.getDay() === 0 && calculerEcartSemaine(taskDate) === -7) {
|
|
287
279
|
// return true;
|
|
288
280
|
// }
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
console.log(weekOffset, "WEEKOFFSET", calculerEcartSemaine(taskDate, timeZone) + 7);
|
|
284
|
+
console.log(calendarDate, "CALENDAR DATE");
|
|
285
|
+
const localTaskDate = getArbitraryDateInTimeZone(taskDate, timeZone);
|
|
286
|
+
console.log(localTaskDate.getDay(), "TASK DATE", localTaskDate);
|
|
287
|
+
|
|
288
|
+
// if (calendarDate)
|
|
289
|
+
// return (calculerEcartSemaine(calendarDate) === calculerEcartSemaine(taskDate));
|
|
290
|
+
|
|
291
|
+
const ecartTask = calculerEcartSemaine(taskDate, timeZone) + (localTaskDate.getDay() === 0 ? 7 : 0)
|
|
292
|
+
return weekOffset === ecartTask;
|
|
294
293
|
}
|
|
295
294
|
|
|
296
295
|
export const sumHoursByGroups = (
|
|
297
296
|
groupId: string,
|
|
298
297
|
tasks: TasksType | any,
|
|
299
298
|
weekOffset: number,
|
|
300
|
-
calendarDate: Date
|
|
299
|
+
calendarDate: Date,
|
|
300
|
+
timeZone?: TimeZone
|
|
301
301
|
) => {
|
|
302
302
|
let sum: number = 0;
|
|
303
|
-
tasks
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
303
|
+
if (tasks)
|
|
304
|
+
tasks.forEach((task: TaskType | any) => {
|
|
305
|
+
if (
|
|
306
|
+
task.groupId === groupId &&
|
|
307
|
+
compareWeekOffset(calendarDate, weekOffset, task.taskDate, timeZone) === true
|
|
308
|
+
) {
|
|
309
|
+
sum += task.taskEnd - task.taskStart;
|
|
310
|
+
}
|
|
311
|
+
});
|
|
311
312
|
return sum;
|
|
312
313
|
};
|
|
313
314
|
|
|
@@ -341,8 +342,8 @@ export const updateCalendarDateWithOffset = (
|
|
|
341
342
|
return newDate;
|
|
342
343
|
};
|
|
343
344
|
|
|
344
|
-
export const updateOffsetWithDateCalendar = (calendarDate: Date) => {
|
|
345
|
-
return calculerEcartSemaine(calendarDate);
|
|
345
|
+
export const updateOffsetWithDateCalendar = (calendarDate: Date, timeZone?: TimeZone) => {
|
|
346
|
+
return calculerEcartSemaine(calendarDate, timeZone);
|
|
346
347
|
};
|
|
347
348
|
|
|
348
349
|
export const millisecondsToHours = (milliseconds: number) => {
|
|
@@ -378,6 +379,9 @@ export const getSavedTasks = () => {
|
|
|
378
379
|
|
|
379
380
|
const savedTasks: TasksType | any = tasksTable.map((task) => {
|
|
380
381
|
const { taskDate, taskExpiryDate, ...rest } = task;
|
|
382
|
+
|
|
383
|
+
console.log("SAVED", taskDate);
|
|
384
|
+
|
|
381
385
|
if (taskExpiryDate) {
|
|
382
386
|
return {
|
|
383
387
|
taskDate: new Date(taskDate),
|
|
@@ -469,7 +473,18 @@ export function getDateObjectInTimeZone(timeZone: string) {
|
|
|
469
473
|
}
|
|
470
474
|
}
|
|
471
475
|
|
|
472
|
-
function
|
|
476
|
+
export function getArbitraryDateInTimeZone(date: Date, timeZone?: string) {
|
|
477
|
+
if (!timeZone) return date;
|
|
478
|
+
try {
|
|
479
|
+
return new Date(
|
|
480
|
+
date.toLocaleString("en-US", { timeZone: timeZone })
|
|
481
|
+
);
|
|
482
|
+
} catch (error) {
|
|
483
|
+
return date;
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
function recurring(ecartDay: number, task: TaskFeildsType, timeZone?: TimeZone) {
|
|
473
488
|
const newTask = { ...task };
|
|
474
489
|
|
|
475
490
|
newTask.taskStart = newTask.taskStart + ecartDay;
|
|
@@ -482,7 +497,7 @@ function recurring(ecartDay: number, task: TaskFeildsType) {
|
|
|
482
497
|
|
|
483
498
|
newTask.taskDate = new Date(newTask.taskStart);
|
|
484
499
|
|
|
485
|
-
newTask.dayIndex = newTask.taskDate.getDay();
|
|
500
|
+
newTask.dayIndex = getArbitraryDateInTimeZone(newTask.taskDate, timeZone).getDay();
|
|
486
501
|
|
|
487
502
|
newTask.taskId = getUnqueId();
|
|
488
503
|
return newTask;
|
|
@@ -492,14 +507,15 @@ export function recurringTasks(
|
|
|
492
507
|
allTasks: TasksType,
|
|
493
508
|
task: TaskFeildsType,
|
|
494
509
|
recurrenceType: "daily" | "weekly" | "monthly",
|
|
495
|
-
occurrences: number
|
|
510
|
+
occurrences: number,
|
|
511
|
+
timeZone?: TimeZone
|
|
496
512
|
): TaskFeildsType[] {
|
|
497
513
|
const tasks: TaskFeildsType[] = [];
|
|
498
514
|
|
|
499
515
|
function daily() {
|
|
500
516
|
for (let i = 0; i < occurrences; i++) {
|
|
501
517
|
// Create a copy of the task with updated taskDate for each day
|
|
502
|
-
const newTask = recurring(i * DAY_IN_MILLISECONDS, task);
|
|
518
|
+
const newTask = recurring(i * DAY_IN_MILLISECONDS, task, timeZone);
|
|
503
519
|
|
|
504
520
|
if (
|
|
505
521
|
!checkDuplicates(
|
|
@@ -517,7 +533,7 @@ export function recurringTasks(
|
|
|
517
533
|
function weekly() {
|
|
518
534
|
for (let i = 0; i < occurrences; i++) {
|
|
519
535
|
// Create a copy of the task with updated taskDate for each week
|
|
520
|
-
const newTask = recurring(i * WEEK_IN_MILLISECONDS, task);
|
|
536
|
+
const newTask = recurring(i * WEEK_IN_MILLISECONDS, task, timeZone);
|
|
521
537
|
if (
|
|
522
538
|
!checkDuplicates(
|
|
523
539
|
allTasks,
|
|
@@ -536,7 +552,8 @@ export function recurringTasks(
|
|
|
536
552
|
// Create a copy of the task with updated taskDate for each week
|
|
537
553
|
const newTask = recurring(
|
|
538
554
|
dayjs(task.taskDate).daysInMonth() * i * DAY_IN_MILLISECONDS,
|
|
539
|
-
task
|
|
555
|
+
task,
|
|
556
|
+
timeZone
|
|
540
557
|
);
|
|
541
558
|
|
|
542
559
|
if (
|
|
@@ -570,12 +587,13 @@ export function recurringTasks(
|
|
|
570
587
|
export function getHoursByday(
|
|
571
588
|
tasks: TaskFeildsType[],
|
|
572
589
|
dayIndex: 0 | 1 | 2 | 3 | 4 | 5 | 6,
|
|
573
|
-
weekOffset?: number
|
|
590
|
+
weekOffset?: number,
|
|
591
|
+
timeZone?: TimeZone
|
|
574
592
|
) {
|
|
575
593
|
const sum = tasks.reduce((currentSum: number, task: TaskFeildsType) => {
|
|
576
594
|
if (
|
|
577
595
|
task.dayIndex === dayIndex &&
|
|
578
|
-
weekOffset === updateOffsetWithDateCalendar(task.taskDate)
|
|
596
|
+
weekOffset === updateOffsetWithDateCalendar(task.taskDate, timeZone)
|
|
579
597
|
)
|
|
580
598
|
return (
|
|
581
599
|
currentSum +
|
|
@@ -589,12 +607,13 @@ export function getHoursByday(
|
|
|
589
607
|
export function getHoursByGroup(
|
|
590
608
|
tasks: TaskFeildsType[],
|
|
591
609
|
groupId: string,
|
|
592
|
-
weekOffset?: number
|
|
610
|
+
weekOffset?: number,
|
|
611
|
+
timeZone?: TimeZone
|
|
593
612
|
) {
|
|
594
613
|
const sum = tasks.reduce((currentSum: number, task: TaskFeildsType) => {
|
|
595
614
|
if (
|
|
596
615
|
task.groupId === groupId &&
|
|
597
|
-
weekOffset === updateOffsetWithDateCalendar(task.taskDate)
|
|
616
|
+
weekOffset === updateOffsetWithDateCalendar(task.taskDate, timeZone)
|
|
598
617
|
)
|
|
599
618
|
return (
|
|
600
619
|
currentSum +
|
|
@@ -717,12 +736,13 @@ function updateTaskStartTimeAnEndTime(
|
|
|
717
736
|
end: number,
|
|
718
737
|
calendarOffset: number,
|
|
719
738
|
dayIndex: number,
|
|
720
|
-
taskPosition: number
|
|
739
|
+
taskPosition: number,
|
|
740
|
+
timeZone?: TimeZone
|
|
721
741
|
) {
|
|
722
742
|
const diffDay =
|
|
723
743
|
dayIndex +
|
|
724
744
|
calendarOffset -
|
|
725
|
-
(taskPosition + updateOffsetWithDateCalendar(new Date(start)));
|
|
745
|
+
(taskPosition + updateOffsetWithDateCalendar(new Date(start), timeZone));
|
|
726
746
|
|
|
727
747
|
const startTime = start + diffDay * DAY_IN_MILLISECONDS;
|
|
728
748
|
const endTime = end + diffDay * DAY_IN_MILLISECONDS;
|
|
@@ -737,7 +757,8 @@ export function pastTasks(
|
|
|
737
757
|
dayInfo: dayInfoType,
|
|
738
758
|
groupId: string,
|
|
739
759
|
tasks: TaskFeildsType[],
|
|
740
|
-
taskExpiryDate?: Date
|
|
760
|
+
taskExpiryDate?: Date,
|
|
761
|
+
timeZone?: TimeZone
|
|
741
762
|
) {
|
|
742
763
|
if (typeof window !== "undefined") {
|
|
743
764
|
const copiedTasks: TaskFeildsType[] = JSON.parse(
|
|
@@ -761,9 +782,10 @@ export function pastTasks(
|
|
|
761
782
|
const newTaskStartAndEnd = updateTaskStartTimeAnEndTime(
|
|
762
783
|
copiedTasktaskStart,
|
|
763
784
|
copiedTasktaskEnd,
|
|
764
|
-
updateOffsetWithDateCalendar(dayInfo.day),
|
|
785
|
+
updateOffsetWithDateCalendar(dayInfo.day, timeZone),
|
|
765
786
|
dayInfo.positionDay,
|
|
766
|
-
copiedTaskDayIndex
|
|
787
|
+
copiedTaskDayIndex,
|
|
788
|
+
timeZone
|
|
767
789
|
);
|
|
768
790
|
|
|
769
791
|
if (
|
|
@@ -796,7 +818,7 @@ export function pastTasks(
|
|
|
796
818
|
window.sessionStorage.removeItem("copiedTasks");
|
|
797
819
|
|
|
798
820
|
return [...tasks, ...newTasks];
|
|
799
|
-
} else throw new Error("
|
|
821
|
+
} else throw new Error("no past task(s)");
|
|
800
822
|
}
|
|
801
823
|
}
|
|
802
824
|
|
|
@@ -946,3 +968,24 @@ export const GetTimeRangeByDay = (start: number, end: number) => {
|
|
|
946
968
|
}
|
|
947
969
|
return range;
|
|
948
970
|
};
|
|
971
|
+
|
|
972
|
+
export function totalLabel(milliseconds: number) {
|
|
973
|
+
let label = "";
|
|
974
|
+
const hourConv = milliseconds / 3600000;
|
|
975
|
+
|
|
976
|
+
const truncHour = Math.trunc(hourConv);
|
|
977
|
+
|
|
978
|
+
if (hourConv !== truncHour) {
|
|
979
|
+
const deciHour = hourConv - truncHour;
|
|
980
|
+
const minConv = deciHour * 60;
|
|
981
|
+
const truncMin = Math.trunc(minConv);
|
|
982
|
+
|
|
983
|
+
if (truncMin !== minConv) {
|
|
984
|
+
const deciMin = minConv - truncMin;
|
|
985
|
+
const secConv = deciMin * 60;
|
|
986
|
+
label = `${truncHour}:${truncMin}:${Math.trunc(secConv)}`;
|
|
987
|
+
} else label = `${truncHour}:${minConv}:0`;
|
|
988
|
+
} else label = `${hourConv}:0:0`;
|
|
989
|
+
|
|
990
|
+
return label;
|
|
991
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-weekly-planning",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.32",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "jest --env=jsdom",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
},
|
|
11
11
|
"repository": {
|
|
12
12
|
"type": "git",
|
|
13
|
-
"url": "https://github.com/Yvesmorel/react-pweekly-planning.git"
|
|
13
|
+
"url": "git+https://github.com/Yvesmorel/react-pweekly-planning.git"
|
|
14
14
|
},
|
|
15
15
|
"homepage": "https://github.com/Yvesmorel/react-pweekly-planning.git#readme",
|
|
16
16
|
"bugs": {
|
|
@@ -39,43 +39,40 @@
|
|
|
39
39
|
"license": "MIT",
|
|
40
40
|
"description": "react-weekly-planning provides a React component for weekly planning. Easily set up and manage a weekly schedule with customizable tasks, groups and views.",
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@babel/types": "^7.
|
|
43
|
-
"@types/babel__generator": "^7.
|
|
44
|
-
"axios": "^1.
|
|
45
|
-
"dayjs": "^1.11.
|
|
42
|
+
"@babel/types": "^7.29.0",
|
|
43
|
+
"@types/babel__generator": "^7.27.0",
|
|
44
|
+
"axios": "^1.13.6",
|
|
45
|
+
"dayjs": "^1.11.19",
|
|
46
46
|
"ical": "^0.8.0",
|
|
47
47
|
"ics-to-json": "^2.0.2",
|
|
48
48
|
"moment": "^2.30.1",
|
|
49
|
-
"react": "^
|
|
50
|
-
"
|
|
51
|
-
"react-use-search": "^0.3.2",
|
|
52
|
-
"react-window": "^1.8.11",
|
|
53
|
-
"sass": "^1.77.2",
|
|
49
|
+
"react-window": "^2.2.7",
|
|
50
|
+
"sass": "^1.97.3",
|
|
54
51
|
"ts-node": "^10.9.2",
|
|
55
|
-
"uuid": "^
|
|
52
|
+
"uuid": "^13.0.0"
|
|
56
53
|
},
|
|
57
54
|
"devDependencies": {
|
|
58
|
-
"@babel/core": "^7.
|
|
59
|
-
"@babel/preset-env": "^7.
|
|
60
|
-
"@babel/preset-react": "^7.
|
|
61
|
-
"@babel/preset-typescript": "^7.
|
|
62
|
-
"@testing-library/dom": "^10.4.
|
|
63
|
-
"@testing-library/jest-dom": "^6.
|
|
64
|
-
"@testing-library/react": "^
|
|
55
|
+
"@babel/core": "^7.29.0",
|
|
56
|
+
"@babel/preset-env": "^7.29.0",
|
|
57
|
+
"@babel/preset-react": "^7.28.5",
|
|
58
|
+
"@babel/preset-typescript": "^7.28.5",
|
|
59
|
+
"@testing-library/dom": "^10.4.1",
|
|
60
|
+
"@testing-library/jest-dom": "^6.9.1",
|
|
61
|
+
"@testing-library/react": "^16.3.2",
|
|
65
62
|
"@types/babel__core": "^7.20.5",
|
|
66
63
|
"@types/ical": "^0.8.3",
|
|
67
|
-
"@types/jest": "^
|
|
68
|
-
"@types/react": "^
|
|
69
|
-
"@types/react-
|
|
70
|
-
"
|
|
71
|
-
"babel-jest": "^29.7.0",
|
|
72
|
-
"better-docs": "^2.7.3",
|
|
64
|
+
"@types/jest": "^30.0.0",
|
|
65
|
+
"@types/react": "^19.2.14",
|
|
66
|
+
"@types/react-window": "^2.0.0",
|
|
67
|
+
"babel-jest": "^30.2.0",
|
|
73
68
|
"docdash": "^2.0.2",
|
|
74
|
-
"jest": "^
|
|
75
|
-
"jest-environment-jsdom": "^
|
|
76
|
-
"react
|
|
77
|
-
"
|
|
78
|
-
"
|
|
79
|
-
"
|
|
69
|
+
"jest": "^30.2.0",
|
|
70
|
+
"jest-environment-jsdom": "^30.2.0",
|
|
71
|
+
"react": "^19.2.4",
|
|
72
|
+
"react-dom": "^19.2.4",
|
|
73
|
+
"react-test-renderer": "^19.2.4",
|
|
74
|
+
"tailwindcss": "^4.2.1",
|
|
75
|
+
"ts-jest": "^29.4.6",
|
|
76
|
+
"typescript": "^5.9.3"
|
|
80
77
|
}
|
|
81
78
|
}
|