From ad5e50d052bdf63ba14b77f170158f7d4fda12e4 Mon Sep 17 00:00:00 2001 From: Mitchell Magro Date: Tue, 12 Aug 2025 08:27:37 +0200 Subject: [PATCH] Added last 5 deposit and withdrawal modal --- app/api/dashboard/approve/mockData.ts | 57 +++ .../transactions/deposits/mockData.ts | 135 +++--- .../dashboard/transactionsHistory/mockData.ts | 65 +++ .../dashboard/transactionsHistory/route.ts | 20 + app/components/HistoryModal/HistoryModal.tsx | 230 ++++++++++ app/features/DataTable/DataTable.tsx | 69 +-- app/features/DataTable/StatusChangeDialog.tsx | 12 +- app/features/Pages/Approve/Approve.tsx | 325 ++++++++++---- app/services/transactionsHistory.ts | 22 + yarn.lock | 417 ++++++++++++++++-- 10 files changed, 1138 insertions(+), 214 deletions(-) create mode 100644 app/api/dashboard/transactionsHistory/mockData.ts create mode 100644 app/api/dashboard/transactionsHistory/route.ts create mode 100644 app/components/HistoryModal/HistoryModal.tsx create mode 100644 app/services/transactionsHistory.ts diff --git a/app/api/dashboard/approve/mockData.ts b/app/api/dashboard/approve/mockData.ts index 8805e9a..99ba823 100644 --- a/app/api/dashboard/approve/mockData.ts +++ b/app/api/dashboard/approve/mockData.ts @@ -6,6 +6,10 @@ type UserRow = { txId: string; userEmail: string; kycStatus: string; + amount: number; + paymentMethod: string; + currency: string; + status: string; }; export const approveRows: UserRow[] = [ @@ -15,6 +19,10 @@ export const approveRows: UserRow[] = [ txId: "1049078821", userEmail: "dhkheni1@yopmail.com", kycStatus: "N/A", + amount: 1000, + paymentMethod: "Credit Card", + currency: "USD", + status: "Pending", }, { id: 12, @@ -22,6 +30,10 @@ export const approveRows: UserRow[] = [ txId: "1049078822", userEmail: "dhkheni2@yopmail.com", kycStatus: "Pending", + amount: 1000, + paymentMethod: "Credit Card", + currency: "USD", + status: "Pending", }, { id: 11, @@ -29,6 +41,10 @@ export const approveRows: UserRow[] = [ txId: "1049078822", userEmail: "dhkheni2@yopmail.com", kycStatus: "Pending", + amount: 1000, + paymentMethod: "Credit Card", + currency: "USD", + status: "Pending", }, { id: 10, @@ -36,6 +52,10 @@ export const approveRows: UserRow[] = [ txId: "1049078822", userEmail: "dhkheni2@yopmail.com", kycStatus: "Pending", + amount: 1000, + paymentMethod: "Credit Card", + currency: "USD", + status: "Pending", }, { id: 1, @@ -43,6 +63,10 @@ export const approveRows: UserRow[] = [ txId: "1049078822", userEmail: "dhkheni2@yopmail.com", kycStatus: "Pending", + amount: 1000, + paymentMethod: "Credit Card", + currency: "USD", + status: "Pending", }, { id: 2, @@ -50,6 +74,10 @@ export const approveRows: UserRow[] = [ txId: "1049078822", userEmail: "dhkheni2@yopmail.com", kycStatus: "Pending", + amount: 1000, + paymentMethod: "Credit Card", + currency: "USD", + status: "Pending", }, { id: 3, @@ -57,6 +85,10 @@ export const approveRows: UserRow[] = [ txId: "1049078822", userEmail: "dhkheni2@yopmail.com", kycStatus: "Pending", + amount: 1000, + paymentMethod: "Credit Card", + currency: "USD", + status: "Pending", }, { id: 4, @@ -64,6 +96,10 @@ export const approveRows: UserRow[] = [ txId: "1049078822", userEmail: "dhkheni2@yopmail.com", kycStatus: "Pending", + amount: 1000, + paymentMethod: "Credit Card", + currency: "USD", + status: "Pending", }, { id: 5, @@ -71,6 +107,10 @@ export const approveRows: UserRow[] = [ txId: "1049078822", userEmail: "dhkheni2@yopmail.com", kycStatus: "Pending", + amount: 1000, + paymentMethod: "Credit Card", + currency: "USD", + status: "Pending", }, { id: 6, @@ -78,6 +118,10 @@ export const approveRows: UserRow[] = [ txId: "1049078822", userEmail: "dhkheni2@yopmail.com", kycStatus: "Pending", + amount: 1000, + paymentMethod: "Credit Card", + currency: "USD", + status: "Pending", }, { id: 7, @@ -85,6 +129,10 @@ export const approveRows: UserRow[] = [ txId: "1049078822", userEmail: "dhkheni2@yopmail.com", kycStatus: "Pending", + amount: 1000, + paymentMethod: "Credit Card", + currency: "USD", + status: "Pending", }, { id: 8, @@ -92,14 +140,23 @@ export const approveRows: UserRow[] = [ txId: "1049078822", userEmail: "dhkheni2@yopmail.com", kycStatus: "Pending", + amount: 1000, + paymentMethod: "Credit Card", + currency: "USD", + status: "Pending", }, ]; export const approveColumns: TableColumn[] = [ + { field: "id", headerName: "User ID" }, { field: "merchantId", headerName: "Merchant ID" }, { field: "txId", headerName: "Transaction ID" }, { field: "userEmail", headerName: "User Email" }, { field: "kycStatus", headerName: "KYC Status" }, + { field: "amount", headerName: "Amount" }, + { field: "paymentMethod", headerName: "Payment Method" }, + { field: "currency", headerName: "Currency" }, + { field: "status", headerName: "Status" }, ]; export const approveActions = [ diff --git a/app/api/dashboard/transactions/deposits/mockData.ts b/app/api/dashboard/transactions/deposits/mockData.ts index 720122f..2ba30c8 100644 --- a/app/api/dashboard/transactions/deposits/mockData.ts +++ b/app/api/dashboard/transactions/deposits/mockData.ts @@ -8,12 +8,12 @@ export const depositTransactionDummyData = [ transactionId: 1049131973, depositMethod: "Card", status: "Completed", - // options: [ - // { value: "Pending", label: "Pending" }, - // { value: "Completed", label: "Completed" }, - // { value: "Inprogress", label: "Inprogress" }, - // { value: "Error", label: "Error" }, - // ], + options: [ + { value: "Pending", label: "Pending" }, + { value: "Completed", label: "Completed" }, + { value: "Inprogress", label: "Inprogress" }, + { value: "Error", label: "Error" }, + ], amount: 4000, currency: "EUR", dateTime: "2025-06-18 10:10:30", @@ -27,12 +27,12 @@ export const depositTransactionDummyData = [ transactionId: 1049131973, depositMethod: "Card", status: "Completed", - // options: [ - // { value: "Pending", label: "Pending" }, - // { value: "Completed", label: "Completed" }, - // { value: "Inprogress", label: "Inprogress" }, - // { value: "Error", label: "Error" }, - // ], + options: [ + { value: "Pending", label: "Pending" }, + { value: "Completed", label: "Completed" }, + { value: "Inprogress", label: "Inprogress" }, + { value: "Error", label: "Error" }, + ], amount: 4000, currency: "EUR", dateTime: "2025-06-18 10:10:30", @@ -46,12 +46,12 @@ export const depositTransactionDummyData = [ transactionId: 1049131973, depositMethod: "Card", status: "Completed", - // options: [ - // { value: "Pending", label: "Pending" }, - // { value: "Completed", label: "Completed" }, - // { value: "Inprogress", label: "Inprogress" }, - // { value: "Error", label: "Error" }, - // ], + options: [ + { value: "Pending", label: "Pending" }, + { value: "Completed", label: "Completed" }, + { value: "Inprogress", label: "Inprogress" }, + { value: "Error", label: "Error" }, + ], amount: 4000, currency: "EUR", dateTime: "2025-06-18 10:10:30", @@ -65,12 +65,12 @@ export const depositTransactionDummyData = [ transactionId: 1049136973, depositMethod: "Card", status: "Completed", - // options: [ - // { value: "Pending", label: "Pending" }, - // { value: "Completed", label: "Completed" }, - // { value: "Inprogress", label: "Inprogress" }, - // { value: "Error", label: "Error" }, - // ], + options: [ + { value: "Pending", label: "Pending" }, + { value: "Completed", label: "Completed" }, + { value: "Inprogress", label: "Inprogress" }, + { value: "Error", label: "Error" }, + ], amount: 4000, currency: "EUR", dateTime: "2025-06-18 10:10:30", @@ -84,12 +84,12 @@ export const depositTransactionDummyData = [ transactionId: 1049131973, depositMethod: "Card", status: "Completed", - // options: [ - // { value: "Pending", label: "Pending" }, - // { value: "Completed", label: "Completed" }, - // { value: "Inprogress", label: "Inprogress" }, - // { value: "Error", label: "Error" }, - // ], + options: [ + { value: "Pending", label: "Pending" }, + { value: "Completed", label: "Completed" }, + { value: "Inprogress", label: "Inprogress" }, + { value: "Error", label: "Error" }, + ], amount: 4000, currency: "EUR", dateTime: "2025-06-18 10:10:30", @@ -103,12 +103,12 @@ export const depositTransactionDummyData = [ transactionId: 1049131973, depositMethod: "Card", status: "Pending", - // options: [ - // { value: "Pending", label: "Pending" }, - // { value: "Completed", label: "Completed" }, - // { value: "Inprogress", label: "Inprogress" }, - // { value: "Error", label: "Error" }, - // ], + options: [ + { value: "Pending", label: "Pending" }, + { value: "Completed", label: "Completed" }, + { value: "Inprogress", label: "Inprogress" }, + { value: "Error", label: "Error" }, + ], amount: 4000, currency: "EUR", dateTime: "2025-06-18 10:10:30", @@ -122,12 +122,12 @@ export const depositTransactionDummyData = [ transactionId: 1049136973, depositMethod: "Card", status: "Pending", - // options: [ - // { value: "Pending", label: "Pending" }, - // { value: "Completed", label: "Completed" }, - // { value: "Inprogress", label: "Inprogress" }, - // { value: "Error", label: "Error" }, - // ], + options: [ + { value: "Pending", label: "Pending" }, + { value: "Completed", label: "Completed" }, + { value: "Inprogress", label: "Inprogress" }, + { value: "Error", label: "Error" }, + ], amount: 4000, currency: "EUR", dateTime: "2025-06-18 10:10:30", @@ -141,12 +141,12 @@ export const depositTransactionDummyData = [ transactionId: 1049131973, depositMethod: "Card", status: "Pending", - // options: [ - // { value: "Pending", label: "Pending" }, - // { value: "Completed", label: "Completed" }, - // { value: "Inprogress", label: "Inprogress" }, - // { value: "Error", label: "Error" }, - // ], + options: [ + { value: "Pending", label: "Pending" }, + { value: "Completed", label: "Completed" }, + { value: "Inprogress", label: "Inprogress" }, + { value: "Error", label: "Error" }, + ], amount: 4000, currency: "EUR", dateTime: "2025-06-12 10:10:30", @@ -160,12 +160,12 @@ export const depositTransactionDummyData = [ transactionId: 1049131973, depositMethod: "Bank Transfer", status: "Inprogress", - // options: [ - // { value: "Pending", label: "Pending" }, - // { value: "Completed", label: "Completed" }, - // { value: "Inprogress", label: "Inprogress" }, - // { value: "Error", label: "Error" }, - // ], + options: [ + { value: "Pending", label: "Pending" }, + { value: "Completed", label: "Completed" }, + { value: "Inprogress", label: "Inprogress" }, + { value: "Error", label: "Error" }, + ], amount: 4000, currency: "EUR", dateTime: "2025-06-17 10:10:30", @@ -179,12 +179,12 @@ export const depositTransactionDummyData = [ transactionId: 1049131973, depositMethod: "Bank Transfer", status: "Inprogress", - // options: [ - // { value: "Pending", label: "Pending" }, - // { value: "Completed", label: "Completed" }, - // { value: "Inprogress", label: "Inprogress" }, - // { value: "Error", label: "Error" }, - // ], + options: [ + { value: "Pending", label: "Pending" }, + { value: "Completed", label: "Completed" }, + { value: "Inprogress", label: "Inprogress" }, + { value: "Error", label: "Error" }, + ], amount: 4000, currency: "EUR", dateTime: "2025-06-17 10:10:30", @@ -198,12 +198,12 @@ export const depositTransactionDummyData = [ transactionId: 1049131973, depositMethod: "Bank Transfer", status: "Error", - // options: [ - // { value: "Pending", label: "Pending" }, - // { value: "Completed", label: "Completed" }, - // { value: "Inprogress", label: "Inprogress" }, - // { value: "Error", label: "Error" }, - // ], + options: [ + { value: "Pending", label: "Pending" }, + { value: "Completed", label: "Completed" }, + { value: "Inprogress", label: "Inprogress" }, + { value: "Error", label: "Error" }, + ], amount: 4000, currency: "EUR", dateTime: "2025-06-17 10:10:30", @@ -218,7 +218,7 @@ export const depositTransactionsColumns: GridColDef[] = [ { field: "transactionId", headerName: "Transaction ID", width: 130 }, { field: "depositMethod", headerName: "Deposit Method", width: 130 }, { field: "status", headerName: "Status", width: 130 }, - // { field: "actions", headerName: "Actions", width: 150 }, + { field: "actions", headerName: "Actions", width: 150 }, { field: "amount", headerName: "Amount", width: 130 }, { field: "currency", headerName: "Currency", width: 130 }, { field: "dateTime", headerName: "Date / Time", width: 130 }, @@ -234,7 +234,6 @@ export const depositTransactionsExtraColumns: GridColDef[] = [ // export const extraColumns = ["currency", "errorInfo", "fraudScore"] - export const depositTransactionsSearchLabels = [ { label: "User", field: "userId", type: "text" }, { label: "Transaction ID", field: "transactionId", type: "text" }, diff --git a/app/api/dashboard/transactionsHistory/mockData.ts b/app/api/dashboard/transactionsHistory/mockData.ts new file mode 100644 index 0000000..739dcf5 --- /dev/null +++ b/app/api/dashboard/transactionsHistory/mockData.ts @@ -0,0 +1,65 @@ + interface Transaction { + userId: number | string; + date: string; + method: string; + amount: number | string; + status: string; +} + + export const deposits: Transaction[] = [ + { userId: 17, date: "2025-08-01 10:10", method: "CC", amount: 120, status: "approved" }, + { + userId: 17, + date: "2025-07-28 14:35", + method: "Bank Transfer", + amount: 250, + status: "approved", + }, + { + userId: 17, + date: "2025-07-20 09:05", + method: "PayPal", + amount: 75, + status: "pending", + }, + { userId: 17, + date: "2025-07-11 17:12", method: "CC", amount: 300, status: "rejected" }, + { userId: 17, + date: "2025-07-01 12:42", method: "CC", amount: 180, status: "approved" }, + ]; + + export const withdrawals: Transaction[] = [ + { + userId: 17, + date: "2025-08-02 11:20", + method: "Crypto", + amount: 95, + status: "processing", + }, + { + userId: 17, + date: "2025-07-29 16:45", + method: "Bank Transfer", + amount: 220, + status: "approved", + }, + { + userId: 17, + date: "2025-07-21 15:10", + method: "eWallet", + amount: 60, + status: "pending", + }, + { userId: 17, + date: "2025-07-12 13:33", + method: "Crypto", + amount: 120, + status: "approved", + }, + { userId: 17, + date: "2025-07-03 08:50", + method: "Bank Transfer", + amount: 150, + status: "rejected", + }, + ]; \ No newline at end of file diff --git a/app/api/dashboard/transactionsHistory/route.ts b/app/api/dashboard/transactionsHistory/route.ts new file mode 100644 index 0000000..89c5980 --- /dev/null +++ b/app/api/dashboard/transactionsHistory/route.ts @@ -0,0 +1,20 @@ +import { NextRequest, NextResponse } from "next/server"; +import { deposits, withdrawals } from "./mockData"; + +export async function GET(request: NextRequest) { + const { searchParams } = new URL(request.url); + const userId = searchParams.get("userId"); + let filteredDeposits = [...deposits]; + let filteredwithdrawals = [...withdrawals]; + + if( userId ){ + filteredDeposits = filteredDeposits.filter((item) => item.userId.toString() === userId.toString()) + filteredwithdrawals = filteredwithdrawals.filter((item) => item.userId.toString() === userId.toString()) + } + + + return NextResponse.json({ + deposits: filteredDeposits, + withdrawals: filteredwithdrawals, + }); +} diff --git a/app/components/HistoryModal/HistoryModal.tsx b/app/components/HistoryModal/HistoryModal.tsx new file mode 100644 index 0000000..98b77ec --- /dev/null +++ b/app/components/HistoryModal/HistoryModal.tsx @@ -0,0 +1,230 @@ +import * as React from "react"; +import { + Dialog, + DialogTitle, + DialogContent, + IconButton, + Table, + TableBody, + TableCell, + TableContainer, + TableHead, + TableRow, + Typography, + Paper, + Box, +} from "@mui/material"; +import CloseIcon from "@mui/icons-material/Close"; + +interface Transaction { + date: string; + method: string; + amount: number | string; + status: string; +} + +interface TransactionHistoryModalProps { + open: boolean; + onClose: () => void; + deposits?: Transaction[]; + withdrawals?: Transaction[]; +} + +/** + * TransactionHistoryModal + * + * Props: + * - open: boolean + * - onClose: () => void + * - deposits: Array<{ date: string; method: string; amount: number | string; status: string }> + * - withdrawals: Array<{ date: string; method: string; amount: number | string; status: string }> + */ +export function HistoryModal({ + open, + onClose, + deposits = [], + withdrawals = [], +}: TransactionHistoryModalProps) { + const fmt = (n: number | string): string => + typeof n === "number" + ? n.toLocaleString(undefined, { style: "currency", currency: "EUR" }) + : n; + + return ( + + + + History + + + + + + + + + + + + Last 5 Deposits + + + + + + Date/Time + Deposit Method + Amount + Status + + + + {deposits.length === 0 ? ( + + + + No deposits yet + + + + ) : ( + deposits.slice(0, 5).map((row, idx) => ( + + {row.date} + {row.method} + {fmt(row.amount)} + {row.status} + + )) + )} + +
+
+
+ + + + Last 5 Withdrawals + + + + + + Date/Time + Withdrawal Method + Amount + Status + + + + {withdrawals.length === 0 ? ( + + + + No withdrawals yet + + + + ) : ( + withdrawals.slice(0, 5).map((row, idx) => ( + + {row.date} + {row.method} + {fmt(row.amount)} + {row.status} + + )) + )} + +
+
+
+
+
+
+
+ ); +} + +export default function TransactionHistoryModalDemo() { + const [open, setOpen] = React.useState(false); + + const deposits: Transaction[] = [ + { date: "2025-08-01 10:10", method: "CC", amount: 120, status: "approved" }, + { + date: "2025-07-28 14:35", + method: "Bank Transfer", + amount: 250, + status: "approved", + }, + { + date: "2025-07-20 09:05", + method: "PayPal", + amount: 75, + status: "pending", + }, + { date: "2025-07-11 17:12", method: "CC", amount: 300, status: "rejected" }, + { date: "2025-07-01 12:42", method: "CC", amount: 180, status: "approved" }, + ]; + + const withdrawals: Transaction[] = [ + { + date: "2025-08-02 11:20", + method: "Crypto", + amount: 95, + status: "processing", + }, + { + date: "2025-07-29 16:45", + method: "Bank Transfer", + amount: 220, + status: "approved", + }, + { + date: "2025-07-21 15:10", + method: "eWallet", + amount: 60, + status: "pending", + }, + { + date: "2025-07-12 13:33", + method: "Crypto", + amount: 120, + status: "approved", + }, + { + date: "2025-07-03 08:50", + method: "Bank Transfer", + amount: 150, + status: "rejected", + }, + ]; + + return ( +
+ + setOpen(false)} + deposits={deposits} + withdrawals={withdrawals} + /> +
+ ); +} diff --git a/app/features/DataTable/DataTable.tsx b/app/features/DataTable/DataTable.tsx index 5dfdb81..34b08e8 100644 --- a/app/features/DataTable/DataTable.tsx +++ b/app/features/DataTable/DataTable.tsx @@ -130,34 +130,47 @@ const DataTable = ({ }; } - if (col.field === "userId") { - return { - ...col, - renderCell: (params: GridRenderCellParams) => ( - - {params.value} - e.stopPropagation()} - sx={{ p: 0.5 }} - > - - - - ), - }; - } +if (col.field === "userId") { + return { + ...col, + headerAlign: "center", + align: "center", + renderCell: (params: GridRenderCellParams) => ( + e.stopPropagation()} // keep row click from firing when clicking inside + > + + {params.value} + + + e.stopPropagation()} + > + + + + ), + }; +} + if (col.field === "actions") { return { diff --git a/app/features/DataTable/StatusChangeDialog.tsx b/app/features/DataTable/StatusChangeDialog.tsx index 6b3e127..32e773e 100644 --- a/app/features/DataTable/StatusChangeDialog.tsx +++ b/app/features/DataTable/StatusChangeDialog.tsx @@ -6,6 +6,7 @@ import { Button, TextField, } from "@mui/material"; +import { useState, useEffect } from "react"; interface StatusChangeDialogProps { open: boolean; @@ -24,6 +25,14 @@ const StatusChangeDialog = ({ handleClose, handleSave, }: StatusChangeDialogProps) => { + const [isValid, setIsValid] = useState(false); + + useEffect(() => { + const noSpaces = reason.replace(/\s/g, ""); // remove all spaces + const length = noSpaces.length; + setIsValid(length >= 12 && length <= 400); + }, [reason]); + return ( Change Status @@ -38,12 +47,13 @@ const StatusChangeDialog = ({ rows={4} value={reason} onChange={(e) => setReason(e.target.value)} + helperText="Reason must be between 12 and 400 characters" sx={{ mt: 2 }} /> - diff --git a/app/features/Pages/Approve/Approve.tsx b/app/features/Pages/Approve/Approve.tsx index 310ea9c..0bc05dc 100644 --- a/app/features/Pages/Approve/Approve.tsx +++ b/app/features/Pages/Approve/Approve.tsx @@ -18,10 +18,15 @@ import { Select, FormControl, SelectChangeEvent, - debounce, } from "@mui/material"; +import { debounce } from "@mui/material/utils"; import SearchIcon from "@mui/icons-material/Search"; +import OpenInNewIcon from "@mui/icons-material/OpenInNew"; +import AddIcon from "@mui/icons-material/Add"; import { useRouter, useSearchParams } from "next/navigation"; +import StatusChangeDialog from "../../DataTable/StatusChangeDialog"; +import { HistoryModal } from "@/app/components/HistoryModal/HistoryModal"; +import { getTransactionsHistory } from "@/app/services/transactionsHistory"; export interface TableColumn { field: keyof T | string; @@ -42,6 +47,12 @@ interface DynamicTableProps { }; searchParamKey?: string; } +interface Transaction { + date: string; + method: string; + amount: number | string; + status: string; +} export function ApproveTable({ data, @@ -54,6 +65,18 @@ export function ApproveTable({ const [selected, setSelected] = useState<(string | number)[]>([]); const [search, setSearch] = useState(""); + const [modalOpen, setModalOpen] = useState(false); + const [historyModal, setHistoryModal] = useState(false); + const [reason, setReason] = useState(""); + const [action, setAction] = useState(""); + const [transactionsHistoryResponse, setTransactionsHistoryResponse] = + useState<{ + deposits: Transaction[]; + withdrawals: Transaction[]; + }>({ + deposits: [], + withdrawals: [], + }); useEffect(() => { const urlValue = searchParams.get(searchParamKey) ?? ""; @@ -88,104 +111,246 @@ export function ApproveTable({ setSelected(checked ? rows.map((r) => r.id) : []); }; - const [action, setAction] = useState(""); const handleActionChange = (e: SelectChangeEvent) => { const selectedAction = e.target.value; setAction(selectedAction); - if (selected.length > 0) { + setModalOpen(true); console.log("Selected Ids", selected); console.log("Selected Action:", selectedAction); } else { - console.warn("No rows selected for action:", selectedAction); + alert("No rows selected for this action!"); } }; + const handleStatusSave = () => { + console.log( + `Status changed for row with ID ${selected}. New status: ${action}. Reason: ${reason}`, + ); + setModalOpen(false); + setReason(""); + }; + + // NEW: plus button handler + const handlePlusClick = async (row: T) => { + console.log("Plus clicked for", row); + const params = `userId=${row.id}`; + const response = await getTransactionsHistory({ query: params }); + setTransactionsHistoryResponse(response); + setHistoryModal(true); + }; + + const stickySecondColLeft = 48; + return ( - - - - - - - - ), - }} - /> + <> + + + + + + + + ), + }} + /> - - - Action - - + + + Action + + + - - - - - - - 0} - indeterminate={ - selected.length > 0 && selected.length < rows.length - } - onChange={(e) => handleToggleAll(e.target.checked)} - /> - - {columns.map((col, i) => ( - {col.headerName} - ))} - - - - {rows.map((row, idx) => ( - - + +
+ + + {/* sticky select-all checkbox */} + - handleCheckboxChange(row.id, e.target.checked) + checked={selected.length === rows.length && rows.length > 0} + indeterminate={ + selected.length > 0 && selected.length < rows.length } + onChange={(e) => handleToggleAll(e.target.checked)} /> - {columns.map((col, colIdx) => ( - - {col.render - ? col.render(row[col.field as keyof T], row) - : (row[col.field as keyof T] as React.ReactNode)} - + + {/* NEW: sticky plus column header (empty) */} + + + {columns.map((col, i) => ( + {col.headerName} ))} - ))} - -
-
-
+ + + + {rows.map((row, idx) => ( + + {/* sticky checkbox per-row */} + + + handleCheckboxChange(row.id, e.target.checked) + } + /> + + + {/* NEW: sticky plus button cell */} + + handlePlusClick(row)} + sx={{ p: 0.5 }} + aria-label="expand" + > + + + + + {columns.map((col, colIdx) => { + const value = row[col.field as keyof T]; + + if (col.field === "id") { + return ( + + + {value as React.ReactNode} + + + + + + + ); + } + + return ( + + {value as React.ReactNode} + + ); + })} + + ))} + + + +
+ + setModalOpen(false)} + handleSave={handleStatusSave} + /> + { + setTransactionsHistoryResponse({ deposits: [], withdrawals: [] }); + setHistoryModal(false); + }} + deposits={transactionsHistoryResponse.deposits} + withdrawals={transactionsHistoryResponse.withdrawals} + /> + ); } diff --git a/app/services/transactionsHistory.ts b/app/services/transactionsHistory.ts new file mode 100644 index 0000000..7e77156 --- /dev/null +++ b/app/services/transactionsHistory.ts @@ -0,0 +1,22 @@ +export async function getTransactionsHistory({ + query, +}: { + query: string; +}) { + const res = await fetch( + `http://localhost:3000/api/dashboard/transactionsHistory?${query}`, + { + cache: "no-store", + }, + ); + + if (!res.ok) { + // Handle error from the API + const errorData = await res + .json() + .catch(() => ({ message: "Unknown error" })); + throw new Error(errorData.message || `HTTP error! status: ${res.status}`); + } + + return res.json(); +} diff --git a/yarn.lock b/yarn.lock index 9d82a29..3f0a9f1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -104,6 +104,28 @@ "@types/tough-cookie" "^4.0.5" tough-cookie "^4.1.4" +"@emnapi/core@^1.4.3": + version "1.4.5" + resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.4.5.tgz#bfbb0cbbbb9f96ec4e2c4fd917b7bbe5495ceccb" + integrity sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q== + dependencies: + "@emnapi/wasi-threads" "1.0.4" + tslib "^2.4.0" + +"@emnapi/runtime@^1.4.3": + version "1.4.5" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.4.5.tgz#c67710d0661070f38418b6474584f159de38aba9" + integrity sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg== + dependencies: + tslib "^2.4.0" + +"@emnapi/wasi-threads@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.0.4.tgz#703fc094d969e273b1b71c292523b2f792862bf4" + integrity sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g== + dependencies: + tslib "^2.4.0" + "@emotion/babel-plugin@^11.13.5": version "11.13.5" resolved "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz" @@ -149,7 +171,7 @@ resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz" integrity sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ== -"@emotion/react@^11.0.0-rc.0", "@emotion/react@^11.14.0", "@emotion/react@^11.4.1", "@emotion/react@^11.5.0", "@emotion/react@^11.9.0": +"@emotion/react@^11.14.0": version "11.14.0" resolved "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz" integrity sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA== @@ -179,7 +201,7 @@ resolved "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz" integrity sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg== -"@emotion/styled@^11.14.0", "@emotion/styled@^11.3.0", "@emotion/styled@^11.8.1": +"@emotion/styled@^11.14.0": version "11.14.0" resolved "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.0.tgz" integrity sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA== @@ -312,6 +334,124 @@ resolved "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz" integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== +"@img/sharp-darwin-arm64@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.2.tgz#65049ef7c6be7857da742cd028f97602ce209635" + integrity sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg== + optionalDependencies: + "@img/sharp-libvips-darwin-arm64" "1.1.0" + +"@img/sharp-darwin-x64@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.2.tgz#d37ff7c75c46d5a68a3756e3f1924ef7ca7b285e" + integrity sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g== + optionalDependencies: + "@img/sharp-libvips-darwin-x64" "1.1.0" + +"@img/sharp-libvips-darwin-arm64@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.1.0.tgz#843f7c09c7245dc0d3cfec2b3c83bb08799a704f" + integrity sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA== + +"@img/sharp-libvips-darwin-x64@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.1.0.tgz#1239c24426c06a8e833815562f78047a3bfbaaf8" + integrity sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ== + +"@img/sharp-libvips-linux-arm64@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.1.0.tgz#20d276cefd903ee483f0441ba35961679c286315" + integrity sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew== + +"@img/sharp-libvips-linux-arm@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.1.0.tgz#067c0b566eae8063738cf1b1db8f8a8573b5465c" + integrity sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA== + +"@img/sharp-libvips-linux-ppc64@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.1.0.tgz#682334595f2ca00e0a07a675ba170af165162802" + integrity sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ== + +"@img/sharp-libvips-linux-s390x@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.1.0.tgz#82fcd68444b3666384235279c145c2b28d8ee302" + integrity sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA== + +"@img/sharp-libvips-linux-x64@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.1.0.tgz#65b2b908bf47156b0724fde9095676c83a18cf5a" + integrity sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q== + +"@img/sharp-libvips-linuxmusl-arm64@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.1.0.tgz#72accf924e80b081c8db83b900b444a67c203f01" + integrity sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w== + +"@img/sharp-libvips-linuxmusl-x64@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.1.0.tgz#1fa052737e203f46bf44192acd01f9faf11522d7" + integrity sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A== + +"@img/sharp-linux-arm64@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.2.tgz#c9690fac5f3137eaab3f7ad6065390d10f66f1fa" + integrity sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q== + optionalDependencies: + "@img/sharp-libvips-linux-arm64" "1.1.0" + +"@img/sharp-linux-arm@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.2.tgz#771dd2ec645f85f98441359bfc118afaf38cbd8b" + integrity sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ== + optionalDependencies: + "@img/sharp-libvips-linux-arm" "1.1.0" + +"@img/sharp-linux-s390x@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.2.tgz#82132d158abff57bd90b53574f2865f72f94e6c8" + integrity sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw== + optionalDependencies: + "@img/sharp-libvips-linux-s390x" "1.1.0" + +"@img/sharp-linux-x64@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.2.tgz#d815fb87899d462b28b62a9252ad127f02fe0740" + integrity sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ== + optionalDependencies: + "@img/sharp-libvips-linux-x64" "1.1.0" + +"@img/sharp-linuxmusl-arm64@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.2.tgz#cfac45b2abbc04628f676e123bfe3aeb300266c7" + integrity sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA== + optionalDependencies: + "@img/sharp-libvips-linuxmusl-arm64" "1.1.0" + +"@img/sharp-linuxmusl-x64@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.2.tgz#b876c23ff51d0fb6d9f3b0a07e2f4d1436c203ad" + integrity sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA== + optionalDependencies: + "@img/sharp-libvips-linuxmusl-x64" "1.1.0" + +"@img/sharp-wasm32@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-wasm32/-/sharp-wasm32-0.34.2.tgz#b1dd0bab547dccf517586eb1fa5852160bba3b82" + integrity sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ== + dependencies: + "@emnapi/runtime" "^1.4.3" + +"@img/sharp-win32-arm64@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.2.tgz#f37bee0f60c167f825a09d2b8de6849b823e8b30" + integrity sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ== + +"@img/sharp-win32-ia32@0.34.2": + version "0.34.2" + resolved "https://registry.yarnpkg.com/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.2.tgz#8fc30b6655bc6ff8910344a2020d334aa6361672" + integrity sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw== + "@img/sharp-win32-x64@0.34.2": version "0.34.2" resolved "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.2.tgz" @@ -405,7 +545,7 @@ dependencies: "@babel/runtime" "^7.27.1" -"@mui/material@^5.15.14 || ^6.0.0 || ^7.0.0", "@mui/material@^7.1.2": +"@mui/material@^7.1.2": version "7.1.2" resolved "https://registry.npmjs.org/@mui/material/-/material-7.1.2.tgz" integrity sha512-Z5PYKkA6Kd8vS04zKxJNpwuvt6IoMwqpbidV7RCrRQQKwczIwcNcS8L6GnN4pzFYfEs+N9v6co27DmG07rcnoA== @@ -444,7 +584,7 @@ csstype "^3.1.3" prop-types "^15.8.1" -"@mui/system@^5.15.14 || ^6.0.0 || ^7.0.0", "@mui/system@^7.1.1": +"@mui/system@^7.1.1": version "7.1.1" resolved "https://registry.npmjs.org/@mui/system/-/system-7.1.1.tgz" integrity sha512-Kj1uhiqnj4Zo7PDjAOghtXJtNABunWvhcRU0O7RQJ7WOxeynoH6wXPcilphV8QTFtkKaip8EiNJRiCD+B3eROA== @@ -511,6 +651,15 @@ "@mui/utils" "^7.1.1" reselect "^5.1.1" +"@napi-rs/wasm-runtime@^0.2.11": + version "0.2.12" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz#3e78a8b96e6c33a6c517e1894efbd5385a7cb6f2" + integrity sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ== + dependencies: + "@emnapi/core" "^1.4.3" + "@emnapi/runtime" "^1.4.3" + "@tybys/wasm-util" "^0.10.0" + "@next/env@15.3.3": version "15.3.3" resolved "https://registry.npmjs.org/@next/env/-/env-15.3.3.tgz" @@ -523,6 +672,41 @@ dependencies: fast-glob "3.3.1" +"@next/swc-darwin-arm64@15.3.3": + version "15.3.3" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.3.3.tgz#994de8515cdfb74d337bdad645c33605de44c68b" + integrity sha512-WRJERLuH+O3oYB4yZNVahSVFmtxRNjNF1I1c34tYMoJb0Pve+7/RaLAJJizyYiFhjYNGHRAE1Ri2Fd23zgDqhg== + +"@next/swc-darwin-x64@15.3.3": + version "15.3.3" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-15.3.3.tgz#71588bad245180ffd1af1e1f894477287e739eb0" + integrity sha512-XHdzH/yBc55lu78k/XwtuFR/ZXUTcflpRXcsu0nKmF45U96jt1tsOZhVrn5YH+paw66zOANpOnFQ9i6/j+UYvw== + +"@next/swc-linux-arm64-gnu@15.3.3": + version "15.3.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.3.3.tgz#66a15f749c14f04a89f8c7e21c7a8d343fc34e6e" + integrity sha512-VZ3sYL2LXB8znNGcjhocikEkag/8xiLgnvQts41tq6i+wql63SMS1Q6N8RVXHw5pEUjiof+II3HkDd7GFcgkzw== + +"@next/swc-linux-arm64-musl@15.3.3": + version "15.3.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.3.3.tgz#14bd66213f7f33d6909574750bcb05037221a2ac" + integrity sha512-h6Y1fLU4RWAp1HPNJWDYBQ+e3G7sLckyBXhmH9ajn8l/RSMnhbuPBV/fXmy3muMcVwoJdHL+UtzRzs0nXOf9SA== + +"@next/swc-linux-x64-gnu@15.3.3": + version "15.3.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.3.3.tgz#4a19434545e5e752d9a3ed71f9b34982725f6293" + integrity sha512-jJ8HRiF3N8Zw6hGlytCj5BiHyG/K+fnTKVDEKvUCyiQ/0r5tgwO7OgaRiOjjRoIx2vwLR+Rz8hQoPrnmFbJdfw== + +"@next/swc-linux-x64-musl@15.3.3": + version "15.3.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.3.3.tgz#41ab140dd0a04ab7291adbec5836c1ce251a588c" + integrity sha512-HrUcTr4N+RgiiGn3jjeT6Oo208UT/7BuTr7K0mdKRBtTbT4v9zJqCDKO97DUqqoBK1qyzP1RwvrWTvU6EPh/Cw== + +"@next/swc-win32-arm64-msvc@15.3.3": + version "15.3.3" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.3.3.tgz#fcd1d7e0007b7b73d1acdbf0ad6d91f7aa2deb15" + integrity sha512-SxorONgi6K7ZUysMtRF3mIeHC5aA3IQLmKFQzU0OuhuUYwpOBc1ypaLJLP5Bf3M9k53KUUUj4vTPwzGvl/NwlQ== + "@next/swc-win32-x64-msvc@15.3.3": version "15.3.3" resolved "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.3.3.tgz" @@ -536,7 +720,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -572,6 +756,66 @@ resolved "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz" integrity sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg== +"@parcel/watcher-android-arm64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz#507f836d7e2042f798c7d07ad19c3546f9848ac1" + integrity sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA== + +"@parcel/watcher-darwin-arm64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz#3d26dce38de6590ef79c47ec2c55793c06ad4f67" + integrity sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw== + +"@parcel/watcher-darwin-x64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz#99f3af3869069ccf774e4ddfccf7e64fd2311ef8" + integrity sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg== + +"@parcel/watcher-freebsd-x64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz#14d6857741a9f51dfe51d5b08b7c8afdbc73ad9b" + integrity sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ== + +"@parcel/watcher-linux-arm-glibc@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz#43c3246d6892381db473bb4f663229ad20b609a1" + integrity sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA== + +"@parcel/watcher-linux-arm-musl@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz#663750f7090bb6278d2210de643eb8a3f780d08e" + integrity sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q== + +"@parcel/watcher-linux-arm64-glibc@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz#ba60e1f56977f7e47cd7e31ad65d15fdcbd07e30" + integrity sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w== + +"@parcel/watcher-linux-arm64-musl@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz#f7fbcdff2f04c526f96eac01f97419a6a99855d2" + integrity sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg== + +"@parcel/watcher-linux-x64-glibc@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz#4d2ea0f633eb1917d83d483392ce6181b6a92e4e" + integrity sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A== + +"@parcel/watcher-linux-x64-musl@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz#277b346b05db54f55657301dd77bdf99d63606ee" + integrity sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg== + +"@parcel/watcher-win32-arm64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz#7e9e02a26784d47503de1d10e8eab6cceb524243" + integrity sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw== + +"@parcel/watcher-win32-ia32@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz#2d0f94fa59a873cdc584bf7f6b1dc628ddf976e6" + integrity sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ== + "@parcel/watcher-win32-x64@2.5.1": version "2.5.1" resolved "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz" @@ -650,6 +894,13 @@ dependencies: tslib "^2.8.0" +"@tybys/wasm-util@^0.10.0": + version "0.10.0" + resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.10.0.tgz#2fd3cd754b94b378734ce17058d0507c45c88369" + integrity sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ== + dependencies: + tslib "^2.4.0" + "@types/cookie@^0.6.0": version "0.6.0" resolved "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz" @@ -733,7 +984,7 @@ resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/node@^20", "@types/node@>=18": +"@types/node@^20": version "20.19.1" resolved "https://registry.npmjs.org/@types/node/-/node-20.19.1.tgz" integrity sha512-jJD50LtlD2dodAEO653i3YF04NWak6jN3ky+Ri3Em3mGR39/glWiboM/IePaRbgwSfqM1TpGXfAg8ohn/4dTgA== @@ -778,7 +1029,7 @@ resolved "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz" integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w== -"@types/react@*", "@types/react@^17.0.0 || ^18.0.0 || ^19.0.0", "@types/react@^18.2.25 || ^19", "@types/react@^19", "@types/react@^19.0.0": +"@types/react@*", "@types/react@^19": version "19.1.8" resolved "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz" integrity sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g== @@ -815,7 +1066,7 @@ natural-compare "^1.4.0" ts-api-utils "^2.1.0" -"@typescript-eslint/parser@^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser@^8.34.1": +"@typescript-eslint/parser@^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0": version "8.34.1" resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.34.1.tgz" integrity sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA== @@ -843,7 +1094,7 @@ "@typescript-eslint/types" "8.34.1" "@typescript-eslint/visitor-keys" "8.34.1" -"@typescript-eslint/tsconfig-utils@^8.34.1", "@typescript-eslint/tsconfig-utils@8.34.1": +"@typescript-eslint/tsconfig-utils@8.34.1", "@typescript-eslint/tsconfig-utils@^8.34.1": version "8.34.1" resolved "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.1.tgz" integrity sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg== @@ -858,7 +1109,7 @@ debug "^4.3.4" ts-api-utils "^2.1.0" -"@typescript-eslint/types@^8.34.1", "@typescript-eslint/types@8.34.1": +"@typescript-eslint/types@8.34.1", "@typescript-eslint/types@^8.34.1": version "8.34.1" resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.1.tgz" integrity sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA== @@ -897,6 +1148,98 @@ "@typescript-eslint/types" "8.34.1" eslint-visitor-keys "^4.2.1" +"@unrs/resolver-binding-android-arm-eabi@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.9.0.tgz#e91317973356eb845c9186db5f9ec43e8d0002eb" + integrity sha512-h1T2c2Di49ekF2TE8ZCoJkb+jwETKUIPDJ/nO3tJBKlLFPu+fyd93f0rGP/BvArKx2k2HlRM4kqkNarj3dvZlg== + +"@unrs/resolver-binding-android-arm64@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.9.0.tgz#fbdd79b2a8e478e02e1c0751dfbc100017522161" + integrity sha512-sG1NHtgXtX8owEkJ11yn34vt0Xqzi3k9TJ8zppDmyG8GZV4kVWw44FHwKwHeEFl07uKPeC4ZoyuQaGh5ruJYPA== + +"@unrs/resolver-binding-darwin-arm64@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.9.0.tgz#24bb42710227ae2f4fea191151f3acc6a75b50d6" + integrity sha512-nJ9z47kfFnCxN1z/oYZS7HSNsFh43y2asePzTEZpEvK7kGyuShSl3RRXnm/1QaqFL+iP+BjMwuB+DYUymOkA5A== + +"@unrs/resolver-binding-darwin-x64@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.9.0.tgz#4a205940ec311ac8396c3f25043644b78cc98a20" + integrity sha512-TK+UA1TTa0qS53rjWn7cVlEKVGz2B6JYe0C++TdQjvWYIyx83ruwh0wd4LRxYBM5HeuAzXcylA9BH2trARXJTw== + +"@unrs/resolver-binding-freebsd-x64@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.9.0.tgz#ed82e000f7248011696ecc8894f574caa197b0be" + integrity sha512-6uZwzMRFcD7CcCd0vz3Hp+9qIL2jseE/bx3ZjaLwn8t714nYGwiE84WpaMCYjU+IQET8Vu/+BNAGtYD7BG/0yA== + +"@unrs/resolver-binding-linux-arm-gnueabihf@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.9.0.tgz#534a8b32118590f7fb9edd21c6576243a89a8aad" + integrity sha512-bPUBksQfrgcfv2+mm+AZinaKq8LCFvt5PThYqRotqSuuZK1TVKkhbVMS/jvSRfYl7jr3AoZLYbDkItxgqMKRkg== + +"@unrs/resolver-binding-linux-arm-musleabihf@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.9.0.tgz#b31718752e77cecbbcf7ba1e01dea97c1a5ee7e0" + integrity sha512-uT6E7UBIrTdCsFQ+y0tQd3g5oudmrS/hds5pbU3h4s2t/1vsGWbbSKhBSCD9mcqaqkBwoqlECpUrRJCmldl8PA== + +"@unrs/resolver-binding-linux-arm64-gnu@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.9.0.tgz#0f11ba195020cfa869533fb74733d68162349d14" + integrity sha512-vdqBh911wc5awE2bX2zx3eflbyv8U9xbE/jVKAm425eRoOVv/VseGZsqi3A3SykckSpF4wSROkbQPvbQFn8EsA== + +"@unrs/resolver-binding-linux-arm64-musl@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.9.0.tgz#8b6bc086cf9efaa22e8f2fef381786d6636b8e19" + integrity sha512-/8JFZ/SnuDr1lLEVsxsuVwrsGquTvT51RZGvyDB/dOK3oYK2UqeXzgeyq6Otp8FZXQcEYqJwxb9v+gtdXn03eQ== + +"@unrs/resolver-binding-linux-ppc64-gnu@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.9.0.tgz#5cd15899af31c2bbf90bfca5f798f64a16770e23" + integrity sha512-FkJjybtrl+rajTw4loI3L6YqSOpeZfDls4SstL/5lsP2bka9TiHUjgMBjygeZEis1oC8LfJTS8FSgpKPaQx2tQ== + +"@unrs/resolver-binding-linux-riscv64-gnu@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.9.0.tgz#4f2c75af52437eb10b48ea5b72750fb65fb174be" + integrity sha512-w/NZfHNeDusbqSZ8r/hp8iL4S39h4+vQMc9/vvzuIKMWKppyUGKm3IST0Qv0aOZ1rzIbl9SrDeIqK86ZpUK37w== + +"@unrs/resolver-binding-linux-riscv64-musl@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.9.0.tgz#6a87e82e0dd39d34ff37ddba6accf73cdb396e86" + integrity sha512-bEPBosut8/8KQbUixPry8zg/fOzVOWyvwzOfz0C0Rw6dp+wIBseyiHKjkcSyZKv/98edrbMknBaMNJfA/UEdqw== + +"@unrs/resolver-binding-linux-s390x-gnu@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.9.0.tgz#6524cc3c01309022de86c4a7317fe7d9f9fb855c" + integrity sha512-LDtMT7moE3gK753gG4pc31AAqGUC86j3AplaFusc717EUGF9ZFJ356sdQzzZzkBk1XzMdxFyZ4f/i35NKM/lFA== + +"@unrs/resolver-binding-linux-x64-gnu@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.9.0.tgz#85fb8a45dccf3823cd73ea4b61b2c3f2e8ab6653" + integrity sha512-WmFd5KINHIXj8o1mPaT8QRjA9HgSXhN1gl9Da4IZihARihEnOylu4co7i/yeaIpcfsI6sYs33cNZKyHYDh0lrA== + +"@unrs/resolver-binding-linux-x64-musl@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.9.0.tgz#235e539da5872df51c03e0e050a1c715e25044ca" + integrity sha512-CYuXbANW+WgzVRIl8/QvZmDaZxrqvOldOwlbUjIM4pQ46FJ0W5cinJ/Ghwa/Ng1ZPMJMk1VFdsD/XwmCGIXBWg== + +"@unrs/resolver-binding-wasm32-wasi@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.9.0.tgz#1bc614ce2ba61330c16bffa1e50f41d95d25c0a6" + integrity sha512-6Rp2WH0OoitMYR57Z6VE8Y6corX8C6QEMWLgOV6qXiJIeZ1F9WGXY/yQ8yDC4iTraotyLOeJ2Asea0urWj2fKQ== + dependencies: + "@napi-rs/wasm-runtime" "^0.2.11" + +"@unrs/resolver-binding-win32-arm64-msvc@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.9.0.tgz#0d8704275a9f2634d81b35d8a00a2f4bd8dec7fa" + integrity sha512-rknkrTRuvujprrbPmGeHi8wYWxmNVlBoNW8+4XF2hXUnASOjmuC9FNF1tGbDiRQWn264q9U/oGtixyO3BT8adQ== + +"@unrs/resolver-binding-win32-ia32-msvc@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.9.0.tgz#46909cbeb9a38b3f31a64833fe03aa1aebb8da2b" + integrity sha512-Ceymm+iBl+bgAICtgiHyMLz6hjxmLJKqBim8tDzpX61wpZOx2bPK6Gjuor7I2RiUynVjvvkoRIkrPyMwzBzF3A== + "@unrs/resolver-binding-win32-x64-msvc@1.9.0": version "1.9.0" resolved "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.9.0.tgz" @@ -907,7 +1250,7 @@ acorn-jsx@^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.15.0: +acorn@^8.15.0: version "8.15.0" resolved "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz" integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== @@ -1283,7 +1626,7 @@ csstype@^3.0.2, csstype@^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@2 - 3", "d3-array@2.10.0 - 3": +"d3-array@2 - 3", "d3-array@2.10.0 - 3", d3-array@^3.1.6: version "3.2.4" resolved "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz" integrity sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg== @@ -1305,7 +1648,7 @@ d3-ease@^3.0.1: resolved "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz" integrity sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA== -d3-interpolate@^3.0.1, "d3-interpolate@1.2.0 - 3": +"d3-interpolate@1.2.0 - 3", d3-interpolate@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz" integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g== @@ -1342,7 +1685,7 @@ d3-shape@^3.1.0: dependencies: d3-time "1 - 3" -d3-time@^3.0.0, "d3-time@1 - 3", "d3-time@2.1.1 - 3": +"d3-time@1 - 3", "d3-time@2.1.1 - 3", d3-time@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz" integrity sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q== @@ -1393,12 +1736,12 @@ date-fns@^2.16.1: dependencies: "@babel/runtime" "^7.21.0" -"date-fns@^2.25.0 || ^3.2.0 || ^4.0.0", date-fns@^4.1.0, "date-fns@3.0.6 || >=3.0.0": +date-fns@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz" integrity sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg== -dayjs@^1.10.7, dayjs@^1.11.13: +dayjs@^1.11.13: version "1.11.13" resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz" integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== @@ -1676,7 +2019,7 @@ eslint-module-utils@^2.12.0: dependencies: debug "^3.2.7" -eslint-plugin-import@*, eslint-plugin-import@^2.31.0: +eslint-plugin-import@^2.31.0: 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== @@ -1769,7 +2112,7 @@ eslint-visitor-keys@^4.2.1: resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz" integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== -eslint@*, "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7", "eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.23.0 || ^8.0.0 || ^9.0.0", "eslint@^8.57.0 || ^9.0.0", eslint@^9: +eslint@^9: version "9.29.0" resolved "https://registry.npmjs.org/eslint/-/eslint-9.29.0.tgz" integrity sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ== @@ -1858,17 +2201,6 @@ fast-equals@^5.0.1: resolved "https://registry.npmjs.org/fast-equals/-/fast-equals-5.2.2.tgz" integrity sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw== -fast-glob@^3.3.2: - version "3.3.3" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz" - integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== - 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.8" - fast-glob@3.3.1: version "3.3.1" resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz" @@ -1880,6 +2212,17 @@ fast-glob@3.3.1: merge2 "^1.3.0" micromatch "^4.0.4" +fast-glob@^3.3.2: + version "3.3.3" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== + 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.8" + 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" @@ -2793,7 +3136,7 @@ picomatch@^2.3.1: resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -"picomatch@^3 || ^4", picomatch@^4.0.2: +picomatch@^4.0.2: version "4.0.2" resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz" integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== @@ -2858,7 +3201,7 @@ react-date-range@^2.0.1: react-list "^0.8.13" shallow-equal "^1.2.1" -"react-dom@^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom@^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom@^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", react-dom@^19.0.0, react-dom@>=16.6.0: +react-dom@^19.0.0: version "19.1.0" resolved "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz" integrity sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g== @@ -2885,7 +3228,7 @@ react-list@^0.8.13: resolved "https://registry.npmjs.org/react-list/-/react-list-0.8.18.tgz" integrity sha512-1OSdDvzuKuwDJvQNuhXxxL+jTmmdtKg1i6KtYgxI9XR98kbOql1FcSGP+Lcvo91fk3cYng+Z6YkC6X9HRJwxfw== -"react-redux@^7.2.1 || ^8.1.3 || ^9.0.0", react-redux@^9.2.0: +react-redux@^9.2.0: version "9.2.0" resolved "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz" integrity sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g== @@ -2912,7 +3255,7 @@ react-transition-group@^4.4.5: loose-envify "^1.4.0" prop-types "^15.6.2" -"react@^0.14 || ^15.0.0-rc || >=15.0", "react@^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16.9.0 || ^17.0.0 || ^18 || ^19", "react@^17.0.0 || ^18.0.0 || ^19.0.0", "react@^18.0 || ^19", "react@^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", react@^19.0.0, react@^19.1.0, "react@>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0", react@>=16.6.0, react@>=16.8.0, "react@0.14 || 15 - 19": +react@^19.0.0: version "19.1.0" resolved "https://registry.npmjs.org/react/-/react-19.1.0.tgz" integrity sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg== @@ -2955,7 +3298,7 @@ redux@^4.0.0: dependencies: "@babel/runtime" "^7.9.2" -redux@^5.0.0, redux@^5.0.1: +redux@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz" integrity sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w== @@ -3069,7 +3412,7 @@ safe-regex-test@^1.0.3, safe-regex-test@^1.1.0: es-errors "^1.3.0" is-regex "^1.2.1" -sass@^1.3.0, sass@^1.89.2: +sass@^1.89.2: version "1.90.0" resolved "https://registry.npmjs.org/sass/-/sass-1.90.0.tgz" integrity sha512-9GUyuksjw70uNpb1MTYWsH9MQHOHY6kwfnkafC24+7aOMZn9+rVMBxRbLvw756mrBFbIsFg6Xw9IkR2Fnn3k+Q== @@ -3226,7 +3569,7 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" -source-map-js@^1.0.2, "source-map-js@>=0.6.2 <2.0.0": +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: 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== @@ -3501,7 +3844,7 @@ typed-array-length@^1.0.7: possible-typed-array-names "^1.0.0" reflect.getprototypeof "^1.0.6" -typescript@^5, "typescript@>= 4.8.x", typescript@>=3.3.1, typescript@>=4.8.4, "typescript@>=4.8.4 <5.9.0": +typescript@^5: version "5.8.3" resolved "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz" integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==