Making the booking page look a little better.

Signed-off-by: Cliff Hill <xlorep@darkhelm.org>
This commit is contained in:
2025-08-30 12:26:57 -04:00
parent 515ad0cd3a
commit 6702aa2f11
6 changed files with 160 additions and 289 deletions

View File

@@ -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",

View File

@@ -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>

View 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;
}

View File

@@ -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;

View File

@@ -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}

View File

@@ -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"