diff --git a/frontend/package.json b/frontend/package.json
index 95a1648f..0c4fbbe1 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -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",
diff --git a/frontend/public/index.html b/frontend/public/index.html
index aa069f27..08d6361d 100644
--- a/frontend/public/index.html
+++ b/frontend/public/index.html
@@ -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`.
-->
-
React App
+ Coding Project
diff --git a/frontend/src/components/CalendarView.css b/frontend/src/components/CalendarView.css
new file mode 100644
index 00000000..93d9c066
--- /dev/null
+++ b/frontend/src/components/CalendarView.css
@@ -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;
+}
diff --git a/frontend/src/components/CalendarView.tsx b/frontend/src/components/CalendarView.tsx
index f2d3c124..17678b89 100644
--- a/frontend/src/components/CalendarView.tsx
+++ b/frontend/src/components/CalendarView.tsx
@@ -1,150 +1,29 @@
import React from "react";
-/**
- * CalendarView component
- *
- * Displays a detailed calendar using react-big-calendar.
- *
- * @component
- * @example
- *
- */
-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;
+ events: EventInput[];
}
-/**
- * Renders a calendar for room bookings.
- * @param {CalendarViewProps} props
- */
-
-const CalendarView: React.FC = ({
- 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 (
-
-
- {event.title || "(No Title)"}
-
- Room: {room}
-
- Start: {start.toLocaleString()}
-
- End: {end.toLocaleString()}
-
- }
- arrow
- placement="top"
- >
- {event.title}
-
- );
- };
-
- return (
-
-
-
- );
-};
+const CalendarView: React.FC = ({ events }) => (
+
+
+
+);
export default CalendarView;
diff --git a/frontend/src/pages/BookingPage.tsx b/frontend/src/pages/BookingPage.tsx
index 34bc7d41..b5a18708 100644
--- a/frontend/src/pages/BookingPage.tsx
+++ b/frontend/src/pages/BookingPage.tsx
@@ -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)}
/>
-
+
{formOpen && (
=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"