= ({ onClose }) => {
+ *
>,
onClose: () => void,
onSubmit: () => void,
@@ -18,30 +23,45 @@ export default function EventModal({
showModal,
selectedRushCategory,
eventFormData,
+ isSubmitting,
setEventFormData,
onClose,
onSubmit,
modifyingEvent,
}: EventModalProps) {
return (
-
-
-
+
+
+
- {modifyingEvent ? `Modify Event` : `Create an Event for "${selectedRushCategory?.name}"` }
+ {modifyingEvent ? `Modify Event` : `Create an Event for "${selectedRushCategory?.name}"`}
*
-
setEventFormData({...eventFormData, eventName: e.target.value})}
+ onChange={(e) => setEventFormData({ ...eventFormData, eventName: e.target.value })}
+ />
+
+
+
+
+ *
+
+
+ setEventFormData({ ...eventFormData, eventCoverImage, eventCoverImageName})
+ }
/>
@@ -49,36 +69,83 @@ export default function EventModal({
*
-
setEventFormData({...eventFormData, eventCode: e.target.value})}
+ onChange={(e) => setEventFormData({ ...eventFormData, eventCode: e.target.value })}
+ />
+
+
+
+
+ *
+
+
setEventFormData({ ...eventFormData, eventLocation: e.target.value })}
+ />
+
+
+
+
+ *
+
+
+ setEventFormData({
+ ...eventFormData,
+ eventDate: date,
+ ...(date && { eventDeadline: addTwoHours(date) })
+ })
+ }
+ showTimeSelect
+ isClearable
+ timeFormat="HH:mm"
+ timeIntervals={15}
+ dateFormat="MMMM d, yyyy h:mm aa"
+ className={`w-full ${AdminTextStyles.datepicker}`}
+ wrapperClassName="w-full"
/>
-
+
*
setEventFormData({...eventFormData, eventDeadline: date})}
+ onChange={(date: Date) => setEventFormData({ ...eventFormData, eventDeadline: date })}
showTimeSelect
isClearable
timeFormat="HH:mm"
timeIntervals={15}
dateFormat="MMMM d, yyyy h:mm aa"
- className="w-full bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-purple-500 focus:border-purple-500 block p-2.5"
- wrapperClassName="w-full" // Add a custom class to make it full width
+ className={`w-full ${AdminTextStyles.datepicker}`}
+ wrapperClassName="w-full"
/>
-
diff --git a/components/admin/rush/Image/CanvasPreview.tsx b/components/admin/rush/Image/CanvasPreview.tsx
new file mode 100644
index 0000000..d00fce6
--- /dev/null
+++ b/components/admin/rush/Image/CanvasPreview.tsx
@@ -0,0 +1,65 @@
+import { PixelCrop } from 'react-image-crop'
+
+const TO_RADIANS = Math.PI / 180
+
+export async function CanvasPreview(
+ image: HTMLImageElement,
+ canvas: HTMLCanvasElement,
+ crop: PixelCrop,
+ scale = 1,
+ rotate = 0,
+) {
+ const ctx = canvas.getContext('2d')
+
+ if (!ctx) {
+ throw new Error('No 2d context')
+ }
+
+ const scaleX = image.naturalWidth / image.width
+ const scaleY = image.naturalHeight / image.height
+ // devicePixelRatio slightly increases sharpness on retina devices
+ // at the expense of slightly slower render times and needing to
+ // size the image back down if you want to download/upload and be
+ // true to the images natural size.
+ const pixelRatio = window.devicePixelRatio
+ // const pixelRatio = 1
+
+ canvas.width = Math.floor(crop.width * scaleX * pixelRatio)
+ canvas.height = Math.floor(crop.height * scaleY * pixelRatio)
+
+ ctx.scale(pixelRatio, pixelRatio)
+ ctx.imageSmoothingQuality = 'high'
+
+ const cropX = crop.x * scaleX
+ const cropY = crop.y * scaleY
+
+ const rotateRads = rotate * TO_RADIANS
+ const centerX = image.naturalWidth / 2
+ const centerY = image.naturalHeight / 2
+
+ ctx.save()
+
+ // 5) Move the crop origin to the canvas origin (0,0)
+ ctx.translate(-cropX, -cropY)
+ // 4) Move the origin to the center of the original position
+ ctx.translate(centerX, centerY)
+ // 3) Rotate around the origin
+ ctx.rotate(rotateRads)
+ // 2) Scale the image
+ ctx.scale(scale, scale)
+ // 1) Move the center of the image to the origin (0,0)
+ ctx.translate(-centerX, -centerY)
+ ctx.drawImage(
+ image,
+ 0,
+ 0,
+ image.naturalWidth,
+ image.naturalHeight,
+ 0,
+ 0,
+ image.naturalWidth,
+ image.naturalHeight,
+ )
+
+ ctx.restore()
+}
diff --git a/components/admin/rush/Image/CropImage.tsx b/components/admin/rush/Image/CropImage.tsx
new file mode 100644
index 0000000..f928d7a
--- /dev/null
+++ b/components/admin/rush/Image/CropImage.tsx
@@ -0,0 +1,226 @@
+// Disclosure: code inspired by example from https://codesandbox.io/s/react-image-crop-demo-with-react-hooks-y831o?file=/src/App.tsx
+import React, { useState, useRef } from 'react'
+
+import ReactCrop, {
+ centerCrop,
+ makeAspectCrop,
+ Crop,
+ PixelCrop,
+} from 'react-image-crop'
+import { CanvasPreview } from './CanvasPreview'
+import { useDebounceEffect } from '@/utils/useDebounceEffect'
+import 'react-image-crop/dist/ReactCrop.css'
+import { Button, FileInput } from 'flowbite-react'
+
+// This is to demonstate how to make and center a % aspect crop
+// which is a bit trickier so we use some helper functions.
+function centerAspectCrop(
+ mediaWidth: number,
+ mediaHeight: number,
+ aspect: number,
+) {
+ return centerCrop(
+ makeAspectCrop(
+ {
+ unit: '%',
+ width: 90,
+ },
+ aspect,
+ mediaWidth,
+ mediaHeight,
+ ),
+ mediaWidth,
+ mediaHeight,
+ )
+}
+
+interface CropyImageProps {
+ eventCoverImage: string;
+ eventCoverImageName: string;
+ onChange: ([eventCoverImage, eventCoverImageName]: [string, string]) => void;
+}
+
+export default function CropImage({
+ eventCoverImage,
+ eventCoverImageName,
+ onChange,
+}: CropyImageProps) {
+ const [imgSrc, setImgSrc] = useState("");
+ const [imgName, setImgName] = useState("");
+ const previewCanvasRef = useRef
(null);
+ const imgRef = useRef(null);
+ const [crop, setCrop] = useState();
+ const [completedCrop, setCompletedCrop] = useState();
+
+ // state variables to keep track of which elements to render
+ const [displayReactCrop, setDisplayReactCrop] = useState(true);
+ const [isInitialModifyLoad, setIsInitialModifyLoad] = useState(eventCoverImage !== "");
+
+ const aspect = 16 / 9
+
+ function onSelectFile(e: React.ChangeEvent) {
+ if (e.target.files && e.target.files.length > 0) {
+ const file = e.target.files[0];
+ const fullFilename = file.name;
+ const filenameWithoutExtension = fullFilename.substring(0, fullFilename.lastIndexOf('.')) || fullFilename;
+ setImgName(filenameWithoutExtension);
+
+ setCrop(undefined); // Makes crop preview update between images.
+ const reader = new FileReader();
+ reader.addEventListener('load', () =>
+ setImgSrc(reader.result?.toString() || ''),
+ )
+ reader.readAsDataURL(file);
+
+ // show ReactCrop editor
+ setDisplayReactCrop(true);
+ } else if (!isInitialModifyLoad) {
+ // show ReactCrop editor
+ setDisplayReactCrop(false);
+
+ // reset completedCrop (no file is chosen)
+ setCompletedCrop(undefined);
+
+ // reset eventCoverImage/eventCoverImageName, imgName, amnd imgSrc
+ onChange(["", ""]);
+
+ setImgName("");
+
+ setImgSrc("");
+ }
+ }
+
+ function onImageLoad(e: React.SyntheticEvent) {
+ if (aspect) {
+ const { width, height } = e.currentTarget;
+ setCrop(centerAspectCrop(width, height, aspect));
+ }
+ }
+
+ async function onSaveCropClick() {
+ const image = imgRef.current;
+ const previewCanvas = previewCanvasRef.current;
+ if (!image || !previewCanvas || !completedCrop) {
+ throw new Error('Crop canvas does not exist');
+ }
+
+ // This will size relative to the uploaded image
+ // size. If you want to size according to what they
+ // are looking at on screen, remove scaleX + scaleY
+ const scaleX = image.naturalWidth / image.width;
+ const scaleY = image.naturalHeight / image.height;
+
+ // Create an in-memory canvas
+ const canvas = document.createElement('canvas');
+ canvas.width = completedCrop.width * scaleX;
+ canvas.height = completedCrop.height * scaleY;
+ const ctx = canvas.getContext('2d');
+ if (!ctx) {
+ throw new Error('No 2d context');
+ }
+
+ ctx.drawImage(
+ previewCanvas,
+ 0,
+ 0,
+ previewCanvas.width,
+ previewCanvas.height,
+ 0,
+ 0,
+ canvas.width,
+ canvas.height,
+ );
+ // You might want { type: "image/jpeg", quality: <0 to 1> } to
+ // reduce image size
+
+ // Convert the canvas to a base64 data URL
+ const base64Image = canvas.toDataURL('image/png');
+ onChange([base64Image, imgName]);
+
+ // hide ReactCrop editor
+ setDisplayReactCrop(false);
+ }
+
+ useDebounceEffect(
+ async () => {
+ if (
+ completedCrop?.width &&
+ completedCrop?.height &&
+ imgRef.current &&
+ previewCanvasRef.current
+ ) {
+ // We use canvasPreview as it's much faster than imgPreview.
+ CanvasPreview(
+ imgRef.current,
+ previewCanvasRef.current,
+ completedCrop
+ )
+ }
+ },
+ 100,
+ [completedCrop],
+ );
+
+ return (
+
+
+ ) => {
+ // no longer first load
+ setIsInitialModifyLoad(false);
+ onSelectFile(e);
+ }}
+ />
+
+ {(!!imgSrc && displayReactCrop && !isInitialModifyLoad) && (
+
setCrop(percentCrop)}
+ onComplete={(c) => setCompletedCrop(c)}
+ aspect={aspect}
+ minHeight={100}
+ >
+
+
+ )}
+ {!!completedCrop && (displayReactCrop ?
+
+
+ Save Crop
+
+ :
+
+
+
setDisplayReactCrop(true)}>Edit Crop
+
+ )}
+ {/* edge case (first load --> display image) */}
+ {isInitialModifyLoad &&
+
+ }
+
+ )
+}
diff --git a/components/admin/rush/SettingsModal.tsx b/components/admin/rush/SettingsModal.tsx
new file mode 100644
index 0000000..44a9e3b
--- /dev/null
+++ b/components/admin/rush/SettingsModal.tsx
@@ -0,0 +1,75 @@
+import { RushCategory } from "@/types/admin/events";
+import { Button, Dropdown, Label, Modal } from "flowbite-react";
+import { useState } from "react";
+
+interface SettingsModalProps {
+ showModal: boolean,
+ defaultRushCategoryId: string,
+ rushCategories: RushCategory[],
+ onClose: () => void,
+ onSubmit: (defaultRushCategoryId: string) => Promise,
+}
+
+// SettingsModal: used to select/update the defaultRushCategoryId (TODO: delete rushCategories here too)
+export default function SettingsModal({
+ showModal,
+ defaultRushCategoryId,
+ rushCategories,
+ onClose,
+ onSubmit,
+}: SettingsModalProps) {
+ const [localDefaultRushCategoryId, setLocalDefaultRushCategoryId] = useState(defaultRushCategoryId);
+
+ const categories = rushCategories.map((category) => {
+ return { label: category.name, value: category._id }
+ });
+
+ const getRushCategoryById = (categoryId: string | null): string => {
+ const category = rushCategories.find((category) => category._id === categoryId);
+ if (category) {
+ return category.name;
+ } else {
+ return "None";
+ }
+ }
+
+ return (
+
+
+
+
+
+ Rush Settings
+
+
+
+
+
+ *
+
+
+ setLocalDefaultRushCategoryId("")}>
+ None
+
+
+ {categories.map((category) => (
+ setLocalDefaultRushCategoryId(category.value)}>
+ {category.label}
+
+ ))}
+
+
+
+
+ onSubmit(localDefaultRushCategoryId)}
+ >
+ Update Settings
+
+
+
+
+
+ )
+}
\ No newline at end of file
diff --git a/components/public/YearSelect.tsx b/components/public/YearSelect.tsx
new file mode 100644
index 0000000..2d61bb0
--- /dev/null
+++ b/components/public/YearSelect.tsx
@@ -0,0 +1,38 @@
+import React from 'react';
+import { Select, SelectProps } from 'flowbite-react';
+
+interface YearSelectProps extends SelectProps {
+ startYear: number;
+ endYear: number;
+ value: string;
+ onChange: React.ChangeEventHandler;
+}
+
+export default function YearSelect({
+ startYear,
+ endYear,
+ value,
+ onChange,
+ ...props
+}: YearSelectProps) {
+
+ const years = [];
+ for (let year = startYear; year <= endYear; year++) {
+ years.push(year);
+ }
+
+ return (
+
+ );
+};
diff --git a/package-lock.json b/package-lock.json
index 5feff83..a6f460f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,7 +15,7 @@
"ag-grid-react": "^31.2.1",
"autoprefixer": "^10.4.15",
"flowbite": "^1.8.1",
- "flowbite-react": "^0.7.5",
+ "flowbite-react": "^0.10.1",
"jsonwebtoken": "8.5.1",
"mongodb": "^6.1.0",
"next": "13.4.9",
@@ -26,7 +26,9 @@
"react": "18.2.0",
"react-datepicker": "^4.17.0",
"react-dom": "18.2.0",
+ "react-image-crop": "^11.0.6",
"react-timestamp": "^6.0.0",
+ "reaflow": "^5.3.1",
"recharts": "^2.10.3",
"tailwindcss": "^3.3.3",
"tw-elements": "^1.0.0",
@@ -61,9 +63,9 @@
}
},
"node_modules/@babel/runtime": {
- "version": "7.24.0",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.0.tgz",
- "integrity": "sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==",
+ "version": "7.25.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz",
+ "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==",
"dependencies": {
"regenerator-runtime": "^0.14.0"
},
@@ -85,6 +87,21 @@
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
+ "node_modules/@emotion/is-prop-valid": {
+ "version": "0.8.8",
+ "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz",
+ "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==",
+ "optional": true,
+ "dependencies": {
+ "@emotion/memoize": "0.7.4"
+ }
+ },
+ "node_modules/@emotion/memoize": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz",
+ "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==",
+ "optional": true
+ },
"node_modules/@eslint-community/eslint-utils": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
@@ -164,30 +181,30 @@
}
},
"node_modules/@floating-ui/core": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz",
- "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==",
+ "version": "1.6.5",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.5.tgz",
+ "integrity": "sha512-8GrTWmoFhm5BsMZOTHeGD2/0FLKLQQHvO/ZmQga4tKempYRLz8aqJGqXVuQgisnMObq2YZ2SgkwctN1LOOxcqA==",
"dependencies": {
- "@floating-ui/utils": "^0.2.1"
+ "@floating-ui/utils": "^0.2.5"
}
},
"node_modules/@floating-ui/dom": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.3.tgz",
- "integrity": "sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==",
+ "version": "1.6.8",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.8.tgz",
+ "integrity": "sha512-kx62rP19VZ767Q653wsP1XZCGIirkE09E0QUGNYTM/ttbbQHqcGPdSfWFxUyyNLc/W6aoJRBajOSXhP6GXjC0Q==",
"dependencies": {
- "@floating-ui/core": "^1.0.0",
- "@floating-ui/utils": "^0.2.0"
+ "@floating-ui/core": "^1.6.0",
+ "@floating-ui/utils": "^0.2.5"
}
},
"node_modules/@floating-ui/react": {
- "version": "0.26.9",
- "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.9.tgz",
- "integrity": "sha512-p86wynZJVEkEq2BBjY/8p2g3biQ6TlgT4o/3KgFKyTWoJLU1GZ8wpctwRqtkEl2tseYA+kw7dBAIDFcednfI5w==",
+ "version": "0.26.20",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.20.tgz",
+ "integrity": "sha512-RixKJJG92fcIsVoqrFr4Onpzh7hlOx4U7NV4aLhMLmtvjZ5oTB/WzXaANYUZATKqXvvW7t9sCxtzejip26N5Ag==",
"dependencies": {
- "@floating-ui/react-dom": "^2.0.8",
- "@floating-ui/utils": "^0.2.1",
- "tabbable": "^6.0.1"
+ "@floating-ui/react-dom": "^2.1.1",
+ "@floating-ui/utils": "^0.2.5",
+ "tabbable": "^6.0.0"
},
"peerDependencies": {
"react": ">=16.8.0",
@@ -195,11 +212,11 @@
}
},
"node_modules/@floating-ui/react-dom": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.8.tgz",
- "integrity": "sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.1.tgz",
+ "integrity": "sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==",
"dependencies": {
- "@floating-ui/dom": "^1.6.1"
+ "@floating-ui/dom": "^1.0.0"
},
"peerDependencies": {
"react": ">=16.8.0",
@@ -207,9 +224,9 @@
}
},
"node_modules/@floating-ui/utils": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz",
- "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q=="
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.5.tgz",
+ "integrity": "sha512-sTcG+QZ6fdEUObICavU+aB3Mp8HY4n14wYHdxK4fXjPmv3PXZZeY5RaguJmGyeH/CJQhX3fqKUtS4qc1LoHwhQ=="
},
"node_modules/@humanwhocodes/config-array": {
"version": "0.11.14",
@@ -336,6 +353,41 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
+ "node_modules/@juggle/resize-observer": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz",
+ "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA=="
+ },
+ "node_modules/@ljharb/resumer": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@ljharb/resumer/-/resumer-0.0.1.tgz",
+ "integrity": "sha512-skQiAOrCfO7vRTq53cxznMpks7wS1va95UCidALlOVWqvBAzwPVErwizDwoMqNVMEn1mDq0utxZd02eIrvF1lw==",
+ "dependencies": {
+ "@ljharb/through": "^2.3.9"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/@ljharb/through": {
+ "version": "2.3.13",
+ "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.13.tgz",
+ "integrity": "sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==",
+ "dependencies": {
+ "call-bind": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/@marko19907/string-to-color": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@marko19907/string-to-color/-/string-to-color-1.0.0.tgz",
+ "integrity": "sha512-V3ipYiIUhYjP7BqpOY06mgRFFGoR9cKawD4iJQFhEnuy3j3e0ipcr+OpNQLbOBrIU3p9wuPw3OwBn0hHopDW0A==",
+ "dependencies": {
+ "esm-seedrandom": "^3.0.5"
+ }
+ },
"node_modules/@mongodb-js/saslprep": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.4.tgz",
@@ -551,6 +603,15 @@
"url": "https://opencollective.com/popperjs"
}
},
+ "node_modules/@reaviz/react-use-fuzzy": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@reaviz/react-use-fuzzy/-/react-use-fuzzy-1.0.3.tgz",
+ "integrity": "sha512-ON5RxiI0r9zNpEKHvxqT8zz3iI4kzc37NzB4t8lfXSWwCEkpzxWY9TB2JAdYp9LC3UW2tN9zxdMnaNBLz4atTw==",
+ "peerDependencies": {
+ "fuse.js": "^6.6.2",
+ "react": ">= 16"
+ }
+ },
"node_modules/@rushstack/eslint-patch": {
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.7.2.tgz",
@@ -1194,7 +1255,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
"integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.5",
"is-array-buffer": "^3.0.4"
@@ -1356,7 +1416,6 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
"integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
- "dev": true,
"dependencies": {
"array-buffer-byte-length": "^1.0.1",
"call-bind": "^1.0.5",
@@ -1429,7 +1488,6 @@
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
"integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
- "dev": true,
"dependencies": {
"possible-typed-array-names": "^1.0.0"
},
@@ -1480,6 +1538,11 @@
"node": ">=8"
}
},
+ "node_modules/body-scroll-lock-upgrade": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/body-scroll-lock-upgrade/-/body-scroll-lock-upgrade-1.1.0.tgz",
+ "integrity": "sha512-nnfVAS+tB7CS9RaksuHVTpgHWHF7fE/ptIBJnwZrMqImIvWJF1OGcLnMpBhC6qhkx9oelvyxmWXwmIJXCV98Sw=="
+ },
"node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
@@ -1561,11 +1624,15 @@
"node": ">=10.16.0"
}
},
+ "node_modules/calculate-size": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/calculate-size/-/calculate-size-1.1.1.tgz",
+ "integrity": "sha512-jJZ7pvbQVM/Ss3VO789qpsypN3xmnepg242cejOAslsmlZLYw2dnj7knnNowabQ0Kzabzx56KFTy2Pot/y6FmA=="
+ },
"node_modules/call-bind": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
"integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
- "dev": true,
"dependencies": {
"es-define-property": "^1.0.0",
"es-errors": "^1.3.0",
@@ -1706,6 +1773,11 @@
"node": ">= 6"
}
},
+ "node_modules/chroma-js": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/chroma-js/-/chroma-js-2.6.0.tgz",
+ "integrity": "sha512-BLHvCB9s8Z1EV4ethr6xnkl/P2YRFOGqfgvuMG/MyCbZPrTA+NeiByY6XvgF0zP4/2deU2CXnWyMa3zu1LqQ3A=="
+ },
"node_modules/chrome-trace-event": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
@@ -1761,8 +1833,7 @@
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
},
"node_modules/cookie": {
"version": "0.5.0",
@@ -1772,6 +1843,17 @@
"node": ">= 0.6"
}
},
+ "node_modules/coverup": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/coverup/-/coverup-0.1.1.tgz",
+ "integrity": "sha512-Q2Fs0v3M4eMNfj0TGaFb4Oh0yuaQj9EhQbEKtFhD3Tm4HZt1Zn7TrBKX14gVEO9aeWP8KnF2/qrh7fr/rvbcXw==",
+ "deprecated": "No longer maintained"
+ },
+ "node_modules/create-global-state-hook": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/create-global-state-hook/-/create-global-state-hook-0.0.2.tgz",
+ "integrity": "sha512-+1gRNwtuSQIC9lQQngfcY1VARKs6R32KJjI1bFrsp0W5MbauupRW/uQF0f+ElXx8xMmuEK9wl5zqAslzj6GvCA=="
+ },
"node_modules/cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -1801,6 +1883,14 @@
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
},
+ "node_modules/ctrl-keys": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/ctrl-keys/-/ctrl-keys-1.0.3.tgz",
+ "integrity": "sha512-Kcb05/xUNra57fxpsLOflECWYbjQEQ9ZuQEthB3cgESN5zMLJ364twA9h2kqz8n06RnTY/+rKWM3UbkOWKeEJg==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/custom-event-polyfill": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/custom-event-polyfill/-/custom-event-polyfill-1.0.7.tgz",
@@ -1938,9 +2028,9 @@
}
},
"node_modules/debounce": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/debounce/-/debounce-2.0.0.tgz",
- "integrity": "sha512-xRetU6gL1VJbs85Mc4FoEGSjQxzpdxRyFhe3lmWFyy2EzydIcD4xzUvRJMD+NPDfMwKNhxa3PvsIOU32luIWeA==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/debounce/-/debounce-2.1.0.tgz",
+ "integrity": "sha512-OkL3+0pPWCqoBc/nhO9u6TIQNTK44fnBnzuVtJAbp13Naxw9R6u21x+8tVTka87AhDZ3htqZ2pSSsZl9fqL2Wg==",
"engines": {
"node": ">=18"
},
@@ -1976,6 +2066,33 @@
"resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz",
"integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg=="
},
+ "node_modules/deep-copy": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/deep-copy/-/deep-copy-1.4.2.tgz",
+ "integrity": "sha512-VxZwQ/1+WGQPl5nE67uLhh7OqdrmqI1OazrraO9Bbw/M8Bt6Mol/RxzDA6N6ZgRXpsG/W9PgUj8E1LHHBEq2GQ==",
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/deep-equal": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz",
+ "integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==",
+ "dependencies": {
+ "is-arguments": "^1.1.1",
+ "is-date-object": "^1.0.5",
+ "is-regex": "^1.1.4",
+ "object-is": "^1.1.5",
+ "object-keys": "^1.1.1",
+ "regexp.prototype.flags": "^1.5.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/deep-is": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
@@ -1990,11 +2107,18 @@
"node": ">=0.10.0"
}
},
+ "node_modules/defaulty": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/defaulty/-/defaulty-2.1.0.tgz",
+ "integrity": "sha512-dNWjHNxL32khAaX/kS7/a3rXsgvqqp7cptqt477wAVnJLgaOKjcQt+53jKgPofn6hL2xyG51MegPlB5TKImXjA==",
+ "dependencies": {
+ "deep-copy": "^1.4.1"
+ }
+ },
"node_modules/define-data-property": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
"integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
- "dev": true,
"dependencies": {
"es-define-property": "^1.0.0",
"es-errors": "^1.3.0",
@@ -2011,7 +2135,6 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
"integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
- "dev": true,
"dependencies": {
"define-data-property": "^1.0.1",
"has-property-descriptors": "^1.0.0",
@@ -2024,6 +2147,14 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/defined": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz",
+ "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/dequal": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
@@ -2084,6 +2215,37 @@
"csstype": "^3.0.2"
}
},
+ "node_modules/dotignore": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz",
+ "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==",
+ "dependencies": {
+ "minimatch": "^3.0.4"
+ },
+ "bin": {
+ "ignored": "bin/ignored"
+ }
+ },
+ "node_modules/dotignore/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/dotignore/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/eastasianwidth": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
@@ -2102,6 +2264,19 @@
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.690.tgz",
"integrity": "sha512-+2OAGjUx68xElQhydpcbqH50hE8Vs2K6TkAeLhICYfndb67CVH0UsZaijmRUE3rHlIxU1u0jxwhgVe6fK3YANA=="
},
+ "node_modules/elkjs": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.8.2.tgz",
+ "integrity": "sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ=="
+ },
+ "node_modules/ellipsize": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/ellipsize/-/ellipsize-0.2.0.tgz",
+ "integrity": "sha512-InJhblLPZbBjw3N49knOWonfprgKPLKGySmG6bGHi7WsD5OkXIIlLkU4AguROmaMZ0v1BRdo267wEc0Pexw8ww==",
+ "dependencies": {
+ "tape": "^4.9.0"
+ }
+ },
"node_modules/emoji-regex": {
"version": "9.2.2",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
@@ -2133,7 +2308,6 @@
"version": "1.22.5",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.5.tgz",
"integrity": "sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w==",
- "dev": true,
"dependencies": {
"array-buffer-byte-length": "^1.0.1",
"arraybuffer.prototype.slice": "^1.0.3",
@@ -2194,7 +2368,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
"integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
- "dev": true,
"dependencies": {
"get-intrinsic": "^1.2.4"
},
@@ -2206,7 +2379,6 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
- "dev": true,
"engines": {
"node": ">= 0.4"
}
@@ -2248,7 +2420,6 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz",
"integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==",
- "dev": true,
"dependencies": {
"get-intrinsic": "^1.2.4",
"has-tostringtag": "^1.0.2",
@@ -2271,7 +2442,6 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
"integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
- "dev": true,
"dependencies": {
"is-callable": "^1.1.4",
"is-date-object": "^1.0.1",
@@ -2798,6 +2968,11 @@
"node": ">=8"
}
},
+ "node_modules/esm-seedrandom": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/esm-seedrandom/-/esm-seedrandom-3.0.5.tgz",
+ "integrity": "sha512-pMAq0mFIr5JQ3Ihbng7EBLMJ+llMbaDKkiG44pqbSXS0NIZWtEANpOpxb5s6Q8Q2R562P26qMHPv8YtP/NHh9g=="
+ },
"node_modules/espree": {
"version": "9.6.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
@@ -3025,23 +3200,46 @@
}
},
"node_modules/flowbite-react": {
- "version": "0.7.5",
- "resolved": "https://registry.npmjs.org/flowbite-react/-/flowbite-react-0.7.5.tgz",
- "integrity": "sha512-Zt2joKS29xLfsmOpMjpSVkHo3qwYrneGui78prJ97LbelFmK4WvAEIhjp5DWLgCkw94hvv5qFxQpZmksh6re5g==",
- "dependencies": {
- "@floating-ui/react": "^0.26.2",
- "classnames": "^2.5.1",
- "debounce": "^2.0.0",
- "flowbite": "^2.0.0",
- "react-icons": "^4.11.0",
- "tailwind-merge": "^2.0.0"
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/flowbite-react/-/flowbite-react-0.10.1.tgz",
+ "integrity": "sha512-T6rdfrEvIqrf7aIB+OLkuvDaa/h0Ufnl7/5vJR9JJ4IpKIvJm/JzhAiYmkD+jDj3HuILsN21+ZVV6gd4tlndYQ==",
+ "dependencies": {
+ "@floating-ui/core": "1.6.2",
+ "@floating-ui/react": "0.26.17",
+ "classnames": "2.5.1",
+ "debounce": "2.1.0",
+ "flowbite": "2.3.0",
+ "react-icons": "5.2.1",
+ "tailwind-merge": "2.3.0"
},
"peerDependencies": {
- "react": "^18",
- "react-dom": "^18",
+ "react": ">=18",
+ "react-dom": ">=18",
"tailwindcss": "^3"
}
},
+ "node_modules/flowbite-react/node_modules/@floating-ui/core": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.2.tgz",
+ "integrity": "sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==",
+ "dependencies": {
+ "@floating-ui/utils": "^0.2.0"
+ }
+ },
+ "node_modules/flowbite-react/node_modules/@floating-ui/react": {
+ "version": "0.26.17",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.17.tgz",
+ "integrity": "sha512-ESD+jYWwqwVzaIgIhExrArdsCL1rOAzryG/Sjlu8yaD3Mtqi3uVyhbE2V7jD58Mo52qbzKz2eUY/Xgh5I86FCQ==",
+ "dependencies": {
+ "@floating-ui/react-dom": "^2.1.0",
+ "@floating-ui/utils": "^0.2.0",
+ "tabbable": "^6.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
+ }
+ },
"node_modules/flowbite-react/node_modules/flowbite": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/flowbite/-/flowbite-2.3.0.tgz",
@@ -3051,11 +3249,32 @@
"mini-svg-data-uri": "^1.4.3"
}
},
+ "node_modules/focus-trap": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.5.4.tgz",
+ "integrity": "sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==",
+ "dependencies": {
+ "tabbable": "^6.2.0"
+ }
+ },
+ "node_modules/focus-trap-react": {
+ "version": "10.2.3",
+ "resolved": "https://registry.npmjs.org/focus-trap-react/-/focus-trap-react-10.2.3.tgz",
+ "integrity": "sha512-YXBpFu/hIeSu6NnmV2xlXzOYxuWkoOtar9jzgp3lOmjWLWY59C/b8DtDHEAV4SPU07Nd/t+nS/SBNGkhUBFmEw==",
+ "dependencies": {
+ "focus-trap": "^7.5.4",
+ "tabbable": "^6.2.0"
+ },
+ "peerDependencies": {
+ "prop-types": "^15.8.1",
+ "react": ">=16.3.0",
+ "react-dom": ">=16.3.0"
+ }
+ },
"node_modules/for-each": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
"integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
- "dev": true,
"dependencies": {
"is-callable": "^1.1.3"
}
@@ -3087,11 +3306,34 @@
"url": "https://github.com/sponsors/rawify"
}
},
+ "node_modules/framer-motion": {
+ "version": "11.3.21",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.3.21.tgz",
+ "integrity": "sha512-D+hfIsvzV8eL/iycld4K+tKlg2Q2LdwnrcBEohtGw3cG1AIuNYATbT5RUqIM1ndsAk+EfGhoSGf0UaiFodc5Tw==",
+ "dependencies": {
+ "tslib": "^2.4.0"
+ },
+ "peerDependencies": {
+ "@emotion/is-prop-valid": "*",
+ "react": "^18.0.0",
+ "react-dom": "^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/is-prop-valid": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
},
"node_modules/fsevents": {
"version": "2.3.3",
@@ -3118,7 +3360,6 @@
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
"integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
@@ -3136,16 +3377,22 @@
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
"integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
- "dev": true,
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/fuse.js": {
+ "version": "6.6.2",
+ "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.6.2.tgz",
+ "integrity": "sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/get-intrinsic": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
"integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
- "dev": true,
"dependencies": {
"es-errors": "^1.3.0",
"function-bind": "^1.1.2",
@@ -3164,7 +3411,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
"integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.5",
"es-errors": "^1.3.0",
@@ -3245,7 +3491,6 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
"integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
- "dev": true,
"dependencies": {
"define-properties": "^1.1.3"
},
@@ -3280,7 +3525,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
"integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
- "dev": true,
"dependencies": {
"get-intrinsic": "^1.1.3"
},
@@ -3299,11 +3543,18 @@
"integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
"dev": true
},
+ "node_modules/has": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz",
+ "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
"node_modules/has-bigints": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
"integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
- "dev": true,
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -3321,7 +3572,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
"integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
- "dev": true,
"dependencies": {
"es-define-property": "^1.0.0"
},
@@ -3333,7 +3583,6 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
"integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
- "dev": true,
"engines": {
"node": ">= 0.4"
},
@@ -3345,7 +3594,6 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
- "dev": true,
"engines": {
"node": ">= 0.4"
},
@@ -3357,7 +3605,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
- "dev": true,
"dependencies": {
"has-symbols": "^1.0.3"
},
@@ -3379,6 +3626,19 @@
"node": ">= 0.4"
}
},
+ "node_modules/highlight-words-core": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/highlight-words-core/-/highlight-words-core-1.2.2.tgz",
+ "integrity": "sha512-BXUKIkUuh6cmmxzi5OIbUJxrG8OAk2MqoL1DtO3Wo9D2faJg2ph5ntyuQeLqaHJmzER6H5tllCDA9ZnNe9BVGg=="
+ },
+ "node_modules/human-format": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/human-format/-/human-format-1.2.0.tgz",
+ "integrity": "sha512-GIjOefWusTiXEPezbuI59uc1G2SNMpym6w1wNfoWAG6QrTsWueuauR5We0xHHuzoJKIYTwwNtTEy0ahyji5KXw==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/ignore": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
@@ -3417,7 +3677,6 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "dev": true,
"dependencies": {
"once": "^1.3.0",
"wrappy": "1"
@@ -3426,14 +3685,12 @@
"node_modules/inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"node_modules/internal-slot": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
"integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==",
- "dev": true,
"dependencies": {
"es-errors": "^1.3.0",
"hasown": "^2.0.0",
@@ -3451,11 +3708,25 @@
"node": ">=12"
}
},
+ "node_modules/is-arguments": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
+ "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-array-buffer": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
"integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"get-intrinsic": "^1.2.1"
@@ -3486,7 +3757,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
"integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
- "dev": true,
"dependencies": {
"has-bigints": "^1.0.1"
},
@@ -3509,7 +3779,6 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
"integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"has-tostringtag": "^1.0.0"
@@ -3525,7 +3794,6 @@
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
"integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
- "dev": true,
"engines": {
"node": ">= 0.4"
},
@@ -3548,7 +3816,6 @@
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
"integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
- "dev": true,
"dependencies": {
"has-tostringtag": "^1.0.0"
},
@@ -3626,7 +3893,6 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
"integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
- "dev": true,
"engines": {
"node": ">= 0.4"
},
@@ -3646,7 +3912,6 @@
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
"integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
- "dev": true,
"dependencies": {
"has-tostringtag": "^1.0.0"
},
@@ -3670,7 +3935,6 @@
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
"integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"has-tostringtag": "^1.0.0"
@@ -3695,7 +3959,6 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz",
"integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.7"
},
@@ -3710,7 +3973,6 @@
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
"integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
- "dev": true,
"dependencies": {
"has-tostringtag": "^1.0.0"
},
@@ -3725,7 +3987,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
"integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
- "dev": true,
"dependencies": {
"has-symbols": "^1.0.2"
},
@@ -3740,7 +4001,6 @@
"version": "1.1.13",
"resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz",
"integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==",
- "dev": true,
"dependencies": {
"which-typed-array": "^1.1.14"
},
@@ -3764,7 +4024,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
"integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2"
},
@@ -3788,8 +4047,7 @@
"node_modules/isarray": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
- "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
- "dev": true
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
},
"node_modules/isexe": {
"version": "2.0.0",
@@ -3975,6 +4233,43 @@
"json-buffer": "3.0.1"
}
},
+ "node_modules/kld-affine": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/kld-affine/-/kld-affine-2.1.1.tgz",
+ "integrity": "sha512-NIS9sph8ZKdnQxZa5TcggaFs/Qr9zX3brFlGwE0+0Z4EzFIvAFuqLSwNeU4GkEpaX8ndh3ggGmWV7BPPcS3vjQ==",
+ "engines": {
+ "node": ">= 10.15.3"
+ }
+ },
+ "node_modules/kld-intersections": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/kld-intersections/-/kld-intersections-0.7.0.tgz",
+ "integrity": "sha512-/KuBU7Y5bRPGfc0yQ3QIoXPKqOQ6cBWDRl1XVMMa3pm4V6Ydbgy9e2fZoRxlSIU0gZSBt1c6gWLOzSGKbU8I3A==",
+ "dependencies": {
+ "kld-affine": "^2.1.1",
+ "kld-path-parser": "^0.2.1",
+ "kld-polynomial": "^0.3.0"
+ },
+ "engines": {
+ "node": ">= 10.15.3"
+ }
+ },
+ "node_modules/kld-path-parser": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/kld-path-parser/-/kld-path-parser-0.2.1.tgz",
+ "integrity": "sha512-C1EqY6vzqv5tdKeMF31L+JXq97n5zo67LiSEhZf4sPq8YeM+8ytp/qMGSKN8VdSPvFa6h1SR35aF4+T2JtxZww==",
+ "engines": {
+ "node": ">= 10.15.3"
+ }
+ },
+ "node_modules/kld-polynomial": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/kld-polynomial/-/kld-polynomial-0.3.0.tgz",
+ "integrity": "sha512-PEfxjQ6tsxL9DHBIhM2UZsSes0GI+OIMjbE0kj60jr80Biq/xXl1eGfnyzmfoackAMdKZtw2060L09HdjkPP5w==",
+ "engines": {
+ "node": ">= 10.15.3"
+ }
+ },
"node_modules/language-subtag-registry": {
"version": "0.3.22",
"resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz",
@@ -4126,6 +4421,11 @@
"node": ">=10"
}
},
+ "node_modules/memoize-one": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-4.0.3.tgz",
+ "integrity": "sha512-QmpUu4KqDmX0plH4u+tf0riMc1KHE1+lw95cMrLlXQAFOx/xnBtwhZ52XJxd9X2O6kwKBqX32kmhbhlobD0cuw=="
+ },
"node_modules/memory-pager": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
@@ -4207,7 +4507,6 @@
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
- "dev": true,
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -4220,6 +4519,25 @@
"node": ">=16 || 14 >=14.17"
}
},
+ "node_modules/mock-property": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/mock-property/-/mock-property-1.0.3.tgz",
+ "integrity": "sha512-2emPTb1reeLLYwHxyVx993iYyCHEiRRO+y8NFXFPL5kl5q14sgTK76cXyEKkeKCHeRw35SfdkUJ10Q1KfHuiIQ==",
+ "dependencies": {
+ "define-data-property": "^1.1.1",
+ "functions-have-names": "^1.2.3",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "hasown": "^2.0.0",
+ "isarray": "^2.0.5"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/mongodb": {
"version": "6.4.0",
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.4.0.tgz",
@@ -4289,6 +4607,11 @@
"thenify-all": "^1.0.0"
}
},
+ "node_modules/name-initials": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/name-initials/-/name-initials-0.1.3.tgz",
+ "integrity": "sha512-UJcpCmyftGuZ7I46dqOw776VvH3VqHhAM7ma4eyY0t52FahFv/VhmDqSeekwSZFXyK9HLg9MXmb9udeOJ3YtCA=="
+ },
"node_modules/nanoid": {
"version": "3.3.7",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
@@ -4465,7 +4788,21 @@
"version": "1.13.1",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
"integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
- "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-is": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz",
+ "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -4474,7 +4811,6 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
- "dev": true,
"engines": {
"node": ">= 0.4"
}
@@ -4483,7 +4819,6 @@
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
"integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.5",
"define-properties": "^1.2.1",
@@ -4583,7 +4918,6 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dev": true,
"dependencies": {
"wrappy": "1"
}
@@ -4619,6 +4953,14 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/p-cancelable": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz",
+ "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==",
+ "engines": {
+ "node": ">=12.20"
+ }
+ },
"node_modules/p-limit": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
@@ -4674,7 +5016,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -4761,11 +5102,18 @@
"node": ">= 6"
}
},
+ "node_modules/pluralize": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
+ "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/possible-typed-array-names": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
"integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
- "dev": true,
"engines": {
"node": ">= 0.4"
}
@@ -5040,6 +5388,75 @@
"webpack": "^4.0.0 || ^5.0.0"
}
},
+ "node_modules/reablocks": {
+ "version": "8.4.4",
+ "resolved": "https://registry.npmjs.org/reablocks/-/reablocks-8.4.4.tgz",
+ "integrity": "sha512-AX+qzSBvZHk/icftLa1PjLfJoXkg9ZuFbqUjfn6y82ysH1Y9umF+vaz/TWcSs1Ilwo2cbfElWMa6CnjXQvFsnQ==",
+ "dependencies": {
+ "@floating-ui/react": "^0.26.16",
+ "@marko19907/string-to-color": "^1.0.0",
+ "@reaviz/react-use-fuzzy": "^1.0.3",
+ "body-scroll-lock-upgrade": "^1.1.0",
+ "chroma-js": "^2.4.2",
+ "classnames": "^2.5.1",
+ "coverup": "^0.1.1",
+ "create-global-state-hook": "^0.0.2",
+ "ctrl-keys": "^1.0.3",
+ "date-fns": "^3.6.0",
+ "ellipsize": "^0.5.1",
+ "focus-trap-react": "^10.2.3",
+ "framer-motion": "^10.16.16",
+ "fuse.js": "^6.6.2",
+ "human-format": "^1.2.0",
+ "name-initials": "^0.1.3",
+ "pluralize": "^8.0.0",
+ "react-fast-compare": "^3.2.2",
+ "react-highlight-words": "^0.20.0",
+ "react-textarea-autosize": "^8.5.3",
+ "tailwind-merge": "^2.2.2"
+ },
+ "peerDependencies": {
+ "react": ">=16",
+ "react-dom": ">=16"
+ }
+ },
+ "node_modules/reablocks/node_modules/date-fns": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz",
+ "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/kossnocorp"
+ }
+ },
+ "node_modules/reablocks/node_modules/ellipsize": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/ellipsize/-/ellipsize-0.5.1.tgz",
+ "integrity": "sha512-0jEAyuIRU6U8MN0S5yUqIrkK/AQWkChh642N3zQuGV57s9bsUWYLc0jJOoDIUkZ2sbEL3ySq8xfq71BvG4q3hw=="
+ },
+ "node_modules/reablocks/node_modules/framer-motion": {
+ "version": "10.18.0",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-10.18.0.tgz",
+ "integrity": "sha512-oGlDh1Q1XqYPksuTD/usb0I70hq95OUzmL9+6Zd+Hs4XV0oaISBa/UUMSjYiq6m8EUF32132mOJ8xVZS+I0S6w==",
+ "dependencies": {
+ "tslib": "^2.4.0"
+ },
+ "optionalDependencies": {
+ "@emotion/is-prop-valid": "^0.8.2"
+ },
+ "peerDependencies": {
+ "react": "^18.0.0",
+ "react-dom": "^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
"node_modules/react": {
"version": "18.2.0",
"resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
@@ -5051,6 +5468,14 @@
"node": ">=0.10.0"
}
},
+ "node_modules/react-cool-dimensions": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/react-cool-dimensions/-/react-cool-dimensions-2.0.7.tgz",
+ "integrity": "sha512-z1VwkAAJ5d8QybDRuYIXTE41RxGr5GYsv1bQhbOBE8cMfoZQZpcF0odL64vdgrQVzat2jayedj1GoYi80FWcbA==",
+ "peerDependencies": {
+ "react": ">= 16.8.0"
+ }
+ },
"node_modules/react-datepicker": {
"version": "4.25.0",
"resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-4.25.0.tgz",
@@ -5085,14 +5510,35 @@
"resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz",
"integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ=="
},
+ "node_modules/react-highlight-words": {
+ "version": "0.20.0",
+ "resolved": "https://registry.npmjs.org/react-highlight-words/-/react-highlight-words-0.20.0.tgz",
+ "integrity": "sha512-asCxy+jCehDVhusNmCBoxDf2mm1AJ//D+EzDx1m5K7EqsMBIHdZ5G4LdwbSEXqZq1Ros0G0UySWmAtntSph7XA==",
+ "dependencies": {
+ "highlight-words-core": "^1.2.0",
+ "memoize-one": "^4.0.0",
+ "prop-types": "^15.5.8"
+ },
+ "peerDependencies": {
+ "react": "^0.14.0 || ^15.0.0 || ^16.0.0-0 || ^17.0.0-0 || ^18.0.0-0"
+ }
+ },
"node_modules/react-icons": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.12.0.tgz",
- "integrity": "sha512-IBaDuHiShdZqmfc/TwHu6+d6k2ltNCf3AszxNmjJc1KUfXdEeRJOKyNvLmAHaarhzGmTSVygNdyu8/opXv2gaw==",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.2.1.tgz",
+ "integrity": "sha512-zdbW5GstTzXaVKvGSyTaBalt7HSfuK5ovrzlpyiWHAFXndXTdd/1hdDHI4xBM1Mn7YriT6aqESucFl9kEXzrdw==",
"peerDependencies": {
"react": "*"
}
},
+ "node_modules/react-image-crop": {
+ "version": "11.0.6",
+ "resolved": "https://registry.npmjs.org/react-image-crop/-/react-image-crop-11.0.6.tgz",
+ "integrity": "sha512-T+/RPBhwFxdf8PjD/uoWk+tBkS0Xf2XW0lY5mnsmClvnAujO81EEjDwj0M2pcHX3seXVgKOr/yIiL+Sx4evMNw==",
+ "peerDependencies": {
+ "react": ">=16.13.1"
+ }
+ },
"node_modules/react-is": {
"version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
@@ -5139,6 +5585,22 @@
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
+ "node_modules/react-textarea-autosize": {
+ "version": "8.5.3",
+ "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.3.tgz",
+ "integrity": "sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.20.13",
+ "use-composed-ref": "^1.3.0",
+ "use-latest": "^1.2.1"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
"node_modules/react-timestamp": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/react-timestamp/-/react-timestamp-6.0.0.tgz",
@@ -5162,6 +5624,15 @@
"react-dom": ">=16.6.0"
}
},
+ "node_modules/react-use-gesture": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/react-use-gesture/-/react-use-gesture-8.0.1.tgz",
+ "integrity": "sha512-CXzUNkulUdgouaAlvAsC5ZVo0fi9KGSBSk81WrE4kOIcJccpANe9zZkAYr5YZZhqpicIFxitsrGVS4wmoMun9A==",
+ "deprecated": "This package is no longer maintained. Please use @use-gesture/react instead",
+ "peerDependencies": {
+ "react": ">= 16.8.0"
+ }
+ },
"node_modules/read-cache": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
@@ -5181,6 +5652,45 @@
"node": ">=8.10.0"
}
},
+ "node_modules/reaflow": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/reaflow/-/reaflow-5.3.1.tgz",
+ "integrity": "sha512-Wqp0Z/eZoVaHkABnf9Hc79k9Irm9tARAN+kPhFv2ExfBkcUk0qMBIspF2a9YpKdmeP/sKwpZCWdiGiqIskqtKw==",
+ "dependencies": {
+ "@juggle/resize-observer": "^3.4.0",
+ "calculate-size": "^1.1.1",
+ "classnames": "^2.3.2",
+ "d3-shape": "^3.0.1",
+ "elkjs": "^0.8.2",
+ "ellipsize": "^0.2.0",
+ "framer-motion": "^11.0.6",
+ "kld-affine": "^2.1.1",
+ "kld-intersections": "^0.7.0",
+ "p-cancelable": "^3.0.0",
+ "reablocks": "^8.0.3",
+ "react-cool-dimensions": "^2.0.7",
+ "react-fast-compare": "^3.2.2",
+ "react-use-gesture": "^8.0.1",
+ "reakeys": "^2.0.3",
+ "undoo": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": ">=16",
+ "react-dom": ">=16"
+ }
+ },
+ "node_modules/reakeys": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/reakeys/-/reakeys-2.0.3.tgz",
+ "integrity": "sha512-5qeGH9xtvFITi+9AyPeTmPhzjDTEBRZICxAg6RJFuEgWFKMHqr6mnMIaL9fgOKJMBzLWCBorpUhyiB824f0EyA==",
+ "dependencies": {
+ "ctrl-keys": "^1.0.3"
+ },
+ "peerDependencies": {
+ "react": ">=16",
+ "react-dom": ">=16"
+ }
+ },
"node_modules/recharts": {
"version": "2.12.2",
"resolved": "https://registry.npmjs.org/recharts/-/recharts-2.12.2.tgz",
@@ -5241,7 +5751,6 @@
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
"integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.6",
"define-properties": "^1.2.1",
@@ -5395,7 +5904,6 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz",
"integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.5",
"get-intrinsic": "^1.2.2",
@@ -5432,7 +5940,6 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
"integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.6",
"es-errors": "^1.3.0",
@@ -5493,7 +6000,6 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz",
"integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==",
- "dev": true,
"dependencies": {
"define-data-property": "^1.1.2",
"es-errors": "^1.3.0",
@@ -5510,7 +6016,6 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
"integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
- "dev": true,
"dependencies": {
"define-data-property": "^1.1.4",
"es-errors": "^1.3.0",
@@ -5544,7 +6049,6 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
"integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.7",
"es-errors": "^1.3.0",
@@ -5701,7 +6205,6 @@
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz",
"integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
@@ -5718,7 +6221,6 @@
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz",
"integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
@@ -5732,7 +6234,6 @@
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz",
"integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.2.0",
@@ -5873,11 +6374,11 @@
"integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew=="
},
"node_modules/tailwind-merge": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.2.2.tgz",
- "integrity": "sha512-tWANXsnmJzgw6mQ07nE3aCDkCK4QdT3ThPMCzawoYA2Pws7vSTCvz3Vrjg61jVUGfFZPJzxEP+NimbcW+EdaDw==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.3.0.tgz",
+ "integrity": "sha512-vkYrLpIP+lgR0tQCG6AP7zZXCTLc1Lnv/CCRT3BqJ9CZ3ui2++GPaGb1x/ILsINIMSYqqvrpqjUFsMNLlW99EA==",
"dependencies": {
- "@babel/runtime": "^7.24.0"
+ "@babel/runtime": "^7.24.1"
},
"funding": {
"type": "github",
@@ -5937,6 +6438,83 @@
"node": ">=6"
}
},
+ "node_modules/tape": {
+ "version": "4.17.0",
+ "resolved": "https://registry.npmjs.org/tape/-/tape-4.17.0.tgz",
+ "integrity": "sha512-KCuXjYxCZ3ru40dmND+oCLsXyuA8hoseu2SS404Px5ouyS0A99v8X/mdiLqsR5MTAyamMBN7PRwt2Dv3+xGIxw==",
+ "dependencies": {
+ "@ljharb/resumer": "~0.0.1",
+ "@ljharb/through": "~2.3.9",
+ "call-bind": "~1.0.2",
+ "deep-equal": "~1.1.1",
+ "defined": "~1.0.1",
+ "dotignore": "~0.1.2",
+ "for-each": "~0.3.3",
+ "glob": "~7.2.3",
+ "has": "~1.0.3",
+ "inherits": "~2.0.4",
+ "is-regex": "~1.1.4",
+ "minimist": "~1.2.8",
+ "mock-property": "~1.0.0",
+ "object-inspect": "~1.12.3",
+ "resolve": "~1.22.6",
+ "string.prototype.trim": "~1.2.8"
+ },
+ "bin": {
+ "tape": "bin/tape"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/tape/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/tape/node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/tape/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/tape/node_modules/object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/terser": {
"version": "5.28.1",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.28.1.tgz",
@@ -6265,7 +6843,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
"integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.7",
"es-errors": "^1.3.0",
@@ -6279,7 +6856,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
"integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.7",
"for-each": "^0.3.3",
@@ -6298,7 +6874,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz",
"integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==",
- "dev": true,
"dependencies": {
"available-typed-arrays": "^1.0.7",
"call-bind": "^1.0.7",
@@ -6318,7 +6893,6 @@
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.5.tgz",
"integrity": "sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.7",
"for-each": "^0.3.3",
@@ -6350,7 +6924,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
"integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"has-bigints": "^1.0.2",
@@ -6361,6 +6934,20 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/undoo": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/undoo/-/undoo-0.5.0.tgz",
+ "integrity": "sha512-SPlDcde+AUHoFKeVlH2uBJxqVkw658I4WR2rPoygC1eRCzm3GeoP8S6xXZVJeBVOQQid8X2xUBW0N4tOvvHH3Q==",
+ "dependencies": {
+ "defaulty": "^2.1.0",
+ "fast-deep-equal": "^1.0.0"
+ }
+ },
+ "node_modules/undoo/node_modules/fast-deep-equal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+ "integrity": "sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw=="
+ },
"node_modules/update-browserslist-db": {
"version": "1.0.13",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
@@ -6399,6 +6986,43 @@
"punycode": "^2.1.0"
}
},
+ "node_modules/use-composed-ref": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz",
+ "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/use-isomorphic-layout-effect": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz",
+ "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/use-latest": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz",
+ "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==",
+ "dependencies": {
+ "use-isomorphic-layout-effect": "^1.1.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -6549,7 +7173,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
"integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
- "dev": true,
"dependencies": {
"is-bigint": "^1.0.1",
"is-boolean-object": "^1.1.0",
@@ -6606,7 +7229,6 @@
"version": "1.1.14",
"resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz",
"integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==",
- "dev": true,
"dependencies": {
"available-typed-arrays": "^1.0.6",
"call-bind": "^1.0.5",
@@ -6708,8 +7330,7 @@
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
},
"node_modules/yallist": {
"version": "4.0.0",
diff --git a/package.json b/package.json
index b28dd74..d8e11e3 100644
--- a/package.json
+++ b/package.json
@@ -16,7 +16,7 @@
"ag-grid-react": "^31.2.1",
"autoprefixer": "^10.4.15",
"flowbite": "^1.8.1",
- "flowbite-react": "^0.7.5",
+ "flowbite-react": "^0.10.1",
"jsonwebtoken": "8.5.1",
"mongodb": "^6.1.0",
"next": "13.4.9",
@@ -27,7 +27,9 @@
"react": "18.2.0",
"react-datepicker": "^4.17.0",
"react-dom": "18.2.0",
+ "react-image-crop": "^11.0.6",
"react-timestamp": "^6.0.0",
+ "reaflow": "^5.3.1",
"recharts": "^2.10.3",
"tailwindcss": "^3.3.3",
"tw-elements": "^1.0.0",
diff --git a/public/pct-logo-dark.png b/public/pct-logo-dark.png
new file mode 100644
index 0000000..42f3ea3
Binary files /dev/null and b/public/pct-logo-dark.png differ
diff --git a/styles/TextStyles.tsx b/styles/TextStyles.tsx
index 26edadc..1fb5db2 100644
--- a/styles/TextStyles.tsx
+++ b/styles/TextStyles.tsx
@@ -1,12 +1,28 @@
-export const textStyles = {
- title: `text-4xl font-bold dark:text-white mb-6 mt-4 text-purple-800`,
- subtitle: `mb-4 text-lg font-normal text-gray-500 dark:text-gray-400`
-};
-
export const AdminTextStyles = {
title: `text-4xl font-bold dark:text-white mb-6 text-purple-800`,
- subtitle: `text-2xl font-bold dark:text-white mb-1`,
- subtext: "text-sm mt-4",
- paragraph: `text-lg font-semibold dark:text-white mb-6`,
- subparagraph: `text-sm font-normal text-gray-500 dark:text-gray-400`
+ subtitle: `text-2xl font-bold dark:text-white mb-4`,
+ paragraph: `text-lg font-semibold dark:text-white mb-6`, // Onboarding
+ subparagraph: `text-sm font-normal text-gray-500 dark:text-gray-400`, // Onboarding
+ default: `text-base dark:text-white mb-1`, // Input/question titles
+ subtext: `text-sm dark:text-white mb-1`, // Onboarding
+ content: "font-normal text-gray-700 dark:text-gray-400 whitespace-pre-line", // Multi-line formatted paragraph
+ subcontent: "text-sm font-normal text-gray-700 dark:text-gray-400 whitespace-pre-line", // Multi-line formatted paragraph
+ datepicker: `bg-gray-50 dark:bg-gray-700 border border-gray-300 dark:border-gray-600 text-gray-900 dark:text-gray-400 text-sm rounded-lg focus:ring-purple-500 focus:border-purple-500 p-2.5`,
+ card: `hover:bg-gray-100 dark:hover:bg-gray-600 dark:shadow-gray-900 dark:bg-background-dark cursor-pointer`,
+}
+
+export const ThinAdminTextStyles = {
+ default: `text-base font-extralight text-gray-700 dark:text-gray-100 mb-1`, // Input/question titles
+ subtext: `text-sm font-extralight dark:text-white mb-1`, // Onboarding
+ content: "font-normal font-extralight text-gray-700 dark:text-gray-400 whitespace-pre-line", // Multi-line formatted paragraph
+ subcontent: "text-sm font-extralight font-normal text-gray-700 dark:text-gray-400 whitespace-pre-line", // Multi-line formatted paragraph
+ // Add fields from AdminTextStyles as needed...
}
+
+export const DimmedAdminTextStyles = {
+ default: `text-base text-gray-700 dark:text-gray-400 mb-1`, // Input/question titles
+ subtext: `text-sm text-gray-700 dark:text-gray-400 mb-1`, // Onboarding
+ content: "font-normal text-gray-700 dark:text-gray-400 whitespace-pre-line", // Multi-line formatted paragraph
+ subcontent: "text-sm text-gray-700 dark:text-gray-400 whitespace-pre-line", // Multi-line formatted paragraph
+ // Add fields from AdminTextStyles as needed...
+}
\ No newline at end of file
diff --git a/tailwind.config.ts b/tailwind.config.ts
index 0d14aa2..352b33d 100644
--- a/tailwind.config.ts
+++ b/tailwind.config.ts
@@ -1,4 +1,5 @@
import type { Config } from 'tailwindcss'
+const flowbite = require("flowbite-react/tailwind");
const config: Config = {
content: [
@@ -8,7 +9,8 @@ const config: Config = {
'./components/**/*.{js,ts,jsx,tsx,mdx}',
'./app/**/*.{js,ts,jsx,tsx,mdx}',
'./node_modules/tw-elements/dist/js/**/*.{js,ts,jsx,tsx,mdx}',
- './node_modules/flowbite-react/**/*.{js,jsx,ts,tsx}'
+ './node_modules/flowbite-react/**/*.{js,jsx,ts,tsx}',
+ flowbite.content()
],
theme: {
extend: {
@@ -17,10 +19,14 @@ const config: Config = {
'gradient-conic':
'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))',
},
+ colors: {
+ 'background-light': 'var(--bg-light)',
+ 'background-dark': 'var(--bg-dark)',
+ },
},
},
plugins: [
- require('flowbite/plugin'),
+ flowbite.plugin(),
require("tw-elements/dist/plugin.cjs")
],
}
diff --git a/types/admin/account-settings/member.ts b/types/admin/account-settings/member.ts
new file mode 100644
index 0000000..66707cf
--- /dev/null
+++ b/types/admin/account-settings/member.ts
@@ -0,0 +1,18 @@
+export interface Member {
+ _id: string;
+ name: string;
+ email: string;
+ roles: string[];
+
+ // Optional fields due to some members being not onboarded yet
+ class?: string | null;
+ college?: string | null;
+ family?: string | null;
+ graduationYear?: string | null;
+ isEboard?: string | null;
+ major?: string | null;
+ minor?: string | null;
+ isNewUser?: boolean | null;
+ team?: string | null;
+ big?: string | null;
+}
diff --git a/types/admin/events.ts b/types/admin/events.ts
index 6329286..cc8bd6a 100644
--- a/types/admin/events.ts
+++ b/types/admin/events.ts
@@ -22,18 +22,52 @@ export interface UserInEvent{
}
export interface RushEvent {
- eventId: string;
+ _id: string;
name: string;
dateCreated: string;
lastModified: string;
code: string;
+ location: string;
+ date: string;
deadline: string;
+ eventCoverImage: string;
+ eventCoverImageName: string;
+ attendees: readonly Attendee[];
+ numAttendees: number;
+}
+
+interface Attendee {
+ name: string;
+ email: string;
+ checkinTime: string;
}
export interface RushCategory {
_id: string;
dateCreated: string;
name: string;
- events: RushEvent[]
+ defaultRushCategory: boolean;
+ events: readonly RushEvent[]
+}
+
+export interface Analytics {
+ categoryName: string,
+ attendees: AnalyticsAttendees,
+ events: readonly AnalyticsEvent[],
}
+interface AnalyticsAttendees {
+ [email: string]: AnalyticsAttendee;
+}
+
+interface AnalyticsAttendee {
+ name: string;
+ email: string;
+ checkinTime: string;
+ eventsAttended: readonly AnalyticsEvent[];
+}
+
+interface AnalyticsEvent {
+ eventId: string;
+ eventName: string;
+}
\ No newline at end of file
diff --git a/utils/date.ts b/utils/date.ts
index d0f4399..5fedc7b 100644
--- a/utils/date.ts
+++ b/utils/date.ts
@@ -1,16 +1,20 @@
export const formatMongoDate = (dateString: string): string => {
- const date = new Date(dateString);
+ const date = new Date(dateString);
- const year = date.getFullYear();
- const month = `0${date.getMonth() + 1}`.slice(-2);
- const day = `0${date.getDate()}`.slice(-2);
+ const year = date.getFullYear();
+ const month = `0${date.getMonth() + 1}`.slice(-2);
+ const day = `0${date.getDate()}`.slice(-2);
- let hours = date.getHours();
- const ampm = hours >= 12 ? 'PM' : 'AM';
- hours = hours % 12;
- hours = hours ? hours : 12; // the hour '0' should be '12'
+ let hours = date.getHours();
+ const ampm = hours >= 12 ? 'PM' : 'AM';
+ hours = hours % 12;
+ hours = hours ? hours : 12; // the hour '0' should be '12'
- const minutes = `0${date.getMinutes()}`.slice(-2);
+ const minutes = `0${date.getMinutes()}`.slice(-2);
- return `${year}.${month}.${day} (${hours}:${minutes} ${ampm})`;
-};
\ No newline at end of file
+ return `${year}.${month}.${day} (${hours}:${minutes} ${ampm})`;
+};
+
+export const addTwoHours = (date: Date): Date => {
+ return new Date(date.getTime() + 2 * 60 * 60 * 1000);
+}
\ No newline at end of file
diff --git a/utils/getBaseURL.ts b/utils/getBaseURL.ts
new file mode 100644
index 0000000..a79aba0
--- /dev/null
+++ b/utils/getBaseURL.ts
@@ -0,0 +1,23 @@
+// getRushBaseUrl : returns base url of rush application (depending on current environment)
+export const getRushBaseUrl = (): string => {
+ switch(process.env.NEXT_PUBLIC_API_BASE_URL) {
+ // local environment
+ case "http://127.0.0.1:8000":
+ return "http://localhost:3001/";
+
+ // staging environment
+ case "https://o74hteay05.execute-api.us-east-1.amazonaws.com/api":
+ return "https://staging--whyphi-rush.netlify.app/";
+
+ // production environment
+ case "https://api.why-phi.com":
+ return "https://rush.why-phi.com";
+ }
+
+ return "";
+}
+
+// getRushBaseUrl : returns base url of portal application (depending on current environment)
+export const getPortalBaseUrl = (): string => {
+ return window.location.origin;
+}
\ No newline at end of file
diff --git a/utils/useDebounceEffect.tsx b/utils/useDebounceEffect.tsx
new file mode 100644
index 0000000..52da933
--- /dev/null
+++ b/utils/useDebounceEffect.tsx
@@ -0,0 +1,20 @@
+import { useEffect, DependencyList } from "react"
+
+// useDebounceEffect : custom React hook that debounces the execution of a given function
+// (used for the CropImage component to ensure the completed crop is only executed every
+// `waitTime` ms)
+export function useDebounceEffect(
+ fn: () => void,
+ waitTime: number,
+ deps?: DependencyList,
+) {
+ useEffect(() => {
+ const t = setTimeout(() => {
+ fn.apply(deps)
+ }, waitTime)
+
+ return () => {
+ clearTimeout(t)
+ }
+ }, [deps])
+}