mirror of
https://github.com/xlorepdarkhelm/numinar-coding-project.git
synced 2026-08-24 16:23:48 -04:00
Making the booking page look a little better.
Signed-off-by: Cliff Hill <xlorep@darkhelm.org>
This commit is contained in:
@@ -6,6 +6,9 @@
|
||||
"dependencies": {
|
||||
"@emotion/react": "^11.14.0",
|
||||
"@emotion/styled": "^11.14.1",
|
||||
"@fullcalendar/core": "^6.1.19",
|
||||
"@fullcalendar/daygrid": "^6.1.19",
|
||||
"@fullcalendar/react": "^6.1.19",
|
||||
"@mui/icons-material": "^7.3.1",
|
||||
"@mui/material": "^7.3.1",
|
||||
"@tanstack/react-query": "^5.85.5",
|
||||
@@ -20,10 +23,8 @@
|
||||
"@types/react-dom": "^19.1.9",
|
||||
"@types/react-router-dom": "^5.3.3",
|
||||
"axios": "^1.11.0",
|
||||
"date-fns": "^4.1.0",
|
||||
"loglevel": "^1.9.2",
|
||||
"react": "^19.1.1",
|
||||
"react-big-calendar": "^1.19.4",
|
||||
"react-dom": "^19.1.1",
|
||||
"react-router-dom": "^7.8.2",
|
||||
"react-scripts": "^5.0.1",
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
work correctly both with client-side routing and a non-root public URL.
|
||||
Learn how to configure a non-root public URL by running `npm run build`.
|
||||
-->
|
||||
<title>React App</title>
|
||||
<title>Coding Project</title>
|
||||
</head>
|
||||
<body>
|
||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||
|
||||
102
frontend/src/components/CalendarView.css
Normal file
102
frontend/src/components/CalendarView.css
Normal file
@@ -0,0 +1,102 @@
|
||||
/* Force transparency on all major calendar cell backgrounds so only CSS variables show */
|
||||
:root {
|
||||
--fc-page-bg-color: #a0a0a0;
|
||||
--fc-neutral-bg-color: #e3f2fd;
|
||||
--fc-today-bg-color: #e3f2fd;
|
||||
--fc-event-bg-color: #1976d2;
|
||||
--fc-border-color: #707070;
|
||||
}
|
||||
|
||||
.calendarContainer {
|
||||
padding: 2rem;
|
||||
background: #f8fafc !important;
|
||||
border-radius: 16px !important;
|
||||
box-shadow: 0 4px 24px rgba(30, 64, 175, 0.08) !important;
|
||||
}
|
||||
|
||||
.fc {
|
||||
font-family: "Inter", "Roboto", Arial, sans-serif !important;
|
||||
/*background: transparent !important;*/
|
||||
/*border-radius: 12px !important;*/
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
.fc .fc-toolbar {
|
||||
background: #1976d2 !important;
|
||||
color: #fff !important;
|
||||
border-radius: 12px 12px 0 0 !important;
|
||||
padding: 0.5rem 1rem !important;
|
||||
}
|
||||
|
||||
.fc .fc-toolbar-title {
|
||||
font-size: 1.5rem !important;
|
||||
font-weight: 600 !important;
|
||||
}
|
||||
|
||||
.fc .fc-button {
|
||||
background: #1976d2 !important;
|
||||
color: #fff !important;
|
||||
border: none !important;
|
||||
border-radius: 6px !important;
|
||||
padding: 0.3rem 0.8rem !important;
|
||||
margin: 0 0.2rem !important;
|
||||
font-weight: 500 !important;
|
||||
transition: background 0.2s !important;
|
||||
}
|
||||
|
||||
.fc .fc-button:hover,
|
||||
.fc .fc-button:focus {
|
||||
background: #1565c0 !important;
|
||||
}
|
||||
|
||||
.fc .fc-daygrid-day {
|
||||
/* background: #fff !important;*/
|
||||
/*border-radius: 8px !important;*/
|
||||
box-shadow: 0 1px 4px rgba(30, 64, 175, 0.08) !important;
|
||||
transition: box-shadow 0.2s !important;
|
||||
}
|
||||
|
||||
.fc .fc-daygrid-day:hover {
|
||||
box-shadow: 0 4px 12px rgba(30, 64, 175, 0.16) !important;
|
||||
background: #e3f2fd !important;
|
||||
}
|
||||
|
||||
.fc .fc-daygrid-day-number {
|
||||
font-weight: 600 !important;
|
||||
color: #1976d2 !important;
|
||||
}
|
||||
|
||||
.fc .fc-event {
|
||||
background: #1976d2 !important;
|
||||
color: #fff !important;
|
||||
/*border-radius: 6px !important;*/
|
||||
padding: 2px 6px !important;
|
||||
font-size: 0.95rem !important;
|
||||
box-shadow: 0 2px 8px rgba(30, 64, 175, 0.12) !important;
|
||||
}
|
||||
|
||||
.fc .fc-event:hover {
|
||||
background: #1565c0 !important;
|
||||
}
|
||||
|
||||
.fc .fc-day-today {
|
||||
background: #e3f2fd !important;
|
||||
border-radius: 8px !important;
|
||||
}
|
||||
|
||||
.fc .fc-daygrid-day .fc-daygrid-day-frame {
|
||||
background: #c0c0c0 !important;
|
||||
/*border-radius: 8px !important;*/
|
||||
box-shadow: 0 1px 4px rgba(30, 64, 175, 0.08) !important;
|
||||
transition: box-shadow 0.2s !important;
|
||||
}
|
||||
|
||||
.fc .fc-daygrid-day:hover .fc-daygrid-day-frame {
|
||||
background: #e3f2fd !important;
|
||||
box-shadow: 0 4px 12px rgba(30, 64, 175, 0.16) !important;
|
||||
}
|
||||
|
||||
.fc,
|
||||
.fc-toolbar.fc-header-toolbar {
|
||||
margin-bottom: 0px !important;
|
||||
}
|
||||
@@ -1,150 +1,29 @@
|
||||
import React from "react";
|
||||
/**
|
||||
* CalendarView component
|
||||
*
|
||||
* Displays a detailed calendar using react-big-calendar.
|
||||
*
|
||||
* @component
|
||||
* @example
|
||||
* <CalendarView events={[]} onSelectSlot={fn} onSelectEvent={fn} />
|
||||
*/
|
||||
import Tooltip from "@mui/material/Tooltip";
|
||||
import Typography from "@mui/material/Typography";
|
||||
import {
|
||||
Calendar,
|
||||
dateFnsLocalizer,
|
||||
Event,
|
||||
SlotInfo,
|
||||
} from "react-big-calendar";
|
||||
import { format } from "date-fns/format";
|
||||
import { parse } from "date-fns/parse";
|
||||
import { startOfWeek } from "date-fns/startOfWeek";
|
||||
import { getDay } from "date-fns/getDay";
|
||||
import { enUS } from "date-fns/locale/en-US";
|
||||
import "react-big-calendar/lib/css/react-big-calendar.css";
|
||||
import FullCalendar from "@fullcalendar/react";
|
||||
import dayGridPlugin from "@fullcalendar/daygrid";
|
||||
|
||||
const locales = {
|
||||
"en-US": enUS,
|
||||
};
|
||||
|
||||
const localizer = dateFnsLocalizer({
|
||||
format,
|
||||
parse,
|
||||
startOfWeek: () => startOfWeek(new Date(), { weekStartsOn: 0 }),
|
||||
getDay,
|
||||
locales,
|
||||
});
|
||||
|
||||
export interface CalendarEvent extends Event {
|
||||
id: number | string;
|
||||
title: string;
|
||||
start: Date;
|
||||
end: Date;
|
||||
resource?: any;
|
||||
}
|
||||
import { EventInput } from "@fullcalendar/core";
|
||||
import "./CalendarView.css";
|
||||
|
||||
interface CalendarViewProps {
|
||||
events: CalendarEvent[];
|
||||
onSelectSlot?: (slotInfo: SlotInfo) => void;
|
||||
onSelectEvent?: (event: CalendarEvent) => void;
|
||||
roomColors?: Record<string, string>;
|
||||
events: EventInput[];
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders a calendar for room bookings.
|
||||
* @param {CalendarViewProps} props
|
||||
*/
|
||||
|
||||
const CalendarView: React.FC<CalendarViewProps> = ({
|
||||
events,
|
||||
onSelectSlot,
|
||||
onSelectEvent,
|
||||
roomColors,
|
||||
}) => {
|
||||
// Assign a color to each room if not provided
|
||||
const defaultColors = [
|
||||
"#1976d2",
|
||||
"#388e3c",
|
||||
"#fbc02d",
|
||||
"#d32f2f",
|
||||
"#7b1fa2",
|
||||
"#0288d1",
|
||||
"#c2185b",
|
||||
"#ffa000",
|
||||
];
|
||||
const colorMap = roomColors || {};
|
||||
// Fallback: assign colors by roomId order
|
||||
events.forEach((ev, idx) => {
|
||||
const roomId = ev.resource?.roomId;
|
||||
if (roomId && !colorMap[roomId]) {
|
||||
colorMap[roomId] = defaultColors[idx % defaultColors.length];
|
||||
}
|
||||
});
|
||||
|
||||
// Style events by room color
|
||||
const eventPropGetter = (event: CalendarEvent) => {
|
||||
const roomId = event.resource?.roomId;
|
||||
const bg = colorMap[roomId] || "#1976d2";
|
||||
return {
|
||||
style: {
|
||||
backgroundColor: bg,
|
||||
color: "#fff",
|
||||
borderRadius: 6,
|
||||
border: `1px solid ${bg}`,
|
||||
fontWeight: 600,
|
||||
opacity: 0.95,
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
// Custom event wrapper for tooltips
|
||||
const EventWithTooltip = ({ event }: { event: CalendarEvent }) => {
|
||||
const room = event.resource?.roomName || event.resource?.roomId || "Room";
|
||||
const start =
|
||||
event.start instanceof Date ? event.start : new Date(event.start);
|
||||
const end = event.end instanceof Date ? event.end : new Date(event.end);
|
||||
return (
|
||||
<Tooltip
|
||||
title={
|
||||
<React.Fragment>
|
||||
<Typography variant="subtitle2">
|
||||
{event.title || "(No Title)"}
|
||||
</Typography>
|
||||
<Typography variant="body2">Room: {room}</Typography>
|
||||
<Typography variant="body2">
|
||||
Start: {start.toLocaleString()}
|
||||
</Typography>
|
||||
<Typography variant="body2">End: {end.toLocaleString()}</Typography>
|
||||
</React.Fragment>
|
||||
}
|
||||
arrow
|
||||
placement="top"
|
||||
>
|
||||
<div style={{ width: "100%", height: "100%" }}>{event.title}</div>
|
||||
</Tooltip>
|
||||
);
|
||||
};
|
||||
|
||||
return (
|
||||
<div style={{ height: 500 }}>
|
||||
<Calendar
|
||||
localizer={localizer}
|
||||
events={events}
|
||||
startAccessor="start"
|
||||
endAccessor="end"
|
||||
selectable
|
||||
onSelectSlot={onSelectSlot}
|
||||
onSelectEvent={onSelectEvent}
|
||||
style={{ height: "100%", background: "#fff", borderRadius: 8 }}
|
||||
popup
|
||||
views={["month", "week", "day"]}
|
||||
eventPropGetter={eventPropGetter}
|
||||
components={{
|
||||
event: EventWithTooltip,
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
const CalendarView: React.FC<CalendarViewProps> = ({ events }) => (
|
||||
<div className="calendarContainer">
|
||||
<FullCalendar
|
||||
plugins={[dayGridPlugin]}
|
||||
initialView="dayGridMonth"
|
||||
events={events}
|
||||
height="auto"
|
||||
dayMaxEvents={true}
|
||||
headerToolbar={{
|
||||
left: "prev,next today",
|
||||
center: "title",
|
||||
right: "dayGridMonth,dayGridWeek,dayGridDay",
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
|
||||
export default CalendarView;
|
||||
|
||||
@@ -3,7 +3,8 @@ import { logger } from "../utils/logger";
|
||||
// Booking page for conference room system
|
||||
// See README for requirements
|
||||
|
||||
import CalendarView, { CalendarEvent } from "../components/CalendarView";
|
||||
import CalendarView from "../components/CalendarView";
|
||||
import { EventInput } from "@fullcalendar/core";
|
||||
import BookingForm from "../components/BookingForm";
|
||||
import RoomDetailsModal from "../components/RoomDetailsModal";
|
||||
import { useQuery } from "@tanstack/react-query";
|
||||
@@ -137,7 +138,7 @@ const BookingPage: React.FC = () => {
|
||||
}, [rooms]);
|
||||
|
||||
// Combine all bookings into calendar events
|
||||
const events: CalendarEvent[] = useMemo(() => {
|
||||
const events: EventInput[] = useMemo(() => {
|
||||
if (!bookingsByRoom || rooms.length === 0) return [];
|
||||
return Object.entries(bookingsByRoom).flatMap(([roomId, bookings]) =>
|
||||
(bookings as any[]).map((booking) => ({
|
||||
@@ -166,7 +167,7 @@ const BookingPage: React.FC = () => {
|
||||
setFormOpen(true);
|
||||
};
|
||||
|
||||
const handleSelectEvent = (event: CalendarEvent) => {
|
||||
const handleSelectEvent = (event: EventInput) => {
|
||||
logger.debug("[BookingPage] Event selected for edit", event);
|
||||
setEditBooking(event);
|
||||
setFormSlot(null);
|
||||
@@ -293,12 +294,7 @@ const BookingPage: React.FC = () => {
|
||||
onClose={() => setRoomModalOpen(false)}
|
||||
room={rooms.find((r: any) => r.id === selectedRoomId)}
|
||||
/>
|
||||
<CalendarView
|
||||
events={events}
|
||||
onSelectSlot={handleSelectSlot}
|
||||
onSelectEvent={handleSelectEvent}
|
||||
roomColors={roomColors}
|
||||
/>
|
||||
<CalendarView events={events} />
|
||||
{formOpen && (
|
||||
<BookingForm
|
||||
open={formOpen}
|
||||
|
||||
@@ -1081,7 +1081,7 @@
|
||||
"@babel/plugin-transform-modules-commonjs" "^7.27.1"
|
||||
"@babel/plugin-transform-typescript" "^7.27.1"
|
||||
|
||||
"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.8", "@babel/runtime@^7.16.3", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.7", "@babel/runtime@^7.28.2", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.7":
|
||||
"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.18.3", "@babel/runtime@^7.28.2", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7":
|
||||
version "7.28.3"
|
||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.3.tgz#75c5034b55ba868121668be5d5bb31cc64e6e61a"
|
||||
integrity sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==
|
||||
@@ -1421,6 +1421,23 @@
|
||||
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2"
|
||||
integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==
|
||||
|
||||
"@fullcalendar/core@^6.1.19":
|
||||
version "6.1.19"
|
||||
resolved "https://registry.yarnpkg.com/@fullcalendar/core/-/core-6.1.19.tgz#60379111ba0cfb9fd9bc6594fee47cf855fc77b2"
|
||||
integrity sha512-z0aVlO5e4Wah6p6mouM0UEqtRf1MZZPt4mwzEyU6kusaNL+dlWQgAasF2cK23hwT4cmxkEmr4inULXgpyeExdQ==
|
||||
dependencies:
|
||||
preact "~10.12.1"
|
||||
|
||||
"@fullcalendar/daygrid@^6.1.19":
|
||||
version "6.1.19"
|
||||
resolved "https://registry.yarnpkg.com/@fullcalendar/daygrid/-/daygrid-6.1.19.tgz#1d70a7f3f4cc13d3f27f55ed6880aae09a1a367b"
|
||||
integrity sha512-IAAfnMICnVWPjpT4zi87i3FEw0xxSza0avqY/HedKEz+l5MTBYvCDPOWDATpzXoLut3aACsjktIyw9thvIcRYQ==
|
||||
|
||||
"@fullcalendar/react@^6.1.19":
|
||||
version "6.1.19"
|
||||
resolved "https://registry.yarnpkg.com/@fullcalendar/react/-/react-6.1.19.tgz#921ecc92972af4c9654e4742dd4a73fd4092c2ae"
|
||||
integrity sha512-FP78vnyylaL/btZeHig8LQgfHgfwxLaIG6sKbNkzkPkKEACv11UyyBoTSkaavPsHtXvAkcTED1l7TOunAyPEnA==
|
||||
|
||||
"@humanwhocodes/config-array@^0.13.0":
|
||||
version "0.13.0"
|
||||
resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748"
|
||||
@@ -2094,18 +2111,11 @@
|
||||
schema-utils "^4.2.0"
|
||||
source-map "^0.7.3"
|
||||
|
||||
"@popperjs/core@^2.11.6", "@popperjs/core@^2.11.8":
|
||||
"@popperjs/core@^2.11.8":
|
||||
version "2.11.8"
|
||||
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f"
|
||||
integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==
|
||||
|
||||
"@restart/hooks@^0.4.7":
|
||||
version "0.4.16"
|
||||
resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.4.16.tgz#95ae8ac1cc7e2bd4fed5e39800ff85604c6d59fb"
|
||||
integrity sha512-f7aCv7c+nU/3mF7NWLtVVr0Ra80RqsO89hO72r+Y/nvQr5+q0UFGkocElTH6MJApvReVh6JHUFYn2cw1WdHF3w==
|
||||
dependencies:
|
||||
dequal "^2.0.3"
|
||||
|
||||
"@rollup/plugin-babel@^5.2.0":
|
||||
version "5.3.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283"
|
||||
@@ -2682,7 +2692,7 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.12.tgz#b5d76568485b02a307238270bfe96cb51ee2a044"
|
||||
integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==
|
||||
|
||||
"@types/react@*", "@types/react@>=16.9.11", "@types/react@^19.1.12":
|
||||
"@types/react@*", "@types/react@^19.1.12":
|
||||
version "19.1.12"
|
||||
resolved "https://registry.yarnpkg.com/@types/react/-/react-19.1.12.tgz#7bfaa76aabbb0b4fe0493c21a3a7a93d33e8937b"
|
||||
integrity sha512-cMoR+FoAf/Jyq6+Df2/Z41jISvGZZ2eTlnsaJRptmZ76Caldwy1odD4xTr/gNV9VLj0AWgg/nmkevIyUfIIq5w==
|
||||
@@ -2752,11 +2762,6 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11"
|
||||
integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==
|
||||
|
||||
"@types/warning@^3.0.0":
|
||||
version "3.0.3"
|
||||
resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.3.tgz#d1884c8cc4a426d1ac117ca2611bf333834c6798"
|
||||
integrity sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q==
|
||||
|
||||
"@types/ws@^8.5.5":
|
||||
version "8.18.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9"
|
||||
@@ -3978,11 +3983,6 @@ cliui@^8.0.1:
|
||||
strip-ansi "^6.0.1"
|
||||
wrap-ansi "^7.0.0"
|
||||
|
||||
clsx@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12"
|
||||
integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==
|
||||
|
||||
clsx@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999"
|
||||
@@ -4460,21 +4460,6 @@ data-view-byte-offset@^1.0.1:
|
||||
es-errors "^1.3.0"
|
||||
is-data-view "^1.0.1"
|
||||
|
||||
date-arithmetic@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/date-arithmetic/-/date-arithmetic-4.1.0.tgz#e5d6434e9deb71f79760a37b729e4a515e730ddf"
|
||||
integrity sha512-QWxYLR5P/6GStZcdem+V1xoto6DMadYWpMXU82ES3/RfR3Wdwr3D0+be7mgOJ+Ov0G9D5Dmb9T17sNLQYj9XOg==
|
||||
|
||||
date-fns@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-4.1.0.tgz#64b3d83fff5aa80438f5b1a633c2e83b8a1c2d14"
|
||||
integrity sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==
|
||||
|
||||
dayjs@^1.11.7:
|
||||
version "1.11.15"
|
||||
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.15.tgz#fd7fd2db6fc92f08ffe4adc306756d45db00ada3"
|
||||
integrity sha512-MC+DfnSWiM9APs7fpiurHGCoeIx0Gdl6QZBy+5lu8MbYKN5FZEXqOgrundfibdfhGZ15o9hzmZ2xJjZnbvgKXQ==
|
||||
|
||||
debug@2.6.9, debug@^2.6.0:
|
||||
version "2.6.9"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
||||
@@ -4654,7 +4639,7 @@ dom-converter@^0.2.0:
|
||||
dependencies:
|
||||
utila "~0.4"
|
||||
|
||||
dom-helpers@^5.0.1, dom-helpers@^5.2.0, dom-helpers@^5.2.1:
|
||||
dom-helpers@^5.0.1:
|
||||
version "5.2.1"
|
||||
resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902"
|
||||
integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==
|
||||
@@ -5794,11 +5779,6 @@ global-prefix@^3.0.0:
|
||||
kind-of "^6.0.2"
|
||||
which "^1.3.1"
|
||||
|
||||
globalize@^0.1.1:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/globalize/-/globalize-0.1.1.tgz#4d04ba65a580a8b0bdcc9ed974aeb497b9c80a56"
|
||||
integrity sha512-5e01v8eLGfuQSOvx2MsDMOWS0GFtCx1wPzQSmcHw4hkxFzrQDBO3Xwg/m8Hr/7qXMrHeOIE29qWVzyv06u1TZA==
|
||||
|
||||
globals@^13.19.0:
|
||||
version "13.24.0"
|
||||
resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171"
|
||||
@@ -6191,13 +6171,6 @@ internal-slot@^1.1.0:
|
||||
hasown "^2.0.2"
|
||||
side-channel "^1.1.0"
|
||||
|
||||
invariant@^2.2.4:
|
||||
version "2.2.4"
|
||||
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
|
||||
integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
|
||||
dependencies:
|
||||
loose-envify "^1.0.0"
|
||||
|
||||
ipaddr.js@1.9.1:
|
||||
version "1.9.1"
|
||||
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
|
||||
@@ -7708,11 +7681,6 @@ locate-path@^6.0.0:
|
||||
dependencies:
|
||||
p-locate "^5.0.0"
|
||||
|
||||
lodash-es@^4.17.21:
|
||||
version "4.17.21"
|
||||
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
|
||||
integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
|
||||
|
||||
lodash.debounce@^4.0.8:
|
||||
version "4.0.8"
|
||||
resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
|
||||
@@ -7748,7 +7716,7 @@ loglevel@^1.9.2:
|
||||
resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.9.2.tgz#c2e028d6c757720107df4e64508530db6621ba08"
|
||||
integrity sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==
|
||||
|
||||
loose-envify@^1.0.0, loose-envify@^1.4.0:
|
||||
loose-envify@^1.4.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
|
||||
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
|
||||
@@ -7774,11 +7742,6 @@ lru-cache@^5.1.1:
|
||||
dependencies:
|
||||
yallist "^3.0.2"
|
||||
|
||||
luxon@^3.2.1:
|
||||
version "3.7.1"
|
||||
resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.7.1.tgz#9bd09aa84a56afb00c57ea78a8ec5bd16eb24ec0"
|
||||
integrity sha512-RkRWjA926cTvz5rAb1BqyWkKbbjzCGchDUIKMCUvNi17j6f6j8uHGDV82Aqcqtzd+icoYpELmG3ksgGiFNNcNg==
|
||||
|
||||
lz-string@^1.5.0:
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941"
|
||||
@@ -7844,11 +7807,6 @@ memfs@^3.1.2, memfs@^3.4.3:
|
||||
dependencies:
|
||||
fs-monkey "^1.0.4"
|
||||
|
||||
memoize-one@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045"
|
||||
integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==
|
||||
|
||||
merge-descriptors@1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5"
|
||||
@@ -7960,18 +7918,6 @@ mkdirp@~0.5.1:
|
||||
dependencies:
|
||||
minimist "^1.2.6"
|
||||
|
||||
moment-timezone@^0.5.40:
|
||||
version "0.5.48"
|
||||
resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.48.tgz#111727bb274734a518ae154b5ca589283f058967"
|
||||
integrity sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw==
|
||||
dependencies:
|
||||
moment "^2.29.4"
|
||||
|
||||
moment@^2.29.4:
|
||||
version "2.30.1"
|
||||
resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae"
|
||||
integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==
|
||||
|
||||
ms@2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
||||
@@ -9015,6 +8961,11 @@ postcss@^8.3.5, postcss@^8.4.33, postcss@^8.4.4, postcss@^8.4.47:
|
||||
picocolors "^1.1.1"
|
||||
source-map-js "^1.2.1"
|
||||
|
||||
preact@~10.12.1:
|
||||
version "10.12.1"
|
||||
resolved "https://registry.yarnpkg.com/preact/-/preact-10.12.1.tgz#8f9cb5442f560e532729b7d23d42fd1161354a21"
|
||||
integrity sha512-l8386ixSsBdbreOAkqtrwqHwdvR35ID8c3rKPa8lCWuO86dBi32QWHV4vfsZK1utLLFMvw+Z5Ad4XLkZzchscg==
|
||||
|
||||
prelude-ls@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
|
||||
@@ -9086,7 +9037,7 @@ prompts@^2.0.1, prompts@^2.4.2:
|
||||
kleur "^3.0.3"
|
||||
sisteransi "^1.0.5"
|
||||
|
||||
prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1:
|
||||
prop-types@^15.6.2, prop-types@^15.8.1:
|
||||
version "15.8.1"
|
||||
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
|
||||
integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
|
||||
@@ -9195,28 +9146,6 @@ react-app-rewired@^2.2.1:
|
||||
dependencies:
|
||||
semver "^5.6.0"
|
||||
|
||||
react-big-calendar@^1.19.4:
|
||||
version "1.19.4"
|
||||
resolved "https://registry.yarnpkg.com/react-big-calendar/-/react-big-calendar-1.19.4.tgz#a1f00f4cb817a7e210a8137bbabf5726c032d2da"
|
||||
integrity sha512-FrvbDx2LF6JAWFD96LU1jjloppC5OgIvMYUYIPzAw5Aq+ArYFPxAjLqXc4DyxfsQDN0TJTMuS/BIbcSB7Pg0YA==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.20.7"
|
||||
clsx "^1.2.1"
|
||||
date-arithmetic "^4.1.0"
|
||||
dayjs "^1.11.7"
|
||||
dom-helpers "^5.2.1"
|
||||
globalize "^0.1.1"
|
||||
invariant "^2.2.4"
|
||||
lodash "^4.17.21"
|
||||
lodash-es "^4.17.21"
|
||||
luxon "^3.2.1"
|
||||
memoize-one "^6.0.0"
|
||||
moment "^2.29.4"
|
||||
moment-timezone "^0.5.40"
|
||||
prop-types "^15.8.1"
|
||||
react-overlays "^5.2.1"
|
||||
uncontrollable "^7.2.1"
|
||||
|
||||
react-dev-utils@^12.0.1:
|
||||
version "12.0.1"
|
||||
resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz#ba92edb4a1f379bd46ccd6bcd4e7bc398df33e73"
|
||||
@@ -9279,25 +9208,6 @@ react-is@^19.1.1:
|
||||
resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.1.1.tgz#038ebe313cf18e1fd1235d51c87360eb87f7c36a"
|
||||
integrity sha512-tr41fA15Vn8p4X9ntI+yCyeGSf1TlYaY5vlTZfQmeLBrFo3psOPX6HhTDnFNL9uj3EhP0KAQ80cugCl4b4BERA==
|
||||
|
||||
react-lifecycles-compat@^3.0.4:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
|
||||
integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
|
||||
|
||||
react-overlays@^5.2.1:
|
||||
version "5.2.1"
|
||||
resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-5.2.1.tgz#49dc007321adb6784e1f212403f0fb37a74ab86b"
|
||||
integrity sha512-GLLSOLWr21CqtJn8geSwQfoJufdt3mfdsnIiQswouuQ2MMPns+ihZklxvsTDKD3cR2tF8ELbi5xUsvqVhR6WvA==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.13.8"
|
||||
"@popperjs/core" "^2.11.6"
|
||||
"@restart/hooks" "^0.4.7"
|
||||
"@types/warning" "^3.0.0"
|
||||
dom-helpers "^5.2.0"
|
||||
prop-types "^15.7.2"
|
||||
uncontrollable "^7.2.1"
|
||||
warning "^4.0.3"
|
||||
|
||||
react-refresh@^0.11.0:
|
||||
version "0.11.0"
|
||||
resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046"
|
||||
@@ -10773,16 +10683,6 @@ unbox-primitive@^1.1.0:
|
||||
has-symbols "^1.1.0"
|
||||
which-boxed-primitive "^1.1.1"
|
||||
|
||||
uncontrollable@^7.2.1:
|
||||
version "7.2.1"
|
||||
resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-7.2.1.tgz#1fa70ba0c57a14d5f78905d533cf63916dc75738"
|
||||
integrity sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.6.3"
|
||||
"@types/react" ">=16.9.11"
|
||||
invariant "^2.2.4"
|
||||
react-lifecycles-compat "^3.0.4"
|
||||
|
||||
underscore@1.12.1:
|
||||
version "1.12.1"
|
||||
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.12.1.tgz#7bb8cc9b3d397e201cf8553336d262544ead829e"
|
||||
@@ -10979,13 +10879,6 @@ walker@^1.0.7, walker@^1.0.8:
|
||||
dependencies:
|
||||
makeerror "1.0.12"
|
||||
|
||||
warning@^4.0.3:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"
|
||||
integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==
|
||||
dependencies:
|
||||
loose-envify "^1.0.0"
|
||||
|
||||
watchpack@^2.4.1:
|
||||
version "2.4.4"
|
||||
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.4.tgz#473bda72f0850453da6425081ea46fc0d7602947"
|
||||
|
||||
Reference in New Issue
Block a user