From 5fd44edeed4295dbd64ccdfd34efd2cd1b543ecb Mon Sep 17 00:00:00 2001 From: PaulaScharf Date: Wed, 2 Oct 2024 17:38:28 +0200 Subject: [PATCH 01/74] start of websocket implementation --- app/projects/[city]/trash/trashbins/[identifier]/page.tsx | 8 ++++++++ package.json | 2 ++ 2 files changed, 10 insertions(+) diff --git a/app/projects/[city]/trash/trashbins/[identifier]/page.tsx b/app/projects/[city]/trash/trashbins/[identifier]/page.tsx index f75b81f..6eaf169 100644 --- a/app/projects/[city]/trash/trashbins/[identifier]/page.tsx +++ b/app/projects/[city]/trash/trashbins/[identifier]/page.tsx @@ -12,6 +12,7 @@ import { Button } from "@/components/ui/button"; import LineChart from "@/components/LineChart"; import LoadingComponent from "@/components/LoadingComponent"; import { Trashbin } from '@/app/types'; +import { io } from 'socket.io-client'; interface HistoryDataItem { timestamp: Date; @@ -41,6 +42,13 @@ export default function TrashbinDetail({ const [fillLevelData, setFillLevelData] = useState([]); const [batteryLevelData, setBatteryLevelData] = useState([]); const [history, setHistory] = useState([]); + const socket = io(`${process.env.NEXT_PUBLIC_BACKEND_URL}`); + + socket.on('newData', (data) => { + debugger; + console.log('Received new data:', data); + // Update your frontend UI with the new data + }); useEffect(() => { const fetchData = async () => { diff --git a/package.json b/package.json index 1a1d642..2a82a89 100644 --- a/package.json +++ b/package.json @@ -49,6 +49,8 @@ "recharts": "^2.12.6", "resize-observer-polyfill": "^1.5.1", "sharp": "^0.33.4", + "socket.io": "^4.8.0", + "socket.io-client": "^4.8.0", "sonner": "^1.4.41", "tailwind-merge": "^2.3.0", "tailwindcss-animate": "^1.0.7" From 61ebe628bb017742d142f90ba0056d4b2309e7e5 Mon Sep 17 00:00:00 2001 From: PaulaScharf Date: Mon, 7 Oct 2024 09:37:35 +0200 Subject: [PATCH 02/74] redirect to login if unauthorized --- app/projects/[city]/noise/page.tsx | 6 ++--- app/projects/[city]/noise/settings/page.tsx | 6 ++--- app/projects/[city]/trash/map/page.tsx | 6 ++--- app/projects/[city]/trash/route/page.tsx | 18 +++++++-------- app/projects/[city]/trash/settings/page.tsx | 6 ++--- .../trashbins/[identifier]/edit/page.tsx | 6 ++--- .../trash/trashbins/[identifier]/page.tsx | 10 ++++----- app/projects/[city]/trash/trashbins/page.tsx | 8 +++---- app/projects/page.tsx | 4 ++-- lib/axios-api.ts | 22 +++++++++++++++++++ 10 files changed, 57 insertions(+), 35 deletions(-) create mode 100644 lib/axios-api.ts diff --git a/app/projects/[city]/noise/page.tsx b/app/projects/[city]/noise/page.tsx index c94402c..77a4266 100644 --- a/app/projects/[city]/noise/page.tsx +++ b/app/projects/[city]/noise/page.tsx @@ -1,7 +1,7 @@ "use client"; import React, { useState, useEffect } from "react"; -import axios from "axios"; +import api from '@/lib/axios-api' import PageTitle from "@/components/PageTitle"; import { CardContent } from "@/components/Card"; import NoiseChart from "@/components/NoiseChart"; @@ -25,7 +25,7 @@ export default function NoiseDashboard() { const token = localStorage.getItem("authToken"); const projectId = localStorage.getItem("projectId"); - const projectResponse = await axios.get( + const projectResponse = await api.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/project/${projectId}`, { headers: { @@ -54,7 +54,7 @@ export default function NoiseDashboard() { sensorId = "668e6b79e921750c7a2fe08d"; } - const historyResponse = await axios.get( + const historyResponse = await api.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/history/sensor/${sensorId}`, { headers: { diff --git a/app/projects/[city]/noise/settings/page.tsx b/app/projects/[city]/noise/settings/page.tsx index 9d3d5a4..89a4045 100644 --- a/app/projects/[city]/noise/settings/page.tsx +++ b/app/projects/[city]/noise/settings/page.tsx @@ -1,7 +1,7 @@ "use client"; import React, { useState, useEffect } from "react"; -import axios from "axios"; +import api from '@/lib/axios-api' import PageTitle from "@/components/PageTitle"; import LoadingComponent from "@/components/LoadingComponent"; import { Info } from "lucide-react"; @@ -20,7 +20,7 @@ export default function AppSettings() { const token = localStorage.getItem("authToken"); const projectId = localStorage.getItem("projectId"); - const projectResponse = await axios.get( + const projectResponse = await api.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/project/${projectId}`, { headers: { @@ -99,7 +99,7 @@ export default function AppSettings() { const token = localStorage.getItem("authToken"); const projectId = localStorage.getItem("projectId"); - await axios.patch( + await api.patch( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/project/${projectId}`, { activeTimeInterval: [startHour, endHour], diff --git a/app/projects/[city]/trash/map/page.tsx b/app/projects/[city]/trash/map/page.tsx index 9c42ee9..0643ff7 100644 --- a/app/projects/[city]/trash/map/page.tsx +++ b/app/projects/[city]/trash/map/page.tsx @@ -2,7 +2,7 @@ import React, { useState, useEffect } from "react"; import { useRouter } from "next/navigation"; -import axios from "axios"; +import api from '@/lib/axios-api' import { LatLngTuple } from "leaflet"; import PageTitle from "@/components/PageTitle"; import Map from "@/components/Map"; @@ -29,7 +29,7 @@ const MapPage = () => { const token = localStorage.getItem("authToken"); const projectId = localStorage.getItem("projectId"); - const trashbinResponse = await axios.get( + const trashbinResponse = await api.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trashbin?project=${projectId}`, { headers: { @@ -39,7 +39,7 @@ const MapPage = () => { ); setTrashbinData(trashbinResponse.data.trashbins); - const projectResponse = await axios.get( + const projectResponse = await api.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/project/${projectId}`, { headers: { diff --git a/app/projects/[city]/trash/route/page.tsx b/app/projects/[city]/trash/route/page.tsx index 66ee548..3768754 100644 --- a/app/projects/[city]/trash/route/page.tsx +++ b/app/projects/[city]/trash/route/page.tsx @@ -2,7 +2,7 @@ import React, { useState, useCallback, useEffect } from 'react'; import { CopyToClipboard } from 'react-copy-to-clipboard'; -import axios from 'axios'; +import api from '@/lib/axios-api' import { LatLngTuple } from 'leaflet'; import PageTitle from "@/components/PageTitle"; import Map from "@/components/Map"; @@ -19,7 +19,7 @@ import { Copy, Info } from 'lucide-react'; // Bins currently always assigned to a single collector // Treated like a boolean for now: assigned or not assigned -const COLLECTOR_ID = "668e6bc9e921750c7a2fe090"; +const COLLECTOR_ID = "66fab28bd6afdad80f1d8dca"; const headerSortButton = (column: any, displayname: string) => { return ( @@ -85,7 +85,7 @@ const RoutePlanning = () => { const token = localStorage.getItem("authToken"); const projectId = localStorage.getItem("projectId"); - const allTrashbinsResponse = await axios.get( + const allTrashbinsResponse = await api.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trashbin?project=${projectId}`, { headers: { @@ -96,7 +96,7 @@ const RoutePlanning = () => { const transformedTrashbinData: Trashbin[] = allTrashbinsResponse.data.trashbins; - const assignedTrashbinsResponse = await axios.get( + const assignedTrashbinsResponse = await api.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trash-collector/${COLLECTOR_ID}/trashbins`, { headers: { @@ -109,7 +109,7 @@ const RoutePlanning = () => { const unassignedTrashbins = transformedTrashbinData.filter((bin) => !assignedTrashbins.some((assignedBin: Trashbin) => assignedBin._id === bin._id)); setTrashbinData(unassignedTrashbins); - const projectResponse = await axios.get( + const projectResponse = await api.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/project/${projectId}`, { headers: { @@ -157,7 +157,7 @@ const RoutePlanning = () => { const url = `${OSRM_SERVER_URL}/trip/v1/driving/${coordinates.join(';')}?source=first&destination=last&roundtrip=false`; try { - const response = await axios.get(url); + const response = await api.get(url); // Only handle case where we get exactly one trip if (response.data.trips.length === 1) { @@ -227,7 +227,7 @@ const RoutePlanning = () => { const token = localStorage.getItem("authToken"); // Get the currently assigned bins - const assignedTrashbinsResponse = await axios.get( + const assignedTrashbinsResponse = await api.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trash-collector/${COLLECTOR_ID}/trashbins`, { headers: { @@ -241,7 +241,7 @@ const RoutePlanning = () => { const allAssignedBins = [...assignedTrashbins, ...selectedBins]; try { - const response = await axios.post( + const response = await api.post( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trash-collector/assign`, { trashCollector: COLLECTOR_ID, @@ -268,7 +268,7 @@ const RoutePlanning = () => { try { const token = localStorage.getItem("authToken"); - const response = await axios.post( + const response = await api.post( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trash-collector/assign`, { trashCollector: COLLECTOR_ID, diff --git a/app/projects/[city]/trash/settings/page.tsx b/app/projects/[city]/trash/settings/page.tsx index 6636abc..4eba030 100644 --- a/app/projects/[city]/trash/settings/page.tsx +++ b/app/projects/[city]/trash/settings/page.tsx @@ -1,7 +1,7 @@ "use client"; import React, { useState, useEffect } from "react"; -import axios from "axios"; +import api from '@/lib/axios-api' import PageTitle from "@/components/PageTitle"; import LoadingComponent from "@/components/LoadingComponent"; import { Info } from "lucide-react"; @@ -23,7 +23,7 @@ export default function ProjectSettings() { const token = localStorage.getItem("authToken"); const projectId = localStorage.getItem("projectId"); - const projectResponse = await axios.get( + const projectResponse = await api.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/project/${projectId}`, { headers: { @@ -176,7 +176,7 @@ export default function ProjectSettings() { const token = localStorage.getItem("authToken"); const projectId = localStorage.getItem("projectId"); - await axios.patch( + await api.patch( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/project/${projectId}`, { centerCoords: [mapCenterCoordinates[0], mapCenterCoordinates[1]], diff --git a/app/projects/[city]/trash/trashbins/[identifier]/edit/page.tsx b/app/projects/[city]/trash/trashbins/[identifier]/edit/page.tsx index af990e8..d564c64 100644 --- a/app/projects/[city]/trash/trashbins/[identifier]/edit/page.tsx +++ b/app/projects/[city]/trash/trashbins/[identifier]/edit/page.tsx @@ -2,7 +2,7 @@ import React, { useEffect, useState } from "react"; import Link from "next/link"; -import axios from "axios"; +import api from '@/lib/axios-api' import PageTitle from "@/components/PageTitle"; import { Button } from "@/components/ui/button"; import LoadingComponent from "@/components/LoadingComponent"; @@ -24,7 +24,7 @@ const EditTrashbinPage = ({ params }: { params: { identifier: string } }) => { const fetchData = async () => { try { const token = localStorage.getItem("authToken"); - const response = await axios.get( + const response = await api.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trashbin/${params.identifier}`, { headers: { @@ -100,7 +100,7 @@ const EditTrashbinPage = ({ params }: { params: { identifier: string } }) => { longitude: parseFloat(trashbin.coordinates[1]?.toString() || "0"), }; - await axios.patch( + await api.patch( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trashbin/${trashbin._id}`, payload, { diff --git a/app/projects/[city]/trash/trashbins/[identifier]/page.tsx b/app/projects/[city]/trash/trashbins/[identifier]/page.tsx index 6eaf169..0307564 100644 --- a/app/projects/[city]/trash/trashbins/[identifier]/page.tsx +++ b/app/projects/[city]/trash/trashbins/[identifier]/page.tsx @@ -2,7 +2,7 @@ import React, { useEffect, useState } from "react"; import Link from "next/link"; -import axios from "axios"; +import api from '@/lib/axios-api' import PageTitle from "@/components/PageTitle"; import { DataTable } from "@/components/DataTable"; import { ColumnDef } from "@tanstack/react-table"; @@ -56,7 +56,7 @@ export default function TrashbinDetail({ const token = localStorage.getItem("authToken"); // Fetch trashbin data - const response = await axios.get( + const response = await api.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trashbin/${params.identifier}`, { headers: { @@ -68,7 +68,7 @@ export default function TrashbinDetail({ // Fetch project settings const projectId = localStorage.getItem("projectId"); - const projectResponse = await axios.get( + const projectResponse = await api.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/project/${projectId}`, { headers: { @@ -83,7 +83,7 @@ export default function TrashbinDetail({ const sensorIds = response.data.sensors; // Fetch history data of fill level and battery level // Fetch first history data - const historyResponse0 = await axios.get( + const historyResponse0 = await api.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/history/sensor/${sensorIds[0]}`, { headers: { @@ -107,7 +107,7 @@ export default function TrashbinDetail({ } } // Fetch second history data - const historyResponse1 = await axios.get( + const historyResponse1 = await api.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/history/sensor/${sensorIds[1]}`, { headers: { diff --git a/app/projects/[city]/trash/trashbins/page.tsx b/app/projects/[city]/trash/trashbins/page.tsx index 99da908..8188c72 100644 --- a/app/projects/[city]/trash/trashbins/page.tsx +++ b/app/projects/[city]/trash/trashbins/page.tsx @@ -2,7 +2,7 @@ import React, { useCallback, useState, useEffect } from "react"; import { useRouter } from "next/navigation"; -import axios from "axios"; +import api from '@/lib/axios-api' import PageTitle from "@/components/PageTitle"; import { DataTable } from "@/components/DataTable"; import { ColumnDef } from "@tanstack/react-table"; @@ -11,7 +11,7 @@ import { Trashbin } from '@/app/types'; // Bins currently always assigned to a single collector // Treated like a boolean for now: assigned or not assigned -const COLLECTOR_ID = "668e6bc9e921750c7a2fe090"; +const COLLECTOR_ID = "66fab28bd6afdad80f1d8dca"; const headerSortButton = (column: any, displayname: string) => { return ( @@ -96,7 +96,7 @@ export default function TrashbinsOverview() { const token = localStorage.getItem("authToken"); const projectId = localStorage.getItem("projectId"); - const allTrashbinsResponse = await axios.get( + const allTrashbinsResponse = await api.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trashbin?project=${projectId}`, { headers: { @@ -107,7 +107,7 @@ export default function TrashbinsOverview() { var transformedTrashbinData: Trashbin[] = allTrashbinsResponse.data.trashbins; // Get the currently assigned bins - const assignedTrashbinsResponse = await axios.get( + const assignedTrashbinsResponse = await api.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trash-collector/${COLLECTOR_ID}/trashbins`, { headers: { diff --git a/app/projects/page.tsx b/app/projects/page.tsx index bb10402..6ce3570 100644 --- a/app/projects/page.tsx +++ b/app/projects/page.tsx @@ -1,7 +1,7 @@ "use client"; import { useEffect, useState } from "react"; -import axios from "axios"; +import api from '@/lib/axios-api' import PageTitle from "@/components/PageTitle"; import { Button } from "@/components/ui/button"; import { CardContent } from "@/components/Card"; @@ -42,7 +42,7 @@ export default function Projects() { try { const token = localStorage.getItem("authToken"); - const response = await axios.get( + const response = await api.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/project`, { headers: { diff --git a/lib/axios-api.ts b/lib/axios-api.ts new file mode 100644 index 0000000..0fc9e9c --- /dev/null +++ b/lib/axios-api.ts @@ -0,0 +1,22 @@ +import axios from 'axios'; +// import { redirect } from 'next/navigation' + +// Create an Axios instance +const api = axios.create({ + baseURL: process.env.NEXT_PUBLIC_BACKEND_URL, +}); + +// Add a response interceptor +api.interceptors.response.use( + (response) => response, // Return the response if it's successful + (error) => { + // TODO: forwarding all unauthorized requests to the login page could lead to problems in the future if different user roles have different rights + if (error.response && error.response.status === 401) { + // TODO: why cant I use the redirect from next/navigation for this? + window.location = '/login'; + } + return Promise.reject(error); + } +); + +export default api; \ No newline at end of file From 978cdea068a9225caa6cdd22e8f1376aad5049f7 Mon Sep 17 00:00:00 2001 From: Benjamin Karic Date: Mon, 7 Oct 2024 11:44:30 +0200 Subject: [PATCH 03/74] Create template.env --- template.env | 1 + 1 file changed, 1 insertion(+) create mode 100644 template.env diff --git a/template.env b/template.env new file mode 100644 index 0000000..f477f9b --- /dev/null +++ b/template.env @@ -0,0 +1 @@ +NEXT_PUBLIC_BACKEND_URL = "http://localhost:5001" From ddd608356b241cbdaaed15897073812fbf33cade Mon Sep 17 00:00:00 2001 From: PaulaScharf Date: Mon, 7 Oct 2024 16:47:22 +0200 Subject: [PATCH 04/74] websocket for trashcan charts --- .../trash/trashbins/[identifier]/page.tsx | 54 ++++++++++++++++--- 1 file changed, 47 insertions(+), 7 deletions(-) diff --git a/app/projects/[city]/trash/trashbins/[identifier]/page.tsx b/app/projects/[city]/trash/trashbins/[identifier]/page.tsx index 0307564..3efd4d6 100644 --- a/app/projects/[city]/trash/trashbins/[identifier]/page.tsx +++ b/app/projects/[city]/trash/trashbins/[identifier]/page.tsx @@ -42,13 +42,54 @@ export default function TrashbinDetail({ const [fillLevelData, setFillLevelData] = useState([]); const [batteryLevelData, setBatteryLevelData] = useState([]); const [history, setHistory] = useState([]); - const socket = io(`${process.env.NEXT_PUBLIC_BACKEND_URL}`); + const [socket, setSocket] = useState(null); - socket.on('newData', (data) => { - debugger; - console.log('Received new data:', data); - // Update your frontend UI with the new data - }); + useEffect(() => { + if (!socket) { + const newSocket = io(`${process.env.NEXT_PUBLIC_BACKEND_URL}`); + + newSocket.on('newData', (data) => { + if(data.message.fill_level) { + let adjustedFillLevel = (data.message.fill_level<1) ? data.message.fill_level*100 : data.message.fill_level; + setTrashbinData(trashbinData => { + if(trashbinData) { + return { + ...trashbinData, // Copy the previous state + fillLevel: adjustedFillLevel, // Update only the 'status' field + }; + } + return trashbinData; + }); + setFillLevelData(fillLevelData => [...fillLevelData,{'timestamp':new Date(data.message.received_at), 'measurement':adjustedFillLevel}]); + } + if(data.message.battery_level) { + let adjustedBatteryLevel = (data.message.battery_level<1) ? data.message.battery_level*100 : data.message.battery_level; + setTrashbinData(trashbinData => { + if(trashbinData) { + return { + ...trashbinData, // Copy the previous state + batteryLevel: adjustedBatteryLevel, // Update only the 'status' field + }; + } + return trashbinData; + }); + setBatteryLevelData(batteryLevelData => [...batteryLevelData,{'timestamp':new Date(data.message.received_at), 'measurement':adjustedBatteryLevel}]); + } + + console.log('Received new data:', data); + // Update your frontend UI with the new data + }); + + setSocket(newSocket); + } + + return () => { + if (socket) { + socket.close(); + } + }; + }, [socket]); + useEffect(() => { const fetchData = async () => { @@ -148,7 +189,6 @@ export default function TrashbinDetail({ const roundedSeconds = seconds + (n - (seconds % n)); return new Date(roundedSeconds * 1000); }; - const roundedFillLevelData = fillLevelData.map(item => ({ timestamp: roundToNextNSeconds(item.timestamp, n), measurement: item.measurement, From 3753adb9b9bc5cb79b53fdf3f2563573534ad687 Mon Sep 17 00:00:00 2001 From: PaulaScharf Date: Mon, 7 Oct 2024 17:12:14 +0200 Subject: [PATCH 05/74] update github link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4777046..fcae7de 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ This is a frontend dashboard application for displaying information collected by To get a local copy running, follow these steps: -1. Clone the repository: `git clone git@github.com:tinyaiot-ps/frontend.git` +1. Clone the repository: `git clone git@github.com:TinyAIoT/trashcan-frontend.git` 2. Install [NodeJS](https://nodejs.org/en/download/) 3. Install the dependencies: `npm install` 4. Obtain the `.env` variables (-> cf. documentation) From 5423aeff8df62dafdeeda81bd22c899b2c858cbd Mon Sep 17 00:00:00 2001 From: PaulaScharf Date: Wed, 9 Oct 2024 14:03:51 +0200 Subject: [PATCH 06/74] live updating of trahscans in lists and other minor fixes --- .../trash/trashbins/[identifier]/page.tsx | 16 +- app/projects/[city]/trash/trashbins/page.tsx | 46 ++++ lib/axios-api.ts | 2 +- package-lock.json | 201 +++++++++++++++++- 4 files changed, 255 insertions(+), 10 deletions(-) diff --git a/app/projects/[city]/trash/trashbins/[identifier]/page.tsx b/app/projects/[city]/trash/trashbins/[identifier]/page.tsx index 3efd4d6..8dbc910 100644 --- a/app/projects/[city]/trash/trashbins/[identifier]/page.tsx +++ b/app/projects/[city]/trash/trashbins/[identifier]/page.tsx @@ -12,7 +12,7 @@ import { Button } from "@/components/ui/button"; import LineChart from "@/components/LineChart"; import LoadingComponent from "@/components/LoadingComponent"; import { Trashbin } from '@/app/types'; -import { io } from 'socket.io-client'; +import { io, Socket } from 'socket.io-client'; interface HistoryDataItem { timestamp: Date; @@ -42,11 +42,11 @@ export default function TrashbinDetail({ const [fillLevelData, setFillLevelData] = useState([]); const [batteryLevelData, setBatteryLevelData] = useState([]); const [history, setHistory] = useState([]); - const [socket, setSocket] = useState(null); + const [socket, setSocket] = useState(null); useEffect(() => { if (!socket) { - const newSocket = io(`${process.env.NEXT_PUBLIC_BACKEND_URL}`); + const newSocket: Socket = io(`${process.env.NEXT_PUBLIC_BACKEND_URL}`); newSocket.on('newData', (data) => { if(data.message.fill_level) { @@ -132,7 +132,7 @@ export default function TrashbinDetail({ }, } ); - if (historyResponse0.data) { + if (historyResponse0.data[0]) { const measurements = historyResponse0.data.map((item: any) => ({ timestamp: new Date(item.createdAt), measurement: item.measurement, @@ -146,6 +146,9 @@ export default function TrashbinDetail({ if (measureType === "battery_level") { setBatteryLevelData(measurements); } + } else { + setFillLevelData([]); + setBatteryLevelData([]); } // Fetch second history data const historyResponse1 = await api.get( @@ -156,7 +159,7 @@ export default function TrashbinDetail({ }, } ); - if (historyResponse1.data) { + if (historyResponse1.data[0]) { const measurements = historyResponse1.data.map((item: any) => ({ timestamp: new Date(item.createdAt), measurement: item.measurement, @@ -169,6 +172,9 @@ export default function TrashbinDetail({ if (measureType === "battery_level") { setBatteryLevelData(measurements); } + } else { + setFillLevelData([]); + setBatteryLevelData([]); } } catch (error) { console.error("Error fetching data:", error); diff --git a/app/projects/[city]/trash/trashbins/page.tsx b/app/projects/[city]/trash/trashbins/page.tsx index 8188c72..5c1eaa1 100644 --- a/app/projects/[city]/trash/trashbins/page.tsx +++ b/app/projects/[city]/trash/trashbins/page.tsx @@ -8,6 +8,7 @@ import { DataTable } from "@/components/DataTable"; import { ColumnDef } from "@tanstack/react-table"; import { Button } from "@/components/ui/button"; import { Trashbin } from '@/app/types'; +import { io, Socket } from 'socket.io-client'; // Bins currently always assigned to a single collector // Treated like a boolean for now: assigned or not assigned @@ -83,6 +84,7 @@ const columns: ColumnDef[] = [ export default function TrashbinsOverview() { const [trashbinData, setTrashbinData] = useState([]); const router = useRouter(); + const [socket, setSocket] = useState(null); const handleClick = useCallback((trashbin: Trashbin) => { const city = localStorage.getItem("cityName"); @@ -90,6 +92,50 @@ export default function TrashbinsOverview() { router.push(`/projects/${city}/${type}/trashbins/${trashbin.identifier}`); }, [router]); + useEffect(() => { + if (!socket) { + const newSocket = io(`${process.env.NEXT_PUBLIC_BACKEND_URL}`); + + newSocket.on('newData', (data) => { + if(data.message.fill_level) { + let adjustedFillLevel = (data.message.fill_level<1) ? data.message.fill_level*100 : data.message.fill_level; + setTrashbinData(trashbinData => { + if(trashbinData) { + return { + ...trashbinData, // Copy the previous state + fillLevel: adjustedFillLevel, // Update only the 'status' field + }; + } + return trashbinData; + }); + } + if(data.message.battery_level) { + let adjustedBatteryLevel = (data.message.battery_level<1) ? data.message.battery_level*100 : data.message.battery_level; + setTrashbinData(trashbinData => { + if(trashbinData) { + return { + ...trashbinData, // Copy the previous state + batteryLevel: adjustedBatteryLevel, // Update only the 'status' field + }; + } + return trashbinData; + }); + } + + console.log('Received new data:', data); + // Update your frontend UI with the new data + }); + + setSocket(newSocket); + } + + return () => { + if (socket) { + socket.close(); + } + }; + }, [socket]); + useEffect(() => { const fetchData = async () => { try { diff --git a/lib/axios-api.ts b/lib/axios-api.ts index 0fc9e9c..9c65025 100644 --- a/lib/axios-api.ts +++ b/lib/axios-api.ts @@ -13,7 +13,7 @@ api.interceptors.response.use( // TODO: forwarding all unauthorized requests to the login page could lead to problems in the future if different user roles have different rights if (error.response && error.response.status === 401) { // TODO: why cant I use the redirect from next/navigation for this? - window.location = '/login'; + window.location.href = '/login'; } return Promise.reject(error); } diff --git a/package-lock.json b/package-lock.json index c51c6c7..16b51d7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -48,6 +48,8 @@ "recharts": "^2.12.6", "resize-observer-polyfill": "^1.5.1", "sharp": "^0.33.4", + "socket.io": "^4.8.0", + "socket.io-client": "^4.8.0", "sonner": "^1.4.41", "tailwind-merge": "^2.3.0", "tailwindcss-animate": "^1.0.7" @@ -1856,6 +1858,11 @@ "integrity": "sha512-hw437iINopmQuxWPSUEvqE56NCPsiU8N4AYtfHmJFckclktzK9YQJieD3XkDCDH4OjL+C7zgPUh73R/nrcHrqw==", "dev": true }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==" + }, "node_modules/@swc/counter": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", @@ -1916,6 +1923,19 @@ "url": "https://github.com/sponsors/tannerlinsley" } }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/d3": { "version": "7.4.3", "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz", @@ -2242,7 +2262,6 @@ "version": "20.12.10", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.10.tgz", "integrity": "sha512-Eem5pH9pmWBHoGAT8Dr5fdc5rYA+4NAovdM4EktRPVAAiJhmWWfQrA0cFhAbOsQdSfIHjAud6YdkbL69+zSKjw==", - "dev": true, "dependencies": { "undici-types": "~5.26.4" } @@ -2426,6 +2445,18 @@ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { "version": "8.11.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", @@ -2760,6 +2791,14 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -3035,6 +3074,14 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/copy-to-clipboard": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", @@ -3043,6 +3090,18 @@ "toggle-selection": "^1.0.6" } }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -3543,7 +3602,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -3716,6 +3774,46 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, + "node_modules/engine.io": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.1.tgz", + "integrity": "sha512-NEpDCw9hrvBW+hVEOK4T7v0jFJ++KgtPl4jKFwsZVfG1XhS0dCrSb3VMb9gPAd7VAdW52VT1EnaNiU2vM8C0og==", + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-client": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.1.tgz", + "integrity": "sha512-aYuoak7I+R83M/BBPIOs2to51BmFIpC1wZe6zZzMrT2llVsHy5cvcmdsJgP2Qz6smHu+sD9oexiSUAVd8OfBPw==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1", + "xmlhttprequest-ssl": "~2.1.1" + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/enhanced-resolve": { "version": "5.16.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz", @@ -5712,6 +5810,14 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/next": { "version": "14.2.3", "resolved": "https://registry.npmjs.org/next/-/next-14.2.3.tgz", @@ -6901,6 +7007,58 @@ "node": ">=8" } }, + "node_modules/socket.io": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.0.tgz", + "integrity": "sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA==", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.6.0", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", + "dependencies": { + "debug": "~4.3.4", + "ws": "~8.17.1" + } + }, + "node_modules/socket.io-client": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.0.tgz", + "integrity": "sha512-C0jdhD5yQahMws9alf/yvtsMGTaIDBnZ8Rb5HU56svyq0l5LIrGzIDZZD5pHQlmzxLuU91Gz+VpQMKgCTNYtkw==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.2", + "engine.io-client": "~6.6.1", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/sonner": { "version": "1.4.41", "resolved": "https://registry.npmjs.org/sonner/-/sonner-1.4.41.tgz", @@ -7444,8 +7602,7 @@ "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, "node_modules/uri-js": { "version": "4.4.1", @@ -7502,6 +7659,14 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/victory-vendor": { "version": "36.9.2", "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz", @@ -7718,6 +7883,34 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xmlhttprequest-ssl": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.1.tgz", + "integrity": "sha512-ptjR8YSJIXoA3Mbv5po7RtSYHO6mZr8s7i5VGmEk7QY2pQWyT1o0N+W1gKbOyJPUCGXGnuw0wqe8f0L6Y0ny7g==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/yaml": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.2.tgz", From c1aa86df0b526a2319057143289ab31e10dd4c71 Mon Sep 17 00:00:00 2001 From: PaulaScharf Date: Wed, 9 Oct 2024 18:11:45 +0200 Subject: [PATCH 07/74] only update specific sensor value via mqtt --- .../trash/trashbins/[identifier]/page.tsx | 6 ++-- app/projects/[city]/trash/trashbins/page.tsx | 28 ++++++++++++------- app/types.ts | 1 + 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/app/projects/[city]/trash/trashbins/[identifier]/page.tsx b/app/projects/[city]/trash/trashbins/[identifier]/page.tsx index 8dbc910..7c88f7c 100644 --- a/app/projects/[city]/trash/trashbins/[identifier]/page.tsx +++ b/app/projects/[city]/trash/trashbins/[identifier]/page.tsx @@ -52,7 +52,7 @@ export default function TrashbinDetail({ if(data.message.fill_level) { let adjustedFillLevel = (data.message.fill_level<1) ? data.message.fill_level*100 : data.message.fill_level; setTrashbinData(trashbinData => { - if(trashbinData) { + if(trashbinData && trashbinData.sensors.includes(data.message.sensor_id)) { return { ...trashbinData, // Copy the previous state fillLevel: adjustedFillLevel, // Update only the 'status' field @@ -65,7 +65,7 @@ export default function TrashbinDetail({ if(data.message.battery_level) { let adjustedBatteryLevel = (data.message.battery_level<1) ? data.message.battery_level*100 : data.message.battery_level; setTrashbinData(trashbinData => { - if(trashbinData) { + if(trashbinData && trashbinData.sensors.includes(data.message.sensor_id)) { return { ...trashbinData, // Copy the previous state batteryLevel: adjustedBatteryLevel, // Update only the 'status' field @@ -75,6 +75,7 @@ export default function TrashbinDetail({ }); setBatteryLevelData(batteryLevelData => [...batteryLevelData,{'timestamp':new Date(data.message.received_at), 'measurement':adjustedBatteryLevel}]); } + // TODO: signal_level console.log('Received new data:', data); // Update your frontend UI with the new data @@ -123,6 +124,7 @@ export default function TrashbinDetail({ // Sensor IDs of the trashbin const sensorIds = response.data.sensors; // Fetch history data of fill level and battery level + // TODO: I think this only works under the assumption that a trashcan has only two sensors, one for fill and one for battery // Fetch first history data const historyResponse0 = await api.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/history/sensor/${sensorIds[0]}`, diff --git a/app/projects/[city]/trash/trashbins/page.tsx b/app/projects/[city]/trash/trashbins/page.tsx index 5c1eaa1..eaf3f66 100644 --- a/app/projects/[city]/trash/trashbins/page.tsx +++ b/app/projects/[city]/trash/trashbins/page.tsx @@ -98,25 +98,33 @@ export default function TrashbinsOverview() { newSocket.on('newData', (data) => { if(data.message.fill_level) { - let adjustedFillLevel = (data.message.fill_level<1) ? data.message.fill_level*100 : data.message.fill_level; + let adjustedFillLevel = (data.message.fill_level<=1) ? data.message.fill_level*100 : data.message.fill_level; setTrashbinData(trashbinData => { if(trashbinData) { - return { - ...trashbinData, // Copy the previous state - fillLevel: adjustedFillLevel, // Update only the 'status' field - }; + let trashbinDataCopy = [...trashbinData]; + trashbinDataCopy = trashbinDataCopy.map(tData => { + if (tData.sensors.includes(data.message.sensor_id)) { + return { ...tData, fillLevel: adjustedFillLevel }; + } + return tData; + }); + return trashbinDataCopy; } return trashbinData; }); } if(data.message.battery_level) { - let adjustedBatteryLevel = (data.message.battery_level<1) ? data.message.battery_level*100 : data.message.battery_level; + let adjustedBatteryLevel = (data.message.battery_level<=1) ? data.message.battery_level*100 : data.message.battery_level; setTrashbinData(trashbinData => { if(trashbinData) { - return { - ...trashbinData, // Copy the previous state - batteryLevel: adjustedBatteryLevel, // Update only the 'status' field - }; + let trashbinDataCopy = [...trashbinData]; + trashbinDataCopy = trashbinDataCopy.map(tData => { + if (tData.sensors.includes(data.message.sensor_id)) { + return { ...tData, batteryLevel: adjustedBatteryLevel }; + } + return tData; + }); + return trashbinDataCopy; } return trashbinData; }); diff --git a/app/types.ts b/app/types.ts index f4dc438..29cdf63 100644 --- a/app/types.ts +++ b/app/types.ts @@ -10,6 +10,7 @@ type Trashbin = { signalStrength: number; image: string; lastEmptied: Date; + sensors: string[]; }; export type { Trashbin }; From a64741265b51ee3f3cfb8f994e92499deb377827 Mon Sep 17 00:00:00 2001 From: PaulaScharf Date: Thu, 10 Oct 2024 10:06:54 +0200 Subject: [PATCH 08/74] minor refactoring --- app/projects/[city]/trash/trashbins/page.tsx | 5 ++--- components/Map.tsx | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/app/projects/[city]/trash/trashbins/page.tsx b/app/projects/[city]/trash/trashbins/page.tsx index eaf3f66..d3983cd 100644 --- a/app/projects/[city]/trash/trashbins/page.tsx +++ b/app/projects/[city]/trash/trashbins/page.tsx @@ -103,7 +103,7 @@ export default function TrashbinsOverview() { if(trashbinData) { let trashbinDataCopy = [...trashbinData]; trashbinDataCopy = trashbinDataCopy.map(tData => { - if (tData.sensors.includes(data.message.sensor_id)) { + if (tData.sensors && tData.sensors.includes(data.message.sensor_id)) { return { ...tData, fillLevel: adjustedFillLevel }; } return tData; @@ -119,7 +119,7 @@ export default function TrashbinsOverview() { if(trashbinData) { let trashbinDataCopy = [...trashbinData]; trashbinDataCopy = trashbinDataCopy.map(tData => { - if (tData.sensors.includes(data.message.sensor_id)) { + if (tData.sensors && tData.sensors.includes(data.message.sensor_id)) { return { ...tData, batteryLevel: adjustedBatteryLevel }; } return tData; @@ -129,7 +129,6 @@ export default function TrashbinsOverview() { return trashbinData; }); } - console.log('Received new data:', data); // Update your frontend UI with the new data }); diff --git a/components/Map.tsx b/components/Map.tsx index aaabc8c..d9c3c88 100644 --- a/components/Map.tsx +++ b/components/Map.tsx @@ -53,7 +53,7 @@ function PopupContent({ trashbin, routePlanning, fillThresholds, batteryThreshol {!routePlanning && (
- {trashbin.signalStrength} + {trashbin.signalStrength}%
)} From 1baf95a52414e7c3450ebcb9718871b44b06505a Mon Sep 17 00:00:00 2001 From: PaulaScharf Date: Wed, 23 Oct 2024 16:03:48 +0200 Subject: [PATCH 09/74] update dashboard --- app/projects/[city]/trash/page.tsx | 177 +++++++++++++++++---- components/Card.tsx | 4 +- components/Heatmap/ColorLegend.tsx | 10 +- components/Heatmap/Heatmap.tsx | 7 +- components/Heatmap/HeatmapBatteryLevel.tsx | 138 ++++++++++++---- components/Heatmap/HeatmapFillLevel.tsx | 140 ++++++++++++---- 6 files changed, 368 insertions(+), 108 deletions(-) diff --git a/app/projects/[city]/trash/page.tsx b/app/projects/[city]/trash/page.tsx index d8ebb10..12dacb3 100644 --- a/app/projects/[city]/trash/page.tsx +++ b/app/projects/[city]/trash/page.tsx @@ -1,55 +1,170 @@ +"use client"; + import PageTitle from "@/components/PageTitle"; import Card, { CardContent, CardProps } from "@/components/Card"; import { HeatmapFillLevel } from "@/components/Heatmap/HeatmapFillLevel"; import { HeatmapBatteryLevel } from "@/components/Heatmap/HeatmapBatteryLevel"; +import { Trashbin } from '@/app/types'; +import React, { useCallback, useState, useEffect } from "react"; +import api from '@/lib/axios-api' + +interface HistoryDataItem { + timestamp: Date; + fillLevel: number; + batteryLevel: number; +} -// Currently using mocked data, as API endpoints are not available -const cardData: CardProps[] = [ - { - label: "Total number", - amount: "42", - discription: "+1 since last day", - }, - { - label: "Nearly full", - amount: "18", - discription: "+2 since last hour", - }, - { - label: "Low battery", - amount: "5", - discription: "Same as last week", - }, - { - label: "Broken sensors", - amount: "2", - discription: "-1 since last week", - }, -]; +// Bins currently always assigned to a single collector +// Treated like a boolean for now: assigned or not assigned +const COLLECTOR_ID = "66fab28bd6afdad80f1d8dca"; export default function Home() { + const [trashbinData, setTrashbinData] = useState([]); + const [history, setHistory] = useState([]); + const [totalCardData, setTotalCardData] = useState( + { + label: "Total number", + amount: "0", + description: "", + }); + const [nearlyFullCardData, setNearlyFullCardData] = useState( + { + label: "Nearly full", + amount: "0", + description: "", + }); + const [lowBatteryCardData, setLowBatteryCardData] = useState( + { + label: "Low battery", + amount: "0", + description: "", + }); + const [brokenSensorsCardData, setBrokenSensorsCardData] = useState( + { + label: "Broken Sensors", + amount: "0", + description: "", + }); + + useEffect(() => { + const fetchData = async () => { + try { + const token = localStorage.getItem("authToken"); + const projectId = localStorage.getItem("projectId"); + + const allTrashbinsResponse = await api.get( + `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trashbin?project=${projectId}`, + { + headers: { + Authorization: `Bearer ${token?.replace(/"/g, "")}`, + }, + } + ); + var transformedTrashbinData: Trashbin[] = allTrashbinsResponse.data.trashbins; + + // Get the currently assigned bins + const assignedTrashbinsResponse = await api.get( + `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trash-collector/${COLLECTOR_ID}/trashbins`, + { + headers: { + Authorization: `Bearer ${token?.replace(/"/g, "")}`, + }, + } + ); + const assignedTrashbins = assignedTrashbinsResponse.data.assignedTrashbins.map((item: Trashbin) => item._id); + + // Set the assigned property for each trashbin to true, if its id is in the assignedTrashbins array + transformedTrashbinData = transformedTrashbinData.map((item: Trashbin) => { + return { + ...item, + assigned: assignedTrashbins.includes(item._id), + }; + }); + setTrashbinData(transformedTrashbinData); + setTotalCardData(totalCardData => { + return { + ...totalCardData, + amount: transformedTrashbinData.length, + }; + }) + const projectResponse = await api.get( + `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/project/${projectId}`, + { + headers: { + Authorization: `Bearer ${token?.replace(/"/g, "")}`, + }, + } + ); + setNearlyFullCardData(nearlyFullCardData => { + const count = transformedTrashbinData.reduce((acc, item) => item.fillLevel > projectResponse.data.project.preferences.fillThresholds[1] ? acc + 1 : acc, 0); + return { + ...nearlyFullCardData, + amount: count, + }; + }) + setLowBatteryCardData(lowBatteryCardData => { + const count = transformedTrashbinData.reduce((acc, item) => item.batteryLevel < projectResponse.data.project.preferences.batteryThresholds[1] ? acc + 1 : acc, 0); + return { + ...lowBatteryCardData, + amount: count, + }; + }) + setBrokenSensorsCardData(brokenSensorsCardData => { + const oneWeekAgo = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000); + const count = transformedTrashbinData.filter(item => new Date(item.updatedAt) < oneWeekAgo).length; + return { + ...brokenSensorsCardData, + amount: count, + }; + }) + } catch (error) { + console.error("Error fetching data:", error); + } + }; + fetchData(); + }, []); + return (

Distribution of fill levels of all bins

- +

Distribution of battery levels of all bins

- +
- {cardData.map((d, i) => ( + + + + - ))}
); diff --git a/components/Card.tsx b/components/Card.tsx index d94d421..450694f 100644 --- a/components/Card.tsx +++ b/components/Card.tsx @@ -7,7 +7,7 @@ import { cn } from "@/lib/utils"; export type CardProps = { label: string; amount: string; - discription: string; + description: string; }; export default function Card(props: CardProps) { @@ -18,7 +18,7 @@ export default function Card(props: CardProps) {

{props.amount}

-

{props.discription}

+

{props.description}

); diff --git a/components/Heatmap/ColorLegend.tsx b/components/Heatmap/ColorLegend.tsx index 24bf487..f480293 100644 --- a/components/Heatmap/ColorLegend.tsx +++ b/components/Heatmap/ColorLegend.tsx @@ -5,6 +5,7 @@ type ColorLegendProps = { height: number; width: number; colorScale: d3.ScaleLinear; + thresholds: number[] }; const COLOR_LEGEND_MARGIN = { top: 0, right: 0, bottom: 40, left: 0 }; @@ -13,6 +14,7 @@ export const ColorLegend = ({ height, colorScale, width, + thresholds }: ColorLegendProps) => { const canvasRef = useRef(null); @@ -22,10 +24,10 @@ export const ColorLegend = ({ height - COLOR_LEGEND_MARGIN.top - COLOR_LEGEND_MARGIN.bottom; const domain = colorScale.domain(); - const max = domain[domain.length - 1]; - const xScale = d3.scaleLinear().range([0, boundsWidth]).domain([0, 10]); + const max = domain[domain.length-1]; + const xScale = d3.scaleLinear().range([0, boundsWidth]).domain([0, thresholds[5]]); - const allTicks = xScale.ticks(4).map((tick, index) => { + const allTicks = xScale.ticks(thresholds.filter((value, index, array) => array.indexOf(value) === index).length-1).map((tick, index) => { return ( - {tick === 10 ? "10+" : tick} + {tick} ); diff --git a/components/Heatmap/Heatmap.tsx b/components/Heatmap/Heatmap.tsx index f8a9ef7..267434b 100644 --- a/components/Heatmap/Heatmap.tsx +++ b/components/Heatmap/Heatmap.tsx @@ -65,8 +65,10 @@ export const Heatmap = ({ data }: HeatmapProps) => { const [hoveredCell, setHoveredCell] = useState(null); const scrollableDivRef = useRef(null); + const maxAmount = Math.max(...data.map(obj => obj.amount)); + const thresholds = [0, Math.ceil(maxAmount/5), Math.ceil(maxAmount*2/5), Math.ceil(maxAmount*3/5), Math.ceil(maxAmount*4/5), Math.ceil(maxAmount)]; const colorScale = d3.scaleLinear() - .domain(THRESHOLDS) + .domain(thresholds) .range(COLORS); const allYGroups = Array.from(new Set(data.map(d => d.percentage))) @@ -86,7 +88,7 @@ export const Heatmap = ({ data }: HeatmapProps) => {
{ height={COLOR_LEGEND_HEIGHT} width={250} colorScale={colorScale} + thresholds={thresholds} />
diff --git a/components/Heatmap/HeatmapBatteryLevel.tsx b/components/Heatmap/HeatmapBatteryLevel.tsx index 8d16014..fb3d863 100644 --- a/components/Heatmap/HeatmapBatteryLevel.tsx +++ b/components/Heatmap/HeatmapBatteryLevel.tsx @@ -1,4 +1,7 @@ +import { Trashbin } from "@/app/types"; import { Heatmap } from "./Heatmap"; +import { useEffect, useState } from "react"; +import api from "@/lib/axios-api"; type Entry = { time: number; // Unix timestamp @@ -6,41 +9,108 @@ type Entry = { amount: number; }; -function generateMockData(startTimestamp: number, endTimestamp: number): Entry[] { - const mockData: Entry[] = []; - const millisecondsPerDay = 24 * 60 * 60 * 1000; - - function skewedRandom() { - return Math.pow(Math.random(), 3); // Cubing a random number skews the distribution towards higher values - } +interface Measurement { + timestamp: Date; + measurement: number; + binName: string; +} - for (let time = startTimestamp; time <= endTimestamp; time += millisecondsPerDay) { - const percentages = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]; - let remainingAmount = 20; - for (let i = 0; i < percentages.length; i++) { - const percentage = percentages[i]; - let amount = 0; +export const HeatmapBatteryLevel: React.FC<{ trashbins: Trashbin[] }> = ({trashbins}) => { + const [realData, setRealData] = useState([]); + useEffect(() => { + const fetchData = async () => { + try { + const token = localStorage.getItem("authToken"); + let newMeasurements: Measurement[] = []; + if(trashbins.length>0){ + const historyPromises = trashbins.flatMap(bin => + bin.sensors.map(sensor => ({ + binIdentifier: bin.identifier, // or whatever property holds the name + promise: api.get( + `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/history/sensor/${sensor}`, + { + headers: { + Authorization: `Bearer ${token?.replace(/"/g, "")}`, + }, + } + ) + })) + ); + + const history = await Promise.all(historyPromises.map(async item => ({ + binIdentifier: item.binIdentifier, + data: await item.promise + }))); - // Distribute the remaining amount over the fill levels with a skewed random value - if (i === percentages.length - 1) { - amount = remainingAmount; - } else { - amount = Math.min(Math.floor(skewedRandom() * remainingAmount), remainingAmount); - remainingAmount -= amount; + // Transform into your custom objects + newMeasurements = history.flatMap(sensorHistories => + sensorHistories.data.data.map(sensorHistory => ({ + binName: sensorHistories.binIdentifier, + timestamp: sensorHistory.createdAt, + measurement: sensorHistory.measurement + })) + ); + + } + + // Generate Heatmap Data + const dates = newMeasurements.map(r => new Date(r.timestamp).setHours(23,59,59,0)); + const startDate = new Date(Math.min(...dates)); + const endDate = new Date(Math.max(...dates)); + + // Create array of all days between start and end + const dailySummaries: Entry[] = []; + const currentDate = new Date(startDate); + + while (currentDate <= endDate) { + // Get all readings before this day for each unique sensor + const relevantDate = currentDate.getTime(); + const sensorLatestReadings = new Map(); + + newMeasurements + .filter(reading => new Date(reading.timestamp).getTime() <= relevantDate) + .forEach(reading => { + // Keep only the latest reading for each sensor + sensorLatestReadings.set(reading.binName, reading.measurement); + }); + + // Count sensors in each fill range + const fills = Array.from(sensorLatestReadings.values()); + + dailySummaries.push({ + time: currentDate.getTime(), + percentage: 25, + amount: fills.filter(fill => fill >= 0 && fill < 25).length + }); + dailySummaries.push({ + time: currentDate.getTime(), + percentage: 50, + amount: fills.filter(fill => fill >= 25 && fill < 50).length + }); + dailySummaries.push({ + time: currentDate.getTime(), + percentage: 75, + amount: fills.filter(fill => fill >= 50 && fill < 75).length + }); + dailySummaries.push({ + time: currentDate.getTime(), + percentage: 100, + amount: fills.filter(fill => fill >= 75 && fill <= 100).length + }); + + // Move to next day + currentDate.setDate(currentDate.getDate() + 1); + } + setRealData(realData => [ + ...realData, + ...dailySummaries + ]) + } catch (error) { + console.error("Error fetching data:", error); } - - mockData.push({ time, percentage, amount }); - } - } - - return mockData; -} - -const startTimestamp = new Date('2024-01-01').getTime(); -const endTimestamp = new Date('2024-07-01').getTime(); -const data = generateMockData(startTimestamp, endTimestamp); - -export const HeatmapBatteryLevel = () => ( - -); + }; + fetchData(); + }, [trashbins]); + return +}; diff --git a/components/Heatmap/HeatmapFillLevel.tsx b/components/Heatmap/HeatmapFillLevel.tsx index 9e03439..a729c4e 100644 --- a/components/Heatmap/HeatmapFillLevel.tsx +++ b/components/Heatmap/HeatmapFillLevel.tsx @@ -1,4 +1,7 @@ +import { Trashbin } from "@/app/types"; import { Heatmap } from "./Heatmap"; +import React, { useState, useEffect } from "react"; +import api from '@/lib/axios-api' type Entry = { time: number; // Unix timestamp @@ -6,41 +9,108 @@ type Entry = { amount: number; }; -function generateMockData(startTimestamp: number, endTimestamp: number): Entry[] { - const mockData: Entry[] = []; - const millisecondsPerDay = 24 * 60 * 60 * 1000; - - function skewedRandom() { - return Math.pow(Math.random(), 3); // Cubing a random number skews the distribution towards higher values - } - - for (let time = startTimestamp; time <= endTimestamp; time += millisecondsPerDay) { - const percentages = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]; - let remainingAmount = 20; - - for (let i = 0; i < percentages.length; i++) { - const percentage = percentages[i]; - let amount = 0; - - // Distribute the remaining amount over the fill levels with a skewed random value - if (i === percentages.length - 1) { - amount = remainingAmount; - } else { - amount = Math.min(Math.floor(skewedRandom() * remainingAmount), remainingAmount); - remainingAmount -= amount; - } - - mockData.push({ time, percentage, amount }); - } - } - - return mockData; +interface Measurement { + timestamp: Date; + measurement: number; + binName: string; } -const startTimestamp = new Date('2023-01-01').getTime(); -const endTimestamp = new Date('2024-07-01').getTime(); -const data = generateMockData(startTimestamp, endTimestamp); +export const HeatmapFillLevel: React.FC<{ trashbins: Trashbin[] }> = ({trashbins}) => { + const [measurements, setMeasurements] = useState([]); + const [realData, setRealData] = useState([]); + useEffect(() => { + const fetchData = async () => { + try { + const token = localStorage.getItem("authToken"); + let newMeasurements: Measurement[] = []; + if(trashbins.length>0){ + const historyPromises = trashbins.flatMap(bin => + bin.sensors.map(sensor => ({ + binIdentifier: bin.identifier, // or whatever property holds the name + promise: api.get( + `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/history/sensor/${sensor}`, + { + headers: { + Authorization: `Bearer ${token?.replace(/"/g, "")}`, + }, + } + ) + })) + ); + + const history = await Promise.all(historyPromises.map(async item => ({ + binIdentifier: item.binIdentifier, + data: await item.promise + }))); -export const HeatmapFillLevel = () => ( - -); + // Transform into your custom objects + newMeasurements = history.flatMap(sensorHistories => + sensorHistories.data.data.map(sensorHistory => ({ + binName: sensorHistories.binIdentifier, + timestamp: sensorHistory.createdAt, + measurement: sensorHistory.measurement + })) + ); + + } + + // Generate Heatmap Data + const dates = newMeasurements.map(r => new Date(r.timestamp).setHours(23,59,59,0)); + const startDate = new Date(Math.min(...dates)); + const endDate = new Date(Math.max(...dates)); + + // Create array of all days between start and end + const dailySummaries: Entry[] = []; + const currentDate = new Date(startDate); + + while (currentDate <= endDate) { + // Get all readings before this day for each unique sensor + const relevantDate = currentDate.getTime(); + const sensorLatestReadings = new Map(); + + newMeasurements + .filter(reading => new Date(reading.timestamp).getTime() <= relevantDate) + .forEach(reading => { + // Keep only the latest reading for each sensor + sensorLatestReadings.set(reading.binName, reading.measurement); + }); + + // Count sensors in each fill range + const fills = Array.from(sensorLatestReadings.values()); + + dailySummaries.push({ + time: currentDate.getTime(), + percentage: 25, + amount: fills.filter(fill => fill >= 0 && fill < 25).length + }); + dailySummaries.push({ + time: currentDate.getTime(), + percentage: 50, + amount: fills.filter(fill => fill >= 25 && fill < 50).length + }); + dailySummaries.push({ + time: currentDate.getTime(), + percentage: 75, + amount: fills.filter(fill => fill >= 50 && fill < 75).length + }); + dailySummaries.push({ + time: currentDate.getTime(), + percentage: 100, + amount: fills.filter(fill => fill >= 75 && fill <= 100).length + }); + + // Move to next day + currentDate.setDate(currentDate.getDate() + 1); + } + setRealData(realData => [ + ...realData, + ...dailySummaries + ]) + } catch (error) { + console.error("Error fetching data:", error); + } + }; + fetchData(); + }, [trashbins]); + return (); +}; From 6a8aefd47e6046bd9498b19c69e2a39f6015a21e Mon Sep 17 00:00:00 2001 From: PaulaScharf Date: Thu, 24 Oct 2024 11:12:47 +0200 Subject: [PATCH 10/74] fix dashboard heatmap --- components/Heatmap/Heatmap.tsx | 2 +- components/Heatmap/HeatmapBatteryLevel.tsx | 106 ++++++++++---------- components/Heatmap/HeatmapFillLevel.tsx | 108 +++++++++++---------- components/Heatmap/Tooltip.tsx | 2 +- 4 files changed, 112 insertions(+), 106 deletions(-) diff --git a/components/Heatmap/Heatmap.tsx b/components/Heatmap/Heatmap.tsx index 267434b..9fe0dfb 100644 --- a/components/Heatmap/Heatmap.tsx +++ b/components/Heatmap/Heatmap.tsx @@ -36,7 +36,7 @@ const YAxis = ({ yGroups, height }: { yGroups: string[], height: number }) => { const yLabels = yGroups.map((name, i) => { const yPos = yScale(name); // Calculate yPos using yScale with the current group name if (yPos === undefined) return null; // Guard against undefined yPos - const displayText = `${Number(name)-10}-${name}%`; + const displayText = `${Number(name)-25}-${name}%`; return ( = ({trashb sensorHistories.data.data.map(sensorHistory => ({ binName: sensorHistories.binIdentifier, timestamp: sensorHistory.createdAt, - measurement: sensorHistory.measurement + measurement: sensorHistory.measurement, + type: sensorHistory.measureType })) - ); + ).filter(reading => reading.type == "battery_level");; } - // Generate Heatmap Data - const dates = newMeasurements.map(r => new Date(r.timestamp).setHours(23,59,59,0)); - const startDate = new Date(Math.min(...dates)); - const endDate = new Date(Math.max(...dates)); - - // Create array of all days between start and end - const dailySummaries: Entry[] = []; - const currentDate = new Date(startDate); - - while (currentDate <= endDate) { - // Get all readings before this day for each unique sensor - const relevantDate = currentDate.getTime(); - const sensorLatestReadings = new Map(); - - newMeasurements - .filter(reading => new Date(reading.timestamp).getTime() <= relevantDate) - .forEach(reading => { - // Keep only the latest reading for each sensor - sensorLatestReadings.set(reading.binName, reading.measurement); - }); + if(newMeasurements.length>0) { + // Generate Heatmap Data + const dates = newMeasurements.map(r => new Date(r.timestamp).setHours(23,59,59,0)); + const startDate = new Date(Math.min(...dates)); + const endDate = new Date(Math.max(...dates)); - // Count sensors in each fill range - const fills = Array.from(sensorLatestReadings.values()); + // Create array of all days between start and end + const dailySummaries: Entry[] = []; + const currentDate = new Date(startDate); - dailySummaries.push({ - time: currentDate.getTime(), - percentage: 25, - amount: fills.filter(fill => fill >= 0 && fill < 25).length - }); - dailySummaries.push({ - time: currentDate.getTime(), - percentage: 50, - amount: fills.filter(fill => fill >= 25 && fill < 50).length - }); - dailySummaries.push({ - time: currentDate.getTime(), - percentage: 75, - amount: fills.filter(fill => fill >= 50 && fill < 75).length - }); - dailySummaries.push({ - time: currentDate.getTime(), - percentage: 100, - amount: fills.filter(fill => fill >= 75 && fill <= 100).length - }); - - // Move to next day - currentDate.setDate(currentDate.getDate() + 1); + while (currentDate <= endDate) { + // Get all readings before this day for each unique sensor + const relevantDate = currentDate.getTime(); + const sensorLatestReadings = new Map(); + + newMeasurements + .filter(reading => new Date(reading.timestamp).getTime() <= relevantDate) + .forEach(reading => { + // Keep only the latest reading for each sensor + sensorLatestReadings.set(reading.binName, reading.measurement); + }); + + // Count sensors in each fill range + const fills = Array.from(sensorLatestReadings.values()); + + dailySummaries.push({ + time: currentDate.getTime(), + percentage: 25, + amount: fills.filter(fill => fill >= 0 && fill < 25).length + }); + dailySummaries.push({ + time: currentDate.getTime(), + percentage: 50, + amount: fills.filter(fill => fill >= 25 && fill < 50).length + }); + dailySummaries.push({ + time: currentDate.getTime(), + percentage: 75, + amount: fills.filter(fill => fill >= 50 && fill < 75).length + }); + dailySummaries.push({ + time: currentDate.getTime(), + percentage: 100, + amount: fills.filter(fill => fill >= 75 && fill <= 100).length + }); + + // Move to next day + currentDate.setDate(currentDate.getDate() + 1); + } + setRealData(realData => [ + ...realData, + ...dailySummaries + ]) } - setRealData(realData => [ - ...realData, - ...dailySummaries - ]) } catch (error) { console.error("Error fetching data:", error); } diff --git a/components/Heatmap/HeatmapFillLevel.tsx b/components/Heatmap/HeatmapFillLevel.tsx index a729c4e..e771e23 100644 --- a/components/Heatmap/HeatmapFillLevel.tsx +++ b/components/Heatmap/HeatmapFillLevel.tsx @@ -13,6 +13,7 @@ interface Measurement { timestamp: Date; measurement: number; binName: string; + type: string; } export const HeatmapFillLevel: React.FC<{ trashbins: Trashbin[] }> = ({trashbins}) => { @@ -48,64 +49,65 @@ export const HeatmapFillLevel: React.FC<{ trashbins: Trashbin[] }> = ({trashbins sensorHistories.data.data.map(sensorHistory => ({ binName: sensorHistories.binIdentifier, timestamp: sensorHistory.createdAt, - measurement: sensorHistory.measurement + measurement: sensorHistory.measurement, + type: sensorHistory.measureType })) - ); - + ).filter(reading => reading.type == "fill_level"); } - - // Generate Heatmap Data - const dates = newMeasurements.map(r => new Date(r.timestamp).setHours(23,59,59,0)); - const startDate = new Date(Math.min(...dates)); - const endDate = new Date(Math.max(...dates)); - - // Create array of all days between start and end - const dailySummaries: Entry[] = []; - const currentDate = new Date(startDate); - - while (currentDate <= endDate) { - // Get all readings before this day for each unique sensor - const relevantDate = currentDate.getTime(); - const sensorLatestReadings = new Map(); - - newMeasurements - .filter(reading => new Date(reading.timestamp).getTime() <= relevantDate) - .forEach(reading => { - // Keep only the latest reading for each sensor - sensorLatestReadings.set(reading.binName, reading.measurement); - }); - - // Count sensors in each fill range - const fills = Array.from(sensorLatestReadings.values()); + + if(newMeasurements.length>0) { + // Generate Heatmap Data + const dates = newMeasurements.map(r => new Date(r.timestamp).setHours(23,59,59,0)); + const startDate = new Date(Math.min(...dates)); + const endDate = new Date(Math.max(...dates)); - dailySummaries.push({ - time: currentDate.getTime(), - percentage: 25, - amount: fills.filter(fill => fill >= 0 && fill < 25).length - }); - dailySummaries.push({ - time: currentDate.getTime(), - percentage: 50, - amount: fills.filter(fill => fill >= 25 && fill < 50).length - }); - dailySummaries.push({ - time: currentDate.getTime(), - percentage: 75, - amount: fills.filter(fill => fill >= 50 && fill < 75).length - }); - dailySummaries.push({ - time: currentDate.getTime(), - percentage: 100, - amount: fills.filter(fill => fill >= 75 && fill <= 100).length - }); + // Create array of all days between start and end + const dailySummaries: Entry[] = []; + const currentDate = new Date(startDate); - // Move to next day - currentDate.setDate(currentDate.getDate() + 1); + while (currentDate <= endDate) { + // Get all readings before this day for each unique sensor + const relevantDate = currentDate.getTime(); + const sensorLatestReadings = new Map(); + + newMeasurements + .filter(reading => new Date(reading.timestamp).getTime() <= relevantDate) + .forEach(reading => { + // Keep only the latest reading for each sensor + sensorLatestReadings.set(reading.binName, reading.measurement); + }); + + // Count sensors in each fill range + const fills = Array.from(sensorLatestReadings.values()); + dailySummaries.push({ + time: currentDate.getTime(), + percentage: 25, + amount: fills.filter(fill => fill >= 0 && fill < 25).length + }); + dailySummaries.push({ + time: currentDate.getTime(), + percentage: 50, + amount: fills.filter(fill => fill >= 25 && fill < 50).length + }); + dailySummaries.push({ + time: currentDate.getTime(), + percentage: 75, + amount: fills.filter(fill => fill >= 50 && fill < 75).length + }); + dailySummaries.push({ + time: currentDate.getTime(), + percentage: 100, + amount: fills.filter(fill => fill >= 75 && fill <= 100).length + }); + + // Move to next day + currentDate.setDate(currentDate.getDate() + 1); + } + setRealData(realData => [ + ...realData, + ...dailySummaries + ]); } - setRealData(realData => [ - ...realData, - ...dailySummaries - ]) } catch (error) { console.error("Error fetching data:", error); } diff --git a/components/Heatmap/Tooltip.tsx b/components/Heatmap/Tooltip.tsx index f5c2ef6..d11718c 100644 --- a/components/Heatmap/Tooltip.tsx +++ b/components/Heatmap/Tooltip.tsx @@ -23,7 +23,7 @@ export const Tooltip = ({ interactionData, width, height }: TooltipProps) => { > Date: {d3.timeFormat('%Y-%m-%d')(new Date(interactionData.xLabel))}
- {interactionData.value} bins ({Number(interactionData.yLabel) - 10}-{interactionData.yLabel}%) + {interactionData.value} bins ({Number(interactionData.yLabel) - 25}-{interactionData.yLabel}%) ); From 3ff9de39a2874f1c2685a629a90837623ae81139 Mon Sep 17 00:00:00 2001 From: PaulaScharf Date: Thu, 24 Oct 2024 14:59:40 +0200 Subject: [PATCH 11/74] adjust bandwidth of heatmap --- components/Heatmap/Heatmap.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/Heatmap/Heatmap.tsx b/components/Heatmap/Heatmap.tsx index 9fe0dfb..b600420 100644 --- a/components/Heatmap/Heatmap.tsx +++ b/components/Heatmap/Heatmap.tsx @@ -88,7 +88,7 @@ export const Heatmap = ({ data }: HeatmapProps) => {
Date: Thu, 24 Oct 2024 15:17:23 +0200 Subject: [PATCH 12/74] adjust bandwidth of heatmap --- components/Heatmap/Heatmap.tsx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/components/Heatmap/Heatmap.tsx b/components/Heatmap/Heatmap.tsx index b600420..399c456 100644 --- a/components/Heatmap/Heatmap.tsx +++ b/components/Heatmap/Heatmap.tsx @@ -63,6 +63,7 @@ const YAxis = ({ yGroups, height }: { yGroups: string[], height: number }) => { export const Heatmap = ({ data }: HeatmapProps) => { const [hoveredCell, setHoveredCell] = useState(null); + const [scaleBandWidth, setScaleBandWidth] = useState(0); const scrollableDivRef = useRef(null); const maxAmount = Math.max(...data.map(obj => obj.amount)); @@ -80,7 +81,11 @@ export const Heatmap = ({ data }: HeatmapProps) => { if (scrollableDivRef.current) { scrollableDivRef.current.scrollLeft = scrollableDivRef.current.scrollWidth + 1000; } - }, []); + const dates = data.map(r => new Date(r.time).setHours(0,0,0,0)); + const startDate = new Date(Math.min(...dates)); + const endDate = new Date(Math.max(...dates)); + setScaleBandWidth((endDate.getTime()-startDate.getTime())/86400000); + }, [data]); return (
@@ -88,7 +93,7 @@ export const Heatmap = ({ data }: HeatmapProps) => {
Date: Mon, 28 Oct 2024 11:51:21 +0100 Subject: [PATCH 13/74] fix fill and battery updates from web socket --- app/projects/[city]/trash/trashbins/[identifier]/page.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/projects/[city]/trash/trashbins/[identifier]/page.tsx b/app/projects/[city]/trash/trashbins/[identifier]/page.tsx index 7c88f7c..3551fcd 100644 --- a/app/projects/[city]/trash/trashbins/[identifier]/page.tsx +++ b/app/projects/[city]/trash/trashbins/[identifier]/page.tsx @@ -50,7 +50,7 @@ export default function TrashbinDetail({ newSocket.on('newData', (data) => { if(data.message.fill_level) { - let adjustedFillLevel = (data.message.fill_level<1) ? data.message.fill_level*100 : data.message.fill_level; + let adjustedFillLevel = (data.message.fill_level<=1) ? data.message.fill_level*100 : data.message.fill_level; setTrashbinData(trashbinData => { if(trashbinData && trashbinData.sensors.includes(data.message.sensor_id)) { return { @@ -63,7 +63,7 @@ export default function TrashbinDetail({ setFillLevelData(fillLevelData => [...fillLevelData,{'timestamp':new Date(data.message.received_at), 'measurement':adjustedFillLevel}]); } if(data.message.battery_level) { - let adjustedBatteryLevel = (data.message.battery_level<1) ? data.message.battery_level*100 : data.message.battery_level; + let adjustedBatteryLevel = (data.message.battery_level<=1) ? data.message.battery_level*100 : data.message.battery_level; setTrashbinData(trashbinData => { if(trashbinData && trashbinData.sensors.includes(data.message.sensor_id)) { return { From 7d2790042170fb54693300fe386d9595d0ec34c0 Mon Sep 17 00:00:00 2001 From: PaulaScharf Date: Wed, 13 Nov 2024 11:41:58 +0100 Subject: [PATCH 14/74] fix ts errors --- app/projects/[city]/trash/page.tsx | 14 +++++----- .../trash/trashbins/[identifier]/page.tsx | 26 +++++++++++++++++++ app/types.ts | 1 + components/Heatmap/HeatmapBatteryLevel.tsx | 5 ++-- components/Heatmap/HeatmapFillLevel.tsx | 2 +- 5 files changed, 37 insertions(+), 11 deletions(-) diff --git a/app/projects/[city]/trash/page.tsx b/app/projects/[city]/trash/page.tsx index 12dacb3..1e297de 100644 --- a/app/projects/[city]/trash/page.tsx +++ b/app/projects/[city]/trash/page.tsx @@ -84,7 +84,7 @@ export default function Home() { setTotalCardData(totalCardData => { return { ...totalCardData, - amount: transformedTrashbinData.length, + amount: transformedTrashbinData.length.toString(), }; }) const projectResponse = await api.get( @@ -99,14 +99,14 @@ export default function Home() { const count = transformedTrashbinData.reduce((acc, item) => item.fillLevel > projectResponse.data.project.preferences.fillThresholds[1] ? acc + 1 : acc, 0); return { ...nearlyFullCardData, - amount: count, + amount: count.toString(), }; }) setLowBatteryCardData(lowBatteryCardData => { const count = transformedTrashbinData.reduce((acc, item) => item.batteryLevel < projectResponse.data.project.preferences.batteryThresholds[1] ? acc + 1 : acc, 0); return { ...lowBatteryCardData, - amount: count, + amount: count.toString(), }; }) setBrokenSensorsCardData(brokenSensorsCardData => { @@ -114,7 +114,7 @@ export default function Home() { const count = transformedTrashbinData.filter(item => new Date(item.updatedAt) < oneWeekAgo).length; return { ...brokenSensorsCardData, - amount: count, + amount: count.toString(), }; }) } catch (error) { @@ -127,17 +127,17 @@ export default function Home() { return (
-
+

Distribution of fill levels of all bins

- + {/*

Distribution of battery levels of all bins

-
+
*/}
diff --git a/app/projects/[city]/trash/trashbins/[identifier]/page.tsx b/app/projects/[city]/trash/trashbins/[identifier]/page.tsx index 3551fcd..18c1187 100644 --- a/app/projects/[city]/trash/trashbins/[identifier]/page.tsx +++ b/app/projects/[city]/trash/trashbins/[identifier]/page.tsx @@ -168,6 +168,32 @@ export default function TrashbinDetail({ })); const measureType = historyResponse1.data[0].measureType; + if (measureType === "fill_level") { + setFillLevelData(measurements); + } + if (measureType === "battery_level") { + setBatteryLevelData(measurements); + } + } else { + setFillLevelData([]); + setBatteryLevelData([]); + } + // Fetch third history data + const historyResponse2 = await api.get( + `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/history/sensor/${sensorIds[2]}`, + { + headers: { + Authorization: `Bearer ${token?.replace(/"/g, "")}`, + }, + } + ); + if (historyResponse2.data[0]) { + const measurements = historyResponse2.data.map((item: any) => ({ + timestamp: new Date(item.createdAt), + measurement: item.measurement, + })); + const measureType = historyResponse2.data[0].measureType; + if (measureType === "fill_level") { setFillLevelData(measurements); } diff --git a/app/types.ts b/app/types.ts index 29cdf63..cbe5b19 100644 --- a/app/types.ts +++ b/app/types.ts @@ -1,4 +1,5 @@ type Trashbin = { + updatedAt: string | number | Date; _id: string; identifier: string; coordinates: [number, number]; diff --git a/components/Heatmap/HeatmapBatteryLevel.tsx b/components/Heatmap/HeatmapBatteryLevel.tsx index 3461319..21dd741 100644 --- a/components/Heatmap/HeatmapBatteryLevel.tsx +++ b/components/Heatmap/HeatmapBatteryLevel.tsx @@ -27,7 +27,7 @@ export const HeatmapBatteryLevel: React.FC<{ trashbins: Trashbin[] }> = ({trashb if(trashbins.length>0){ const historyPromises = trashbins.flatMap(bin => bin.sensors.map(sensor => ({ - binIdentifier: bin.identifier, // or whatever property holds the name + binIdentifier: bin.identifier, promise: api.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/history/sensor/${sensor}`, { @@ -44,9 +44,8 @@ export const HeatmapBatteryLevel: React.FC<{ trashbins: Trashbin[] }> = ({trashb data: await item.promise }))); - // Transform into your custom objects newMeasurements = history.flatMap(sensorHistories => - sensorHistories.data.data.map(sensorHistory => ({ + sensorHistories.data.data.map((sensorHistory: { createdAt: any; measurement: any; measureType: any; }) => ({ binName: sensorHistories.binIdentifier, timestamp: sensorHistory.createdAt, measurement: sensorHistory.measurement, diff --git a/components/Heatmap/HeatmapFillLevel.tsx b/components/Heatmap/HeatmapFillLevel.tsx index e771e23..c0ae7f7 100644 --- a/components/Heatmap/HeatmapFillLevel.tsx +++ b/components/Heatmap/HeatmapFillLevel.tsx @@ -46,7 +46,7 @@ export const HeatmapFillLevel: React.FC<{ trashbins: Trashbin[] }> = ({trashbins // Transform into your custom objects newMeasurements = history.flatMap(sensorHistories => - sensorHistories.data.data.map(sensorHistory => ({ + sensorHistories.data.data.map((sensorHistory: { createdAt: any; measurement: any; measureType: any; }) => ({ binName: sensorHistories.binIdentifier, timestamp: sensorHistory.createdAt, measurement: sensorHistory.measurement, From e0ce105213919f23f3f536ca95dd0b28f5725bc1 Mon Sep 17 00:00:00 2001 From: PaulaScharf Date: Fri, 15 Nov 2024 11:20:05 +0100 Subject: [PATCH 15/74] update comments --- .../[city]/trash/trashbins/[identifier]/page.tsx | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/app/projects/[city]/trash/trashbins/[identifier]/page.tsx b/app/projects/[city]/trash/trashbins/[identifier]/page.tsx index 18c1187..0ceb73e 100644 --- a/app/projects/[city]/trash/trashbins/[identifier]/page.tsx +++ b/app/projects/[city]/trash/trashbins/[identifier]/page.tsx @@ -54,8 +54,8 @@ export default function TrashbinDetail({ setTrashbinData(trashbinData => { if(trashbinData && trashbinData.sensors.includes(data.message.sensor_id)) { return { - ...trashbinData, // Copy the previous state - fillLevel: adjustedFillLevel, // Update only the 'status' field + ...trashbinData, + fillLevel: adjustedFillLevel, }; } return trashbinData; @@ -67,8 +67,8 @@ export default function TrashbinDetail({ setTrashbinData(trashbinData => { if(trashbinData && trashbinData.sensors.includes(data.message.sensor_id)) { return { - ...trashbinData, // Copy the previous state - batteryLevel: adjustedBatteryLevel, // Update only the 'status' field + ...trashbinData, + batteryLevel: adjustedBatteryLevel, }; } return trashbinData; @@ -78,7 +78,6 @@ export default function TrashbinDetail({ // TODO: signal_level console.log('Received new data:', data); - // Update your frontend UI with the new data }); setSocket(newSocket); @@ -124,7 +123,7 @@ export default function TrashbinDetail({ // Sensor IDs of the trashbin const sensorIds = response.data.sensors; // Fetch history data of fill level and battery level - // TODO: I think this only works under the assumption that a trashcan has only two sensors, one for fill and one for battery + // TODO: this is kind of a shitty solution. Maybe we should first determine what measureType a sensorId has and then do the request // Fetch first history data const historyResponse0 = await api.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/history/sensor/${sensorIds[0]}`, From e01ca3518bed180a0fbf297eae329c435f943aee Mon Sep 17 00:00:00 2001 From: Ammar Yousaf Date: Wed, 20 Nov 2024 00:16:06 +0100 Subject: [PATCH 16/74] login page and icons has been fixed --- app/login/page.tsx | 102 +- app/projects/[city]/trash/map/page.tsx | 2 + app/types.ts | 1 + components/Map.tsx | 229 +- package-lock.json | 308 +- package.json | 7 +- public/images/leaflet/bin_grey (2).png | Bin 0 -> 22311 bytes public/images/leaflet/bin_grey.png | Bin 0 -> 31990 bytes public/images/leaflet/bin_grey_b.png | Bin 0 -> 5021 bytes template.env | 1 - yarn.lock | 4478 ++++++++++++++++++++++++ 11 files changed, 4987 insertions(+), 141 deletions(-) create mode 100644 public/images/leaflet/bin_grey (2).png create mode 100644 public/images/leaflet/bin_grey.png create mode 100644 public/images/leaflet/bin_grey_b.png delete mode 100644 template.env create mode 100644 yarn.lock diff --git a/app/login/page.tsx b/app/login/page.tsx index 7ec6888..42a392d 100644 --- a/app/login/page.tsx +++ b/app/login/page.tsx @@ -15,9 +15,9 @@ function removeLocalData() { } export default function Component() { - const [errorMessage, setErrorMessage] = useState(null); - const [email, setEmail] = useState(""); - const [password, setPassword] = useState(""); + const [errorMessage, setErrorMessage] = useState(null); + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(""); const router = useRouter(); removeLocalData(); @@ -40,7 +40,7 @@ export default function Component() { router.push("/"); } } catch (error: any) { - setErrorMessage(error.response.data.message); + setErrorMessage(error.response?.data?.message || "An error occurred"); setTimeout(() => { setErrorMessage(null); }, 2000); @@ -49,47 +49,69 @@ export default function Component() { } }; + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); // Prevent default form submission + handleLogin(); // Trigger login function explicitly + }; + + const handleKeyDown = (e: React.KeyboardEvent) => { + if (e.key === "Enter") { + // Simulate a button click by triggering the handleLogin function + handleLogin(); + } + }; + return (
- - Login - - Enter your email and password to login to your account - - - -
- {errorMessage && ( -
- {errorMessage} +
+ + Login + + Enter your email and password to login to your account + + + +
+ {errorMessage && ( +
+ {errorMessage} +
+ )} +
+ + setEmail(e.target.value)} + onKeyDown={handleKeyDown} // Add keydown handler + />
- )} -
- - setEmail(e.target.value)} - /> -
-
- - setPassword(e.target.value)} - /> +
+ + setPassword(e.target.value)} + onKeyDown={handleKeyDown} // Add keydown handler + /> +
+
- -
-
+ +
); diff --git a/app/projects/[city]/trash/map/page.tsx b/app/projects/[city]/trash/map/page.tsx index 0643ff7..c66f6ed 100644 --- a/app/projects/[city]/trash/map/page.tsx +++ b/app/projects/[city]/trash/map/page.tsx @@ -9,6 +9,7 @@ import Map from "@/components/Map"; import LoadingComponent from "@/components/LoadingComponent"; import { Trashbin } from "@/app/types"; + const MapPage = () => { const router = useRouter(); const [trashbinData, setTrashbinData] = useState([]); @@ -64,6 +65,7 @@ const MapPage = () => {
{/* Make sure that all information was fetched from the backend before rendering the map */} + { (centerCoordinates && initialZoom && fillThresholds && batteryThresholds) ? { const BinIcon = L.Icon.extend({ options: { shadowUrl: '/images/leaflet/bin_s.png', - iconSize: [26, 33], // size of icon - shadowSize: [26, 25], // size of shadow - iconAnchor: [26/2, 33/2], // point of icon which will correspond to marker's location - shadowAnchor: [26/2 - 10, 25/2], // the same for the shadow - popupAnchor: [0, -33/4], // point from which popup should open relative to iconAnchor - } + iconSize: [26, 33], // size of icon + shadowSize: [26, 25], // size of shadow + iconAnchor: [26 / 2, 33 / 2], // point of icon which will correspond to marker's location + shadowAnchor: [26 / 2 - 10, 25 / 2], // the same for the shadow + popupAnchor: [0, -33 / 4], // point from which popup should open relative to iconAnchor + }, }); const BinIconSelected = BinIcon.extend({ options: { - iconSize: [35, 35], // size of icon - popupAnchor: [0, -35/4], // point from which popup should open relative to iconAnchor - } + iconSize: [35, 35], // size of icon + popupAnchor: [0, -35 / 4], // point from which popup should open relative to iconAnchor + }, }); return { @@ -97,9 +97,10 @@ const createBinIcons = (L: any) => { yellowBinSelected: new BinIconSelected({ iconUrl: '/images/leaflet/bin_y_b.png' }), redBin: new BinIcon({ iconUrl: '/images/leaflet/bin_r.png' }), redBinSelected: new BinIconSelected({ iconUrl: '/images/leaflet/bin_r_b.png' }), + greyBin: new BinIcon({ iconUrl: '/images/leaflet/bin_grey.png' }), // New grey bin icon + greyBinSelected: new BinIconSelected({ iconUrl: '/images/leaflet/bin_grey_b.png' }), // Selected grey bin }; }; - // Map initialization const initializeMap = (L: any, centerCoordinates: LatLngTuple, initialZoom: number, mapRef: any, markersRef: any) => { if (!mapRef.current) { @@ -113,49 +114,206 @@ const initializeMap = (L: any, centerCoordinates: LatLngTuple, initialZoom: numb markersRef.current.clearLayers(); } else { markersRef.current = L.markerClusterGroup({ maxClusterRadius: 40 }); + + if (markersRef.current) { mapRef.current.addLayer(markersRef.current); + markersRef.current.clearLayers(); + } } }; // Markers addition -const addMarkersToMap = (L: any, trashbinData: Trashbin[], fillThresholds: [number, number], batteryThresholds: [number, number], selectedBins: Trashbin[] | undefined, isRoutePlanning: boolean, onTrashbinClick: (trashbin: Trashbin) => void | undefined, markersRef: any) => { - const { greenBin, greenBinSelected, yellowBin, yellowBinSelected, redBin, redBinSelected } = createBinIcons(L); - - const filteredTrashbinData = trashbinData.filter(trashbin => - trashbin.coordinates[0] !== (null && undefined) && - trashbin.coordinates[1] !== (null && undefined) && - trashbin.coordinates[0] >= -90 && trashbin.coordinates[0] <= 90 && - trashbin.coordinates[1] >= -180 && trashbin.coordinates[1] <= 180 - ); +const addMarkersToMap = async ( + L: any, + trashbinData: Trashbin[], + fillThresholds: [number, number], + batteryThresholds: [number, number], + selectedBins: Trashbin[] | undefined, + isRoutePlanning: boolean, + onTrashbinClick: (trashbin: Trashbin) => void | undefined, + markersRef: any +) => { + const { + greenBin, + greenBinSelected, + yellowBin, + yellowBinSelected, + redBin, + redBinSelected, + greyBin, + greyBinSelected, + } = createBinIcons(L); + + const token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3M2IwYTE2ZTVlOWY3MDhkMDQzZGJlMCIsInJvbGUiOiJTVVBFUkFETUlOIiwiaWF0IjoxNzMxOTIyNTU2LCJleHAiOjE3MzIwOTUzNTZ9.OyewrDIj8_OstP4IDrPglKkNbQLwh6_7V3eZjn_iT0I"; + + const oneWeekAgo = new Date(); + oneWeekAgo.setDate(oneWeekAgo.getDate() - 7); + + const fetchSensorHistory = async (sensorId: string) => { + try { + const response = await fetch( + `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/history/sensor/${sensorId}`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + if (response.status === 404) { + console.warn(`No data found for sensorId: ${sensorId}`); + return []; + } + if (!response.ok) { + console.error(`Failed to fetch data for sensorId: ${sensorId}`); + return []; + } + const data = await response.json(); + return data.map((item: any) => ({ + timestamp: new Date(item.createdAt), + measurement: item.measurement, + measureType: item.measureType, + })); + } catch (error) { + console.error(`Error fetching sensor history for sensorId ${sensorId}`, error); + return []; + } + }; + + const seenCoordinates = new Set(); + + const filteredTrashbinData = trashbinData.filter((trashbin) => { + // Validate that coordinates are within valid ranges + if ( + !trashbin.coordinates || + trashbin.coordinates[0] === null || + trashbin.coordinates[1] === null || + trashbin.coordinates[0] < -90 || + trashbin.coordinates[0] > 90 || + trashbin.coordinates[1] < -180 || + trashbin.coordinates[1] > 180 + ) { + return false; + } + + // Format the coordinates as a string to ensure uniqueness + const coordinateKey = `${trashbin.coordinates[0].toFixed(6)},${trashbin.coordinates[1].toFixed(6)}`; + + // Check if this coordinate has already been seen + if (seenCoordinates.has(coordinateKey)) { + return false; // Skip if duplicate + } + + // Otherwise, add it to the set and include it in the result + seenCoordinates.add(coordinateKey); + return true; + }); + + + + const addedMarkers = new Set(); + if (markersRef.current) { + markersRef.current.clearLayers(); // Clear markers already added to the map + } + console.log("Trashbin data length:", trashbinData.length); + console.log("Unique coordinates:", new Set(trashbinData.map(bin => `${bin.coordinates[0].toFixed(6)},${bin.coordinates[1].toFixed(6)}`)).size); + + for (const trashbin of filteredTrashbinData) { + const coordinateKey = `${trashbin.coordinates[0].toFixed(6)},${trashbin.coordinates[1].toFixed(6)}`; + // console.log("Trashbin data length:", trashbinData.length); + //console.log("Unique coordinates:", new Set(trashbinData.map(bin => `${bin.coordinates[0].toFixed(6)},${bin.coordinates[1].toFixed(6)}`)).size); + + if (addedMarkers.has(coordinateKey)) { + continue; + } + addedMarkers.add(coordinateKey); + + let isDataMissing = false; + let isOldData = false; + + if ( + !trashbin.fillLevel || + !trashbin.coordinates || + !trashbin.identifier || + !trashbin.sensors?.length + ) { + isDataMissing = true; + } else { + for (const sensorId of trashbin.sensors) { + const historyData = await fetchSensorHistory(sensorId); + + if (historyData.length > 0) { + historyData.forEach((data: { measureType: string; timestamp: string | number | Date }) => { + if (data.measureType === "fill_level" || data.measureType === "battery_level") { + const lastHistoryDate = new Date(data.timestamp); + if (lastHistoryDate < oneWeekAgo) { + isOldData = true; + } + } + }); + } else { + isDataMissing = true; + } + } + } + + const icon = + isDataMissing || isOldData + ? greyBinSelected + : selectedBins?.some((bin) => bin.identifier === trashbin.identifier) + ? trashbin.fillLevel < fillThresholds[0] + ? greenBinSelected + : trashbin.fillLevel < fillThresholds[1] + ? yellowBinSelected + : redBinSelected + : trashbin.fillLevel < fillThresholds[0] + ? greenBin + : trashbin.fillLevel < fillThresholds[1] + ? yellowBin + : redBin; - filteredTrashbinData.forEach(trashbin => { const marker = L.marker( [trashbin.coordinates[0] ?? 0, trashbin.coordinates[1] ?? 0], { - icon: selectedBins?.some((bin) => bin.identifier === trashbin.identifier) - ? (trashbin.fillLevel < fillThresholds[0] ? greenBinSelected : trashbin.fillLevel < fillThresholds[1] ? yellowBinSelected : redBinSelected) - : (trashbin.fillLevel < fillThresholds[0] ? greenBin : trashbin.fillLevel < fillThresholds[1] ? yellowBin : redBin) + icon, } ); - const container = document.createElement('div'); - const popupElement = ; + const container = document.createElement("div"); + const popupElement = ( + + ); createRoot(container).render(popupElement); marker.bindPopup(container); - marker.on("mouseover", () => { marker.openPopup(); }); + marker.on("mouseover", () => { + marker.openPopup(); + }); marker.on("click", () => { onTrashbinClick(trashbin); }); - marker.on('popupopen', function (e: any) { - L.DomEvent.on(e.popup._contentNode, 'click', () => { onTrashbinClick(trashbin); }); + marker.on("popupopen", function (e: any) { + L.DomEvent.on(e.popup._contentNode, "click", () => { + onTrashbinClick(trashbin); + }); }); + + // Add the marker directly to the map or layer group markersRef.current.addLayer(marker); - }); + } }; + + + + + // Route handling const handleRoutingControl = (L: any, showRoute: boolean = false, optimizedBins: Trashbin[] | undefined, tripStartEnd: LatLngTuple | undefined, mapRef: any, routingControlRef: any) => { if (routingControlRef.current && mapRef.current) { @@ -185,23 +343,30 @@ const handleRoutingControl = (L: any, showRoute: boolean = false, optimizedBins: const Map = ({ trashbinData, centerCoordinates, initialZoom = 20, fillThresholds, batteryThresholds, isRoutePlanning, onTrashbinClick, tripStartEnd, selectedBins, optimizedBins, showRoute }: MapProps) => { const mapRef = useRef(null); + //console.log("map",mapRef) const markersRef = useRef(null); const routingControlRef = useRef(null); + //const markersAddedRef = useRef(false); // Track whether markers have been added + useEffect(() => { - if (typeof window !== 'undefined') { + if (typeof window !== 'undefined'&& mapRef.current== null) { // Load the leaflet library and the marker cluster plugin + console.log("use effect rendered") const L = require('leaflet'); require('leaflet.markercluster'); require('leaflet-routing-machine'); - + initializeMap(L, centerCoordinates, initialZoom, mapRef, markersRef); + if (mapRef.current && markersRef.current) { + markersRef.current.clearLayers(); addMarkersToMap(L, trashbinData, fillThresholds, batteryThresholds, selectedBins, isRoutePlanning, onTrashbinClick, markersRef); handleRoutingControl(L, showRoute, optimizedBins, tripStartEnd, mapRef, routingControlRef); } } - }, [trashbinData, isRoutePlanning, onTrashbinClick, selectedBins, optimizedBins, showRoute, batteryThresholds, centerCoordinates, fillThresholds, initialZoom, tripStartEnd ]); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); return
; }; diff --git a/package-lock.json b/package-lock.json index 16b51d7..0cb5faa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,9 +28,11 @@ "chartjs-chart-matrix": "^2.0.1", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", + "cors": "^2.8.5", "d3": "^7.9.0", "d3-tip": "^0.9.1", "export-to-csv": "^1.3.0", + "i18next": "^23.16.5", "json-2-csv": "^5.5.1", "jsonwebtoken": "^9.0.2", "leaflet": "^1.9.4", @@ -38,12 +40,14 @@ "leaflet.markercluster": "^1.5.3", "lodash.debounce": "^4.0.8", "lucide-react": "^0.378.0", - "next": "14.2.3", + "next": "^14.2.18", + "next-i18next": "^15.3.1", "next-themes": "^0.3.0", "react": "^18", "react-chartjs-2": "^5.2.0", "react-copy-to-clipboard": "^5.1.0", "react-dom": "^18", + "react-i18next": "^15.1.1", "react-router-dom": "^6.24.0", "recharts": "^2.12.6", "resize-observer-polyfill": "^1.5.1", @@ -66,6 +70,7 @@ "@types/react": "^18.3.1", "@types/react-copy-to-clipboard": "^5.0.7", "@types/react-dom": "^18", + "@types/react-i18next": "^7.8.3", "eslint": "^8", "eslint-config-next": "14.2.3", "postcss": "^8", @@ -85,9 +90,10 @@ } }, "node_modules/@babel/runtime": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.5.tgz", - "integrity": "sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -764,9 +770,10 @@ } }, "node_modules/@next/env": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.3.tgz", - "integrity": "sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA==" + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.18.tgz", + "integrity": "sha512-2vWLOUwIPgoqMJKG6dt35fVXVhgM09tw4tK3/Q34GFXDrfiHlG7iS33VA4ggnjWxjiz9KV5xzfsQzJX6vGAekA==", + "license": "MIT" }, "node_modules/@next/eslint-plugin-next": { "version": "14.2.3", @@ -778,12 +785,13 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.3.tgz", - "integrity": "sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A==", + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.18.tgz", + "integrity": "sha512-tOBlDHCjGdyLf0ube/rDUs6VtwNOajaWV+5FV/ajPgrvHeisllEdymY/oDgv2cx561+gJksfMUtqf8crug7sbA==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "darwin" @@ -793,12 +801,13 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.3.tgz", - "integrity": "sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA==", + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.18.tgz", + "integrity": "sha512-uJCEjutt5VeJ30jjrHV1VIHCsbMYnEqytQgvREx+DjURd/fmKy15NaVK4aR/u98S1LGTnjq35lRTnRyygglxoA==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "darwin" @@ -808,12 +817,13 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.3.tgz", - "integrity": "sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA==", + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.18.tgz", + "integrity": "sha512-IL6rU8vnBB+BAm6YSWZewc+qvdL1EaA+VhLQ6tlUc0xp+kkdxQrVqAnh8Zek1ccKHlTDFRyAft0e60gteYmQ4A==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -823,12 +833,13 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.3.tgz", - "integrity": "sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw==", + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.18.tgz", + "integrity": "sha512-RCaENbIZqKKqTlL8KNd+AZV/yAdCsovblOpYFp0OJ7ZxgLNbV5w23CUU1G5On+0fgafrsGcW+GdMKdFjaRwyYA==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -838,12 +849,13 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.3.tgz", - "integrity": "sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w==", + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.18.tgz", + "integrity": "sha512-3kmv8DlyhPRCEBM1Vavn8NjyXtMeQ49ID0Olr/Sut7pgzaQTo4h01S7Z8YNE0VtbowyuAL26ibcz0ka6xCTH5g==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -853,12 +865,13 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.3.tgz", - "integrity": "sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ==", + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.18.tgz", + "integrity": "sha512-mliTfa8seVSpTbVEcKEXGjC18+TDII8ykW4a36au97spm9XMPqQTpdGPNBJ9RySSFw9/hLuaCMByluQIAnkzlw==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -868,12 +881,13 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.3.tgz", - "integrity": "sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A==", + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.18.tgz", + "integrity": "sha512-J5g0UFPbAjKYmqS3Cy7l2fetFmWMY9Oao32eUsBPYohts26BdrMUyfCJnZFQkX9npYaHNDOWqZ6uV9hSDPw9NA==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -883,12 +897,13 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.3.tgz", - "integrity": "sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw==", + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.18.tgz", + "integrity": "sha512-Ynxuk4ZgIpdcN7d16ivJdjsDG1+3hTvK24Pp8DiDmIa2+A4CfhJSEHHVndCHok6rnLUzAZD+/UOKESQgTsAZGg==", "cpu": [ "ia32" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -898,12 +913,13 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.3.tgz", - "integrity": "sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA==", + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.18.tgz", + "integrity": "sha512-dtRGMhiU9TN5nyhwzce+7c/4CCeykYS+ipY/4mIrGzJ71+7zNo55ZxCB7cAVuNqdwtYniFNR2c9OFQ6UdFIMcg==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -2201,6 +2217,23 @@ "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==", "dev": true }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", + "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==", + "license": "MIT", + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "node_modules/@types/i18next": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@types/i18next/-/i18next-12.1.0.tgz", + "integrity": "sha512-qLyqTkp3ZKHsSoX8CNVYcTyTkxlm0aRCUpaUVetgkSlSpiNCdWryOgaYwgbO04tJIfLgBXPcy0tJ3Nl/RagllA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -2269,14 +2302,12 @@ "node_modules/@types/prop-types": { "version": "15.7.12", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", - "devOptional": true + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" }, "node_modules/@types/react": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.1.tgz", "integrity": "sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw==", - "devOptional": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -2300,6 +2331,17 @@ "@types/react": "*" } }, + "node_modules/@types/react-i18next": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@types/react-i18next/-/react-i18next-7.8.3.tgz", + "integrity": "sha512-VPopxbHXz/1Sjl+ljXQQchf6FHXaYLaH0a6TH6KnGOQGD4LzNbUVlofK26S30OIYfYibm8r/sAb2KeTst+AwTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/i18next": "*", + "@types/react": "*" + } + }, "node_modules/@typescript-eslint/parser": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", @@ -2768,9 +2810,10 @@ } }, "node_modules/axios": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", - "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -3075,9 +3118,10 @@ "dev": true }, "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -3090,10 +3134,22 @@ "toggle-selection": "^1.0.6" } }, + "node_modules/core-js": { + "version": "3.39.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.39.0.tgz", + "integrity": "sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/cors": { "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", "dependencies": { "object-assign": "^4", "vary": "^1" @@ -3103,9 +3159,10 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", + "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==", + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -3775,16 +3832,17 @@ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "node_modules/engine.io": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.1.tgz", - "integrity": "sha512-NEpDCw9hrvBW+hVEOK4T7v0jFJ++KgtPl4jKFwsZVfG1XhS0dCrSb3VMb9gPAd7VAdW52VT1EnaNiU2vM8C0og==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.2.tgz", + "integrity": "sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==", + "license": "MIT", "dependencies": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", - "cookie": "~0.4.1", + "cookie": "~0.7.2", "cors": "~2.8.5", "debug": "~4.3.1", "engine.io-parser": "~5.2.1", @@ -4915,6 +4973,53 @@ "node": ">= 0.4" } }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/html-parse-stringify": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", + "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", + "license": "MIT", + "dependencies": { + "void-elements": "3.1.0" + } + }, + "node_modules/i18next": { + "version": "23.16.5", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.16.5.tgz", + "integrity": "sha512-KTlhE3EP9x6pPTAW7dy0WKIhoCpfOGhRQlO+jttQLgzVaoOjWwBWramu7Pp0i+8wDNduuzXfe3kkVbzrKyrbTA==", + "funding": [ + { + "type": "individual", + "url": "https://locize.com" + }, + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + } + ], + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.2" + } + }, + "node_modules/i18next-fs-backend": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/i18next-fs-backend/-/i18next-fs-backend-2.3.2.tgz", + "integrity": "sha512-LIwUlkqDZnUI8lnUxBnEj8K/FrHQTT/Sc+1rvDm9E8YvvY5YxzoEAASNx+W5M9DfD5s77lI5vSAFWeTp26B/3Q==", + "license": "MIT" + }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -5713,11 +5818,12 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -5819,11 +5925,12 @@ } }, "node_modules/next": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/next/-/next-14.2.3.tgz", - "integrity": "sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A==", + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/next/-/next-14.2.18.tgz", + "integrity": "sha512-H9qbjDuGivUDEnK6wa+p2XKO+iMzgVgyr9Zp/4Iv29lKa+DYaxJGjOeEA+5VOvJh/M7HLiskehInSa0cWxVXUw==", + "license": "MIT", "dependencies": { - "@next/env": "14.2.3", + "@next/env": "14.2.18", "@swc/helpers": "0.5.5", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", @@ -5838,15 +5945,15 @@ "node": ">=18.17.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "14.2.3", - "@next/swc-darwin-x64": "14.2.3", - "@next/swc-linux-arm64-gnu": "14.2.3", - "@next/swc-linux-arm64-musl": "14.2.3", - "@next/swc-linux-x64-gnu": "14.2.3", - "@next/swc-linux-x64-musl": "14.2.3", - "@next/swc-win32-arm64-msvc": "14.2.3", - "@next/swc-win32-ia32-msvc": "14.2.3", - "@next/swc-win32-x64-msvc": "14.2.3" + "@next/swc-darwin-arm64": "14.2.18", + "@next/swc-darwin-x64": "14.2.18", + "@next/swc-linux-arm64-gnu": "14.2.18", + "@next/swc-linux-arm64-musl": "14.2.18", + "@next/swc-linux-x64-gnu": "14.2.18", + "@next/swc-linux-x64-musl": "14.2.18", + "@next/swc-win32-arm64-msvc": "14.2.18", + "@next/swc-win32-ia32-msvc": "14.2.18", + "@next/swc-win32-x64-msvc": "14.2.18" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", @@ -5867,6 +5974,42 @@ } } }, + "node_modules/next-i18next": { + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/next-i18next/-/next-i18next-15.3.1.tgz", + "integrity": "sha512-+pa2pZJb7B6k5PKW3TLVMmAodqkNaOBWVYlpWX56mgcEJz0UMW+MKSdKM9Z72CHp6Bp48g7OWwDnLqxXNp/84w==", + "funding": [ + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + }, + { + "type": "individual", + "url": "https://locize.com" + } + ], + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.2", + "@types/hoist-non-react-statics": "^3.3.4", + "core-js": "^3", + "hoist-non-react-statics": "^3.3.2", + "i18next-fs-backend": "^2.3.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "i18next": ">= 23.7.13", + "next": ">= 12.0.0", + "react": ">= 17.0.2", + "react-i18next": ">= 13.5.0" + } + }, "node_modules/next-themes": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.3.0.tgz", @@ -6449,6 +6592,28 @@ "react": "^18.3.1" } }, + "node_modules/react-i18next": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-15.1.1.tgz", + "integrity": "sha512-R/Vg9wIli2P3FfeI8o1eNJUJue5LWpFsQePCHdQDmX0Co3zkr6kdT8gAseb/yGeWbNz1Txc4bKDQuZYsC0kQfw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.0", + "html-parse-stringify": "^3.0.1" + }, + "peerDependencies": { + "i18next": ">= 23.2.3", + "react": ">= 16.8.0" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -7688,6 +7853,15 @@ "d3-timer": "^3.0.1" } }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index 2a82a89..2e5914e 100644 --- a/package.json +++ b/package.json @@ -29,9 +29,11 @@ "chartjs-chart-matrix": "^2.0.1", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", + "cors": "^2.8.5", "d3": "^7.9.0", "d3-tip": "^0.9.1", "export-to-csv": "^1.3.0", + "i18next": "^23.16.5", "json-2-csv": "^5.5.1", "jsonwebtoken": "^9.0.2", "leaflet": "^1.9.4", @@ -39,12 +41,14 @@ "leaflet.markercluster": "^1.5.3", "lodash.debounce": "^4.0.8", "lucide-react": "^0.378.0", - "next": "14.2.3", + "next": "^14.2.18", + "next-i18next": "^15.3.1", "next-themes": "^0.3.0", "react": "^18", "react-chartjs-2": "^5.2.0", "react-copy-to-clipboard": "^5.1.0", "react-dom": "^18", + "react-i18next": "^15.1.1", "react-router-dom": "^6.24.0", "recharts": "^2.12.6", "resize-observer-polyfill": "^1.5.1", @@ -67,6 +71,7 @@ "@types/react": "^18.3.1", "@types/react-copy-to-clipboard": "^5.0.7", "@types/react-dom": "^18", + "@types/react-i18next": "^7.8.3", "eslint": "^8", "eslint-config-next": "14.2.3", "postcss": "^8", diff --git a/public/images/leaflet/bin_grey (2).png b/public/images/leaflet/bin_grey (2).png new file mode 100644 index 0000000000000000000000000000000000000000..3f0fa27cffa804f59783bfae8e92ca91c42499bb GIT binary patch literal 22311 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�Zk4qIICjk*{mwMp?5w3W%|QALjk=^o>;v5 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

i^fi7S5e#ytyxOYxO6-w9-BFn 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 literal 0 HcmV?d00001 diff --git a/public/images/leaflet/bin_grey.png b/public/images/leaflet/bin_grey.png new file mode 100644 index 0000000000000000000000000000000000000000..d4e20ed8a107d7bdfc401fabec35ea09bdbe577d GIT binary patch literal 31990 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 literal 0 HcmV?d00001 diff --git a/template.env b/template.env deleted file mode 100644 index f477f9b..0000000 --- a/template.env +++ /dev/null @@ -1 +0,0 @@ -NEXT_PUBLIC_BACKEND_URL = "http://localhost:5001" diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..3d89ab1 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,4478 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@alloc/quick-lru@^5.2.0": + version "5.2.0" + resolved "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz" + integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== + +"@babel/runtime@^7.13.10", "@babel/runtime@^7.23.2", "@babel/runtime@^7.24.1", "@babel/runtime@^7.25.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": + version "7.26.0" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz" + integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== + dependencies: + regenerator-runtime "^0.14.0" + +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.6.1": + version "4.10.0" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== + +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.57.0": + version "8.57.0" + resolved "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz" + integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== + +"@floating-ui/core@^1.0.0": + version "1.6.1" + resolved "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.1.tgz" + integrity sha512-42UH54oPZHPdRHdw6BgoBD6cg/eVTmVrFcgeRDM3jbO7uxSoipVcmcIGFcA5jmOHO5apcyvBhkSKES3fQJnu7A== + dependencies: + "@floating-ui/utils" "^0.2.0" + +"@floating-ui/dom@^1.0.0": + version "1.6.5" + resolved "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.5.tgz" + integrity sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw== + dependencies: + "@floating-ui/core" "^1.0.0" + "@floating-ui/utils" "^0.2.0" + +"@floating-ui/react-dom@^2.0.0": + version "2.0.9" + resolved "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.9.tgz" + integrity sha512-q0umO0+LQK4+p6aGyvzASqKbKOJcAHJ7ycE9CuUvfx3s9zTHWmGJTPOIlM/hmSBfUfg/XfY5YhLBLR/LHwShQQ== + dependencies: + "@floating-ui/dom" "^1.0.0" + +"@floating-ui/utils@^0.2.0": + version "0.2.2" + resolved "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz" + integrity sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw== + +"@humanwhocodes/config-array@^0.11.14": + version "0.11.14" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== + dependencies: + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.3" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== + +"@img/sharp-win32-x64@0.33.4": + version "0.33.4" + resolved "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.4.tgz" + integrity sha512-3QLocdTRVIrFNye5YocZl+KKpYKP+fksi1QhmOArgx7GyhIbQp/WrJRu176jm8IxromS7RIkzMiMINVdBtC8Aw== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@jridgewell/gen-mapping@^0.3.2": + version "0.3.5" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.24": + version "0.3.25" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@kurkle/color@^0.3.0": + version "0.3.2" + resolved "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz" + integrity sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw== + +"@mapbox/corslite@0.0.7": + version "0.0.7" + resolved "https://registry.npmjs.org/@mapbox/corslite/-/corslite-0.0.7.tgz" + integrity sha512-w/uS474VFjmqQ7fFWIMZINQM1BAQxDLuoJaZZIPES1BmeYpCtlh9MtbFxKGGDAsfvut8/HircIsVvEYRjQ+iMg== + +"@mapbox/polyline@^0.2.0": + version "0.2.0" + resolved "https://registry.npmjs.org/@mapbox/polyline/-/polyline-0.2.0.tgz" + integrity sha512-GCddO0iw6AzOQqZgBmjEQI9Pgo40/yRgkTkikGctE01kNBN0ThWYuAnTD+hRWrAWMV6QJ0rNm4m8DAsaAXE7Pg== + +"@next/env@14.2.18": + version "14.2.18" + resolved "https://registry.npmjs.org/@next/env/-/env-14.2.18.tgz" + integrity sha512-2vWLOUwIPgoqMJKG6dt35fVXVhgM09tw4tK3/Q34GFXDrfiHlG7iS33VA4ggnjWxjiz9KV5xzfsQzJX6vGAekA== + +"@next/eslint-plugin-next@14.2.3": + version "14.2.3" + resolved "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.3.tgz" + integrity sha512-L3oDricIIjgj1AVnRdRor21gI7mShlSwU/1ZGHmqM3LzHhXXhdkrfeNY5zif25Bi5Dd7fiJHsbhoZCHfXYvlAw== + dependencies: + glob "10.3.10" + +"@next/swc-win32-x64-msvc@14.2.18": + version "14.2.18" + resolved "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.18.tgz" + integrity sha512-dtRGMhiU9TN5nyhwzce+7c/4CCeykYS+ipY/4mIrGzJ71+7zNo55ZxCB7cAVuNqdwtYniFNR2c9OFQ6UdFIMcg== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + version "2.0.5" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@radix-ui/number@1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.1.tgz" + integrity sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/primitive@1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz" + integrity sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-arrow@1.0.3": + version "1.0.3" + resolved "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz" + integrity sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-primitive" "1.0.3" + +"@radix-ui/react-collection@1.0.3": + version "1.0.3" + resolved "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.3.tgz" + integrity sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-slot" "1.0.2" + +"@radix-ui/react-compose-refs@1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz" + integrity sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-context@1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz" + integrity sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-dialog@^1.0.5": + version "1.0.5" + resolved "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.5.tgz" + integrity sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-dismissable-layer" "1.0.5" + "@radix-ui/react-focus-guards" "1.0.1" + "@radix-ui/react-focus-scope" "1.0.4" + "@radix-ui/react-id" "1.0.1" + "@radix-ui/react-portal" "1.0.4" + "@radix-ui/react-presence" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-slot" "1.0.2" + "@radix-ui/react-use-controllable-state" "1.0.1" + aria-hidden "^1.1.1" + react-remove-scroll "2.5.5" + +"@radix-ui/react-direction@1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.1.tgz" + integrity sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-dismissable-layer@1.0.5": + version "1.0.5" + resolved "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz" + integrity sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-use-callback-ref" "1.0.1" + "@radix-ui/react-use-escape-keydown" "1.0.3" + +"@radix-ui/react-dropdown-menu@^2.0.6": + version "2.0.6" + resolved "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.0.6.tgz" + integrity sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-id" "1.0.1" + "@radix-ui/react-menu" "2.0.6" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-use-controllable-state" "1.0.1" + +"@radix-ui/react-focus-guards@1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz" + integrity sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-focus-scope@1.0.4": + version "1.0.4" + resolved "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.4.tgz" + integrity sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-use-callback-ref" "1.0.1" + +"@radix-ui/react-id@1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz" + integrity sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-layout-effect" "1.0.1" + +"@radix-ui/react-label@^2.0.2": + version "2.0.2" + resolved "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.0.2.tgz" + integrity sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-primitive" "1.0.3" + +"@radix-ui/react-menu@2.0.6": + version "2.0.6" + resolved "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.0.6.tgz" + integrity sha512-BVkFLS+bUC8HcImkRKPSiVumA1VPOOEC5WBMiT+QAVsPzW1FJzI9KnqgGxVDPBcql5xXrHkD3JOVoXWEXD8SYA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-collection" "1.0.3" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-direction" "1.0.1" + "@radix-ui/react-dismissable-layer" "1.0.5" + "@radix-ui/react-focus-guards" "1.0.1" + "@radix-ui/react-focus-scope" "1.0.4" + "@radix-ui/react-id" "1.0.1" + "@radix-ui/react-popper" "1.1.3" + "@radix-ui/react-portal" "1.0.4" + "@radix-ui/react-presence" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-roving-focus" "1.0.4" + "@radix-ui/react-slot" "1.0.2" + "@radix-ui/react-use-callback-ref" "1.0.1" + aria-hidden "^1.1.1" + react-remove-scroll "2.5.5" + +"@radix-ui/react-popper@1.1.3": + version "1.1.3" + resolved "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.3.tgz" + integrity sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w== + dependencies: + "@babel/runtime" "^7.13.10" + "@floating-ui/react-dom" "^2.0.0" + "@radix-ui/react-arrow" "1.0.3" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-use-callback-ref" "1.0.1" + "@radix-ui/react-use-layout-effect" "1.0.1" + "@radix-ui/react-use-rect" "1.0.1" + "@radix-ui/react-use-size" "1.0.1" + "@radix-ui/rect" "1.0.1" + +"@radix-ui/react-portal@1.0.4": + version "1.0.4" + resolved "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.4.tgz" + integrity sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-primitive" "1.0.3" + +"@radix-ui/react-presence@1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.1.tgz" + integrity sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-use-layout-effect" "1.0.1" + +"@radix-ui/react-primitive@1.0.3": + version "1.0.3" + resolved "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz" + integrity sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-slot" "1.0.2" + +"@radix-ui/react-radio-group@^1.1.3": + version "1.1.3" + resolved "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.1.3.tgz" + integrity sha512-x+yELayyefNeKeTx4fjK6j99Fs6c4qKm3aY38G3swQVTN6xMpsrbigC0uHs2L//g8q4qR7qOcww8430jJmi2ag== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-direction" "1.0.1" + "@radix-ui/react-presence" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-roving-focus" "1.0.4" + "@radix-ui/react-use-controllable-state" "1.0.1" + "@radix-ui/react-use-previous" "1.0.1" + "@radix-ui/react-use-size" "1.0.1" + +"@radix-ui/react-roving-focus@1.0.4": + version "1.0.4" + resolved "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz" + integrity sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-collection" "1.0.3" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-direction" "1.0.1" + "@radix-ui/react-id" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-use-callback-ref" "1.0.1" + "@radix-ui/react-use-controllable-state" "1.0.1" + +"@radix-ui/react-scroll-area@^1.0.5": + version "1.0.5" + resolved "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.0.5.tgz" + integrity sha512-b6PAgH4GQf9QEn8zbT2XUHpW5z8BzqEc7Kl11TwDrvuTrxlkcjTD5qa/bxgKr+nmuXKu4L/W5UZ4mlP/VG/5Gw== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/number" "1.0.1" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-direction" "1.0.1" + "@radix-ui/react-presence" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-use-callback-ref" "1.0.1" + "@radix-ui/react-use-layout-effect" "1.0.1" + +"@radix-ui/react-select@^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.0.0.tgz" + integrity sha512-RH5b7af4oHtkcHS7pG6Sgv5rk5Wxa7XI8W5gvB1N/yiuDGZxko1ynvOiVhFM7Cis2A8zxF9bTOUVbRDzPepe6w== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/number" "1.0.1" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-collection" "1.0.3" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-direction" "1.0.1" + "@radix-ui/react-dismissable-layer" "1.0.5" + "@radix-ui/react-focus-guards" "1.0.1" + "@radix-ui/react-focus-scope" "1.0.4" + "@radix-ui/react-id" "1.0.1" + "@radix-ui/react-popper" "1.1.3" + "@radix-ui/react-portal" "1.0.4" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-slot" "1.0.2" + "@radix-ui/react-use-callback-ref" "1.0.1" + "@radix-ui/react-use-controllable-state" "1.0.1" + "@radix-ui/react-use-layout-effect" "1.0.1" + "@radix-ui/react-use-previous" "1.0.1" + "@radix-ui/react-visually-hidden" "1.0.3" + aria-hidden "^1.1.1" + react-remove-scroll "2.5.5" + +"@radix-ui/react-slot@^1.0.2", "@radix-ui/react-slot@1.0.2": + version "1.0.2" + resolved "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz" + integrity sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-compose-refs" "1.0.1" + +"@radix-ui/react-tabs@^1.0.4": + version "1.0.4" + resolved "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.0.4.tgz" + integrity sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-direction" "1.0.1" + "@radix-ui/react-id" "1.0.1" + "@radix-ui/react-presence" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-roving-focus" "1.0.4" + "@radix-ui/react-use-controllable-state" "1.0.1" + +"@radix-ui/react-toast@^1.1.5": + version "1.1.5" + resolved "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.1.5.tgz" + integrity sha512-fRLn227WHIBRSzuRzGJ8W+5YALxofH23y0MlPLddaIpLpCDqdE0NZlS2NRQDRiptfxDeeCjgFIpexB1/zkxDlw== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-collection" "1.0.3" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-dismissable-layer" "1.0.5" + "@radix-ui/react-portal" "1.0.4" + "@radix-ui/react-presence" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-use-callback-ref" "1.0.1" + "@radix-ui/react-use-controllable-state" "1.0.1" + "@radix-ui/react-use-layout-effect" "1.0.1" + "@radix-ui/react-visually-hidden" "1.0.3" + +"@radix-ui/react-tooltip@^1.0.7": + version "1.0.7" + resolved "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.0.7.tgz" + integrity sha512-lPh5iKNFVQ/jav/j6ZrWq3blfDJ0OH9R6FlNUHPMqdLuQ9vwDgFsRxvl8b7Asuy5c8xmoojHUxKHQSOAvMHxyw== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/primitive" "1.0.1" + "@radix-ui/react-compose-refs" "1.0.1" + "@radix-ui/react-context" "1.0.1" + "@radix-ui/react-dismissable-layer" "1.0.5" + "@radix-ui/react-id" "1.0.1" + "@radix-ui/react-popper" "1.1.3" + "@radix-ui/react-portal" "1.0.4" + "@radix-ui/react-presence" "1.0.1" + "@radix-ui/react-primitive" "1.0.3" + "@radix-ui/react-slot" "1.0.2" + "@radix-ui/react-use-controllable-state" "1.0.1" + "@radix-ui/react-visually-hidden" "1.0.3" + +"@radix-ui/react-use-callback-ref@1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz" + integrity sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-use-controllable-state@1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz" + integrity sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-callback-ref" "1.0.1" + +"@radix-ui/react-use-escape-keydown@1.0.3": + version "1.0.3" + resolved "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz" + integrity sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-callback-ref" "1.0.1" + +"@radix-ui/react-use-layout-effect@1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz" + integrity sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-use-previous@1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.0.1.tgz" + integrity sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw== + dependencies: + "@babel/runtime" "^7.13.10" + +"@radix-ui/react-use-rect@1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz" + integrity sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/rect" "1.0.1" + +"@radix-ui/react-use-size@1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz" + integrity sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-use-layout-effect" "1.0.1" + +"@radix-ui/react-visually-hidden@1.0.3": + version "1.0.3" + resolved "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz" + integrity sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA== + dependencies: + "@babel/runtime" "^7.13.10" + "@radix-ui/react-primitive" "1.0.3" + +"@radix-ui/rect@1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.1.tgz" + integrity sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ== + dependencies: + "@babel/runtime" "^7.13.10" + +"@react-hook/debounce@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@react-hook/debounce/-/debounce-3.0.0.tgz" + integrity sha512-ir/kPrSfAzY12Gre0sOHkZ2rkEmM4fS5M5zFxCi4BnCeXh2nvx9Ujd+U4IGpKCuPA+EQD0pg1eK2NGLvfWejag== + dependencies: + "@react-hook/latest" "^1.0.2" + +"@react-hook/event@^1.2.1": + version "1.2.6" + resolved "https://registry.npmjs.org/@react-hook/event/-/event-1.2.6.tgz" + integrity sha512-JUL5IluaOdn5w5Afpe/puPa1rj8X6udMlQ9dt4hvMuKmTrBS1Ya6sb4sVgvfe2eU4yDuOfAhik8xhbcCekbg9Q== + +"@react-hook/latest@^1.0.2": + version "1.0.3" + resolved "https://registry.npmjs.org/@react-hook/latest/-/latest-1.0.3.tgz" + integrity sha512-dy6duzl+JnAZcDbNTfmaP3xHiKtbXYOaz3G51MGVljh548Y8MWzTr+PHLOfvpypEVW9zwvl+VyKjbWKEVbV1Rg== + +"@react-hook/throttle@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@react-hook/throttle/-/throttle-2.2.0.tgz" + integrity sha512-LJ5eg+yMV8lXtqK3lR+OtOZ2WH/EfWvuiEEu0M3bhR7dZRfTyEJKxH1oK9uyBxiXPtWXiQggWbZirMCXam51tg== + dependencies: + "@react-hook/latest" "^1.0.2" + +"@react-hook/window-size@^3.1.1": + version "3.1.1" + resolved "https://registry.npmjs.org/@react-hook/window-size/-/window-size-3.1.1.tgz" + integrity sha512-yWnVS5LKnOUIrEsI44oz3bIIUYqflamPL27n+k/PC//PsX/YeWBky09oPeAoc9As6jSH16Wgo8plI+ECZaHk3g== + dependencies: + "@react-hook/debounce" "^3.0.0" + "@react-hook/event" "^1.2.1" + "@react-hook/throttle" "^2.2.0" + +"@remix-run/router@1.17.0": + version "1.17.0" + resolved "https://registry.npmjs.org/@remix-run/router/-/router-1.17.0.tgz" + integrity sha512-2D6XaHEVvkCn682XBnipbJjgZUU7xjLtA4dGJRBVUKpEaDYOZMENZoZjAOSb7qirxt5RupjzZxz4fK2FO+EFPw== + +"@rushstack/eslint-patch@^1.3.3": + version "1.10.2" + resolved "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.2.tgz" + integrity sha512-hw437iINopmQuxWPSUEvqE56NCPsiU8N4AYtfHmJFckclktzK9YQJieD3XkDCDH4OjL+C7zgPUh73R/nrcHrqw== + +"@socket.io/component-emitter@~3.1.0": + version "3.1.2" + resolved "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz" + integrity sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA== + +"@swc/counter@^0.1.3": + version "0.1.3" + resolved "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz" + integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== + +"@swc/helpers@0.5.5": + version "0.5.5" + resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz" + integrity sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A== + dependencies: + "@swc/counter" "^0.1.3" + tslib "^2.4.0" + +"@tanstack/match-sorter-utils@^8.15.1": + version "8.15.1" + resolved "https://registry.npmjs.org/@tanstack/match-sorter-utils/-/match-sorter-utils-8.15.1.tgz" + integrity sha512-PnVV3d2poenUM31ZbZi/yXkBu3J7kd5k2u51CGwwNojag451AjTH9N6n41yjXz2fpLeewleyLBmNS6+HcGDlXw== + dependencies: + remove-accents "0.5.0" + +"@tanstack/react-table@^8.17.3": + version "8.17.3" + resolved "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.17.3.tgz" + integrity sha512-5gwg5SvPD3lNAXPuJJz1fOCEZYk9/GeBFH3w/hCgnfyszOIzwkwgp5I7Q4MJtn0WECp84b5STQUDdmvGi8m3nA== + dependencies: + "@tanstack/table-core" "8.17.3" + +"@tanstack/table-core@8.17.3": + version "8.17.3" + resolved "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.17.3.tgz" + integrity sha512-mPBodDGVL+fl6d90wUREepHa/7lhsghg2A3vFpakEhrhtbIlgNAZiMr7ccTgak5qbHqF14Fwy+W1yFWQt+WmYQ== + +"@types/cookie@^0.4.1": + version "0.4.1" + resolved "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz" + integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== + +"@types/cors@^2.8.12": + version "2.8.17" + resolved "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz" + integrity sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA== + dependencies: + "@types/node" "*" + +"@types/d3-array@*", "@types/d3-array@^3.0.3": + version "3.2.1" + resolved "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz" + integrity sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg== + +"@types/d3-axis@*": + version "3.0.6" + resolved "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz" + integrity sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-brush@*": + version "3.0.6" + resolved "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz" + integrity sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-chord@*": + version "3.0.6" + resolved "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz" + integrity sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg== + +"@types/d3-color@*": + version "3.1.3" + resolved "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz" + integrity sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A== + +"@types/d3-contour@*": + version "3.0.6" + resolved "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz" + integrity sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg== + dependencies: + "@types/d3-array" "*" + "@types/geojson" "*" + +"@types/d3-delaunay@*": + version "6.0.4" + resolved "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz" + integrity sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw== + +"@types/d3-dispatch@*": + version "3.0.6" + resolved "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.6.tgz" + integrity sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ== + +"@types/d3-drag@*": + version "3.0.7" + resolved "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz" + integrity sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-dsv@*": + version "3.0.7" + resolved "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz" + integrity sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g== + +"@types/d3-ease@*", "@types/d3-ease@^3.0.0": + version "3.0.2" + resolved "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz" + integrity sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA== + +"@types/d3-fetch@*": + version "3.0.7" + resolved "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz" + integrity sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA== + dependencies: + "@types/d3-dsv" "*" + +"@types/d3-force@*": + version "3.0.9" + resolved "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.9.tgz" + integrity sha512-IKtvyFdb4Q0LWna6ymywQsEYjK/94SGhPrMfEr1TIc5OBeziTi+1jcCvttts8e0UWZIxpasjnQk9MNk/3iS+kA== + +"@types/d3-format@*": + version "3.0.4" + resolved "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz" + integrity sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g== + +"@types/d3-geo@*": + version "3.1.0" + resolved "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz" + integrity sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ== + dependencies: + "@types/geojson" "*" + +"@types/d3-hierarchy@*": + version "3.1.7" + resolved "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz" + integrity sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg== + +"@types/d3-interpolate@*", "@types/d3-interpolate@^3.0.1": + version "3.0.4" + resolved "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz" + integrity sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA== + dependencies: + "@types/d3-color" "*" + +"@types/d3-path@*": + version "3.1.0" + resolved "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.0.tgz" + integrity sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ== + +"@types/d3-polygon@*": + version "3.0.2" + resolved "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz" + integrity sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA== + +"@types/d3-quadtree@*": + version "3.0.6" + resolved "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz" + integrity sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg== + +"@types/d3-random@*": + version "3.0.3" + resolved "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz" + integrity sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ== + +"@types/d3-scale-chromatic@*": + version "3.0.3" + resolved "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.3.tgz" + integrity sha512-laXM4+1o5ImZv3RpFAsTRn3TEkzqkytiOY0Dz0sq5cnd1dtNlk6sHLon4OvqaiJb28T0S/TdsBI3Sjsy+keJrw== + +"@types/d3-scale@*", "@types/d3-scale@^4.0.2": + version "4.0.8" + resolved "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz" + integrity sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ== + dependencies: + "@types/d3-time" "*" + +"@types/d3-selection@*": + version "3.0.10" + resolved "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.10.tgz" + integrity sha512-cuHoUgS/V3hLdjJOLTT691+G2QoqAjCVLmr4kJXR4ha56w1Zdu8UUQ5TxLRqudgNjwXeQxKMq4j+lyf9sWuslg== + +"@types/d3-shape@*", "@types/d3-shape@^3.1.0": + version "3.1.6" + resolved "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.6.tgz" + integrity sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA== + dependencies: + "@types/d3-path" "*" + +"@types/d3-time-format@*": + version "4.0.3" + resolved "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz" + integrity sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg== + +"@types/d3-time@*", "@types/d3-time@^3.0.0": + version "3.0.3" + resolved "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz" + integrity sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw== + +"@types/d3-timer@*", "@types/d3-timer@^3.0.0": + version "3.0.2" + resolved "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz" + integrity sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw== + +"@types/d3-tip@^3.5.8": + version "3.5.8" + resolved "https://registry.npmjs.org/@types/d3-tip/-/d3-tip-3.5.8.tgz" + integrity sha512-wulonUo5oVC3YFfXVCElar8ZC5zhVxrDaPiJ1y2YJOFLlF/nETrLJDwSDzR3DQn1E+IoX5NRJpm2XkSpkJIaDQ== + dependencies: + "@types/d3" "^3" + +"@types/d3-transition@*": + version "3.0.8" + resolved "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.8.tgz" + integrity sha512-ew63aJfQ/ms7QQ4X7pk5NxQ9fZH/z+i24ZfJ6tJSfqxJMrYLiK01EAs2/Rtw/JreGUsS3pLPNV644qXFGnoZNQ== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-zoom@*": + version "3.0.8" + resolved "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz" + integrity sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw== + dependencies: + "@types/d3-interpolate" "*" + "@types/d3-selection" "*" + +"@types/d3@^3": + version "3.5.53" + resolved "https://registry.npmjs.org/@types/d3/-/d3-3.5.53.tgz" + integrity sha512-8yKQA9cAS6+wGsJpBysmnhlaaxlN42Qizqkw+h2nILSlS+MAG2z4JdO6p+PJrJ+ACvimkmLJL281h157e52psQ== + +"@types/d3@^7.4.3": + version "7.4.3" + resolved "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz" + integrity sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww== + dependencies: + "@types/d3-array" "*" + "@types/d3-axis" "*" + "@types/d3-brush" "*" + "@types/d3-chord" "*" + "@types/d3-color" "*" + "@types/d3-contour" "*" + "@types/d3-delaunay" "*" + "@types/d3-dispatch" "*" + "@types/d3-drag" "*" + "@types/d3-dsv" "*" + "@types/d3-ease" "*" + "@types/d3-fetch" "*" + "@types/d3-force" "*" + "@types/d3-format" "*" + "@types/d3-geo" "*" + "@types/d3-hierarchy" "*" + "@types/d3-interpolate" "*" + "@types/d3-path" "*" + "@types/d3-polygon" "*" + "@types/d3-quadtree" "*" + "@types/d3-random" "*" + "@types/d3-scale" "*" + "@types/d3-scale-chromatic" "*" + "@types/d3-selection" "*" + "@types/d3-shape" "*" + "@types/d3-time" "*" + "@types/d3-time-format" "*" + "@types/d3-timer" "*" + "@types/d3-transition" "*" + "@types/d3-zoom" "*" + +"@types/geojson@*": + version "7946.0.14" + resolved "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz" + integrity sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg== + +"@types/hoist-non-react-statics@^3.3.4": + version "3.3.5" + resolved "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz" + integrity sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + +"@types/i18next@*": + version "12.1.0" + resolved "https://registry.npmjs.org/@types/i18next/-/i18next-12.1.0.tgz" + integrity sha512-qLyqTkp3ZKHsSoX8CNVYcTyTkxlm0aRCUpaUVetgkSlSpiNCdWryOgaYwgbO04tJIfLgBXPcy0tJ3Nl/RagllA== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/jsonwebtoken@^9.0.6": + version "9.0.6" + resolved "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.6.tgz" + integrity sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw== + dependencies: + "@types/node" "*" + +"@types/leaflet-routing-machine@^3.2.8": + version "3.2.8" + resolved "https://registry.npmjs.org/@types/leaflet-routing-machine/-/leaflet-routing-machine-3.2.8.tgz" + integrity sha512-v2pJDv/nqbB769SsytHemhLkqwjVor9UdWvZ1l6Y2SEaXNt1yDwVrktc4sCT8/4n7npuEb8VP+UAk8xrPePqSQ== + dependencies: + "@types/leaflet" "*" + +"@types/leaflet.markercluster@^1.5.4": + version "1.5.4" + resolved "https://registry.npmjs.org/@types/leaflet.markercluster/-/leaflet.markercluster-1.5.4.tgz" + integrity sha512-tfMP8J62+wfsVLDLGh5Zh1JZxijCaBmVsMAX78MkLPwvPitmZZtSin5aWOVRhZrCS+pEOZwNzexbfWXlY+7yjg== + dependencies: + "@types/leaflet" "*" + +"@types/leaflet@*", "@types/leaflet@^1.9.12": + version "1.9.12" + resolved "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.12.tgz" + integrity sha512-BK7XS+NyRI291HIo0HCfE18Lp8oA30H1gpi1tf0mF3TgiCEzanQjOqNZ4x126SXzzi2oNSZhZ5axJp1k0iM6jg== + dependencies: + "@types/geojson" "*" + +"@types/lodash.debounce@^4.0.9": + version "4.0.9" + resolved "https://registry.npmjs.org/@types/lodash.debounce/-/lodash.debounce-4.0.9.tgz" + integrity sha512-Ma5JcgTREwpLRwMM+XwBR7DaWe96nC38uCBDFKZWbNKD+osjVzdpnUSwBcqCptrp16sSOLBAUb50Car5I0TCsQ== + dependencies: + "@types/lodash" "*" + +"@types/lodash@*": + version "4.17.4" + resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.4.tgz" + integrity sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ== + +"@types/node@*", "@types/node@^20", "@types/node@>=10.0.0": + version "20.12.10" + resolved "https://registry.npmjs.org/@types/node/-/node-20.12.10.tgz" + integrity sha512-Eem5pH9pmWBHoGAT8Dr5fdc5rYA+4NAovdM4EktRPVAAiJhmWWfQrA0cFhAbOsQdSfIHjAud6YdkbL69+zSKjw== + dependencies: + undici-types "~5.26.4" + +"@types/prop-types@*": + version "15.7.12" + resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz" + integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== + +"@types/react-copy-to-clipboard@^5.0.7": + version "5.0.7" + resolved "https://registry.npmjs.org/@types/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.7.tgz" + integrity sha512-Gft19D+as4M+9Whq1oglhmK49vqPhcLzk8WfvfLvaYMIPYanyfLy0+CwFucMJfdKoSFyySPmkkWn8/E6voQXjQ== + dependencies: + "@types/react" "*" + +"@types/react-dom@*", "@types/react-dom@^18": + version "18.3.0" + resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz" + integrity sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg== + dependencies: + "@types/react" "*" + +"@types/react-i18next@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@types/react-i18next/-/react-i18next-7.8.3.tgz" + integrity sha512-VPopxbHXz/1Sjl+ljXQQchf6FHXaYLaH0a6TH6KnGOQGD4LzNbUVlofK26S30OIYfYibm8r/sAb2KeTst+AwTQ== + dependencies: + "@types/i18next" "*" + "@types/react" "*" + +"@types/react@*", "@types/react@^16.8.0 || ^17.0.0 || ^18.0.0", "@types/react@^16.9.0 || ^17.0.0 || ^18.0.0", "@types/react@^18.3.1": + version "18.3.1" + resolved "https://registry.npmjs.org/@types/react/-/react-18.3.1.tgz" + integrity sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw== + dependencies: + "@types/prop-types" "*" + csstype "^3.0.2" + +"@typescript-eslint/parser@^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0": + version "7.2.0" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz" + integrity sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg== + dependencies: + "@typescript-eslint/scope-manager" "7.2.0" + "@typescript-eslint/types" "7.2.0" + "@typescript-eslint/typescript-estree" "7.2.0" + "@typescript-eslint/visitor-keys" "7.2.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@7.2.0": + version "7.2.0" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz" + integrity sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg== + dependencies: + "@typescript-eslint/types" "7.2.0" + "@typescript-eslint/visitor-keys" "7.2.0" + +"@typescript-eslint/types@7.2.0": + version "7.2.0" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz" + integrity sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA== + +"@typescript-eslint/typescript-estree@7.2.0": + version "7.2.0" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz" + integrity sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA== + dependencies: + "@typescript-eslint/types" "7.2.0" + "@typescript-eslint/visitor-keys" "7.2.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "9.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/visitor-keys@7.2.0": + version "7.2.0" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz" + integrity sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A== + dependencies: + "@typescript-eslint/types" "7.2.0" + eslint-visitor-keys "^3.4.1" + +"@uidotdev/usehooks@^2.4.1": + version "2.4.1" + resolved "https://registry.npmjs.org/@uidotdev/usehooks/-/usehooks-2.4.1.tgz" + integrity sha512-1I+RwWyS+kdv3Mv0Vmc+p0dPYH0DTRAo04HLyXReYBL9AeseDWUJyi4THuksBJcu9F0Pih69Ak150VDnqbVnXg== + +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + +accepts@~1.3.4: + version "1.3.8" + resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.9.0: + version "8.11.3" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^5.0.2: + version "5.0.2" + resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +aria-hidden@^1.1.1: + version "1.2.4" + resolved "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz" + integrity sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A== + dependencies: + tslib "^2.0.0" + +aria-query@^5.3.0: + version "5.3.0" + resolved "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz" + integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== + dependencies: + dequal "^2.0.3" + +array-buffer-byte-length@^1.0.1: + 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== + dependencies: + call-bind "^1.0.5" + is-array-buffer "^3.0.4" + +array-includes@^3.1.6, array-includes@^3.1.7: + version "3.1.8" + resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz" + integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.findlast@^1.2.4: + version "1.2.5" + resolved "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz" + integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" + +array.prototype.findlastindex@^1.2.3: + version "1.2.5" + resolved "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz" + integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" + +array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: + version "1.3.2" + resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.2: + version "1.3.2" + resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.toreversed@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz" + integrity sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.tosorted@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz" + integrity sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.1.0" + es-shim-unscopables "^1.0.2" + +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" + is-shared-array-buffer "^1.0.2" + +ast-types-flow@^0.0.8: + version "0.0.8" + resolved "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz" + integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +available-typed-arrays@^1.0.7: + 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== + dependencies: + possible-typed-array-names "^1.0.0" + +axe-core@=4.7.0: + version "4.7.0" + resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz" + integrity sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ== + +axios@^1.6.8: + version "1.7.7" + resolved "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz" + integrity sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +axobject-query@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz" + integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== + dependencies: + dequal "^2.0.3" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64id@~2.0.0, base64id@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz" + integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== + +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + +brace-expansion@^1.1.7: + 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" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz" + integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== + +busboy@1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz" + integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== + dependencies: + streamsearch "^1.1.0" + +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase-css@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +caniuse-lite@^1.0.30001579: + version "1.0.30001616" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001616.tgz" + integrity sha512-RHVYKov7IcdNjVHJFNY/78RdG4oGVjbayxv8u5IO74Wv7Hlq4PnJE6mo/OjFijjVFNy5ijnCt6H3IIo4t+wfEw== + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chart.js@^4.1.1, chart.js@^4.4.3, chart.js@>=2.8.0, chart.js@>=3.0.0: + version "4.4.3" + resolved "https://registry.npmjs.org/chart.js/-/chart.js-4.4.3.tgz" + integrity sha512-qK1gkGSRYcJzqrrzdR6a+I0vQ4/R+SoODXyAjscQ/4mzuNzySaMCd+hyVxitSY1+L2fjPD1Gbn+ibNqRmwQeLw== + dependencies: + "@kurkle/color" "^0.3.0" + +chartjs-adapter-date-fns@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/chartjs-adapter-date-fns/-/chartjs-adapter-date-fns-3.0.0.tgz" + integrity sha512-Rs3iEB3Q5pJ973J93OBTpnP7qoGwvq3nUnoMdtxO+9aoJof7UFcRbWcIDteXuYd1fgAvct/32T9qaLyLuZVwCg== + +chartjs-chart-matrix@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/chartjs-chart-matrix/-/chartjs-chart-matrix-2.0.1.tgz" + integrity sha512-BGfeY+/PHnITyDlc7WfnKJ1RyOfgOzIqWp/gxzzl7pUjyoGzHDcw51qd2xJF9gdT9Def7ZwOnOMm8GJUXDxI0w== + +chokidar@^3.5.3: + version "3.6.0" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +class-variance-authority@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.0.tgz" + integrity sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A== + dependencies: + clsx "2.0.0" + +client-only@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz" + integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== + +clsx@^2.0.0, clsx@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz" + integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== + +clsx@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz" + integrity sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q== + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.9.0: + version "1.9.1" + resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/color/-/color-4.2.3.tgz" + integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== + dependencies: + color-convert "^2.0.1" + color-string "^1.9.0" + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^4.0.0: + version "4.1.1" + resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +commander@7: + version "7.2.0" + resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +cookie@~0.7.2: + version "0.7.2" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz" + integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== + +copy-to-clipboard@^3.3.1: + version "3.3.3" + resolved "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz" + integrity sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA== + dependencies: + toggle-selection "^1.0.6" + +core-js@^3: + version "3.39.0" + resolved "https://registry.npmjs.org/core-js/-/core-js-3.39.0.tgz" + integrity sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g== + +cors@^2.8.5, cors@~2.8.5: + version "2.8.5" + resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +cross-spawn@^7.0.0, cross-spawn@^7.0.2: + version "7.0.5" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz" + integrity sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +csstype@^3.0.2: + version "3.1.3" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + +d3-array@^3.1.6, d3-array@^3.2.0, "d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@3: + version "3.2.4" + resolved "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz" + integrity sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg== + dependencies: + internmap "1 - 2" + +d3-axis@3: + version "3.0.0" + resolved "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz" + integrity sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw== + +d3-brush@3: + version "3.0.0" + resolved "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz" + integrity sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ== + dependencies: + d3-dispatch "1 - 3" + d3-drag "2 - 3" + d3-interpolate "1 - 3" + d3-selection "3" + d3-transition "3" + +d3-chord@3: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz" + integrity sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g== + dependencies: + d3-path "1 - 3" + +d3-collection@^1.0.4: + version "1.0.7" + resolved "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz" + integrity sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A== + +"d3-color@1 - 3", d3-color@3: + version "3.1.0" + resolved "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz" + integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA== + +d3-contour@4: + version "4.0.2" + resolved "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz" + integrity sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA== + dependencies: + d3-array "^3.2.0" + +d3-delaunay@6: + version "6.0.4" + resolved "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz" + integrity sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A== + dependencies: + delaunator "5" + +"d3-dispatch@1 - 3", d3-dispatch@3: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz" + integrity sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg== + +"d3-drag@2 - 3", d3-drag@3: + version "3.0.0" + resolved "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz" + integrity sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg== + dependencies: + d3-dispatch "1 - 3" + d3-selection "3" + +"d3-dsv@1 - 3", d3-dsv@3: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz" + integrity sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q== + dependencies: + commander "7" + iconv-lite "0.6" + rw "1" + +d3-ease@^3.0.1, "d3-ease@1 - 3", d3-ease@3: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz" + integrity sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w== + +d3-fetch@3: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz" + integrity sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw== + dependencies: + d3-dsv "1 - 3" + +d3-force@3: + version "3.0.0" + resolved "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz" + integrity sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg== + dependencies: + d3-dispatch "1 - 3" + d3-quadtree "1 - 3" + d3-timer "1 - 3" + +"d3-format@1 - 3", d3-format@3: + version "3.1.0" + resolved "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz" + integrity sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA== + +d3-geo@3: + version "3.1.1" + resolved "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz" + integrity sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q== + dependencies: + d3-array "2.5.0 - 3" + +d3-hierarchy@3: + version "3.1.2" + resolved "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz" + integrity sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA== + +d3-interpolate@^3.0.1, "d3-interpolate@1 - 3", "d3-interpolate@1.2.0 - 3", d3-interpolate@3: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz" + integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g== + dependencies: + d3-color "1 - 3" + +d3-path@^3.1.0, "d3-path@1 - 3", d3-path@3: + version "3.1.0" + resolved "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz" + integrity sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ== + +d3-polygon@3: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz" + integrity sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg== + +"d3-quadtree@1 - 3", d3-quadtree@3: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz" + integrity sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw== + +d3-random@3: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz" + integrity sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ== + +d3-scale-chromatic@3: + version "3.1.0" + resolved "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz" + integrity sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ== + dependencies: + d3-color "1 - 3" + d3-interpolate "1 - 3" + +d3-scale@^4.0.2, d3-scale@4: + version "4.0.2" + resolved "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz" + integrity sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ== + dependencies: + d3-array "2.10.0 - 3" + d3-format "1 - 3" + d3-interpolate "1.2.0 - 3" + d3-time "2.1.1 - 3" + d3-time-format "2 - 4" + +d3-selection@^1.3.0: + version "1.4.2" + resolved "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz" + integrity sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg== + +"d3-selection@2 - 3", d3-selection@3: + version "3.0.0" + resolved "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz" + integrity sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ== + +d3-shape@^3.1.0, d3-shape@3: + version "3.2.0" + resolved "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz" + integrity sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA== + dependencies: + d3-path "^3.1.0" + +"d3-time-format@2 - 4", d3-time-format@4: + version "4.1.0" + resolved "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz" + integrity sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg== + dependencies: + d3-time "1 - 3" + +d3-time@^3.0.0, "d3-time@1 - 3", "d3-time@2.1.1 - 3", d3-time@3: + version "3.1.0" + resolved "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz" + integrity sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q== + dependencies: + d3-array "2 - 3" + +d3-timer@^3.0.1, "d3-timer@1 - 3", d3-timer@3: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz" + integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA== + +d3-tip@^0.9.1: + version "0.9.1" + resolved "https://registry.npmjs.org/d3-tip/-/d3-tip-0.9.1.tgz" + integrity sha512-EVBfG9d+HnjIoyVXfhpytWxlF59JaobwizqMX9EBXtsFmJytjwHeYiUs74ldHQjE7S9vzfKTx2LCtvUrIbuFYg== + dependencies: + d3-collection "^1.0.4" + d3-selection "^1.3.0" + +"d3-transition@2 - 3", d3-transition@3: + version "3.0.1" + resolved "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz" + integrity sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w== + dependencies: + d3-color "1 - 3" + d3-dispatch "1 - 3" + d3-ease "1 - 3" + d3-interpolate "1 - 3" + d3-timer "1 - 3" + +d3-zoom@3: + version "3.0.0" + resolved "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz" + integrity sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw== + dependencies: + d3-dispatch "1 - 3" + d3-drag "2 - 3" + d3-interpolate "1 - 3" + d3-selection "2 - 3" + d3-transition "2 - 3" + +d3@^7.9.0: + version "7.9.0" + resolved "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz" + integrity sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA== + dependencies: + d3-array "3" + d3-axis "3" + d3-brush "3" + d3-chord "3" + d3-color "3" + d3-contour "4" + d3-delaunay "6" + d3-dispatch "3" + d3-drag "3" + d3-dsv "3" + d3-ease "3" + d3-fetch "3" + d3-force "3" + d3-format "3" + d3-geo "3" + d3-hierarchy "3" + d3-interpolate "3" + d3-path "3" + d3-polygon "3" + d3-quadtree "3" + d3-random "3" + d3-scale "4" + d3-scale-chromatic "3" + d3-selection "3" + d3-shape "3" + d3-time "3" + d3-time-format "4" + d3-timer "3" + d3-transition "3" + d3-zoom "3" + +damerau-levenshtein@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz" + integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== + +data-view-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz" + integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz" + integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz" + integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +date-fns@>=2.0.0: + version "3.6.0" + resolved "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz" + integrity sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww== + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@~4.3.4: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decimal.js-light@^2.4.1: + version "2.5.1" + resolved "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz" + integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg== + +deeks@3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/deeks/-/deeks-3.1.0.tgz" + integrity sha512-e7oWH1LzIdv/prMQ7pmlDlaVoL64glqzvNgkgQNgyec9ORPHrT2jaOqMtRyqJuwWjtfb6v+2rk9pmaHj+F137A== + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +define-data-property@^1.0.1, define-data-property@^1.1.4: + 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== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-properties@^1.2.0, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delaunator@5: + version "5.0.1" + resolved "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz" + integrity sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw== + dependencies: + robust-predicates "^3.0.2" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +dequal@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + +detect-libc@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz" + integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== + +detect-node-es@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz" + integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== + +didyoumean@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz" + integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dlv@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz" + integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== + +doc-path@4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/doc-path/-/doc-path-4.1.1.tgz" + integrity sha512-h1ErTglQAVv2gCnOpD3sFS6uolDbOKHDU1BZq+Kl3npPqroU3dYL42lUgMfd5UimlwtRgp7C9dLGwqQ5D2HYgQ== + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-helpers@^5.0.1: + version "5.2.1" + resolved "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz" + integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== + dependencies: + "@babel/runtime" "^7.8.7" + csstype "^3.0.2" + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ecdsa-sig-formatter@1.0.11: + version "1.0.11" + resolved "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +engine.io-client@~6.6.1: + version "6.6.1" + resolved "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.1.tgz" + integrity sha512-aYuoak7I+R83M/BBPIOs2to51BmFIpC1wZe6zZzMrT2llVsHy5cvcmdsJgP2Qz6smHu+sD9oexiSUAVd8OfBPw== + dependencies: + "@socket.io/component-emitter" "~3.1.0" + debug "~4.3.1" + engine.io-parser "~5.2.1" + ws "~8.17.1" + xmlhttprequest-ssl "~2.1.1" + +engine.io-parser@~5.2.1: + version "5.2.3" + resolved "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz" + integrity sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q== + +engine.io@~6.6.0: + version "6.6.2" + resolved "https://registry.npmjs.org/engine.io/-/engine.io-6.6.2.tgz" + integrity sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw== + dependencies: + "@types/cookie" "^0.4.1" + "@types/cors" "^2.8.12" + "@types/node" ">=10.0.0" + accepts "~1.3.4" + base64id "2.0.0" + cookie "~0.7.2" + cors "~2.8.5" + debug "~4.3.1" + engine.io-parser "~5.2.1" + ws "~8.17.1" + +enhanced-resolve@^5.12.0: + version "5.16.1" + resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz" + integrity sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: + version "1.23.3" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz" + integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.0.3" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + hasown "^2.0.2" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" + is-callable "^1.2.7" + is-data-view "^1.0.1" + is-negative-zero "^2.0.3" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.3" + is-string "^1.0.7" + is-typed-array "^1.1.13" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.2" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.6" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.15" + +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-iterator-helpers@^1.0.15, es-iterator-helpers@^1.0.17: + version "1.0.19" + resolved "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz" + integrity sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.3" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.3" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + globalthis "^1.0.3" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + internal-slot "^1.0.7" + iterator.prototype "^1.1.2" + safe-array-concat "^1.1.2" + +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.0.3: + 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== + dependencies: + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" + +es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-next@14.2.3: + version "14.2.3" + resolved "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.3.tgz" + integrity sha512-ZkNztm3Q7hjqvB1rRlOX8P9E/cXRL9ajRcs8jufEtwMfTVYRqnmtnaSu57QqHyBlovMuiB8LEzfLBkh5RYV6Fg== + dependencies: + "@next/eslint-plugin-next" "14.2.3" + "@rushstack/eslint-patch" "^1.3.3" + "@typescript-eslint/parser" "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0" + eslint-import-resolver-node "^0.3.6" + eslint-import-resolver-typescript "^3.5.2" + eslint-plugin-import "^2.28.1" + eslint-plugin-jsx-a11y "^6.7.1" + eslint-plugin-react "^7.33.2" + eslint-plugin-react-hooks "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" + +eslint-import-resolver-node@^0.3.6, eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-import-resolver-typescript@^3.5.2: + version "3.6.1" + resolved "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz" + integrity sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg== + dependencies: + debug "^4.3.4" + enhanced-resolve "^5.12.0" + eslint-module-utils "^2.7.4" + fast-glob "^3.3.1" + get-tsconfig "^4.5.0" + is-core-module "^2.11.0" + is-glob "^4.0.3" + +eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0: + version "2.8.1" + resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz" + integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q== + dependencies: + debug "^3.2.7" + +eslint-plugin-import@*, eslint-plugin-import@^2.28.1: + version "2.29.1" + resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz" + integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== + dependencies: + array-includes "^3.1.7" + array.prototype.findlastindex "^1.2.3" + array.prototype.flat "^1.3.2" + array.prototype.flatmap "^1.3.2" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.9" + eslint-module-utils "^2.8.0" + hasown "^2.0.0" + is-core-module "^2.13.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.7" + object.groupby "^1.0.1" + object.values "^1.1.7" + semver "^6.3.1" + tsconfig-paths "^3.15.0" + +eslint-plugin-jsx-a11y@^6.7.1: + version "6.8.0" + resolved "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz" + integrity sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA== + dependencies: + "@babel/runtime" "^7.23.2" + aria-query "^5.3.0" + array-includes "^3.1.7" + array.prototype.flatmap "^1.3.2" + ast-types-flow "^0.0.8" + axe-core "=4.7.0" + axobject-query "^3.2.1" + damerau-levenshtein "^1.0.8" + emoji-regex "^9.2.2" + es-iterator-helpers "^1.0.15" + hasown "^2.0.0" + jsx-ast-utils "^3.3.5" + language-tags "^1.0.9" + minimatch "^3.1.2" + object.entries "^1.1.7" + object.fromentries "^2.0.7" + +"eslint-plugin-react-hooks@^4.5.0 || 5.0.0-canary-7118f5dd7-20230705": + version "4.6.2" + resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz" + integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== + +eslint-plugin-react@^7.33.2: + version "7.34.1" + resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz" + integrity sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw== + dependencies: + array-includes "^3.1.7" + array.prototype.findlast "^1.2.4" + array.prototype.flatmap "^1.3.2" + array.prototype.toreversed "^1.1.2" + array.prototype.tosorted "^1.1.3" + doctrine "^2.1.0" + es-iterator-helpers "^1.0.17" + estraverse "^5.3.0" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.7" + object.fromentries "^2.0.7" + object.hasown "^1.1.3" + object.values "^1.1.7" + prop-types "^15.8.1" + resolve "^2.0.0-next.5" + semver "^6.3.1" + string.prototype.matchall "^4.0.10" + +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@*, "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8", "eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.23.0 || ^8.0.0", eslint@^8, eslint@^8.56.0: + version "8.57.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eventemitter3@^4.0.1: + version "4.0.7" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +export-to-csv@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/export-to-csv/-/export-to-csv-1.3.0.tgz" + integrity sha512-msPjbfozZdYzDghAEKmCVH5veMeKHNacplE6noXvGiA8AeV1qa/SOxp6JXDjF9R8Kf6v3ypI6jskiY19dkhZeA== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-equals@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz" + integrity sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ== + +fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.1: + version "3.3.2" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.17.1" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + dependencies: + reusify "^1.0.4" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.2.0" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flatted@^3.2.9: + version "3.3.1" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== + +follow-redirects@^1.15.6: + version "1.15.6" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.5, function.prototype.name@^1.1.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== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +get-nonce@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz" + integrity sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== + +get-symbol-description@^1.0.2: + 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== + dependencies: + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + +get-tsconfig@^4.5.0: + version "4.7.4" + resolved "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.4.tgz" + integrity sha512-ofbkKj+0pjXjhejr007J/fLf+sW+8H7K5GCm+msC8q3IpvgjobpyPqSRFemNyIMxklC0zeJpi7VDFna19FacvQ== + dependencies: + resolve-pkg-maps "^1.0.0" + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@^10.3.10, glob@10.3.10: + version "10.3.10" + resolved "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz" + integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.5" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.1" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + 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" + +globals@^13.19.0: + version "13.24.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== + dependencies: + define-properties "^1.2.1" + gopd "^1.0.1" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@^4.2.11, graceful-fs@^4.2.4: + version "4.2.11" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.0.1, has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: + version "3.3.2" + resolved "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +html-parse-stringify@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz" + integrity sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg== + dependencies: + void-elements "3.1.0" + +i18next-fs-backend@^2.3.2: + version "2.3.2" + resolved "https://registry.npmjs.org/i18next-fs-backend/-/i18next-fs-backend-2.3.2.tgz" + integrity sha512-LIwUlkqDZnUI8lnUxBnEj8K/FrHQTT/Sc+1rvDm9E8YvvY5YxzoEAASNx+W5M9DfD5s77lI5vSAFWeTp26B/3Q== + +i18next@^23.16.5, "i18next@>= 23.2.3", "i18next@>= 23.7.13": + version "23.16.5" + resolved "https://registry.npmjs.org/i18next/-/i18next-23.16.5.tgz" + integrity sha512-KTlhE3EP9x6pPTAW7dy0WKIhoCpfOGhRQlO+jttQLgzVaoOjWwBWramu7Pp0i+8wDNduuzXfe3kkVbzrKyrbTA== + dependencies: + "@babel/runtime" "^7.23.2" + +iconv-lite@0.6: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ignore@^5.2.0: + version "5.3.1" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== + +import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.0" + side-channel "^1.0.4" + +"internmap@1 - 2": + version "2.0.3" + resolved "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz" + integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg== + +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-async-function@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz" + integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== + dependencies: + has-tostringtag "^1.0.0" + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.13.1: + version "2.13.1" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + +is-data-view@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz" + integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== + dependencies: + is-typed-array "^1.1.13" + +is-date-object@^1.0.1, is-date-object@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-finalizationregistry@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz" + integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== + dependencies: + call-bind "^1.0.2" + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-function@^1.0.10: + version "1.0.10" + resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== + +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: + 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== + dependencies: + call-bind "^1.0.7" + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.13: + 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== + dependencies: + which-typed-array "^1.1.14" + +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-weakset@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz" + integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +iterator.prototype@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz" + integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== + dependencies: + define-properties "^1.2.1" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + reflect.getprototypeof "^1.0.4" + set-function-name "^2.0.1" + +jackspeak@^2.3.5: + version "2.3.6" + resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jiti@^1.21.0: + version "1.21.0" + resolved "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz" + integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== + +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +json-2-csv@^5.5.1: + version "5.5.1" + resolved "https://registry.npmjs.org/json-2-csv/-/json-2-csv-5.5.1.tgz" + integrity sha512-KgAtAXTQopRwe90gh8SgjRSxgt9bUWbGAPMo9W0TZLA8SqiQH7khtagFfeEUjG3NBPwJu/+9uX5pMvunKaPvrQ== + dependencies: + deeks "3.1.0" + doc-path "4.1.1" + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +jsonwebtoken@^9.0.2: + version "9.0.2" + resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz" + integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== + dependencies: + jws "^3.2.2" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^7.5.4" + +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5: + version "3.3.5" + resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz" + integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== + dependencies: + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + object.assign "^4.1.4" + object.values "^1.1.6" + +jwa@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz" + integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^3.2.2: + version "3.2.2" + resolved "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz" + integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== + dependencies: + jwa "^1.4.1" + safe-buffer "^5.0.1" + +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +language-subtag-registry@^0.3.20: + version "0.3.22" + resolved "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz" + integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== + +language-tags@^1.0.9: + version "1.0.9" + resolved "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz" + integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA== + dependencies: + language-subtag-registry "^0.3.20" + +leaflet-routing-machine@^3.2.12: + version "3.2.12" + resolved "https://registry.npmjs.org/leaflet-routing-machine/-/leaflet-routing-machine-3.2.12.tgz" + integrity sha512-HLde58G1YtD9xSIzZavJ6BPABZaV1hHeGst8ouhzuxmSC3s32NVtADT+njbIUMW1maHRCrsgTk/E4hz5QH7FrA== + dependencies: + "@mapbox/corslite" "0.0.7" + "@mapbox/polyline" "^0.2.0" + osrm-text-instructions "^0.13.2" + +leaflet.markercluster@^1.5.3: + version "1.5.3" + resolved "https://registry.npmjs.org/leaflet.markercluster/-/leaflet.markercluster-1.5.3.tgz" + integrity sha512-vPTw/Bndq7eQHjLBVlWpnGeLa3t+3zGiuM7fJwCkiMFq+nmRuG3RI3f7f4N4TDX7T4NpbAXpR2+NTRSEGfCSeA== + +leaflet@^1.3.1, leaflet@^1.9.4: + version "1.9.4" + resolved "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz" + integrity sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lilconfig@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz" + integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== + +lilconfig@^3.0.0: + version "3.1.1" + resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz" + integrity sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz" + integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz" + integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz" + integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz" + integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz" + integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.once@^4.0.0: + version "4.1.1" + resolved "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz" + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== + +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lru-cache@^10.2.0: + version "10.2.2" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz" + integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== + +lucide-react@^0.378.0: + version "0.378.0" + resolved "https://registry.npmjs.org/lucide-react/-/lucide-react-0.378.0.tgz" + integrity sha512-u6EPU8juLUk9ytRcyapkWI18epAv3RU+6+TC23ivjR0e+glWKBobFeSgRwOIJihzktILQuy6E0E80P2jVTDR5g== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4, micromatch@^4.0.5: + version "4.0.8" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + 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" + +minimatch@^9.0.1: + version "9.0.4" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + dependencies: + brace-expansion "^2.0.1" + +minimatch@9.0.3: + version "9.0.3" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": + version "7.1.0" + resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.0.tgz" + integrity sha512-oGZRv2OT1lO2UF1zUcwdTb3wqUwI0kBGTgt/T7OdSj6M6N5m3o5uPf0AIW6lVxGGoiWUR7e2AwTE+xiwK8WQig== + +ms@^2.1.1, ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +mz@^2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nanoid@^3.3.6, nanoid@^3.3.7: + version "3.3.7" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +next-i18next@^15.3.1: + version "15.3.1" + resolved "https://registry.npmjs.org/next-i18next/-/next-i18next-15.3.1.tgz" + integrity sha512-+pa2pZJb7B6k5PKW3TLVMmAodqkNaOBWVYlpWX56mgcEJz0UMW+MKSdKM9Z72CHp6Bp48g7OWwDnLqxXNp/84w== + dependencies: + "@babel/runtime" "^7.23.2" + "@types/hoist-non-react-statics" "^3.3.4" + core-js "^3" + hoist-non-react-statics "^3.3.2" + i18next-fs-backend "^2.3.2" + +next-themes@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/next-themes/-/next-themes-0.3.0.tgz" + integrity sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w== + +next@^14.2.18, "next@>= 12.0.0": + version "14.2.18" + resolved "https://registry.npmjs.org/next/-/next-14.2.18.tgz" + integrity sha512-H9qbjDuGivUDEnK6wa+p2XKO+iMzgVgyr9Zp/4Iv29lKa+DYaxJGjOeEA+5VOvJh/M7HLiskehInSa0cWxVXUw== + dependencies: + "@next/env" "14.2.18" + "@swc/helpers" "0.5.5" + busboy "1.6.0" + caniuse-lite "^1.0.30001579" + graceful-fs "^4.2.11" + postcss "8.4.31" + styled-jsx "5.1.1" + optionalDependencies: + "@next/swc-darwin-arm64" "14.2.18" + "@next/swc-darwin-x64" "14.2.18" + "@next/swc-linux-arm64-gnu" "14.2.18" + "@next/swc-linux-arm64-musl" "14.2.18" + "@next/swc-linux-x64-gnu" "14.2.18" + "@next/swc-linux-x64-musl" "14.2.18" + "@next/swc-win32-arm64-msvc" "14.2.18" + "@next/swc-win32-ia32-msvc" "14.2.18" + "@next/swc-win32-x64-msvc" "14.2.18" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-hash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz" + integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== + +object-inspect@^1.13.1: + version "1.13.1" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4, object.assign@^4.1.5: + version "4.1.5" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.entries@^1.1.7: + version "1.1.8" + resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz" + integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +object.fromentries@^2.0.7: + version "2.0.8" + resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + +object.groupby@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz" + integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + +object.hasown@^1.1.3: + version "1.1.4" + resolved "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz" + integrity sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg== + dependencies: + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + +object.values@^1.1.6, object.values@^1.1.7: + version "1.2.0" + resolved "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz" + integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.5" + +osrm-text-instructions@^0.13.2: + version "0.13.4" + resolved "https://registry.npmjs.org/osrm-text-instructions/-/osrm-text-instructions-0.13.4.tgz" + integrity sha512-ge4ZTIetMQKAHKq2MwWf83ntzdJN20ndRKRaVNoZ3SkDkBNO99Qddz7r6+hrVx38I+ih6Rk5T1yslczAB6Q9Pg== + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.10.1: + version "1.10.2" + resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz" + integrity sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pirates@^4.0.1: + version "4.0.6" + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + +possible-typed-array-names@^1.0.0: + 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== + +postcss-import@^15.1.0: + version "15.1.0" + resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz" + integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== + dependencies: + postcss-value-parser "^4.0.0" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-js@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz" + integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== + dependencies: + camelcase-css "^2.0.1" + +postcss-load-config@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz" + integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== + dependencies: + lilconfig "^3.0.0" + yaml "^2.3.4" + +postcss-nested@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz" + integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ== + dependencies: + postcss-selector-parser "^6.0.11" + +postcss-selector-parser@^6.0.11: + version "6.0.16" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz" + integrity sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-value-parser@^4.0.0: + version "4.2.0" + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@^8, postcss@^8.0.0, postcss@^8.2.14, postcss@^8.4.21, postcss@^8.4.23, postcss@>=8.0.9: + version "8.4.38" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz" + integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.0" + source-map-js "^1.2.0" + +postcss@8.4.31: + version "8.4.31" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz" + integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prop-types@^15.6.2, prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +react-chartjs-2@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-5.2.0.tgz" + integrity sha512-98iN5aguJyVSxp5U3CblRLH67J8gkfyGNbiK3c+l1QI/G4irHMPQw44aEPmjVag+YKTyQ260NcF82GTQ3bdscA== + +react-copy-to-clipboard@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz" + integrity sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A== + dependencies: + copy-to-clipboard "^3.3.1" + prop-types "^15.8.1" + +"react-dom@^16.0.0 || ^17.0.0 || ^18.0.0", "react-dom@^16.8 || ^17 || ^18", "react-dom@^16.8 || ^17.0 || ^18.0", "react-dom@^16.8.0 || ^17.0.0 || ^18.0.0", react-dom@^18, react-dom@^18.0.0, react-dom@^18.2.0, react-dom@>=16.6.0, react-dom@>=16.8, react-dom@>=16.8.0, react-dom@>=18.0.0: + version "18.3.1" + resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz" + integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.2" + +react-i18next@^15.1.1, "react-i18next@>= 13.5.0": + version "15.1.1" + resolved "https://registry.npmjs.org/react-i18next/-/react-i18next-15.1.1.tgz" + integrity sha512-R/Vg9wIli2P3FfeI8o1eNJUJue5LWpFsQePCHdQDmX0Co3zkr6kdT8gAseb/yGeWbNz1Txc4bKDQuZYsC0kQfw== + dependencies: + "@babel/runtime" "^7.25.0" + html-parse-stringify "^3.0.1" + +react-is@^16.10.2, react-is@^16.13.1, react-is@^16.7.0: + version "16.13.1" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-remove-scroll-bar@^2.3.3: + version "2.3.6" + resolved "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz" + integrity sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g== + dependencies: + react-style-singleton "^2.2.1" + tslib "^2.0.0" + +react-remove-scroll@2.5.5: + version "2.5.5" + resolved "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz" + integrity sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw== + dependencies: + react-remove-scroll-bar "^2.3.3" + react-style-singleton "^2.2.1" + tslib "^2.1.0" + use-callback-ref "^1.3.0" + use-sidecar "^1.1.2" + +react-router-dom@^6.24.0: + version "6.24.0" + resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.24.0.tgz" + integrity sha512-960sKuau6/yEwS8e+NVEidYQb1hNjAYM327gjEyXlc6r3Skf2vtwuJ2l7lssdegD2YjoKG5l8MsVyeTDlVeY8g== + dependencies: + "@remix-run/router" "1.17.0" + react-router "6.24.0" + +react-router@6.24.0: + version "6.24.0" + resolved "https://registry.npmjs.org/react-router/-/react-router-6.24.0.tgz" + integrity sha512-sQrgJ5bXk7vbcC4BxQxeNa5UmboFm35we1AFK0VvQaz9g0LzxEIuLOhHIoZ8rnu9BO21ishGeL9no1WB76W/eg== + dependencies: + "@remix-run/router" "1.17.0" + +react-smooth@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.1.tgz" + integrity sha512-OE4hm7XqR0jNOq3Qmk9mFLyd6p2+j6bvbPJ7qlB7+oo0eNcL2l7WQzG6MBnT3EXY6xzkLMUBec3AfewJdA0J8w== + dependencies: + fast-equals "^5.0.1" + prop-types "^15.8.1" + react-transition-group "^4.4.5" + +react-style-singleton@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz" + integrity sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g== + dependencies: + get-nonce "^1.0.0" + invariant "^2.2.4" + tslib "^2.0.0" + +react-transition-group@^4.4.5: + version "4.4.5" + resolved "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz" + integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== + dependencies: + "@babel/runtime" "^7.5.5" + dom-helpers "^5.0.1" + loose-envify "^1.4.0" + prop-types "^15.6.2" + +"react@^15.3.0 || 16 || 17 || 18", "react@^16.0.0 || ^17.0.0 || ^18.0.0", "react@^16.5.1 || ^17.0.0 || ^18.0.0", "react@^16.8 || ^17 || ^18", "react@^16.8 || ^17.0 || ^18.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0", react@^18, react@^18.0.0, react@^18.2.0, react@^18.3.1, "react@>= 16.8.0", "react@>= 16.8.0 || 17.x.x || ^18.0.0-0", "react@>= 17.0.2", react@>=16.6.0, react@>=16.8, react@>=16.8.0, react@>=18.0.0: + version "18.3.1" + resolved "https://registry.npmjs.org/react/-/react-18.3.1.tgz" + integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== + dependencies: + loose-envify "^1.1.0" + +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz" + integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== + dependencies: + pify "^2.3.0" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +recharts-scale@^0.4.4: + version "0.4.5" + resolved "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz" + integrity sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w== + dependencies: + decimal.js-light "^2.4.1" + +recharts@^2.12.6: + version "2.12.6" + resolved "https://registry.npmjs.org/recharts/-/recharts-2.12.6.tgz" + integrity sha512-D+7j9WI+D0NHauah3fKHuNNcRK8bOypPW7os1DERinogGBGaHI7i6tQKJ0aUF3JXyBZ63dyfKIW2WTOPJDxJ8w== + dependencies: + clsx "^2.0.0" + eventemitter3 "^4.0.1" + lodash "^4.17.21" + react-is "^16.10.2" + react-smooth "^4.0.0" + recharts-scale "^0.4.4" + tiny-invariant "^1.3.1" + victory-vendor "^36.6.8" + +reflect.getprototypeof@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz" + integrity sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.1" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + globalthis "^1.0.3" + which-builtin-type "^1.1.3" + +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + +regexp.prototype.flags@^1.5.2: + 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== + dependencies: + call-bind "^1.0.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" + +remove-accents@0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/remove-accents/-/remove-accents-0.5.0.tgz" + integrity sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A== + +resize-observer-polyfill@^1.5.1: + version "1.5.1" + resolved "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + +resolve@^1.1.7, resolve@^1.22.2, resolve@^1.22.4: + version "1.22.8" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +resolve@^2.0.0-next.5: + version "2.0.0-next.5" + resolved "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz" + integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +robust-predicates@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz" + integrity sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rw@1: + version "1.3.3" + resolved "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz" + integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ== + +safe-array-concat@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz" + integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + has-symbols "^1.0.3" + isarray "^2.0.5" + +safe-buffer@^5.0.1: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-regex "^1.1.4" + +"safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +scheduler@^0.23.2: + version "0.23.2" + resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz" + integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== + dependencies: + loose-envify "^1.1.0" + +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.5.4, semver@^7.6.0: + version "7.6.1" + resolved "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz" + integrity sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA== + +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.1, set-function-name@^2.0.2: + 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== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +sharp@^0.33.4: + version "0.33.4" + resolved "https://registry.npmjs.org/sharp/-/sharp-0.33.4.tgz" + integrity sha512-7i/dt5kGl7qR4gwPRD2biwD2/SvBn3O04J77XKFgL2OnZtQw+AG9wnuS/csmu80nPRHLYE9E41fyEiG8nhH6/Q== + dependencies: + color "^4.2.3" + detect-libc "^2.0.3" + semver "^7.6.0" + optionalDependencies: + "@img/sharp-darwin-arm64" "0.33.4" + "@img/sharp-darwin-x64" "0.33.4" + "@img/sharp-libvips-darwin-arm64" "1.0.2" + "@img/sharp-libvips-darwin-x64" "1.0.2" + "@img/sharp-libvips-linux-arm" "1.0.2" + "@img/sharp-libvips-linux-arm64" "1.0.2" + "@img/sharp-libvips-linux-s390x" "1.0.2" + "@img/sharp-libvips-linux-x64" "1.0.2" + "@img/sharp-libvips-linuxmusl-arm64" "1.0.2" + "@img/sharp-libvips-linuxmusl-x64" "1.0.2" + "@img/sharp-linux-arm" "0.33.4" + "@img/sharp-linux-arm64" "0.33.4" + "@img/sharp-linux-s390x" "0.33.4" + "@img/sharp-linux-x64" "0.33.4" + "@img/sharp-linuxmusl-arm64" "0.33.4" + "@img/sharp-linuxmusl-x64" "0.33.4" + "@img/sharp-wasm32" "0.33.4" + "@img/sharp-win32-ia32" "0.33.4" + "@img/sharp-win32-x64" "0.33.4" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4, side-channel@^1.0.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== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" + +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +socket.io-adapter@~2.5.2: + version "2.5.5" + resolved "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz" + integrity sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg== + dependencies: + debug "~4.3.4" + ws "~8.17.1" + +socket.io-client@^4.8.0: + version "4.8.0" + resolved "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.0.tgz" + integrity sha512-C0jdhD5yQahMws9alf/yvtsMGTaIDBnZ8Rb5HU56svyq0l5LIrGzIDZZD5pHQlmzxLuU91Gz+VpQMKgCTNYtkw== + dependencies: + "@socket.io/component-emitter" "~3.1.0" + debug "~4.3.2" + engine.io-client "~6.6.1" + socket.io-parser "~4.2.4" + +socket.io-parser@~4.2.4: + version "4.2.4" + resolved "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz" + integrity sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew== + dependencies: + "@socket.io/component-emitter" "~3.1.0" + debug "~4.3.1" + +socket.io@^4.8.0: + version "4.8.0" + resolved "https://registry.npmjs.org/socket.io/-/socket.io-4.8.0.tgz" + integrity sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA== + dependencies: + accepts "~1.3.4" + base64id "~2.0.0" + cors "~2.8.5" + debug "~4.3.2" + engine.io "~6.6.0" + socket.io-adapter "~2.5.2" + socket.io-parser "~4.2.4" + +sonner@^1.4.41: + version "1.4.41" + resolved "https://registry.npmjs.org/sonner/-/sonner-1.4.41.tgz" + integrity sha512-uG511ggnnsw6gcn/X+YKkWPo5ep9il9wYi3QJxHsYe7yTZ4+cOd1wuodOUmOpFuXL+/RE3R04LczdNCDygTDgQ== + +source-map-js@^1.0.2, source-map-js@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz" + integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== + +streamsearch@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" + integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== + +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.1.0: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string.prototype.matchall@^4.0.10: + version "4.0.11" + resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz" + integrity sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.7" + regexp.prototype.flags "^1.5.2" + set-function-name "^2.0.2" + side-channel "^1.0.6" + +string.prototype.trim@^1.2.9: + version "1.2.9" + resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz" + integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" + +string.prototype.trimend@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz" + integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +styled-jsx@5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz" + integrity sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw== + dependencies: + client-only "0.0.1" + +sucrase@^3.32.0: + version "3.35.0" + resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz" + integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== + dependencies: + "@jridgewell/gen-mapping" "^0.3.2" + commander "^4.0.0" + glob "^10.3.10" + lines-and-columns "^1.1.6" + mz "^2.7.0" + pirates "^4.0.1" + ts-interface-checker "^0.1.9" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +tailwind-merge@^2.3.0: + 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.1" + +tailwindcss-animate@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz" + integrity sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA== + +tailwindcss@^3.4.1, "tailwindcss@>=3.0.0 || insiders": + version "3.4.3" + resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz" + integrity sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A== + dependencies: + "@alloc/quick-lru" "^5.2.0" + arg "^5.0.2" + chokidar "^3.5.3" + didyoumean "^1.2.2" + dlv "^1.1.3" + fast-glob "^3.3.0" + glob-parent "^6.0.2" + is-glob "^4.0.3" + jiti "^1.21.0" + lilconfig "^2.1.0" + micromatch "^4.0.5" + normalize-path "^3.0.0" + object-hash "^3.0.0" + picocolors "^1.0.0" + postcss "^8.4.23" + postcss-import "^15.1.0" + postcss-js "^4.0.1" + postcss-load-config "^4.0.1" + postcss-nested "^6.0.1" + postcss-selector-parser "^6.0.11" + resolve "^1.22.2" + sucrase "^3.32.0" + +tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +tiny-invariant@^1.3.1: + version "1.3.3" + resolved "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz" + integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toggle-selection@^1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz" + integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== + +ts-api-utils@^1.0.1: + version "1.3.0" + resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz" + integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== + +ts-interface-checker@^0.1.9: + version "0.1.13" + resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz" + integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== + +tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0: + version "2.6.2" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +typed-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" + +typed-array-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-byte-offset@^1.0.2: + 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== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-length@^1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz" + integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + +typescript@^5, typescript@>=3.3.1, typescript@>=4.2.0: + version "5.4.5" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz" + integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +use-callback-ref@^1.3.0: + version "1.3.2" + resolved "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz" + integrity sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA== + dependencies: + tslib "^2.0.0" + +use-sidecar@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz" + integrity sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw== + dependencies: + detect-node-es "^1.1.0" + tslib "^2.0.0" + +util-deprecate@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +vary@^1: + version "1.1.2" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +victory-vendor@^36.6.8: + version "36.9.2" + resolved "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz" + integrity sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ== + dependencies: + "@types/d3-array" "^3.0.3" + "@types/d3-ease" "^3.0.0" + "@types/d3-interpolate" "^3.0.1" + "@types/d3-scale" "^4.0.2" + "@types/d3-shape" "^3.1.0" + "@types/d3-time" "^3.0.0" + "@types/d3-timer" "^3.0.0" + d3-array "^3.1.6" + d3-ease "^3.0.1" + d3-interpolate "^3.0.1" + d3-scale "^4.0.2" + d3-shape "^3.1.0" + d3-time "^3.0.0" + d3-timer "^3.0.1" + +void-elements@3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz" + integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-builtin-type@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz" + integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== + dependencies: + function.prototype.name "^1.1.5" + has-tostringtag "^1.0.0" + is-async-function "^2.0.0" + is-date-object "^1.0.5" + is-finalizationregistry "^1.0.2" + is-generator-function "^1.0.10" + is-regex "^1.1.4" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.9" + +which-collection@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== + dependencies: + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" + +which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9: + version "1.1.15" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz" + integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.2" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@~8.17.1: + version "8.17.1" + resolved "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz" + integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== + +xmlhttprequest-ssl@~2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.1.tgz" + integrity sha512-ptjR8YSJIXoA3Mbv5po7RtSYHO6mZr8s7i5VGmEk7QY2pQWyT1o0N+W1gKbOyJPUCGXGnuw0wqe8f0L6Y0ny7g== + +yaml@^2.3.4: + version "2.4.2" + resolved "https://registry.npmjs.org/yaml/-/yaml-2.4.2.tgz" + integrity sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 988f6e3cc14dc2fd402488bf3344b14ab883785f Mon Sep 17 00:00:00 2001 From: Ammar Yousaf Date: Wed, 20 Nov 2024 15:57:03 +0100 Subject: [PATCH 17/74] Updated Map.tsx with optimized logic --- components/Map.tsx | 131 ++++++++++++++++++++------------------------- 1 file changed, 59 insertions(+), 72 deletions(-) diff --git a/components/Map.tsx b/components/Map.tsx index 3dc2cb8..7e3698e 100644 --- a/components/Map.tsx +++ b/components/Map.tsx @@ -147,11 +147,11 @@ const addMarkersToMap = async ( } = createBinIcons(L); const token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3M2IwYTE2ZTVlOWY3MDhkMDQzZGJlMCIsInJvbGUiOiJTVVBFUkFETUlOIiwiaWF0IjoxNzMxOTIyNTU2LCJleHAiOjE3MzIwOTUzNTZ9.OyewrDIj8_OstP4IDrPglKkNbQLwh6_7V3eZjn_iT0I"; - const oneWeekAgo = new Date(); oneWeekAgo.setDate(oneWeekAgo.getDate() - 7); - const fetchSensorHistory = async (sensorId: string) => { + // Helper function to fetch sensor history + const fetchSensorHistory = async (sensorId: string): Promise => { try { const response = await fetch( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/history/sensor/${sensorId}`, @@ -161,19 +161,20 @@ const addMarkersToMap = async ( }, } ); - if (response.status === 404) { - console.warn(`No data found for sensorId: ${sensorId}`); - return []; - } if (!response.ok) { - console.error(`Failed to fetch data for sensorId: ${sensorId}`); + if (response.status === 404) { + console.warn(`No data found for sensorId: ${sensorId}`); + } else { + console.error(`Failed to fetch data for sensorId: ${sensorId}`); + } return []; } const data = await response.json(); return data.map((item: any) => ({ - timestamp: new Date(item.createdAt), + timestamp: new Date(item.createdAt), // Convert to Date object measurement: item.measurement, measureType: item.measureType, + sensor: item.sensor, })); } catch (error) { console.error(`Error fetching sensor history for sensorId ${sensorId}`, error); @@ -181,10 +182,8 @@ const addMarkersToMap = async ( } }; - const seenCoordinates = new Set(); - + const seenCoordinates = new Set(); const filteredTrashbinData = trashbinData.filter((trashbin) => { - // Validate that coordinates are within valid ranges if ( !trashbin.coordinates || trashbin.coordinates[0] === null || @@ -196,87 +195,76 @@ const addMarkersToMap = async ( ) { return false; } - - // Format the coordinates as a string to ensure uniqueness const coordinateKey = `${trashbin.coordinates[0].toFixed(6)},${trashbin.coordinates[1].toFixed(6)}`; - - // Check if this coordinate has already been seen if (seenCoordinates.has(coordinateKey)) { - return false; // Skip if duplicate + return false; } - - // Otherwise, add it to the set and include it in the result seenCoordinates.add(coordinateKey); return true; }); - - - const addedMarkers = new Set(); if (markersRef.current) { - markersRef.current.clearLayers(); // Clear markers already added to the map + markersRef.current.clearLayers(); // Clear existing markers } - console.log("Trashbin data length:", trashbinData.length); - console.log("Unique coordinates:", new Set(trashbinData.map(bin => `${bin.coordinates[0].toFixed(6)},${bin.coordinates[1].toFixed(6)}`)).size); + const addedMarkers = new Set(); for (const trashbin of filteredTrashbinData) { const coordinateKey = `${trashbin.coordinates[0].toFixed(6)},${trashbin.coordinates[1].toFixed(6)}`; - // console.log("Trashbin data length:", trashbinData.length); - //console.log("Unique coordinates:", new Set(trashbinData.map(bin => `${bin.coordinates[0].toFixed(6)},${bin.coordinates[1].toFixed(6)}`)).size); - + if (addedMarkers.has(coordinateKey)) { - continue; + continue; // Skip duplicates } addedMarkers.add(coordinateKey); - let isDataMissing = false; - let isOldData = false; - - if ( - !trashbin.fillLevel || + // Check if required data is missing + const isDataMissing = + !trashbin.name || !trashbin.coordinates || - !trashbin.identifier || - !trashbin.sensors?.length - ) { - isDataMissing = true; - } else { - for (const sensorId of trashbin.sensors) { - const historyData = await fetchSensorHistory(sensorId); - - if (historyData.length > 0) { - historyData.forEach((data: { measureType: string; timestamp: string | number | Date }) => { - if (data.measureType === "fill_level" || data.measureType === "battery_level") { - const lastHistoryDate = new Date(data.timestamp); - if (lastHistoryDate < oneWeekAgo) { - isOldData = true; - } - } - }); - } else { - isDataMissing = true; - } - } + trashbin.coordinates.length !== 2 || + !trashbin.sensors?.length; + + let allSensorsHaveOldData = false; + + if (!isDataMissing && trashbin.sensors?.length > 0) { + const sensorData = await Promise.all( + trashbin.sensors.map((sensorId) => fetchSensorHistory(sensorId)) + ); + + // Check if all sensors lack recent data + allSensorsHaveOldData = sensorData.every((historyData) => + historyData.every((data: { timestamp: Date }) => { + const lastHistoryDate = new Date(data.timestamp); + console.log( + `Comparing lastHistoryDate (${lastHistoryDate}) with oneWeekAgo (${oneWeekAgo}):`, + lastHistoryDate.getTime() < oneWeekAgo.getTime() + ); + return lastHistoryDate.getTime() < oneWeekAgo.getTime(); + }) + ); } - const icon = - isDataMissing || isOldData - ? greyBinSelected - : selectedBins?.some((bin) => bin.identifier === trashbin.identifier) - ? trashbin.fillLevel < fillThresholds[0] + const getIcon = () => { + if (isDataMissing || allSensorsHaveOldData) { + return greyBinSelected; // Grey if missing data or all sensors have old data + } + if (selectedBins?.some((bin) => bin.identifier === trashbin.identifier)) { + return trashbin.fillLevel < fillThresholds[0] ? greenBinSelected : trashbin.fillLevel < fillThresholds[1] ? yellowBinSelected - : redBinSelected - : trashbin.fillLevel < fillThresholds[0] + : redBinSelected; + } + return trashbin.fillLevel < fillThresholds[0] ? greenBin : trashbin.fillLevel < fillThresholds[1] ? yellowBin : redBin; + }; const marker = L.marker( [trashbin.coordinates[0] ?? 0, trashbin.coordinates[1] ?? 0], { - icon, + icon: getIcon(), } ); @@ -292,20 +280,15 @@ const addMarkersToMap = async ( createRoot(container).render(popupElement); marker.bindPopup(container); - marker.on("mouseover", () => { - marker.openPopup(); - }); - marker.on("click", () => { - onTrashbinClick(trashbin); - }); - marker.on("popupopen", function (e: any) { + marker.on("mouseover", () => marker.openPopup()); + marker.on("click", () => onTrashbinClick(trashbin)); + marker.on("popupopen", (e: any) => { L.DomEvent.on(e.popup._contentNode, "click", () => { onTrashbinClick(trashbin); }); }); - // Add the marker directly to the map or layer group - markersRef.current.addLayer(marker); + markersRef.current.addLayer(marker); // Add marker to layer } }; @@ -314,6 +297,10 @@ const addMarkersToMap = async ( + + + + // Route handling const handleRoutingControl = (L: any, showRoute: boolean = false, optimizedBins: Trashbin[] | undefined, tripStartEnd: LatLngTuple | undefined, mapRef: any, routingControlRef: any) => { if (routingControlRef.current && mapRef.current) { @@ -366,7 +353,7 @@ const Map = ({ trashbinData, centerCoordinates, initialZoom = 20, fillThresholds } } // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); + }, []); return

; }; From d13439ec49b89a7d26772f142e9656b669d34347 Mon Sep 17 00:00:00 2001 From: Ammar Yousaf Date: Mon, 25 Nov 2024 14:31:41 +0100 Subject: [PATCH 18/74] Fix: Updated Map.tsx in bugs-fix-map branch --- components/Map.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/Map.tsx b/components/Map.tsx index 7e3698e..e9da6e2 100644 --- a/components/Map.tsx +++ b/components/Map.tsx @@ -146,7 +146,7 @@ const addMarkersToMap = async ( greyBinSelected, } = createBinIcons(L); - const token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3M2IwYTE2ZTVlOWY3MDhkMDQzZGJlMCIsInJvbGUiOiJTVVBFUkFETUlOIiwiaWF0IjoxNzMxOTIyNTU2LCJleHAiOjE3MzIwOTUzNTZ9.OyewrDIj8_OstP4IDrPglKkNbQLwh6_7V3eZjn_iT0I"; + const token = process.env.NEXT_PUBLIC_API_TOKEN; const oneWeekAgo = new Date(); oneWeekAgo.setDate(oneWeekAgo.getDate() - 7); From 45b58e8683694ece951fc3ae0a78ee3fadf82e69 Mon Sep 17 00:00:00 2001 From: Ammar Yousaf Date: Mon, 25 Nov 2024 14:42:26 +0100 Subject: [PATCH 19/74] Fix: Updated Map.tsx in bugs-fix-map branch tokern from local storage --- components/Map.tsx | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/components/Map.tsx b/components/Map.tsx index e9da6e2..69baaa9 100644 --- a/components/Map.tsx +++ b/components/Map.tsx @@ -146,7 +146,8 @@ const addMarkersToMap = async ( greyBinSelected, } = createBinIcons(L); - const token = process.env.NEXT_PUBLIC_API_TOKEN; + // const token = process.env.NEXT_PUBLIC_API_TOKEN; + const token = localStorage.getItem("authToken"); const oneWeekAgo = new Date(); oneWeekAgo.setDate(oneWeekAgo.getDate() - 7); @@ -234,10 +235,10 @@ const addMarkersToMap = async ( allSensorsHaveOldData = sensorData.every((historyData) => historyData.every((data: { timestamp: Date }) => { const lastHistoryDate = new Date(data.timestamp); - console.log( - `Comparing lastHistoryDate (${lastHistoryDate}) with oneWeekAgo (${oneWeekAgo}):`, - lastHistoryDate.getTime() < oneWeekAgo.getTime() - ); + // console.log( + // `Comparing lastHistoryDate (${lastHistoryDate}) with oneWeekAgo (${oneWeekAgo}):`, + // lastHistoryDate.getTime() < oneWeekAgo.getTime() + // ); return lastHistoryDate.getTime() < oneWeekAgo.getTime(); }) ); @@ -339,7 +340,7 @@ const Map = ({ trashbinData, centerCoordinates, initialZoom = 20, fillThresholds useEffect(() => { if (typeof window !== 'undefined'&& mapRef.current== null) { // Load the leaflet library and the marker cluster plugin - console.log("use effect rendered") + // console.log("use effect rendered") const L = require('leaflet'); require('leaflet.markercluster'); require('leaflet-routing-machine'); From f8307f61153bfb48b7549135c29758bb6840f20c Mon Sep 17 00:00:00 2001 From: Ammar Yousaf Date: Mon, 25 Nov 2024 14:50:19 +0100 Subject: [PATCH 20/74] Fix: Updated Map.tsx in bugs-fix-map branch tokern from local storage --- components/Map.tsx | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/components/Map.tsx b/components/Map.tsx index 69baaa9..ba4884f 100644 --- a/components/Map.tsx +++ b/components/Map.tsx @@ -162,14 +162,7 @@ const addMarkersToMap = async ( }, } ); - if (!response.ok) { - if (response.status === 404) { - console.warn(`No data found for sensorId: ${sensorId}`); - } else { - console.error(`Failed to fetch data for sensorId: ${sensorId}`); - } - return []; - } + const data = await response.json(); return data.map((item: any) => ({ timestamp: new Date(item.createdAt), // Convert to Date object @@ -178,7 +171,7 @@ const addMarkersToMap = async ( sensor: item.sensor, })); } catch (error) { - console.error(`Error fetching sensor history for sensorId ${sensorId}`, error); + return []; } }; @@ -235,10 +228,7 @@ const addMarkersToMap = async ( allSensorsHaveOldData = sensorData.every((historyData) => historyData.every((data: { timestamp: Date }) => { const lastHistoryDate = new Date(data.timestamp); - // console.log( - // `Comparing lastHistoryDate (${lastHistoryDate}) with oneWeekAgo (${oneWeekAgo}):`, - // lastHistoryDate.getTime() < oneWeekAgo.getTime() - // ); + return lastHistoryDate.getTime() < oneWeekAgo.getTime(); }) ); @@ -331,7 +321,7 @@ const handleRoutingControl = (L: any, showRoute: boolean = false, optimizedBins: const Map = ({ trashbinData, centerCoordinates, initialZoom = 20, fillThresholds, batteryThresholds, isRoutePlanning, onTrashbinClick, tripStartEnd, selectedBins, optimizedBins, showRoute }: MapProps) => { const mapRef = useRef(null); - //console.log("map",mapRef) + const markersRef = useRef(null); const routingControlRef = useRef(null); //const markersAddedRef = useRef(false); // Track whether markers have been added @@ -340,7 +330,7 @@ const Map = ({ trashbinData, centerCoordinates, initialZoom = 20, fillThresholds useEffect(() => { if (typeof window !== 'undefined'&& mapRef.current== null) { // Load the leaflet library and the marker cluster plugin - // console.log("use effect rendered") + const L = require('leaflet'); require('leaflet.markercluster'); require('leaflet-routing-machine'); From bb375c6e9991ad83d2e3191b2ef760bb619d8f60 Mon Sep 17 00:00:00 2001 From: Ammar Yousaf Date: Mon, 25 Nov 2024 15:02:27 +0100 Subject: [PATCH 21/74] Fix: icon and template.env file --- public/images/leaflet/bin_grey (2).png | Bin 22311 -> 0 bytes template.env | 1 + 2 files changed, 1 insertion(+) delete mode 100644 public/images/leaflet/bin_grey (2).png create mode 100644 template.env diff --git a/public/images/leaflet/bin_grey (2).png b/public/images/leaflet/bin_grey (2).png deleted file mode 100644 index 3f0fa27cffa804f59783bfae8e92ca91c42499bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22311 zcmZ_02Q<}x{6Efh#U*=|Rc29C_NGt>*&(B>?7jDu6d?)OH!6E`ZLZABD|?f0v*p_1 z_qyuyKi}`~e}3oa+>ZNtzuwP19qqMM$w)4f;NjtsDL+uq!o$PI;{Fj|0Ke%T znT-G+_-=_Y=|mnQ`mBq{H;( z8jVirW$DdhpZ*?ELAM0;oL9lb)e2@;&6>Be+0a$P8f*yBTcT)E4Efls2ickZrO1Gbuf4OuuT2?{hY)TEO>oRtwtT_krdfg+!Wr0^`|AvUs*rYS%+OdTT{ZE0 zRRm87^wyO>rDrD0kA?mu-TcYjBSUu_jd7_Ty)~{~20K6=F#97BMQ(KvHxC z!ac`7L~yZ)jXG+MMcx0PUJ^$ha(D z#kPY)!fjm@g}Iw^rS!5fkUcM6_A3wv%C`u+$FETO&?T6n9}6n5ktJ}Jp2LfH%bza+D`{aMg*}?dN8zM`yOHd&mKPU5_N>CMe)idD$#5Uc&EI#E?zl==5~Mc6;aJJ6@Wp#ml0G%KEWSo(u8+ilrR7B{_O zlhhX#43!pre@6!opJsbKBn|GAK8r78LK=J{E*AQ5>Ws>M^|-_A*`f#PIQFKFJe2ne zg2{pqJ!}~cU8AHqrf;lEZxz;J<}{02*?{e>HjyyWq(4|jq`2n326U+P)cW0?Tyr;K zYUC+V^A^hSGwI@>I*`Dh{J8OQj<%t@h0MW<f=KN z1(ZI-6ZNLyU6Yu1oyF>mt^&dxLXG_%E82K3rN>HeDExwk@a*7Ko+vg74+68<$xZUG zX{#=cLZje_4r2(lyO*1`Xuo~Hfn&24A_F2}RpB_UE9F2{A~;tJ4J4>%S73i61Wa(? zMT*00`zSXmWL`mZePU#78$E<^U{70D@w)2FgK%0`V}TKN+>{q!biUW?MdV2wT`6@# zs=44JBQ27+M}E#{?hHS1WlTRRx*jNXhkL@_@1(_Pp(U6wIqL2}q+B>uhTOCxgRGug zkNqtXcp)pTrMd9j)>dwPzBBOfR&KMnr6R&UV&t7ur!~F2YyZsM;%bSEvx2klFhymg z5&aumK1eyS6mcpmD=h~n``ZsdZ@0_ZMN4j*OV+T^rK(ptF4zzU6aUmey*SaC6F5vs zXp_MCqIlh52lBSFigT6$U(jILH3&O80@c!dRe@u-waA4k5$waCYc*P~zsmEHsaYuH zMJ7YYZ`fG#t&T9Jk@vH8zSx(+(CHK%-5)s(TB290c--iyC_`*vWBCW>Ujr8McNH2W zf%-Nq40*k}tP0tf(xpvm1YPBz3UhYQ4M;ROca{u0KRfzeFw}VABUgy-SAD-pn~~ZJ zFNwtft4%4Kf<#n%8`(wvthw%)HunLgGR+8ln~YvbnFwYee-Ozcj*M##i-adkvw) zr~05ax9j|4N>>8<#V7PGe5O9N820CK$>-;|@UqLfB`{|;m$7?ML$gv*4nC9W@{}n1 z4c;CsA=ATAeJnx;dRY|}ZF3Uf-3L$WEz)uWc9_f~Ha1?!bO2Q{Sn zK%7da?tk*oeMJ?R^z4+OMGAxgUv*USp&}22oiY?fiaMQe;lFTQBmV(fTJ6b;$$%E^ zl)d3Q6~5e$HDAkJfMkUbgzVoLd!$VStcm5Jic+He-jP$VqTqz48xZ^vH6vS~(V20; zJ$n-iYV6U^DeeYiJbUeox3sT`U&%E?*IwzRmv~grr;w0iKZ+WoLZZoyLA6g zEE5b+LIZL8rAF^5RJ*V6AB=E2@_Nc9%6+)?&GH6WNYBrS67(>PMH z^uTqpWS>7@gef$9z|>`(wEk#~ElFH^r-npjmJAix{Ot`Jt%a$T8~YXcewamwRU^Y1 z*2+$ih<5D$g4+H{gIG9Qnb(5&0m+>HvT+L!o78IlvCM%(_rx06e1nYGqz)SwX2WWR zyOD+I)ZJyY*VkL**^4xztRI5-izQoY<4*;U73;U=cE0*)6TQX>mxJ$fGYN_<*eT(= zQHx|!UB4FdUZnJ8_2#p!Adi`0|KH7z&j?&(;rCl$Zv8czw&haq5p{`9$9f**=x*uJ zm0z*kUxzu0_imoVTifHmQh`C&pj8^fw-7`Vpd|XHVWSMzF1?13lqQi`^4E`-IQ-fj)gp&{T1M z^;?8woT|}xtJ&eRHUvN3XS>+ z1CwLK4Xy(M8Xiux?QzKqBsj^Btk3umn;CWFS>U+96R?+H*dj7};Hh2qh!9XjHx&6x z8*XxOl)7M|3^|RLW}b?Vgh~@gA^g0xlGU~z{R>Ey^GN9Q>XV5)#CnCEbO1RQ=GXZ6 zrz)ntTD>A*|% z@5D}1z@h05NaAsrDK)lOyK4Q3!ysdd|Hto?KtV^GhH#UNC+)9(W}v=IaPRSHfi;ia z2^=9JF}L69d{zRx?J9o(L8s=;rPnukkPWl4kp@j8!<-n?PovRtC)(9P&L3f$19nd( zyh?*4bE@yoZQa}RY@<7jjYVCuHcc3SCoe0TExoaMnEv?SPo->lc7^aMMi(aGj$g$8 zTWZHqdda%&e8yGLIv_;sld_$&)9I?GoM8vC6QR4T*QvJIO9v;`f<>;sQ z5gA^gl)z0|n^xt=VOsCnU+KQ_JuQAzCfPwWEh*pl5)D460wgFI-MlE$eKDM0)Y3k9 ziS0ov9lV|TCy_gQ$-Ee3`yUgt4fZ<~TPQYXlnE2PLV>gdomNGo3@R(#QXl*u8(%L7>WtRzftZ-vg@nRq+dFpbbHA_zyD`R4F z^wWrU1t9Em%ptMa=`BOo_>u#=dX0_esY8Ahu>Q zULGfft$0+YcAwSCGR+g0GuWJ@+*P8AL>7xQXaH@A^*G)FR&@5R-7RPI-o=@N9kF5E z`#68Gy+2nU={O&{y$2btaiuG%b2ItuoWl=qWZRmg-Ayxp3n(eg=9PV%Y;oef5b`=WponEvkY$!|TK$n9 z<>T&U&Q32JrIaCEFe&;#js3mJoK3jnDltXAKV#>)D$l*jU_{u-9-AQuxoco zkyGK^b>yJD9A>M74gzt0ygOI!bu^Or&YG<@@`Qw3dZw>^zB4}6bG11SGY`~AuAib|IrZvv<FeoCBPBCn*J_9Ogg8z#Y3u`FF@F{?MJjdMhHhP_0UMWrlVZ z8eoI++$+t})CCXWeh{F;ANV60vK+Z`#i>pP28!_0t>B}2@y>Ldv4Wop?yVRz_|(hh zo_!k`#I`azoPg&DPgf@5{M(_Ir~y>2jKV@BLV&H&wu<1f&VM`KfOwMciNarx^}io} zIuYnkiS0uLppI-pbtM0B)G0T&iBdxKTofU3S_wr^5cCP8zL3Dl5huz$*hNBq&r5Gt z;f>d}gwP$9uYRljrFjo3gRcjfaTeAZB|K@LBkAXATKZKklqNB0AdKs}*x$ZI z^;~**(3vu901NG|Ji3X}t1;{u_|Oe+q}l3VHZS~~yV&GIDS7g|(Xjms0#Mz><=lHS z^|(&hXaB!Od2-cIz9hc0@V!n9IgjlCi-U}Y#*F!Dy}^?N~O>cd4j zL4exJ)YS)GF~3K;t8Tk3VJ|BsihrtV(cfgVLcTA@*C#wtK_RELZ9-A+_%^<3cs^FQ zKbQV3i2lhhHIqLvgKj92Na>gJs=+7EhWIKYBH^beX0IoVgCiT`lT(ortD`|IFUh9s zU1fjbqTvbbiTilK8@A;|p5{q zoVrZfuR(56&IyI5>co2HWDxtzCyQ-d@}mmXGsQ_9!*^K{r3Gh6tGEky*b zhI_mfjyKwoXYlBA9$|yEcl#POVVgcvIW>0TlUB&9U@uT1lxm5PKgRz+o9~GqpGS|S zYUYbrAbpkZ$<2kSRLzA@<2!*W$2_|$!6bva&a;m$pB9UcDo0I;cj&0PQDY6i=*qti zX25MUh`nCoUvhITrPS!><5Cs*s?DXnlP6pkK)rhLK^_R&kBGs4*$a@+W1iQBKXqz& z<*U|zr=#yw9vG|*<&t)=$w~zh4AbJAB9%DR`+IKB2N^CNyGl{>?y*MvKiO*!@~N>Y z!EEs?1)C>@B})S1E_@E3mi<^4n}`n-%&_Z&-YZwvJJW7ii%d>iH6$A5QDTK#)GYEa zbvo5PUflBiDLHE(q$_|@@jjL9&c5g66r1UVT*GX8ov@r4a{Gkuvr3|I2vLa>5)&xz zRU86xvQ##!ka!a_3+sDZ$>O1-1uEw3;4j?3^^$;K1m}&2yv5?epi$lQ*e3j0)wzs3 z|SalEUxL&#S>;=oC?DL$wNQsu_5$zMXKE>Thrx!u*?shu!wcZKw z)c6V6!`i#_AtW$NdK{m>-@0S*Ea`Pc(xbxWOkclV#5)>%<0s-F?=Jz>KZd&ZzYe?Z z$R*ifv05D;H^Qfd)+g1_;VX;zwC!tZ%8{*ceXqC3&m*W_hc#H5_8Eh*?(4+6-?RGBtxZs3X= zjk$NT((OzF;~$^$iqkN{m{ZDo@1~>u@Qd+Df36p-DWioi;6g3O6?uU-yF{oT&7qs0 zr2MY^fSusYeU(akUsz0xff;AX16AGts=TYbN%Z8MHH8mp?RfdPAK%iiPxk-q!2|Yq zUt{yR*Sjidv*vw0VSqNOFG%$_w8n+#Z!OoyF#tC;=1>5%Uj($@xn|DeIG+Eu zhf6>{gVdYwu~7N_JCp#}V15074(#HJYhm%9RlKeW=7JOb$Q{s?EQ(D;II;EEH;Lp6 z+Oh%QK$?|jm>Qp|Qwg-iQKs+_PuO>@*%Em;Pr-KQc*s-y>e!`@q1=5>kfQo0AK|r?MoC}`k%{!pJp+B{z!)_9ISx4Pnj{`x4XW{b%2n^qV{Ne<=Kek;! z5!kF-&|&l8JXqsF&mzxXAY=@>X!8Lb9DtCyZLs**jkd(g(9ZxGz&ht(wo#FmZ!7_k zaJk7MS_$OwN<)sQywy71ycdT0iux%eQcheeoiqs=)Njz*-47XAF@Jmj`UDD%5N;~5 zg|+SvLRSYrt#Z$I368J?uYPCjVaHT0l{)fA4XQbD$U7YoKl;P|ND8?A_M6FH%_1L4 zqpYYCE8vZ0)k*aZhk06ez*pZ;!)e4qZvh@r_9=)QOCU?7Fl3_dXq2HlT5T zv91W5Y;%}w|Zy?!xLX+N$nGVV)qRxh7OkO(DmORuk!(cI8cfG`ZV}K z=0vbL_a#a?_$F}Y@5D#Xnk#%$uE&0HU|-g$34rhw2VA^|L^DuCQ2~Dbz~0p4Gik^; zyPv+ayv>h4N#coT##7qHZ=*2&ML&b7j!5?gfHNB?3+{mO9`6Ad(l%0pbOK ziZ2rkejVS~Y}>t_i`Y!W(#bu!uOo0N#8RKBt7vkp>%zHJbta;OMT5SU$DHt*W|bwp zM46x#U6{D(u#>^P3zzj9eh_1goju4;ZSoq3BHUCGfZf>2&%qdY<2##w_=X&>BigJN(_Hq;&_9@Zk2Y&>dQ~v;_+ud%YW^vN3`R|! z+lzwV;|y>ZjIQ%K8@_1AFOJuU$x=tZ_S<<9ZNQ|h&HcAGS(CV22fwKQN&eVpTq}6? z)$WdclR}(oxwy96s@>V0q|tVhmR1duv=-m~n&a|T63Nm9y&ZbAn-8}@J(hJQ==kXu zjpL&w9^=}*WUjU2&BL_csksIk)b82TwyLA{Fe8iCe3-PBhDnCk6*(lIahbHmUc*g8 z)>T5#dJOt~Pqm75rxe@e=X>3^sqR$R;>l~Mqq$%A-hxG^!Qo1y_+0B8@-F%a=K>H(?mnhMYj;wmX5f7v#>&>tIMQX;|&lGA{d}k&> z6qZ~S_Ivj|fBy$_VCRf-vX0(`FZJK%4Iu`?op|= z@0C0)G18gr#S313zjR}Ejv__doY0v|DEWJ1cFXbFl@8B1rj1g&Yt@bn@D4t4^#35P zO~@BdoD^XGuE-#JTR%E5EHR^&JusABIKT(qdxy2GLXA*Z(a$$M?7vxntO}5XHU*I{_P}faAX!b*O^XQYjT%n*M1(4O!8kFiC@>k=JwtJsZM>SRIV%hmSj!mVO1NKS0p$Sg@$%#8A7#eCt;M;2oo_Sm{X+m;vG;{QxVSc#$Iqh${;e zR5%LYted{E;0YbgLRCD;_WEAx-4~}?Th8S=iqZK-FkeS=IXFLfbw^z)$PQwi5w7E3zeR!eCHXO={=&$M+BK9$ciJW9m!ahYkW>ajrD#3cEfRD zcg{svrG0mI1{WQcCuEq{-O#uLWbqh$gOXeKViwn&$12y_s*KkRQ{MUyBZd`%Yprz zy#J~SgA;9U=f}$_1YQcD8*O&2jAJ=pWELC3RDNc%8mS4z|HoBI_0PNxpM|y*z|~7q zXf#9}96YRsI2do~$tciZhW+rs`I&}$+so0nz*M;~1EL}2{SC=5wuwVFURKI#`mx(8 zXpgVSL`kXZnNVqyvj0tN)N=5mBsEqB6)rbann&I?WUmiQ?zh0X;b#?t(;Xp>aN8cd zhvl+q>)LknCdGx**32YwMHS$bC`Od?f9>`-sxl;~k_U5qVYOetv*&5eAbyC+&P4zx z?~+N|zWvL6PCkgy18&eyt|qs4D{u@nD2No(C()wcn~;JFDj%3|za zJy(hz784Zvw79hgogS%hSozT6dLN$dbMc=%yC2}>S$eq&B5SXK?!YHtc6+=5y0V!6 zgm_6AopniEZ-LG%7YQ{MoMP$LdE$lbl1~0-XpQQBNxDt*!E5i~enR=wsI9nB-|g&0 zbs`+KE&nXWl!qGoT#0<-fP1U@a99iN1v$ka%3ZI+QC+JStvi>DTXP8j%nwx8uyFg< z(#D3APt!Vg-j7Qm>mdV$gaKmCnbskl#t73hk4qx%f~6q!u@cBgB^e8?1hzMMdgU<^ zkza;`z~*jn@I@u!@}lD0^SPlB0Q-*bb>eo7}KrYnLm9)*}ON-*QJHW-r)p;8q2;IkB{p8}&^)ldOjq>u>lj7CB+oV?tIp zgU?R11#F}nL;56?Jdg-k{DKXaTTx!dv&6eE(idTTs*`2>GSVLz?n`vbdPnZ4B+yWL zUpyGGm#?ZMiR64=h#`pxYpTT?4y25I4$1Ek4EMo_4)f%@8=&mIC2vaUo&8CDSWO-nA~^QUO#SR2 zf6td3pf~^a%v?NFL+j(88a>Ni$-{$0-fW;d-e|PKPgs3=r<<%hvElb$GNLG9zAm5c z8=u@Lj%xT)O>R+h5yJNYF-b1?i~JIQi{dU-q})Hes&qx9^c}F_0#$U1H^5(aatkKk|>c z?pk|JOj~RMf}sPc(CwFuV7rj2`Ilr|zMShbc zL=&&JaQdkr01_E|x6_oCjy~ys%Gk`pjiG?d=Bhm)BUb=vM?>-t7slq>;jB7*BZ$0( zctcb^i1~4r$W>u6N*sghTZxEluH_&}SnZkkMGo&CXuyqIIk>Oia_Nn|miBtm*bEH8 zCQd+JL$&YBQ-69(Lf~{?>x@7X+W!I3WVM_V5q1Xk?H7G@k9=bMOpfH0T-*2PBHA63-uXKsv2TcxlgPK5RU^XpvL5iP>#{A-}L1)w%j z+$5I6@4ph-0Qjxtk$W6IT|dm<3NAy2`QdZLRhAPJ6g3eRHVJ+mLjjDU5;Bz^_&UO; z7-)Rf3)F?>Gw{bUc!jSZBFon~RX{$R=x$iQjqp< z>n+s-G``6_N>$re_Xjj{+U?~>`SveI5gMmbV})AA!(BM!HR8rGA~HW^BuIwwtQuTL zKUH6j3TsQ8eA(b-P^d(;NE2aFvl?G#QqwPfp{ROK(Zpvd&!7K}L2fdtK-t9*spoOo zbuDNVCdDN+S5yYZNEzYtP;-1j1+FII@7ac7-psJtyl39QA{Gw>2CbE%2eC<5zyUNhoP5YJbNy~ zkW`?fhO_p5NVop_>!bddU&bqvx zf|!Nbuf-0!3d4gbM3>9ra(LXOKd$16Max+)m5ohunscyss>>J*SRbD~--Rxx5d~U*s`*%;4^@@xp z8$>@DkwI}WU*lnf#b2N(k(wChyLKDFgB{DU)!wEsZ{PV7$1u#zO8B)H#2`pC-J2uO zr~=h|AGjf}q0)19bS`&ZIL$*e1tE6kvrt*m4 zDPJcPdR)|mr?*_$>1hQA`t6@!3sO6V8=i7zJ~UWDxTW1DOgjMNau5LAg#Z)OJ57za z0Dz1@6vJvy9^xkqa~4@xh6{Pi$3-JK(6+$+3GD z36mlz5H>B|8|Sky4pbeX_>W2HTgg4sBODV@EB?qD7y z-Y84^&`a^jKubZ=u|U?iKFcI-($DDWp9^AUNCX?h!)VEm?ad;6y7@ zTmd#V6ppKV(=BjXK>uzkI@iK0vo8+3=1i@<^zO&glc=wiB<0P`xYGB3lNU*BFBsCc zer7~+M9}Po-L<8&3Js0L8Rf+wm@l>A>1aI8DCw!Dn9`GvgyowcV_AAnMZ_4-#R2jT z&&S0eV_e>`r)vI;YAnpa9e$4R_FNzu%+HC-1spMqc(@)JB;Gn4 z6iudc56F@x5i6`jY(oE(Hr^H$xWnf7-O^GKnDnT+i)j@8G*egY&in8ElygTT@J9Nr zVy#+zp3jtM#bY|Fb4~Hf3oN!91@g>7*McjH1MX!o9OMko#&0J3_JFBs&@p@6I=rRF zf7wHJ!L&}&@quZ+s56=pXKp&79qUR+i{6UkK~N~4Ia%kCJ5L7rFeHL-@~gVkqA(j5 z18}X8!6pYeGKlK~d&Q7_lOexRc~c$BSdV=6q814#+ND2su!zXKp#z`2R_@Ylzgbwq zY@ybOGs3YlY56m{Ez+lXL?McaGw)73&-A3>-x$Mib$AgER-he~lb^9vSvqQ2pE)!| z1+j*NSMgvxxogv+inMSI0dDVh8L84=Flk2-$s!*4{_rdgy})Pru9Gy_O*{&TA30N< zU=|GYypk_CF)qr7rW$`k_m;z4>>g-YrtRL_;qT)~8U>kHh(p8ngI*I27iP~-Qr}5a1O6_Bg>q|N z$yf=3lk|CFXn5nNrW{aDeq*M#7|GpckS2>Cs_Oc1nij|pC_}8JJKQA`d?vjq%Hjdt z8tYKWx7EoGI``u-nN^fKT@$RJc7qr>yz%GgCF|`sT$n)9WtRpvFamVCgSrhSZKWM) zhTY;&A5r5jgaP;FOhgyn>MIl9s5?4clkkq^RI@eEFP@TA&xbZ7v;;;Y{$dCs;p9Rb z2fm6mfkt(;$o;Mcedh<=9nB=+MZ3??_0KsmzKg8ZLjX&9^t&k<=hYDH5E<0ZY7LCu zri)pW;fvY1D>!Qw1HqFu{N0%cPHU703?-gMu@(C-96ba`5{lPNBe$5CU*O!q`rv== zwM-zZ0Y;TRPqEoj1%`$`Mx06fvBxaoQbkN0NEOT~r=#D>v`}XlJDO(TgP-7yjAnMz zI#S#K6vYFeXmpK}=fJ1x=p6xhr}kZ!y&8SN`IgdNVr05zAM}V|0U$)fK~#@x)1M?$ z#p9B&ixN;DIoH`LxO&k)&&*R$`6egJ38UvkTavv`e3|*&Xa5J0$IPe5tQrSRxZ^X& z%%UIH|EeDykLdXLGl&INyDvUfdH#JP?bbWo268bq3`?CY9*|KB_*@tsw&B3sazdad9|!yKH5_uKT_p zkI!T1PBg+!+Lw24L+Bl1RSKIkfN6=6>3)|V68aJ`ID!h7x*s)s;p|ju4p9JaBy+wO zdexWh9I+FA6;M5(iq0xyJn>`u&CH@`Zf8$8^-dRk4B5mtz8pEQgTldZIak+OqDc&>LlNgIpZ@<=E;PP>Dl;nYFY1-CzK?U%6qzXu$eJ4h`cICfilwrq>&rC@3U*6TojEfLBu9qx zFagaytRE2!yV}Ix^3rh$VZC?`WQqo8JxK_njQ9GSm+eVBMl&9#>HY)gwY<_PQt8sr z<}^5Y068&7GnWT@?e6KB34FtWyaQhq>h#TlZJ%8AiM%LBBE;|hzoh_vh*E+1(q26a z5|G~)2}ipBL5a=qP+^-<89x|xS*p�Zk4qIICjk*{mwMp?5w3W%|QALjk=^o>;v5 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

i^fi7S5e#ytyxOYxO6-w9-BFn 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 diff --git a/template.env b/template.env new file mode 100644 index 0000000..c3ebb0a --- /dev/null +++ b/template.env @@ -0,0 +1 @@ +NEXT_PUBLIC_BACKEND_URL = "http://localhost:5001" \ No newline at end of file From 3463f0877a2b9da650af1df5ef55b9b831975da9 Mon Sep 17 00:00:00 2001 From: Ammar Yousaf Date: Mon, 25 Nov 2024 15:21:06 +0100 Subject: [PATCH 22/74] Fix: Removeextra lines --- components/Map.tsx | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/components/Map.tsx b/components/Map.tsx index ba4884f..b2d9698 100644 --- a/components/Map.tsx +++ b/components/Map.tsx @@ -69,7 +69,6 @@ function PopupContent({ trashbin, routePlanning, fillThresholds, batteryThreshol ); } -// Custom leaflet icons: https://leafletjs.com/examples/custom-icons/ // Bin icons based on: https://www.vecteezy.com/vector-art/7820754-recycle-icon-garbage-icon-vector-logo-design-template const createBinIcons = (L: any) => { const BinIcon = L.Icon.extend({ @@ -113,13 +112,10 @@ const initializeMap = (L: any, centerCoordinates: LatLngTuple, initialZoom: numb if (markersRef.current) { markersRef.current.clearLayers(); } else { - markersRef.current = L.markerClusterGroup({ maxClusterRadius: 40 }); - - + markersRef.current = L.markerClusterGroup({ maxClusterRadius: 40 }); if (markersRef.current) { mapRef.current.addLayer(markersRef.current); markersRef.current.clearLayers(); - } } }; @@ -209,7 +205,6 @@ const addMarkersToMap = async ( continue; // Skip duplicates } addedMarkers.add(coordinateKey); - // Check if required data is missing const isDataMissing = !trashbin.name || @@ -233,7 +228,6 @@ const addMarkersToMap = async ( }) ); } - const getIcon = () => { if (isDataMissing || allSensorsHaveOldData) { return greyBinSelected; // Grey if missing data or all sensors have old data @@ -283,15 +277,6 @@ const addMarkersToMap = async ( } }; - - - - - - - - - // Route handling const handleRoutingControl = (L: any, showRoute: boolean = false, optimizedBins: Trashbin[] | undefined, tripStartEnd: LatLngTuple | undefined, mapRef: any, routingControlRef: any) => { if (routingControlRef.current && mapRef.current) { @@ -325,12 +310,9 @@ const Map = ({ trashbinData, centerCoordinates, initialZoom = 20, fillThresholds const markersRef = useRef(null); const routingControlRef = useRef(null); //const markersAddedRef = useRef(false); // Track whether markers have been added - - useEffect(() => { if (typeof window !== 'undefined'&& mapRef.current== null) { // Load the leaflet library and the marker cluster plugin - const L = require('leaflet'); require('leaflet.markercluster'); require('leaflet-routing-machine'); From 7b4bddd2adecb9c96336e064c3b3fcc87a8caa8d Mon Sep 17 00:00:00 2001 From: Ammar Yousaf Date: Mon, 25 Nov 2024 15:25:09 +0100 Subject: [PATCH 23/74] Fix: types.ts --- app/types.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/app/types.ts b/app/types.ts index db88791..cbe5b19 100644 --- a/app/types.ts +++ b/app/types.ts @@ -1,5 +1,4 @@ type Trashbin = { - lastUpdated: any; updatedAt: string | number | Date; _id: string; identifier: string; From a01f1691fc9176f4e662d358b3f7b2e1a90cdd0e Mon Sep 17 00:00:00 2001 From: Ammar Yousaf Date: Tue, 26 Nov 2024 11:55:22 +0100 Subject: [PATCH 24/74] language fix is resolved --- app/globals.css | 29 + app/layout.tsx | 37 +- app/projects/[city]/trash/map/page.tsx | 14 +- app/projects/[city]/trash/page.tsx | 198 +- app/projects/[city]/trash/route/page.tsx | 117 +- app/projects/[city]/trash/settings/page.tsx | 73 +- app/projects/[city]/trash/trashbins/page.tsx | 177 +- app/projects/page.tsx | 31 +- components/LanguageSwitcher.tsx | 24 + components/SideNavbar.tsx | 104 +- lib/TranslationContext.tsx | 54 + lib/locales/de.json | 65 + lib/locales/en.json | 64 + package-lock.json | 2960 +++++++++++------- package.json | 2 +- 15 files changed, 2399 insertions(+), 1550 deletions(-) create mode 100644 components/LanguageSwitcher.tsx create mode 100644 lib/TranslationContext.tsx create mode 100644 lib/locales/de.json create mode 100644 lib/locales/en.json diff --git a/app/globals.css b/app/globals.css index 078fb49..90b460f 100644 --- a/app/globals.css +++ b/app/globals.css @@ -160,3 +160,32 @@ visibility: visible; opacity: 1; } +/* Add this to your global CSS or a dedicated CSS module */ +.language-switcher-container { + position: fixed; /* Fixed position to stay at the top-right of the viewport */ + top: 16px; /* Distance from the top */ + right: 16px; /* Distance from the right */ + z-index: 1000; /* Ensure it's above other elements */ + display: flex; + align-items: center; + justify-content: center; +} + +.language-switcher-container .icon-button { + width: 40px; /* Adjust size */ + height: 40px; + background: white; + border-radius: 50%; /* Circular button */ + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); /* Subtle shadow effect */ + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + transition: transform 0.2s ease, background-color 0.2s ease; +} + +.language-switcher-container .icon-button:hover { + transform: scale(1.1); /* Slightly enlarge on hover */ + background-color: #f0f0f0; /* Light gray hover effect */ +} + diff --git a/app/layout.tsx b/app/layout.tsx index cb83376..f67a7fe 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,17 +1,17 @@ "use client"; import { Inter } from "next/font/google"; -import "./globals.css"; +import { TranslationProvider } from "../lib/TranslationContext"; +import "../app/globals.css" import { cn } from "../lib/utils"; import SideNavbar from "@/components/SideNavbar"; +import LanguageSwitcher from "@/components/LanguageSwitcher"; import { useEffect, useState } from "react"; const inter = Inter({ subsets: ["latin"] }); type HistoryStateArguments = [data: any, unused: string, url?: string | URL | null | undefined]; -// Override pushState and replaceState methods, as they otherwise don't trigger events -// when only navigating within the app instead of reloading the page const overrideHistoryMethods = () => { const pushState = history.pushState; history.pushState = function (...args: HistoryStateArguments) { @@ -34,7 +34,6 @@ const overrideHistoryMethods = () => { }); }; - export default function RootLayout({ children, }: { @@ -42,6 +41,7 @@ export default function RootLayout({ }) { const [showNavigation, setShowNavigation] = useState(false); const [token, setToken] = useState(""); + const [loading, setLoading] = useState(true); useEffect(() => { @@ -51,19 +51,15 @@ export default function RootLayout({ setLoading(false); }, []); - // Enforce login on all pages except the login page useEffect(() => { if (loading) return; - // This effect depends on `token`, so it will re-run when `token` changes. - // Initially, it runs after the token is retrieved from localStorage. const pathname = window.location.pathname; const noAuthPaths = ["/login"]; if (!token && !noAuthPaths.includes(pathname)) { - window.location.href = "/login"; // Redirect to login page + window.location.href = "/login"; } - }, [token, loading]); // Depend on `token` to re-run this effect when it changes + }, [token, loading]); - // Hide the navigation bar on some subpages useEffect(() => { const noNavigationPaths = ["/login", "/projects"]; @@ -72,7 +68,7 @@ export default function RootLayout({ setShowNavigation(!noNavigationPaths.includes(pathname)); }; - handlePathChange(); // Call initially to set the correct state + handlePathChange(); window.addEventListener("locationchange", handlePathChange); return () => { @@ -94,13 +90,18 @@ export default function RootLayout({ } )} > - {showNavigation && ( -

- -
- )} - {/* Main page */} -
{children}
+ + {/* Language Switcher in the Header */} +
+ +
+ {showNavigation && ( +
+ +
+ )} +
{children}
+
); diff --git a/app/projects/[city]/trash/map/page.tsx b/app/projects/[city]/trash/map/page.tsx index 0643ff7..cc00e9f 100644 --- a/app/projects/[city]/trash/map/page.tsx +++ b/app/projects/[city]/trash/map/page.tsx @@ -2,14 +2,16 @@ import React, { useState, useEffect } from "react"; import { useRouter } from "next/navigation"; -import api from '@/lib/axios-api' +import api from "@/lib/axios-api"; import { LatLngTuple } from "leaflet"; import PageTitle from "@/components/PageTitle"; import Map from "@/components/Map"; import LoadingComponent from "@/components/LoadingComponent"; import { Trashbin } from "@/app/types"; +import { useTranslation } from "@/lib/TranslationContext"; const MapPage = () => { + const { t } = useTranslation(); // Translation hook const router = useRouter(); const [trashbinData, setTrashbinData] = useState([]); const [centerCoordinates, setCenterCoordinates] = useState(null); @@ -61,9 +63,11 @@ const MapPage = () => { return (
- + {/* Translated title */} +
{/* Make sure that all information was fetched from the backend before rendering the map */} + { (centerCoordinates && initialZoom && fillThresholds && batteryThresholds) ? { batteryThresholds={batteryThresholds} isRoutePlanning={false} onTrashbinClick={redirectToTrashbinDetail} - /> : - - } + /> + : ( + )}
); }; diff --git a/app/projects/[city]/trash/page.tsx b/app/projects/[city]/trash/page.tsx index 1e297de..d03469e 100644 --- a/app/projects/[city]/trash/page.tsx +++ b/app/projects/[city]/trash/page.tsx @@ -3,10 +3,10 @@ import PageTitle from "@/components/PageTitle"; import Card, { CardContent, CardProps } from "@/components/Card"; import { HeatmapFillLevel } from "@/components/Heatmap/HeatmapFillLevel"; -import { HeatmapBatteryLevel } from "@/components/Heatmap/HeatmapBatteryLevel"; -import { Trashbin } from '@/app/types'; +import { Trashbin } from "@/app/types"; import React, { useCallback, useState, useEffect } from "react"; -import api from '@/lib/axios-api' +import api from "@/lib/axios-api"; +import { useTranslation } from "@/lib/TranslationContext"; // Import the translation hook interface HistoryDataItem { timestamp: Date; @@ -19,32 +19,28 @@ interface HistoryDataItem { const COLLECTOR_ID = "66fab28bd6afdad80f1d8dca"; export default function Home() { + const { t } = useTranslation(); // Translation hook const [trashbinData, setTrashbinData] = useState([]); - const [history, setHistory] = useState([]); - const [totalCardData, setTotalCardData] = useState( - { - label: "Total number", - amount: "0", - description: "", - }); - const [nearlyFullCardData, setNearlyFullCardData] = useState( - { - label: "Nearly full", - amount: "0", - description: "", - }); - const [lowBatteryCardData, setLowBatteryCardData] = useState( - { - label: "Low battery", - amount: "0", - description: "", - }); - const [brokenSensorsCardData, setBrokenSensorsCardData] = useState( - { - label: "Broken Sensors", - amount: "0", - description: "", - }); + const [totalCardData, setTotalCardData] = useState({ + label: t("menu.total_number"), + amount: "0", + description: "", + }); + const [nearlyFullCardData, setNearlyFullCardData] = useState({ + label: t("menu.nearly_full"), + amount: "0", + description: "", + }); + const [lowBatteryCardData, setLowBatteryCardData] = useState({ + label: t("menu.low_battery"), + amount: "0", + description: "", + }); + const [brokenSensorsCardData, setBrokenSensorsCardData] = useState({ + label: t("menu.broken_sensors"), + amount: "0", + description: "", + }); useEffect(() => { const fetchData = async () => { @@ -60,7 +56,7 @@ export default function Home() { }, } ); - var transformedTrashbinData: Trashbin[] = allTrashbinsResponse.data.trashbins; + let transformedTrashbinData: Trashbin[] = allTrashbinsResponse.data.trashbins; // Get the currently assigned bins const assignedTrashbinsResponse = await api.get( @@ -71,22 +67,22 @@ export default function Home() { }, } ); - const assignedTrashbins = assignedTrashbinsResponse.data.assignedTrashbins.map((item: Trashbin) => item._id); + const assignedTrashbins = assignedTrashbinsResponse.data.assignedTrashbins.map( + (item: Trashbin) => item._id + ); // Set the assigned property for each trashbin to true, if its id is in the assignedTrashbins array - transformedTrashbinData = transformedTrashbinData.map((item: Trashbin) => { - return { - ...item, - assigned: assignedTrashbins.includes(item._id), - }; - }); + transformedTrashbinData = transformedTrashbinData.map((item: Trashbin) => ({ + ...item, + assigned: assignedTrashbins.includes(item._id), + })); setTrashbinData(transformedTrashbinData); - setTotalCardData(totalCardData => { - return { - ...totalCardData, - amount: transformedTrashbinData.length.toString(), - }; - }) + + setTotalCardData((prev) => ({ + ...prev, + amount: transformedTrashbinData.length.toString(), + })); + const projectResponse = await api.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/project/${projectId}`, { @@ -95,28 +91,36 @@ export default function Home() { }, } ); - setNearlyFullCardData(nearlyFullCardData => { - const count = transformedTrashbinData.reduce((acc, item) => item.fillLevel > projectResponse.data.project.preferences.fillThresholds[1] ? acc + 1 : acc, 0); - return { - ...nearlyFullCardData, - amount: count.toString(), - }; - }) - setLowBatteryCardData(lowBatteryCardData => { - const count = transformedTrashbinData.reduce((acc, item) => item.batteryLevel < projectResponse.data.project.preferences.batteryThresholds[1] ? acc + 1 : acc, 0); - return { - ...lowBatteryCardData, - amount: count.toString(), - }; - }) - setBrokenSensorsCardData(brokenSensorsCardData => { + + setNearlyFullCardData((prev) => { + const count = transformedTrashbinData.reduce( + (acc, item) => + item.fillLevel > projectResponse.data.project.preferences.fillThresholds[1] + ? acc + 1 + : acc, + 0 + ); + return { ...prev, amount: count.toString() }; + }); + + setLowBatteryCardData((prev) => { + const count = transformedTrashbinData.reduce( + (acc, item) => + item.batteryLevel < projectResponse.data.project.preferences.batteryThresholds[1] + ? acc + 1 + : acc, + 0 + ); + return { ...prev, amount: count.toString() }; + }); + + setBrokenSensorsCardData((prev) => { const oneWeekAgo = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000); - const count = transformedTrashbinData.filter(item => new Date(item.updatedAt) < oneWeekAgo).length; - return { - ...brokenSensorsCardData, - amount: count.toString(), - }; - }) + const count = transformedTrashbinData.filter( + (item) => new Date(item.updatedAt) < oneWeekAgo + ).length; + return { ...prev, amount: count.toString() }; + }); } catch (error) { console.error("Error fetching data:", error); } @@ -125,46 +129,42 @@ export default function Home() { }, []); return ( -
- -
+
+ {/* Translated title */} + +
-

Distribution of fill levels of all bins

- +

+ {t("menu.Distribution of fill levels of all bins")} +

+
- {/* -

Distribution of battery levels of all bins

- -
*/}
- - - - - + + + +
); diff --git a/app/projects/[city]/trash/route/page.tsx b/app/projects/[city]/trash/route/page.tsx index 3768754..3eca506 100644 --- a/app/projects/[city]/trash/route/page.tsx +++ b/app/projects/[city]/trash/route/page.tsx @@ -3,6 +3,7 @@ import React, { useState, useCallback, useEffect } from 'react'; import { CopyToClipboard } from 'react-copy-to-clipboard'; import api from '@/lib/axios-api' +//import { Map } from '@/components/Map'; import { LatLngTuple } from 'leaflet'; import PageTitle from "@/components/PageTitle"; import Map from "@/components/Map"; @@ -14,13 +15,16 @@ import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } f import LoadingComponent from '@/components/LoadingComponent'; import { Trashbin } from '@/app/types'; import { Copy, Info } from 'lucide-react'; +import {useTranslation} from '@/lib/TranslationContext' // import { Input } from "@/components/ui/input"; // import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; // Bins currently always assigned to a single collector // Treated like a boolean for now: assigned or not assigned + const COLLECTOR_ID = "66fab28bd6afdad80f1d8dca"; + const headerSortButton = (column: any, displayname: string) => { return ( - - - +
+ + + +
- {/* Only render the tabs when all information was fetched */} - { centerCoordinates && initialZoom && fillThresholds && batteryThresholds && startEndCoordinates ? + {centerCoordinates && initialZoom && fillThresholds && batteryThresholds && startEndCoordinates ? ( - Map View - Table View + + {t("menu.map_view")} + + + {t("menu.table_view")} +
@@ -330,75 +347,30 @@ const RoutePlanning = () => { fillThresholds={fillThresholds} batteryThresholds={batteryThresholds} isRoutePlanning={true} - onTrashbinClick={handleTrashbinClick} tripStartEnd={startEndCoordinates} selectedBins={selectedBins} optimizedBins={optimizedBins} - showRoute={showRoute} - /> + showRoute={showRoute} onTrashbinClick={function (trashbin: Trashbin): void { + throw new Error('Function not implemented.'); + } } />
- -
- -
-
-
: - - } - {/* Commented out, as options are not supported yet */} - {/*
-

Options

-
-

Assignee:

- -
-
-

Time Constraint:

- -

Minutes

-
-
-

Optimization Criterion:

- -
-
*/} + + ) : ( + + )} - Google Maps Link + {t("menu.google_maps_link")}
- + {googleMapsLink}
@@ -407,10 +379,10 @@ const RoutePlanning = () => { - Copy + {t("menu.copy")}
-
+
@@ -418,4 +390,5 @@ const RoutePlanning = () => { ); }; + export default RoutePlanning; diff --git a/app/projects/[city]/trash/settings/page.tsx b/app/projects/[city]/trash/settings/page.tsx index 4eba030..afb61c8 100644 --- a/app/projects/[city]/trash/settings/page.tsx +++ b/app/projects/[city]/trash/settings/page.tsx @@ -5,6 +5,8 @@ import api from '@/lib/axios-api' import PageTitle from "@/components/PageTitle"; import LoadingComponent from "@/components/LoadingComponent"; import { Info } from "lucide-react"; +import {useTranslation} from '@/lib/TranslationContext' + export default function ProjectSettings() { const [mapCenterCoordinates, setMapCenterCoordinates] = useState<[string, string]>(["0", "0"]); @@ -16,6 +18,7 @@ export default function ProjectSettings() { const [loading, setLoading] = useState(true); const [updated, setUpdated] = useState(false); const [errors, setErrors] = useState({ mapCenter: "", startEnd: "", zoomLevel: "", fillLevelInterval: "", fillThresholds: "", batteryThresholds: ""}); + const { t } = useTranslation(); useEffect(() => { const fetchData = async () => { @@ -215,14 +218,15 @@ export default function ProjectSettings() { return (
- +
+ {/* Map Center Coordinates */}
- + - The maps are centered on this coordinate. + {t("menu.coordinates_city_center_info")}
@@ -239,14 +243,16 @@ export default function ProjectSettings() { className="border border-gray-300 rounded px-3 py-2 w-[200px]" />
- {errors.mapCenter &&

{errors.mapCenter}

} + {errors.mapCenter &&

{t(errors.mapCenter)}

}
+ + {/* Start-End Coordinates */}
- + - The route planning takes these coordinates as start and end point. + {t("menu.coordinates_depot_info")}
@@ -263,14 +269,16 @@ export default function ProjectSettings() { className="border border-gray-300 rounded px-3 py-2 w-[200px]" />
- {errors.startEnd &&

{errors.startEnd}

} + {errors.startEnd &&

{t(errors.startEnd)}

}
+ + {/* Zoom Level */}
- + - Factor how much the map is zoomed in. + {t("menu.zoom_level_info")}
setZoomLevel(e.target.value)} className="border border-gray-300 rounded px-3 py-2 w-[100px]" - /> - {errors.zoomLevel &&

{errors.zoomLevel}

} + /> + {errors.zoomLevel &&

{t(errors.zoomLevel)}

}
+ + {/* Fill Level Interval */}
- + - Over how many hours the fill level change will be computed. + {t("menu.fill_level_interval_info")}
setFillLevelInterval(e.target.value)} className="border border-gray-300 rounded px-3 py-2 w-[100px]" /> - {errors.fillLevelInterval &&

{errors.fillLevelInterval}

} + {errors.fillLevelInterval &&

{t(errors.fillLevelInterval)}

}
+ + {/* Fill Level Thresholds */}
- + - Basis for color coding throughout the dashboard. + {t("menu.fill_level_thresholds_info")}
-
+
setFillThresholds([e.target.value, fillThresholds[1]])} className="border border-gray-300 rounded-l px-3 py-2 w-1/5" /> -
+
setFillThresholds([fillThresholds[0], e.target.value])} className="border border-gray-300 rounded-r px-3 py-2 w-1/5" /> -
+
- {errors.fillThresholds &&

{errors.fillThresholds}

} + {errors.fillThresholds &&

{t(errors.fillThresholds)}

}
+ + {/* Battery Level Thresholds */}
- + - Basis for color coding throughout the dashboard. + {t("menu.battery_level_thresholds_info")}
-
+
setBatteryThresholds([e.target.value, batteryThresholds[1]])} className="border border-gray-300 rounded-l px-3 py-2 w-1/5" /> -
+
setBatteryThresholds([batteryThresholds[0], e.target.value])} className="border border-gray-300 rounded-r px-3 py-2 w-1/5" /> -
+
- {errors.batteryThresholds &&

{errors.batteryThresholds}

} + {errors.batteryThresholds &&

{t(errors.batteryThresholds)}

}
+ + {/* Save and Cancel Buttons */}
); + } diff --git a/app/projects/[city]/trash/trashbins/page.tsx b/app/projects/[city]/trash/trashbins/page.tsx index d3983cd..6294d73 100644 --- a/app/projects/[city]/trash/trashbins/page.tsx +++ b/app/projects/[city]/trash/trashbins/page.tsx @@ -2,108 +2,61 @@ import React, { useCallback, useState, useEffect } from "react"; import { useRouter } from "next/navigation"; -import api from '@/lib/axios-api' +import api from "@/lib/axios-api"; import PageTitle from "@/components/PageTitle"; import { DataTable } from "@/components/DataTable"; import { ColumnDef } from "@tanstack/react-table"; import { Button } from "@/components/ui/button"; -import { Trashbin } from '@/app/types'; -import { io, Socket } from 'socket.io-client'; +import { Trashbin } from "@/app/types"; +import { io, Socket } from "socket.io-client"; +import { useTranslation } from "@/lib/TranslationContext"; // Import translation hook -// Bins currently always assigned to a single collector -// Treated like a boolean for now: assigned or not assigned const COLLECTOR_ID = "66fab28bd6afdad80f1d8dca"; -const headerSortButton = (column: any, displayname: string) => { +const headerSortButton = (column: any, displayName: string) => { return ( ); }; -const columns: ColumnDef[] = [ - { - accessorKey: "identifier", - header: ({ column }) => { - return headerSortButton(column, "Identifier"); - }, - }, - { - accessorKey: "name", - header: ({ column }) => { - return headerSortButton(column, "Name"); - }, - }, - { - accessorKey: "fillLevel", - header: ({ column }) => { - return headerSortButton(column, "Fill Level"); - }, - }, - { - accessorKey: "fillLevelChange", - header: ({ column }) => { - return headerSortButton(column, "Fill Level Change"); - }, - }, - { - accessorKey: "location", - header: ({ column }) => { - return headerSortButton(column, "Location"); - }, - }, - { - accessorKey: "lastEmptied", - header: ({ column }) => { - return headerSortButton(column, "Last Emptied"); - }, - }, - { - accessorKey: "batteryLevel", - header: ({ column }) => { - return headerSortButton(column, "Battery Level"); - }, - }, - { - accessorKey: "signalStrength", - header: ({ column }) => { - return headerSortButton(column, "Signal Strength"); - }, - }, - { accessorKey: "assigned", - header: ({ column }) => { - return headerSortButton(column, "Assigned"); - }, - }, -]; - export default function TrashbinsOverview() { + const { t } = useTranslation(); // Translation hook const [trashbinData, setTrashbinData] = useState([]); const router = useRouter(); const [socket, setSocket] = useState(null); - const handleClick = useCallback((trashbin: Trashbin) => { - const city = localStorage.getItem("cityName"); - const type = localStorage.getItem("projectType"); - router.push(`/projects/${city}/${type}/trashbins/${trashbin.identifier}`); - }, [router]); + const handleClick = useCallback( + (trashbin: Trashbin) => { + const city = localStorage.getItem("cityName"); + const type = localStorage.getItem("projectType"); + router.push(`/projects/${city}/${type}/trashbins/${trashbin.identifier}`); + }, + [router] + ); useEffect(() => { if (!socket) { const newSocket = io(`${process.env.NEXT_PUBLIC_BACKEND_URL}`); - newSocket.on('newData', (data) => { - if(data.message.fill_level) { - let adjustedFillLevel = (data.message.fill_level<=1) ? data.message.fill_level*100 : data.message.fill_level; - setTrashbinData(trashbinData => { - if(trashbinData) { + newSocket.on("newData", (data) => { + if (data.message.fill_level) { + let adjustedFillLevel = + data.message.fill_level <= 1 + ? data.message.fill_level * 100 + : data.message.fill_level; + setTrashbinData((trashbinData) => { + if (trashbinData) { let trashbinDataCopy = [...trashbinData]; - trashbinDataCopy = trashbinDataCopy.map(tData => { - if (tData.sensors && tData.sensors.includes(data.message.sensor_id)) { + trashbinDataCopy = trashbinDataCopy.map((tData) => { + if ( + tData.sensors && + tData.sensors.includes(data.message.sensor_id) + ) { return { ...tData, fillLevel: adjustedFillLevel }; } return tData; @@ -113,13 +66,19 @@ export default function TrashbinsOverview() { return trashbinData; }); } - if(data.message.battery_level) { - let adjustedBatteryLevel = (data.message.battery_level<=1) ? data.message.battery_level*100 : data.message.battery_level; - setTrashbinData(trashbinData => { - if(trashbinData) { + if (data.message.battery_level) { + let adjustedBatteryLevel = + data.message.battery_level <= 1 + ? data.message.battery_level * 100 + : data.message.battery_level; + setTrashbinData((trashbinData) => { + if (trashbinData) { let trashbinDataCopy = [...trashbinData]; - trashbinDataCopy = trashbinDataCopy.map(tData => { - if (tData.sensors && tData.sensors.includes(data.message.sensor_id)) { + trashbinDataCopy = trashbinDataCopy.map((tData) => { + if ( + tData.sensors && + tData.sensors.includes(data.message.sensor_id) + ) { return { ...tData, batteryLevel: adjustedBatteryLevel }; } return tData; @@ -129,8 +88,7 @@ export default function TrashbinsOverview() { return trashbinData; }); } - console.log('Received new data:', data); - // Update your frontend UI with the new data + console.log("Received new data:", data); }); setSocket(newSocket); @@ -157,9 +115,9 @@ export default function TrashbinsOverview() { }, } ); - var transformedTrashbinData: Trashbin[] = allTrashbinsResponse.data.trashbins; + var transformedTrashbinData: Trashbin[] = + allTrashbinsResponse.data.trashbins; - // Get the currently assigned bins const assignedTrashbinsResponse = await api.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trash-collector/${COLLECTOR_ID}/trashbins`, { @@ -168,9 +126,10 @@ export default function TrashbinsOverview() { }, } ); - const assignedTrashbins = assignedTrashbinsResponse.data.assignedTrashbins.map((item: Trashbin) => item._id); + const assignedTrashbins = assignedTrashbinsResponse.data.assignedTrashbins.map( + (item: Trashbin) => item._id + ); - // Set the assigned property for each trashbin to true, if its id is in the assignedTrashbins array transformedTrashbinData = transformedTrashbinData.map((item: Trashbin) => { return { ...item, @@ -186,9 +145,51 @@ export default function TrashbinsOverview() { fetchData(); }, []); + const columns: ColumnDef[] = [ + { + accessorKey: "identifier", + header: ({ column }) => headerSortButton(column, t("menu.identifier")), + }, + { + accessorKey: "name", + header: ({ column }) => headerSortButton(column, t("menu.name")), + }, + { + accessorKey: "fillLevel", + header: ({ column }) => headerSortButton(column, t("menu.fill_level")), + }, + { + accessorKey: "fillLevelChange", + header: ({ column }) => + headerSortButton(column, t("menu.fill_level_change")), + }, + { + accessorKey: "location", + header: ({ column }) => headerSortButton(column, t("menu.location")), + }, + { + accessorKey: "lastEmptied", + header: ({ column }) => headerSortButton(column, t("menu.last_emptied")), + }, + { + accessorKey: "batteryLevel", + header: ({ column }) => + headerSortButton(column, t("menu.battery_level")), + }, + { + accessorKey: "signalStrength", + header: ({ column }) => + headerSortButton(column, t("menu.signal_strength")), + }, + { + accessorKey: "assigned", + header: ({ column }) => headerSortButton(column, t("menu.assigned")), + }, + ]; + return (
- +
(null); // Remove any project data that might be stored locally when navigating back to the projects page @@ -53,15 +54,13 @@ export default function Projects() { const projects = response.data.projects; - const transformedData = projects.map((item: any) => { - return { - id: item._id, - identifier: item.identifier, - name: item.name, - projectType: item.projectType.toLowerCase(), - cityName: item.city.name.toLowerCase(), - }; - }); + const transformedData = projects.map((item: any) => ({ + id: item._id, + identifier: item.identifier, + name: item.name, + projectType: item.projectType.toLowerCase(), + cityName: item.city.name.toLowerCase(), + })); setProjectData(transformedData); } catch (error) { @@ -73,9 +72,11 @@ export default function Projects() { return (
- - { !projectData ? - : + {/* Translated title */} + + {!projectData ? ( + + ) : (
{projectData.map((project) => (
- } + )}
); } diff --git a/components/LanguageSwitcher.tsx b/components/LanguageSwitcher.tsx new file mode 100644 index 0000000..95daf56 --- /dev/null +++ b/components/LanguageSwitcher.tsx @@ -0,0 +1,24 @@ +import React from "react"; +import { useTranslation } from "../lib/TranslationContext"; +import { GlobeIcon } from "lucide-react"; // Import Globe icon + +export default function LanguageSwitcher() { + const { language, setLanguage } = useTranslation(); + + const toggleLanguage = () => { + const newLanguage = language === "en" ? "de" : "en"; + setLanguage(newLanguage); + }; + + return ( +
+
+ +
+
+ ); +} diff --git a/components/SideNavbar.tsx b/components/SideNavbar.tsx index f72ed61..816a706 100644 --- a/components/SideNavbar.tsx +++ b/components/SideNavbar.tsx @@ -4,6 +4,7 @@ import { useEffect, useState } from "react"; import { Nav } from "@/components/ui/nav"; import { Button } from "@/components/ui/button"; +import { useTranslation } from "../lib/TranslationContext"; // Import useTranslation import { useWindowWidth } from "@react-hook/window-size"; import { @@ -20,34 +21,78 @@ import { export default function SideNavbar() { const [isCollapsed, setIsCollapsed] = useState(false); + const city = localStorage.getItem("cityName"); const type = localStorage.getItem("projectType"); const onlyWidth = useWindowWidth(); const mobileWidth = onlyWidth < 768; + const { t } = useTranslation(); // Translation hook + function toggleSidebar() { setIsCollapsed(!isCollapsed); } - const overviewLinks = type === "trash" ? [ - { title: "Dashboard", href: `/projects/${city}/${type}`, icon: LayoutDashboard, variant: "default" as "default" | "ghost", }, - { title: "Map", href: `/projects/${city}/${type}/map`, icon: MapIcon, variant: "ghost" as "default" | "ghost", }, - { title: "Route", href: `/projects/${city}/${type}/route`, icon: Route, variant: "ghost" as "default" | "ghost", }, - ] : [ - { title: "Dashboard", href: `/projects/${city}/${type}`, icon: LayoutDashboard, variant: "default" as "default" | "ghost", }, - ]; + // Dynamically translated links + const overviewLinks = + type === "trash" + ? [ + { + title: t("menu.dashboard"), // Translated text + href: `/projects/${city}/${type}`, + icon: LayoutDashboard, + variant: "default" as "default" | "ghost", + }, + { + title: t("menu.map"), // Translated text + href: `/projects/${city}/${type}/map`, + icon: MapIcon, + variant: "ghost" as "default" | "ghost", + }, + { + title: t("menu.route"), // Translated text + href: `/projects/${city}/${type}/route`, + icon: Route, + variant: "ghost" as "default" | "ghost", + }, + ] + : [ + { + title: t("menu.dashboard"), // Translated text + href: `/projects/${city}/${type}`, + icon: LayoutDashboard, + variant: "default" as "default" | "ghost", + }, + ]; - const dataLinks = type === "trash" ? [ - { title: "Trashbins", href: `/projects/${city}/${type}/trashbins`, icon: Trash2Icon, variant: "ghost" as "default" | "ghost", }, - ] : []; + const dataLinks = + type === "trash" + ? [ + { + title: t("menu.trashbins"), // Translated text + href: `/projects/${city}/${type}/trashbins`, + icon: Trash2Icon, + variant: "ghost" as "default" | "ghost", + }, + ] + : []; const settingsLinks = [ - { title: "Project", href: `/projects/${city}/${type}/settings`, icon: Settings2, variant: "ghost" as "default" | "ghost", }, - { title: "Account", href: "/settings", icon: Settings, variant: "ghost" as "default" | "ghost", }, + { + title: t("menu.project"), // Translated text + href: `/projects/${city}/${type}/settings`, + icon: Settings2, + variant: "ghost" as "default" | "ghost", + }, + { + title: t("menu.account"), // Translated text + href: "/settings", + icon: Settings, + variant: "ghost" as "default" | "ghost", + }, ]; - return (
{!mobileWidth && ( @@ -64,21 +109,23 @@ export default function SideNavbar() {
- - - - -
+ {[totalCardData, nearlyFullCardData, lowBatteryCardData, brokenSensorsCardData].map( + (cardData, index) => ( + + ) + )} +
+
); } diff --git a/app/projects/[city]/trash/trashbins/[identifier]/edit/page.tsx b/app/projects/[city]/trash/trashbins/[identifier]/edit/page.tsx index d564c64..af3d78f 100644 --- a/app/projects/[city]/trash/trashbins/[identifier]/edit/page.tsx +++ b/app/projects/[city]/trash/trashbins/[identifier]/edit/page.tsx @@ -7,6 +7,8 @@ import PageTitle from "@/components/PageTitle"; import { Button } from "@/components/ui/button"; import LoadingComponent from "@/components/LoadingComponent"; import { Info } from "lucide-react"; +import { useTranslation } from '@/lib/TranslationContext'; + const EditTrashbinPage = ({ params }: { params: { identifier: string } }) => { type TrashBinUpdate = { @@ -19,6 +21,7 @@ const EditTrashbinPage = ({ params }: { params: { identifier: string } }) => { }; const [trashbin, setTrashbin] = useState(null); const [errors, setErrors] = useState({ name: "", coordinates: "", location: "", image: "" }); + const { t } = useTranslation(); useEffect(() => { const fetchData = async () => { @@ -120,11 +123,14 @@ const EditTrashbinPage = ({ params }: { params: { identifier: string } }) => { return (
- + {
- + - Latitude and longitude are the first entry in the list when - right-clicking on the map in Google Maps. + + {t("editTrashbin.coordinatesTooltip")} +
@@ -177,10 +184,12 @@ const EditTrashbinPage = ({ params }: { params: { identifier: string } }) => { step="any" />
- {errors.coordinates && (

{errors.coordinates}

)} + {errors.coordinates && ( +

{errors.coordinates}

+ )}
- + { } className="border border-gray-300 rounded px-3 py-2 w-[300px] mr-2" /> - {errors.name &&

{errors.name}

} + {errors.location &&

{errors.location}

}
- + { } className="border border-gray-300 rounded px-3 py-2 w-[600px] mr-2" /> - {errors.location &&

{errors.location}

} + {errors.image &&

{errors.image}

}
); }; - export default EditTrashbinPage; diff --git a/app/projects/[city]/trash/trashbins/[identifier]/page.tsx b/app/projects/[city]/trash/trashbins/[identifier]/page.tsx index 0ceb73e..97a8c22 100644 --- a/app/projects/[city]/trash/trashbins/[identifier]/page.tsx +++ b/app/projects/[city]/trash/trashbins/[identifier]/page.tsx @@ -13,6 +13,7 @@ import LineChart from "@/components/LineChart"; import LoadingComponent from "@/components/LoadingComponent"; import { Trashbin } from '@/app/types'; import { io, Socket } from 'socket.io-client'; +import { useTranslation } from "@/lib/TranslationContext"; interface HistoryDataItem { timestamp: Date; @@ -43,6 +44,8 @@ export default function TrashbinDetail({ const [batteryLevelData, setBatteryLevelData] = useState([]); const [history, setHistory] = useState([]); const [socket, setSocket] = useState(null); + const { t } = useTranslation(); + useEffect(() => { if (!socket) { @@ -258,54 +261,59 @@ export default function TrashbinDetail({ const type = localStorage.getItem("projectType"); return `/projects/${city}/${type}/trashbins/${params.identifier}/edit`; } - return (
- +
- { (fillLevelData.length === 0 && batteryLevelData.length === 0) ? + {fillLevelData.length === 0 && batteryLevelData.length === 0 ? (
- + -
: +
+ ) : ( - Graphical View + {t("trashbin.tabs.graphicalView")} - Table View + {t("trashbin.tabs.tableView")} -
- { fillLevelData.length > 0 && - <> -

Fill Level

+
+ {fillLevelData.length > 0 && ( + +

{t("trashbin.fillLevel")}

-
- } - { batteryLevelData.length > 0 && - <> -

Battery Level

- + red={[fillThresholds[1], 100]} + /> +
+ )} + {batteryLevelData.length > 0 && ( + +

{t("trashbin.batteryLevel")}

-
- } + + )}
@@ -319,23 +327,36 @@ export default function TrashbinDetail({
- } + )}
-
-

Location: {trashbinData.location} ({trashbinData.coordinates[0]}, {trashbinData.coordinates[1]})

- -
-

Last Emptied: {trashbinData.lastEmptied ? trashbinData.lastEmptied.toString() : "N/A"}

-

Signal Strength: {trashbinData.signalStrength}

-
- +
+

+ {t("trashbin.location")}:{" "} + {trashbinData.location} ({trashbinData.coordinates[0]},{" "} + {trashbinData.coordinates[1]}) +

+ +
+

+ {t("trashbin.lastEmptied")}:{" "} + {trashbinData.lastEmptied + ? trashbinData.lastEmptied.toString() + : t("trashbin.notAvailable")} +

+

+ {t("trashbin.signalStrength")}:{" "} + {trashbinData.signalStrength} +

+
); -} +}; + + diff --git a/app/projects/page.tsx b/app/projects/page.tsx index 4c30e9c..91a865e 100644 --- a/app/projects/page.tsx +++ b/app/projects/page.tsx @@ -75,7 +75,7 @@ export default function Projects() { {/* Translated title */} {!projectData ? ( - + ) : (
{projectData.map((project) => ( diff --git a/app/settings/page.tsx b/app/settings/page.tsx index 8e26058..9b3750c 100644 --- a/app/settings/page.tsx +++ b/app/settings/page.tsx @@ -3,6 +3,7 @@ import React from 'react'; import { Button } from "@/components/ui/button"; import PageTitle from '@/components/PageTitle'; +import { useTranslation } from '@/lib/TranslationContext'; // import { Label } from "@/components/ui/label"; // import { Input } from "@/components/ui/input"; // import { Textarea } from "@/components/ui/textarea"; @@ -11,9 +12,7 @@ import PageTitle from '@/components/PageTitle'; // import { useTheme } from "next-themes"; // https://github.com/pacocoursey/next-themes export default function Component() { - // const [language, setLanguage] = useState('de'); - // const [theme, setTheme] = useState('light'); - + const { t } = useTranslation(); // Use translation hook for localization const handleLogout = () => { window.location.href = '/login'; // Redirect to the login page (where the authToken is cleared) } @@ -31,50 +30,57 @@ export default function Component() {
- -

Language and theme settings coming soon!

+

+ {t("page.comingSoon")} +

{/*
-

Language

-

Choose your preferred language

+

{t("page.language.title")}

+

{t("page.language.description")}

- // Comment: Radio button style: https://tailwindcomponents.com/component/radio-buttons-1
- setLanguage('de')} /> - -
-
- setLanguage('en')} /> - -
-
-
-
*/} - {/* - -
-

Theme

-

Choose your preferred theme

-
-
- -
-
- setTheme('light')} /> -
- setTheme('dark')} /> -
@@ -84,3 +90,4 @@ export default function Component() {
); } + diff --git a/components/DataTable.tsx b/components/DataTable.tsx index 2957cce..17ed2ce 100644 --- a/components/DataTable.tsx +++ b/components/DataTable.tsx @@ -27,6 +27,7 @@ import { import { Button } from "./ui/button"; import { Input } from "@/components/ui/input"; import { Info, ArrowUpDown, MoveUp, MoveDown } from "lucide-react"; +import { useTranslation } from "@/lib/TranslationContext"; interface DataTableProps { columns: ColumnDef[]; @@ -46,6 +47,7 @@ export function DataTable({ selectedRows, }: DataTableProps) { const [sorting, setSorting] = React.useState([]); + const { t } = useTranslation(); const [columnFilters, setColumnFilters] = React.useState( [] ); @@ -115,18 +117,18 @@ export function DataTable({ {showSearchBar && (
table.setGlobalFilter(event.target.value)} className="max-w-sm" /> - + - Search by name, location, or identifier. + {t("tooltips.search")} - Sort by clicking on the column headers. + {t("tooltips.sort")} { showExportButton && ( )}
@@ -210,7 +212,7 @@ export function DataTable({ colSpan={columns.length} className="h-24 text-center" > - Loading... + {t("menu.loading")} )} @@ -224,7 +226,7 @@ export function DataTable({ onClick={() => table.previousPage()} disabled={!table.getCanPreviousPage()} > - Previous + {t("menu.Previous")}
diff --git a/lib/locales/de.json b/lib/locales/de.json index dd79cb7..3f69bce 100644 --- a/lib/locales/de.json +++ b/lib/locales/de.json @@ -2,6 +2,7 @@ "menu": { "current_language": "Aktuelle Sprache", + "Loading projects...": "Laden von Projekten...", "dashboard": "Armaturenbrett", "Your Projects":"Ihre Projekte", "route_planning": "Routenplanung", @@ -30,6 +31,7 @@ "data": "Daten", "settings": "Einstellungen", "trashbins": "Mülleimer/papierkorb", + "Export to CSV":"Als CSV exportieren", "project": "Projekt", "account": "Konto", "location": "Ort", @@ -52,10 +54,56 @@ "fill_level_thresholds": "Schwellenwerte für Füllstände", "fill_level_thresholds_info": "Basis für Farbkodierung im gesamten Dashboard.", "battery_level_thresholds": "Schwellenwerte für Batteriestände", + "Previous":"Vorherige", + "Next":"Nächste", "battery_level_thresholds_info": "Basis für Farbkodierung im gesamten Dashboard." + }, "tooltips": { + "search": "Nach Name, Standort oder Kennung suchen.", + "sort": "Sortieren durch Klicken auf die Spaltenüberschriften." + }, "placeholders": { + "search": "Suchen..." }, - "map": { + "trashbin": { + "title": "Mülleimer {{name}} ({{identifier}})", + "editButton": "Mülleimer bearbeiten", + "loadingHistory": "Verlauf wird geladen...", + "tabs": { + "graphicalView": "Grafische Ansicht", + "tableView": "Tabellenansicht" + }, + "fillLevel": "Füllstand", + "batteryLevel": "Batteriestand", + "location": "Standort", + "viewOnGoogleMaps": "Auf Google Maps ansehen", + "lastEmptied": "Zuletzt geleert", + "signalStrength": "Signalstärke", + "notAvailable": "Nicht verfügbar" + }, + "login": { + "title": "Anmeldung", + "description": "Geben Sie Ihre E-Mail-Adresse und Ihr Passwort ein, um sich bei Ihrem Konto anzumelden", + "email": "E-Mail", + "emailPlaceholder": "Ihre E-Mail-Adresse", + "password": "Passwort", + "passwordPlaceholder": "Ihr Passwort", + "loginButton": "Anmelden" + }, + "page": { + "logout": "Abmelden", + "comingSoon": "Sprache und Theme-Einstellungen kommen bald!" + }, + "editTrashbin": { + "title": "Mülleimer bearbeiten {{name}} ({{identifier}})", + "nameLabel": "Name", + "coordinatesLabel": "Koordinaten (Breitengrad, Längengrad) des Mülleimers.", + "coordinatesTooltip": "Breitengrad und Längengrad sind der erste Eintrag in der Liste, wenn Sie mit der rechten Maustaste auf die Karte in Google Maps klicken.", + "locationLabel": "Standort", + "imageLabel": "Bild-URL", + "saveButton": "Speichern", + "cancelButton": "Abbrechen" + }, + "map": { "title": "Karte", "label": "Mülleimer", "capacity": "Kapazität", diff --git a/lib/locales/en.json b/lib/locales/en.json index 612e3ee..df2954d 100644 --- a/lib/locales/en.json +++ b/lib/locales/en.json @@ -1,10 +1,12 @@ { "menu": { "current_language": "Current Language", + "Loading projects...": "Loading Projects...", "overview": "overview", "route_planning": "Route Planning", "loading_map": "Loading map...", "show_route": "Show Route", + "Export to CSV":"Export to CSV", "export_to_maps": "Export to Maps", "assign_route": "Assign Route", "unassign_all_bins": "Unassign All Bins", @@ -17,6 +19,8 @@ "fill_level_change": "Fill Level Change", "google_maps_link": "Google Maps Link", "copy": "Copy", + "Previous":"Previous", + "Next":"Next", "Your Projects":"Your Projects", "Distribution of fill levels of all bins":"Distribution of fill levels of all bins", "dashboard": "Dashboard", @@ -52,8 +56,51 @@ "fill_level_thresholds_info": "Basis for color coding throughout the dashboard.", "battery_level_thresholds": "Battery Level Thresholds", "battery_level_thresholds_info": "Basis for color coding throughout the dashboard." - }, + "tooltips": { + "search": "Search by name, location, or identifier.", + "sort": "Sort by clicking on the column headers." + },"placeholders": { + "search": "Search..." + }, + "trashbin": { + "title": "Trashbin {{name}} ({{identifier}})", + "editButton": "Edit Trashbin", + "loadingHistory": "Loading history...", + "tabs": { + "graphicalView": "Graphical View", + "tableView": "Table View" + }, + "fillLevel": "Fill Level", + "batteryLevel": "Battery Level", + "location": "Location", + "viewOnGoogleMaps": "View on Google Maps", + "lastEmptied": "Last Emptied", + "signalStrength": "Signal Strength", + "notAvailable": "N/A" + }, + "login": { + "title": "Login", + "description": "Enter your email and password to login to your account", + "email": "Email", + "emailPlaceholder": "Your email address", + "password": "Password", + "passwordPlaceholder": "Your password", + "loginButton": "Login" + }, + "page": { + "logout": "Logout", + "comingSoon": "Language and theme settings coming soon!" + }, + "editTrashbin": { + "title": "Edit Trashbin {{name}} ({{identifier}})", + "nameLabel": "Name", + "coordinatesLabel": "Coordinates (latitude, longitude) of trashbin.", + "coordinatesTooltip": "Latitude and longitude are the first entry in the list when right-clicking on the map in Google Maps.", + "locationLabel": "Location", + "imageLabel": "Image URL", + "saveButton": "Save", + "cancelButton": "Cancel"}, "map": { "title": "Map", "label": "Trash Bin", diff --git a/package-lock.json b/package-lock.json index a3698ca..87f2492 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8155,6 +8155,126 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.18.tgz", + "integrity": "sha512-tOBlDHCjGdyLf0ube/rDUs6VtwNOajaWV+5FV/ajPgrvHeisllEdymY/oDgv2cx561+gJksfMUtqf8crug7sbA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.18.tgz", + "integrity": "sha512-uJCEjutt5VeJ30jjrHV1VIHCsbMYnEqytQgvREx+DjURd/fmKy15NaVK4aR/u98S1LGTnjq35lRTnRyygglxoA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.18.tgz", + "integrity": "sha512-IL6rU8vnBB+BAm6YSWZewc+qvdL1EaA+VhLQ6tlUc0xp+kkdxQrVqAnh8Zek1ccKHlTDFRyAft0e60gteYmQ4A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.18.tgz", + "integrity": "sha512-RCaENbIZqKKqTlL8KNd+AZV/yAdCsovblOpYFp0OJ7ZxgLNbV5w23CUU1G5On+0fgafrsGcW+GdMKdFjaRwyYA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.18.tgz", + "integrity": "sha512-3kmv8DlyhPRCEBM1Vavn8NjyXtMeQ49ID0Olr/Sut7pgzaQTo4h01S7Z8YNE0VtbowyuAL26ibcz0ka6xCTH5g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.18.tgz", + "integrity": "sha512-mliTfa8seVSpTbVEcKEXGjC18+TDII8ykW4a36au97spm9XMPqQTpdGPNBJ9RySSFw9/hLuaCMByluQIAnkzlw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.18.tgz", + "integrity": "sha512-J5g0UFPbAjKYmqS3Cy7l2fetFmWMY9Oao32eUsBPYohts26BdrMUyfCJnZFQkX9npYaHNDOWqZ6uV9hSDPw9NA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.18.tgz", + "integrity": "sha512-Ynxuk4ZgIpdcN7d16ivJdjsDG1+3hTvK24Pp8DiDmIa2+A4CfhJSEHHVndCHok6rnLUzAZD+/UOKESQgTsAZGg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } } } } From 4b82689abf555281ac3600d65e404918e7822687 Mon Sep 17 00:00:00 2001 From: Ammar Yousaf Date: Tue, 26 Nov 2024 22:06:58 +0100 Subject: [PATCH 27/74] Fixed language --- .../trash/trashbins/[identifier]/page.tsx | 12 +- lib/locales/de.json | 11 +- lib/locales/en.json | 2 +- package-lock.json | 2525 ++++++++++------- 4 files changed, 1487 insertions(+), 1063 deletions(-) diff --git a/app/projects/[city]/trash/trashbins/[identifier]/page.tsx b/app/projects/[city]/trash/trashbins/[identifier]/page.tsx index 97a8c22..1dd708b 100644 --- a/app/projects/[city]/trash/trashbins/[identifier]/page.tsx +++ b/app/projects/[city]/trash/trashbins/[identifier]/page.tsx @@ -264,12 +264,12 @@ export default function TrashbinDetail({ return (
- + + diff --git a/lib/locales/de.json b/lib/locales/de.json index c2a40e1..0a2eab9 100644 --- a/lib/locales/de.json +++ b/lib/locales/de.json @@ -2,13 +2,9 @@ "menu": { "current_language": "Aktuelle Sprache", -<<<<<<< HEAD - "Loading projects...": "Laden von Projekten...", - "dashboard": "Armaturenbrett", -======= "dashboard": "Dashboard", ->>>>>>> 60960350be16fca48cc977f238867689a22cb362 "Your Projects":"Ihre Projekte", + "Export to CSV":"Nach CSV exportieren", "route_planning": "Routenplanung", "loading_map": "Karte wird geladen...", "show_route": "Route anzeigen", @@ -34,12 +30,7 @@ "route": "Route", "data": "Daten", "settings": "Einstellungen", -<<<<<<< HEAD - "trashbins": "Mülleimer/papierkorb", - "Export to CSV":"Als CSV exportieren", -======= "trashbins": "Mülleimer", ->>>>>>> 60960350be16fca48cc977f238867689a22cb362 "project": "Projekt", "account": "Konto", "location": "Ort", diff --git a/lib/locales/en.json b/lib/locales/en.json index df2954d..6dd7874 100644 --- a/lib/locales/en.json +++ b/lib/locales/en.json @@ -24,7 +24,7 @@ "Your Projects":"Your Projects", "Distribution of fill levels of all bins":"Distribution of fill levels of all bins", "dashboard": "Dashboard", - "nearly_full":"nearly full", + "nearly_full":"nearly_full", "total_number":"total_number", "low_battery":"low_battery", "broken_sensors":"broken_sensors", diff --git a/package-lock.json b/package-lock.json index 87f2492..1e2fc57 100644 --- a/package-lock.json +++ b/package-lock.json @@ -102,29 +102,36 @@ "node": ">=6.9.0" } }, + "node_modules/@emnapi/runtime": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", + "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", - "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.4.3" + "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "funding": { - "url": "https://opencollective.com/eslint" - }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, "license": "MIT", "engines": { @@ -156,9 +163,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, "license": "MIT", "engines": { @@ -166,28 +173,28 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", - "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.1.tgz", + "integrity": "sha512-42UH54oPZHPdRHdw6BgoBD6cg/eVTmVrFcgeRDM3jbO7uxSoipVcmcIGFcA5jmOHO5apcyvBhkSKES3fQJnu7A==", "license": "MIT", "dependencies": { - "@floating-ui/utils": "^0.2.8" + "@floating-ui/utils": "^0.2.0" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.12", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz", - "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==", + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.5.tgz", + "integrity": "sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==", "license": "MIT", "dependencies": { - "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.8" + "@floating-ui/core": "^1.0.0", + "@floating-ui/utils": "^0.2.0" } }, "node_modules/@floating-ui/react-dom": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", - "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.9.tgz", + "integrity": "sha512-q0umO0+LQK4+p6aGyvzASqKbKOJcAHJ7ycE9CuUvfx3s9zTHWmGJTPOIlM/hmSBfUfg/XfY5YhLBLR/LHwShQQ==", "license": "MIT", "dependencies": { "@floating-ui/dom": "^1.0.0" @@ -198,20 +205,20 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", - "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz", + "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==", "license": "MIT" }, "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "deprecated": "Use @eslint/config-array instead", "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", + "@humanwhocodes/object-schema": "^2.0.2", "debug": "^4.3.1", "minimatch": "^3.0.5" }, @@ -241,10 +248,438 @@ "dev": true, "license": "BSD-3-Clause" }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.4.tgz", + "integrity": "sha512-p0suNqXufJs9t3RqLBO6vvrgr5OhgbWp76s5gTRvdmxmuv9E1rcaqGUsl3l4mKVmXPkTkTErXediAui4x+8PSA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.2" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.4.tgz", + "integrity": "sha512-0l7yRObwtTi82Z6ebVI2PnHT8EB2NxBgpK2MiKJZJ7cz32R4lxd001ecMhzzsZig3Yv9oclvqqdV93jo9hy+Dw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.2" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.2.tgz", + "integrity": "sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "macos": ">=11", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.2.tgz", + "integrity": "sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "macos": ">=10.13", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.2.tgz", + "integrity": "sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.28", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.2.tgz", + "integrity": "sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.26", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.2.tgz", + "integrity": "sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.28", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.2.tgz", + "integrity": "sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.26", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.2.tgz", + "integrity": "sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.2.tgz", + "integrity": "sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.4.tgz", + "integrity": "sha512-RUgBD1c0+gCYZGCCe6mMdTiOFS0Zc/XrN0fYd6hISIKcDUbAW5NtSQW9g/powkrXYm6Vzwd6y+fqmExDuCdHNQ==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.28", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.2" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.4.tgz", + "integrity": "sha512-2800clwVg1ZQtxwSoTlHvtm9ObgAax7V6MTAB/hDT945Tfyy3hVkmiHpeLPCKYqYR1Gcmv1uDZ3a4OFwkdBL7Q==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.2" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.4.tgz", + "integrity": "sha512-h3RAL3siQoyzSoH36tUeS0PDmb5wINKGYzcLB5C6DIiAn2F3udeFAum+gj8IbA/82+8RGCTn7XW8WTFnqag4tQ==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.31", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.2" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.4.tgz", + "integrity": "sha512-GoR++s0XW9DGVi8SUGQ/U4AeIzLdNjHka6jidVwapQ/JebGVQIpi52OdyxCNVRE++n1FCLzjDovJNozif7w/Aw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.2" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.4.tgz", + "integrity": "sha512-nhr1yC3BlVrKDTl6cO12gTpXMl4ITBUZieehFvMntlCXFzH2bvKG76tBL2Y/OqhupZt81pR7R+Q5YhJxW0rGgQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.2" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.4.tgz", + "integrity": "sha512-uCPTku0zwqDmZEOi4ILyGdmW76tH7dm8kKlOIV1XC5cLyJ71ENAAqarOHQh0RLfpIpbV5KOpXzdU6XkJtS0daw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.2" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.4.tgz", + "integrity": "sha512-Bmmauh4sXUsUqkleQahpdNXKvo+wa1V9KhT2pDA4VJGKwnKMJXiSTGphn0gnJrlooda0QxCtXc6RX1XAU6hMnQ==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.1.1" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.4.tgz", + "integrity": "sha512-99SJ91XzUhYHbx7uhK3+9Lf7+LjwMGQZMDlO/E/YVJ7Nc3lyDFZPGhjwiYdctoH2BOzW9+TnfqcaMKt0jHLdqw==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, "node_modules/@img/sharp-win32-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", - "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.4.tgz", + "integrity": "sha512-3QLocdTRVIrFNye5YocZl+KKpYKP+fksi1QhmOArgx7GyhIbQp/WrJRu176jm8IxromS7RIkzMiMINVdBtC8Aw==", "cpu": [ "x64" ], @@ -254,7 +689,10 @@ "win32" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" }, "funding": { "url": "https://opencollective.com/libvips" @@ -278,9 +716,9 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "license": "MIT", "engines": { "node": ">=12" @@ -337,9 +775,9 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { @@ -353,9 +791,9 @@ } }, "node_modules/@kurkle/color": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz", - "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", + "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==", "license": "MIT" }, "node_modules/@mapbox/corslite": { @@ -372,23 +810,151 @@ "polyline": "bin/polyline.bin.js" }, "engines": { - "node": "*" + "node": "*" + } + }, + "node_modules/@next/env": { + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.18.tgz", + "integrity": "sha512-2vWLOUwIPgoqMJKG6dt35fVXVhgM09tw4tK3/Q34GFXDrfiHlG7iS33VA4ggnjWxjiz9KV5xzfsQzJX6vGAekA==", + "license": "MIT" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.3.tgz", + "integrity": "sha512-L3oDricIIjgj1AVnRdRor21gI7mShlSwU/1ZGHmqM3LzHhXXhdkrfeNY5zif25Bi5Dd7fiJHsbhoZCHfXYvlAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob": "10.3.10" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.18.tgz", + "integrity": "sha512-tOBlDHCjGdyLf0ube/rDUs6VtwNOajaWV+5FV/ajPgrvHeisllEdymY/oDgv2cx561+gJksfMUtqf8crug7sbA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.18.tgz", + "integrity": "sha512-uJCEjutt5VeJ30jjrHV1VIHCsbMYnEqytQgvREx+DjURd/fmKy15NaVK4aR/u98S1LGTnjq35lRTnRyygglxoA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.18.tgz", + "integrity": "sha512-IL6rU8vnBB+BAm6YSWZewc+qvdL1EaA+VhLQ6tlUc0xp+kkdxQrVqAnh8Zek1ccKHlTDFRyAft0e60gteYmQ4A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.18.tgz", + "integrity": "sha512-RCaENbIZqKKqTlL8KNd+AZV/yAdCsovblOpYFp0OJ7ZxgLNbV5w23CUU1G5On+0fgafrsGcW+GdMKdFjaRwyYA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.18.tgz", + "integrity": "sha512-3kmv8DlyhPRCEBM1Vavn8NjyXtMeQ49ID0Olr/Sut7pgzaQTo4h01S7Z8YNE0VtbowyuAL26ibcz0ka6xCTH5g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.18.tgz", + "integrity": "sha512-mliTfa8seVSpTbVEcKEXGjC18+TDII8ykW4a36au97spm9XMPqQTpdGPNBJ9RySSFw9/hLuaCMByluQIAnkzlw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.18.tgz", + "integrity": "sha512-J5g0UFPbAjKYmqS3Cy7l2fetFmWMY9Oao32eUsBPYohts26BdrMUyfCJnZFQkX9npYaHNDOWqZ6uV9hSDPw9NA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@next/env": { + "node_modules/@next/swc-win32-ia32-msvc": { "version": "14.2.18", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.18.tgz", - "integrity": "sha512-2vWLOUwIPgoqMJKG6dt35fVXVhgM09tw4tK3/Q34GFXDrfiHlG7iS33VA4ggnjWxjiz9KV5xzfsQzJX6vGAekA==", - "license": "MIT" - }, - "node_modules/@next/eslint-plugin-next": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.3.tgz", - "integrity": "sha512-L3oDricIIjgj1AVnRdRor21gI7mShlSwU/1ZGHmqM3LzHhXXhdkrfeNY5zif25Bi5Dd7fiJHsbhoZCHfXYvlAw==", - "dev": true, + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.18.tgz", + "integrity": "sha512-Ynxuk4ZgIpdcN7d16ivJdjsDG1+3hTvK24Pp8DiDmIa2+A4CfhJSEHHVndCHok6rnLUzAZD+/UOKESQgTsAZGg==", + "cpu": [ + "ia32" + ], "license": "MIT", - "dependencies": { - "glob": "10.3.10" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" } }, "node_modules/@next/swc-win32-x64-msvc": { @@ -442,16 +1008,6 @@ "node": ">= 8" } }, - "node_modules/@nolyfill/is-core-module": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", - "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.4.0" - } - }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -463,30 +1019,37 @@ } }, "node_modules/@radix-ui/number": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.0.tgz", - "integrity": "sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==", - "license": "MIT" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.1.tgz", + "integrity": "sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + } }, "node_modules/@radix-ui/primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz", - "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==", - "license": "MIT" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz", + "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + } }, "node_modules/@radix-ui/react-arrow": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz", - "integrity": "sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz", + "integrity": "sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.0.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -498,21 +1061,22 @@ } }, "node_modules/@radix-ui/react-collection": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz", - "integrity": "sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.3.tgz", + "integrity": "sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-slot": "1.1.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -523,29 +1087,17 @@ } } }, - "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-context": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", - "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", - "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", + "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==", "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -554,13 +1106,16 @@ } }, "node_modules/@radix-ui/react-context": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", - "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz", + "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==", "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -569,31 +1124,32 @@ } }, "node_modules/@radix-ui/react-dialog": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.2.tgz", - "integrity": "sha512-Yj4dZtqa2o+kG61fzB0H2qUvmwBA2oyQroGLyNtBj1beo1khoQ3q1a2AO8rrQYjd8256CO9+N8L9tvsS+bnIyA==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.1", - "@radix-ui/react-focus-guards": "1.1.1", - "@radix-ui/react-focus-scope": "1.1.0", - "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-portal": "1.1.2", - "@radix-ui/react-presence": "1.1.1", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-slot": "1.1.0", - "@radix-ui/react-use-controllable-state": "1.1.0", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.5.tgz", + "integrity": "sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.4", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-controllable-state": "1.0.1", "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.6.0" + "react-remove-scroll": "2.5.5" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -605,13 +1161,16 @@ } }, "node_modules/@radix-ui/react-direction": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", - "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.1.tgz", + "integrity": "sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==", "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -620,22 +1179,23 @@ } }, "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", - "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz", + "integrity": "sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-escape-keydown": "1.1.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-escape-keydown": "1.0.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -647,24 +1207,25 @@ } }, "node_modules/@radix-ui/react-dropdown-menu": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.2.tgz", - "integrity": "sha512-GVZMR+eqK8/Kes0a36Qrv+i20bAPXSn8rCBTHx30w+3ECnR5o3xixAlqcVaYvLeyKUsm0aqyhWfmUcqufM8nYA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.0.6.tgz", + "integrity": "sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-menu": "2.1.2", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-controllable-state": "1.1.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-menu": "2.0.6", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-controllable-state": "1.0.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -676,13 +1237,16 @@ } }, "node_modules/@radix-ui/react-focus-guards": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.1.tgz", - "integrity": "sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz", + "integrity": "sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==", "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -691,20 +1255,21 @@ } }, "node_modules/@radix-ui/react-focus-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz", - "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.4.tgz", + "integrity": "sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-callback-ref": "1.1.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -716,16 +1281,17 @@ } }, "node_modules/@radix-ui/react-id": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz", - "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz", + "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==", "license": "MIT", "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -734,18 +1300,19 @@ } }, "node_modules/@radix-ui/react-label": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.0.tgz", - "integrity": "sha512-peLblDlFw/ngk3UWq0VnYaOLy6agTZZ+MUO/WhVfm14vJGML+xH4FAl2XQGLqdefjNb7ApRg6Yn7U42ZhmYXdw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.0.2.tgz", + "integrity": "sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.0.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -757,35 +1324,36 @@ } }, "node_modules/@radix-ui/react-menu": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.2.tgz", - "integrity": "sha512-lZ0R4qR2Al6fZ4yCCZzu/ReTFrylHFxIqy7OezIpWF4bL0o9biKo0pFIvkaew3TyZ9Fy5gYVrR5zCGZBVbO1zg==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-collection": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-dismissable-layer": "1.1.1", - "@radix-ui/react-focus-guards": "1.1.1", - "@radix-ui/react-focus-scope": "1.1.0", - "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-popper": "1.2.0", - "@radix-ui/react-portal": "1.1.2", - "@radix-ui/react-presence": "1.1.1", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-roving-focus": "1.1.0", - "@radix-ui/react-slot": "1.1.0", - "@radix-ui/react-use-callback-ref": "1.1.0", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.0.6.tgz", + "integrity": "sha512-BVkFLS+bUC8HcImkRKPSiVumA1VPOOEC5WBMiT+QAVsPzW1FJzI9KnqgGxVDPBcql5xXrHkD3JOVoXWEXD8SYA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.4", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-popper": "1.1.3", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-roving-focus": "1.0.4", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.1", "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.6.0" + "react-remove-scroll": "2.5.5" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -797,27 +1365,28 @@ } }, "node_modules/@radix-ui/react-popper": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz", - "integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.3.tgz", + "integrity": "sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==", "license": "MIT", "dependencies": { + "@babel/runtime": "^7.13.10", "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-layout-effect": "1.1.0", - "@radix-ui/react-use-rect": "1.1.0", - "@radix-ui/react-use-size": "1.1.0", - "@radix-ui/rect": "1.1.0" + "@radix-ui/react-arrow": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1", + "@radix-ui/react-use-rect": "1.0.1", + "@radix-ui/react-use-size": "1.0.1", + "@radix-ui/rect": "1.0.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -828,35 +1397,20 @@ } } }, - "node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-context": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", - "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-portal": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz", - "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.4.tgz", + "integrity": "sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-layout-effect": "1.1.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -868,19 +1422,20 @@ } }, "node_modules/@radix-ui/react-presence": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", - "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.1.tgz", + "integrity": "sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-use-layout-effect": "1.1.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -892,18 +1447,19 @@ } }, "node_modules/@radix-ui/react-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", - "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz", + "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==", "license": "MIT", "dependencies": { - "@radix-ui/react-slot": "1.1.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -915,27 +1471,28 @@ } }, "node_modules/@radix-ui/react-radio-group": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.2.1.tgz", - "integrity": "sha512-kdbv54g4vfRjja9DNWPMxKvXblzqbpEC8kspEkZ6dVP7kQksGCn+iZHkcCz2nb00+lPdRvxrqy4WrvvV1cNqrQ==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-presence": "1.1.1", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-roving-focus": "1.1.0", - "@radix-ui/react-use-controllable-state": "1.1.0", - "@radix-ui/react-use-previous": "1.1.0", - "@radix-ui/react-use-size": "1.1.0" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.1.3.tgz", + "integrity": "sha512-x+yELayyefNeKeTx4fjK6j99Fs6c4qKm3aY38G3swQVTN6xMpsrbigC0uHs2L//g8q4qR7qOcww8430jJmi2ag==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-roving-focus": "1.0.4", + "@radix-ui/react-use-controllable-state": "1.0.1", + "@radix-ui/react-use-previous": "1.0.1", + "@radix-ui/react-use-size": "1.0.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -947,26 +1504,27 @@ } }, "node_modules/@radix-ui/react-roving-focus": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.0.tgz", - "integrity": "sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz", + "integrity": "sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-collection": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.0", - "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-controllable-state": "1.1.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -977,42 +1535,28 @@ } } }, - "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-context": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", - "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-scroll-area": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.1.tgz", - "integrity": "sha512-FnM1fHfCtEZ1JkyfH/1oMiTcFBQvHKl4vD9WnpwkLgtF+UmnXMCad6ECPTaAjcDjam+ndOEJWgHyKDGNteWSHw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.0.5.tgz", + "integrity": "sha512-b6PAgH4GQf9QEn8zbT2XUHpW5z8BzqEc7Kl11TwDrvuTrxlkcjTD5qa/bxgKr+nmuXKu4L/W5UZ4mlP/VG/5Gw==", "license": "MIT", "dependencies": { - "@radix-ui/number": "1.1.0", - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-presence": "1.1.1", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-layout-effect": "1.1.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/number": "1.0.1", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -1024,38 +1568,39 @@ } }, "node_modules/@radix-ui/react-select": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.1.2.tgz", - "integrity": "sha512-rZJtWmorC7dFRi0owDmoijm6nSJH1tVw64QGiNIZ9PNLyBDtG+iAq+XGsya052At4BfarzY/Dhv9wrrUr6IMZA==", - "license": "MIT", - "dependencies": { - "@radix-ui/number": "1.1.0", - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-collection": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-dismissable-layer": "1.1.1", - "@radix-ui/react-focus-guards": "1.1.1", - "@radix-ui/react-focus-scope": "1.1.0", - "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-popper": "1.2.0", - "@radix-ui/react-portal": "1.1.2", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-slot": "1.1.0", - "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-controllable-state": "1.1.0", - "@radix-ui/react-use-layout-effect": "1.1.0", - "@radix-ui/react-use-previous": "1.1.0", - "@radix-ui/react-visually-hidden": "1.1.0", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.0.0.tgz", + "integrity": "sha512-RH5b7af4oHtkcHS7pG6Sgv5rk5Wxa7XI8W5gvB1N/yiuDGZxko1ynvOiVhFM7Cis2A8zxF9bTOUVbRDzPepe6w==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/number": "1.0.1", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.4", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-popper": "1.1.3", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1", + "@radix-ui/react-use-previous": "1.0.1", + "@radix-ui/react-visually-hidden": "1.0.3", "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.6.0" + "react-remove-scroll": "2.5.5" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -1067,16 +1612,17 @@ } }, "node_modules/@radix-ui/react-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", - "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", + "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "1.1.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -1085,25 +1631,26 @@ } }, "node_modules/@radix-ui/react-tabs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.1.tgz", - "integrity": "sha512-3GBUDmP2DvzmtYLMsHmpA1GtR46ZDZ+OreXM/N+kkQJOPIgytFWWTfDQmBQKBvaFS0Vno0FktdbVzN28KGrMdw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.0.4.tgz", + "integrity": "sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog==", "license": "MIT", "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-direction": "1.1.0", - "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-presence": "1.1.1", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-roving-focus": "1.1.0", - "@radix-ui/react-use-controllable-state": "1.1.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-roving-focus": "1.0.4", + "@radix-ui/react-use-controllable-state": "1.0.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -1115,29 +1662,30 @@ } }, "node_modules/@radix-ui/react-toast": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.2.tgz", - "integrity": "sha512-Z6pqSzmAP/bFJoqMAston4eSNa+ud44NSZTiZUmUen+IOZ5nBY8kzuU5WDBVyFXPtcW6yUalOHsxM/BP6Sv8ww==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-collection": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.1", - "@radix-ui/react-portal": "1.1.2", - "@radix-ui/react-presence": "1.1.1", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-use-callback-ref": "1.1.0", - "@radix-ui/react-use-controllable-state": "1.1.0", - "@radix-ui/react-use-layout-effect": "1.1.0", - "@radix-ui/react-visually-hidden": "1.1.0" + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.1.5.tgz", + "integrity": "sha512-fRLn227WHIBRSzuRzGJ8W+5YALxofH23y0MlPLddaIpLpCDqdE0NZlS2NRQDRiptfxDeeCjgFIpexB1/zkxDlw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1", + "@radix-ui/react-visually-hidden": "1.0.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -1149,29 +1697,30 @@ } }, "node_modules/@radix-ui/react-tooltip": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.1.4.tgz", - "integrity": "sha512-QpObUH/ZlpaO4YgHSaYzrLO2VuO+ZBFFgGzjMUPwtiYnAzzNNDPJeEGRrT7qNOrWm/Jr08M1vlp+vTHtnSQ0Uw==", - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.0", - "@radix-ui/react-compose-refs": "1.1.0", - "@radix-ui/react-context": "1.1.1", - "@radix-ui/react-dismissable-layer": "1.1.1", - "@radix-ui/react-id": "1.1.0", - "@radix-ui/react-popper": "1.2.0", - "@radix-ui/react-portal": "1.1.2", - "@radix-ui/react-presence": "1.1.1", - "@radix-ui/react-primitive": "2.0.0", - "@radix-ui/react-slot": "1.1.0", - "@radix-ui/react-use-controllable-state": "1.1.0", - "@radix-ui/react-visually-hidden": "1.1.0" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.0.7.tgz", + "integrity": "sha512-lPh5iKNFVQ/jav/j6ZrWq3blfDJ0OH9R6FlNUHPMqdLuQ9vwDgFsRxvl8b7Asuy5c8xmoojHUxKHQSOAvMHxyw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-popper": "1.1.3", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-controllable-state": "1.0.1", + "@radix-ui/react-visually-hidden": "1.0.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -1183,13 +1732,16 @@ } }, "node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", - "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz", + "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==", "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -1198,16 +1750,17 @@ } }, "node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", - "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz", + "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==", "license": "MIT", "dependencies": { - "@radix-ui/react-use-callback-ref": "1.1.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -1216,16 +1769,17 @@ } }, "node_modules/@radix-ui/react-use-escape-keydown": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", - "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz", + "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==", "license": "MIT", "dependencies": { - "@radix-ui/react-use-callback-ref": "1.1.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -1234,13 +1788,16 @@ } }, "node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", - "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz", + "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==", "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -1249,13 +1806,16 @@ } }, "node_modules/@radix-ui/react-use-previous": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz", - "integrity": "sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.0.1.tgz", + "integrity": "sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==", "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -1264,16 +1824,17 @@ } }, "node_modules/@radix-ui/react-use-rect": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz", - "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz", + "integrity": "sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==", "license": "MIT", "dependencies": { - "@radix-ui/rect": "1.1.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/rect": "1.0.1" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -1282,16 +1843,17 @@ } }, "node_modules/@radix-ui/react-use-size": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz", - "integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz", + "integrity": "sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==", "license": "MIT", "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -1300,18 +1862,19 @@ } }, "node_modules/@radix-ui/react-visually-hidden": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz", - "integrity": "sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz", + "integrity": "sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==", "license": "MIT", "dependencies": { - "@radix-ui/react-primitive": "2.0.0" + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" }, "peerDependenciesMeta": { "@types/react": { @@ -1323,10 +1886,13 @@ } }, "node_modules/@radix-ui/rect": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz", - "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==", - "license": "MIT" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.1.tgz", + "integrity": "sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + } }, "node_modules/@react-hook/debounce": { "version": "3.0.0", @@ -1385,25 +1951,18 @@ } }, "node_modules/@remix-run/router": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.21.0.tgz", - "integrity": "sha512-xfSkCAchbdG5PnbrKqFWwia4Bi61nH+wm8wLEqfHDyp7Y3dZzgqS2itV8i4gAq9pC2HsTpwyBC6Ds8VHZ96JlA==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.17.0.tgz", + "integrity": "sha512-2D6XaHEVvkCn682XBnipbJjgZUU7xjLtA4dGJRBVUKpEaDYOZMENZoZjAOSb7qirxt5RupjzZxz4fK2FO+EFPw==", "license": "MIT", "engines": { "node": ">=14.0.0" } }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true, - "license": "MIT" - }, "node_modules/@rushstack/eslint-patch": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz", - "integrity": "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.2.tgz", + "integrity": "sha512-hw437iINopmQuxWPSUEvqE56NCPsiU8N4AYtfHmJFckclktzK9YQJieD3XkDCDH4OjL+C7zgPUh73R/nrcHrqw==", "dev": true, "license": "MIT" }, @@ -1430,9 +1989,9 @@ } }, "node_modules/@tanstack/match-sorter-utils": { - "version": "8.19.4", - "resolved": "https://registry.npmjs.org/@tanstack/match-sorter-utils/-/match-sorter-utils-8.19.4.tgz", - "integrity": "sha512-Wo1iKt2b9OT7d+YGhvEPD3DXvPv2etTusIMhMUoG7fbhmxcXCtIjJDEygy91Y2JFlwGyjqiBPRozme7UD8hoqg==", + "version": "8.15.1", + "resolved": "https://registry.npmjs.org/@tanstack/match-sorter-utils/-/match-sorter-utils-8.15.1.tgz", + "integrity": "sha512-PnVV3d2poenUM31ZbZi/yXkBu3J7kd5k2u51CGwwNojag451AjTH9N6n41yjXz2fpLeewleyLBmNS6+HcGDlXw==", "license": "MIT", "dependencies": { "remove-accents": "0.5.0" @@ -1446,12 +2005,12 @@ } }, "node_modules/@tanstack/react-table": { - "version": "8.20.5", - "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.20.5.tgz", - "integrity": "sha512-WEHopKw3znbUZ61s9i0+i9g8drmDo6asTWbrQh8Us63DAk/M0FkmIqERew6P71HI75ksZ2Pxyuf4vvKh9rAkiA==", + "version": "8.17.3", + "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.17.3.tgz", + "integrity": "sha512-5gwg5SvPD3lNAXPuJJz1fOCEZYk9/GeBFH3w/hCgnfyszOIzwkwgp5I7Q4MJtn0WECp84b5STQUDdmvGi8m3nA==", "license": "MIT", "dependencies": { - "@tanstack/table-core": "8.20.5" + "@tanstack/table-core": "8.17.3" }, "engines": { "node": ">=12" @@ -1466,9 +2025,9 @@ } }, "node_modules/@tanstack/table-core": { - "version": "8.20.5", - "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.20.5.tgz", - "integrity": "sha512-P9dF7XbibHph2PFRz8gfBKEXEY/HJPOhym8CHmjF8y3q5mWpKx9xtZapXQUWCgkqvsK0R46Azuz+VaxD4Xl+Tg==", + "version": "8.17.3", + "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.17.3.tgz", + "integrity": "sha512-mPBodDGVL+fl6d90wUREepHa/7lhsghg2A3vFpakEhrhtbIlgNAZiMr7ccTgak5qbHqF14Fwy+W1yFWQt+WmYQ==", "license": "MIT", "engines": { "node": ">=12" @@ -1630,9 +2189,9 @@ } }, "node_modules/@types/d3-force": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.10.tgz", - "integrity": "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.9.tgz", + "integrity": "sha512-IKtvyFdb4Q0LWna6ymywQsEYjK/94SGhPrMfEr1TIc5OBeziTi+1jcCvttts8e0UWZIxpasjnQk9MNk/3iS+kA==", "dev": true, "license": "MIT" }, @@ -1713,9 +2272,9 @@ "license": "MIT" }, "node_modules/@types/d3-selection": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz", - "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.10.tgz", + "integrity": "sha512-cuHoUgS/V3hLdjJOLTT691+G2QoqAjCVLmr4kJXR4ha56w1Zdu8UUQ5TxLRqudgNjwXeQxKMq4j+lyf9sWuslg==", "dev": true, "license": "MIT" }, @@ -1729,9 +2288,9 @@ } }, "node_modules/@types/d3-time": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", - "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz", + "integrity": "sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==", "license": "MIT" }, "node_modules/@types/d3-time-format": { @@ -1765,9 +2324,9 @@ "license": "MIT" }, "node_modules/@types/d3-transition": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz", - "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.8.tgz", + "integrity": "sha512-ew63aJfQ/ms7QQ4X7pk5NxQ9fZH/z+i24ZfJ6tJSfqxJMrYLiK01EAs2/Rtw/JreGUsS3pLPNV644qXFGnoZNQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1817,9 +2376,9 @@ "license": "MIT" }, "node_modules/@types/jsonwebtoken": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.7.tgz", - "integrity": "sha512-ugo316mmTYBl2g81zDFnZ7cfxlut3o+/EQdaP7J8QN2kY6lJ22hmQYCK5EHcJHbrW+dkCGSCPgbG8JtYj6qSrg==", + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.6.tgz", + "integrity": "sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw==", "dev": true, "license": "MIT", "dependencies": { @@ -1827,9 +2386,9 @@ } }, "node_modules/@types/leaflet": { - "version": "1.9.14", - "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.14.tgz", - "integrity": "sha512-sx2q6MDJaajwhKeVgPSvqXd8rhNJSTA3tMidQGduZn9S6WBYxDkCpSpV5xXEmSg7Cgdk/5vJGhVF1kMYLzauBg==", + "version": "1.9.12", + "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.12.tgz", + "integrity": "sha512-BK7XS+NyRI291HIo0HCfE18Lp8oA30H1gpi1tf0mF3TgiCEzanQjOqNZ4x126SXzzi2oNSZhZ5axJp1k0iM6jg==", "dev": true, "license": "MIT", "dependencies": { @@ -1847,9 +2406,9 @@ } }, "node_modules/@types/leaflet.markercluster": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/leaflet.markercluster/-/leaflet.markercluster-1.5.5.tgz", - "integrity": "sha512-TkWOhSHDM1ANxmLi+uK0PjsVcjIKBr8CLV2WoF16dIdeFmC0Cj5P5axkI3C1Xsi4+ht6EU8+BfEbbqEF9icPrg==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/leaflet.markercluster/-/leaflet.markercluster-1.5.4.tgz", + "integrity": "sha512-tfMP8J62+wfsVLDLGh5Zh1JZxijCaBmVsMAX78MkLPwvPitmZZtSin5aWOVRhZrCS+pEOZwNzexbfWXlY+7yjg==", "dev": true, "license": "MIT", "dependencies": { @@ -1857,9 +2416,9 @@ } }, "node_modules/@types/lodash": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.13.tgz", - "integrity": "sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==", + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==", "dev": true, "license": "MIT" }, @@ -1874,24 +2433,24 @@ } }, "node_modules/@types/node": { - "version": "20.17.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.8.tgz", - "integrity": "sha512-ahz2g6/oqbKalW9sPv6L2iRbhLnojxjYWspAqhjvqSWBgGebEJT5GvRmk0QXPj3sbC6rU0GTQjPLQkmR8CObvA==", + "version": "20.12.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.10.tgz", + "integrity": "sha512-Eem5pH9pmWBHoGAT8Dr5fdc5rYA+4NAovdM4EktRPVAAiJhmWWfQrA0cFhAbOsQdSfIHjAud6YdkbL69+zSKjw==", "license": "MIT", "dependencies": { - "undici-types": "~6.19.2" + "undici-types": "~5.26.4" } }, "node_modules/@types/prop-types": { - "version": "15.7.13", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", - "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.12", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", - "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.1.tgz", + "integrity": "sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw==", "license": "MIT", "dependencies": { "@types/prop-types": "*", @@ -1909,9 +2468,9 @@ } }, "node_modules/@types/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", + "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", "devOptional": true, "license": "MIT", "dependencies": { @@ -2097,9 +2656,9 @@ } }, "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, "license": "MIT", "bin": { @@ -2205,13 +2764,13 @@ } }, "node_modules/aria-query": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", "dev": true, "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" + "dependencies": { + "dequal": "^2.0.3" } }, "node_modules/array-buffer-byte-length": { @@ -2342,21 +2901,31 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array.prototype.toreversed": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, "node_modules/array.prototype.tosorted": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", + "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.5", "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", + "es-abstract": "^1.22.3", + "es-errors": "^1.1.0", "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" } }, "node_modules/arraybuffer.prototype.slice": { @@ -2412,9 +2981,9 @@ } }, "node_modules/axe-core": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.2.tgz", - "integrity": "sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", + "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", "dev": true, "license": "MPL-2.0", "engines": { @@ -2422,9 +2991,9 @@ } }, "node_modules/axios": { - "version": "1.7.8", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.8.tgz", - "integrity": "sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", @@ -2433,13 +3002,13 @@ } }, "node_modules/axobject-query": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", - "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", "dev": true, "license": "Apache-2.0", - "engines": { - "node": ">= 0.4" + "dependencies": { + "dequal": "^2.0.3" } }, "node_modules/balanced-match": { @@ -2549,9 +3118,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001684", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001684.tgz", - "integrity": "sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==", + "version": "1.0.30001616", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001616.tgz", + "integrity": "sha512-RHVYKov7IcdNjVHJFNY/78RdG4oGVjbayxv8u5IO74Wv7Hlq4PnJE6mo/OjFijjVFNy5ijnCt6H3IIo4t+wfEw==", "funding": [ { "type": "opencollective", @@ -2586,9 +3155,9 @@ } }, "node_modules/chart.js": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.6.tgz", - "integrity": "sha512-8Y406zevUPbbIBA/HRk33khEmQPk5+cxeflWE/2rx1NJsjVWMPw/9mSP9rxHP5eqi6LNoPBVMfZHxbwLSgldYA==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.3.tgz", + "integrity": "sha512-qK1gkGSRYcJzqrrzdR6a+I0vQ4/R+SoODXyAjscQ/4mzuNzySaMCd+hyVxitSY1+L2fjPD1Gbn+ibNqRmwQeLw==", "license": "MIT", "dependencies": { "@kurkle/color": "^0.3.0" @@ -2653,15 +3222,24 @@ } }, "node_modules/class-variance-authority": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", - "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.0.tgz", + "integrity": "sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==", "license": "Apache-2.0", "dependencies": { - "clsx": "^2.1.1" + "clsx": "2.0.0" }, "funding": { - "url": "https://polar.sh/cva" + "url": "https://joebell.co.uk" + } + }, + "node_modules/class-variance-authority/node_modules/clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "license": "MIT", + "engines": { + "node": ">=6" } }, "node_modules/client-only": { @@ -2791,9 +3369,9 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", + "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==", "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -3310,9 +3888,9 @@ } }, "node_modules/date-fns": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", - "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", + "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", "license": "MIT", "peer": true, "funding": { @@ -3321,12 +3899,12 @@ } }, "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "ms": "2.1.2" }, "engines": { "node": ">=6.0" @@ -3413,6 +3991,16 @@ "node": ">=0.4.0" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/detect-libc": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", @@ -3528,9 +4116,9 @@ } }, "node_modules/engine.io-client": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.2.tgz", - "integrity": "sha512-TAr+NKeoVTjEVW8P3iHguO1LO6RlUz9O5Y8o7EY0fU+gY1NYqas7NN3slpFtbXEsLMHk0h90fJMfKjRkQ0qUIw==", + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.1.tgz", + "integrity": "sha512-aYuoak7I+R83M/BBPIOs2to51BmFIpC1wZe6zZzMrT2llVsHy5cvcmdsJgP2Qz6smHu+sD9oexiSUAVd8OfBPw==", "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", @@ -3550,9 +4138,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz", + "integrity": "sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==", "dev": true, "license": "MIT", "dependencies": { @@ -3564,9 +4152,9 @@ } }, "node_modules/es-abstract": { - "version": "1.23.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", - "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", "dev": true, "license": "MIT", "dependencies": { @@ -3585,7 +4173,7 @@ "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.4", "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.4", + "globalthis": "^1.0.3", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.3", @@ -3601,10 +4189,10 @@ "is-string": "^1.0.7", "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", - "object-inspect": "^1.13.3", + "object-inspect": "^1.13.1", "object-keys": "^1.1.1", "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.3", + "regexp.prototype.flags": "^1.5.2", "safe-array-concat": "^1.1.2", "safe-regex-test": "^1.0.3", "string.prototype.trim": "^1.2.9", @@ -3648,9 +4236,9 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.0.tgz", - "integrity": "sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==", + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", "dev": true, "license": "MIT", "dependencies": { @@ -3661,13 +4249,12 @@ "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.4", - "gopd": "^1.0.1", + "globalthis": "^1.0.3", "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.3", "has-symbols": "^1.0.3", "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.3", + "iterator.prototype": "^1.1.2", "safe-array-concat": "^1.1.2" }, "engines": { @@ -3744,9 +4331,9 @@ } }, "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "license": "MIT", @@ -3754,8 +4341,8 @@ "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -3850,19 +4437,18 @@ } }, "node_modules/eslint-import-resolver-typescript": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.3.tgz", - "integrity": "sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", + "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", "dev": true, "license": "ISC", "dependencies": { - "@nolyfill/is-core-module": "1.0.39", - "debug": "^4.3.5", - "enhanced-resolve": "^5.15.0", - "eslint-module-utils": "^2.8.1", - "fast-glob": "^3.3.2", - "get-tsconfig": "^4.7.5", - "is-bun-module": "^1.0.2", + "debug": "^4.3.4", + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", + "get-tsconfig": "^4.5.0", + "is-core-module": "^2.11.0", "is-glob": "^4.0.3" }, "engines": { @@ -3873,22 +4459,13 @@ }, "peerDependencies": { "eslint": "*", - "eslint-plugin-import": "*", - "eslint-plugin-import-x": "*" - }, - "peerDependenciesMeta": { - "eslint-plugin-import": { - "optional": true - }, - "eslint-plugin-import-x": { - "optional": true - } + "eslint-plugin-import": "*" } }, "node_modules/eslint-module-utils": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dev": true, "license": "MIT", "dependencies": { @@ -3914,37 +4491,35 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", - "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, "license": "MIT", "dependencies": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.8", - "array.prototype.findlastindex": "^1.2.5", + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.0", - "hasown": "^2.0.2", - "is-core-module": "^2.15.1", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.0", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.8", "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, "node_modules/eslint-plugin-import/node_modules/debug": { @@ -3981,72 +4556,73 @@ } }, "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", - "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", + "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", "dev": true, "license": "MIT", "dependencies": { - "aria-query": "^5.3.2", - "array-includes": "^3.1.8", + "@babel/runtime": "^7.23.2", + "aria-query": "^5.3.0", + "array-includes": "^3.1.7", "array.prototype.flatmap": "^1.3.2", "ast-types-flow": "^0.0.8", - "axe-core": "^4.10.0", - "axobject-query": "^4.1.0", + "axe-core": "=4.7.0", + "axobject-query": "^3.2.1", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", - "hasown": "^2.0.2", + "es-iterator-helpers": "^1.0.15", + "hasown": "^2.0.0", "jsx-ast-utils": "^3.3.5", "language-tags": "^1.0.9", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "safe-regex-test": "^1.0.3", - "string.prototype.includes": "^2.0.1" + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7" }, "engines": { "node": ">=4.0" }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, "node_modules/eslint-plugin-react": { - "version": "7.37.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", - "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==", + "version": "7.34.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", + "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", "dev": true, "license": "MIT", "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", + "array-includes": "^3.1.7", + "array.prototype.findlast": "^1.2.4", "array.prototype.flatmap": "^1.3.2", - "array.prototype.tosorted": "^1.1.4", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.3", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.1.0", + "es-iterator-helpers": "^1.0.17", "estraverse": "^5.3.0", - "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "object.entries": "^1.1.8", - "object.fromentries": "^2.0.8", - "object.values": "^1.2.0", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7", + "object.hasown": "^1.1.3", + "object.values": "^1.1.7", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.11", - "string.prototype.repeat": "^1.0.0" + "string.prototype.matchall": "^4.0.10" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, "node_modules/eslint-plugin-react-hooks": { - "version": "5.0.0-canary-7118f5dd7-20230705", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0-canary-7118f5dd7-20230705.tgz", - "integrity": "sha512-AZYbMo/NW9chdL7vk6HQzQhT+PvTAEVqWk9ziruUoW2kAOcN5qNyelv70e0F1VNQAbvutOC9oc+xfWycI9FxDw==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", "dev": true, "license": "MIT", "engines": { @@ -4146,9 +4722,9 @@ } }, "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -4198,9 +4774,9 @@ "license": "MIT" }, "node_modules/export-to-csv": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/export-to-csv/-/export-to-csv-1.4.0.tgz", - "integrity": "sha512-6CX17Cu+rC2Fi2CyZ4CkgVG3hLl6BFsdAxfXiZkmDFIDY4mRx2y2spdeH6dqPHI9rP+AsHEfGeKz84Uuw7+Pmg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/export-to-csv/-/export-to-csv-1.3.0.tgz", + "integrity": "sha512-msPjbfozZdYzDghAEKmCVH5veMeKHNacplE6noXvGiA8AeV1qa/SOxp6JXDjF9R8Kf6v3ypI6jskiY19dkhZeA==", "license": "MIT", "engines": { "node": "^v12.20.0 || >=v14.13.0" @@ -4331,16 +4907,16 @@ } }, "node_modules/flatted": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", - "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true, "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", @@ -4368,9 +4944,9 @@ } }, "node_modules/foreground-child": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", @@ -4384,9 +4960,9 @@ } }, "node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", @@ -4404,6 +4980,20 @@ "dev": true, "license": "ISC" }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -4490,9 +5080,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", - "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.4.tgz", + "integrity": "sha512-ofbkKj+0pjXjhejr007J/fLf+sW+8H7K5GCm+msC8q3IpvgjobpyPqSRFemNyIMxklC0zeJpi7VDFna19FacvQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4546,9 +5136,9 @@ } }, "node_modules/glob/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -4746,9 +5336,9 @@ } }, "node_modules/i18next": { - "version": "23.16.8", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.16.8.tgz", - "integrity": "sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg==", + "version": "23.16.5", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.16.5.tgz", + "integrity": "sha512-KTlhE3EP9x6pPTAW7dy0WKIhoCpfOGhRQlO+jttQLgzVaoOjWwBWramu7Pp0i+8wDNduuzXfe3kkVbzrKyrbTA==", "funding": [ { "type": "individual", @@ -4769,9 +5359,9 @@ } }, "node_modules/i18next-fs-backend": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/i18next-fs-backend/-/i18next-fs-backend-2.6.0.tgz", - "integrity": "sha512-3ZlhNoF9yxnM8pa8bWp5120/Ob6t4lVl1l/tbLmkml/ei3ud8IWySCHt2lrY5xWRlSU5D9IV2sm5bEbGuTqwTw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/i18next-fs-backend/-/i18next-fs-backend-2.3.2.tgz", + "integrity": "sha512-LIwUlkqDZnUI8lnUxBnEj8K/FrHQTT/Sc+1rvDm9E8YvvY5YxzoEAASNx+W5M9DfD5s77lI5vSAFWeTp26B/3Q==", "license": "MIT" }, "node_modules/iconv-lite": { @@ -4787,9 +5377,9 @@ } }, "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "license": "MIT", "engines": { @@ -4956,16 +5546,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-bun-module": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.2.1.tgz", - "integrity": "sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.6.3" - } - }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", @@ -4980,15 +5560,12 @@ } }, "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "license": "MIT", "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5036,16 +5613,13 @@ } }, "node_modules/is-finalizationregistry": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz", - "integrity": "sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" + "call-bind": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5300,9 +5874,9 @@ "license": "ISC" }, "node_modules/iterator.prototype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", - "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", "dev": true, "license": "MIT", "dependencies": { @@ -5311,9 +5885,6 @@ "has-symbols": "^1.0.3", "reflect.getprototypeof": "^1.0.4", "set-function-name": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" } }, "node_modules/jackspeak": { @@ -5335,9 +5906,9 @@ } }, "node_modules/jiti": { - "version": "1.21.6", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", - "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", "license": "MIT", "bin": { "jiti": "bin/jiti.js" @@ -5363,9 +5934,9 @@ } }, "node_modules/json-2-csv": { - "version": "5.5.7", - "resolved": "https://registry.npmjs.org/json-2-csv/-/json-2-csv-5.5.7.tgz", - "integrity": "sha512-aZ0EOadeNnO4ifF60oXXTH8P177WeHhFLbRLqILW1Kk1gNHlgAOuvddMwEIaxbLpCzx+vXo49whK6AILdg8qLg==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/json-2-csv/-/json-2-csv-5.5.1.tgz", + "integrity": "sha512-KgAtAXTQopRwe90gh8SgjRSxgt9bUWbGAPMo9W0TZLA8SqiQH7khtagFfeEUjG3NBPwJu/+9uX5pMvunKaPvrQ==", "license": "MIT", "dependencies": { "deeks": "3.1.0", @@ -5479,9 +6050,9 @@ } }, "node_modules/language-subtag-registry": { - "version": "0.3.23", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", - "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", "dev": true, "license": "CC0-1.0" }, @@ -5643,10 +6214,13 @@ } }, "node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "license": "ISC", + "engines": { + "node": "14 || >=16.14" + } }, "node_modules/lucide-react": { "version": "0.378.0", @@ -5724,18 +6298,18 @@ } }, "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.0.tgz", + "integrity": "sha512-oGZRv2OT1lO2UF1zUcwdTb3wqUwI0kBGTgt/T7OdSj6M6N5m3o5uPf0AIW6lVxGGoiWUR7e2AwTE+xiwK8WQig==", "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "license": "MIT" }, "node_modules/mz": { @@ -5834,9 +6408,9 @@ } }, "node_modules/next-i18next": { - "version": "15.4.0", - "resolved": "https://registry.npmjs.org/next-i18next/-/next-i18next-15.4.0.tgz", - "integrity": "sha512-TmWxoJMtFFYaj0xkAC6zyMj2knwJHygDpvQLHR6rK4mfaOlgwQObQ/fwPRgzg6etQPr26jg/a2bd/CRtSbCWjQ==", + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/next-i18next/-/next-i18next-15.3.1.tgz", + "integrity": "sha512-+pa2pZJb7B6k5PKW3TLVMmAodqkNaOBWVYlpWX56mgcEJz0UMW+MKSdKM9Z72CHp6Bp48g7OWwDnLqxXNp/84w==", "funding": [ { "type": "individual", @@ -5857,7 +6431,7 @@ "@types/hoist-non-react-statics": "^3.3.4", "core-js": "^3", "hoist-non-react-statics": "^3.3.2", - "i18next-fs-backend": "^2.6.0" + "i18next-fs-backend": "^2.3.2" }, "engines": { "node": ">=14" @@ -5935,14 +6509,11 @@ } }, "node_modules/object-inspect": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", - "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" - }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6025,6 +6596,24 @@ "node": ">= 0.4" } }, + "node_modules/object.hasown": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", + "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/object.values": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", @@ -6158,16 +6747,16 @@ "license": "MIT" }, "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=16 || 14 >=14.18" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -6184,9 +6773,9 @@ } }, "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "license": "ISC" }, "node_modules/picomatch": { @@ -6230,9 +6819,9 @@ } }, "node_modules/postcss": { - "version": "8.4.49", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", - "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "funding": [ { "type": "opencollective", @@ -6250,8 +6839,8 @@ "license": "MIT", "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -6329,9 +6918,9 @@ } }, "node_modules/postcss-load-config/node_modules/lilconfig": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", - "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", + "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", "license": "MIT", "engines": { "node": ">=14" @@ -6341,34 +6930,28 @@ } }, "node_modules/postcss-nested": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", - "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.1.1" + "postcss-selector-parser": "^6.0.11" }, "engines": { "node": ">=12.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, "peerDependencies": { "postcss": "^8.2.14" } }, "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -6490,9 +7073,9 @@ } }, "node_modules/react-i18next": { - "version": "15.1.2", - "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-15.1.2.tgz", - "integrity": "sha512-tl7AfbWyz9a4BefFXnVooc+gvQBVlavUkVTphGUcvhsNmbRf5UixJVdHeSFkE4gUyQkmFPYHVwTuxIdHjfQgiA==", + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-15.1.1.tgz", + "integrity": "sha512-R/Vg9wIli2P3FfeI8o1eNJUJue5LWpFsQePCHdQDmX0Co3zkr6kdT8gAseb/yGeWbNz1Txc4bKDQuZYsC0kQfw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.0", @@ -6518,12 +7101,12 @@ "license": "MIT" }, "node_modules/react-remove-scroll": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", - "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", + "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", "license": "MIT", "dependencies": { - "react-remove-scroll-bar": "^2.3.6", + "react-remove-scroll-bar": "^2.3.3", "react-style-singleton": "^2.2.1", "tslib": "^2.1.0", "use-callback-ref": "^1.3.0", @@ -6565,12 +7148,12 @@ } }, "node_modules/react-router": { - "version": "6.28.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.28.0.tgz", - "integrity": "sha512-HrYdIFqdrnhDw0PqG/AKjAqEqM7AvxCz0DQ4h2W8k6nqmc5uRBYDag0SBxx9iYz5G8gnuNVLzUe13wl9eAsXXg==", + "version": "6.24.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.24.0.tgz", + "integrity": "sha512-sQrgJ5bXk7vbcC4BxQxeNa5UmboFm35we1AFK0VvQaz9g0LzxEIuLOhHIoZ8rnu9BO21ishGeL9no1WB76W/eg==", "license": "MIT", "dependencies": { - "@remix-run/router": "1.21.0" + "@remix-run/router": "1.17.0" }, "engines": { "node": ">=14.0.0" @@ -6580,13 +7163,13 @@ } }, "node_modules/react-router-dom": { - "version": "6.28.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.28.0.tgz", - "integrity": "sha512-kQ7Unsl5YdyOltsPGl31zOjLrDv+m2VcIEcIHqYYD3Lp0UppLjrzcfJqDJwXxFw3TH/yvapbnUvPlAj7Kx5nbg==", + "version": "6.24.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.24.0.tgz", + "integrity": "sha512-960sKuau6/yEwS8e+NVEidYQb1hNjAYM327gjEyXlc6r3Skf2vtwuJ2l7lssdegD2YjoKG5l8MsVyeTDlVeY8g==", "license": "MIT", "dependencies": { - "@remix-run/router": "1.21.0", - "react-router": "6.28.0" + "@remix-run/router": "1.17.0", + "react-router": "6.24.0" }, "engines": { "node": ">=14.0.0" @@ -6672,15 +7255,15 @@ } }, "node_modules/recharts": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.13.3.tgz", - "integrity": "sha512-YDZ9dOfK9t3ycwxgKbrnDlRC4BHdjlY73fet3a0C1+qGMjXVZe6+VXmpOIIhzkje5MMEL8AN4hLIe4AMskBzlA==", + "version": "2.12.6", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.12.6.tgz", + "integrity": "sha512-D+7j9WI+D0NHauah3fKHuNNcRK8bOypPW7os1DERinogGBGaHI7i6tQKJ0aUF3JXyBZ63dyfKIW2WTOPJDxJ8w==", "license": "MIT", "dependencies": { "clsx": "^2.0.0", "eventemitter3": "^4.0.1", "lodash": "^4.17.21", - "react-is": "^18.3.1", + "react-is": "^16.10.2", "react-smooth": "^4.0.0", "recharts-scale": "^0.4.4", "tiny-invariant": "^1.3.1", @@ -6703,26 +7286,20 @@ "decimal.js-light": "^2.4.1" } }, - "node_modules/recharts/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "license": "MIT" - }, "node_modules/reflect.getprototypeof": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.7.tgz", - "integrity": "sha512-bMvFGIUKlc/eSfXNX+aZ+EL95/EgZzuwA0OBPTbZZDEJw/0AkentjMuM1oiRfwHrshqk4RzdgiTg5CcDalXN5g==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", + "es-abstract": "^1.23.1", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "which-builtin-type": "^1.1.4" + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" }, "engines": { "node": ">= 0.4" @@ -6738,16 +7315,16 @@ "license": "MIT" }, "node_modules/regexp.prototype.flags": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", - "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", + "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, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.6", "define-properties": "^1.2.1", "es-errors": "^1.3.0", - "set-function-name": "^2.0.2" + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -6962,9 +7539,9 @@ } }, "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz", + "integrity": "sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -7008,42 +7585,43 @@ } }, "node_modules/sharp": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", - "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.4.tgz", + "integrity": "sha512-7i/dt5kGl7qR4gwPRD2biwD2/SvBn3O04J77XKFgL2OnZtQw+AG9wnuS/csmu80nPRHLYE9E41fyEiG8nhH6/Q==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "color": "^4.2.3", "detect-libc": "^2.0.3", - "semver": "^7.6.3" + "semver": "^7.6.0" }, "engines": { + "libvips": ">=8.15.2", "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.33.5", - "@img/sharp-darwin-x64": "0.33.5", - "@img/sharp-libvips-darwin-arm64": "1.0.4", - "@img/sharp-libvips-darwin-x64": "1.0.4", - "@img/sharp-libvips-linux-arm": "1.0.5", - "@img/sharp-libvips-linux-arm64": "1.0.4", - "@img/sharp-libvips-linux-s390x": "1.0.4", - "@img/sharp-libvips-linux-x64": "1.0.4", - "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", - "@img/sharp-libvips-linuxmusl-x64": "1.0.4", - "@img/sharp-linux-arm": "0.33.5", - "@img/sharp-linux-arm64": "0.33.5", - "@img/sharp-linux-s390x": "0.33.5", - "@img/sharp-linux-x64": "0.33.5", - "@img/sharp-linuxmusl-arm64": "0.33.5", - "@img/sharp-linuxmusl-x64": "0.33.5", - "@img/sharp-wasm32": "0.33.5", - "@img/sharp-win32-ia32": "0.33.5", - "@img/sharp-win32-x64": "0.33.5" + "@img/sharp-darwin-arm64": "0.33.4", + "@img/sharp-darwin-x64": "0.33.4", + "@img/sharp-libvips-darwin-arm64": "1.0.2", + "@img/sharp-libvips-darwin-x64": "1.0.2", + "@img/sharp-libvips-linux-arm": "1.0.2", + "@img/sharp-libvips-linux-arm64": "1.0.2", + "@img/sharp-libvips-linux-s390x": "1.0.2", + "@img/sharp-libvips-linux-x64": "1.0.2", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.2", + "@img/sharp-libvips-linuxmusl-x64": "1.0.2", + "@img/sharp-linux-arm": "0.33.4", + "@img/sharp-linux-arm64": "0.33.4", + "@img/sharp-linux-s390x": "0.33.4", + "@img/sharp-linux-x64": "0.33.4", + "@img/sharp-linuxmusl-arm64": "0.33.4", + "@img/sharp-linuxmusl-x64": "0.33.4", + "@img/sharp-wasm32": "0.33.4", + "@img/sharp-win32-ia32": "0.33.4", + "@img/sharp-win32-x64": "0.33.4" } }, "node_modules/shebang-command": { @@ -7118,9 +7696,9 @@ } }, "node_modules/socket.io": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", - "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.0.tgz", + "integrity": "sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA==", "license": "MIT", "dependencies": { "accepts": "~1.3.4", @@ -7146,9 +7724,9 @@ } }, "node_modules/socket.io-client": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.1.tgz", - "integrity": "sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.0.tgz", + "integrity": "sha512-C0jdhD5yQahMws9alf/yvtsMGTaIDBnZ8Rb5HU56svyq0l5LIrGzIDZZD5pHQlmzxLuU91Gz+VpQMKgCTNYtkw==", "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", @@ -7174,19 +7752,19 @@ } }, "node_modules/sonner": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/sonner/-/sonner-1.7.0.tgz", - "integrity": "sha512-W6dH7m5MujEPyug3lpI2l3TC3Pp1+LTgK0Efg+IHDrBbtEjyCmCHHo6yfNBOsf1tFZ6zf+jceWwB38baC8yO9g==", + "version": "1.4.41", + "resolved": "https://registry.npmjs.org/sonner/-/sonner-1.4.41.tgz", + "integrity": "sha512-uG511ggnnsw6gcn/X+YKkWPo5ep9il9wYi3QJxHsYe7yTZ4+cOd1wuodOUmOpFuXL+/RE3R04LczdNCDygTDgQ==", "license": "MIT", "peerDependencies": { - "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", - "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" + "react": "^18.0.0", + "react-dom": "^18.0.0" } }, "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -7239,9 +7817,9 @@ "license": "MIT" }, "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "license": "MIT", "engines": { "node": ">=12" @@ -7265,21 +7843,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/string.prototype.includes": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", - "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/string.prototype.matchall": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", @@ -7307,17 +7870,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string.prototype.repeat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, "node_modules/string.prototype.trim": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", @@ -7498,43 +8050,46 @@ } }, "node_modules/tailwind-merge": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.5.tgz", - "integrity": "sha512-0LXunzzAZzo0tEPxV3I297ffKZPlKDrjj7NXphC8V5ak9yHC5zRmxnOe2m/Rd/7ivsOMJe3JZ2JVocoDdQTRBA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.3.0.tgz", + "integrity": "sha512-vkYrLpIP+lgR0tQCG6AP7zZXCTLc1Lnv/CCRT3BqJ9CZ3ui2++GPaGb1x/ILsINIMSYqqvrpqjUFsMNLlW99EA==", "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.24.1" + }, "funding": { "type": "github", "url": "https://github.com/sponsors/dcastil" } }, "node_modules/tailwindcss": { - "version": "3.4.15", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.15.tgz", - "integrity": "sha512-r4MeXnfBmSOuKUWmXe6h2CcyfzJCEk4F0pptO5jlnYSIViUkVmsawj80N5h2lO3gwcmSb4n3PuN+e+GC1Guylw==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz", + "integrity": "sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==", "license": "MIT", "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", - "chokidar": "^3.6.0", + "chokidar": "^3.5.3", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.3.2", + "fast-glob": "^3.3.0", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "jiti": "^1.21.6", + "jiti": "^1.21.0", "lilconfig": "^2.1.0", - "micromatch": "^4.0.8", + "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", - "picocolors": "^1.1.1", - "postcss": "^8.4.47", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", "postcss-import": "^15.1.0", "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.2", - "postcss-nested": "^6.2.0", - "postcss-selector-parser": "^6.1.2", - "resolve": "^1.22.8", - "sucrase": "^3.35.0" + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" }, "bin": { "tailwind": "lib/cli.js", @@ -7616,9 +8171,9 @@ "license": "MIT" }, "node_modules/ts-api-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.2.tgz", - "integrity": "sha512-ZF5gQIQa/UmzfvxbHZI3JXN0/Jt+vnAfAviNRAMc491laiK6YCLpCW9ft8oaCRFOTxCZtUTE6XB0ZQAe3olntw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, "license": "MIT", "engines": { @@ -7648,9 +8203,9 @@ } }, "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "license": "0BSD" }, "node_modules/type-check": { @@ -7715,9 +8270,9 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz", - "integrity": "sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==", + "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, "license": "MIT", "dependencies": { @@ -7726,8 +8281,7 @@ "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "reflect.getprototypeof": "^1.0.6" + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -7737,18 +8291,18 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", + "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" + "possible-typed-array-names": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -7758,9 +8312,9 @@ } }, "node_modules/typescript": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", - "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -7788,9 +8342,9 @@ } }, "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "license": "MIT" }, "node_modules/uri-js": { @@ -7925,25 +8479,24 @@ } }, "node_modules/which-builtin-type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.0.tgz", - "integrity": "sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", "is-async-function": "^2.0.0", "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.1.0", + "is-finalizationregistry": "^1.0.2", "is-generator-function": "^1.0.10", "is-regex": "^1.1.4", "is-weakref": "^1.0.2", "isarray": "^2.0.5", "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.15" + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" }, "engines": { "node": ">= 0.4" @@ -8057,9 +8610,9 @@ } }, "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "license": "MIT", "engines": { "node": ">=12" @@ -8124,17 +8677,17 @@ } }, "node_modules/xmlhttprequest-ssl": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz", - "integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.1.tgz", + "integrity": "sha512-ptjR8YSJIXoA3Mbv5po7RtSYHO6mZr8s7i5VGmEk7QY2pQWyT1o0N+W1gKbOyJPUCGXGnuw0wqe8f0L6Y0ny7g==", "engines": { "node": ">=0.4.0" } }, "node_modules/yaml": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", - "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.2.tgz", + "integrity": "sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==", "license": "ISC", "bin": { "yaml": "bin.mjs" @@ -8155,126 +8708,6 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "14.2.18", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.18.tgz", - "integrity": "sha512-tOBlDHCjGdyLf0ube/rDUs6VtwNOajaWV+5FV/ajPgrvHeisllEdymY/oDgv2cx561+gJksfMUtqf8crug7sbA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "14.2.18", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.18.tgz", - "integrity": "sha512-uJCEjutt5VeJ30jjrHV1VIHCsbMYnEqytQgvREx+DjURd/fmKy15NaVK4aR/u98S1LGTnjq35lRTnRyygglxoA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.2.18", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.18.tgz", - "integrity": "sha512-IL6rU8vnBB+BAm6YSWZewc+qvdL1EaA+VhLQ6tlUc0xp+kkdxQrVqAnh8Zek1ccKHlTDFRyAft0e60gteYmQ4A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.2.18", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.18.tgz", - "integrity": "sha512-RCaENbIZqKKqTlL8KNd+AZV/yAdCsovblOpYFp0OJ7ZxgLNbV5w23CUU1G5On+0fgafrsGcW+GdMKdFjaRwyYA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.2.18", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.18.tgz", - "integrity": "sha512-3kmv8DlyhPRCEBM1Vavn8NjyXtMeQ49ID0Olr/Sut7pgzaQTo4h01S7Z8YNE0VtbowyuAL26ibcz0ka6xCTH5g==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "14.2.18", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.18.tgz", - "integrity": "sha512-mliTfa8seVSpTbVEcKEXGjC18+TDII8ykW4a36au97spm9XMPqQTpdGPNBJ9RySSFw9/hLuaCMByluQIAnkzlw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.2.18", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.18.tgz", - "integrity": "sha512-J5g0UFPbAjKYmqS3Cy7l2fetFmWMY9Oao32eUsBPYohts26BdrMUyfCJnZFQkX9npYaHNDOWqZ6uV9hSDPw9NA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.2.18", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.18.tgz", - "integrity": "sha512-Ynxuk4ZgIpdcN7d16ivJdjsDG1+3hTvK24Pp8DiDmIa2+A4CfhJSEHHVndCHok6rnLUzAZD+/UOKESQgTsAZGg==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } } } } From f691aae20136b88da7f4bac71ffc092bd6f6f22c Mon Sep 17 00:00:00 2001 From: Ammar Yousaf Date: Wed, 27 Nov 2024 21:26:11 +0100 Subject: [PATCH 28/74] Loading history branched fix --- .../trash/trashbins/[identifier]/page.tsx | 2 +- components/LoadingComponent.tsx | 7 +- package-lock.json | 2978 ++++++++++------- package.json | 2 +- 4 files changed, 1776 insertions(+), 1213 deletions(-) diff --git a/app/projects/[city]/trash/trashbins/[identifier]/page.tsx b/app/projects/[city]/trash/trashbins/[identifier]/page.tsx index 0ceb73e..6999bfc 100644 --- a/app/projects/[city]/trash/trashbins/[identifier]/page.tsx +++ b/app/projects/[city]/trash/trashbins/[identifier]/page.tsx @@ -270,7 +270,7 @@ export default function TrashbinDetail({ { (fillLevelData.length === 0 && batteryLevelData.length === 0) ?
- +
: diff --git a/components/LoadingComponent.tsx b/components/LoadingComponent.tsx index 419471a..8c68351 100644 --- a/components/LoadingComponent.tsx +++ b/components/LoadingComponent.tsx @@ -4,10 +4,13 @@ interface LoadingComponentProps { text?: string; } -const LoadingComponent: React.FC = ({ text = 'Loading...' }) => { +const LoadingComponent: React.FC = ({ text }) => { + // Default to "Loading" if text is not provided + const displayText = text || 'Loading...'; + return (
- {text} + {displayText}
); }; diff --git a/package-lock.json b/package-lock.json index 16b51d7..1361bf8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -38,7 +38,7 @@ "leaflet.markercluster": "^1.5.3", "lodash.debounce": "^4.0.8", "lucide-react": "^0.378.0", - "next": "14.2.3", + "next": "^14.2.18", "next-themes": "^0.3.0", "react": "^18", "react-chartjs-2": "^5.2.0", @@ -77,6 +77,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -85,9 +86,10 @@ } }, "node_modules/@babel/runtime": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.5.tgz", - "integrity": "sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -96,34 +98,40 @@ } }, "node_modules/@emnapi/runtime": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.2.0.tgz", - "integrity": "sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", + "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", + "license": "MIT", "optional": true, "dependencies": { "tslib": "^2.4.0" } }, "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", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", "dev": true, + "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } @@ -133,6 +141,7 @@ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -152,35 +161,39 @@ } }, "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@floating-ui/core": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.1.tgz", - "integrity": "sha512-42UH54oPZHPdRHdw6BgoBD6cg/eVTmVrFcgeRDM3jbO7uxSoipVcmcIGFcA5jmOHO5apcyvBhkSKES3fQJnu7A==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", + "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", + "license": "MIT", "dependencies": { - "@floating-ui/utils": "^0.2.0" + "@floating-ui/utils": "^0.2.8" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.5.tgz", - "integrity": "sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==", + "version": "1.6.12", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz", + "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==", + "license": "MIT", "dependencies": { - "@floating-ui/core": "^1.0.0", - "@floating-ui/utils": "^0.2.0" + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.8" } }, "node_modules/@floating-ui/react-dom": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.9.tgz", - "integrity": "sha512-q0umO0+LQK4+p6aGyvzASqKbKOJcAHJ7ycE9CuUvfx3s9zTHWmGJTPOIlM/hmSBfUfg/XfY5YhLBLR/LHwShQQ==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", + "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", + "license": "MIT", "dependencies": { "@floating-ui/dom": "^1.0.0" }, @@ -190,17 +203,20 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz", - "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==" + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", + "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==", + "license": "MIT" }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", + "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" }, @@ -213,6 +229,7 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -225,434 +242,366 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "dev": true + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@img/sharp-darwin-arm64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.4.tgz", - "integrity": "sha512-p0suNqXufJs9t3RqLBO6vvrgr5OhgbWp76s5gTRvdmxmuv9E1rcaqGUsl3l4mKVmXPkTkTErXediAui4x+8PSA==", + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", "cpu": [ "arm64" ], + "license": "Apache-2.0", "optional": true, "os": [ "darwin" ], "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.0.2" + "@img/sharp-libvips-darwin-arm64": "1.0.4" } }, "node_modules/@img/sharp-darwin-x64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.4.tgz", - "integrity": "sha512-0l7yRObwtTi82Z6ebVI2PnHT8EB2NxBgpK2MiKJZJ7cz32R4lxd001ecMhzzsZig3Yv9oclvqqdV93jo9hy+Dw==", + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", "cpu": [ "x64" ], + "license": "Apache-2.0", "optional": true, "os": [ "darwin" ], "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.0.2" + "@img/sharp-libvips-darwin-x64": "1.0.4" } }, "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.2.tgz", - "integrity": "sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", "cpu": [ "arm64" ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "darwin" ], - "engines": { - "macos": ">=11", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, "funding": { "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.2.tgz", - "integrity": "sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", "cpu": [ "x64" ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "darwin" ], - "engines": { - "macos": ">=10.13", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, "funding": { "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.2.tgz", - "integrity": "sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", "cpu": [ "arm" ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "engines": { - "glibc": ">=2.28", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, "funding": { "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.2.tgz", - "integrity": "sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", "cpu": [ "arm64" ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "engines": { - "glibc": ">=2.26", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, "funding": { "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.2.tgz", - "integrity": "sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", "cpu": [ "s390x" ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "engines": { - "glibc": ">=2.28", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, "funding": { "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.2.tgz", - "integrity": "sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", "cpu": [ "x64" ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "engines": { - "glibc": ">=2.26", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, "funding": { "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.2.tgz", - "integrity": "sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", "cpu": [ "arm64" ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "engines": { - "musl": ">=1.2.2", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, "funding": { "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.2.tgz", - "integrity": "sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", "cpu": [ "x64" ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "engines": { - "musl": ">=1.2.2", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, "funding": { "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-linux-arm": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.4.tgz", - "integrity": "sha512-RUgBD1c0+gCYZGCCe6mMdTiOFS0Zc/XrN0fYd6hISIKcDUbAW5NtSQW9g/powkrXYm6Vzwd6y+fqmExDuCdHNQ==", + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", "cpu": [ "arm" ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "glibc": ">=2.28", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.0.2" + "@img/sharp-libvips-linux-arm": "1.0.5" } }, "node_modules/@img/sharp-linux-arm64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.4.tgz", - "integrity": "sha512-2800clwVg1ZQtxwSoTlHvtm9ObgAax7V6MTAB/hDT945Tfyy3hVkmiHpeLPCKYqYR1Gcmv1uDZ3a4OFwkdBL7Q==", + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", "cpu": [ "arm64" ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.0.2" + "@img/sharp-libvips-linux-arm64": "1.0.4" } }, "node_modules/@img/sharp-linux-s390x": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.4.tgz", - "integrity": "sha512-h3RAL3siQoyzSoH36tUeS0PDmb5wINKGYzcLB5C6DIiAn2F3udeFAum+gj8IbA/82+8RGCTn7XW8WTFnqag4tQ==", + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", "cpu": [ "s390x" ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "glibc": ">=2.31", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.0.2" + "@img/sharp-libvips-linux-s390x": "1.0.4" } }, "node_modules/@img/sharp-linux-x64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.4.tgz", - "integrity": "sha512-GoR++s0XW9DGVi8SUGQ/U4AeIzLdNjHka6jidVwapQ/JebGVQIpi52OdyxCNVRE++n1FCLzjDovJNozif7w/Aw==", + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", "cpu": [ "x64" ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.0.2" + "@img/sharp-libvips-linux-x64": "1.0.4" } }, "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.4.tgz", - "integrity": "sha512-nhr1yC3BlVrKDTl6cO12gTpXMl4ITBUZieehFvMntlCXFzH2bvKG76tBL2Y/OqhupZt81pR7R+Q5YhJxW0rGgQ==", + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", "cpu": [ "arm64" ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "musl": ">=1.2.2", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.0.2" + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" } }, "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.4.tgz", - "integrity": "sha512-uCPTku0zwqDmZEOi4ILyGdmW76tH7dm8kKlOIV1XC5cLyJ71ENAAqarOHQh0RLfpIpbV5KOpXzdU6XkJtS0daw==", + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", "cpu": [ "x64" ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "musl": ">=1.2.2", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.0.2" + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" } }, "node_modules/@img/sharp-wasm32": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.4.tgz", - "integrity": "sha512-Bmmauh4sXUsUqkleQahpdNXKvo+wa1V9KhT2pDA4VJGKwnKMJXiSTGphn0gnJrlooda0QxCtXc6RX1XAU6hMnQ==", + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", "cpu": [ "wasm32" ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", "optional": true, "dependencies": { - "@emnapi/runtime": "^1.1.1" + "@emnapi/runtime": "^1.2.0" }, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-win32-ia32": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.4.tgz", - "integrity": "sha512-99SJ91XzUhYHbx7uhK3+9Lf7+LjwMGQZMDlO/E/YVJ7Nc3lyDFZPGhjwiYdctoH2BOzW9+TnfqcaMKt0jHLdqw==", + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", "cpu": [ "ia32" ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", "optional": true, "os": [ "win32" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-win32-x64": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.4.tgz", - "integrity": "sha512-3QLocdTRVIrFNye5YocZl+KKpYKP+fksi1QhmOArgx7GyhIbQp/WrJRu176jm8IxromS7RIkzMiMINVdBtC8Aw==", + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", "cpu": [ "x64" ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", "optional": true, "os": [ "win32" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" @@ -662,6 +611,7 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -675,9 +625,10 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -689,6 +640,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -703,6 +655,7 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -716,6 +669,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -724,33 +678,38 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@kurkle/color": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", - "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==" + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz", + "integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==", + "license": "MIT" }, "node_modules/@mapbox/corslite": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/@mapbox/corslite/-/corslite-0.0.7.tgz", - "integrity": "sha512-w/uS474VFjmqQ7fFWIMZINQM1BAQxDLuoJaZZIPES1BmeYpCtlh9MtbFxKGGDAsfvut8/HircIsVvEYRjQ+iMg==" + "integrity": "sha512-w/uS474VFjmqQ7fFWIMZINQM1BAQxDLuoJaZZIPES1BmeYpCtlh9MtbFxKGGDAsfvut8/HircIsVvEYRjQ+iMg==", + "license": "BSD" }, "node_modules/@mapbox/polyline": { "version": "0.2.0", @@ -764,26 +723,29 @@ } }, "node_modules/@next/env": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.3.tgz", - "integrity": "sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA==" + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.18.tgz", + "integrity": "sha512-2vWLOUwIPgoqMJKG6dt35fVXVhgM09tw4tK3/Q34GFXDrfiHlG7iS33VA4ggnjWxjiz9KV5xzfsQzJX6vGAekA==", + "license": "MIT" }, "node_modules/@next/eslint-plugin-next": { "version": "14.2.3", "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.3.tgz", "integrity": "sha512-L3oDricIIjgj1AVnRdRor21gI7mShlSwU/1ZGHmqM3LzHhXXhdkrfeNY5zif25Bi5Dd7fiJHsbhoZCHfXYvlAw==", "dev": true, + "license": "MIT", "dependencies": { "glob": "10.3.10" } }, "node_modules/@next/swc-darwin-arm64": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.3.tgz", - "integrity": "sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A==", + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.18.tgz", + "integrity": "sha512-tOBlDHCjGdyLf0ube/rDUs6VtwNOajaWV+5FV/ajPgrvHeisllEdymY/oDgv2cx561+gJksfMUtqf8crug7sbA==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "darwin" @@ -793,12 +755,13 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.3.tgz", - "integrity": "sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA==", + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.18.tgz", + "integrity": "sha512-uJCEjutt5VeJ30jjrHV1VIHCsbMYnEqytQgvREx+DjURd/fmKy15NaVK4aR/u98S1LGTnjq35lRTnRyygglxoA==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "darwin" @@ -808,12 +771,13 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.3.tgz", - "integrity": "sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA==", + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.18.tgz", + "integrity": "sha512-IL6rU8vnBB+BAm6YSWZewc+qvdL1EaA+VhLQ6tlUc0xp+kkdxQrVqAnh8Zek1ccKHlTDFRyAft0e60gteYmQ4A==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -823,12 +787,13 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.3.tgz", - "integrity": "sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw==", + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.18.tgz", + "integrity": "sha512-RCaENbIZqKKqTlL8KNd+AZV/yAdCsovblOpYFp0OJ7ZxgLNbV5w23CUU1G5On+0fgafrsGcW+GdMKdFjaRwyYA==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -838,12 +803,13 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.3.tgz", - "integrity": "sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w==", + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.18.tgz", + "integrity": "sha512-3kmv8DlyhPRCEBM1Vavn8NjyXtMeQ49ID0Olr/Sut7pgzaQTo4h01S7Z8YNE0VtbowyuAL26ibcz0ka6xCTH5g==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -853,12 +819,13 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.3.tgz", - "integrity": "sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ==", + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.18.tgz", + "integrity": "sha512-mliTfa8seVSpTbVEcKEXGjC18+TDII8ykW4a36au97spm9XMPqQTpdGPNBJ9RySSFw9/hLuaCMByluQIAnkzlw==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -868,12 +835,13 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.3.tgz", - "integrity": "sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A==", + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.18.tgz", + "integrity": "sha512-J5g0UFPbAjKYmqS3Cy7l2fetFmWMY9Oao32eUsBPYohts26BdrMUyfCJnZFQkX9npYaHNDOWqZ6uV9hSDPw9NA==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -883,12 +851,13 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.3.tgz", - "integrity": "sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw==", + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.18.tgz", + "integrity": "sha512-Ynxuk4ZgIpdcN7d16ivJdjsDG1+3hTvK24Pp8DiDmIa2+A4CfhJSEHHVndCHok6rnLUzAZD+/UOKESQgTsAZGg==", "cpu": [ "ia32" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -898,12 +867,13 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.3.tgz", - "integrity": "sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA==", + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.18.tgz", + "integrity": "sha512-dtRGMhiU9TN5nyhwzce+7c/4CCeykYS+ipY/4mIrGzJ71+7zNo55ZxCB7cAVuNqdwtYniFNR2c9OFQ6UdFIMcg==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -916,6 +886,7 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -928,6 +899,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", "engines": { "node": ">= 8" } @@ -936,6 +908,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -944,44 +917,51 @@ "node": ">= 8" } }, + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.4.0" + } + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", "optional": true, "engines": { "node": ">=14" } }, "node_modules/@radix-ui/number": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.1.tgz", - "integrity": "sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==", - "dependencies": { - "@babel/runtime": "^7.13.10" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.0.tgz", + "integrity": "sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==", + "license": "MIT" }, "node_modules/@radix-ui/primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz", - "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==", - "dependencies": { - "@babel/runtime": "^7.13.10" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz", + "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==", + "license": "MIT" }, "node_modules/@radix-ui/react-arrow": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz", - "integrity": "sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz", + "integrity": "sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" + "@radix-ui/react-primitive": "2.0.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -993,21 +973,21 @@ } }, "node_modules/@radix-ui/react-collection": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.3.tgz", - "integrity": "sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz", + "integrity": "sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-slot": "1.0.2" + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1018,16 +998,29 @@ } } }, - "node_modules/@radix-ui/react-compose-refs": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", - "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==", - "dependencies": { - "@babel/runtime": "^7.13.10" + "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", + "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", + "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", + "license": "MIT", "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1036,15 +1029,13 @@ } }, "node_modules/@radix-ui/react-context": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz", - "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "license": "MIT", "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1053,31 +1044,31 @@ } }, "node_modules/@radix-ui/react-dialog": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.5.tgz", - "integrity": "sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-dismissable-layer": "1.0.5", - "@radix-ui/react-focus-guards": "1.0.1", - "@radix-ui/react-focus-scope": "1.0.4", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-portal": "1.0.4", - "@radix-ui/react-presence": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-slot": "1.0.2", - "@radix-ui/react-use-controllable-state": "1.0.1", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.2.tgz", + "integrity": "sha512-Yj4dZtqa2o+kG61fzB0H2qUvmwBA2oyQroGLyNtBj1beo1khoQ3q1a2AO8rrQYjd8256CO9+N8L9tvsS+bnIyA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-focus-guards": "1.1.1", + "@radix-ui/react-focus-scope": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-portal": "1.1.2", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.5" + "react-remove-scroll": "2.6.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1089,15 +1080,13 @@ } }, "node_modules/@radix-ui/react-direction": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.1.tgz", - "integrity": "sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", + "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==", + "license": "MIT", "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1106,22 +1095,22 @@ } }, "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz", - "integrity": "sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", + "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-escape-keydown": "1.0.3" + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-escape-keydown": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1133,24 +1122,24 @@ } }, "node_modules/@radix-ui/react-dropdown-menu": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.0.6.tgz", - "integrity": "sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-menu": "2.0.6", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-controllable-state": "1.0.1" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.2.tgz", + "integrity": "sha512-GVZMR+eqK8/Kes0a36Qrv+i20bAPXSn8rCBTHx30w+3ECnR5o3xixAlqcVaYvLeyKUsm0aqyhWfmUcqufM8nYA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-menu": "2.1.2", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-controllable-state": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1162,15 +1151,13 @@ } }, "node_modules/@radix-ui/react-focus-guards": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz", - "integrity": "sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.1.tgz", + "integrity": "sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==", + "license": "MIT", "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1179,20 +1166,20 @@ } }, "node_modules/@radix-ui/react-focus-scope": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.4.tgz", - "integrity": "sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz", + "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1" + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1204,16 +1191,16 @@ } }, "node_modules/@radix-ui/react-id": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz", - "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz", + "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "1.0.1" + "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1222,18 +1209,18 @@ } }, "node_modules/@radix-ui/react-label": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.0.2.tgz", - "integrity": "sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.0.tgz", + "integrity": "sha512-peLblDlFw/ngk3UWq0VnYaOLy6agTZZ+MUO/WhVfm14vJGML+xH4FAl2XQGLqdefjNb7ApRg6Yn7U42ZhmYXdw==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" + "@radix-ui/react-primitive": "2.0.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1245,35 +1232,35 @@ } }, "node_modules/@radix-ui/react-menu": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.0.6.tgz", - "integrity": "sha512-BVkFLS+bUC8HcImkRKPSiVumA1VPOOEC5WBMiT+QAVsPzW1FJzI9KnqgGxVDPBcql5xXrHkD3JOVoXWEXD8SYA==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-collection": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-dismissable-layer": "1.0.5", - "@radix-ui/react-focus-guards": "1.0.1", - "@radix-ui/react-focus-scope": "1.0.4", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-popper": "1.1.3", - "@radix-ui/react-portal": "1.0.4", - "@radix-ui/react-presence": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-roving-focus": "1.0.4", - "@radix-ui/react-slot": "1.0.2", - "@radix-ui/react-use-callback-ref": "1.0.1", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.2.tgz", + "integrity": "sha512-lZ0R4qR2Al6fZ4yCCZzu/ReTFrylHFxIqy7OezIpWF4bL0o9biKo0pFIvkaew3TyZ9Fy5gYVrR5zCGZBVbO1zg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-collection": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-focus-guards": "1.1.1", + "@radix-ui/react-focus-scope": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-popper": "1.2.0", + "@radix-ui/react-portal": "1.1.2", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-roving-focus": "1.1.0", + "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-use-callback-ref": "1.1.0", "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.5" + "react-remove-scroll": "2.6.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1285,27 +1272,27 @@ } }, "node_modules/@radix-ui/react-popper": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.3.tgz", - "integrity": "sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz", + "integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1", - "@radix-ui/react-use-rect": "1.0.1", - "@radix-ui/react-use-size": "1.0.1", - "@radix-ui/rect": "1.0.1" + "@radix-ui/react-arrow": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0", + "@radix-ui/react-use-rect": "1.1.0", + "@radix-ui/react-use-size": "1.1.0", + "@radix-ui/rect": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1316,19 +1303,35 @@ } } }, + "node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", + "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-portal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.4.tgz", - "integrity": "sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz", + "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1340,19 +1343,19 @@ } }, "node_modules/@radix-ui/react-presence": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.1.tgz", - "integrity": "sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", + "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1" + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1364,18 +1367,18 @@ } }, "node_modules/@radix-ui/react-primitive": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz", - "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", + "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "1.0.2" + "@radix-ui/react-slot": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1387,27 +1390,27 @@ } }, "node_modules/@radix-ui/react-radio-group": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.1.3.tgz", - "integrity": "sha512-x+yELayyefNeKeTx4fjK6j99Fs6c4qKm3aY38G3swQVTN6xMpsrbigC0uHs2L//g8q4qR7qOcww8430jJmi2ag==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-presence": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-roving-focus": "1.0.4", - "@radix-ui/react-use-controllable-state": "1.0.1", - "@radix-ui/react-use-previous": "1.0.1", - "@radix-ui/react-use-size": "1.0.1" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.2.1.tgz", + "integrity": "sha512-kdbv54g4vfRjja9DNWPMxKvXblzqbpEC8kspEkZ6dVP7kQksGCn+iZHkcCz2nb00+lPdRvxrqy4WrvvV1cNqrQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-roving-focus": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-use-previous": "1.1.0", + "@radix-ui/react-use-size": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1419,26 +1422,26 @@ } }, "node_modules/@radix-ui/react-roving-focus": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz", - "integrity": "sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-collection": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-controllable-state": "1.0.1" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.0.tgz", + "integrity": "sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-collection": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1449,27 +1452,42 @@ } } }, + "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", + "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-scroll-area": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.0.5.tgz", - "integrity": "sha512-b6PAgH4GQf9QEn8zbT2XUHpW5z8BzqEc7Kl11TwDrvuTrxlkcjTD5qa/bxgKr+nmuXKu4L/W5UZ4mlP/VG/5Gw==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/number": "1.0.1", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-presence": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.1.tgz", + "integrity": "sha512-FnM1fHfCtEZ1JkyfH/1oMiTcFBQvHKl4vD9WnpwkLgtF+UmnXMCad6ECPTaAjcDjam+ndOEJWgHyKDGNteWSHw==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.0", + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1481,38 +1499,38 @@ } }, "node_modules/@radix-ui/react-select": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.0.0.tgz", - "integrity": "sha512-RH5b7af4oHtkcHS7pG6Sgv5rk5Wxa7XI8W5gvB1N/yiuDGZxko1ynvOiVhFM7Cis2A8zxF9bTOUVbRDzPepe6w==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/number": "1.0.1", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-collection": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-dismissable-layer": "1.0.5", - "@radix-ui/react-focus-guards": "1.0.1", - "@radix-ui/react-focus-scope": "1.0.4", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-popper": "1.1.3", - "@radix-ui/react-portal": "1.0.4", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-slot": "1.0.2", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-controllable-state": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1", - "@radix-ui/react-use-previous": "1.0.1", - "@radix-ui/react-visually-hidden": "1.0.3", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.1.2.tgz", + "integrity": "sha512-rZJtWmorC7dFRi0owDmoijm6nSJH1tVw64QGiNIZ9PNLyBDtG+iAq+XGsya052At4BfarzY/Dhv9wrrUr6IMZA==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.0", + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-collection": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-focus-guards": "1.1.1", + "@radix-ui/react-focus-scope": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-popper": "1.2.0", + "@radix-ui/react-portal": "1.1.2", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0", + "@radix-ui/react-use-previous": "1.1.0", + "@radix-ui/react-visually-hidden": "1.1.0", "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.5" + "react-remove-scroll": "2.6.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1524,16 +1542,16 @@ } }, "node_modules/@radix-ui/react-slot": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", - "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", + "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1" + "@radix-ui/react-compose-refs": "1.1.0" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1542,25 +1560,25 @@ } }, "node_modules/@radix-ui/react-tabs": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.0.4.tgz", - "integrity": "sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-presence": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-roving-focus": "1.0.4", - "@radix-ui/react-use-controllable-state": "1.0.1" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.1.tgz", + "integrity": "sha512-3GBUDmP2DvzmtYLMsHmpA1GtR46ZDZ+OreXM/N+kkQJOPIgytFWWTfDQmBQKBvaFS0Vno0FktdbVzN28KGrMdw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-roving-focus": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1572,29 +1590,29 @@ } }, "node_modules/@radix-ui/react-toast": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.1.5.tgz", - "integrity": "sha512-fRLn227WHIBRSzuRzGJ8W+5YALxofH23y0MlPLddaIpLpCDqdE0NZlS2NRQDRiptfxDeeCjgFIpexB1/zkxDlw==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-collection": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-dismissable-layer": "1.0.5", - "@radix-ui/react-portal": "1.0.4", - "@radix-ui/react-presence": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-controllable-state": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1", - "@radix-ui/react-visually-hidden": "1.0.3" + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.2.tgz", + "integrity": "sha512-Z6pqSzmAP/bFJoqMAston4eSNa+ud44NSZTiZUmUen+IOZ5nBY8kzuU5WDBVyFXPtcW6yUalOHsxM/BP6Sv8ww==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-collection": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-portal": "1.1.2", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0", + "@radix-ui/react-visually-hidden": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1606,29 +1624,29 @@ } }, "node_modules/@radix-ui/react-tooltip": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.0.7.tgz", - "integrity": "sha512-lPh5iKNFVQ/jav/j6ZrWq3blfDJ0OH9R6FlNUHPMqdLuQ9vwDgFsRxvl8b7Asuy5c8xmoojHUxKHQSOAvMHxyw==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-dismissable-layer": "1.0.5", - "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-popper": "1.1.3", - "@radix-ui/react-portal": "1.0.4", - "@radix-ui/react-presence": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-slot": "1.0.2", - "@radix-ui/react-use-controllable-state": "1.0.1", - "@radix-ui/react-visually-hidden": "1.0.3" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.1.4.tgz", + "integrity": "sha512-QpObUH/ZlpaO4YgHSaYzrLO2VuO+ZBFFgGzjMUPwtiYnAzzNNDPJeEGRrT7qNOrWm/Jr08M1vlp+vTHtnSQ0Uw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-popper": "1.2.0", + "@radix-ui/react-portal": "1.1.2", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-visually-hidden": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1640,15 +1658,13 @@ } }, "node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz", - "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", + "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", + "license": "MIT", "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1657,16 +1673,16 @@ } }, "node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz", - "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", + "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "1.0.1" + "@radix-ui/react-use-callback-ref": "1.1.0" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1675,16 +1691,16 @@ } }, "node_modules/@radix-ui/react-use-escape-keydown": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz", - "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", + "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "1.0.1" + "@radix-ui/react-use-callback-ref": "1.1.0" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1693,15 +1709,13 @@ } }, "node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz", - "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", + "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", + "license": "MIT", "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1710,15 +1724,13 @@ } }, "node_modules/@radix-ui/react-use-previous": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.0.1.tgz", - "integrity": "sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz", + "integrity": "sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==", + "license": "MIT", "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1727,16 +1739,16 @@ } }, "node_modules/@radix-ui/react-use-rect": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz", - "integrity": "sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz", + "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/rect": "1.0.1" + "@radix-ui/rect": "1.1.0" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1745,16 +1757,16 @@ } }, "node_modules/@radix-ui/react-use-size": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz", - "integrity": "sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz", + "integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "1.0.1" + "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1763,18 +1775,18 @@ } }, "node_modules/@radix-ui/react-visually-hidden": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz", - "integrity": "sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz", + "integrity": "sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" + "@radix-ui/react-primitive": "2.0.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "peerDependenciesMeta": { "@types/react": { @@ -1786,17 +1798,16 @@ } }, "node_modules/@radix-ui/rect": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.1.tgz", - "integrity": "sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==", - "dependencies": { - "@babel/runtime": "^7.13.10" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz", + "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==", + "license": "MIT" }, "node_modules/@react-hook/debounce": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@react-hook/debounce/-/debounce-3.0.0.tgz", "integrity": "sha512-ir/kPrSfAzY12Gre0sOHkZ2rkEmM4fS5M5zFxCi4BnCeXh2nvx9Ujd+U4IGpKCuPA+EQD0pg1eK2NGLvfWejag==", + "license": "MIT", "dependencies": { "@react-hook/latest": "^1.0.2" }, @@ -1808,6 +1819,7 @@ "version": "1.2.6", "resolved": "https://registry.npmjs.org/@react-hook/event/-/event-1.2.6.tgz", "integrity": "sha512-JUL5IluaOdn5w5Afpe/puPa1rj8X6udMlQ9dt4hvMuKmTrBS1Ya6sb4sVgvfe2eU4yDuOfAhik8xhbcCekbg9Q==", + "license": "MIT", "peerDependencies": { "react": ">=16.8" } @@ -1816,6 +1828,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/@react-hook/latest/-/latest-1.0.3.tgz", "integrity": "sha512-dy6duzl+JnAZcDbNTfmaP3xHiKtbXYOaz3G51MGVljh548Y8MWzTr+PHLOfvpypEVW9zwvl+VyKjbWKEVbV1Rg==", + "license": "MIT", "peerDependencies": { "react": ">=16.8" } @@ -1824,6 +1837,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@react-hook/throttle/-/throttle-2.2.0.tgz", "integrity": "sha512-LJ5eg+yMV8lXtqK3lR+OtOZ2WH/EfWvuiEEu0M3bhR7dZRfTyEJKxH1oK9uyBxiXPtWXiQggWbZirMCXam51tg==", + "license": "MIT", "dependencies": { "@react-hook/latest": "^1.0.2" }, @@ -1835,6 +1849,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@react-hook/window-size/-/window-size-3.1.1.tgz", "integrity": "sha512-yWnVS5LKnOUIrEsI44oz3bIIUYqflamPL27n+k/PC//PsX/YeWBky09oPeAoc9As6jSH16Wgo8plI+ECZaHk3g==", + "license": "MIT", "dependencies": { "@react-hook/debounce": "^3.0.0", "@react-hook/event": "^1.2.1", @@ -1845,42 +1860,55 @@ } }, "node_modules/@remix-run/router": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.17.0.tgz", - "integrity": "sha512-2D6XaHEVvkCn682XBnipbJjgZUU7xjLtA4dGJRBVUKpEaDYOZMENZoZjAOSb7qirxt5RupjzZxz4fK2FO+EFPw==", + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.21.0.tgz", + "integrity": "sha512-xfSkCAchbdG5PnbrKqFWwia4Bi61nH+wm8wLEqfHDyp7Y3dZzgqS2itV8i4gAq9pC2HsTpwyBC6Ds8VHZ96JlA==", + "license": "MIT", "engines": { "node": ">=14.0.0" } }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, "node_modules/@rushstack/eslint-patch": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.2.tgz", - "integrity": "sha512-hw437iINopmQuxWPSUEvqE56NCPsiU8N4AYtfHmJFckclktzK9YQJieD3XkDCDH4OjL+C7zgPUh73R/nrcHrqw==", - "dev": true + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz", + "integrity": "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==", + "dev": true, + "license": "MIT" }, "node_modules/@socket.io/component-emitter": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", - "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==" + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "license": "MIT" }, "node_modules/@swc/counter": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==" + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "license": "Apache-2.0" }, "node_modules/@swc/helpers": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz", "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==", + "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3", "tslib": "^2.4.0" } }, "node_modules/@tanstack/match-sorter-utils": { - "version": "8.15.1", - "resolved": "https://registry.npmjs.org/@tanstack/match-sorter-utils/-/match-sorter-utils-8.15.1.tgz", - "integrity": "sha512-PnVV3d2poenUM31ZbZi/yXkBu3J7kd5k2u51CGwwNojag451AjTH9N6n41yjXz2fpLeewleyLBmNS6+HcGDlXw==", + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/@tanstack/match-sorter-utils/-/match-sorter-utils-8.19.4.tgz", + "integrity": "sha512-Wo1iKt2b9OT7d+YGhvEPD3DXvPv2etTusIMhMUoG7fbhmxcXCtIjJDEygy91Y2JFlwGyjqiBPRozme7UD8hoqg==", + "license": "MIT", "dependencies": { "remove-accents": "0.5.0" }, @@ -1893,11 +1921,12 @@ } }, "node_modules/@tanstack/react-table": { - "version": "8.17.3", - "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.17.3.tgz", - "integrity": "sha512-5gwg5SvPD3lNAXPuJJz1fOCEZYk9/GeBFH3w/hCgnfyszOIzwkwgp5I7Q4MJtn0WECp84b5STQUDdmvGi8m3nA==", + "version": "8.20.5", + "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.20.5.tgz", + "integrity": "sha512-WEHopKw3znbUZ61s9i0+i9g8drmDo6asTWbrQh8Us63DAk/M0FkmIqERew6P71HI75ksZ2Pxyuf4vvKh9rAkiA==", + "license": "MIT", "dependencies": { - "@tanstack/table-core": "8.17.3" + "@tanstack/table-core": "8.20.5" }, "engines": { "node": ">=12" @@ -1912,9 +1941,10 @@ } }, "node_modules/@tanstack/table-core": { - "version": "8.17.3", - "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.17.3.tgz", - "integrity": "sha512-mPBodDGVL+fl6d90wUREepHa/7lhsghg2A3vFpakEhrhtbIlgNAZiMr7ccTgak5qbHqF14Fwy+W1yFWQt+WmYQ==", + "version": "8.20.5", + "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.20.5.tgz", + "integrity": "sha512-P9dF7XbibHph2PFRz8gfBKEXEY/HJPOhym8CHmjF8y3q5mWpKx9xtZapXQUWCgkqvsK0R46Azuz+VaxD4Xl+Tg==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -1926,12 +1956,14 @@ "node_modules/@types/cookie": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "license": "MIT" }, "node_modules/@types/cors": { "version": "2.8.17", "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -1941,6 +1973,7 @@ "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz", "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==", "dev": true, + "license": "MIT", "dependencies": { "@types/d3-array": "*", "@types/d3-axis": "*", @@ -1977,13 +2010,15 @@ "node_modules/@types/d3-array": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", - "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==" + "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==", + "license": "MIT" }, "node_modules/@types/d3-axis": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz", "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==", "dev": true, + "license": "MIT", "dependencies": { "@types/d3-selection": "*" } @@ -1993,6 +2028,7 @@ "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz", "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==", "dev": true, + "license": "MIT", "dependencies": { "@types/d3-selection": "*" } @@ -2001,18 +2037,21 @@ "version": "3.0.6", "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz", "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-color": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", - "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==" + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" }, "node_modules/@types/d3-contour": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz", "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==", "dev": true, + "license": "MIT", "dependencies": { "@types/d3-array": "*", "@types/geojson": "*" @@ -2022,19 +2061,22 @@ "version": "6.0.4", "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz", "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-dispatch": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.6.tgz", "integrity": "sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-drag": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/d3-selection": "*" } @@ -2043,39 +2085,45 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz", "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-ease": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", - "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==" + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "license": "MIT" }, "node_modules/@types/d3-fetch": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz", "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==", "dev": true, + "license": "MIT", "dependencies": { "@types/d3-dsv": "*" } }, "node_modules/@types/d3-force": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.9.tgz", - "integrity": "sha512-IKtvyFdb4Q0LWna6ymywQsEYjK/94SGhPrMfEr1TIc5OBeziTi+1jcCvttts8e0UWZIxpasjnQk9MNk/3iS+kA==", - "dev": true + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.10.tgz", + "integrity": "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==", + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-format": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz", "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-geo": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz", "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/geojson": "*" } @@ -2084,12 +2132,14 @@ "version": "3.1.7", "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz", "integrity": "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-interpolate": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", "dependencies": { "@types/d3-color": "*" } @@ -2097,30 +2147,35 @@ "node_modules/@types/d3-path": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.0.tgz", - "integrity": "sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==" + "integrity": "sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==", + "license": "MIT" }, "node_modules/@types/d3-polygon": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz", "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-quadtree": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz", "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-random": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz", "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-scale": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz", "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==", + "license": "MIT", "dependencies": { "@types/d3-time": "*" } @@ -2129,43 +2184,50 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.3.tgz", "integrity": "sha512-laXM4+1o5ImZv3RpFAsTRn3TEkzqkytiOY0Dz0sq5cnd1dtNlk6sHLon4OvqaiJb28T0S/TdsBI3Sjsy+keJrw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-selection": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.10.tgz", - "integrity": "sha512-cuHoUgS/V3hLdjJOLTT691+G2QoqAjCVLmr4kJXR4ha56w1Zdu8UUQ5TxLRqudgNjwXeQxKMq4j+lyf9sWuslg==", - "dev": true + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz", + "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==", + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-shape": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.6.tgz", "integrity": "sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==", + "license": "MIT", "dependencies": { "@types/d3-path": "*" } }, "node_modules/@types/d3-time": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz", - "integrity": "sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==" + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "license": "MIT" }, "node_modules/@types/d3-time-format": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz", "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-timer": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", - "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==" + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "license": "MIT" }, "node_modules/@types/d3-tip": { "version": "3.5.8", "resolved": "https://registry.npmjs.org/@types/d3-tip/-/d3-tip-3.5.8.tgz", "integrity": "sha512-wulonUo5oVC3YFfXVCElar8ZC5zhVxrDaPiJ1y2YJOFLlF/nETrLJDwSDzR3DQn1E+IoX5NRJpm2XkSpkJIaDQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/d3": "^3" } @@ -2174,13 +2236,15 @@ "version": "3.5.53", "resolved": "https://registry.npmjs.org/@types/d3/-/d3-3.5.53.tgz", "integrity": "sha512-8yKQA9cAS6+wGsJpBysmnhlaaxlN42Qizqkw+h2nILSlS+MAG2z4JdO6p+PJrJ+ACvimkmLJL281h157e52psQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-transition": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.8.tgz", - "integrity": "sha512-ew63aJfQ/ms7QQ4X7pk5NxQ9fZH/z+i24ZfJ6tJSfqxJMrYLiK01EAs2/Rtw/JreGUsS3pLPNV644qXFGnoZNQ==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz", + "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==", "dev": true, + "license": "MIT", "dependencies": { "@types/d3-selection": "*" } @@ -2190,6 +2254,7 @@ "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", "dev": true, + "license": "MIT", "dependencies": { "@types/d3-interpolate": "*", "@types/d3-selection": "*" @@ -2199,28 +2264,32 @@ "version": "7946.0.14", "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz", "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/jsonwebtoken": { - "version": "9.0.6", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.6.tgz", - "integrity": "sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw==", + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.7.tgz", + "integrity": "sha512-ugo316mmTYBl2g81zDFnZ7cfxlut3o+/EQdaP7J8QN2kY6lJ22hmQYCK5EHcJHbrW+dkCGSCPgbG8JtYj6qSrg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/leaflet": { - "version": "1.9.12", - "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.12.tgz", - "integrity": "sha512-BK7XS+NyRI291HIo0HCfE18Lp8oA30H1gpi1tf0mF3TgiCEzanQjOqNZ4x126SXzzi2oNSZhZ5axJp1k0iM6jg==", + "version": "1.9.14", + "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.14.tgz", + "integrity": "sha512-sx2q6MDJaajwhKeVgPSvqXd8rhNJSTA3tMidQGduZn9S6WBYxDkCpSpV5xXEmSg7Cgdk/5vJGhVF1kMYLzauBg==", "dev": true, + "license": "MIT", "dependencies": { "@types/geojson": "*" } @@ -2230,53 +2299,60 @@ "resolved": "https://registry.npmjs.org/@types/leaflet-routing-machine/-/leaflet-routing-machine-3.2.8.tgz", "integrity": "sha512-v2pJDv/nqbB769SsytHemhLkqwjVor9UdWvZ1l6Y2SEaXNt1yDwVrktc4sCT8/4n7npuEb8VP+UAk8xrPePqSQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/leaflet": "*" } }, "node_modules/@types/leaflet.markercluster": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/leaflet.markercluster/-/leaflet.markercluster-1.5.4.tgz", - "integrity": "sha512-tfMP8J62+wfsVLDLGh5Zh1JZxijCaBmVsMAX78MkLPwvPitmZZtSin5aWOVRhZrCS+pEOZwNzexbfWXlY+7yjg==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@types/leaflet.markercluster/-/leaflet.markercluster-1.5.5.tgz", + "integrity": "sha512-TkWOhSHDM1ANxmLi+uK0PjsVcjIKBr8CLV2WoF16dIdeFmC0Cj5P5axkI3C1Xsi4+ht6EU8+BfEbbqEF9icPrg==", "dev": true, + "license": "MIT", "dependencies": { "@types/leaflet": "*" } }, "node_modules/@types/lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ==", - "dev": true + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.13.tgz", + "integrity": "sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==", + "dev": true, + "license": "MIT" }, "node_modules/@types/lodash.debounce": { "version": "4.0.9", "resolved": "https://registry.npmjs.org/@types/lodash.debounce/-/lodash.debounce-4.0.9.tgz", "integrity": "sha512-Ma5JcgTREwpLRwMM+XwBR7DaWe96nC38uCBDFKZWbNKD+osjVzdpnUSwBcqCptrp16sSOLBAUb50Car5I0TCsQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/lodash": "*" } }, "node_modules/@types/node": { - "version": "20.12.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.10.tgz", - "integrity": "sha512-Eem5pH9pmWBHoGAT8Dr5fdc5rYA+4NAovdM4EktRPVAAiJhmWWfQrA0cFhAbOsQdSfIHjAud6YdkbL69+zSKjw==", + "version": "20.17.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.8.tgz", + "integrity": "sha512-ahz2g6/oqbKalW9sPv6L2iRbhLnojxjYWspAqhjvqSWBgGebEJT5GvRmk0QXPj3sbC6rU0GTQjPLQkmR8CObvA==", + "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.19.2" } }, "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", - "devOptional": true + "version": "15.7.13", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", + "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", + "devOptional": true, + "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.1.tgz", - "integrity": "sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw==", + "version": "18.3.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", + "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", "devOptional": true, + "license": "MIT", "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -2287,15 +2363,17 @@ "resolved": "https://registry.npmjs.org/@types/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.7.tgz", "integrity": "sha512-Gft19D+as4M+9Whq1oglhmK49vqPhcLzk8WfvfLvaYMIPYanyfLy0+CwFucMJfdKoSFyySPmkkWn8/E6voQXjQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/react": "*" } }, "node_modules/@types/react-dom": { - "version": "18.3.0", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", - "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", "devOptional": true, + "license": "MIT", "dependencies": { "@types/react": "*" } @@ -2305,6 +2383,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", "integrity": "sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "7.2.0", "@typescript-eslint/types": "7.2.0", @@ -2333,6 +2412,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "7.2.0", "@typescript-eslint/visitor-keys": "7.2.0" @@ -2350,6 +2430,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -2363,6 +2444,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "7.2.0", "@typescript-eslint/visitor-keys": "7.2.0", @@ -2391,6 +2473,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -2400,6 +2483,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -2415,6 +2499,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "7.2.0", "eslint-visitor-keys": "^3.4.1" @@ -2431,6 +2516,7 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/@uidotdev/usehooks/-/usehooks-2.4.1.tgz", "integrity": "sha512-1I+RwWyS+kdv3Mv0Vmc+p0dPYH0DTRAo04HLyXReYBL9AeseDWUJyi4THuksBJcu9F0Pih69Ak150VDnqbVnXg==", + "license": "MIT", "engines": { "node": ">=16" }, @@ -2443,12 +2529,14 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -2458,10 +2546,11 @@ } }, "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -2474,6 +2563,7 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -2483,6 +2573,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -2498,6 +2589,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", "engines": { "node": ">=8" } @@ -2506,6 +2598,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -2519,12 +2612,14 @@ "node_modules/any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "license": "MIT" }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -2536,18 +2631,21 @@ "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/aria-hidden": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", + "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, @@ -2556,12 +2654,13 @@ } }, "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", "dev": true, - "dependencies": { - "dequal": "^2.0.3" + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" } }, "node_modules/array-buffer-byte-length": { @@ -2569,6 +2668,7 @@ "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, + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" @@ -2585,6 +2685,7 @@ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -2605,6 +2706,7 @@ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2614,6 +2716,7 @@ "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -2634,6 +2737,7 @@ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -2654,6 +2758,7 @@ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -2672,6 +2777,7 @@ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -2685,29 +2791,21 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.toreversed": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", - "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - } - }, "node_modules/array.prototype.tosorted": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", - "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.1.0", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/arraybuffer.prototype.slice": { @@ -2715,6 +2813,7 @@ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.5", @@ -2736,18 +2835,21 @@ "version": "0.0.8", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" }, "node_modules/available-typed-arrays": { "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, + "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -2759,18 +2861,20 @@ } }, "node_modules/axe-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", - "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.2.tgz", + "integrity": "sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==", "dev": true, + "license": "MPL-2.0", "engines": { "node": ">=4" } }, "node_modules/axios": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", - "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.8.tgz", + "integrity": "sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==", + "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -2778,23 +2882,26 @@ } }, "node_modules/axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", "dev": true, - "dependencies": { - "dequal": "^2.0.3" + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" } }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" }, "node_modules/base64id": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "license": "MIT", "engines": { "node": "^4.5.0 || >= 5.9" } @@ -2803,6 +2910,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", "engines": { "node": ">=8" }, @@ -2815,6 +2923,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2824,6 +2933,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -2834,7 +2944,8 @@ "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" }, "node_modules/busboy": { "version": "1.6.0", @@ -2852,6 +2963,7 @@ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -2871,6 +2983,7 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2879,14 +2992,15 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "license": "MIT", "engines": { "node": ">= 6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001616", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001616.tgz", - "integrity": "sha512-RHVYKov7IcdNjVHJFNY/78RdG4oGVjbayxv8u5IO74Wv7Hlq4PnJE6mo/OjFijjVFNy5ijnCt6H3IIo4t+wfEw==", + "version": "1.0.30001684", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001684.tgz", + "integrity": "sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==", "funding": [ { "type": "opencollective", @@ -2900,13 +3014,15 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2919,9 +3035,10 @@ } }, "node_modules/chart.js": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.3.tgz", - "integrity": "sha512-qK1gkGSRYcJzqrrzdR6a+I0vQ4/R+SoODXyAjscQ/4mzuNzySaMCd+hyVxitSY1+L2fjPD1Gbn+ibNqRmwQeLw==", + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.6.tgz", + "integrity": "sha512-8Y406zevUPbbIBA/HRk33khEmQPk5+cxeflWE/2rx1NJsjVWMPw/9mSP9rxHP5eqi6LNoPBVMfZHxbwLSgldYA==", + "license": "MIT", "dependencies": { "@kurkle/color": "^0.3.0" }, @@ -2933,6 +3050,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/chartjs-adapter-date-fns/-/chartjs-adapter-date-fns-3.0.0.tgz", "integrity": "sha512-Rs3iEB3Q5pJ973J93OBTpnP7qoGwvq3nUnoMdtxO+9aoJof7UFcRbWcIDteXuYd1fgAvct/32T9qaLyLuZVwCg==", + "license": "MIT", "peerDependencies": { "chart.js": ">=2.8.0", "date-fns": ">=2.0.0" @@ -2942,6 +3060,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/chartjs-chart-matrix/-/chartjs-chart-matrix-2.0.1.tgz", "integrity": "sha512-BGfeY+/PHnITyDlc7WfnKJ1RyOfgOzIqWp/gxzzl7pUjyoGzHDcw51qd2xJF9gdT9Def7ZwOnOMm8GJUXDxI0w==", + "license": "MIT", "peerDependencies": { "chart.js": ">=3.0.0" } @@ -2950,6 +3069,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -2973,6 +3093,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -2981,33 +3102,28 @@ } }, "node_modules/class-variance-authority": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.0.tgz", - "integrity": "sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", "dependencies": { - "clsx": "2.0.0" + "clsx": "^2.1.1" }, "funding": { - "url": "https://joebell.co.uk" - } - }, - "node_modules/class-variance-authority/node_modules/clsx": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", - "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", - "engines": { - "node": ">=6" + "url": "https://polar.sh/cva" } }, "node_modules/client-only": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "license": "MIT" }, "node_modules/clsx": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", "engines": { "node": ">=6" } @@ -3016,6 +3132,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1", "color-string": "^1.9.0" @@ -3028,6 +3145,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -3038,12 +3156,14 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" }, "node_modules/color-string": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -3053,6 +3173,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -3061,23 +3182,26 @@ } }, "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", "engines": { - "node": ">= 6" + "node": ">= 10" } }, "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 + "dev": true, + "license": "MIT" }, "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -3086,6 +3210,7 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", + "license": "MIT", "dependencies": { "toggle-selection": "^1.0.6" } @@ -3094,6 +3219,7 @@ "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", "dependencies": { "object-assign": "^4", "vary": "^1" @@ -3103,9 +3229,10 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -3119,6 +3246,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", "bin": { "cssesc": "bin/cssesc" }, @@ -3129,12 +3257,14 @@ "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" }, "node_modules/d3": { "version": "7.9.0", "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz", "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==", + "license": "ISC", "dependencies": { "d3-array": "3", "d3-axis": "3", @@ -3175,6 +3305,7 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", "dependencies": { "internmap": "1 - 2" }, @@ -3186,6 +3317,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "license": "ISC", "engines": { "node": ">=12" } @@ -3194,6 +3326,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", @@ -3209,6 +3342,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "license": "ISC", "dependencies": { "d3-path": "1 - 3" }, @@ -3219,12 +3353,14 @@ "node_modules/d3-collection": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", - "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" + "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==", + "license": "BSD-3-Clause" }, "node_modules/d3-color": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", "engines": { "node": ">=12" } @@ -3233,6 +3369,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "license": "ISC", "dependencies": { "d3-array": "^3.2.0" }, @@ -3244,6 +3381,7 @@ "version": "6.0.4", "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "license": "ISC", "dependencies": { "delaunator": "5" }, @@ -3255,6 +3393,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "license": "ISC", "engines": { "node": ">=12" } @@ -3263,6 +3402,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", "d3-selection": "3" @@ -3275,6 +3415,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "license": "ISC", "dependencies": { "commander": "7", "iconv-lite": "0.6", @@ -3295,18 +3436,11 @@ "node": ">=12" } }, - "node_modules/d3-dsv/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, "node_modules/d3-ease": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", "engines": { "node": ">=12" } @@ -3315,6 +3449,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "license": "ISC", "dependencies": { "d3-dsv": "1 - 3" }, @@ -3326,6 +3461,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", "d3-quadtree": "1 - 3", @@ -3339,6 +3475,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "license": "ISC", "engines": { "node": ">=12" } @@ -3347,6 +3484,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", + "license": "ISC", "dependencies": { "d3-array": "2.5.0 - 3" }, @@ -3358,6 +3496,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "license": "ISC", "engines": { "node": ">=12" } @@ -3366,6 +3505,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", "dependencies": { "d3-color": "1 - 3" }, @@ -3377,6 +3517,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", "engines": { "node": ">=12" } @@ -3385,6 +3526,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "license": "ISC", "engines": { "node": ">=12" } @@ -3393,6 +3535,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "license": "ISC", "engines": { "node": ">=12" } @@ -3401,6 +3544,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "license": "ISC", "engines": { "node": ">=12" } @@ -3409,6 +3553,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", "dependencies": { "d3-array": "2.10.0 - 3", "d3-format": "1 - 3", @@ -3424,6 +3569,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", + "license": "ISC", "dependencies": { "d3-color": "1 - 3", "d3-interpolate": "1 - 3" @@ -3436,6 +3582,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "license": "ISC", "engines": { "node": ">=12" } @@ -3444,6 +3591,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", "dependencies": { "d3-path": "^3.1.0" }, @@ -3455,6 +3603,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", "dependencies": { "d3-array": "2 - 3" }, @@ -3466,6 +3615,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", "dependencies": { "d3-time": "1 - 3" }, @@ -3477,6 +3627,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", "engines": { "node": ">=12" } @@ -3485,6 +3636,7 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/d3-tip/-/d3-tip-0.9.1.tgz", "integrity": "sha512-EVBfG9d+HnjIoyVXfhpytWxlF59JaobwizqMX9EBXtsFmJytjwHeYiUs74ldHQjE7S9vzfKTx2LCtvUrIbuFYg==", + "license": "MIT", "dependencies": { "d3-collection": "^1.0.4", "d3-selection": "^1.3.0" @@ -3496,12 +3648,14 @@ "node_modules/d3-tip/node_modules/d3-selection": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", - "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==" + "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==", + "license": "BSD-3-Clause" }, "node_modules/d3-transition": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "license": "ISC", "dependencies": { "d3-color": "1 - 3", "d3-dispatch": "1 - 3", @@ -3520,6 +3674,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", @@ -3535,13 +3690,15 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/data-view-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -3559,6 +3716,7 @@ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -3576,6 +3734,7 @@ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -3589,9 +3748,10 @@ } }, "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==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", "peer": true, "funding": { "type": "github", @@ -3599,11 +3759,12 @@ } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -3617,12 +3778,14 @@ "node_modules/decimal.js-light": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", - "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==" + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==", + "license": "MIT" }, "node_modules/deeks": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/deeks/-/deeks-3.1.0.tgz", "integrity": "sha512-e7oWH1LzIdv/prMQ7pmlDlaVoL64glqzvNgkgQNgyec9ORPHrT2jaOqMtRyqJuwWjtfb6v+2rk9pmaHj+F137A==", + "license": "MIT", "engines": { "node": ">= 16" } @@ -3631,13 +3794,15 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "dev": true, + "license": "MIT" }, "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, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -3655,6 +3820,7 @@ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -3671,6 +3837,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", + "license": "ISC", "dependencies": { "robust-predicates": "^3.0.2" } @@ -3679,23 +3846,16 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", "engines": { "node": ">=0.4.0" } }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/detect-libc": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "license": "Apache-2.0", "engines": { "node": ">=8" } @@ -3703,18 +3863,21 @@ "node_modules/detect-node-es": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "license": "Apache-2.0" }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -3725,12 +3888,14 @@ "node_modules/dlv": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" }, "node_modules/doc-path": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/doc-path/-/doc-path-4.1.1.tgz", "integrity": "sha512-h1ErTglQAVv2gCnOpD3sFS6uolDbOKHDU1BZq+Kl3npPqroU3dYL42lUgMfd5UimlwtRgp7C9dLGwqQ5D2HYgQ==", + "license": "MIT", "engines": { "node": ">=16" } @@ -3740,6 +3905,7 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -3751,6 +3917,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.7", "csstype": "^3.0.2" @@ -3759,12 +3926,14 @@ "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" } @@ -3772,19 +3941,21 @@ "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" }, "node_modules/engine.io": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.1.tgz", - "integrity": "sha512-NEpDCw9hrvBW+hVEOK4T7v0jFJ++KgtPl4jKFwsZVfG1XhS0dCrSb3VMb9gPAd7VAdW52VT1EnaNiU2vM8C0og==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.2.tgz", + "integrity": "sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==", + "license": "MIT", "dependencies": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", - "cookie": "~0.4.1", + "cookie": "~0.7.2", "cors": "~2.8.5", "debug": "~4.3.1", "engine.io-parser": "~5.2.1", @@ -3795,9 +3966,10 @@ } }, "node_modules/engine.io-client": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.1.tgz", - "integrity": "sha512-aYuoak7I+R83M/BBPIOs2to51BmFIpC1wZe6zZzMrT2llVsHy5cvcmdsJgP2Qz6smHu+sD9oexiSUAVd8OfBPw==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.2.tgz", + "integrity": "sha512-TAr+NKeoVTjEVW8P3iHguO1LO6RlUz9O5Y8o7EY0fU+gY1NYqas7NN3slpFtbXEsLMHk0h90fJMfKjRkQ0qUIw==", + "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1", @@ -3810,15 +3982,17 @@ "version": "5.2.3", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "license": "MIT", "engines": { "node": ">=10.0.0" } }, "node_modules/enhanced-resolve": { - "version": "5.16.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz", - "integrity": "sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -3828,10 +4002,11 @@ } }, "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "version": "1.23.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", + "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", @@ -3848,7 +4023,7 @@ "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.4", "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", + "globalthis": "^1.0.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.3", @@ -3864,10 +4039,10 @@ "is-string": "^1.0.7", "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", + "object-inspect": "^1.13.3", "object-keys": "^1.1.1", "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", + "regexp.prototype.flags": "^1.5.3", "safe-array-concat": "^1.1.2", "safe-regex-test": "^1.0.3", "string.prototype.trim": "^1.2.9", @@ -3892,6 +4067,7 @@ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4" }, @@ -3904,15 +4080,17 @@ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/es-iterator-helpers": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", - "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.0.tgz", + "integrity": "sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -3921,12 +4099,13 @@ "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", + "globalthis": "^1.0.4", + "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.3", "has-symbols": "^1.0.3", "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.2", + "iterator.prototype": "^1.1.3", "safe-array-concat": "^1.1.2" }, "engines": { @@ -3938,6 +4117,7 @@ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -3950,6 +4130,7 @@ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4", "has-tostringtag": "^1.0.2", @@ -3964,19 +4145,21 @@ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, + "license": "MIT", "dependencies": { "hasown": "^2.0.0" } }, "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, + "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -3990,6 +4173,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -3998,16 +4182,18 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -4057,6 +4243,7 @@ "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.3.tgz", "integrity": "sha512-ZkNztm3Q7hjqvB1rRlOX8P9E/cXRL9ajRcs8jufEtwMfTVYRqnmtnaSu57QqHyBlovMuiB8LEzfLBkh5RYV6Fg==", "dev": true, + "license": "MIT", "dependencies": { "@next/eslint-plugin-next": "14.2.3", "@rushstack/eslint-patch": "^1.3.3", @@ -4083,6 +4270,7 @@ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", @@ -4094,22 +4282,25 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-import-resolver-typescript": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", - "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", - "dev": true, - "dependencies": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.12.0", - "eslint-module-utils": "^2.7.4", - "fast-glob": "^3.3.1", - "get-tsconfig": "^4.5.0", - "is-core-module": "^2.11.0", + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.3.tgz", + "integrity": "sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.3.5", + "enhanced-resolve": "^5.15.0", + "eslint-module-utils": "^2.8.1", + "fast-glob": "^3.3.2", + "get-tsconfig": "^4.7.5", + "is-bun-module": "^1.0.2", "is-glob": "^4.0.3" }, "engines": { @@ -4120,14 +4311,24 @@ }, "peerDependencies": { "eslint": "*", - "eslint-plugin-import": "*" + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } } }, "node_modules/eslint-module-utils": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", - "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^3.2.7" }, @@ -4145,39 +4346,43 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, + "license": "MIT", "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "node_modules/eslint-plugin-import/node_modules/debug": { @@ -4185,6 +4390,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } @@ -4194,6 +4400,7 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -4206,77 +4413,80 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", - "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.2", - "aria-query": "^5.3.0", - "array-includes": "^3.1.7", + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", "array.prototype.flatmap": "^1.3.2", "ast-types-flow": "^0.0.8", - "axe-core": "=4.7.0", - "axobject-query": "^3.2.1", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", - "es-iterator-helpers": "^1.0.15", - "hasown": "^2.0.0", + "hasown": "^2.0.2", "jsx-ast-utils": "^3.3.5", "language-tags": "^1.0.9", "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7" + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" }, "engines": { "node": ">=4.0" }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" } }, "node_modules/eslint-plugin-react": { - "version": "7.34.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", - "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", + "version": "7.37.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", + "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==", "dev": true, + "license": "MIT", "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlast": "^1.2.4", + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", "array.prototype.flatmap": "^1.3.2", - "array.prototype.toreversed": "^1.1.2", - "array.prototype.tosorted": "^1.1.3", + "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.17", + "es-iterator-helpers": "^1.1.0", "estraverse": "^5.3.0", + "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7", - "object.hasown": "^1.1.3", - "object.values": "^1.1.7", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.0", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.10" + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "version": "5.0.0-canary-7118f5dd7-20230705", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0-canary-7118f5dd7-20230705.tgz", + "integrity": "sha512-AZYbMo/NW9chdL7vk6HQzQhT+PvTAEVqWk9ziruUoW2kAOcN5qNyelv70e0F1VNQAbvutOC9oc+xfWycI9FxDw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -4289,6 +4499,7 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -4301,6 +4512,7 @@ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -4318,6 +4530,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -4327,6 +4540,7 @@ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -4343,6 +4557,7 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -4355,6 +4570,7 @@ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -4368,10 +4584,11 @@ } }, "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -4384,6 +4601,7 @@ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -4396,6 +4614,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -4405,6 +4624,7 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } @@ -4412,12 +4632,14 @@ "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" }, "node_modules/export-to-csv": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/export-to-csv/-/export-to-csv-1.3.0.tgz", - "integrity": "sha512-msPjbfozZdYzDghAEKmCVH5veMeKHNacplE6noXvGiA8AeV1qa/SOxp6JXDjF9R8Kf6v3ypI6jskiY19dkhZeA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/export-to-csv/-/export-to-csv-1.4.0.tgz", + "integrity": "sha512-6CX17Cu+rC2Fi2CyZ4CkgVG3hLl6BFsdAxfXiZkmDFIDY4mRx2y2spdeH6dqPHI9rP+AsHEfGeKz84Uuw7+Pmg==", + "license": "MIT", "engines": { "node": "^v12.20.0 || >=v14.13.0" } @@ -4426,12 +4648,14 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-equals": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz", "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==", + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -4440,6 +4664,7 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -4455,6 +4680,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -4466,18 +4692,21 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -4487,6 +4716,7 @@ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -4498,6 +4728,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -4510,6 +4741,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -4526,6 +4758,7 @@ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -4536,21 +4769,23 @@ } }, "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "dev": true, + "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "funding": [ { "type": "individual", "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -4565,14 +4800,16 @@ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, + "license": "MIT", "dependencies": { "is-callable": "^1.1.3" } }, "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -4585,9 +4822,10 @@ } }, "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -4601,13 +4839,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -4620,6 +4860,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4629,6 +4870,7 @@ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -4647,6 +4889,7 @@ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4656,6 +4899,7 @@ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", @@ -4674,6 +4918,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", "engines": { "node": ">=6" } @@ -4683,6 +4928,7 @@ "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, + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "es-errors": "^1.3.0", @@ -4696,10 +4942,11 @@ } }, "node_modules/get-tsconfig": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.4.tgz", - "integrity": "sha512-ofbkKj+0pjXjhejr007J/fLf+sW+8H7K5GCm+msC8q3IpvgjobpyPqSRFemNyIMxklC0zeJpi7VDFna19FacvQ==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", + "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", "dev": true, + "license": "MIT", "dependencies": { "resolve-pkg-maps": "^1.0.0" }, @@ -4711,6 +4958,7 @@ "version": "10.3.10", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.3.5", @@ -4732,6 +4980,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -4743,14 +4992,16 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/glob/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -4766,6 +5017,7 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -4781,6 +5033,7 @@ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, + "license": "MIT", "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" @@ -4797,6 +5050,7 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -4817,6 +5071,7 @@ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -4827,19 +5082,22 @@ "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "dev": true, + "license": "MIT" }, "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, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4849,6 +5107,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4858,6 +5117,7 @@ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -4870,6 +5130,7 @@ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4882,6 +5143,7 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4894,6 +5156,7 @@ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -4908,6 +5171,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -4919,6 +5183,7 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -4927,10 +5192,11 @@ } }, "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -4940,6 +5206,7 @@ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -4956,6 +5223,7 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -4964,7 +5232,9 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -4974,13 +5244,15 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" }, "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, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.0", @@ -4994,6 +5266,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", "engines": { "node": ">=12" } @@ -5002,6 +5275,7 @@ "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "license": "MIT", "dependencies": { "loose-envify": "^1.0.0" } @@ -5011,6 +5285,7 @@ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" @@ -5025,13 +5300,15 @@ "node_modules/is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT" }, "node_modules/is-async-function": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -5047,6 +5324,7 @@ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, + "license": "MIT", "dependencies": { "has-bigints": "^1.0.1" }, @@ -5058,6 +5336,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -5070,6 +5349,7 @@ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -5081,11 +5361,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-bun-module": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.3.0.tgz", + "integrity": "sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.6.3" + } + }, "node_modules/is-callable": { "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, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -5094,11 +5385,15 @@ } }, "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5109,6 +5404,7 @@ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", "dev": true, + "license": "MIT", "dependencies": { "is-typed-array": "^1.1.13" }, @@ -5124,6 +5420,7 @@ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -5138,17 +5435,22 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz", + "integrity": "sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5158,6 +5460,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", "engines": { "node": ">=8" } @@ -5167,6 +5470,7 @@ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -5181,6 +5485,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -5193,6 +5498,7 @@ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -5205,6 +5511,7 @@ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -5216,6 +5523,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -5225,6 +5533,7 @@ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -5240,6 +5549,7 @@ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -5249,6 +5559,7 @@ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -5265,6 +5576,7 @@ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -5277,6 +5589,7 @@ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7" }, @@ -5292,6 +5605,7 @@ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -5307,6 +5621,7 @@ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -5322,6 +5637,7 @@ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, + "license": "MIT", "dependencies": { "which-typed-array": "^1.1.14" }, @@ -5337,6 +5653,7 @@ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -5349,6 +5666,7 @@ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -5361,6 +5679,7 @@ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4" @@ -5376,30 +5695,37 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" }, "node_modules/iterator.prototype": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", + "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", "dev": true, + "license": "MIT", "dependencies": { "define-properties": "^1.2.1", "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", "reflect.getprototypeof": "^1.0.4", "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/jackspeak": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -5414,9 +5740,10 @@ } }, "node_modules/jiti": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "license": "MIT", "bin": { "jiti": "bin/jiti.js" } @@ -5424,13 +5751,15 @@ "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -5439,9 +5768,10 @@ } }, "node_modules/json-2-csv": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/json-2-csv/-/json-2-csv-5.5.1.tgz", - "integrity": "sha512-KgAtAXTQopRwe90gh8SgjRSxgt9bUWbGAPMo9W0TZLA8SqiQH7khtagFfeEUjG3NBPwJu/+9uX5pMvunKaPvrQ==", + "version": "5.5.7", + "resolved": "https://registry.npmjs.org/json-2-csv/-/json-2-csv-5.5.7.tgz", + "integrity": "sha512-aZ0EOadeNnO4ifF60oXXTH8P177WeHhFLbRLqILW1Kk1gNHlgAOuvddMwEIaxbLpCzx+vXo49whK6AILdg8qLg==", + "license": "MIT", "dependencies": { "deeks": "3.1.0", "doc-path": "4.1.1" @@ -5454,25 +5784,29 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json5": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.0" }, @@ -5484,6 +5818,7 @@ "version": "9.0.2", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "license": "MIT", "dependencies": { "jws": "^3.2.2", "lodash.includes": "^4.3.0", @@ -5506,6 +5841,7 @@ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, + "license": "MIT", "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", @@ -5520,6 +5856,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "license": "MIT", "dependencies": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", @@ -5530,6 +5867,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "license": "MIT", "dependencies": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" @@ -5540,21 +5878,24 @@ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } }, "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "dev": true, + "license": "CC0-1.0" }, "node_modules/language-tags": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, + "license": "MIT", "dependencies": { "language-subtag-registry": "^0.3.20" }, @@ -5565,12 +5906,14 @@ "node_modules/leaflet": { "version": "1.9.4", "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz", - "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==" + "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==", + "license": "BSD-2-Clause" }, "node_modules/leaflet-routing-machine": { "version": "3.2.12", "resolved": "https://registry.npmjs.org/leaflet-routing-machine/-/leaflet-routing-machine-3.2.12.tgz", "integrity": "sha512-HLde58G1YtD9xSIzZavJ6BPABZaV1hHeGst8ouhzuxmSC3s32NVtADT+njbIUMW1maHRCrsgTk/E4hz5QH7FrA==", + "license": "ISC", "dependencies": { "@mapbox/corslite": "0.0.7", "@mapbox/polyline": "^0.2.0", @@ -5581,6 +5924,7 @@ "version": "1.5.3", "resolved": "https://registry.npmjs.org/leaflet.markercluster/-/leaflet.markercluster-1.5.3.tgz", "integrity": "sha512-vPTw/Bndq7eQHjLBVlWpnGeLa3t+3zGiuM7fJwCkiMFq+nmRuG3RI3f7f4N4TDX7T4NpbAXpR2+NTRSEGfCSeA==", + "license": "MIT", "peerDependencies": { "leaflet": "^1.3.1" } @@ -5590,6 +5934,7 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -5602,6 +5947,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "license": "MIT", "engines": { "node": ">=10" } @@ -5609,13 +5955,15 @@ "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -5629,58 +5977,69 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "license": "MIT" }, "node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT" }, "node_modules/lodash.isboolean": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" }, "node_modules/lodash.isinteger": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT" }, "node_modules/lodash.isnumber": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT" }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" }, "node_modules/lodash.isstring": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT" }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -5689,17 +6048,16 @@ } }, "node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", - "engines": { - "node": "14 || >=16.14" - } + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" }, "node_modules/lucide-react": { "version": "0.378.0", "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.378.0.tgz", "integrity": "sha512-u6EPU8juLUk9ytRcyapkWI18epAv3RU+6+TC23ivjR0e+glWKBobFeSgRwOIJihzktILQuy6E0E80P2jVTDR5g==", + "license": "ISC", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0" } @@ -5708,16 +6066,18 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -5728,6 +6088,7 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -5736,6 +6097,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -5748,6 +6110,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -5760,27 +6123,31 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/minipass": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.0.tgz", - "integrity": "sha512-oGZRv2OT1lO2UF1zUcwdTb3wqUwI0kBGTgt/T7OdSj6M6N5m3o5uPf0AIW6lVxGGoiWUR7e2AwTE+xiwK8WQig==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "license": "MIT", "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", @@ -5788,15 +6155,16 @@ } }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -5808,22 +6176,25 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/next": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/next/-/next-14.2.3.tgz", - "integrity": "sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A==", + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/next/-/next-14.2.18.tgz", + "integrity": "sha512-H9qbjDuGivUDEnK6wa+p2XKO+iMzgVgyr9Zp/4Iv29lKa+DYaxJGjOeEA+5VOvJh/M7HLiskehInSa0cWxVXUw==", + "license": "MIT", "dependencies": { - "@next/env": "14.2.3", + "@next/env": "14.2.18", "@swc/helpers": "0.5.5", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", @@ -5838,15 +6209,15 @@ "node": ">=18.17.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "14.2.3", - "@next/swc-darwin-x64": "14.2.3", - "@next/swc-linux-arm64-gnu": "14.2.3", - "@next/swc-linux-arm64-musl": "14.2.3", - "@next/swc-linux-x64-gnu": "14.2.3", - "@next/swc-linux-x64-musl": "14.2.3", - "@next/swc-win32-arm64-msvc": "14.2.3", - "@next/swc-win32-ia32-msvc": "14.2.3", - "@next/swc-win32-x64-msvc": "14.2.3" + "@next/swc-darwin-arm64": "14.2.18", + "@next/swc-darwin-x64": "14.2.18", + "@next/swc-linux-arm64-gnu": "14.2.18", + "@next/swc-linux-arm64-musl": "14.2.18", + "@next/swc-linux-x64-gnu": "14.2.18", + "@next/swc-linux-x64-musl": "14.2.18", + "@next/swc-win32-arm64-msvc": "14.2.18", + "@next/swc-win32-ia32-msvc": "14.2.18", + "@next/swc-win32-x64-msvc": "14.2.18" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", @@ -5871,6 +6242,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.3.0.tgz", "integrity": "sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==", + "license": "MIT", "peerDependencies": { "react": "^16.8 || ^17 || ^18", "react-dom": "^16.8 || ^17 || ^18" @@ -5894,6 +6266,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", @@ -5907,6 +6280,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5915,6 +6289,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5923,15 +6298,20 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "license": "MIT", "engines": { "node": ">= 6" } }, "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5941,6 +6321,7 @@ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -5950,6 +6331,7 @@ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -5968,6 +6350,7 @@ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -5982,6 +6365,7 @@ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -6000,6 +6384,7 @@ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -6009,28 +6394,12 @@ "node": ">= 0.4" } }, - "node_modules/object.hasown": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", - "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", - "dev": true, - "dependencies": { - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object.values": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -6048,6 +6417,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } @@ -6057,6 +6427,7 @@ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, + "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -6072,13 +6443,15 @@ "node_modules/osrm-text-instructions": { "version": "0.13.4", "resolved": "https://registry.npmjs.org/osrm-text-instructions/-/osrm-text-instructions-0.13.4.tgz", - "integrity": "sha512-ge4ZTIetMQKAHKq2MwWf83ntzdJN20ndRKRaVNoZ3SkDkBNO99Qddz7r6+hrVx38I+ih6Rk5T1yslczAB6Q9Pg==" + "integrity": "sha512-ge4ZTIetMQKAHKq2MwWf83ntzdJN20ndRKRaVNoZ3SkDkBNO99Qddz7r6+hrVx38I+ih6Rk5T1yslczAB6Q9Pg==", + "license": "BSD-2-Clause" }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -6094,6 +6467,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -6109,6 +6483,7 @@ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -6121,6 +6496,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -6130,6 +6506,7 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6138,6 +6515,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", "engines": { "node": ">=8" } @@ -6145,18 +6523,20 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" }, "node_modules/path-scurry": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", - "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -6167,19 +6547,22 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -6191,6 +6574,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6199,6 +6583,7 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "license": "MIT", "engines": { "node": ">= 6" } @@ -6208,14 +6593,15 @@ "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, + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", "funding": [ { "type": "opencollective", @@ -6230,10 +6616,11 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -6243,6 +6630,7 @@ "version": "15.1.0", "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", @@ -6259,6 +6647,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "license": "MIT", "dependencies": { "camelcase-css": "^2.0.1" }, @@ -6287,6 +6676,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "lilconfig": "^3.0.0", "yaml": "^2.3.4" @@ -6308,9 +6698,10 @@ } }, "node_modules/postcss-load-config/node_modules/lilconfig": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", - "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "license": "MIT", "engines": { "node": ">=14" }, @@ -6319,27 +6710,35 @@ } }, "node_modules/postcss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", - "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.0.11" + "postcss-selector-parser": "^6.1.1" }, "engines": { "node": ">=12.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, "peerDependencies": { "postcss": "^8.2.14" } }, "node_modules/postcss-selector-parser": { - "version": "6.0.16", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", - "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -6351,13 +6750,15 @@ "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } @@ -6366,6 +6767,7 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -6375,13 +6777,15 @@ "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -6403,12 +6807,14 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/react": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" }, @@ -6420,6 +6826,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-5.2.0.tgz", "integrity": "sha512-98iN5aguJyVSxp5U3CblRLH67J8gkfyGNbiK3c+l1QI/G4irHMPQw44aEPmjVag+YKTyQ260NcF82GTQ3bdscA==", + "license": "MIT", "peerDependencies": { "chart.js": "^4.1.1", "react": "^16.8.0 || ^17.0.0 || ^18.0.0" @@ -6429,6 +6836,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz", "integrity": "sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==", + "license": "MIT", "dependencies": { "copy-to-clipboard": "^3.3.1", "prop-types": "^15.8.1" @@ -6441,6 +6849,7 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -6452,14 +6861,16 @@ "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" }, "node_modules/react-remove-scroll": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", - "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", + "license": "MIT", "dependencies": { - "react-remove-scroll-bar": "^2.3.3", + "react-remove-scroll-bar": "^2.3.6", "react-style-singleton": "^2.2.1", "tslib": "^2.1.0", "use-callback-ref": "^1.3.0", @@ -6482,6 +6893,7 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", + "license": "MIT", "dependencies": { "react-style-singleton": "^2.2.1", "tslib": "^2.0.0" @@ -6500,11 +6912,12 @@ } }, "node_modules/react-router": { - "version": "6.24.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.24.0.tgz", - "integrity": "sha512-sQrgJ5bXk7vbcC4BxQxeNa5UmboFm35we1AFK0VvQaz9g0LzxEIuLOhHIoZ8rnu9BO21ishGeL9no1WB76W/eg==", + "version": "6.28.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.28.0.tgz", + "integrity": "sha512-HrYdIFqdrnhDw0PqG/AKjAqEqM7AvxCz0DQ4h2W8k6nqmc5uRBYDag0SBxx9iYz5G8gnuNVLzUe13wl9eAsXXg==", + "license": "MIT", "dependencies": { - "@remix-run/router": "1.17.0" + "@remix-run/router": "1.21.0" }, "engines": { "node": ">=14.0.0" @@ -6514,12 +6927,13 @@ } }, "node_modules/react-router-dom": { - "version": "6.24.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.24.0.tgz", - "integrity": "sha512-960sKuau6/yEwS8e+NVEidYQb1hNjAYM327gjEyXlc6r3Skf2vtwuJ2l7lssdegD2YjoKG5l8MsVyeTDlVeY8g==", + "version": "6.28.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.28.0.tgz", + "integrity": "sha512-kQ7Unsl5YdyOltsPGl31zOjLrDv+m2VcIEcIHqYYD3Lp0UppLjrzcfJqDJwXxFw3TH/yvapbnUvPlAj7Kx5nbg==", + "license": "MIT", "dependencies": { - "@remix-run/router": "1.17.0", - "react-router": "6.24.0" + "@remix-run/router": "1.21.0", + "react-router": "6.28.0" }, "engines": { "node": ">=14.0.0" @@ -6533,6 +6947,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.1.tgz", "integrity": "sha512-OE4hm7XqR0jNOq3Qmk9mFLyd6p2+j6bvbPJ7qlB7+oo0eNcL2l7WQzG6MBnT3EXY6xzkLMUBec3AfewJdA0J8w==", + "license": "MIT", "dependencies": { "fast-equals": "^5.0.1", "prop-types": "^15.8.1", @@ -6547,6 +6962,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "license": "MIT", "dependencies": { "get-nonce": "^1.0.0", "invariant": "^2.2.4", @@ -6569,6 +6985,7 @@ "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", "dependencies": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", @@ -6584,6 +7001,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "license": "MIT", "dependencies": { "pify": "^2.3.0" } @@ -6592,6 +7010,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -6600,14 +7019,15 @@ } }, "node_modules/recharts": { - "version": "2.12.6", - "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.12.6.tgz", - "integrity": "sha512-D+7j9WI+D0NHauah3fKHuNNcRK8bOypPW7os1DERinogGBGaHI7i6tQKJ0aUF3JXyBZ63dyfKIW2WTOPJDxJ8w==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.13.3.tgz", + "integrity": "sha512-YDZ9dOfK9t3ycwxgKbrnDlRC4BHdjlY73fet3a0C1+qGMjXVZe6+VXmpOIIhzkje5MMEL8AN4hLIe4AMskBzlA==", + "license": "MIT", "dependencies": { "clsx": "^2.0.0", "eventemitter3": "^4.0.1", "lodash": "^4.17.21", - "react-is": "^16.10.2", + "react-is": "^18.3.1", "react-smooth": "^4.0.0", "recharts-scale": "^0.4.4", "tiny-invariant": "^1.3.1", @@ -6625,23 +7045,31 @@ "version": "0.4.5", "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz", "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", + "license": "MIT", "dependencies": { "decimal.js-light": "^2.4.1" } }, + "node_modules/recharts/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, "node_modules/reflect.getprototypeof": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", - "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.7.tgz", + "integrity": "sha512-bMvFGIUKlc/eSfXNX+aZ+EL95/EgZzuwA0OBPTbZZDEJw/0AkentjMuM1oiRfwHrshqk4RzdgiTg5CcDalXN5g==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.23.1", + "es-abstract": "^1.23.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" + "gopd": "^1.0.1", + "which-builtin-type": "^1.1.4" }, "engines": { "node": ">= 0.4" @@ -6653,18 +7081,20 @@ "node_modules/regenerator-runtime": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" }, "node_modules/regexp.prototype.flags": { - "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==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -6676,17 +7106,20 @@ "node_modules/remove-accents": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.5.0.tgz", - "integrity": "sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==" + "integrity": "sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==", + "license": "MIT" }, "node_modules/resize-observer-polyfill": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", - "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", + "license": "MIT" }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -6704,6 +7137,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -6713,6 +7147,7 @@ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } @@ -6721,6 +7156,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -6730,7 +7166,9 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -6745,7 +7183,9 @@ "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", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6764,7 +7204,8 @@ "node_modules/robust-predicates": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", - "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", + "license": "Unlicense" }, "node_modules/run-parallel": { "version": "1.2.0", @@ -6784,6 +7225,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } @@ -6791,13 +7233,15 @@ "node_modules/rw": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "license": "BSD-3-Clause" }, "node_modules/safe-array-concat": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4", @@ -6828,13 +7272,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/safe-regex-test": { "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, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -6850,20 +7296,23 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" }, "node_modules/scheduler": { "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" } }, "node_modules/semver": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz", - "integrity": "sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -6876,6 +7325,7 @@ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -6893,6 +7343,7 @@ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -6904,48 +7355,49 @@ } }, "node_modules/sharp": { - "version": "0.33.4", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.4.tgz", - "integrity": "sha512-7i/dt5kGl7qR4gwPRD2biwD2/SvBn3O04J77XKFgL2OnZtQw+AG9wnuS/csmu80nPRHLYE9E41fyEiG8nhH6/Q==", + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { "color": "^4.2.3", "detect-libc": "^2.0.3", - "semver": "^7.6.0" + "semver": "^7.6.3" }, "engines": { - "libvips": ">=8.15.2", "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.33.4", - "@img/sharp-darwin-x64": "0.33.4", - "@img/sharp-libvips-darwin-arm64": "1.0.2", - "@img/sharp-libvips-darwin-x64": "1.0.2", - "@img/sharp-libvips-linux-arm": "1.0.2", - "@img/sharp-libvips-linux-arm64": "1.0.2", - "@img/sharp-libvips-linux-s390x": "1.0.2", - "@img/sharp-libvips-linux-x64": "1.0.2", - "@img/sharp-libvips-linuxmusl-arm64": "1.0.2", - "@img/sharp-libvips-linuxmusl-x64": "1.0.2", - "@img/sharp-linux-arm": "0.33.4", - "@img/sharp-linux-arm64": "0.33.4", - "@img/sharp-linux-s390x": "0.33.4", - "@img/sharp-linux-x64": "0.33.4", - "@img/sharp-linuxmusl-arm64": "0.33.4", - "@img/sharp-linuxmusl-x64": "0.33.4", - "@img/sharp-wasm32": "0.33.4", - "@img/sharp-win32-ia32": "0.33.4", - "@img/sharp-win32-x64": "0.33.4" + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" } }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -6957,6 +7409,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", "engines": { "node": ">=8" } @@ -6966,6 +7419,7 @@ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -6983,6 +7437,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", "engines": { "node": ">=14" }, @@ -6994,6 +7449,7 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", "dependencies": { "is-arrayish": "^0.3.1" } @@ -7003,14 +7459,16 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/socket.io": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.0.tgz", - "integrity": "sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", + "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==", + "license": "MIT", "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", @@ -7028,15 +7486,17 @@ "version": "2.5.5", "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", + "license": "MIT", "dependencies": { "debug": "~4.3.4", "ws": "~8.17.1" } }, "node_modules/socket.io-client": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.0.tgz", - "integrity": "sha512-C0jdhD5yQahMws9alf/yvtsMGTaIDBnZ8Rb5HU56svyq0l5LIrGzIDZZD5pHQlmzxLuU91Gz+VpQMKgCTNYtkw==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.1.tgz", + "integrity": "sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==", + "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.2", @@ -7051,6 +7511,7 @@ "version": "4.2.4", "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1" @@ -7060,18 +7521,20 @@ } }, "node_modules/sonner": { - "version": "1.4.41", - "resolved": "https://registry.npmjs.org/sonner/-/sonner-1.4.41.tgz", - "integrity": "sha512-uG511ggnnsw6gcn/X+YKkWPo5ep9il9wYi3QJxHsYe7yTZ4+cOd1wuodOUmOpFuXL+/RE3R04LczdNCDygTDgQ==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/sonner/-/sonner-1.7.0.tgz", + "integrity": "sha512-W6dH7m5MujEPyug3lpI2l3TC3Pp1+LTgK0Efg+IHDrBbtEjyCmCHHo6yfNBOsf1tFZ6zf+jceWwB38baC8yO9g==", + "license": "MIT", "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", + "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -7088,6 +7551,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -7105,6 +7569,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -7117,12 +7582,14 @@ "node_modules/string-width-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" }, "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -7134,6 +7601,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -7144,11 +7612,27 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/string.prototype.matchall": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -7170,11 +7654,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "node_modules/string.prototype.trim": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -7193,6 +7689,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -7207,6 +7704,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -7223,6 +7721,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -7235,6 +7734,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -7247,6 +7747,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -7256,6 +7757,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -7267,6 +7769,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", + "license": "MIT", "dependencies": { "client-only": "0.0.1" }, @@ -7289,6 +7792,7 @@ "version": "3.35.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", @@ -7306,11 +7810,21 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -7322,6 +7836,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7330,44 +7845,43 @@ } }, "node_modules/tailwind-merge": { - "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.1" - }, + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.5.tgz", + "integrity": "sha512-0LXunzzAZzo0tEPxV3I297ffKZPlKDrjj7NXphC8V5ak9yHC5zRmxnOe2m/Rd/7ivsOMJe3JZ2JVocoDdQTRBA==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/dcastil" } }, "node_modules/tailwindcss": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz", - "integrity": "sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==", + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.15.tgz", + "integrity": "sha512-r4MeXnfBmSOuKUWmXe6h2CcyfzJCEk4F0pptO5jlnYSIViUkVmsawj80N5h2lO3gwcmSb4n3PuN+e+GC1Guylw==", + "license": "MIT", "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", - "chokidar": "^3.5.3", + "chokidar": "^3.6.0", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.3.0", + "fast-glob": "^3.3.2", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "jiti": "^1.21.0", + "jiti": "^1.21.6", "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", + "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", "postcss-import": "^15.1.0", "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" }, "bin": { "tailwind": "lib/cli.js", @@ -7381,6 +7895,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", + "license": "MIT", "peerDependencies": { "tailwindcss": ">=3.0.0 || insiders" } @@ -7390,6 +7905,7 @@ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -7398,12 +7914,14 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", "dependencies": { "any-promise": "^1.0.0" } @@ -7412,6 +7930,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", "dependencies": { "thenify": ">= 3.1.0 < 4" }, @@ -7422,12 +7941,14 @@ "node_modules/tiny-invariant": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -7438,13 +7959,15 @@ "node_modules/toggle-selection": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", - "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" + "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==", + "license": "MIT" }, "node_modules/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.2.tgz", + "integrity": "sha512-ZF5gQIQa/UmzfvxbHZI3JXN0/Jt+vnAfAviNRAMc491laiK6YCLpCW9ft8oaCRFOTxCZtUTE6XB0ZQAe3olntw==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -7455,13 +7978,15 @@ "node_modules/ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "license": "Apache-2.0" }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, + "license": "MIT", "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", @@ -7470,15 +7995,17 @@ } }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -7491,6 +8018,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -7503,6 +8031,7 @@ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -7517,6 +8046,7 @@ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -7532,17 +8062,19 @@ } }, "node_modules/typed-array-byte-offset": { - "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==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz", + "integrity": "sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "is-typed-array": "^1.1.13", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -7552,17 +8084,18 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -7572,10 +8105,11 @@ } }, "node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -7589,6 +8123,7 @@ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -7600,15 +8135,17 @@ } }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "license": "MIT" }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } @@ -7617,6 +8154,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", + "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, @@ -7637,6 +8175,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "license": "MIT", "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" @@ -7657,12 +8196,14 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -7671,6 +8212,7 @@ "version": "36.9.2", "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz", "integrity": "sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==", + "license": "MIT AND ISC", "dependencies": { "@types/d3-array": "^3.0.3", "@types/d3-ease": "^3.0.0", @@ -7692,6 +8234,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -7707,6 +8250,7 @@ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, + "license": "MIT", "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -7719,23 +8263,25 @@ } }, "node_modules/which-builtin-type": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", - "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.0.tgz", + "integrity": "sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA==", "dev": true, + "license": "MIT", "dependencies": { - "function.prototype.name": "^1.1.5", - "has-tostringtag": "^1.0.0", + "call-bind": "^1.0.7", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", + "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", "is-regex": "^1.1.4", "is-weakref": "^1.0.2", "isarray": "^2.0.5", "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -7749,6 +8295,7 @@ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, + "license": "MIT", "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", @@ -7767,6 +8314,7 @@ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -7786,6 +8334,7 @@ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7794,6 +8343,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -7811,6 +8361,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -7826,12 +8377,14 @@ "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" }, "node_modules/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -7842,9 +8395,10 @@ } }, "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -7856,6 +8410,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -7867,6 +8422,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -7881,12 +8437,14 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/ws": { "version": "8.17.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -7904,17 +8462,18 @@ } }, "node_modules/xmlhttprequest-ssl": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.1.tgz", - "integrity": "sha512-ptjR8YSJIXoA3Mbv5po7RtSYHO6mZr8s7i5VGmEk7QY2pQWyT1o0N+W1gKbOyJPUCGXGnuw0wqe8f0L6Y0ny7g==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz", + "integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==", "engines": { "node": ">=0.4.0" } }, "node_modules/yaml": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.2.tgz", - "integrity": "sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", + "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", + "license": "ISC", "bin": { "yaml": "bin.mjs" }, @@ -7927,6 +8486,7 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, diff --git a/package.json b/package.json index 2a82a89..9d3a445 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "leaflet.markercluster": "^1.5.3", "lodash.debounce": "^4.0.8", "lucide-react": "^0.378.0", - "next": "14.2.3", + "next": "^14.2.18", "next-themes": "^0.3.0", "react": "^18", "react-chartjs-2": "^5.2.0", From c1998bbf908da821655bbe2a845b4fc49c80c696 Mon Sep 17 00:00:00 2001 From: Ammar Yousaf Date: Fri, 29 Nov 2024 19:01:50 +0100 Subject: [PATCH 29/74] language bracnh and table issue has been resolved --- app/projects/[city]/trash/page.tsx | 2 +- app/projects/[city]/trash/route/page.tsx | 22 +++++++++++++++---- app/projects/[city]/trash/trashbins/page.tsx | 2 +- components/DataTable.tsx | 18 +++++++-------- public/images/leaflet/bin_grey (2).png | Bin 0 -> 22311 bytes 5 files changed, 29 insertions(+), 15 deletions(-) create mode 100644 public/images/leaflet/bin_grey (2).png diff --git a/app/projects/[city]/trash/page.tsx b/app/projects/[city]/trash/page.tsx index 5f27689..2bb951f 100644 --- a/app/projects/[city]/trash/page.tsx +++ b/app/projects/[city]/trash/page.tsx @@ -16,7 +16,7 @@ interface HistoryDataItem { // Bins currently always assigned to a single collector // Treated like a boolean for now: assigned or not assigned -const COLLECTOR_ID = "66fab28bd6afdad80f1d8dca"; +const COLLECTOR_ID = "673b10d6f0e74b4771527ec9"; export default function Home() { const { t } = useTranslation(); // Translation hook diff --git a/app/projects/[city]/trash/route/page.tsx b/app/projects/[city]/trash/route/page.tsx index 3eca506..c07da55 100644 --- a/app/projects/[city]/trash/route/page.tsx +++ b/app/projects/[city]/trash/route/page.tsx @@ -22,7 +22,8 @@ import {useTranslation} from '@/lib/TranslationContext' // Bins currently always assigned to a single collector // Treated like a boolean for now: assigned or not assigned -const COLLECTOR_ID = "66fab28bd6afdad80f1d8dca"; +const COLLECTOR_ID = "673b10d6f0e74b4771527ec9"; +//673b10d6f0e74b4771527ec9 const headerSortButton = (column: any, displayname: string) => { @@ -328,6 +329,7 @@ const RoutePlanning = () => { {t("menu.unassign_all_bins")} + {/* Only render the tabs when all information was fetched */} {centerCoordinates && initialZoom && fillThresholds && batteryThresholds && startEndCoordinates ? ( @@ -347,12 +349,24 @@ const RoutePlanning = () => { fillThresholds={fillThresholds} batteryThresholds={batteryThresholds} isRoutePlanning={true} + onTrashbinClick={handleTrashbinClick} tripStartEnd={startEndCoordinates} selectedBins={selectedBins} optimizedBins={optimizedBins} - showRoute={showRoute} onTrashbinClick={function (trashbin: Trashbin): void { - throw new Error('Function not implemented.'); - } } /> + showRoute={showRoute} + /> +
+ + +
+
diff --git a/app/projects/[city]/trash/trashbins/page.tsx b/app/projects/[city]/trash/trashbins/page.tsx index 6294d73..e0614be 100644 --- a/app/projects/[city]/trash/trashbins/page.tsx +++ b/app/projects/[city]/trash/trashbins/page.tsx @@ -11,7 +11,7 @@ import { Trashbin } from "@/app/types"; import { io, Socket } from "socket.io-client"; import { useTranslation } from "@/lib/TranslationContext"; // Import translation hook -const COLLECTOR_ID = "66fab28bd6afdad80f1d8dca"; +const COLLECTOR_ID = "673b10d6f0e74b4771527ec9"; const headerSortButton = (column: any, displayName: string) => { return ( diff --git a/components/DataTable.tsx b/components/DataTable.tsx index 17ed2ce..39643d5 100644 --- a/components/DataTable.tsx +++ b/components/DataTable.tsx @@ -112,23 +112,23 @@ export function DataTable({ document.body.removeChild(a); }; - return ( + return (
{showSearchBar && (
table.setGlobalFilter(event.target.value)} className="max-w-sm" /> - + - {t("tooltips.search")} + Search by name, location, or identifier. - {t("tooltips.sort")} + Sort by clicking on the column headers. { showExportButton && ( )}
@@ -212,7 +212,7 @@ export function DataTable({ colSpan={columns.length} className="h-24 text-center" > - {t("menu.loading")} + Loading... )} @@ -226,7 +226,7 @@ export function DataTable({ onClick={() => table.previousPage()} disabled={!table.getCanPreviousPage()} > - {t("menu.Previous")} + Previous
diff --git a/public/images/leaflet/bin_grey (2).png b/public/images/leaflet/bin_grey (2).png new file mode 100644 index 0000000000000000000000000000000000000000..3f0fa27cffa804f59783bfae8e92ca91c42499bb GIT binary patch literal 22311 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�Zk4qIICjk*{mwMp?5w3W%|QALjk=^o>;v5 z%KWj%6gXYSZ3LS7e;eHik84@9jXPh~J5z|Fce$7!EeWmd6Q<~3b<2??*PVOK-R5x- zB==^-jhgP*>^~8?8D7ctuAm|3&AEQr^6)}Ii-G$s)rhP59&wVvy>Vi( zO6Z`={-2tzDD&hQNuQIU^_`~nU)o^byiGVZBk+r7LkR9zj5mWP!9W@OkY2$oicH;l zm2K?BH!J#oxp5z}Au2u9xt_);lTGDbe&%Hs%E^-JSP4x&?a~BU!>J5med%m?rsneG z@ieMkIZJ~NLxjh`z5Z}FAE#AOY_w7aMTP~IO#0;H9y~qWSn;NV;<%;qu{s}SC%k;R zj%)qVZvMG4RMGlHOF!HY`mkC8rE6 z5?Nhl9(2PpoY~_=p_skZx8GfwtLSM)!K0VyG8ERQE3VvuzioX9Yz^q~CsRiC-hDQF z_kIyJ4XL>K%Ts_)Yd0?aKeXZ(nfHtqe8vSLe7$c6pLPE9A6hXi+3Blb-SK`iMdUs3 zW-4cmiN4_?DUgpFTsNOrD5JaU=<_kka1+8^oq!^uKODN@Z*^WnjyQ>Mc!c&DTl)1kRM;M(25sG~K@oIuz!z@fV=v%Z=uaWGR?0NyWG! zReM45+WEQ^F9L8wAY*6Y-bv5e^K^L8Hk`mFFXVO%iu?1$1wIS;`uiLu2bAgLjC!gjj)-L$(sbgtU3X`+6@B z6lCg=hf(FkOlu!NiUnRZLk8y4?fdre`MU?}*r5&9)swvt9|>Ng@xS(uT^o&cq6g>6 zR%^y)uPZt}AsIBO;En-lB+S1!+b>8C`!z0#{X`gFR+gJZ?~)nMqM3Yt)m_Fa&x>EH zInsZRn50G~2G_Xm>b2jY*_t=9S-LWL>s+b2=oH^x1{bz(-~`5L|QM3D4)j z{_Kf({*edkt^=6J&eHYH-^4q+k(ZcBIQ=IO?{RSso`onlOV^u>nMN828Dw1^8o>p{ zl!F(6yBV@pYfb&R&2 DL3#NO)WSriH|5kj3O@HMJ~`h_MY1pH!I$3cX||;47m5D zAw2mvfs?2~M?^fPklIB5>;5HRXp?*|Jt8hDAQ#Th=7!1=Olo+n^%O_}sG_b5Pfs=<3Oi3Cpd-Y%oOLvO?mKThC!vpbz#1)R)iHLl?hA?W?tlRmL#=S^@*_q zuVlcm=Ed;SXQD(>*GEB7x%r`rLhvKlyEw@-&5JCaqsQ9zyVsXq>m0u6%J5N5xef#`ikbaRGQ#scNuKYk>IqrKn@I@d4vSLr%OGu z0eAYO$2-w{`xf;Pd4)g~7B~(Tr=G3Lq0i#Wdp&#OZ(^1@L0+{a%n4iqxQvDfFE9~r zI$a|ml>)#;IkV9e)IKe%;eoa;@li60gUeo$>5{)TA7Iqd1fKpzU$YWy`b`Bl-I5!& zK7QIOhtBByW^zMNm$+735@BTNP@o#p?vzuz?P^jO1Dd#M$F&>%vlUPaXLz zC07N#UXjG(L2a}qwP@(_4~FR){<7MRE8Q+0ZpBE!e9Q9J{$Vj(cAqAEC_j)FTqZse z^kGzemc=VC%I0C>`|jc5V|{q~#V_gTxNY7%aR23!0XRE05g%z}9^K#EDX@;A59d`XRc1uSvDHQ9Eu-xX6O(32~XotPPNIS-8ba|=HFkq z3_o%1T^&AMwBX6pHGD#ab;66Wy<{YAE)O(U4x9j|4&VezdN@tKoIpP86^T96xWH5+ z6c_o8XIpz&uoJ;lp({?A&_IB5!N%~{94<7>@)r_gJVZqD6GBt`k_Z)D3 z&%}rmO+?;J`F~q?O|ap2<8OYp&#)6rgib>wA!0X2i7oBHeK@QIxHkHq9i8v2VsOlW zD%M8!HYC}>JNNX6@$l%s;r=eb49fvqiTy@w*IXiWX=NnbJR0dTmYS*T!m?~wKDFv~ zGu5+Q(O<;I{{-U30}j`QgL8|jetLM8?O{)1ZdtE2FW(IPm`uImH`m==k z%X1kMBQ3qxaB(t@yUo~n+tg>XH%MsV2fsj9Oh|l)XxHi;1C1imT19gj3jT-m3AXn^ zu)I%ow6YJnRU9k3UD7hfFkgQ?nC%AXlVn8TFWmqz*xsy#^a~+V$<|%~SIM^H_~c{y z^E#7(2;6b;v#r2}=v4qk$)ar^JsWg-jtr81(KB{+{)Tcta~z^W;{#M$CZF97h;tCM zf7WzaU(%c!FPJfX6EpUwau4;s=v+1^B<)(%58>O6%ox85x1z-rO8v>S`o*ibYYt1H z+cCp@IV+js)M5>_8w>kuaR@K6zLXQm630JVI^`T7UA69XnbFIe+W#sX^V%2Qas7Nt z(%^T}XNRZwm3O38R;+y-)`W9wnZ%wGt0mJe-;>eiD*K~E0bzo8D&+07@yLsQP$ldh zOUGOCNG~8F7g^8LVA`}@jj~8lOC2w&nU3{ncG{e4s5(vZ{@GhKcbOThEvpy)rT6KC z=j*2u-w`(3^e?8ZDkt;z^hwGx>I`O~(|Bw6PhursU$|^Pp_s8G{IhDITk88YpPG^iFgC7c#XF4f;urB%;qXA#=X zl>PN{FiFP2H9Tn@%x8BOiM%(y04@*_i|v1v-I

i^fi7S5e#ytyxOYxO6-w9-BFn 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 literal 0 HcmV?d00001 From 5ce9dd25b1cf965a807dd7796554297a6bd4c503 Mon Sep 17 00:00:00 2001 From: Ammar Yousaf Date: Mon, 2 Dec 2024 22:43:40 +0100 Subject: [PATCH 30/74] fixing routes --- app/projects/[city]/trash/route/page.tsx | 2 + app/projects/[city]/trash/trashbins/page.tsx | 177 +++++++++---------- components/Map.tsx | 78 +++++--- package.json | 7 +- public/images/leaflet/bin_grey (2).png | Bin 22311 -> 0 bytes public/images/leaflet/bin_grey_b.png | Bin 5021 -> 22311 bytes 6 files changed, 143 insertions(+), 121 deletions(-) delete mode 100644 public/images/leaflet/bin_grey (2).png diff --git a/app/projects/[city]/trash/route/page.tsx b/app/projects/[city]/trash/route/page.tsx index c07da55..55e8b15 100644 --- a/app/projects/[city]/trash/route/page.tsx +++ b/app/projects/[city]/trash/route/page.tsx @@ -142,6 +142,7 @@ const RoutePlanning = () => { // Add trashbin if not already selected, otherwise remove it const handleTrashbinClick = useCallback((trashbin: Trashbin) => { + console.log("trashbin click is working") setSelectedBins((prevSelected) => { if (prevSelected.some((bin) => bin.identifier === trashbin.identifier)) return prevSelected.filter((bin) => bin.identifier !== trashbin.identifier); else return [...prevSelected, trashbin]; @@ -188,6 +189,7 @@ const RoutePlanning = () => { const handleShowRoute = async () => { // To show the route, we need to show the map tab setActiveTab('map'); + console.log("the show route button is working") // Fetch optimized route const orderedBins = await fetchOptimizedRoute(); setOptimizedBins(orderedBins); diff --git a/app/projects/[city]/trash/trashbins/page.tsx b/app/projects/[city]/trash/trashbins/page.tsx index e0614be..7146891 100644 --- a/app/projects/[city]/trash/trashbins/page.tsx +++ b/app/projects/[city]/trash/trashbins/page.tsx @@ -2,61 +2,108 @@ import React, { useCallback, useState, useEffect } from "react"; import { useRouter } from "next/navigation"; -import api from "@/lib/axios-api"; +import api from '@/lib/axios-api' import PageTitle from "@/components/PageTitle"; import { DataTable } from "@/components/DataTable"; import { ColumnDef } from "@tanstack/react-table"; import { Button } from "@/components/ui/button"; -import { Trashbin } from "@/app/types"; -import { io, Socket } from "socket.io-client"; -import { useTranslation } from "@/lib/TranslationContext"; // Import translation hook +import { Trashbin } from '@/app/types'; +import { io, Socket } from 'socket.io-client'; +// Bins currently always assigned to a single collector +// Treated like a boolean for now: assigned or not assigned const COLLECTOR_ID = "673b10d6f0e74b4771527ec9"; -const headerSortButton = (column: any, displayName: string) => { +const headerSortButton = (column: any, displayname: string) => { return ( ); }; +const columns: ColumnDef[] = [ + { + accessorKey: "identifier", + header: ({ column }) => { + return headerSortButton(column, "Identifier"); + }, + }, + { + accessorKey: "name", + header: ({ column }) => { + return headerSortButton(column, "Name"); + }, + }, + { + accessorKey: "fillLevel", + header: ({ column }) => { + return headerSortButton(column, "Fill Level"); + }, + }, + { + accessorKey: "fillLevelChange", + header: ({ column }) => { + return headerSortButton(column, "Fill Level Change"); + }, + }, + { + accessorKey: "location", + header: ({ column }) => { + return headerSortButton(column, "Location"); + }, + }, + { + accessorKey: "lastEmptied", + header: ({ column }) => { + return headerSortButton(column, "Last Emptied"); + }, + }, + { + accessorKey: "batteryLevel", + header: ({ column }) => { + return headerSortButton(column, "Battery Level"); + }, + }, + { + accessorKey: "signalStrength", + header: ({ column }) => { + return headerSortButton(column, "Signal Strength"); + }, + }, + { accessorKey: "assigned", + header: ({ column }) => { + return headerSortButton(column, "Assigned"); + }, + }, +]; + export default function TrashbinsOverview() { - const { t } = useTranslation(); // Translation hook const [trashbinData, setTrashbinData] = useState([]); const router = useRouter(); const [socket, setSocket] = useState(null); - const handleClick = useCallback( - (trashbin: Trashbin) => { - const city = localStorage.getItem("cityName"); - const type = localStorage.getItem("projectType"); - router.push(`/projects/${city}/${type}/trashbins/${trashbin.identifier}`); - }, - [router] - ); + const handleClick = useCallback((trashbin: Trashbin) => { + const city = localStorage.getItem("cityName"); + const type = localStorage.getItem("projectType"); + router.push(`/projects/${city}/${type}/trashbins/${trashbin.identifier}`); + }, [router]); useEffect(() => { if (!socket) { const newSocket = io(`${process.env.NEXT_PUBLIC_BACKEND_URL}`); - newSocket.on("newData", (data) => { - if (data.message.fill_level) { - let adjustedFillLevel = - data.message.fill_level <= 1 - ? data.message.fill_level * 100 - : data.message.fill_level; - setTrashbinData((trashbinData) => { - if (trashbinData) { + newSocket.on('newData', (data) => { + if(data.message.fill_level) { + let adjustedFillLevel = (data.message.fill_level<=1) ? data.message.fill_level*100 : data.message.fill_level; + setTrashbinData(trashbinData => { + if(trashbinData) { let trashbinDataCopy = [...trashbinData]; - trashbinDataCopy = trashbinDataCopy.map((tData) => { - if ( - tData.sensors && - tData.sensors.includes(data.message.sensor_id) - ) { + trashbinDataCopy = trashbinDataCopy.map(tData => { + if (tData.sensors && tData.sensors.includes(data.message.sensor_id)) { return { ...tData, fillLevel: adjustedFillLevel }; } return tData; @@ -66,19 +113,13 @@ export default function TrashbinsOverview() { return trashbinData; }); } - if (data.message.battery_level) { - let adjustedBatteryLevel = - data.message.battery_level <= 1 - ? data.message.battery_level * 100 - : data.message.battery_level; - setTrashbinData((trashbinData) => { - if (trashbinData) { + if(data.message.battery_level) { + let adjustedBatteryLevel = (data.message.battery_level<=1) ? data.message.battery_level*100 : data.message.battery_level; + setTrashbinData(trashbinData => { + if(trashbinData) { let trashbinDataCopy = [...trashbinData]; - trashbinDataCopy = trashbinDataCopy.map((tData) => { - if ( - tData.sensors && - tData.sensors.includes(data.message.sensor_id) - ) { + trashbinDataCopy = trashbinDataCopy.map(tData => { + if (tData.sensors && tData.sensors.includes(data.message.sensor_id)) { return { ...tData, batteryLevel: adjustedBatteryLevel }; } return tData; @@ -88,7 +129,8 @@ export default function TrashbinsOverview() { return trashbinData; }); } - console.log("Received new data:", data); + console.log('Received new data:', data); + // Update your frontend UI with the new data }); setSocket(newSocket); @@ -115,9 +157,9 @@ export default function TrashbinsOverview() { }, } ); - var transformedTrashbinData: Trashbin[] = - allTrashbinsResponse.data.trashbins; + var transformedTrashbinData: Trashbin[] = allTrashbinsResponse.data.trashbins; + // Get the currently assigned bins const assignedTrashbinsResponse = await api.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trash-collector/${COLLECTOR_ID}/trashbins`, { @@ -126,10 +168,9 @@ export default function TrashbinsOverview() { }, } ); - const assignedTrashbins = assignedTrashbinsResponse.data.assignedTrashbins.map( - (item: Trashbin) => item._id - ); + const assignedTrashbins = assignedTrashbinsResponse.data.assignedTrashbins.map((item: Trashbin) => item._id); + // Set the assigned property for each trashbin to true, if its id is in the assignedTrashbins array transformedTrashbinData = transformedTrashbinData.map((item: Trashbin) => { return { ...item, @@ -145,51 +186,9 @@ export default function TrashbinsOverview() { fetchData(); }, []); - const columns: ColumnDef[] = [ - { - accessorKey: "identifier", - header: ({ column }) => headerSortButton(column, t("menu.identifier")), - }, - { - accessorKey: "name", - header: ({ column }) => headerSortButton(column, t("menu.name")), - }, - { - accessorKey: "fillLevel", - header: ({ column }) => headerSortButton(column, t("menu.fill_level")), - }, - { - accessorKey: "fillLevelChange", - header: ({ column }) => - headerSortButton(column, t("menu.fill_level_change")), - }, - { - accessorKey: "location", - header: ({ column }) => headerSortButton(column, t("menu.location")), - }, - { - accessorKey: "lastEmptied", - header: ({ column }) => headerSortButton(column, t("menu.last_emptied")), - }, - { - accessorKey: "batteryLevel", - header: ({ column }) => - headerSortButton(column, t("menu.battery_level")), - }, - { - accessorKey: "signalStrength", - header: ({ column }) => - headerSortButton(column, t("menu.signal_strength")), - }, - { - accessorKey: "assigned", - header: ({ column }) => headerSortButton(column, t("menu.assigned")), - }, - ]; - return (

- +
void | undefined, markersRef: any -) => { +) => { const { greenBin, greenBinSelected, @@ -141,7 +143,11 @@ const addMarkersToMap = async ( greyBin, greyBinSelected, } = createBinIcons(L); - + const defaultIcon = L.icon({ + iconUrl: "/images/leaflet/bin_grey_b.png", // Replace with your icon path + iconSize: [25, 41], // Adjust the size + iconAnchor: [12, 41], // Anchor point + }); // const token = process.env.NEXT_PUBLIC_API_TOKEN; const token = localStorage.getItem("authToken"); const oneWeekAgo = new Date(); @@ -193,10 +199,6 @@ const addMarkersToMap = async ( return true; }); - if (markersRef.current) { - markersRef.current.clearLayers(); // Clear existing markers - } - const addedMarkers = new Set(); for (const trashbin of filteredTrashbinData) { const coordinateKey = `${trashbin.coordinates[0].toFixed(6)},${trashbin.coordinates[1].toFixed(6)}`; @@ -230,7 +232,10 @@ const addMarkersToMap = async ( } const getIcon = () => { if (isDataMissing || allSensorsHaveOldData) { - return greyBinSelected; // Grey if missing data or all sensors have old data + if (selectedBins?.some((bin) => bin.identifier === trashbin.identifier)) { + return greyBinSelected; // Grey Bin Selected if selected and data is missing or old + } + return greyBin; // Grey if missing data or all sensors have old data } if (selectedBins?.some((bin) => bin.identifier === trashbin.identifier)) { return trashbin.fillLevel < fillThresholds[0] @@ -245,7 +250,7 @@ const addMarkersToMap = async ( ? yellowBin : redBin; }; - + const marker = L.marker( [trashbin.coordinates[0] ?? 0, trashbin.coordinates[1] ?? 0], { @@ -266,7 +271,10 @@ const addMarkersToMap = async ( marker.bindPopup(container); marker.on("mouseover", () => marker.openPopup()); - marker.on("click", () => onTrashbinClick(trashbin)); + marker.on("click", () => {onTrashbinClick(trashbin) + marker.setIcon (defaultIcon) + console.log(getIcon(),"get",defaultIcon,"defaault") + }); marker.on("popupopen", (e: any) => { L.DomEvent.on(e.popup._contentNode, "click", () => { onTrashbinClick(trashbin); @@ -304,31 +312,49 @@ const handleRoutingControl = (L: any, showRoute: boolean = false, optimizedBins: } }; -const Map = ({ trashbinData, centerCoordinates, initialZoom = 20, fillThresholds, batteryThresholds, isRoutePlanning, onTrashbinClick, tripStartEnd, selectedBins, optimizedBins, showRoute }: MapProps) => { - const mapRef = useRef(null); +const Map = ({ + trashbinData, + centerCoordinates, + initialZoom = 20, + fillThresholds, + batteryThresholds, + isRoutePlanning, + onTrashbinClick, + tripStartEnd, + selectedBins, + optimizedBins, + showRoute, +}: MapProps) => { + const mapRef = useRef(null); const markersRef = useRef(null); const routingControlRef = useRef(null); - //const markersAddedRef = useRef(false); // Track whether markers have been added + + // Map Initialization useEffect(() => { - if (typeof window !== 'undefined'&& mapRef.current== null) { - // Load the leaflet library and the marker cluster plugin - const L = require('leaflet'); - require('leaflet.markercluster'); - require('leaflet-routing-machine'); - + if (typeof window !== "undefined" && mapRef.current == null) { + const L = require("leaflet"); + require("leaflet.markercluster"); + require("leaflet-routing-machine"); initializeMap(L, centerCoordinates, initialZoom, mapRef, markersRef); + addMarkersToMap(L,trashbinData,fillThresholds,batteryThresholds,selectedBins,isRoutePlanning,onTrashbinClick,markersRef); - if (mapRef.current && markersRef.current) { - markersRef.current.clearLayers(); - addMarkersToMap(L, trashbinData, fillThresholds, batteryThresholds, selectedBins, isRoutePlanning, onTrashbinClick, markersRef); - handleRoutingControl(L, showRoute, optimizedBins, tripStartEnd, mapRef, routingControlRef); - } } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); + + }, [showRoute, optimizedBins, tripStartEnd,centerCoordinates, initialZoom, trashbinData,fillThresholds, batteryThresholds,selectedBins,isRoutePlanning,onTrashbinClick,markersRef]); + // Route Handling + useEffect(() => { + if (typeof window !== "undefined" && mapRef.current) { + const L = require("leaflet"); + require("leaflet.markercluster"); + require("leaflet-routing-machine"); + console.log("routeControl Working") + handleRoutingControl(L,showRoute,optimizedBins,tripStartEnd,mapRef,routingControlRef); + } + }, [showRoute, optimizedBins, tripStartEnd,centerCoordinates, initialZoom, trashbinData,fillThresholds, batteryThresholds,selectedBins,isRoutePlanning,onTrashbinClick,markersRef]); return
; }; export default Map; + diff --git a/package.json b/package.json index 2e5914e..2a82a89 100644 --- a/package.json +++ b/package.json @@ -29,11 +29,9 @@ "chartjs-chart-matrix": "^2.0.1", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", - "cors": "^2.8.5", "d3": "^7.9.0", "d3-tip": "^0.9.1", "export-to-csv": "^1.3.0", - "i18next": "^23.16.5", "json-2-csv": "^5.5.1", "jsonwebtoken": "^9.0.2", "leaflet": "^1.9.4", @@ -41,14 +39,12 @@ "leaflet.markercluster": "^1.5.3", "lodash.debounce": "^4.0.8", "lucide-react": "^0.378.0", - "next": "^14.2.18", - "next-i18next": "^15.3.1", + "next": "14.2.3", "next-themes": "^0.3.0", "react": "^18", "react-chartjs-2": "^5.2.0", "react-copy-to-clipboard": "^5.1.0", "react-dom": "^18", - "react-i18next": "^15.1.1", "react-router-dom": "^6.24.0", "recharts": "^2.12.6", "resize-observer-polyfill": "^1.5.1", @@ -71,7 +67,6 @@ "@types/react": "^18.3.1", "@types/react-copy-to-clipboard": "^5.0.7", "@types/react-dom": "^18", - "@types/react-i18next": "^7.8.3", "eslint": "^8", "eslint-config-next": "14.2.3", "postcss": "^8", diff --git a/public/images/leaflet/bin_grey (2).png b/public/images/leaflet/bin_grey (2).png deleted file mode 100644 index 3f0fa27cffa804f59783bfae8e92ca91c42499bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22311 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�Zk4qIICjk*{mwMp?5w3W%|QALjk=^o>;v5 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

i^fi7S5e#ytyxOYxO6-w9-BFn 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 diff --git a/public/images/leaflet/bin_grey_b.png b/public/images/leaflet/bin_grey_b.png index 4820eb42bf0f1dc2e70d0739e4132a91f7f04e6c..3f0fa27cffa804f59783bfae8e92ca91c42499bb 100644 GIT binary patch literal 22311 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�Zk4qIICjk*{mwMp?5w3W%|QALjk=^o>;v5 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

i^fi7S5e#ytyxOYxO6-w9-BFn z>!z<~ybl$SNmStGdm8q|WD<6}Qa|8HiR!NvRJiy!U+U;0GCx{&6T%ES(Iq?%ybmte8cLaykJP$iyX$v3*+< z!8wWJVS~#(_=Z~E&m8a<5CG;Am1o&D9U9(}uT|-uqiGDCerp0*Tc9*rHa2*UddXZJ zlO~G5P2w{^{sa7KUuY{aGvE^?3}_An3@M}Q2=)o==*SAy_bTf@tB>p4V8{E1_`wvV zAQa(7brbkEW)dY}wOr;dD0R-q=;NOEv|tdE6TPAYRlyC1kR7q0$Zfo(JxM$GM%2(` zRfSjUImD8Btx)+2APd{QdL`EYST|oB6iF(HBH4)2os3iQpmo3JmtO^!|2I*DEI-x7d}uJK(kKzt!Q7iS7FGOdUw*Pcn*Hl35w$x- z9CxB3f(7W)GrS!jH?`HiZDy-_*q6mO?dhkL z;Dn1?Lpo3}=LX`Qw?jeUm@a-gdCa|&oa;i#+?a$>uF#;;6B_i8BLdhjbKtAK3Y#v% zVzE`Vxiz<9tFPhat1K4vm>Ck!i^dGz!X~@EL$;X+qb2*Znd9J^)!25dCKzWf*H)!+ z22g!~p3<7dWl5#~Q^UE(GyVN>+-AwXNTw*ap-?}fZ(*(>w{lzYMH*U#6&uT~u*@o# z3MG{?mqk&@rPQ#6<@%LtE-`aikz|J4?|x_B-}m?b9_MlPIPcGSU(W0Knmt$aBmWW^ z5R?rI@hnI4v>X*C9z1IWhmTT4_k(5=7g;WrG02g3PuCiMJo)TX!P2m+U(+IetiGJf`+(cU`$Wwl2I3M; z@NT)y;Z=ZBYMq+JmQkVix4>X|b;@`YctV-p`*2HjW*a3AzG@cZNV)xaOCUQANrrJ8 zr?jz!dEy9oq|1>)1D+Gj0*HHB2=YP32v;>wjR!>?nBTT3^TuV%M%w1Hsy)7CGpcC# z)~VgOqTP>KFWgPrcslwQRu;&$Nf(ET2}fK+)GdOL1IJ?slhqgO=tH^yo$`v4_%J6X zAk#={#4j(`_HOkLRxyyh(?4&<7fwTi8VMcGBN6k-rKUp5#wCAcZU>G8ZERP(qe_R6 z1#&yS?|9JG6qxW5Nd#Il5JW7cAW z<2~ETPC(8YUHtD<+5^5zFMh(+3m;#GNUjcK*>FMxb9y1+`QLg zOUa=gN!*VYKtN7~wHa<19g7}L7AkgqTZ%4SCLnFfFDyDnJkE@N3P={{Y`I4=- zz6Wa`^j`PSr!zqL9Mh9CVe-vmVi?^!Q0b<}+*`i=jM8mj_2C~XF)WFPlbjE~>wgL~ z80c37X=C+)$itPpZO?uk_v4D5u26ygK)h_y!^=m4k6&b=EBIGWE(#t=H|eKnhud-V z*)4w!M{;Q@lOIC(V{5LGZb}K}a9EMT#veLnVb*Zd-Tn2gtVI?scG3Cb2x5M+=|ir& zErf|fxn{;fns@kRdj+6+i;ZX#9x%K8#QG09GoO!!?=LT_S4x~z>R;Y>s?_JyjjY%q zcYJihI&M+<+dLCXOl5|M9gR`bDsMuua01V>=9#h*=TU*44Eo8~TUh6C(lhcfy*BN;CVL zQ``@^@09kGMZ`Yu^8Q+9__O|ndIm23ytG9TbhTW;{ipVzVc_yDRsOt*!Z0N9}L3_`_gy~O@hx>Lc_#Lb?_IRYB zdS94Q+E(!ZZ5C~~-M)fazGr#wOvKb<-@}5me!(XeRpP6pKB<4D?Nw($R=vS`$MwwF zlWhs+gYb-qwnq-3=oZ4sesryGc^I040&wr3Lyz;f*mqe0Q*7Q6!7w*)CKvD z$P#zag!Dxm&by*|<`os}9xM*;!?V2qg#Wak|uM z#PGuIUdWP`du&`;Q29jGIs&30>KVOI`q5}nPJ?v0_ICV@lR=9%9TjBX@;_R(RRf1L zAC(G8{qs{LGbg?(HBr;LE)1=t^#9GVkv3+lOro$ zAOWzC+N*E3HOb!T6de*wW;aMa-vN-G4JF0qTg6;5H*!y=al3VX+qs0*@68gMv(;Wp zn9bYfGSHC*Z&ZK_AUE=kT#TEOuAP=d(IfTkTl_JKATYuv=O);}^lO|`()0u zyJv-KUmRE*EdsTAhZYnG$%j;nqpHj@ArCuKr2POv0byKxYQ{AeBV;2Wazr9RT(?nR4kMX!4oR%Zi1i4XRPZV zFPr9pqzB{msZGkst8%p=81!b^%mSk-l}XKaHch3a-QiH%+~Bx6j{ZBjeM8S3ll5=0 zyjW7KYI#I)P2x#&6z>U5?kwTM3>Tt)m5YE#&*oBWJ%jD4%E432l#{mSqR$|f zzj`ueuJJuX{B+fAb33SH+*U~y$~Q_cK!6}yA~Ic`@ZxI%F`r)xP8vYFEFyR60yAZS z0s50(wbUOCZzBvMrkFp%3x=#{Qn1OB>wj^JlM>u4#sq|-{AU}vRljTgU2XkN^pq9% zjuokrAGor(W?O!fr}e*#V4etJ=NY(xLf^r16}I0$u>NmRlG0RJv54XYCXsq}(QLvwHNMxorWD+r1SID$Fa0r^6BC@{@KN1S!N26AxK z{uu?L3i0HOTfl?z1oJEqff1b#3%|nfB(^ik_}<`-o4@{JrP^T*?TVpVs+8^J(VMAv zL`MPKkY((=7awm<#xBh~T1VvUhe{~VxDnHzWk&j;M~n58y<^V^?$mntCG67T!$34| z4MM#XP7<~?ue8kCF#z!tA3(g>SGMIYMR5juv;XwQsb2+~|B){;sn{~_<@C^sbrHHq zSf7{~Ep<0Zwk(Pg1pbv-|4~L#?ZS=T2T_o4Wru0G`n*#U_FQSKE-_+;-bBZ_N>S`U zplH??w{es^_K|i6ZLh(L%_G#LhzYERTx9muxZ}~nhrg%{kJ{A=BI=lsf+V@>R5wAx zh~r1UJF@w?G7?cT&0T_!VGea>uW?WAe7*`E!G@3aDQwA#CMT_{V9`@le_O`b{;Hf4 zj&;aCvg?Y4@ePbSz_14FF*I`2(-=0kJz5+uT@*5X&{>dmnqo2yH#NBJtnG$<58+Y= zK%-Ns+dc6T7;}#4KWlqjBOxNA^Ah>AP=j){#@CPjyP40r6&d&HWjX*qhHh!0G;HMC z18xMh=TaJ!5AQDNYQYzlX9g}>CF%n--W!BnREoOc(+8}9Pf1Z;*pZpW zkD#FXqPSL_;pbfWT?LAk zt4rAE`VEV!>7L7e5}!%6mXByCl8~;+y7lq%C`wuHTmf%)<<)&P-p@DzA=H#(n7YO& z*;oY`iUK&wkeCC~A5^f?lV8Q_2Vv0!tT`d4z*adte7W}9RigB7var6fmo-cd4gT1& zin5RtY!zB?>v+(GATv#&OzR>dl)kto@Ea8hk{v1l{uTmtzo}!!K+!{%3Cr$N-abuX z&A1yurMjJyXg8rnq2yRRAb>5jj0Bl}}|e6(Dd-(aD0mjw)a1>*2CBuqa4q7{`d-=1>K+$R%^eW%t>)!N4nYr!_EB`zXVjNwhQ{XN>n*97aPONQ6Rqz&{T_~1G*RdlGH}86z2QneA2{C%owRncDmsq6@n4OO^|}B6 literal 5021 zcmd5=do*9Z?~STqf5#Dw1O4){IfPbU|_* z3^~ZS&xulITrwEfab(QbxW0S5>wVX9IBUJ@{jK$`-yieOp8b9Hv-k74JbOQ|M4O6> zZWV>WVB)7v9SP+afe(8yX!DOzSI%a&%|Jis~(Bt#dL3NWoF1N=D9(}e{ zetc|e-nEbSc4p)~(MdXH?w%sFAFbo$^!)SJ&H`;hQ@^20+fMg5qnvOfZu85D zFTLxs2<`Va9h80%N^KL}R~G8(D2KP#UpP8iBU*}sy64JRI85%6BCF*#n}K2lO|S=^ z6+PcA4YTx^Xh6YWTTsSAp)iCJOh6I~6E>p3Rbc;L2SV?7ON3sy)%VIeG8c1jJ0ynD z%XdC{3F2^y7(bI_3uTW#!L2KJrmYrSoOpZDk}a=j#EPx{^zpOO@NeC}_HE3S!Omzf zcb(D9N%nSO%Zs&f$gLUTdnY7)Plj*w^lzYBy%qjeY!R9?Ldoj%`1pA6`SVT~L;jH&(_WQ($?TfL%6*t=(}a*#ZsF(wCEuoR zWHn2n#i!`cB1jlQWe6r2N?K&k>B&}ynYWQ=9v6(J>$;8Sdb%}IRFTG>?;t|(uag5>v=$J=pr78+~qi~mE zjG%a6vA0r-Bhpq4z69w6Vj6 zrP_opBynCPw27z%wVZn2f}p^27CP&^Enu#0A-+72ov`Ge3)-OAFl?PfJSG&7f`$&jB0jjHVpcr(~BoWZb+ z!vo>KdON@7)Bz&wTuq@(@DT`c!iZ+ppXj9wdC0rIX4Wl{r_iT_10T#!pHFQ!pcs+FQh!XiwOs;shiaH#)qulvb;wR$AAB0^nFUeH=5C zzGFzWoldEljt`6IEZ}ZqCB?2xgAW%@?8rr(L=f^EtM90{1xawFEF`q=#T5Z`BL?QJ z(BT-X)`by48!v&aPIFJy{xw?>kAwBM=eh28@A+{I*-zWiCS^*9)vWllmk~EIva}e$ z{1P4W(r^p(0B zpXGEy&M7sQ`B_|=G+Zk0VI^3d&Ll2K)T*ZHKPSH!xzX7yky#NPGY08z^Xtou$_<%* z(X6~){-4^bd(G1m>Wj9ldtSxi$n?m6fg~EXQt0eJgY1QAjfok>9$bTJZHFeRP#)yi zl1hms@@k<7Xlw9HO08-LuPmClsU^lUP{o}-pEWUze^{AjtzI1+a9Tav?pDw++BKiu zt@Ac96K@5*CcA47X1j4-mMVBOS)X)u%Jgh7X+e?3z+@I=bcWu*O8x_+L< zMQ{I0Q|%U}1%3;WzqtE#IS?HhBG?#xEL9!OfmunABdzhWFEr%KVad;eKXI%m`=R#y}*OAfsWM$l_ zQfs@HNWm`SOz8;0x$7Zg-C;=0vb;oPe%0N19G% zeq+dlI^L=%*#jZ2?Ofp$fv@6Oq7E>fr=*0hpj7E4D#DiAy50=x=i>3J(VDFV!g2zIjGi>En*~DTVdm4;kfB9WF#-jb@T(A<&CPc;ttAiV(Fh2NR2uI zzIkrV0<1V`nbpb*8#MI42}JeEt`&(cTN=E4cBGN422<@I_tU`os>TweT$~qJzkV7S zgD0-eSm<3g>j1Q0@I-nsE^q2&{c5ial$l+pdOPq_zedHEHChHlX0UAAtU1 zkZ1(FZa>Z;KpjGmb_x=-{$g~f#BR2#$8W-7jmzs>nuc$*JgddgoQA7NuG}}jXOnQ{ zhG&B;H9VHhu04q)q*KrlCR$EOt6F5pWNEMUNtd>^U5k{z?VAJ(AENMywVOYQ*Uo=9 zf*MAR*xd$BptD9FBQy=@?)8hQW96aT(FRnQ;2IJh8u_h=ch(_U{N&#(GnPSr3Vf*` z(U$d=3Sz7wn;#D4+7JDB^dUuTe7tpeN~q|!ayG`3b4PkLRD0PKhL8a1JXTYGAB5O? zl6HrlU#15R`*`_#oGsYNmS8BfbaS8Q^ZD)unb4kKY*mgA3?37kkx38tMP_` z(*w8pNLL$nev}RIFRw~)Q7T|~`2e4*=oC>CNeFFk(zJ^N47WmXP@Tbtp&gTINl1Mf* zu14j}psT_;5bvHMOLoU8)WD2uneJX2*q^g@IVEs<$>slS_c(xHrl?^K>khdTc0I0qjYaL1Cv^?38%cF^Jw z)4-~YiAFLBZ=L^ROkqHsfp2NGCUJ@seopaisg8P9O}RU{XuIZL4UHWwtwngvi_?a zms@WwMu|kP4=laK0`*#1hi9~=Q@)?c{qG9AeCyzq^SUl$HGQRTT0OaMpYHej-csQG zZMtHUjd3{UvU3lV)HkA)O2D1C0NMfkY)HOAI{wr4d)t!um$#;7=lophXENJR%hc9t82zHZ7xWSVd6+8^10=>emCQyh zeV}{~Yhh(|8dVUBt zxJ{MflsaTp{{}ydaRT5x%-6dkC>O~83BZ{eS}$;F>Pk)IMA9kOt$`8|#@K#GYydzR zgM}OHA^GqjjBdxI-R0GyflglPtpc(4pI+m?&eGxU0JmpL1HQxoASRLGBDfoY??3$1 z>j;|gzgoGQZL6~fSy;7$PWkF(=e0(_)9UHA6aIj+q!ZddAL=I>ZIHxTomL;G>)~+% zmM?yvG?T_+iYLju#rh5S_F36{#Y%ALJ*F~Le)-l_2e!xu;pTB~>&=)QU|{-(Td=#3 zYQFcdgkteaJm9s7B(}TXR8JE)<(3S$;&~gkNP(m=%e)9W^1Z{)QaY&Bu-|_`JiNtr zekOz8(RWvgw<$NH!Zw3=wMES_fgKVW9*q$~ikamPNcj%dnP}hlp_`|xQ?UaeRcY+T zp^x%0fU5I`dac2GD73P61&?kMnm&m*4HY(H-k~6|USFTGTj|knCN}$U&1eC(Z&K%< z#0eGLk2hQTJV}L%ASb9jZQBj&woe?R$!}JZq1H{--4sSv555#=W|cUXbVfd>Qo>?+ zFC-T2C(~P%;&Fm^59MB0$-X!nbl~b&1R?p^eAsAYqk-WrNKDwxqeIgn)VT&hIO_&l z=yeERj&d9O)X%fQ>VppxN!r)ItHmDhYH@)rZ+We_d-BXkFc-Z&({GBr&GgA zXP?$kD>5Zt4^=#`X3~-+g7np6zigGWv0n^hXp_>-Q}g$@U(_|FzEUvGOar%oi;CK8 znc=<-z`EAI=if$(+!rU>izlU|GPffL844kt_~+yH0v5LcQ8l}DqWR*Lvq|WG`+D); eKbkCUIB@m%XIW~`t--S!?9_4eu^bb}@P7cITPAn_ From 36909da9897b730f83fca5dc1599d943228dd066 Mon Sep 17 00:00:00 2001 From: Ammar Yousaf Date: Tue, 3 Dec 2024 15:21:19 +0100 Subject: [PATCH 31/74] routing issue has been fixed --- app/projects/[city]/trash/route/page.tsx | 2 - components/Map.tsx | 43 ++++-- package-lock.json | 160 +---------------------- package.json | 2 +- yarn.lock | 86 +----------- 5 files changed, 39 insertions(+), 254 deletions(-) diff --git a/app/projects/[city]/trash/route/page.tsx b/app/projects/[city]/trash/route/page.tsx index 55e8b15..c07da55 100644 --- a/app/projects/[city]/trash/route/page.tsx +++ b/app/projects/[city]/trash/route/page.tsx @@ -142,7 +142,6 @@ const RoutePlanning = () => { // Add trashbin if not already selected, otherwise remove it const handleTrashbinClick = useCallback((trashbin: Trashbin) => { - console.log("trashbin click is working") setSelectedBins((prevSelected) => { if (prevSelected.some((bin) => bin.identifier === trashbin.identifier)) return prevSelected.filter((bin) => bin.identifier !== trashbin.identifier); else return [...prevSelected, trashbin]; @@ -189,7 +188,6 @@ const RoutePlanning = () => { const handleShowRoute = async () => { // To show the route, we need to show the map tab setActiveTab('map'); - console.log("the show route button is working") // Fetch optimized route const orderedBins = await fetchOptimizedRoute(); setOptimizedBins(orderedBins); diff --git a/components/Map.tsx b/components/Map.tsx index 7f92441..42f1048 100644 --- a/components/Map.tsx +++ b/components/Map.tsx @@ -111,13 +111,10 @@ const initializeMap = (L: any, centerCoordinates: LatLngTuple, initialZoom: numb if (markersRef.current) { markersRef.current.clearLayers(); - console.log(markersRef,"1") } else { markersRef.current = L.markerClusterGroup({ maxClusterRadius: 40 }); - console.log(markersRef,"2") if (markersRef.current) { mapRef.current.addLayer(markersRef.current); - console.log(markersRef,"3") } } }; @@ -230,13 +227,16 @@ const addMarkersToMap = async ( }) ); } - const getIcon = () => { + const getIcon = (trashbin: Trashbin): any => { if (isDataMissing || allSensorsHaveOldData) { + // Check if the bin is selected if (selectedBins?.some((bin) => bin.identifier === trashbin.identifier)) { return greyBinSelected; // Grey Bin Selected if selected and data is missing or old - } + } return greyBin; // Grey if missing data or all sensors have old data } + + // Return appropriate icon based on fill level and selection state if (selectedBins?.some((bin) => bin.identifier === trashbin.identifier)) { return trashbin.fillLevel < fillThresholds[0] ? greenBinSelected @@ -244,17 +244,19 @@ const addMarkersToMap = async ( ? yellowBinSelected : redBinSelected; } + + // Default bin icons return trashbin.fillLevel < fillThresholds[0] ? greenBin : trashbin.fillLevel < fillThresholds[1] ? yellowBin : redBin; }; - + const marker = L.marker( [trashbin.coordinates[0] ?? 0, trashbin.coordinates[1] ?? 0], { - icon: getIcon(), + icon: getIcon(trashbin), } ); @@ -271,10 +273,28 @@ const addMarkersToMap = async ( marker.bindPopup(container); marker.on("mouseover", () => marker.openPopup()); - marker.on("click", () => {onTrashbinClick(trashbin) - marker.setIcon (defaultIcon) - console.log(getIcon(),"get",defaultIcon,"defaault") - }); + marker.on("click", () => { + // Toggle selection state + const isAlreadySelected = selectedBins?.some( + (bin) => bin.identifier === trashbin.identifier + ); + + if (isAlreadySelected) { + // Remove bin from selectedBins + selectedBins = selectedBins?.filter( + (bin) => bin.identifier !== trashbin.identifier + ); + } else { + // Add bin to selectedBins + selectedBins = [...(selectedBins ?? []), trashbin]; + } + + // Update the marker's icon + marker.setIcon(getIcon(trashbin)); + + // Trigger the provided callback + onTrashbinClick(trashbin); +}); marker.on("popupopen", (e: any) => { L.DomEvent.on(e.popup._contentNode, "click", () => { onTrashbinClick(trashbin); @@ -348,7 +368,6 @@ const Map = ({ const L = require("leaflet"); require("leaflet.markercluster"); require("leaflet-routing-machine"); - console.log("routeControl Working") handleRoutingControl(L,showRoute,optimizedBins,tripStartEnd,mapRef,routingControlRef); } }, [showRoute, optimizedBins, tripStartEnd,centerCoordinates, initialZoom, trashbinData,fillThresholds, batteryThresholds,selectedBins,isRoutePlanning,onTrashbinClick,markersRef]); diff --git a/package-lock.json b/package-lock.json index 1e2fc57..8c52671 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,11 +28,9 @@ "chartjs-chart-matrix": "^2.0.1", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", - "cors": "^2.8.5", "d3": "^7.9.0", "d3-tip": "^0.9.1", "export-to-csv": "^1.3.0", - "i18next": "^23.16.5", "json-2-csv": "^5.5.1", "jsonwebtoken": "^9.0.2", "leaflet": "^1.9.4", @@ -41,13 +39,11 @@ "lodash.debounce": "^4.0.8", "lucide-react": "^0.378.0", "next": "^14.2.18", - "next-i18next": "^15.3.1", "next-themes": "^0.3.0", "react": "^18", "react-chartjs-2": "^5.2.0", "react-copy-to-clipboard": "^5.1.0", "react-dom": "^18", - "react-i18next": "^15.1.1", "react-router-dom": "^6.24.0", "recharts": "^2.12.6", "resize-observer-polyfill": "^1.5.1", @@ -70,7 +66,6 @@ "@types/react": "^18.3.1", "@types/react-copy-to-clipboard": "^5.0.7", "@types/react-dom": "^18", - "@types/react-i18next": "^7.8.3", "eslint": "^8", "eslint-config-next": "14.2.3", "postcss": "^8", @@ -2351,23 +2346,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", - "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==", - "license": "MIT", - "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "node_modules/@types/i18next": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/@types/i18next/-/i18next-12.1.0.tgz", - "integrity": "sha512-qLyqTkp3ZKHsSoX8CNVYcTyTkxlm0aRCUpaUVetgkSlSpiNCdWryOgaYwgbO04tJIfLgBXPcy0tJ3Nl/RagllA==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -2445,12 +2423,14 @@ "version": "15.7.12", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "devOptional": true, "license": "MIT" }, "node_modules/@types/react": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.1.tgz", "integrity": "sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw==", + "devOptional": true, "license": "MIT", "dependencies": { "@types/prop-types": "*", @@ -2477,17 +2457,6 @@ "@types/react": "*" } }, - "node_modules/@types/react-i18next": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@types/react-i18next/-/react-i18next-7.8.3.tgz", - "integrity": "sha512-VPopxbHXz/1Sjl+ljXQQchf6FHXaYLaH0a6TH6KnGOQGD4LzNbUVlofK26S30OIYfYibm8r/sAb2KeTst+AwTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/i18next": "*", - "@types/react": "*" - } - }, "node_modules/@typescript-eslint/parser": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", @@ -3344,17 +3313,6 @@ "toggle-selection": "^1.0.6" } }, - "node_modules/core-js": { - "version": "3.39.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.39.0.tgz", - "integrity": "sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, "node_modules/cors": { "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", @@ -5317,53 +5275,6 @@ "node": ">= 0.4" } }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "license": "BSD-3-Clause", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/html-parse-stringify": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", - "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", - "license": "MIT", - "dependencies": { - "void-elements": "3.1.0" - } - }, - "node_modules/i18next": { - "version": "23.16.5", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.16.5.tgz", - "integrity": "sha512-KTlhE3EP9x6pPTAW7dy0WKIhoCpfOGhRQlO+jttQLgzVaoOjWwBWramu7Pp0i+8wDNduuzXfe3kkVbzrKyrbTA==", - "funding": [ - { - "type": "individual", - "url": "https://locize.com" - }, - { - "type": "individual", - "url": "https://locize.com/i18next.html" - }, - { - "type": "individual", - "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" - } - ], - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.23.2" - } - }, - "node_modules/i18next-fs-backend": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/i18next-fs-backend/-/i18next-fs-backend-2.3.2.tgz", - "integrity": "sha512-LIwUlkqDZnUI8lnUxBnEj8K/FrHQTT/Sc+1rvDm9E8YvvY5YxzoEAASNx+W5M9DfD5s77lI5vSAFWeTp26B/3Q==", - "license": "MIT" - }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -6407,42 +6318,6 @@ } } }, - "node_modules/next-i18next": { - "version": "15.3.1", - "resolved": "https://registry.npmjs.org/next-i18next/-/next-i18next-15.3.1.tgz", - "integrity": "sha512-+pa2pZJb7B6k5PKW3TLVMmAodqkNaOBWVYlpWX56mgcEJz0UMW+MKSdKM9Z72CHp6Bp48g7OWwDnLqxXNp/84w==", - "funding": [ - { - "type": "individual", - "url": "https://locize.com/i18next.html" - }, - { - "type": "individual", - "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" - }, - { - "type": "individual", - "url": "https://locize.com" - } - ], - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.23.2", - "@types/hoist-non-react-statics": "^3.3.4", - "core-js": "^3", - "hoist-non-react-statics": "^3.3.2", - "i18next-fs-backend": "^2.3.2" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "i18next": ">= 23.7.13", - "next": ">= 12.0.0", - "react": ">= 17.0.2", - "react-i18next": ">= 13.5.0" - } - }, "node_modules/next-themes": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.3.0.tgz", @@ -7072,28 +6947,6 @@ "react": "^18.3.1" } }, - "node_modules/react-i18next": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-15.1.1.tgz", - "integrity": "sha512-R/Vg9wIli2P3FfeI8o1eNJUJue5LWpFsQePCHdQDmX0Co3zkr6kdT8gAseb/yGeWbNz1Txc4bKDQuZYsC0kQfw==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.25.0", - "html-parse-stringify": "^3.0.1" - }, - "peerDependencies": { - "i18next": ">= 23.2.3", - "react": ">= 16.8.0" - }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - } - } - }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -8437,15 +8290,6 @@ "d3-timer": "^3.0.1" } }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index 2a82a89..9d3a445 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "leaflet.markercluster": "^1.5.3", "lodash.debounce": "^4.0.8", "lucide-react": "^0.378.0", - "next": "14.2.3", + "next": "^14.2.18", "next-themes": "^0.3.0", "react": "^18", "react-chartjs-2": "^5.2.0", diff --git a/yarn.lock b/yarn.lock index 3d89ab1..cba8a1e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,7 +7,7 @@ resolved "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz" integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== -"@babel/runtime@^7.13.10", "@babel/runtime@^7.23.2", "@babel/runtime@^7.24.1", "@babel/runtime@^7.25.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": +"@babel/runtime@^7.13.10", "@babel/runtime@^7.23.2", "@babel/runtime@^7.24.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": version "7.26.0" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz" integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== @@ -925,19 +925,6 @@ resolved "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz" integrity sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg== -"@types/hoist-non-react-statics@^3.3.4": - version "3.3.5" - resolved "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz" - integrity sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg== - dependencies: - "@types/react" "*" - hoist-non-react-statics "^3.3.0" - -"@types/i18next@*": - version "12.1.0" - resolved "https://registry.npmjs.org/@types/i18next/-/i18next-12.1.0.tgz" - integrity sha512-qLyqTkp3ZKHsSoX8CNVYcTyTkxlm0aRCUpaUVetgkSlSpiNCdWryOgaYwgbO04tJIfLgBXPcy0tJ3Nl/RagllA== - "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" @@ -1009,14 +996,6 @@ dependencies: "@types/react" "*" -"@types/react-i18next@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@types/react-i18next/-/react-i18next-7.8.3.tgz" - integrity sha512-VPopxbHXz/1Sjl+ljXQQchf6FHXaYLaH0a6TH6KnGOQGD4LzNbUVlofK26S30OIYfYibm8r/sAb2KeTst+AwTQ== - dependencies: - "@types/i18next" "*" - "@types/react" "*" - "@types/react@*", "@types/react@^16.8.0 || ^17.0.0 || ^18.0.0", "@types/react@^16.9.0 || ^17.0.0 || ^18.0.0", "@types/react@^18.3.1": version "18.3.1" resolved "https://registry.npmjs.org/@types/react/-/react-18.3.1.tgz" @@ -1509,12 +1488,7 @@ copy-to-clipboard@^3.3.1: dependencies: toggle-selection "^1.0.6" -core-js@^3: - version "3.39.0" - resolved "https://registry.npmjs.org/core-js/-/core-js-3.39.0.tgz" - integrity sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g== - -cors@^2.8.5, cors@~2.8.5: +cors@~2.8.5: version "2.8.5" resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== @@ -2648,32 +2622,6 @@ hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: dependencies: function-bind "^1.1.2" -hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: - version "3.3.2" - resolved "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz" - integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== - dependencies: - react-is "^16.7.0" - -html-parse-stringify@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz" - integrity sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg== - dependencies: - void-elements "3.1.0" - -i18next-fs-backend@^2.3.2: - version "2.3.2" - resolved "https://registry.npmjs.org/i18next-fs-backend/-/i18next-fs-backend-2.3.2.tgz" - integrity sha512-LIwUlkqDZnUI8lnUxBnEj8K/FrHQTT/Sc+1rvDm9E8YvvY5YxzoEAASNx+W5M9DfD5s77lI5vSAFWeTp26B/3Q== - -i18next@^23.16.5, "i18next@>= 23.2.3", "i18next@>= 23.7.13": - version "23.16.5" - resolved "https://registry.npmjs.org/i18next/-/i18next-23.16.5.tgz" - integrity sha512-KTlhE3EP9x6pPTAW7dy0WKIhoCpfOGhRQlO+jttQLgzVaoOjWwBWramu7Pp0i+8wDNduuzXfe3kkVbzrKyrbTA== - dependencies: - "@babel/runtime" "^7.23.2" - iconv-lite@0.6: version "0.6.3" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" @@ -3260,23 +3208,12 @@ negotiator@0.6.3: resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -next-i18next@^15.3.1: - version "15.3.1" - resolved "https://registry.npmjs.org/next-i18next/-/next-i18next-15.3.1.tgz" - integrity sha512-+pa2pZJb7B6k5PKW3TLVMmAodqkNaOBWVYlpWX56mgcEJz0UMW+MKSdKM9Z72CHp6Bp48g7OWwDnLqxXNp/84w== - dependencies: - "@babel/runtime" "^7.23.2" - "@types/hoist-non-react-statics" "^3.3.4" - core-js "^3" - hoist-non-react-statics "^3.3.2" - i18next-fs-backend "^2.3.2" - next-themes@^0.3.0: version "0.3.0" resolved "https://registry.npmjs.org/next-themes/-/next-themes-0.3.0.tgz" integrity sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w== -next@^14.2.18, "next@>= 12.0.0": +next@^14.2.18: version "14.2.18" resolved "https://registry.npmjs.org/next/-/next-14.2.18.tgz" integrity sha512-H9qbjDuGivUDEnK6wa+p2XKO+iMzgVgyr9Zp/4Iv29lKa+DYaxJGjOeEA+5VOvJh/M7HLiskehInSa0cWxVXUw== @@ -3595,15 +3532,7 @@ react-copy-to-clipboard@^5.1.0: loose-envify "^1.1.0" scheduler "^0.23.2" -react-i18next@^15.1.1, "react-i18next@>= 13.5.0": - version "15.1.1" - resolved "https://registry.npmjs.org/react-i18next/-/react-i18next-15.1.1.tgz" - integrity sha512-R/Vg9wIli2P3FfeI8o1eNJUJue5LWpFsQePCHdQDmX0Co3zkr6kdT8gAseb/yGeWbNz1Txc4bKDQuZYsC0kQfw== - dependencies: - "@babel/runtime" "^7.25.0" - html-parse-stringify "^3.0.1" - -react-is@^16.10.2, react-is@^16.13.1, react-is@^16.7.0: +react-is@^16.10.2, react-is@^16.13.1: version "16.13.1" resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -3670,7 +3599,7 @@ react-transition-group@^4.4.5: loose-envify "^1.4.0" prop-types "^15.6.2" -"react@^15.3.0 || 16 || 17 || 18", "react@^16.0.0 || ^17.0.0 || ^18.0.0", "react@^16.5.1 || ^17.0.0 || ^18.0.0", "react@^16.8 || ^17 || ^18", "react@^16.8 || ^17.0 || ^18.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0", react@^18, react@^18.0.0, react@^18.2.0, react@^18.3.1, "react@>= 16.8.0", "react@>= 16.8.0 || 17.x.x || ^18.0.0-0", "react@>= 17.0.2", react@>=16.6.0, react@>=16.8, react@>=16.8.0, react@>=18.0.0: +"react@^15.3.0 || 16 || 17 || 18", "react@^16.0.0 || ^17.0.0 || ^18.0.0", "react@^16.5.1 || ^17.0.0 || ^18.0.0", "react@^16.8 || ^17 || ^18", "react@^16.8 || ^17.0 || ^18.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0", react@^18, react@^18.0.0, react@^18.2.0, react@^18.3.1, "react@>= 16.8.0 || 17.x.x || ^18.0.0-0", react@>=16.6.0, react@>=16.8, react@>=16.8.0, react@>=18.0.0: version "18.3.1" resolved "https://registry.npmjs.org/react/-/react-18.3.1.tgz" integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== @@ -4367,11 +4296,6 @@ victory-vendor@^36.6.8: d3-time "^3.0.0" d3-timer "^3.0.1" -void-elements@3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz" - integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== - which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" From efad50b7e468655adf4d9991e99dd4cbf2c39e5f Mon Sep 17 00:00:00 2001 From: PaulaScharf Date: Tue, 3 Dec 2024 17:45:03 +0100 Subject: [PATCH 32/74] add translations for no history --- app/projects/[city]/trash/trashbins/[identifier]/page.tsx | 2 +- lib/locales/de.json | 1 + lib/locales/en.json | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/projects/[city]/trash/trashbins/[identifier]/page.tsx b/app/projects/[city]/trash/trashbins/[identifier]/page.tsx index 1dd708b..2f448b3 100644 --- a/app/projects/[city]/trash/trashbins/[identifier]/page.tsx +++ b/app/projects/[city]/trash/trashbins/[identifier]/page.tsx @@ -277,7 +277,7 @@ export default function TrashbinDetail({ {fillLevelData.length === 0 && batteryLevelData.length === 0 ? (

- +
) : ( diff --git a/lib/locales/de.json b/lib/locales/de.json index 0a2eab9..3160779 100644 --- a/lib/locales/de.json +++ b/lib/locales/de.json @@ -67,6 +67,7 @@ "title": "Mülleimer {{name}} ({{identifier}})", "editButton": "Mülleimer bearbeiten", "loadingHistory": "Verlauf wird geladen...", + "noHistory": "Keine Verlaufsdaten verfügbar", "tabs": { "graphicalView": "Grafische Ansicht", "tableView": "Tabellenansicht" diff --git a/lib/locales/en.json b/lib/locales/en.json index 6dd7874..13410a9 100644 --- a/lib/locales/en.json +++ b/lib/locales/en.json @@ -67,6 +67,7 @@ "title": "Trashbin {{name}} ({{identifier}})", "editButton": "Edit Trashbin", "loadingHistory": "Loading history...", + "noHistory": "No history data available", "tabs": { "graphicalView": "Graphical View", "tableView": "Table View" From d6b1af23d742b34e5511bbff2ca9664ec28f53f8 Mon Sep 17 00:00:00 2001 From: PaulaScharf Date: Wed, 4 Dec 2024 10:02:38 +0100 Subject: [PATCH 33/74] axios import --- app/projects/[city]/noise/page.tsx | 6 +++--- app/projects/[city]/noise/settings/page.tsx | 4 ++-- app/projects/[city]/trash/map/page.tsx | 6 +++--- app/projects/[city]/trash/page.tsx | 8 ++++---- app/projects/[city]/trash/route/page.tsx | 12 ++++++------ app/projects/[city]/trash/settings/page.tsx | 4 ++-- .../trash/trashbins/[identifier]/edit/page.tsx | 4 ++-- .../[city]/trash/trashbins/[identifier]/page.tsx | 12 ++++++------ app/projects/[city]/trash/trashbins/page.tsx | 6 +++--- app/projects/page.tsx | 4 ++-- components/Heatmap/HeatmapBatteryLevel.tsx | 4 ++-- components/Heatmap/HeatmapFillLevel.tsx | 4 ++-- 12 files changed, 37 insertions(+), 37 deletions(-) diff --git a/app/projects/[city]/noise/page.tsx b/app/projects/[city]/noise/page.tsx index 77a4266..c94402c 100644 --- a/app/projects/[city]/noise/page.tsx +++ b/app/projects/[city]/noise/page.tsx @@ -1,7 +1,7 @@ "use client"; import React, { useState, useEffect } from "react"; -import api from '@/lib/axios-api' +import axios from "axios"; import PageTitle from "@/components/PageTitle"; import { CardContent } from "@/components/Card"; import NoiseChart from "@/components/NoiseChart"; @@ -25,7 +25,7 @@ export default function NoiseDashboard() { const token = localStorage.getItem("authToken"); const projectId = localStorage.getItem("projectId"); - const projectResponse = await api.get( + const projectResponse = await axios.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/project/${projectId}`, { headers: { @@ -54,7 +54,7 @@ export default function NoiseDashboard() { sensorId = "668e6b79e921750c7a2fe08d"; } - const historyResponse = await api.get( + const historyResponse = await axios.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/history/sensor/${sensorId}`, { headers: { diff --git a/app/projects/[city]/noise/settings/page.tsx b/app/projects/[city]/noise/settings/page.tsx index 89a4045..dafb895 100644 --- a/app/projects/[city]/noise/settings/page.tsx +++ b/app/projects/[city]/noise/settings/page.tsx @@ -1,7 +1,7 @@ "use client"; import React, { useState, useEffect } from "react"; -import api from '@/lib/axios-api' +import axios from "axios"; import PageTitle from "@/components/PageTitle"; import LoadingComponent from "@/components/LoadingComponent"; import { Info } from "lucide-react"; @@ -20,7 +20,7 @@ export default function AppSettings() { const token = localStorage.getItem("authToken"); const projectId = localStorage.getItem("projectId"); - const projectResponse = await api.get( + const projectResponse = await axios.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/project/${projectId}`, { headers: { diff --git a/app/projects/[city]/trash/map/page.tsx b/app/projects/[city]/trash/map/page.tsx index 2fe483e..0b61053 100644 --- a/app/projects/[city]/trash/map/page.tsx +++ b/app/projects/[city]/trash/map/page.tsx @@ -2,7 +2,7 @@ import React, { useState, useEffect } from "react"; import { useRouter } from "next/navigation"; -import api from "@/lib/axios-api"; +import axios from "axios";; import { LatLngTuple } from "leaflet"; import PageTitle from "@/components/PageTitle"; import Map from "@/components/Map"; @@ -32,7 +32,7 @@ const MapPage = () => { const token = localStorage.getItem("authToken"); const projectId = localStorage.getItem("projectId"); - const trashbinResponse = await api.get( + const trashbinResponse = await axios.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trashbin?project=${projectId}`, { headers: { @@ -42,7 +42,7 @@ const MapPage = () => { ); setTrashbinData(trashbinResponse.data.trashbins); - const projectResponse = await api.get( + const projectResponse = await axios.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/project/${projectId}`, { headers: { diff --git a/app/projects/[city]/trash/page.tsx b/app/projects/[city]/trash/page.tsx index 2bb951f..8357397 100644 --- a/app/projects/[city]/trash/page.tsx +++ b/app/projects/[city]/trash/page.tsx @@ -5,7 +5,7 @@ import Card, { CardContent, CardProps } from "@/components/Card"; import { HeatmapFillLevel } from "@/components/Heatmap/HeatmapFillLevel"; import { Trashbin } from "@/app/types"; import React, { useCallback, useState, useEffect } from "react"; -import api from "@/lib/axios-api"; +import axios from "axios";; import { useTranslation } from "@/lib/TranslationContext"; // Import the translation hook interface HistoryDataItem { @@ -68,7 +68,7 @@ export default function Home() { const token = localStorage.getItem("authToken"); const projectId = localStorage.getItem("projectId"); - const allTrashbinsResponse = await api.get( + const allTrashbinsResponse = await axios.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trashbin?project=${projectId}`, { headers: { @@ -79,7 +79,7 @@ export default function Home() { let transformedTrashbinData: Trashbin[] = allTrashbinsResponse.data.trashbins; // Get the currently assigned bins - const assignedTrashbinsResponse = await api.get( + const assignedTrashbinsResponse = await axios.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trash-collector/${COLLECTOR_ID}/trashbins`, { headers: { @@ -103,7 +103,7 @@ export default function Home() { amount: transformedTrashbinData.length.toString(), })); - const projectResponse = await api.get( + const projectResponse = await axios.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/project/${projectId}`, { headers: { diff --git a/app/projects/[city]/trash/route/page.tsx b/app/projects/[city]/trash/route/page.tsx index c07da55..c9d57aa 100644 --- a/app/projects/[city]/trash/route/page.tsx +++ b/app/projects/[city]/trash/route/page.tsx @@ -2,7 +2,7 @@ import React, { useState, useCallback, useEffect } from 'react'; import { CopyToClipboard } from 'react-copy-to-clipboard'; -import api from '@/lib/axios-api' +import axios from "axios"; //import { Map } from '@/components/Map'; import { LatLngTuple } from 'leaflet'; import PageTitle from "@/components/PageTitle"; @@ -92,7 +92,7 @@ const RoutePlanning = () => { const token = localStorage.getItem("authToken"); const projectId = localStorage.getItem("projectId"); - const allTrashbinsResponse = await api.get( + const allTrashbinsResponse = await axios.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trashbin?project=${projectId}`, { headers: { @@ -103,7 +103,7 @@ const RoutePlanning = () => { const transformedTrashbinData: Trashbin[] = allTrashbinsResponse.data.trashbins; - const assignedTrashbinsResponse = await api.get( + const assignedTrashbinsResponse = await axios.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trash-collector/${COLLECTOR_ID}/trashbins`, { headers: { @@ -116,7 +116,7 @@ const RoutePlanning = () => { const unassignedTrashbins = transformedTrashbinData.filter((bin) => !assignedTrashbins.some((assignedBin: Trashbin) => assignedBin._id === bin._id)); setTrashbinData(unassignedTrashbins); - const projectResponse = await api.get( + const projectResponse = await axios.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/project/${projectId}`, { headers: { @@ -164,7 +164,7 @@ const RoutePlanning = () => { const url = `${OSRM_SERVER_URL}/trip/v1/driving/${coordinates.join(';')}?source=first&destination=last&roundtrip=false`; try { - const response = await api.get(url); + const response = await axios.get(url); // Only handle case where we get exactly one trip if (response.data.trips.length === 1) { @@ -234,7 +234,7 @@ const RoutePlanning = () => { const token = localStorage.getItem("authToken"); // Get the currently assigned bins - const assignedTrashbinsResponse = await api.get( + const assignedTrashbinsResponse = await axios.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trash-collector/${COLLECTOR_ID}/trashbins`, { headers: { diff --git a/app/projects/[city]/trash/settings/page.tsx b/app/projects/[city]/trash/settings/page.tsx index afb61c8..e5ad7f0 100644 --- a/app/projects/[city]/trash/settings/page.tsx +++ b/app/projects/[city]/trash/settings/page.tsx @@ -1,7 +1,7 @@ "use client"; import React, { useState, useEffect } from "react"; -import api from '@/lib/axios-api' +import axios from "axios"; import PageTitle from "@/components/PageTitle"; import LoadingComponent from "@/components/LoadingComponent"; import { Info } from "lucide-react"; @@ -26,7 +26,7 @@ export default function ProjectSettings() { const token = localStorage.getItem("authToken"); const projectId = localStorage.getItem("projectId"); - const projectResponse = await api.get( + const projectResponse = await axios.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/project/${projectId}`, { headers: { diff --git a/app/projects/[city]/trash/trashbins/[identifier]/edit/page.tsx b/app/projects/[city]/trash/trashbins/[identifier]/edit/page.tsx index af3d78f..b0cb050 100644 --- a/app/projects/[city]/trash/trashbins/[identifier]/edit/page.tsx +++ b/app/projects/[city]/trash/trashbins/[identifier]/edit/page.tsx @@ -2,7 +2,7 @@ import React, { useEffect, useState } from "react"; import Link from "next/link"; -import api from '@/lib/axios-api' +import axios from "axios"; import PageTitle from "@/components/PageTitle"; import { Button } from "@/components/ui/button"; import LoadingComponent from "@/components/LoadingComponent"; @@ -27,7 +27,7 @@ const EditTrashbinPage = ({ params }: { params: { identifier: string } }) => { const fetchData = async () => { try { const token = localStorage.getItem("authToken"); - const response = await api.get( + const response = await axios.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trashbin/${params.identifier}`, { headers: { diff --git a/app/projects/[city]/trash/trashbins/[identifier]/page.tsx b/app/projects/[city]/trash/trashbins/[identifier]/page.tsx index 2f448b3..2917955 100644 --- a/app/projects/[city]/trash/trashbins/[identifier]/page.tsx +++ b/app/projects/[city]/trash/trashbins/[identifier]/page.tsx @@ -2,7 +2,7 @@ import React, { useEffect, useState } from "react"; import Link from "next/link"; -import api from '@/lib/axios-api' +import axios from "axios"; import PageTitle from "@/components/PageTitle"; import { DataTable } from "@/components/DataTable"; import { ColumnDef } from "@tanstack/react-table"; @@ -100,7 +100,7 @@ export default function TrashbinDetail({ const token = localStorage.getItem("authToken"); // Fetch trashbin data - const response = await api.get( + const response = await axios.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trashbin/${params.identifier}`, { headers: { @@ -112,7 +112,7 @@ export default function TrashbinDetail({ // Fetch project settings const projectId = localStorage.getItem("projectId"); - const projectResponse = await api.get( + const projectResponse = await axios.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/project/${projectId}`, { headers: { @@ -128,7 +128,7 @@ export default function TrashbinDetail({ // Fetch history data of fill level and battery level // TODO: this is kind of a shitty solution. Maybe we should first determine what measureType a sensorId has and then do the request // Fetch first history data - const historyResponse0 = await api.get( + const historyResponse0 = await axios.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/history/sensor/${sensorIds[0]}`, { headers: { @@ -155,7 +155,7 @@ export default function TrashbinDetail({ setBatteryLevelData([]); } // Fetch second history data - const historyResponse1 = await api.get( + const historyResponse1 = await axios.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/history/sensor/${sensorIds[1]}`, { headers: { @@ -181,7 +181,7 @@ export default function TrashbinDetail({ setBatteryLevelData([]); } // Fetch third history data - const historyResponse2 = await api.get( + const historyResponse2 = await axios.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/history/sensor/${sensorIds[2]}`, { headers: { diff --git a/app/projects/[city]/trash/trashbins/page.tsx b/app/projects/[city]/trash/trashbins/page.tsx index 7146891..8dc16f0 100644 --- a/app/projects/[city]/trash/trashbins/page.tsx +++ b/app/projects/[city]/trash/trashbins/page.tsx @@ -2,7 +2,7 @@ import React, { useCallback, useState, useEffect } from "react"; import { useRouter } from "next/navigation"; -import api from '@/lib/axios-api' +import axios from "axios"; import PageTitle from "@/components/PageTitle"; import { DataTable } from "@/components/DataTable"; import { ColumnDef } from "@tanstack/react-table"; @@ -149,7 +149,7 @@ export default function TrashbinsOverview() { const token = localStorage.getItem("authToken"); const projectId = localStorage.getItem("projectId"); - const allTrashbinsResponse = await api.get( + const allTrashbinsResponse = await axios.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trashbin?project=${projectId}`, { headers: { @@ -160,7 +160,7 @@ export default function TrashbinsOverview() { var transformedTrashbinData: Trashbin[] = allTrashbinsResponse.data.trashbins; // Get the currently assigned bins - const assignedTrashbinsResponse = await api.get( + const assignedTrashbinsResponse = await axios.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trash-collector/${COLLECTOR_ID}/trashbins`, { headers: { diff --git a/app/projects/page.tsx b/app/projects/page.tsx index 91a865e..a1aec58 100644 --- a/app/projects/page.tsx +++ b/app/projects/page.tsx @@ -1,7 +1,7 @@ "use client"; import { useEffect, useState } from "react"; -import api from "@/lib/axios-api"; +import axios from "axios";; import PageTitle from "@/components/PageTitle"; import { Button } from "@/components/ui/button"; import LoadingComponent from "@/components/LoadingComponent"; @@ -43,7 +43,7 @@ export default function Projects() { try { const token = localStorage.getItem("authToken"); - const response = await api.get( + const response = await axios.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/project`, { headers: { diff --git a/components/Heatmap/HeatmapBatteryLevel.tsx b/components/Heatmap/HeatmapBatteryLevel.tsx index 21dd741..af4d1e9 100644 --- a/components/Heatmap/HeatmapBatteryLevel.tsx +++ b/components/Heatmap/HeatmapBatteryLevel.tsx @@ -1,7 +1,7 @@ import { Trashbin } from "@/app/types"; import { Heatmap } from "./Heatmap"; import { useEffect, useState } from "react"; -import api from "@/lib/axios-api"; +import axios from "axios";; type Entry = { time: number; // Unix timestamp @@ -28,7 +28,7 @@ export const HeatmapBatteryLevel: React.FC<{ trashbins: Trashbin[] }> = ({trashb const historyPromises = trashbins.flatMap(bin => bin.sensors.map(sensor => ({ binIdentifier: bin.identifier, - promise: api.get( + promise: axios.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/history/sensor/${sensor}`, { headers: { diff --git a/components/Heatmap/HeatmapFillLevel.tsx b/components/Heatmap/HeatmapFillLevel.tsx index c0ae7f7..c4eceeb 100644 --- a/components/Heatmap/HeatmapFillLevel.tsx +++ b/components/Heatmap/HeatmapFillLevel.tsx @@ -1,7 +1,7 @@ import { Trashbin } from "@/app/types"; import { Heatmap } from "./Heatmap"; import React, { useState, useEffect } from "react"; -import api from '@/lib/axios-api' +import axios from "axios"; type Entry = { time: number; // Unix timestamp @@ -28,7 +28,7 @@ export const HeatmapFillLevel: React.FC<{ trashbins: Trashbin[] }> = ({trashbins const historyPromises = trashbins.flatMap(bin => bin.sensors.map(sensor => ({ binIdentifier: bin.identifier, // or whatever property holds the name - promise: api.get( + promise: axios.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/history/sensor/${sensor}`, { headers: { From 4132e2332a3ac0b64087356ed695081e1cfd7917 Mon Sep 17 00:00:00 2001 From: PaulaScharf Date: Wed, 4 Dec 2024 13:07:27 +0100 Subject: [PATCH 34/74] axios post and patch instead of api --- app/projects/[city]/noise/settings/page.tsx | 2 +- app/projects/[city]/trash/route/page.tsx | 4 ++-- app/projects/[city]/trash/settings/page.tsx | 2 +- .../[city]/trash/trashbins/[identifier]/edit/page.tsx | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/projects/[city]/noise/settings/page.tsx b/app/projects/[city]/noise/settings/page.tsx index dafb895..9d3d5a4 100644 --- a/app/projects/[city]/noise/settings/page.tsx +++ b/app/projects/[city]/noise/settings/page.tsx @@ -99,7 +99,7 @@ export default function AppSettings() { const token = localStorage.getItem("authToken"); const projectId = localStorage.getItem("projectId"); - await api.patch( + await axios.patch( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/project/${projectId}`, { activeTimeInterval: [startHour, endHour], diff --git a/app/projects/[city]/trash/route/page.tsx b/app/projects/[city]/trash/route/page.tsx index c9d57aa..f75852f 100644 --- a/app/projects/[city]/trash/route/page.tsx +++ b/app/projects/[city]/trash/route/page.tsx @@ -248,7 +248,7 @@ const RoutePlanning = () => { const allAssignedBins = [...assignedTrashbins, ...selectedBins]; try { - const response = await api.post( + const response = await axios.post( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trash-collector/assign`, { trashCollector: COLLECTOR_ID, @@ -275,7 +275,7 @@ const RoutePlanning = () => { try { const token = localStorage.getItem("authToken"); - const response = await api.post( + const response = await axios.post( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trash-collector/assign`, { trashCollector: COLLECTOR_ID, diff --git a/app/projects/[city]/trash/settings/page.tsx b/app/projects/[city]/trash/settings/page.tsx index e5ad7f0..b4fdbbb 100644 --- a/app/projects/[city]/trash/settings/page.tsx +++ b/app/projects/[city]/trash/settings/page.tsx @@ -179,7 +179,7 @@ export default function ProjectSettings() { const token = localStorage.getItem("authToken"); const projectId = localStorage.getItem("projectId"); - await api.patch( + await axios.patch( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/project/${projectId}`, { centerCoords: [mapCenterCoordinates[0], mapCenterCoordinates[1]], diff --git a/app/projects/[city]/trash/trashbins/[identifier]/edit/page.tsx b/app/projects/[city]/trash/trashbins/[identifier]/edit/page.tsx index b0cb050..4a25d3a 100644 --- a/app/projects/[city]/trash/trashbins/[identifier]/edit/page.tsx +++ b/app/projects/[city]/trash/trashbins/[identifier]/edit/page.tsx @@ -103,7 +103,7 @@ const EditTrashbinPage = ({ params }: { params: { identifier: string } }) => { longitude: parseFloat(trashbin.coordinates[1]?.toString() || "0"), }; - await api.patch( + await axios.patch( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trashbin/${trashbin._id}`, payload, { From 0d60fcada2590f672cbffd2eb72839660f9f676e Mon Sep 17 00:00:00 2001 From: Ammar Yousaf Date: Wed, 4 Dec 2024 17:21:53 +0100 Subject: [PATCH 35/74] collector_ID issue has been fixed --- app/projects/[city]/trash/page.tsx | 3 +- app/projects/[city]/trash/route/page.tsx | 147 +++++++------------ app/projects/[city]/trash/trashbins/page.tsx | 4 +- components/Map.tsx | 4 +- lib/locales/de.json | 4 +- lib/locales/en.json | 4 +- 6 files changed, 58 insertions(+), 108 deletions(-) diff --git a/app/projects/[city]/trash/page.tsx b/app/projects/[city]/trash/page.tsx index 8357397..7cb5ef8 100644 --- a/app/projects/[city]/trash/page.tsx +++ b/app/projects/[city]/trash/page.tsx @@ -16,7 +16,6 @@ interface HistoryDataItem { // Bins currently always assigned to a single collector // Treated like a boolean for now: assigned or not assigned -const COLLECTOR_ID = "673b10d6f0e74b4771527ec9"; export default function Home() { const { t } = useTranslation(); // Translation hook @@ -80,7 +79,7 @@ export default function Home() { // Get the currently assigned bins const assignedTrashbinsResponse = await axios.get( - `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trash-collector/${COLLECTOR_ID}/trashbins`, + `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trashbin?project=${projectId}`, { headers: { Authorization: `Bearer ${token?.replace(/"/g, "")}`, diff --git a/app/projects/[city]/trash/route/page.tsx b/app/projects/[city]/trash/route/page.tsx index f75852f..ab2df7c 100644 --- a/app/projects/[city]/trash/route/page.tsx +++ b/app/projects/[city]/trash/route/page.tsx @@ -16,14 +16,13 @@ import LoadingComponent from '@/components/LoadingComponent'; import { Trashbin } from '@/app/types'; import { Copy, Info } from 'lucide-react'; import {useTranslation} from '@/lib/TranslationContext' +import { map } from 'd3'; // import { Input } from "@/components/ui/input"; // import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; // Bins currently always assigned to a single collector // Treated like a boolean for now: assigned or not assigned -const COLLECTOR_ID = "673b10d6f0e74b4771527ec9"; -//673b10d6f0e74b4771527ec9 const headerSortButton = (column: any, displayname: string) => { @@ -66,6 +65,9 @@ const OSRM_SERVER_URL = 'http://router.project-osrm.org'; const RoutePlanning = () => { // Bins selected by user by clicking on map or table-row const [selectedBins, setSelectedBins] = useState([]); + const [trashbinData, setTrashbinData] = useState([]); + const [initialTrashbinData, setInitialTrashbinData] = useState([]); + // Optimized order of bins based on route optimization const [optimizedBins, setOptimizedBins] = useState([]); // Whether to show the optimized route on the map @@ -77,7 +79,6 @@ const RoutePlanning = () => { // Dialog state for showing the GoogleMaps link const [isDialogOpen, setIsDialogOpen] = useState(false); // Trashbin data fetched from the our backend - const [trashbinData, setTrashbinData] = useState([]); const [centerCoordinates, setCenterCoordinates] = useState(null); const [startEndCoordinates, setStartEndCoordinates] = useState(null); const [initialZoom, setInitialZoom] = useState(null); @@ -100,21 +101,15 @@ const RoutePlanning = () => { }, } ); + const allTrashbins = allTrashbinsResponse.data.trashbins; const transformedTrashbinData: Trashbin[] = allTrashbinsResponse.data.trashbins; - const assignedTrashbinsResponse = await axios.get( - `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trash-collector/${COLLECTOR_ID}/trashbins`, - { - headers: { - Authorization: `Bearer ${token?.replace(/"/g, "")}`, - }, - } - ); - const assignedTrashbins = assignedTrashbinsResponse.data.assignedTrashbins; + const assignedTrashbins = allTrashbins; const unassignedTrashbins = transformedTrashbinData.filter((bin) => !assignedTrashbins.some((assignedBin: Trashbin) => assignedBin._id === bin._id)); - setTrashbinData(unassignedTrashbins); + setInitialTrashbinData(allTrashbins); + setTrashbinData(allTrashbins); const projectResponse = await axios.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/project/${projectId}`, @@ -143,6 +138,7 @@ const RoutePlanning = () => { // Add trashbin if not already selected, otherwise remove it const handleTrashbinClick = useCallback((trashbin: Trashbin) => { setSelectedBins((prevSelected) => { + if (prevSelected.some((bin) => bin.identifier === trashbin.identifier)) return prevSelected.filter((bin) => bin.identifier !== trashbin.identifier); else return [...prevSelected, trashbin]; }); @@ -227,76 +223,31 @@ const RoutePlanning = () => { }; // Assigns currently selected bins to a collector - const assignRoute = async () => { - // If no bins are selected, we cannot assign a route - if (selectedBins.length === 0) return; - - const token = localStorage.getItem("authToken"); - - // Get the currently assigned bins - const assignedTrashbinsResponse = await axios.get( - `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trash-collector/${COLLECTOR_ID}/trashbins`, - { - headers: { - Authorization: `Bearer ${token?.replace(/"/g, "")}`, - }, - } - ); - const assignedTrashbins = assignedTrashbinsResponse.data.assignedTrashbins; - - // Create the union of the currently assigned bins and the selected bins - const allAssignedBins = [...assignedTrashbins, ...selectedBins]; - - try { - const response = await axios.post( - `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trash-collector/assign`, - { - trashCollector: COLLECTOR_ID, - assignedTrashbins: allAssignedBins.map(bin => bin._id), - }, - { - headers: { - Authorization: `Bearer ${token?.replace(/"/g, "")}`, - }, - } - ); - - // Reload the page to not show assigned bins anymore - if (response.status === 200) { - location.reload(); - } - } catch (error) { - console.error('Error while assigning route:', error); - } - } - + const removeBins = () => { + if (selectedBins.length === 0) return; // No bins to remove + // Filter out the selected bins from trashbinData + const updatedTrashbinData = trashbinData.filter( + (bin) => !selectedBins.some((selectedBin) => selectedBin._id === bin._id) + ); + // Update the state to reflect the removal + setTrashbinData(updatedTrashbinData); + // Optionally, clear the selected bins to reset selection + setSelectedBins([]); + }; + // Unassigns all bins - const unassignAllBins = async () => { - - try { - const token = localStorage.getItem("authToken"); - const response = await axios.post( - `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trash-collector/assign`, - { - trashCollector: COLLECTOR_ID, - assignedTrashbins: [], - }, - { - headers: { - Authorization: `Bearer ${token?.replace(/"/g, "")}`, - }, - } - ); - - // Reload the page to show all bins again - if (response.status === 200) { - location.reload(); - } - } catch (error) { - console.error('Error while assigning route:', error); - } - } - + const showAllBins = () => { + // Check if trashbinData already contains all bins + if (trashbinData.length === initialTrashbinData.length) { + + return; + } + // Update the state to reflect all bins + setTrashbinData(initialTrashbinData); + // Optionally, clear the selected bins to reset selection + setSelectedBins([]); + }; + // Handle the animation for the copy button const handleCopy = () => { // Find the button by its ID and add the effect class @@ -322,10 +273,10 @@ const RoutePlanning = () => { - - @@ -342,19 +293,21 @@ const RoutePlanning = () => {
- + ` +
diff --git a/app/projects/[city]/trash/trashbins/page.tsx b/app/projects/[city]/trash/trashbins/page.tsx index 8dc16f0..1810278 100644 --- a/app/projects/[city]/trash/trashbins/page.tsx +++ b/app/projects/[city]/trash/trashbins/page.tsx @@ -12,8 +12,6 @@ import { io, Socket } from 'socket.io-client'; // Bins currently always assigned to a single collector // Treated like a boolean for now: assigned or not assigned -const COLLECTOR_ID = "673b10d6f0e74b4771527ec9"; - const headerSortButton = (column: any, displayname: string) => { return ( - - - diff --git a/app/projects/[city]/trash/trashbins/page.tsx b/app/projects/[city]/trash/trashbins/page.tsx index 1810278..ec259a7 100644 --- a/app/projects/[city]/trash/trashbins/page.tsx +++ b/app/projects/[city]/trash/trashbins/page.tsx @@ -146,7 +146,7 @@ export default function TrashbinsOverview() { try { const token = localStorage.getItem("authToken"); const projectId = localStorage.getItem("projectId"); - + const allTrashbinsResponse = await axios.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trashbin?project=${projectId}`, { @@ -155,9 +155,9 @@ export default function TrashbinsOverview() { }, } ); - var transformedTrashbinData: Trashbin[] = allTrashbinsResponse.data.trashbins; - - // Get the currently assigned bins + + const transformedTrashbinData: Trashbin[] = allTrashbinsResponse?.data?.trashbins || []; + const assignedTrashbinsResponse = await axios.get( `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trashbin?project=${projectId}`, { @@ -166,23 +166,24 @@ export default function TrashbinsOverview() { }, } ); - const assignedTrashbins = assignedTrashbinsResponse.data.assignedTrashbins.map((item: Trashbin) => item._id); - - // Set the assigned property for each trashbin to true, if its id is in the assignedTrashbins array - transformedTrashbinData = transformedTrashbinData.map((item: Trashbin) => { - return { - ...item, - assigned: assignedTrashbins.includes(item._id), - }; - }); - - setTrashbinData(transformedTrashbinData); + + const assignedTrashbins = Array.isArray(assignedTrashbinsResponse?.data?.assignedTrashbins) + ? assignedTrashbinsResponse.data.assignedTrashbins.map((item: Trashbin) => item._id) + : []; + + const updatedTrashbinData = transformedTrashbinData.map((item: Trashbin) => ({ + ...item, + assigned: assignedTrashbins.includes(item._id), + })); + + setTrashbinData(updatedTrashbinData); } catch (error) { console.error("Error fetching data:", error); } }; fetchData(); }, []); + return (
From 37d3985b04a96698b1fc5cef380a97ef0578c423 Mon Sep 17 00:00:00 2001 From: Ammar Yousaf Date: Fri, 6 Dec 2024 15:37:01 +0100 Subject: [PATCH 38/74] fixed all the issues related to collector id routing and build and also trashbin --- app/projects/[city]/trash/page.tsx | 162 +++++++++++------------ app/projects/[city]/trash/route/page.tsx | 8 -- components/Heatmap/Heatmap.tsx | 45 ++++--- lib/locales/de.json | 2 +- 4 files changed, 111 insertions(+), 106 deletions(-) diff --git a/app/projects/[city]/trash/page.tsx b/app/projects/[city]/trash/page.tsx index 7cb5ef8..411ec9b 100644 --- a/app/projects/[city]/trash/page.tsx +++ b/app/projects/[city]/trash/page.tsx @@ -61,91 +61,91 @@ export default function Home() { })); }, [t]); - useEffect(() => { - const fetchData = async () => { - try { - const token = localStorage.getItem("authToken"); - const projectId = localStorage.getItem("projectId"); - - const allTrashbinsResponse = await axios.get( - `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trashbin?project=${projectId}`, - { - headers: { - Authorization: `Bearer ${token?.replace(/"/g, "")}`, - }, - } - ); - let transformedTrashbinData: Trashbin[] = allTrashbinsResponse.data.trashbins; - - // Get the currently assigned bins - const assignedTrashbinsResponse = await axios.get( - `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trashbin?project=${projectId}`, - { - headers: { - Authorization: `Bearer ${token?.replace(/"/g, "")}`, - }, - } - ); - const assignedTrashbins = assignedTrashbinsResponse.data.assignedTrashbins.map( - (item: Trashbin) => item._id + useEffect(() => { + const fetchData = async () => { + try { + const token = localStorage.getItem("authToken"); + const projectId = localStorage.getItem("projectId"); + + if (!token || !projectId) { + console.error("Token or Project ID is missing"); + return; + } + + const headers = { + Authorization: `Bearer ${token.replace(/"/g, "")}`, + }; + + // Fetch all trashbins + const allTrashbinsResponse = await axios.get( + `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trashbin?project=${projectId}`, + { headers } + ); + const transformedTrashbinData: Trashbin[] = allTrashbinsResponse.data.trashbins || []; + + // Fetch assigned trashbins + const assignedTrashbinsResponse = await axios.get( + `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/trashbin?project=${projectId}`, + { headers } + ); + const assignedTrashbins = assignedTrashbinsResponse.data.assignedTrashbins || []; + + if (!Array.isArray(transformedTrashbinData) || !Array.isArray(assignedTrashbins)) { + throw new Error("Unexpected response structure"); + } + + // Map the assigned status + const updatedTrashbinData = transformedTrashbinData.map((item: Trashbin) => ({ + ...item, + assigned: assignedTrashbins.map((bin: Trashbin) => bin._id).includes(item._id), + })); + + setTrashbinData(updatedTrashbinData); + + setTotalCardData((prev) => ({ + ...prev, + amount: updatedTrashbinData.length.toString(), + })); + + // Fetch project preferences + const projectResponse = await axios.get( + `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/project/${projectId}`, + { headers } + ); + + const { fillThresholds, batteryThresholds } = projectResponse.data.project.preferences; + + setNearlyFullCardData((prev) => { + const count = updatedTrashbinData.reduce( + (acc, item) => (item.fillLevel > fillThresholds[1] ? acc + 1 : acc), + 0 ); + return { ...prev, amount: count.toString() }; + }); - // Set the assigned property for each trashbin to true, if its id is in the assignedTrashbins array - transformedTrashbinData = transformedTrashbinData.map((item: Trashbin) => ({ - ...item, - assigned: assignedTrashbins.includes(item._id), - })); - setTrashbinData(transformedTrashbinData); - - setTotalCardData((prev) => ({ - ...prev, - amount: transformedTrashbinData.length.toString(), - })); - - const projectResponse = await axios.get( - `${process.env.NEXT_PUBLIC_BACKEND_URL}/api/v1/project/${projectId}`, - { - headers: { - Authorization: `Bearer ${token?.replace(/"/g, "")}`, - }, - } + setLowBatteryCardData((prev) => { + const count = updatedTrashbinData.reduce( + (acc, item) => (item.batteryLevel < batteryThresholds[1] ? acc + 1 : acc), + 0 ); + return { ...prev, amount: count.toString() }; + }); + + setBrokenSensorsCardData((prev) => { + const oneWeekAgo = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000); + const count = updatedTrashbinData.filter( + (item) => new Date(item.updatedAt) < oneWeekAgo + ).length; + return { ...prev, amount: count.toString() }; + }); + } catch (error) { + console.error("Error fetching data:", error); + } + }; + + fetchData(); +}, []); - setNearlyFullCardData((prev) => { - const count = transformedTrashbinData.reduce( - (acc, item) => - item.fillLevel > projectResponse.data.project.preferences.fillThresholds[1] - ? acc + 1 - : acc, - 0 - ); - return { ...prev, amount: count.toString() }; - }); - - setLowBatteryCardData((prev) => { - const count = transformedTrashbinData.reduce( - (acc, item) => - item.batteryLevel < projectResponse.data.project.preferences.batteryThresholds[1] - ? acc + 1 - : acc, - 0 - ); - return { ...prev, amount: count.toString() }; - }); - - setBrokenSensorsCardData((prev) => { - const oneWeekAgo = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000); - const count = transformedTrashbinData.filter( - (item) => new Date(item.updatedAt) < oneWeekAgo - ).length; - return { ...prev, amount: count.toString() }; - }); - } catch (error) { - console.error("Error fetching data:", error); - } - }; - fetchData(); - }, []); return (
diff --git a/app/projects/[city]/trash/route/page.tsx b/app/projects/[city]/trash/route/page.tsx index c4a88ea..da10f55 100644 --- a/app/projects/[city]/trash/route/page.tsx +++ b/app/projects/[city]/trash/route/page.tsx @@ -16,14 +16,6 @@ import LoadingComponent from '@/components/LoadingComponent'; import { Trashbin } from '@/app/types'; import { Copy, Info } from 'lucide-react'; import {useTranslation} from '@/lib/TranslationContext' -import { map } from 'd3'; -// import { Input } from "@/components/ui/input"; -// import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; - -// Bins currently always assigned to a single collector -// Treated like a boolean for now: assigned or not assigned - - const headerSortButton = (column: any, displayname: string) => { return ( diff --git a/components/Heatmap/Heatmap.tsx b/components/Heatmap/Heatmap.tsx index 399c456..773aab4 100644 --- a/components/Heatmap/Heatmap.tsx +++ b/components/Heatmap/Heatmap.tsx @@ -26,7 +26,7 @@ export type InteractionData = { value: number | null; }; -const YAxis = ({ yGroups, height }: { yGroups: string[], height: number }) => { +const YAxis = ({ yGroups = [], height }: { yGroups: string[]; height: number }) => { const yScale = d3 .scaleBand() .range([0, height - MARGIN.top - MARGIN.bottom]) @@ -34,15 +34,15 @@ const YAxis = ({ yGroups, height }: { yGroups: string[], height: number }) => { .padding(0.1); const yLabels = yGroups.map((name, i) => { - const yPos = yScale(name); // Calculate yPos using yScale with the current group name + const yPos = yScale(name); if (yPos === undefined) return null; // Guard against undefined yPos - const displayText = `${Number(name)-25}-${name}%`; + const displayText = `${Number(name) - 25}-${name}%`; return ( { ); }; + export const Heatmap = ({ data }: HeatmapProps) => { const [hoveredCell, setHoveredCell] = useState(null); const [scaleBandWidth, setScaleBandWidth] = useState(0); const scrollableDivRef = useRef(null); - const maxAmount = Math.max(...data.map(obj => obj.amount)); - const thresholds = [0, Math.ceil(maxAmount/5), Math.ceil(maxAmount*2/5), Math.ceil(maxAmount*3/5), Math.ceil(maxAmount*4/5), Math.ceil(maxAmount)]; - const colorScale = d3.scaleLinear() - .domain(thresholds) - .range(COLORS); + const maxAmount = data.length ? Math.max(...data.map((obj) => obj.amount)) : 0; +const thresholds = maxAmount + ? [0, Math.ceil(maxAmount / 5), Math.ceil((maxAmount * 2) / 5), Math.ceil((maxAmount * 3) / 5), Math.ceil((maxAmount * 4) / 5), Math.ceil(maxAmount)] + : [0, 1, 2, 3, 4, 5]; +const colorScale = d3 + .scaleLinear() + .domain(thresholds) + .range(COLORS); const allYGroups = Array.from(new Set(data.map(d => d.percentage))) .sort((a, b) => b - a) @@ -78,27 +82,36 @@ export const Heatmap = ({ data }: HeatmapProps) => { // Scroll to the right when the component is mounted to see the latest data useEffect(() => { - if (scrollableDivRef.current) { - scrollableDivRef.current.scrollLeft = scrollableDivRef.current.scrollWidth + 1000; + if (!data.length) { + setScaleBandWidth(0); + return; } - const dates = data.map(r => new Date(r.time).setHours(0,0,0,0)); + + const dates = data.map((r) => new Date(r.time).setHours(0, 0, 0, 0)); const startDate = new Date(Math.min(...dates)); const endDate = new Date(Math.max(...dates)); - setScaleBandWidth((endDate.getTime()-startDate.getTime())/86400000); + + // Ensure valid date range before calculating scaleBandWidth + if (!isNaN(startDate.getTime()) && !isNaN(endDate.getTime())) { + setScaleBandWidth((endDate.getTime() - startDate.getTime()) / 86400000); + } else { + setScaleBandWidth(0); + } }, [data]); - + return (
- + Date: Fri, 6 Dec 2024 16:40:12 +0100 Subject: [PATCH 39/74] some buttons green and only selected icon for routing --- app/projects/[city]/trash/map/page.tsx | 1 + app/projects/[city]/trash/route/page.tsx | 5 +-- components/Map.tsx | 39 ++++++++++++------------ 3 files changed, 24 insertions(+), 21 deletions(-) diff --git a/app/projects/[city]/trash/map/page.tsx b/app/projects/[city]/trash/map/page.tsx index 0b61053..9f70d14 100644 --- a/app/projects/[city]/trash/map/page.tsx +++ b/app/projects/[city]/trash/map/page.tsx @@ -24,6 +24,7 @@ const MapPage = () => { const city = localStorage.getItem("cityName"); const type = localStorage.getItem("projectType"); router.push(`/projects/${city}/${type}/trashbins/${trashbin.identifier}`); + return false; }; useEffect(() => { diff --git a/app/projects/[city]/trash/route/page.tsx b/app/projects/[city]/trash/route/page.tsx index da10f55..3539ac8 100644 --- a/app/projects/[city]/trash/route/page.tsx +++ b/app/projects/[city]/trash/route/page.tsx @@ -134,6 +134,7 @@ const RoutePlanning = () => { if (prevSelected.some((bin) => bin.identifier === trashbin.identifier)) return prevSelected.filter((bin) => bin.identifier !== trashbin.identifier); else return [...prevSelected, trashbin]; }); + return true; }, []); // Fetch optimized route from OSRM Trip Service @@ -261,10 +262,10 @@ const RoutePlanning = () => {

{t("menu.select_bins_instruction")}

- -
)}
- + setEmail(e.target.value)} onKeyDown={handleKeyDown} /> diff --git a/app/settings/page.tsx b/app/settings/page.tsx index 9b3750c..eac8b0c 100644 --- a/app/settings/page.tsx +++ b/app/settings/page.tsx @@ -17,13 +17,13 @@ export default function Component() { window.location.href = '/login'; // Redirect to the login page (where the authToken is cleared) } - // TODO: Make it more robust by fetching the email by API, not storing it in local storage + // TODO: Make it more robust by fetching the name by API, not storing it in local storage const getEmail = (): string => { if (typeof window !== 'undefined') { - const email = localStorage.getItem('email'); // Safe to use localStorage here - if (email) return email; + const name = localStorage.getItem('name'); // Safe to use localStorage here + if (name) return name; } - return 'Email not found'; + return 'name'; }; return ( diff --git a/lib/locales/de.json b/lib/locales/de.json index 275baf9..47f68ec 100644 --- a/lib/locales/de.json +++ b/lib/locales/de.json @@ -82,9 +82,9 @@ }, "login": { "title": "Anmeldung", - "description": "Geben Sie Ihre E-Mail-Adresse und Ihr Passwort ein, um sich bei Ihrem Konto anzumelden", - "email": "E-Mail", - "emailPlaceholder": "Ihre E-Mail-Adresse", + "description": "Geben Sie Ihre Name und Ihr Passwort ein, um sich bei Ihrem Konto anzumelden", + "name": "Name", + "emailPlaceholder": "Ihre Name", "password": "Passwort", "passwordPlaceholder": "Ihr Passwort", "loginButton": "Anmelden" diff --git a/lib/locales/en.json b/lib/locales/en.json index d90b954..412e52e 100644 --- a/lib/locales/en.json +++ b/lib/locales/en.json @@ -82,9 +82,9 @@ }, "login": { "title": "Login", - "description": "Enter your email and password to login to your account", - "email": "Email", - "emailPlaceholder": "Your email address", + "description": "Enter your name and password to login to your account", + "name": "Name", + "emailPlaceholder": "Your name", "password": "Password", "passwordPlaceholder": "Your password", "loginButton": "Login" From 50c93251287ed5230928ba20ec84bf31f9d85ce5 Mon Sep 17 00:00:00 2001 From: shadiamanan Date: Fri, 20 Dec 2024 14:23:38 +0100 Subject: [PATCH 48/74] remove menu --- components/SideNavbar.tsx | 5 ----- 1 file changed, 5 deletions(-) diff --git a/components/SideNavbar.tsx b/components/SideNavbar.tsx index 816a706..43b30ac 100644 --- a/components/SideNavbar.tsx +++ b/components/SideNavbar.tsx @@ -134,11 +134,6 @@ export default function SideNavbar() { )} {dataLinks.length > 0 && (
- {!isCollapsed && !mobileWidth && ( -

- {t("menu.data")} {/* Translated heading */} -

- )}