diff --git a/app/(dashboard)/devices/[deviceId]/page.tsx b/app/(dashboard)/devices/[deviceId]/page.tsx
new file mode 100644
index 0000000..f3584d6
--- /dev/null
+++ b/app/(dashboard)/devices/[deviceId]/page.tsx
@@ -0,0 +1,39 @@
+import prisma from '@/lib/db'
+import React from 'react'
+
+export default async function DeviceDetails({ params }: {
+ params: Promise<{ deviceId: string }>
+}) {
+ const deviceId = (await params)?.deviceId
+ const device = await prisma.device.findUnique({
+ where: {
+ id: deviceId,
+ },
+
+ })
+ return (
+
+
+
+ {device?.name}
+
+ {device?.mac}
+
+
+
+ {/* */}
+ {/* */}
+
+ {/*
+
+ */}
+
+ )
+}
diff --git a/app/(dashboard)/devices/page.tsx b/app/(dashboard)/devices/page.tsx
index c61076a..3380287 100644
--- a/app/(dashboard)/devices/page.tsx
+++ b/app/(dashboard)/devices/page.tsx
@@ -43,7 +43,7 @@ export default async function Devices({
+
+
+ Payment
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/app/(dashboard)/price-calculator/page.tsx b/app/(dashboard)/price-calculator/page.tsx
new file mode 100644
index 0000000..3218101
--- /dev/null
+++ b/app/(dashboard)/price-calculator/page.tsx
@@ -0,0 +1,125 @@
+"use client";
+import {
+ discountPercentageAtom,
+ formulaResultAtom,
+ initialPriceAtom,
+ numberOfDaysAtom,
+ numberOfDevicesAtom,
+} from "@/lib/atoms";
+import { useAtom } from "jotai";
+import { Minus, Plus } from "lucide-react";
+import { useEffect } from "react";
+import {
+ Button,
+ Group,
+ Input,
+ Label,
+ NumberField,
+} from "react-aria-components";
+
+
+export default function PriceCalculator() {
+ const [initialPrice, setInitialPrice] = useAtom(initialPriceAtom);
+ const [discountPercentage, setDiscountPercentage] = useAtom(
+ discountPercentageAtom,
+ );
+ const [numberOfDevices, setNumberOfDevices] = useAtom(numberOfDevicesAtom);
+ const [numberOfDays, setNumberOfDays] = useAtom(numberOfDaysAtom);
+ const [formulaResult, setFormulaResult] = useAtom(formulaResultAtom);
+
+ useEffect(() => {
+ const basePrice = initialPrice + (numberOfDevices - 1) * discountPercentage;
+ setFormulaResult(
+ `Price for ${numberOfDevices} device(s) over ${numberOfDays} day(s): MVR ${basePrice.toFixed(2)}`,
+ );
+ }, [
+ initialPrice,
+ discountPercentage,
+ numberOfDevices,
+ numberOfDays,
+ setFormulaResult,
+ ]);
+
+ return (
+
+
+
Price Calculator
+
+
+ {/* Initial Price Input */}
+ setInitialPrice(value)}
+ />
+ {/* Number of Devices Input */}
+ setNumberOfDevices(value)}
+ />
+ {/* Number of Days Input */}
+ setNumberOfDays(value)}
+ />
+
+ {/* Discount Percentage Input */}
+ setDiscountPercentage(value)}
+ />
+
+
+
+
+ );
+}
+
+// Dependencies: pnpm install lucide-react react-aria-components
+
+function NumberInput({
+ label,
+ value,
+ onChange,
+}: { label: string; value: number; onChange: (value: number) => void }) {
+ return (
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/app/layout.tsx b/app/layout.tsx
index 18f7a91..54221f1 100644
--- a/app/layout.tsx
+++ b/app/layout.tsx
@@ -1,4 +1,5 @@
import { ThemeProvider } from "@/components/theme-provider";
+import { Provider } from "jotai";
import type { Metadata } from "next";
import { Barlow } from "next/font/google";
@@ -25,16 +26,18 @@ export default function RootLayout({
return (
-
-
-
- {children}
-
+
+
+
+
+ {children}
+
+
);
diff --git a/components/add-devices-to-cart-button.tsx b/components/add-devices-to-cart-button.tsx
new file mode 100644
index 0000000..d269372
--- /dev/null
+++ b/components/add-devices-to-cart-button.tsx
@@ -0,0 +1,32 @@
+'use client'
+import { deviceCartAtom } from '@/lib/atoms'
+import type { Device } from '@prisma/client'
+import { useAtomValue, useSetAtom } from 'jotai'
+import { BadgePlus, CheckCheck } from 'lucide-react'
+import React from 'react'
+import { Button } from './ui/button'
+
+export default function AddDevicesToCartButton({ device }: { device: Device }) {
+ const setDeviceCart = useSetAtom(deviceCartAtom)
+ const devices = useAtomValue(deviceCartAtom)
+ return (
+
+ )
+}
diff --git a/components/auth/application-layout.tsx b/components/auth/application-layout.tsx
index dc7130d..ff648f2 100644
--- a/components/auth/application-layout.tsx
+++ b/components/auth/application-layout.tsx
@@ -1,13 +1,7 @@
+import { DeviceCartDrawer } from "@/components/device-cart";
import { ModeToggle } from "@/components/theme-toggle";
import { AppSidebar } from "@/components/ui/app-sidebar";
-import {
- Breadcrumb,
- BreadcrumbItem,
- BreadcrumbLink,
- BreadcrumbList,
- BreadcrumbPage,
- BreadcrumbSeparator,
-} from "@/components/ui/breadcrumb";
+
import { Separator } from "@/components/ui/separator";
import {
SidebarInset,
@@ -33,20 +27,10 @@ export async function ApplicationLayout({
-
-
-
- MENU
-
-
-
- Sar Link Portal v1.0.0
-
-
-
diff --git a/components/device-cart.tsx b/components/device-cart.tsx
new file mode 100644
index 0000000..4d05475
--- /dev/null
+++ b/components/device-cart.tsx
@@ -0,0 +1,109 @@
+"use client"
+
+import * as React from "react"
+
+import { Button } from "@/components/ui/button"
+import {
+ Drawer,
+ DrawerClose,
+ DrawerContent,
+ DrawerDescription,
+ DrawerFooter,
+ DrawerHeader,
+ DrawerTitle,
+ DrawerTrigger,
+} from "@/components/ui/drawer"
+import { cartDrawerOpenAtom, deviceCartAtom } from "@/lib/atoms"
+import type { Device } from "@prisma/client"
+import { useAtom, useAtomValue, useSetAtom } from "jotai"
+import { CircleDollarSign, ShoppingCart, Trash2 } from "lucide-react"
+import Link from "next/link"
+import { usePathname } from "next/navigation"
+
+
+export function DeviceCartDrawer() {
+ const pathname = usePathname()
+ const devices = useAtomValue(deviceCartAtom)
+ const setDeviceCart = useSetAtom(deviceCartAtom)
+ const [isOpen, setIsOpen] = useAtom(cartDrawerOpenAtom)
+ if (pathname === "/payment") {
+ return null
+ }
+ return (
+
+
+
+
+
+
+
+ Cart Devices
+ Devices in your cart to pay.
+
+
+ {devices.map((device) => (
+
+ ))}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
+
+
+function DeviceCard({ device }: { device: Device }) {
+ const setDeviceCart = useSetAtom(deviceCartAtom)
+ return (
+
+
+
+
+
+
+
+
+
+ )
+}
\ No newline at end of file
diff --git a/components/devices-table.tsx b/components/devices-table.tsx
index 345c21c..9b8ffb6 100644
--- a/components/devices-table.tsx
+++ b/components/devices-table.tsx
@@ -9,6 +9,7 @@ import {
TableRow,
} from "@/components/ui/table";
import prisma from "@/lib/db";
+import AddDevicesToCartButton from "./add-devices-to-cart-button";
import Pagination from "./pagination";
export async function DevicesTable({
@@ -38,8 +39,6 @@ export async function DevicesTable({
mode: "insensitive",
},
},
-
-
],
},
});
@@ -63,8 +62,6 @@ export async function DevicesTable({
mode: "insensitive",
},
},
-
-
],
},
@@ -75,7 +72,6 @@ export async function DevicesTable({
},
});
-
return (
{devices.length === 0 ? (
@@ -90,20 +86,16 @@ export async function DevicesTable({
Device Name
MAC Address
- Status
+ Actions
{devices.map((device) => (
-
+
{device.name}
{device.mac}
-
- Parental Controls
+
))}
diff --git a/components/devices-to-pay.tsx b/components/devices-to-pay.tsx
new file mode 100644
index 0000000..2f206db
--- /dev/null
+++ b/components/devices-to-pay.tsx
@@ -0,0 +1,61 @@
+'use client'
+import {
+ Table,
+ TableBody,
+ TableCaption,
+ TableCell,
+ TableFooter,
+ TableRow,
+} from "@/components/ui/table"
+import { deviceCartAtom } from '@/lib/atoms'
+import type { BillFormula } from "@prisma/client"
+import { useAtomValue } from 'jotai'
+import React from 'react'
+
+export default function DevicesToPay({ billFormula }: { billFormula?: BillFormula }) {
+ const devices = useAtomValue(deviceCartAtom)
+ if (devices.length === 0) {
+ return null
+ }
+ const baseAmount = billFormula?.baseAmount ?? 100
+ const discountPercentage = billFormula?.discountPercentage ?? 75
+ // 100+(n−1)×75
+ const total = baseAmount + (devices.length - 1) * discountPercentage
+ return (
+
+
+
Devices to pay
+
+ {devices.map((device) => (
+
+
+
{device.name}
+
+ {device.mac}
+
+
+
+ ))}
+
+
+
+
+ Please send the following amount to the payment address
+
+
+ Total Devices
+ {devices.length}
+
+
+
+
+ Total
+ {total.toFixed(2)}
+
+
+
+
+
+
+ )
+}
diff --git a/components/ui/app-sidebar.tsx b/components/ui/app-sidebar.tsx
index cf539d0..c022656 100644
--- a/components/ui/app-sidebar.tsx
+++ b/components/ui/app-sidebar.tsx
@@ -1,4 +1,5 @@
import {
+ Calculator,
ChevronRight,
Coins,
CreditCard,
@@ -72,6 +73,11 @@ const data = {
url: "/user-payments",
icon: ,
},
+ {
+ title: "Price Calculator",
+ url: "/price-calculator",
+ icon: ,
+ },
],
},
],
@@ -84,7 +90,7 @@ export function AppSidebar({
return (
-
+
Sar Link Portal
diff --git a/components/ui/drawer.tsx b/components/ui/drawer.tsx
new file mode 100644
index 0000000..6a0ef53
--- /dev/null
+++ b/components/ui/drawer.tsx
@@ -0,0 +1,118 @@
+"use client"
+
+import * as React from "react"
+import { Drawer as DrawerPrimitive } from "vaul"
+
+import { cn } from "@/lib/utils"
+
+const Drawer = ({
+ shouldScaleBackground = true,
+ ...props
+}: React.ComponentProps) => (
+
+)
+Drawer.displayName = "Drawer"
+
+const DrawerTrigger = DrawerPrimitive.Trigger
+
+const DrawerPortal = DrawerPrimitive.Portal
+
+const DrawerClose = DrawerPrimitive.Close
+
+const DrawerOverlay = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+))
+DrawerOverlay.displayName = DrawerPrimitive.Overlay.displayName
+
+const DrawerContent = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, children, ...props }, ref) => (
+
+
+
+
+ {children}
+
+
+))
+DrawerContent.displayName = "DrawerContent"
+
+const DrawerHeader = ({
+ className,
+ ...props
+}: React.HTMLAttributes) => (
+
+)
+DrawerHeader.displayName = "DrawerHeader"
+
+const DrawerFooter = ({
+ className,
+ ...props
+}: React.HTMLAttributes) => (
+
+)
+DrawerFooter.displayName = "DrawerFooter"
+
+const DrawerTitle = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+))
+DrawerTitle.displayName = DrawerPrimitive.Title.displayName
+
+const DrawerDescription = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+))
+DrawerDescription.displayName = DrawerPrimitive.Description.displayName
+
+export {
+ Drawer,
+ DrawerPortal,
+ DrawerOverlay,
+ DrawerTrigger,
+ DrawerClose,
+ DrawerContent,
+ DrawerHeader,
+ DrawerFooter,
+ DrawerTitle,
+ DrawerDescription,
+}
diff --git a/components/ui/sidebar.tsx b/components/ui/sidebar.tsx
index 4a65e6e..0d41872 100644
--- a/components/ui/sidebar.tsx
+++ b/components/ui/sidebar.tsx
@@ -1,6 +1,7 @@
"use client";
import { Slot } from "@radix-ui/react-slot";
+import * as VisuallyHidden from "@radix-ui/react-visually-hidden";
import { type VariantProps, cva } from "class-variance-authority";
import { PanelLeft } from "lucide-react";
import * as React from "react";
@@ -8,7 +9,12 @@ import * as React from "react";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Separator } from "@/components/ui/separator";
-import { Sheet, SheetContent, SheetTitle } from "@/components/ui/sheet";
+import {
+ Sheet,
+ SheetContent,
+ SheetDescription,
+ SheetTitle,
+} from "@/components/ui/sheet";
import { Skeleton } from "@/components/ui/skeleton";
import {
Tooltip,
@@ -214,6 +220,10 @@ const Sidebar = React.forwardRef<
}
side={side}
>
+
+ Description goes here
+
+
Menu
{children}
diff --git a/hooks/use-formula.ts b/hooks/use-formula.ts
new file mode 100644
index 0000000..10b2f7e
--- /dev/null
+++ b/hooks/use-formula.ts
@@ -0,0 +1,8 @@
+"use server";
+
+import prisma from "@/lib/db";
+
+export async function useFormula() {
+ const formula = await prisma.billFormula.findFirst();
+ return formula;
+}
diff --git a/lib/atoms.ts b/lib/atoms.ts
new file mode 100644
index 0000000..19a4b66
--- /dev/null
+++ b/lib/atoms.ts
@@ -0,0 +1,24 @@
+import type { Device } from "@prisma/client";
+import { atom, createStore } from "jotai";
+
+// Create a single store instance
+export const store = createStore();
+
+// Create atoms with the store
+export const initialPriceAtom = atom(100);
+export const discountPercentageAtom = atom(75);
+export const numberOfDevicesAtom = atom(1);
+export const numberOfDaysAtom = atom(30);
+export const formulaResultAtom = atom("");
+export const deviceCartAtom = atom([]);
+export const cartDrawerOpenAtom = atom(false);
+// Export the atoms with their store
+export const atoms = {
+ initialPriceAtom,
+ discountPercentageAtom,
+ numberOfDevicesAtom,
+ numberOfDaysAtom,
+ formulaResultAtom,
+ deviceCartAtom,
+ cartDrawerOpenAtom,
+};
diff --git a/package-lock.json b/package-lock.json
index f0e25fe..52a8c3c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -29,12 +29,14 @@
"clsx": "^2.1.1",
"cmdk": "^1.0.0",
"date-fns": "^4.1.0",
+ "jotai": "^2.8.0",
"lucide-react": "^0.460.0",
"next": "15.0.3",
"next-themes": "^0.4.3",
"nextjs-toploader": "^3.7.15",
"prisma": "^5.22.0",
"react": "19.0.0-rc-66855b96-20241106",
+ "react-aria-components": "^1.5.0",
"react-day-picker": "^8.10.1",
"react-dom": "19.0.0-rc-66855b96-20241106",
"react-hook-form": "^7.53.2",
@@ -42,6 +44,7 @@
"sonner": "^1.7.0",
"tailwind-merge": "^2.5.4",
"tailwindcss-animate": "^1.0.7",
+ "vaul": "^1.1.1",
"zod": "^3.23.8"
},
"devDependencies": {
@@ -232,6 +235,51 @@
"resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz",
"integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig=="
},
+ "node_modules/@formatjs/ecma402-abstract": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.2.4.tgz",
+ "integrity": "sha512-lFyiQDVvSbQOpU+WFd//ILolGj4UgA/qXrKeZxdV14uKiAUiPAtX6XAn7WBCRi7Mx6I7EybM9E5yYn4BIpZWYg==",
+ "dependencies": {
+ "@formatjs/fast-memoize": "2.2.3",
+ "@formatjs/intl-localematcher": "0.5.8",
+ "tslib": "2"
+ }
+ },
+ "node_modules/@formatjs/fast-memoize": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.3.tgz",
+ "integrity": "sha512-3jeJ+HyOfu8osl3GNSL4vVHUuWFXR03Iz9jjgI7RwjG6ysu/Ymdr0JRCPHfF5yGbTE6JCrd63EpvX1/WybYRbA==",
+ "dependencies": {
+ "tslib": "2"
+ }
+ },
+ "node_modules/@formatjs/icu-messageformat-parser": {
+ "version": "2.9.4",
+ "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.9.4.tgz",
+ "integrity": "sha512-Tbvp5a9IWuxUcpWNIW6GlMQYEc4rwNHR259uUFoKWNN1jM9obf9Ul0e+7r7MvFOBNcN+13K7NuKCKqQiAn1QEg==",
+ "dependencies": {
+ "@formatjs/ecma402-abstract": "2.2.4",
+ "@formatjs/icu-skeleton-parser": "1.8.8",
+ "tslib": "2"
+ }
+ },
+ "node_modules/@formatjs/icu-skeleton-parser": {
+ "version": "1.8.8",
+ "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.8.tgz",
+ "integrity": "sha512-vHwK3piXwamFcx5YQdCdJxUQ1WdTl6ANclt5xba5zLGDv5Bsur7qz8AD7BevaKxITwpgDeU0u8My3AIibW9ywA==",
+ "dependencies": {
+ "@formatjs/ecma402-abstract": "2.2.4",
+ "tslib": "2"
+ }
+ },
+ "node_modules/@formatjs/intl-localematcher": {
+ "version": "0.5.8",
+ "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.8.tgz",
+ "integrity": "sha512-I+WDNWWJFZie+jkfkiK5Mp4hEDyRSEvmyfYadflOno/mmKJKcB17fEpEH0oJu/OWhhCJ8kJBDz2YMd/6cDl7Mg==",
+ "dependencies": {
+ "tslib": "2"
+ }
+ },
"node_modules/@hexagon/base64": {
"version": "1.1.28",
"resolved": "https://registry.npmjs.org/@hexagon/base64/-/base64-1.1.28.tgz",
@@ -622,6 +670,39 @@
"url": "https://opencollective.com/libvips"
}
},
+ "node_modules/@internationalized/date": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.6.0.tgz",
+ "integrity": "sha512-+z6ti+CcJnRlLHok/emGEsWQhe7kfSmEW+/6qCzvKY67YPh7YOBfvc7+/+NXq+zJlbArg30tYpqLjNgcAYv2YQ==",
+ "dependencies": {
+ "@swc/helpers": "^0.5.0"
+ }
+ },
+ "node_modules/@internationalized/message": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/@internationalized/message/-/message-3.1.6.tgz",
+ "integrity": "sha512-JxbK3iAcTIeNr1p0WIFg/wQJjIzJt9l/2KNY/48vXV7GRGZSv3zMxJsce008fZclk2cDC8y0Ig3odceHO7EfNQ==",
+ "dependencies": {
+ "@swc/helpers": "^0.5.0",
+ "intl-messageformat": "^10.1.0"
+ }
+ },
+ "node_modules/@internationalized/number": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.6.0.tgz",
+ "integrity": "sha512-PtrRcJVy7nw++wn4W2OuePQQfTqDzfusSuY1QTtui4wa7r+rGVtR75pO8CyKvHvzyQYi3Q1uO5sY0AsB4e65Bw==",
+ "dependencies": {
+ "@swc/helpers": "^0.5.0"
+ }
+ },
+ "node_modules/@internationalized/string": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/@internationalized/string/-/string-3.2.5.tgz",
+ "integrity": "sha512-rKs71Zvl2OKOHM+mzAFMIyqR5hI1d1O6BBkMK2/lkfg3fkmVh9Eeg0awcA8W2WqYqDOv6a86DIOlFpggwLtbuw==",
+ "dependencies": {
+ "@swc/helpers": "^0.5.0"
+ }
+ },
"node_modules/@isaacs/cliui": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
@@ -2410,6 +2491,1575 @@
"resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz",
"integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg=="
},
+ "node_modules/@react-aria/breadcrumbs": {
+ "version": "3.5.19",
+ "resolved": "https://registry.npmjs.org/@react-aria/breadcrumbs/-/breadcrumbs-3.5.19.tgz",
+ "integrity": "sha512-mVngOPFYVVhec89rf/CiYQGTfaLRfHFtX+JQwY7sNYNqSA+gO8p4lNARe3Be6bJPgH+LUQuruIY9/ZDL6LT3HA==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.12.4",
+ "@react-aria/link": "^3.7.7",
+ "@react-aria/utils": "^3.26.0",
+ "@react-types/breadcrumbs": "^3.7.9",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/button": {
+ "version": "3.11.0",
+ "resolved": "https://registry.npmjs.org/@react-aria/button/-/button-3.11.0.tgz",
+ "integrity": "sha512-b37eIV6IW11KmNIAm65F3SEl2/mgj5BrHIysW6smZX3KoKWTGYsYfcQkmtNgY0GOSFfDxMCoolsZ6mxC00nSDA==",
+ "dependencies": {
+ "@react-aria/focus": "^3.19.0",
+ "@react-aria/interactions": "^3.22.5",
+ "@react-aria/toolbar": "3.0.0-beta.11",
+ "@react-aria/utils": "^3.26.0",
+ "@react-stately/toggle": "^3.8.0",
+ "@react-types/button": "^3.10.1",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/calendar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@react-aria/calendar/-/calendar-3.6.0.tgz",
+ "integrity": "sha512-tZ3nd5DP8uxckbj83Pt+4RqgcTWDlGi7njzc7QqFOG2ApfnYDUXbIpb/Q4KY6JNlJskG8q33wo0XfOwNy8J+eg==",
+ "dependencies": {
+ "@internationalized/date": "^3.6.0",
+ "@react-aria/i18n": "^3.12.4",
+ "@react-aria/interactions": "^3.22.5",
+ "@react-aria/live-announcer": "^3.4.1",
+ "@react-aria/utils": "^3.26.0",
+ "@react-stately/calendar": "^3.6.0",
+ "@react-types/button": "^3.10.1",
+ "@react-types/calendar": "^3.5.0",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/checkbox": {
+ "version": "3.15.0",
+ "resolved": "https://registry.npmjs.org/@react-aria/checkbox/-/checkbox-3.15.0.tgz",
+ "integrity": "sha512-z/8xd4em7o0MroBXwkkwv7QRwiJaA1FwqMhRUb7iqtBGP2oSytBEDf0N7L09oci32a1P4ZPz2rMK5GlLh/PD6g==",
+ "dependencies": {
+ "@react-aria/form": "^3.0.11",
+ "@react-aria/interactions": "^3.22.5",
+ "@react-aria/label": "^3.7.13",
+ "@react-aria/toggle": "^3.10.10",
+ "@react-aria/utils": "^3.26.0",
+ "@react-stately/checkbox": "^3.6.10",
+ "@react-stately/form": "^3.1.0",
+ "@react-stately/toggle": "^3.8.0",
+ "@react-types/checkbox": "^3.9.0",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/collections": {
+ "version": "3.0.0-alpha.6",
+ "resolved": "https://registry.npmjs.org/@react-aria/collections/-/collections-3.0.0-alpha.6.tgz",
+ "integrity": "sha512-A+7Eap/zvsghMb5/C3EAPn41axSzRhtX2glQRXSBj1mK31CTPCZ9BhrMIMC5DL7ZnfA7C+Ysilo9nI2YQh5PMg==",
+ "dependencies": {
+ "@react-aria/ssr": "^3.9.7",
+ "@react-aria/utils": "^3.26.0",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0",
+ "use-sync-external-store": "^1.2.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/color": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@react-aria/color/-/color-3.0.2.tgz",
+ "integrity": "sha512-dSM5qQRcR1gRGYCBw0IGRmc29gjfoht3cQleKb8MMNcgHYa2oi5VdCs2yKXmYFwwVC6uPtnlNy9S6e0spqdr+w==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.12.4",
+ "@react-aria/interactions": "^3.22.5",
+ "@react-aria/numberfield": "^3.11.9",
+ "@react-aria/slider": "^3.7.14",
+ "@react-aria/spinbutton": "^3.6.10",
+ "@react-aria/textfield": "^3.15.0",
+ "@react-aria/utils": "^3.26.0",
+ "@react-aria/visually-hidden": "^3.8.18",
+ "@react-stately/color": "^3.8.1",
+ "@react-stately/form": "^3.1.0",
+ "@react-types/color": "^3.0.1",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/combobox": {
+ "version": "3.11.0",
+ "resolved": "https://registry.npmjs.org/@react-aria/combobox/-/combobox-3.11.0.tgz",
+ "integrity": "sha512-s88YMmPkMO1WSoiH1KIyZDLJqUwvM2wHXXakj3cYw1tBHGo4rOUFq+JWQIbM5EDO4HOR4AUUqzIUd0NO7t3zyg==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.12.4",
+ "@react-aria/listbox": "^3.13.6",
+ "@react-aria/live-announcer": "^3.4.1",
+ "@react-aria/menu": "^3.16.0",
+ "@react-aria/overlays": "^3.24.0",
+ "@react-aria/selection": "^3.21.0",
+ "@react-aria/textfield": "^3.15.0",
+ "@react-aria/utils": "^3.26.0",
+ "@react-stately/collections": "^3.12.0",
+ "@react-stately/combobox": "^3.10.1",
+ "@react-stately/form": "^3.1.0",
+ "@react-types/button": "^3.10.1",
+ "@react-types/combobox": "^3.13.1",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/datepicker": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/@react-aria/datepicker/-/datepicker-3.12.0.tgz",
+ "integrity": "sha512-VYNXioLfddIHpwQx211+rTYuunDmI7VHWBRetCpH3loIsVFuhFSRchTQpclAzxolO3g0vO7pMVj9VYt7Swp6kg==",
+ "dependencies": {
+ "@internationalized/date": "^3.6.0",
+ "@internationalized/number": "^3.6.0",
+ "@internationalized/string": "^3.2.5",
+ "@react-aria/focus": "^3.19.0",
+ "@react-aria/form": "^3.0.11",
+ "@react-aria/i18n": "^3.12.4",
+ "@react-aria/interactions": "^3.22.5",
+ "@react-aria/label": "^3.7.13",
+ "@react-aria/spinbutton": "^3.6.10",
+ "@react-aria/utils": "^3.26.0",
+ "@react-stately/datepicker": "^3.11.0",
+ "@react-stately/form": "^3.1.0",
+ "@react-types/button": "^3.10.1",
+ "@react-types/calendar": "^3.5.0",
+ "@react-types/datepicker": "^3.9.0",
+ "@react-types/dialog": "^3.5.14",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/dialog": {
+ "version": "3.5.20",
+ "resolved": "https://registry.npmjs.org/@react-aria/dialog/-/dialog-3.5.20.tgz",
+ "integrity": "sha512-l0GZVLgeOd3kL3Yj8xQW7wN3gn9WW3RLd/SGI9t7ciTq+I/FhftjXCWzXLlOCCTLMf+gv7eazecECtmoWUaZWQ==",
+ "dependencies": {
+ "@react-aria/focus": "^3.19.0",
+ "@react-aria/overlays": "^3.24.0",
+ "@react-aria/utils": "^3.26.0",
+ "@react-types/dialog": "^3.5.14",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/disclosure": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@react-aria/disclosure/-/disclosure-3.0.0.tgz",
+ "integrity": "sha512-xO9QTQSvymujTjCs1iCQ4+dKZvtF/rVVaFZBKlUtqIqwTHMdqeZu4fh5miLEnTyVLNHMGzLrFggsd8Q+niC9Og==",
+ "dependencies": {
+ "@react-aria/ssr": "^3.9.7",
+ "@react-aria/utils": "^3.26.0",
+ "@react-stately/disclosure": "^3.0.0",
+ "@react-types/button": "^3.10.1",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/dnd": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/@react-aria/dnd/-/dnd-3.8.0.tgz",
+ "integrity": "sha512-JiqHY3E9fDU5Kb4gN22cuK6QNlpMCGe6ngR/BV+Q8mLEsdoWcoUAYOtYXVNNTRvCdVbEWI87FUU+ThyPpoDhNQ==",
+ "dependencies": {
+ "@internationalized/string": "^3.2.5",
+ "@react-aria/i18n": "^3.12.4",
+ "@react-aria/interactions": "^3.22.5",
+ "@react-aria/live-announcer": "^3.4.1",
+ "@react-aria/overlays": "^3.24.0",
+ "@react-aria/utils": "^3.26.0",
+ "@react-stately/dnd": "^3.5.0",
+ "@react-types/button": "^3.10.1",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/focus": {
+ "version": "3.19.0",
+ "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.19.0.tgz",
+ "integrity": "sha512-hPF9EXoUQeQl1Y21/rbV2H4FdUR2v+4/I0/vB+8U3bT1CJ+1AFj1hc/rqx2DqEwDlEwOHN+E4+mRahQmlybq0A==",
+ "dependencies": {
+ "@react-aria/interactions": "^3.22.5",
+ "@react-aria/utils": "^3.26.0",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0",
+ "clsx": "^2.0.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/form": {
+ "version": "3.0.11",
+ "resolved": "https://registry.npmjs.org/@react-aria/form/-/form-3.0.11.tgz",
+ "integrity": "sha512-oXzjTiwVuuWjZ8muU0hp3BrDH5qjVctLOF50mjPvqUbvXQTHhoDxWweyIXPQjGshaqBd2w4pWaE4A2rG2O/apw==",
+ "dependencies": {
+ "@react-aria/interactions": "^3.22.5",
+ "@react-aria/utils": "^3.26.0",
+ "@react-stately/form": "^3.1.0",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/grid": {
+ "version": "3.11.0",
+ "resolved": "https://registry.npmjs.org/@react-aria/grid/-/grid-3.11.0.tgz",
+ "integrity": "sha512-lN5FpQgu2Rq0CzTPWmzRpq6QHcMmzsXYeClsgO3108uVp1/genBNAObYVTxGOKe/jb9q99trz8EtIn05O6KN1g==",
+ "dependencies": {
+ "@react-aria/focus": "^3.19.0",
+ "@react-aria/i18n": "^3.12.4",
+ "@react-aria/interactions": "^3.22.5",
+ "@react-aria/live-announcer": "^3.4.1",
+ "@react-aria/selection": "^3.21.0",
+ "@react-aria/utils": "^3.26.0",
+ "@react-stately/collections": "^3.12.0",
+ "@react-stately/grid": "^3.10.0",
+ "@react-stately/selection": "^3.18.0",
+ "@react-types/checkbox": "^3.9.0",
+ "@react-types/grid": "^3.2.10",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/gridlist": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/@react-aria/gridlist/-/gridlist-3.10.0.tgz",
+ "integrity": "sha512-UcblfSZ7kJBrjg9mQ5VbnRevN81UiYB4NuL5PwIpBpridO7tnl4ew6+96PYU7Wj1chHhPS3x0b0zmuSVN7A0LA==",
+ "dependencies": {
+ "@react-aria/focus": "^3.19.0",
+ "@react-aria/grid": "^3.11.0",
+ "@react-aria/i18n": "^3.12.4",
+ "@react-aria/interactions": "^3.22.5",
+ "@react-aria/selection": "^3.21.0",
+ "@react-aria/utils": "^3.26.0",
+ "@react-stately/collections": "^3.12.0",
+ "@react-stately/list": "^3.11.1",
+ "@react-stately/tree": "^3.8.6",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/i18n": {
+ "version": "3.12.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/i18n/-/i18n-3.12.4.tgz",
+ "integrity": "sha512-j9+UL3q0Ls8MhXV9gtnKlyozq4aM95YywXqnmJtzT1rYeBx7w28hooqrWkCYLfqr4OIryv1KUnPiCSLwC2OC7w==",
+ "dependencies": {
+ "@internationalized/date": "^3.6.0",
+ "@internationalized/message": "^3.1.6",
+ "@internationalized/number": "^3.6.0",
+ "@internationalized/string": "^3.2.5",
+ "@react-aria/ssr": "^3.9.7",
+ "@react-aria/utils": "^3.26.0",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/interactions": {
+ "version": "3.22.5",
+ "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.22.5.tgz",
+ "integrity": "sha512-kMwiAD9E0TQp+XNnOs13yVJghiy8ET8L0cbkeuTgNI96sOAp/63EJ1FSrDf17iD8sdjt41LafwX/dKXW9nCcLQ==",
+ "dependencies": {
+ "@react-aria/ssr": "^3.9.7",
+ "@react-aria/utils": "^3.26.0",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/label": {
+ "version": "3.7.13",
+ "resolved": "https://registry.npmjs.org/@react-aria/label/-/label-3.7.13.tgz",
+ "integrity": "sha512-brSAXZVTey5RG/Ex6mTrV/9IhGSQFU4Al34qmjEDho+Z2qT4oPwf8k7TRXWWqzOU0ugYxekYbsLd2zlN3XvWcg==",
+ "dependencies": {
+ "@react-aria/utils": "^3.26.0",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/link": {
+ "version": "3.7.7",
+ "resolved": "https://registry.npmjs.org/@react-aria/link/-/link-3.7.7.tgz",
+ "integrity": "sha512-eVBRcHKhNSsATYWv5wRnZXRqPVcKAWWakyvfrYePIKpC3s4BaHZyTGYdefk8ZwZdEOuQZBqLMnjW80q1uhtkuA==",
+ "dependencies": {
+ "@react-aria/focus": "^3.19.0",
+ "@react-aria/interactions": "^3.22.5",
+ "@react-aria/utils": "^3.26.0",
+ "@react-types/link": "^3.5.9",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/listbox": {
+ "version": "3.13.6",
+ "resolved": "https://registry.npmjs.org/@react-aria/listbox/-/listbox-3.13.6.tgz",
+ "integrity": "sha512-6hEXEXIZVau9lgBZ4VVjFR3JnGU+fJaPmV3HP0UZ2ucUptfG0MZo24cn+ZQJsWiuaCfNFv5b8qribiv+BcO+Kg==",
+ "dependencies": {
+ "@react-aria/interactions": "^3.22.5",
+ "@react-aria/label": "^3.7.13",
+ "@react-aria/selection": "^3.21.0",
+ "@react-aria/utils": "^3.26.0",
+ "@react-stately/collections": "^3.12.0",
+ "@react-stately/list": "^3.11.1",
+ "@react-types/listbox": "^3.5.3",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/live-announcer": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/@react-aria/live-announcer/-/live-announcer-3.4.1.tgz",
+ "integrity": "sha512-4X2mcxgqLvvkqxv2l1n00jTzUxxe0kkLiapBGH1LHX/CxA1oQcHDqv8etJ2ZOwmS/MSBBiWnv3DwYHDOF6ubig==",
+ "dependencies": {
+ "@swc/helpers": "^0.5.0"
+ }
+ },
+ "node_modules/@react-aria/menu": {
+ "version": "3.16.0",
+ "resolved": "https://registry.npmjs.org/@react-aria/menu/-/menu-3.16.0.tgz",
+ "integrity": "sha512-TNk+Vd3TbpBPUxEloAdHRTaRxf9JBK7YmkHYiq0Yj5Lc22KS0E2eTyhpPM9xJvEWN2TlC5TEvNfdyui2kYWFFQ==",
+ "dependencies": {
+ "@react-aria/focus": "^3.19.0",
+ "@react-aria/i18n": "^3.12.4",
+ "@react-aria/interactions": "^3.22.5",
+ "@react-aria/overlays": "^3.24.0",
+ "@react-aria/selection": "^3.21.0",
+ "@react-aria/utils": "^3.26.0",
+ "@react-stately/collections": "^3.12.0",
+ "@react-stately/menu": "^3.9.0",
+ "@react-stately/selection": "^3.18.0",
+ "@react-stately/tree": "^3.8.6",
+ "@react-types/button": "^3.10.1",
+ "@react-types/menu": "^3.9.13",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/meter": {
+ "version": "3.4.18",
+ "resolved": "https://registry.npmjs.org/@react-aria/meter/-/meter-3.4.18.tgz",
+ "integrity": "sha512-tTX3LLlmDIHqrC42dkdf+upb1c4UbhlpZ52gqB64lZD4OD4HE+vMTwNSe+7MRKMLvcdKPWCRC35PnxIHZ15kfQ==",
+ "dependencies": {
+ "@react-aria/progress": "^3.4.18",
+ "@react-types/meter": "^3.4.5",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/numberfield": {
+ "version": "3.11.9",
+ "resolved": "https://registry.npmjs.org/@react-aria/numberfield/-/numberfield-3.11.9.tgz",
+ "integrity": "sha512-3tiGPx2y4zyOV7PmdBASes99ZZsFTZAJTnU45Z+p1CW4131lw7y2ZhbojBl7U6DaXAJvi1z6zY6cq2UE9w5a0Q==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.12.4",
+ "@react-aria/interactions": "^3.22.5",
+ "@react-aria/spinbutton": "^3.6.10",
+ "@react-aria/textfield": "^3.15.0",
+ "@react-aria/utils": "^3.26.0",
+ "@react-stately/form": "^3.1.0",
+ "@react-stately/numberfield": "^3.9.8",
+ "@react-types/button": "^3.10.1",
+ "@react-types/numberfield": "^3.8.7",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/overlays": {
+ "version": "3.24.0",
+ "resolved": "https://registry.npmjs.org/@react-aria/overlays/-/overlays-3.24.0.tgz",
+ "integrity": "sha512-0kAXBsMNTc/a3M07tK9Cdt/ea8CxTAEJ223g8YgqImlmoBBYAL7dl5G01IOj67TM64uWPTmZrOklBchHWgEm3A==",
+ "dependencies": {
+ "@react-aria/focus": "^3.19.0",
+ "@react-aria/i18n": "^3.12.4",
+ "@react-aria/interactions": "^3.22.5",
+ "@react-aria/ssr": "^3.9.7",
+ "@react-aria/utils": "^3.26.0",
+ "@react-aria/visually-hidden": "^3.8.18",
+ "@react-stately/overlays": "^3.6.12",
+ "@react-types/button": "^3.10.1",
+ "@react-types/overlays": "^3.8.11",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/progress": {
+ "version": "3.4.18",
+ "resolved": "https://registry.npmjs.org/@react-aria/progress/-/progress-3.4.18.tgz",
+ "integrity": "sha512-FOLgJ9t9i1u3oAAimybJG6r7/soNPBnJfWo4Yr6MmaUv90qVGa1h6kiuM5m9H/bm5JobAebhdfHit9lFlgsCmg==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.12.4",
+ "@react-aria/label": "^3.7.13",
+ "@react-aria/utils": "^3.26.0",
+ "@react-types/progress": "^3.5.8",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/radio": {
+ "version": "3.10.10",
+ "resolved": "https://registry.npmjs.org/@react-aria/radio/-/radio-3.10.10.tgz",
+ "integrity": "sha512-NVdeOVrsrHgSfwL2jWCCXFsWZb+RMRZErj5vthHQW4nkHECGOzeX56VaLWTSvdoCPqi9wdIX8A6K9peeAIgxzA==",
+ "dependencies": {
+ "@react-aria/focus": "^3.19.0",
+ "@react-aria/form": "^3.0.11",
+ "@react-aria/i18n": "^3.12.4",
+ "@react-aria/interactions": "^3.22.5",
+ "@react-aria/label": "^3.7.13",
+ "@react-aria/utils": "^3.26.0",
+ "@react-stately/radio": "^3.10.9",
+ "@react-types/radio": "^3.8.5",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/searchfield": {
+ "version": "3.7.11",
+ "resolved": "https://registry.npmjs.org/@react-aria/searchfield/-/searchfield-3.7.11.tgz",
+ "integrity": "sha512-wFf6QxtBFfoxy0ANxI0+ftFEBGynVCY0+ce4H4Y9LpUTQsIKMp3sdc7LoUFORWw5Yee6Eid5cFPQX0Ymnk+ZJg==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.12.4",
+ "@react-aria/textfield": "^3.15.0",
+ "@react-aria/utils": "^3.26.0",
+ "@react-stately/searchfield": "^3.5.8",
+ "@react-types/button": "^3.10.1",
+ "@react-types/searchfield": "^3.5.10",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/select": {
+ "version": "3.15.0",
+ "resolved": "https://registry.npmjs.org/@react-aria/select/-/select-3.15.0.tgz",
+ "integrity": "sha512-zgBOUNy81aJplfc3NKDJMv8HkXjBGzaFF3XDzNfW8vJ7nD9rcTRUN5SQ1XCEnKMv12B/Euk9zt6kd+tX0wk1vQ==",
+ "dependencies": {
+ "@react-aria/form": "^3.0.11",
+ "@react-aria/i18n": "^3.12.4",
+ "@react-aria/interactions": "^3.22.5",
+ "@react-aria/label": "^3.7.13",
+ "@react-aria/listbox": "^3.13.6",
+ "@react-aria/menu": "^3.16.0",
+ "@react-aria/selection": "^3.21.0",
+ "@react-aria/utils": "^3.26.0",
+ "@react-aria/visually-hidden": "^3.8.18",
+ "@react-stately/select": "^3.6.9",
+ "@react-types/button": "^3.10.1",
+ "@react-types/select": "^3.9.8",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/selection": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/@react-aria/selection/-/selection-3.21.0.tgz",
+ "integrity": "sha512-52JJ6hlPcM+gt0VV3DBmz6Kj1YAJr13TfutrKfGWcK36LvNCBm1j0N+TDqbdnlp8Nue6w0+5FIwZq44XPYiBGg==",
+ "dependencies": {
+ "@react-aria/focus": "^3.19.0",
+ "@react-aria/i18n": "^3.12.4",
+ "@react-aria/interactions": "^3.22.5",
+ "@react-aria/utils": "^3.26.0",
+ "@react-stately/selection": "^3.18.0",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/separator": {
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/@react-aria/separator/-/separator-3.4.4.tgz",
+ "integrity": "sha512-dH+qt0Mdh0nhKXCHW6AR4DF8DKLUBP26QYWaoThPdBwIpypH/JVKowpPtWms1P4b36U6XzHXHnTTEn/ZVoCqNA==",
+ "dependencies": {
+ "@react-aria/utils": "^3.26.0",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/slider": {
+ "version": "3.7.14",
+ "resolved": "https://registry.npmjs.org/@react-aria/slider/-/slider-3.7.14.tgz",
+ "integrity": "sha512-7rOiKjLkEZ0j7mPMlwrqivc+K4OSfL14slaQp06GHRiJkhiWXh2/drPe15hgNq55HmBQBpA0umKMkJcqVgmXPA==",
+ "dependencies": {
+ "@react-aria/focus": "^3.19.0",
+ "@react-aria/i18n": "^3.12.4",
+ "@react-aria/interactions": "^3.22.5",
+ "@react-aria/label": "^3.7.13",
+ "@react-aria/utils": "^3.26.0",
+ "@react-stately/slider": "^3.6.0",
+ "@react-types/shared": "^3.26.0",
+ "@react-types/slider": "^3.7.7",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/spinbutton": {
+ "version": "3.6.10",
+ "resolved": "https://registry.npmjs.org/@react-aria/spinbutton/-/spinbutton-3.6.10.tgz",
+ "integrity": "sha512-nhYEYk7xUNOZDaqiQ5w/nHH9ouqjJbabTWXH+KK7UR1oVGfo4z1wG94l8KWF3Z6SGGnBxzLJyTBguZ4g9aYTSg==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.12.4",
+ "@react-aria/live-announcer": "^3.4.1",
+ "@react-aria/utils": "^3.26.0",
+ "@react-types/button": "^3.10.1",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/ssr": {
+ "version": "3.9.7",
+ "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.7.tgz",
+ "integrity": "sha512-GQygZaGlmYjmYM+tiNBA5C6acmiDWF52Nqd40bBp0Znk4M4hP+LTmI0lpI1BuKMw45T8RIhrAsICIfKwZvi2Gg==",
+ "dependencies": {
+ "@swc/helpers": "^0.5.0"
+ },
+ "engines": {
+ "node": ">= 12"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/switch": {
+ "version": "3.6.10",
+ "resolved": "https://registry.npmjs.org/@react-aria/switch/-/switch-3.6.10.tgz",
+ "integrity": "sha512-FtaI9WaEP1tAmra1sYlAkYXg9x75P5UtgY8pSbe9+1WRyWbuE1QZT+RNCTi3IU4fZ7iJQmXH6+VaMyzPlSUagw==",
+ "dependencies": {
+ "@react-aria/toggle": "^3.10.10",
+ "@react-stately/toggle": "^3.8.0",
+ "@react-types/shared": "^3.26.0",
+ "@react-types/switch": "^3.5.7",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/table": {
+ "version": "3.16.0",
+ "resolved": "https://registry.npmjs.org/@react-aria/table/-/table-3.16.0.tgz",
+ "integrity": "sha512-9xF9S3CJ7XRiiK92hsIKxPedD0kgcQWwqTMtj3IBynpQ4vsnRiW3YNIzrn9C3apjknRZDTSta8O2QPYCUMmw2A==",
+ "dependencies": {
+ "@react-aria/focus": "^3.19.0",
+ "@react-aria/grid": "^3.11.0",
+ "@react-aria/i18n": "^3.12.4",
+ "@react-aria/interactions": "^3.22.5",
+ "@react-aria/live-announcer": "^3.4.1",
+ "@react-aria/utils": "^3.26.0",
+ "@react-aria/visually-hidden": "^3.8.18",
+ "@react-stately/collections": "^3.12.0",
+ "@react-stately/flags": "^3.0.5",
+ "@react-stately/table": "^3.13.0",
+ "@react-types/checkbox": "^3.9.0",
+ "@react-types/grid": "^3.2.10",
+ "@react-types/shared": "^3.26.0",
+ "@react-types/table": "^3.10.3",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/tabs": {
+ "version": "3.9.8",
+ "resolved": "https://registry.npmjs.org/@react-aria/tabs/-/tabs-3.9.8.tgz",
+ "integrity": "sha512-Nur/qRFBe+Zrt4xcCJV/ULXCS3Mlae+B89bp1Gl20vSDqk6uaPtGk+cS5k03eugOvas7AQapqNJsJgKd66TChw==",
+ "dependencies": {
+ "@react-aria/focus": "^3.19.0",
+ "@react-aria/i18n": "^3.12.4",
+ "@react-aria/selection": "^3.21.0",
+ "@react-aria/utils": "^3.26.0",
+ "@react-stately/tabs": "^3.7.0",
+ "@react-types/shared": "^3.26.0",
+ "@react-types/tabs": "^3.3.11",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/tag": {
+ "version": "3.4.8",
+ "resolved": "https://registry.npmjs.org/@react-aria/tag/-/tag-3.4.8.tgz",
+ "integrity": "sha512-exWl52bsFtJuzaqMYvSnLteUoPqb3Wf+uICru/yRtREJsWVqjJF38NCVlU73Yqd9qMPTctDrboSZFAWAWKDxoA==",
+ "dependencies": {
+ "@react-aria/gridlist": "^3.10.0",
+ "@react-aria/i18n": "^3.12.4",
+ "@react-aria/interactions": "^3.22.5",
+ "@react-aria/label": "^3.7.13",
+ "@react-aria/selection": "^3.21.0",
+ "@react-aria/utils": "^3.26.0",
+ "@react-stately/list": "^3.11.1",
+ "@react-types/button": "^3.10.1",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/textfield": {
+ "version": "3.15.0",
+ "resolved": "https://registry.npmjs.org/@react-aria/textfield/-/textfield-3.15.0.tgz",
+ "integrity": "sha512-V5mg7y1OR6WXYHdhhm4FC7QyGc9TideVRDFij1SdOJrIo5IFB7lvwpOS0GmgwkVbtr71PTRMjZnNbrJUFU6VNA==",
+ "dependencies": {
+ "@react-aria/focus": "^3.19.0",
+ "@react-aria/form": "^3.0.11",
+ "@react-aria/label": "^3.7.13",
+ "@react-aria/utils": "^3.26.0",
+ "@react-stately/form": "^3.1.0",
+ "@react-stately/utils": "^3.10.5",
+ "@react-types/shared": "^3.26.0",
+ "@react-types/textfield": "^3.10.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/toggle": {
+ "version": "3.10.10",
+ "resolved": "https://registry.npmjs.org/@react-aria/toggle/-/toggle-3.10.10.tgz",
+ "integrity": "sha512-QwMT/vTNrbrILxWVHfd9zVQ3mV2NdBwyRu+DphVQiFAXcmc808LEaIX2n0lI6FCsUDC9ZejCyvzd91/YemdZ1Q==",
+ "dependencies": {
+ "@react-aria/focus": "^3.19.0",
+ "@react-aria/interactions": "^3.22.5",
+ "@react-aria/utils": "^3.26.0",
+ "@react-stately/toggle": "^3.8.0",
+ "@react-types/checkbox": "^3.9.0",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/toolbar": {
+ "version": "3.0.0-beta.11",
+ "resolved": "https://registry.npmjs.org/@react-aria/toolbar/-/toolbar-3.0.0-beta.11.tgz",
+ "integrity": "sha512-LM3jTRFNDgoEpoL568WaiuqiVM7eynSQLJis1hV0vlVnhTd7M7kzt7zoOjzxVb5Uapz02uCp1Fsm4wQMz09qwQ==",
+ "dependencies": {
+ "@react-aria/focus": "^3.19.0",
+ "@react-aria/i18n": "^3.12.4",
+ "@react-aria/utils": "^3.26.0",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/tooltip": {
+ "version": "3.7.10",
+ "resolved": "https://registry.npmjs.org/@react-aria/tooltip/-/tooltip-3.7.10.tgz",
+ "integrity": "sha512-Udi3XOnrF/SYIz72jw9bgB74MG/yCOzF5pozHj2FH2HiJlchYv/b6rHByV/77IZemdlkmL/uugrv/7raPLSlnw==",
+ "dependencies": {
+ "@react-aria/focus": "^3.19.0",
+ "@react-aria/interactions": "^3.22.5",
+ "@react-aria/utils": "^3.26.0",
+ "@react-stately/tooltip": "^3.5.0",
+ "@react-types/shared": "^3.26.0",
+ "@react-types/tooltip": "^3.4.13",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/tree": {
+ "version": "3.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/@react-aria/tree/-/tree-3.0.0-beta.2.tgz",
+ "integrity": "sha512-lH3hVl2VgG3YLN+ee1zQzm+2F+BGLd/HBhfMYPuI3IjHvDb+m+jCJXHdBOGrfG2Qydk2LYheqX8QXCluulu0qQ==",
+ "dependencies": {
+ "@react-aria/gridlist": "^3.10.0",
+ "@react-aria/i18n": "^3.12.4",
+ "@react-aria/selection": "^3.21.0",
+ "@react-aria/utils": "^3.26.0",
+ "@react-stately/tree": "^3.8.6",
+ "@react-types/button": "^3.10.1",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/utils": {
+ "version": "3.26.0",
+ "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.26.0.tgz",
+ "integrity": "sha512-LkZouGSjjQ0rEqo4XJosS4L3YC/zzQkfRM3KoqK6fUOmUJ9t0jQ09WjiF+uOoG9u+p30AVg3TrZRUWmoTS+koQ==",
+ "dependencies": {
+ "@react-aria/ssr": "^3.9.7",
+ "@react-stately/utils": "^3.10.5",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0",
+ "clsx": "^2.0.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/virtualizer": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@react-aria/virtualizer/-/virtualizer-4.1.0.tgz",
+ "integrity": "sha512-ziSq3Y7iuaAMJWGZU1RRs/TykuPapQfx8dyH2eyKPLgEjBUoXRGWE7n6jklBwal14b0lPK0wkCzRoQbkUvX3cg==",
+ "dependencies": {
+ "@react-aria/i18n": "^3.12.4",
+ "@react-aria/interactions": "^3.22.5",
+ "@react-aria/utils": "^3.26.0",
+ "@react-stately/virtualizer": "^4.2.0",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-aria/visually-hidden": {
+ "version": "3.8.18",
+ "resolved": "https://registry.npmjs.org/@react-aria/visually-hidden/-/visually-hidden-3.8.18.tgz",
+ "integrity": "sha512-l/0igp+uub/salP35SsNWq5mGmg3G5F5QMS1gDZ8p28n7CgjvzyiGhJbbca7Oxvaw1HRFzVl9ev+89I7moNnFQ==",
+ "dependencies": {
+ "@react-aria/interactions": "^3.22.5",
+ "@react-aria/utils": "^3.26.0",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-stately/calendar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@react-stately/calendar/-/calendar-3.6.0.tgz",
+ "integrity": "sha512-GqUtOtGnwWjtNrJud8nY/ywI4VBP5byToNVRTnxbMl+gYO1Qe/uc5NG7zjwMxhb2kqSBHZFdkF0DXVqG2Ul+BA==",
+ "dependencies": {
+ "@internationalized/date": "^3.6.0",
+ "@react-stately/utils": "^3.10.5",
+ "@react-types/calendar": "^3.5.0",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-stately/checkbox": {
+ "version": "3.6.10",
+ "resolved": "https://registry.npmjs.org/@react-stately/checkbox/-/checkbox-3.6.10.tgz",
+ "integrity": "sha512-LHm7i4YI8A/RdgWAuADrnSAYIaYYpQeZqsp1a03Og0pJHAlZL0ymN3y2IFwbZueY0rnfM+yF+kWNXjJqbKrFEQ==",
+ "dependencies": {
+ "@react-stately/form": "^3.1.0",
+ "@react-stately/utils": "^3.10.5",
+ "@react-types/checkbox": "^3.9.0",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-stately/collections": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/@react-stately/collections/-/collections-3.12.0.tgz",
+ "integrity": "sha512-MfR9hwCxe5oXv4qrLUnjidwM50U35EFmInUeFf8i9mskYwWlRYS0O1/9PZ0oF1M0cKambaRHKEy98jczgb9ycA==",
+ "dependencies": {
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-stately/color": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/color/-/color-3.8.1.tgz",
+ "integrity": "sha512-7eN7K+KJRu+rxK351eGrzoq2cG+yipr90i5b1cUu4lioYmcH4WdsfjmM5Ku6gypbafH+kTDfflvO6hiY1NZH+A==",
+ "dependencies": {
+ "@internationalized/number": "^3.6.0",
+ "@internationalized/string": "^3.2.5",
+ "@react-aria/i18n": "^3.12.4",
+ "@react-stately/form": "^3.1.0",
+ "@react-stately/numberfield": "^3.9.8",
+ "@react-stately/slider": "^3.6.0",
+ "@react-stately/utils": "^3.10.5",
+ "@react-types/color": "^3.0.1",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-stately/combobox": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/combobox/-/combobox-3.10.1.tgz",
+ "integrity": "sha512-Rso+H+ZEDGFAhpKWbnRxRR/r7YNmYVtt+Rn0eNDNIUp3bYaxIBCdCySyAtALs4I8RZXZQ9zoUznP7YeVwG3cLg==",
+ "dependencies": {
+ "@react-stately/collections": "^3.12.0",
+ "@react-stately/form": "^3.1.0",
+ "@react-stately/list": "^3.11.1",
+ "@react-stately/overlays": "^3.6.12",
+ "@react-stately/select": "^3.6.9",
+ "@react-stately/utils": "^3.10.5",
+ "@react-types/combobox": "^3.13.1",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-stately/data": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/@react-stately/data/-/data-3.12.0.tgz",
+ "integrity": "sha512-6PiW2oA56lcH1CVjDcajutzsv91w/PER8K61/OGxtNFFUWaIZH80RWmK4kjU/Lf0vygzXCxout3kEb388lUk0w==",
+ "dependencies": {
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-stately/datepicker": {
+ "version": "3.11.0",
+ "resolved": "https://registry.npmjs.org/@react-stately/datepicker/-/datepicker-3.11.0.tgz",
+ "integrity": "sha512-d9MJF34A0VrhL5y5S8mAISA8uwfNCQKmR2k4KoQJm3De1J8SQeNzSjLviAwh1faDow6FXGlA6tVbTrHyDcBgBg==",
+ "dependencies": {
+ "@internationalized/date": "^3.6.0",
+ "@internationalized/string": "^3.2.5",
+ "@react-stately/form": "^3.1.0",
+ "@react-stately/overlays": "^3.6.12",
+ "@react-stately/utils": "^3.10.5",
+ "@react-types/datepicker": "^3.9.0",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-stately/disclosure": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@react-stately/disclosure/-/disclosure-3.0.0.tgz",
+ "integrity": "sha512-Z9+fi0/41ZXHjGopORQza7mk4lFEFslKhy65ehEo6O6j2GuIV0659ExIVDsmJoJSFjXCfGh0sX8oTSOlXi9gqg==",
+ "dependencies": {
+ "@react-stately/utils": "^3.10.5",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-stately/dnd": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/@react-stately/dnd/-/dnd-3.5.0.tgz",
+ "integrity": "sha512-ZcWFw1npEDnATiy3TEdzA1skQ3UEIyfbNA6VhPNO8yiSVLxoxBOaEaq8VVS72fRGAtxud6dgOy8BnsP9JwDClQ==",
+ "dependencies": {
+ "@react-stately/selection": "^3.18.0",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-stately/flags": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@react-stately/flags/-/flags-3.0.5.tgz",
+ "integrity": "sha512-6wks4csxUwPCp23LgJSnkBRhrWpd9jGd64DjcCTNB2AHIFu7Ab1W59pJpUL6TW7uAxVxdNKjgn6D1hlBy8qWsA==",
+ "dependencies": {
+ "@swc/helpers": "^0.5.0"
+ }
+ },
+ "node_modules/@react-stately/form": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@react-stately/form/-/form-3.1.0.tgz",
+ "integrity": "sha512-E2wxNQ0QaTyDHD0nJFtTSnEH9A3bpJurwxhS4vgcUmESHgjFEMLlC9irUSZKgvOgb42GAq+fHoWBsgKeTp9Big==",
+ "dependencies": {
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-stately/grid": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/@react-stately/grid/-/grid-3.10.0.tgz",
+ "integrity": "sha512-ii+DdsOBvCnHMgL0JvUfFwO1kiAPP19Bpdpl6zn/oOltk6F5TmnoyNrzyz+2///1hCiySI3FE1O7ujsAQs7a6Q==",
+ "dependencies": {
+ "@react-stately/collections": "^3.12.0",
+ "@react-stately/selection": "^3.18.0",
+ "@react-types/grid": "^3.2.10",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-stately/layout": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@react-stately/layout/-/layout-4.1.0.tgz",
+ "integrity": "sha512-pSBqn+4EeOaf2QMK+w2SHgsWKYHdgMZWY3qgJijdzWGZ4JpYmHuiD0yOq80qFdUwxcexPW3vFg3hqIQlMpXeCw==",
+ "dependencies": {
+ "@react-stately/collections": "^3.12.0",
+ "@react-stately/table": "^3.13.0",
+ "@react-stately/virtualizer": "^4.2.0",
+ "@react-types/grid": "^3.2.10",
+ "@react-types/shared": "^3.26.0",
+ "@react-types/table": "^3.10.3",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-stately/list": {
+ "version": "3.11.1",
+ "resolved": "https://registry.npmjs.org/@react-stately/list/-/list-3.11.1.tgz",
+ "integrity": "sha512-UCOpIvqBOjwLtk7zVTYWuKU1m1Oe61Q5lNar/GwHaV1nAiSQ8/yYlhr40NkBEs9X3plEfsV28UIpzOrYnu1tPg==",
+ "dependencies": {
+ "@react-stately/collections": "^3.12.0",
+ "@react-stately/selection": "^3.18.0",
+ "@react-stately/utils": "^3.10.5",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-stately/menu": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/@react-stately/menu/-/menu-3.9.0.tgz",
+ "integrity": "sha512-++sm0fzZeUs9GvtRbj5RwrP+KL9KPANp9f4SvtI3s+MP+Y/X3X7LNNePeeccGeyikB5fzMsuyvd82bRRW9IhDQ==",
+ "dependencies": {
+ "@react-stately/overlays": "^3.6.12",
+ "@react-types/menu": "^3.9.13",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-stately/numberfield": {
+ "version": "3.9.8",
+ "resolved": "https://registry.npmjs.org/@react-stately/numberfield/-/numberfield-3.9.8.tgz",
+ "integrity": "sha512-J6qGILxDNEtu7yvd3/y+FpbrxEaAeIODwlrFo6z1kvuDlLAm/KszXAc75yoDi0OtakFTCMP6/HR5VnHaQdMJ3w==",
+ "dependencies": {
+ "@internationalized/number": "^3.6.0",
+ "@react-stately/form": "^3.1.0",
+ "@react-stately/utils": "^3.10.5",
+ "@react-types/numberfield": "^3.8.7",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-stately/overlays": {
+ "version": "3.6.12",
+ "resolved": "https://registry.npmjs.org/@react-stately/overlays/-/overlays-3.6.12.tgz",
+ "integrity": "sha512-QinvZhwZgj8obUyPIcyURSCjTZlqZYRRCS60TF8jH8ZpT0tEAuDb3wvhhSXuYA3Xo9EHLwvLjEf3tQKKdAQArw==",
+ "dependencies": {
+ "@react-stately/utils": "^3.10.5",
+ "@react-types/overlays": "^3.8.11",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-stately/radio": {
+ "version": "3.10.9",
+ "resolved": "https://registry.npmjs.org/@react-stately/radio/-/radio-3.10.9.tgz",
+ "integrity": "sha512-kUQ7VdqFke8SDRCatw2jW3rgzMWbvw+n2imN2THETynI47NmNLzNP11dlGO2OllRtTrsLhmBNlYHa3W62pFpAw==",
+ "dependencies": {
+ "@react-stately/form": "^3.1.0",
+ "@react-stately/utils": "^3.10.5",
+ "@react-types/radio": "^3.8.5",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-stately/searchfield": {
+ "version": "3.5.8",
+ "resolved": "https://registry.npmjs.org/@react-stately/searchfield/-/searchfield-3.5.8.tgz",
+ "integrity": "sha512-jtquvGadx1DmtQqPKaVO6Qg/xpBjNxsOd59ciig9xRxpxV+90i996EX1E2R6R+tGJdSM1pD++7PVOO4yE++HOg==",
+ "dependencies": {
+ "@react-stately/utils": "^3.10.5",
+ "@react-types/searchfield": "^3.5.10",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-stately/select": {
+ "version": "3.6.9",
+ "resolved": "https://registry.npmjs.org/@react-stately/select/-/select-3.6.9.tgz",
+ "integrity": "sha512-vASUDv7FhEYQURzM+JIwcusPv7/x/l3zHc/oKJPvoCl3aa9pwS8hZwS82SC00o2iFnrDscfDJju4IE/cd4hucg==",
+ "dependencies": {
+ "@react-stately/form": "^3.1.0",
+ "@react-stately/list": "^3.11.1",
+ "@react-stately/overlays": "^3.6.12",
+ "@react-types/select": "^3.9.8",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-stately/selection": {
+ "version": "3.18.0",
+ "resolved": "https://registry.npmjs.org/@react-stately/selection/-/selection-3.18.0.tgz",
+ "integrity": "sha512-6EaNNP3exxBhW2LkcRR4a3pg+3oDguZlBSqIVVR7lyahv/D8xXHRC4dX+m0mgGHJpsgjs7664Xx6c8v193TFxg==",
+ "dependencies": {
+ "@react-stately/collections": "^3.12.0",
+ "@react-stately/utils": "^3.10.5",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-stately/slider": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@react-stately/slider/-/slider-3.6.0.tgz",
+ "integrity": "sha512-w5vJxVh267pmD1X+Ppd9S3ZzV1hcg0cV8q5P4Egr160b9WMcWlUspZPtsthwUlN7qQe/C8y5IAhtde4s29eNag==",
+ "dependencies": {
+ "@react-stately/utils": "^3.10.5",
+ "@react-types/shared": "^3.26.0",
+ "@react-types/slider": "^3.7.7",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-stately/table": {
+ "version": "3.13.0",
+ "resolved": "https://registry.npmjs.org/@react-stately/table/-/table-3.13.0.tgz",
+ "integrity": "sha512-mRbNYrwQIE7xzVs09Lk3kPteEVFVyOc20vA8ph6EP54PiUf/RllJpxZe/WUYLf4eom9lUkRYej5sffuUBpxjCA==",
+ "dependencies": {
+ "@react-stately/collections": "^3.12.0",
+ "@react-stately/flags": "^3.0.5",
+ "@react-stately/grid": "^3.10.0",
+ "@react-stately/selection": "^3.18.0",
+ "@react-stately/utils": "^3.10.5",
+ "@react-types/grid": "^3.2.10",
+ "@react-types/shared": "^3.26.0",
+ "@react-types/table": "^3.10.3",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-stately/tabs": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/@react-stately/tabs/-/tabs-3.7.0.tgz",
+ "integrity": "sha512-ox4hTkfZCoR4Oyr3Op3rBlWNq2Wxie04vhEYpTZQ2hobR3l4fYaOkd7CPClILktJ3TC104j8wcb0knWxIBRx9w==",
+ "dependencies": {
+ "@react-stately/list": "^3.11.1",
+ "@react-types/shared": "^3.26.0",
+ "@react-types/tabs": "^3.3.11",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-stately/toggle": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/@react-stately/toggle/-/toggle-3.8.0.tgz",
+ "integrity": "sha512-pyt/k/J8BwE/2g6LL6Z6sMSWRx9HEJB83Sm/MtovXnI66sxJ2EfQ1OaXB7Su5PEL9OMdoQF6Mb+N1RcW3zAoPw==",
+ "dependencies": {
+ "@react-stately/utils": "^3.10.5",
+ "@react-types/checkbox": "^3.9.0",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-stately/tooltip": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/@react-stately/tooltip/-/tooltip-3.5.0.tgz",
+ "integrity": "sha512-+xzPNztJDd2XJD0X3DgWKlrgOhMqZpSzsIssXeJgO7uCnP8/Z513ESaipJhJCFC8fxj5caO/DK4Uu8hEtlB8cQ==",
+ "dependencies": {
+ "@react-stately/overlays": "^3.6.12",
+ "@react-types/tooltip": "^3.4.13",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-stately/tree": {
+ "version": "3.8.6",
+ "resolved": "https://registry.npmjs.org/@react-stately/tree/-/tree-3.8.6.tgz",
+ "integrity": "sha512-lblUaxf1uAuIz5jm6PYtcJ+rXNNVkqyFWTIMx6g6gW/mYvm8GNx1G/0MLZE7E6CuDGaO9dkLSY2bB1uqyKHidA==",
+ "dependencies": {
+ "@react-stately/collections": "^3.12.0",
+ "@react-stately/selection": "^3.18.0",
+ "@react-stately/utils": "^3.10.5",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-stately/utils": {
+ "version": "3.10.5",
+ "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.10.5.tgz",
+ "integrity": "sha512-iMQSGcpaecghDIh3mZEpZfoFH3ExBwTtuBEcvZ2XnGzCgQjeYXcMdIUwAfVQLXFTdHUHGF6Gu6/dFrYsCzySBQ==",
+ "dependencies": {
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-stately/virtualizer": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@react-stately/virtualizer/-/virtualizer-4.2.0.tgz",
+ "integrity": "sha512-aTMpa9AQoz/xLqn8AI1BR/caUUY7/OUo9GbuF434w2u5eGCL7+SAn3Fmq7WSCwqYyDsO+jEIERek4JTX7pEW0A==",
+ "dependencies": {
+ "@react-aria/utils": "^3.26.0",
+ "@react-types/shared": "^3.26.0",
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-types/breadcrumbs": {
+ "version": "3.7.9",
+ "resolved": "https://registry.npmjs.org/@react-types/breadcrumbs/-/breadcrumbs-3.7.9.tgz",
+ "integrity": "sha512-eARYJo8J+VfNV8vP4uw3L2Qliba9wLV2bx9YQCYf5Lc/OE5B/y4gaTLz+Y2P3Rtn6gBPLXY447zCs5i7gf+ICg==",
+ "dependencies": {
+ "@react-types/link": "^3.5.9",
+ "@react-types/shared": "^3.26.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-types/button": {
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/@react-types/button/-/button-3.10.1.tgz",
+ "integrity": "sha512-XTtap8o04+4QjPNAshFWOOAusUTxQlBjU2ai0BTVLShQEjHhRVDBIWsI2B2FKJ4KXT6AZ25llaxhNrreWGonmA==",
+ "dependencies": {
+ "@react-types/shared": "^3.26.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-types/calendar": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/@react-types/calendar/-/calendar-3.5.0.tgz",
+ "integrity": "sha512-O3IRE7AGwAWYnvJIJ80cOy7WwoJ0m8GtX/qSmvXQAjC4qx00n+b5aFNBYAQtcyc3RM5QpW6obs9BfwGetFiI8w==",
+ "dependencies": {
+ "@internationalized/date": "^3.6.0",
+ "@react-types/shared": "^3.26.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-types/checkbox": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.9.0.tgz",
+ "integrity": "sha512-9hbHx0Oo2Hp5a8nV8Q75LQR0DHtvOIJbFaeqESSopqmV9EZoYjtY/h0NS7cZetgahQgnqYWQi44XGooMDCsmxA==",
+ "dependencies": {
+ "@react-types/shared": "^3.26.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-types/color": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@react-types/color/-/color-3.0.1.tgz",
+ "integrity": "sha512-KemFziO3GbmT3HEKrgOGdqNA6Gsmy9xrwFO3f8qXSG7gVz6M27Ic4R9HVQv4iAjap5uti6W13/pk2bc/jLVcEA==",
+ "dependencies": {
+ "@react-types/shared": "^3.26.0",
+ "@react-types/slider": "^3.7.7"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-types/combobox": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/@react-types/combobox/-/combobox-3.13.1.tgz",
+ "integrity": "sha512-7xr+HknfhReN4QPqKff5tbKTe2kGZvH+DGzPYskAtb51FAAiZsKo+WvnNAvLwg3kRoC9Rkn4TAiVBp/HgymRDw==",
+ "dependencies": {
+ "@react-types/shared": "^3.26.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-types/datepicker": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/@react-types/datepicker/-/datepicker-3.9.0.tgz",
+ "integrity": "sha512-dbKL5Qsm2MQwOTtVQdOcKrrphcXAqDD80WLlSQrBLg+waDuuQ7H+TrvOT0thLKloNBlFUGnZZfXGRHINpih/0g==",
+ "dependencies": {
+ "@internationalized/date": "^3.6.0",
+ "@react-types/calendar": "^3.5.0",
+ "@react-types/overlays": "^3.8.11",
+ "@react-types/shared": "^3.26.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-types/dialog": {
+ "version": "3.5.14",
+ "resolved": "https://registry.npmjs.org/@react-types/dialog/-/dialog-3.5.14.tgz",
+ "integrity": "sha512-OXWMjrALwrlgw8aHD8SeRm/s3tbAssdaEh2h73KUSeFau3fU3n5mfKv+WnFqsEaOtN261o48l7hTlS6615H9AA==",
+ "dependencies": {
+ "@react-types/overlays": "^3.8.11",
+ "@react-types/shared": "^3.26.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-types/form": {
+ "version": "3.7.8",
+ "resolved": "https://registry.npmjs.org/@react-types/form/-/form-3.7.8.tgz",
+ "integrity": "sha512-0wOS97/X0ijTVuIqik1lHYTZnk13QkvMTKvIEhM7c6YMU3vPiirBwLbT2kJiAdwLiymwcCkrBdDF1NTRG6kPFA==",
+ "dependencies": {
+ "@react-types/shared": "^3.26.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-types/grid": {
+ "version": "3.2.10",
+ "resolved": "https://registry.npmjs.org/@react-types/grid/-/grid-3.2.10.tgz",
+ "integrity": "sha512-Z5cG0ITwqjUE4kWyU5/7VqiPl4wqMJ7kG/ZP7poAnLmwRsR8Ai0ceVn+qzp5nTA19cgURi8t3LsXn3Ar1FBoog==",
+ "dependencies": {
+ "@react-types/shared": "^3.26.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-types/link": {
+ "version": "3.5.9",
+ "resolved": "https://registry.npmjs.org/@react-types/link/-/link-3.5.9.tgz",
+ "integrity": "sha512-JcKDiDMqrq/5Vpn+BdWQEuXit4KN4HR/EgIi3yKnNbYkLzxBoeQZpQgvTaC7NEQeZnSqkyXQo3/vMUeX/ZNIKw==",
+ "dependencies": {
+ "@react-types/shared": "^3.26.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-types/listbox": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/@react-types/listbox/-/listbox-3.5.3.tgz",
+ "integrity": "sha512-v1QXd9/XU3CCKr2Vgs7WLcTr6VMBur7CrxHhWZQQFExsf9bgJ/3wbUdjy4aThY/GsYHiaS38EKucCZFr1QAfqA==",
+ "dependencies": {
+ "@react-types/shared": "^3.26.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-types/menu": {
+ "version": "3.9.13",
+ "resolved": "https://registry.npmjs.org/@react-types/menu/-/menu-3.9.13.tgz",
+ "integrity": "sha512-7SuX6E2tDsqQ+HQdSvIda1ji/+ujmR86dtS9CUu5yWX91P25ufRjZ72EvLRqClWNQsj1Xl4+2zBDLWlceznAjw==",
+ "dependencies": {
+ "@react-types/overlays": "^3.8.11",
+ "@react-types/shared": "^3.26.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-types/meter": {
+ "version": "3.4.5",
+ "resolved": "https://registry.npmjs.org/@react-types/meter/-/meter-3.4.5.tgz",
+ "integrity": "sha512-04w1lEtvP/c3Ep8ND8hhH2rwjz2MtQ8o8SNLhahen3u0rX3jKOgD4BvHujsyvXXTMjj1Djp74sGzNawb4Ppi9w==",
+ "dependencies": {
+ "@react-types/progress": "^3.5.8"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-types/numberfield": {
+ "version": "3.8.7",
+ "resolved": "https://registry.npmjs.org/@react-types/numberfield/-/numberfield-3.8.7.tgz",
+ "integrity": "sha512-KccMPi39cLoVkB2T0V7HW6nsxQVAwt89WWCltPZJVGzsebv/k0xTQlPVAgrUake4kDLoE687e3Fr/Oe3+1bDhw==",
+ "dependencies": {
+ "@react-types/shared": "^3.26.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-types/overlays": {
+ "version": "3.8.11",
+ "resolved": "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.8.11.tgz",
+ "integrity": "sha512-aw7T0rwVI3EuyG5AOaEIk8j7dZJQ9m34XAztXJVZ/W2+4pDDkLDbJ/EAPnuo2xGYRGhowuNDn4tDju01eHYi+w==",
+ "dependencies": {
+ "@react-types/shared": "^3.26.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-types/progress": {
+ "version": "3.5.8",
+ "resolved": "https://registry.npmjs.org/@react-types/progress/-/progress-3.5.8.tgz",
+ "integrity": "sha512-PR0rN5mWevfblR/zs30NdZr+82Gka/ba7UHmYOW9/lkKlWeD7PHgl1iacpd/3zl/jUF22evAQbBHmk1mS6Mpqw==",
+ "dependencies": {
+ "@react-types/shared": "^3.26.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-types/radio": {
+ "version": "3.8.5",
+ "resolved": "https://registry.npmjs.org/@react-types/radio/-/radio-3.8.5.tgz",
+ "integrity": "sha512-gSImTPid6rsbJmwCkTliBIU/npYgJHOFaI3PNJo7Y0QTAnFelCtYeFtBiWrFodSArSv7ASqpLLUEj9hZu/rxIg==",
+ "dependencies": {
+ "@react-types/shared": "^3.26.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-types/searchfield": {
+ "version": "3.5.10",
+ "resolved": "https://registry.npmjs.org/@react-types/searchfield/-/searchfield-3.5.10.tgz",
+ "integrity": "sha512-7wW4pJzbReawoGPu8a4l+CODTCDN088EN/ysUzl622ewim57PjArjix+lpO4+aEtJqS9HKpq8UEbjwo9axpcUA==",
+ "dependencies": {
+ "@react-types/shared": "^3.26.0",
+ "@react-types/textfield": "^3.10.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-types/select": {
+ "version": "3.9.8",
+ "resolved": "https://registry.npmjs.org/@react-types/select/-/select-3.9.8.tgz",
+ "integrity": "sha512-RGsYj2oFjXpLnfcvWMBQnkcDuKkwT43xwYWZGI214/gp/B64tJiIUgTM5wFTRAeGDX23EePkhCQF+9ctnqFd6g==",
+ "dependencies": {
+ "@react-types/shared": "^3.26.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-types/shared": {
+ "version": "3.26.0",
+ "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.26.0.tgz",
+ "integrity": "sha512-6FuPqvhmjjlpEDLTiYx29IJCbCNWPlsyO+ZUmCUXzhUv2ttShOXfw8CmeHWHftT/b2KweAWuzqSlfeXPR76jpw==",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-types/slider": {
+ "version": "3.7.7",
+ "resolved": "https://registry.npmjs.org/@react-types/slider/-/slider-3.7.7.tgz",
+ "integrity": "sha512-lYTR9zXQV2fSEm/G3gwDENWiki1IXd/oorsgf0zu1DBi2SQDbOsLsGUXiwvD24Xy6OkUuhAqjLPPexezo7+u9g==",
+ "dependencies": {
+ "@react-types/shared": "^3.26.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-types/switch": {
+ "version": "3.5.7",
+ "resolved": "https://registry.npmjs.org/@react-types/switch/-/switch-3.5.7.tgz",
+ "integrity": "sha512-1IKiq510rPTHumEZuhxuazuXBa2Cuxz6wBIlwf3NCVmgWEvU+uk1ETG0sH2yymjwCqhtJDKXi+qi9HSgPEDwAg==",
+ "dependencies": {
+ "@react-types/shared": "^3.26.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-types/table": {
+ "version": "3.10.3",
+ "resolved": "https://registry.npmjs.org/@react-types/table/-/table-3.10.3.tgz",
+ "integrity": "sha512-Ac+W+m/zgRzlTU8Z2GEg26HkuJFswF9S6w26r+R3MHwr8z2duGPvv37XRtE1yf3dbpRBgHEAO141xqS2TqGwNg==",
+ "dependencies": {
+ "@react-types/grid": "^3.2.10",
+ "@react-types/shared": "^3.26.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-types/tabs": {
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/@react-types/tabs/-/tabs-3.3.11.tgz",
+ "integrity": "sha512-BjF2TqBhZaIcC4lc82R5pDJd1F7kstj1K0Nokhz99AGYn8C0ITdp6lR+DPVY9JZRxKgP9R2EKfWGI90Lo7NQdA==",
+ "dependencies": {
+ "@react-types/shared": "^3.26.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-types/textfield": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/@react-types/textfield/-/textfield-3.10.0.tgz",
+ "integrity": "sha512-ShU3d6kLJGQjPXccVFjM3KOXdj3uyhYROqH9YgSIEVxgA9W6LRflvk/IVBamD9pJYTPbwmVzuP0wQkTDupfZ1w==",
+ "dependencies": {
+ "@react-types/shared": "^3.26.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/@react-types/tooltip": {
+ "version": "3.4.13",
+ "resolved": "https://registry.npmjs.org/@react-types/tooltip/-/tooltip-3.4.13.tgz",
+ "integrity": "sha512-KPekFC17RTT8kZlk7ZYubueZnfsGTDOpLw7itzolKOXGddTXsrJGBzSB4Bb060PBVllaDO0MOrhPap8OmrIl1Q==",
+ "dependencies": {
+ "@react-types/overlays": "^3.8.11",
+ "@react-types/shared": "^3.26.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
"node_modules/@rtsao/scc": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
@@ -5207,6 +6857,17 @@
"node": ">= 0.4"
}
},
+ "node_modules/intl-messageformat": {
+ "version": "10.7.7",
+ "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.7.tgz",
+ "integrity": "sha512-F134jIoeYMro/3I0h08D0Yt4N9o9pjddU/4IIxMMURqbAtI2wu70X8hvG1V48W49zXHXv3RKSF/po+0fDfsGjA==",
+ "dependencies": {
+ "@formatjs/ecma402-abstract": "2.2.4",
+ "@formatjs/fast-memoize": "2.2.3",
+ "@formatjs/icu-messageformat-parser": "2.9.4",
+ "tslib": "2"
+ }
+ },
"node_modules/invariant": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
@@ -5668,6 +7329,26 @@
"url": "https://github.com/sponsors/panva"
}
},
+ "node_modules/jotai": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/jotai/-/jotai-2.8.0.tgz",
+ "integrity": "sha512-yZNMC36FdLOksOr8qga0yLf14miCJlEThlp5DeFJNnqzm2+ZG7wLcJzoOyij5K6U6Xlc5ljQqPDlJRgqW0Y18g==",
+ "engines": {
+ "node": ">=12.20.0"
+ },
+ "peerDependencies": {
+ "@types/react": ">=17.0.0",
+ "react": ">=17.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ }
+ }
+ },
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -6656,6 +8337,99 @@
"node": ">=0.10.0"
}
},
+ "node_modules/react-aria": {
+ "version": "3.36.0",
+ "resolved": "https://registry.npmjs.org/react-aria/-/react-aria-3.36.0.tgz",
+ "integrity": "sha512-AK5XyIhAN+e5HDlwlF+YwFrOrVI7RYmZ6kg/o7ZprQjkYqYKapXeUpWscmNm/3H2kDboE5Z4ymUnK6ZhobLqOw==",
+ "dependencies": {
+ "@internationalized/string": "^3.2.5",
+ "@react-aria/breadcrumbs": "^3.5.19",
+ "@react-aria/button": "^3.11.0",
+ "@react-aria/calendar": "^3.6.0",
+ "@react-aria/checkbox": "^3.15.0",
+ "@react-aria/color": "^3.0.2",
+ "@react-aria/combobox": "^3.11.0",
+ "@react-aria/datepicker": "^3.12.0",
+ "@react-aria/dialog": "^3.5.20",
+ "@react-aria/disclosure": "^3.0.0",
+ "@react-aria/dnd": "^3.8.0",
+ "@react-aria/focus": "^3.19.0",
+ "@react-aria/gridlist": "^3.10.0",
+ "@react-aria/i18n": "^3.12.4",
+ "@react-aria/interactions": "^3.22.5",
+ "@react-aria/label": "^3.7.13",
+ "@react-aria/link": "^3.7.7",
+ "@react-aria/listbox": "^3.13.6",
+ "@react-aria/menu": "^3.16.0",
+ "@react-aria/meter": "^3.4.18",
+ "@react-aria/numberfield": "^3.11.9",
+ "@react-aria/overlays": "^3.24.0",
+ "@react-aria/progress": "^3.4.18",
+ "@react-aria/radio": "^3.10.10",
+ "@react-aria/searchfield": "^3.7.11",
+ "@react-aria/select": "^3.15.0",
+ "@react-aria/selection": "^3.21.0",
+ "@react-aria/separator": "^3.4.4",
+ "@react-aria/slider": "^3.7.14",
+ "@react-aria/ssr": "^3.9.7",
+ "@react-aria/switch": "^3.6.10",
+ "@react-aria/table": "^3.16.0",
+ "@react-aria/tabs": "^3.9.8",
+ "@react-aria/tag": "^3.4.8",
+ "@react-aria/textfield": "^3.15.0",
+ "@react-aria/tooltip": "^3.7.10",
+ "@react-aria/utils": "^3.26.0",
+ "@react-aria/visually-hidden": "^3.8.18",
+ "@react-types/shared": "^3.26.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
+ "node_modules/react-aria-components": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/react-aria-components/-/react-aria-components-1.5.0.tgz",
+ "integrity": "sha512-wzf0g6cvWrqAJd4FkisAfFnslx6AJREgOd/NEmVE/RGuDxGTzss4awcwbo98rIVmqbTTFApiygy0SyWGrRZfDA==",
+ "dependencies": {
+ "@internationalized/date": "^3.6.0",
+ "@internationalized/string": "^3.2.5",
+ "@react-aria/collections": "3.0.0-alpha.6",
+ "@react-aria/color": "^3.0.2",
+ "@react-aria/disclosure": "^3.0.0",
+ "@react-aria/dnd": "^3.8.0",
+ "@react-aria/focus": "^3.19.0",
+ "@react-aria/interactions": "^3.22.5",
+ "@react-aria/live-announcer": "^3.4.1",
+ "@react-aria/menu": "^3.16.0",
+ "@react-aria/toolbar": "3.0.0-beta.11",
+ "@react-aria/tree": "3.0.0-beta.2",
+ "@react-aria/utils": "^3.26.0",
+ "@react-aria/virtualizer": "^4.1.0",
+ "@react-stately/color": "^3.8.1",
+ "@react-stately/disclosure": "^3.0.0",
+ "@react-stately/layout": "^4.1.0",
+ "@react-stately/menu": "^3.9.0",
+ "@react-stately/selection": "^3.18.0",
+ "@react-stately/table": "^3.13.0",
+ "@react-stately/utils": "^3.10.5",
+ "@react-stately/virtualizer": "^4.2.0",
+ "@react-types/color": "^3.0.1",
+ "@react-types/form": "^3.7.8",
+ "@react-types/grid": "^3.2.10",
+ "@react-types/shared": "^3.26.0",
+ "@react-types/table": "^3.10.3",
+ "@swc/helpers": "^0.5.0",
+ "client-only": "^0.0.1",
+ "react-aria": "^3.36.0",
+ "react-stately": "^3.34.0",
+ "use-sync-external-store": "^1.2.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1",
+ "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
"node_modules/react-day-picker": {
"version": "8.10.1",
"resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-8.10.1.tgz",
@@ -6761,6 +8535,41 @@
}
}
},
+ "node_modules/react-stately": {
+ "version": "3.34.0",
+ "resolved": "https://registry.npmjs.org/react-stately/-/react-stately-3.34.0.tgz",
+ "integrity": "sha512-0N9tZ8qQ/CxpJH7ao0O6gr+8955e7VrOskg9N+TIxkFknPetwOCtgppMYhnTfteBV8WfM/vv4OC1NbkgYTqXJA==",
+ "dependencies": {
+ "@react-stately/calendar": "^3.6.0",
+ "@react-stately/checkbox": "^3.6.10",
+ "@react-stately/collections": "^3.12.0",
+ "@react-stately/color": "^3.8.1",
+ "@react-stately/combobox": "^3.10.1",
+ "@react-stately/data": "^3.12.0",
+ "@react-stately/datepicker": "^3.11.0",
+ "@react-stately/disclosure": "^3.0.0",
+ "@react-stately/dnd": "^3.5.0",
+ "@react-stately/form": "^3.1.0",
+ "@react-stately/list": "^3.11.1",
+ "@react-stately/menu": "^3.9.0",
+ "@react-stately/numberfield": "^3.9.8",
+ "@react-stately/overlays": "^3.6.12",
+ "@react-stately/radio": "^3.10.9",
+ "@react-stately/searchfield": "^3.5.8",
+ "@react-stately/select": "^3.6.9",
+ "@react-stately/selection": "^3.18.0",
+ "@react-stately/slider": "^3.6.0",
+ "@react-stately/table": "^3.13.0",
+ "@react-stately/tabs": "^3.7.0",
+ "@react-stately/toggle": "^3.8.0",
+ "@react-stately/tooltip": "^3.5.0",
+ "@react-stately/tree": "^3.8.6",
+ "@react-types/shared": "^3.26.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1"
+ }
+ },
"node_modules/react-style-singleton": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz",
@@ -7878,6 +9687,14 @@
}
}
},
+ "node_modules/use-sync-external-store": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz",
+ "integrity": "sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -7890,6 +9707,18 @@
"integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
"dev": true
},
+ "node_modules/vaul": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/vaul/-/vaul-1.1.1.tgz",
+ "integrity": "sha512-+ejzF6ffQKPcfgS7uOrGn017g39F8SO4yLPXbBhpC7a0H+oPqPna8f1BUfXaz8eU4+pxbQcmjxW+jWBSbxjaFg==",
+ "dependencies": {
+ "@radix-ui/react-dialog": "^1.1.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0"
+ }
+ },
"node_modules/webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
diff --git a/package.json b/package.json
index 5301060..bd7a689 100644
--- a/package.json
+++ b/package.json
@@ -33,12 +33,14 @@
"clsx": "^2.1.1",
"cmdk": "^1.0.0",
"date-fns": "^4.1.0",
+ "jotai": "^2.8.0",
"lucide-react": "^0.460.0",
"next": "15.0.3",
"next-themes": "^0.4.3",
"nextjs-toploader": "^3.7.15",
"prisma": "^5.22.0",
"react": "19.0.0-rc-66855b96-20241106",
+ "react-aria-components": "^1.5.0",
"react-day-picker": "^8.10.1",
"react-dom": "19.0.0-rc-66855b96-20241106",
"react-hook-form": "^7.53.2",
@@ -46,6 +48,7 @@
"sonner": "^1.7.0",
"tailwind-merge": "^2.5.4",
"tailwindcss-animate": "^1.0.7",
+ "vaul": "^1.1.1",
"zod": "^3.23.8"
},
"devDependencies": {
diff --git a/prisma/migrations/20241205155316_add/migration.sql b/prisma/migrations/20241205155316_add/migration.sql
new file mode 100644
index 0000000..2998bec
--- /dev/null
+++ b/prisma/migrations/20241205155316_add/migration.sql
@@ -0,0 +1,29 @@
+-- AlterTable
+ALTER TABLE "user" ADD COLUMN "policyAccepted" BOOLEAN NOT NULL DEFAULT false,
+ADD COLUMN "termsAccepted" BOOLEAN NOT NULL DEFAULT false;
+
+-- CreateTable
+CREATE TABLE "Bill" (
+ "id" TEXT NOT NULL,
+ "name" TEXT NOT NULL,
+ "amount" INTEGER NOT NULL,
+ "paid" BOOLEAN NOT NULL DEFAULT false,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+ "deviceId" TEXT,
+
+ CONSTRAINT "Bill_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "BillFormula" (
+ "id" TEXT NOT NULL,
+ "formula" TEXT NOT NULL,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "BillFormula_pkey" PRIMARY KEY ("id")
+);
+
+-- AddForeignKey
+ALTER TABLE "Bill" ADD CONSTRAINT "Bill_deviceId_fkey" FOREIGN KEY ("deviceId") REFERENCES "Device"("id") ON DELETE SET NULL ON UPDATE CASCADE;
diff --git a/prisma/migrations/20241206045737_bill/migration.sql b/prisma/migrations/20241206045737_bill/migration.sql
new file mode 100644
index 0000000..392975d
--- /dev/null
+++ b/prisma/migrations/20241206045737_bill/migration.sql
@@ -0,0 +1,10 @@
+/*
+ Warnings:
+
+ - Added the required column `baseAmount` to the `BillFormula` table without a default value. This is not possible if the table is not empty.
+ - Added the required column `discountPercentage` to the `BillFormula` table without a default value. This is not possible if the table is not empty.
+
+*/
+-- AlterTable
+ALTER TABLE "BillFormula" ADD COLUMN "baseAmount" DOUBLE PRECISION NOT NULL,
+ADD COLUMN "discountPercentage" DOUBLE PRECISION NOT NULL;
diff --git a/prisma/migrations/20241206070752_add/migration.sql b/prisma/migrations/20241206070752_add/migration.sql
new file mode 100644
index 0000000..bcb7aa0
--- /dev/null
+++ b/prisma/migrations/20241206070752_add/migration.sql
@@ -0,0 +1,2 @@
+-- AlterTable
+ALTER TABLE "Device" ADD COLUMN "isActive" BOOLEAN NOT NULL DEFAULT false;
diff --git a/prisma/migrations/20241206081710_add/migration.sql b/prisma/migrations/20241206081710_add/migration.sql
new file mode 100644
index 0000000..fd8f552
--- /dev/null
+++ b/prisma/migrations/20241206081710_add/migration.sql
@@ -0,0 +1,33 @@
+/*
+ Warnings:
+
+ - You are about to drop the `Bill` table. If the table is not empty, all the data it contains will be lost.
+
+*/
+-- DropForeignKey
+ALTER TABLE "Bill" DROP CONSTRAINT "Bill_deviceId_fkey";
+
+-- AlterTable
+ALTER TABLE "Device" ADD COLUMN "billId" TEXT;
+
+-- DropTable
+DROP TABLE "Bill";
+
+-- CreateTable
+CREATE TABLE "Payment" (
+ "id" TEXT NOT NULL,
+ "name" TEXT NOT NULL,
+ "amount" INTEGER NOT NULL,
+ "paid" BOOLEAN NOT NULL DEFAULT false,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+ "userId" TEXT NOT NULL,
+
+ CONSTRAINT "Payment_pkey" PRIMARY KEY ("id")
+);
+
+-- AddForeignKey
+ALTER TABLE "Device" ADD CONSTRAINT "Device_billId_fkey" FOREIGN KEY ("billId") REFERENCES "Payment"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Payment" ADD CONSTRAINT "Payment_userId_fkey" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/prisma/schema.prisma b/prisma/schema.prisma
index 4f66963..e598a7e 100644
--- a/prisma/schema.prisma
+++ b/prisma/schema.prisma
@@ -41,6 +41,7 @@ model User {
lang String?
atollId String?
islandId String?
+ Bill Payment[]
@@map("user")
}
@@ -108,12 +109,36 @@ model Island {
}
model Device {
- id String @id @default(cuid())
- name String
- mac String
-
+ id String @id @default(cuid())
+ name String
+ mac String
+ isActive Boolean @default(false)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
User User? @relation(fields: [userId], references: [id])
userId String?
+ Bill Payment? @relation(fields: [billId], references: [id])
+ billId String?
+}
+
+model Payment {
+ id String @id @default(cuid())
+ name String
+ amount Int
+ paid Boolean @default(false)
+ user User @relation(fields: [userId], references: [id])
+
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ devices Device[]
+ userId String
+}
+
+model BillFormula {
+ id String @id @default(cuid())
+ formula String
+ baseAmount Float
+ discountPercentage Float
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
}
diff --git a/prisma/seed.ts b/prisma/seed.ts
index dc1ad3f..cf33f8d 100644
--- a/prisma/seed.ts
+++ b/prisma/seed.ts
@@ -6,6 +6,25 @@ const prisma = new PrismaClient();
const DEFAULT_ISLANDS = ["Dharanboodhoo", "Feeali", "Nilandhoo", "Magoodhoo"];
async function main() {
+ await prisma.user.upsert({
+ where: {
+ phoneNumber: "+9607780588",
+ },
+ update: {},
+ create: {
+ name: "Admin",
+ email: "admin@sarlink.net",
+ emailVerified: true,
+ firstPaymentDone: true,
+ verified: true,
+ address: "Dharanboodhoo",
+ id_card: "A265117",
+ dob: new Date("1990-01-01"),
+ phoneNumber: "+9607780588",
+ phoneNumberVerified: true,
+ role: "ADMIN",
+ },
+ });
const users = Array.from({ length: 25 }, () => ({
name: `${faker.person.fullName().split(" ")[1]} House-${crypto
.randomUUID()
@@ -25,8 +44,18 @@ async function main() {
role: "USER",
}));
- await prisma.user.createMany({
- data: users,
+ const seedUsers = await Promise.all(
+ users.map((user) => prisma.user.create({ data: user })),
+ );
+
+ const FAKE_DEVICES = Array.from({ length: 25 }, () => ({
+ name: faker.commerce.productName(),
+ mac: faker.internet.mac(),
+ userId: seedUsers[Math.floor(Math.random() * seedUsers.length)].id,
+ }));
+
+ await prisma.device.createMany({
+ data: FAKE_DEVICES,
});
const FAAFU_ATOLL = await prisma.atoll.create({
data: {