commit 48d3ac684fdd31e8a26622957e818be23832967f Author: zvspany Date: Sat Mar 7 16:34:10 2026 +0100 Initial commit diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..590702c --- /dev/null +++ b/.env.example @@ -0,0 +1,3 @@ +# No API keys are required for the default setup. +# Optional: override the internal API route base when deploying behind a proxy. +# NEXT_PUBLIC_API_BASE_URL= diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..1a1ad7a --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,6 @@ +{ + "extends": ["next/core-web-vitals", "next/typescript"], + "rules": { + "@next/next/no-img-element": "off" + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6605d03 --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +node_modules/ +.next/ +out/ +dist/ +build/ +.env +.env.local +.env.*.local +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +.DS_Store diff --git a/README.md b/README.md new file mode 100644 index 0000000..b8a821c --- /dev/null +++ b/README.md @@ -0,0 +1,153 @@ +# NexCurrency + +Modern currency and crypto converter built with Next.js 14, TypeScript, Tailwind CSS, and shadcn-style UI components. + +## Features + +- Unified conversion for: + - Fiat to fiat + - Fiat to crypto + - Crypto to fiat + - Crypto to crypto +- Searchable asset selectors with popular presets +- Currency icons in selectors and conversion summary: + - Crypto icons from `cryptocurrency-icons` + - Fiat flags from `currency-flags` +- Default pair: `USD -> EUR` +- Instant conversion with swap action +- Current rate, inverse rate, and last update timestamp +- Client-side validation for invalid/negative amounts +- Loading, error, and empty states +- Dark, responsive fintech-style UI for mobile and desktop +- Normalized data layer for easy API provider swapping + +## Tech Stack + +- Next.js 14 (App Router) +- TypeScript +- Tailwind CSS +- shadcn-style UI components (local implementation) +- Zod (validation) + +## Data Sources + +- Fiat rates and currency list: [Frankfurter](https://www.frankfurter.app/) +- Crypto USD prices: [CoinGecko API](https://www.coingecko.com/en/api) + +The app normalizes both feeds into a shared internal model (`usdPrice` per asset) and performs all conversions through USD when direct pairs are not available. + +## Project Structure + +```text +. +├── app +│ ├── api/rates/route.ts +│ ├── globals.css +│ ├── layout.tsx +│ └── page.tsx +├── components +│ ├── converter +│ │ ├── converter-card.tsx +│ │ └── currency-select.tsx +│ ├── sections +│ │ ├── hero.tsx +│ │ └── insights-section.tsx +│ └── ui +│ ├── badge.tsx +│ ├── button.tsx +│ ├── card.tsx +│ ├── command.tsx +│ ├── input.tsx +│ ├── popover.tsx +│ ├── separator.tsx +│ └── skeleton.tsx +├── hooks +│ ├── use-debounced-value.ts +│ └── use-market-rates.ts +├── lib +│ ├── api +│ │ ├── crypto.ts +│ │ ├── fiat.ts +│ │ └── normalize.ts +│ ├── assets.ts +│ ├── format.ts +│ ├── rates.ts +│ ├── utils.ts +│ └── validation.ts +├── .env.example +├── next.config.mjs +├── package.json +├── postcss.config.mjs +├── tailwind.config.ts +└── tsconfig.json +``` + +## Setup + +1. Install dependencies: + +```bash +npm install +``` + +2. Run development server: + +```bash +npm run dev +``` + +3. Open: + +```text +http://localhost:3000 +``` + +## Build and Lint + +```bash +npm run lint +npm run build +npm run start +``` + +If you update `cryptocurrency-icons`, resync local PNG assets with: + +```bash +npm run sync:crypto-icons +``` + +## Environment Variables + +No API keys are required. + +Optional variable (only if you want to call API routes through a custom base URL): + +```env +NEXT_PUBLIC_API_BASE_URL= +``` + +If empty, the app uses the local default (`/api/rates`). + +## Architecture Notes + +- `app/api/rates/route.ts` is the single internal market endpoint for the frontend. +- Provider modules are isolated in `lib/api/` so they can be swapped independently. +- `lib/api/normalize.ts` unifies fiat and crypto responses into one shape used by UI. +- Conversion formula is provider-agnostic: + - `result = amount * (from.usdPrice / to.usdPrice)` +- UI stays fully client-side for interaction speed, while data aggregation stays server-side. + +## Validation and Formatting + +- Input validation is handled with Zod (`lib/validation.ts`) +- Fiat and crypto formatting rules are separated (`lib/format.ts`) +- Crypto values allow higher precision and support fractional amounts + +## Notes + +- The UI and all copy are fully English. +- Default experience is dark mode with a premium minimalist style. + +## License + +This project is licensed under the MIT License. See the `LICENSE` file for full text. diff --git a/app/api/rates/route.ts b/app/api/rates/route.ts new file mode 100644 index 0000000..b02487e --- /dev/null +++ b/app/api/rates/route.ts @@ -0,0 +1,75 @@ +import { NextResponse } from "next/server"; +import { fetchUnifiedRates } from "@/lib/api/normalize"; +import type { RatesResponse } from "@/lib/rates"; + +const CACHE_TTL_MS = 300_000; +const CACHE_CONTROL_VALUE = "s-maxage=300, stale-while-revalidate=1800"; + +let cachedRates: RatesResponse | null = null; +let cacheTimestamp = 0; +let inFlightRequest: Promise | null = null; + +export const revalidate = 300; + +async function getRatesWithCache(): Promise { + const now = Date.now(); + const hasFreshCache = cachedRates && now - cacheTimestamp < CACHE_TTL_MS; + + if (hasFreshCache && cachedRates) { + return cachedRates; + } + + if (inFlightRequest) { + return inFlightRequest; + } + + inFlightRequest = (async () => { + const freshRates = await fetchUnifiedRates(); + cachedRates = freshRates; + cacheTimestamp = Date.now(); + return freshRates; + })(); + + try { + return await inFlightRequest; + } finally { + inFlightRequest = null; + } +} + +export async function GET() { + try { + const data = await getRatesWithCache(); + + return NextResponse.json(data, { + status: 200, + headers: { + "Cache-Control": CACHE_CONTROL_VALUE + } + }); + } catch (error) { + if (cachedRates) { + return NextResponse.json(cachedRates, { + status: 200, + headers: { + "Cache-Control": CACHE_CONTROL_VALUE, + "X-Cache-Fallback": "stale-on-error" + } + }); + } + + const message = + error instanceof Error + ? error.message + : "Unexpected error while loading rates"; + + return NextResponse.json( + { + message + }, + { + status: 500 + } + ); + } +} diff --git a/app/globals.css b/app/globals.css new file mode 100644 index 0000000..d33aef9 --- /dev/null +++ b/app/globals.css @@ -0,0 +1,78 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +:root { + --background: 222 47% 8%; + --foreground: 213 31% 96%; + --card: 220 34% 11%; + --card-foreground: 210 38% 96%; + --popover: 221 36% 12%; + --popover-foreground: 210 38% 97%; + --primary: 193 92% 58%; + --primary-foreground: 221 39% 10%; + --secondary: 217 20% 18%; + --secondary-foreground: 210 37% 95%; + --muted: 218 18% 18%; + --muted-foreground: 217 17% 72%; + --accent: 202 88% 16%; + --accent-foreground: 198 100% 90%; + --border: 217 24% 24%; + --input: 217 24% 24%; + --ring: 192 89% 60%; + --radius: 0.9rem; +} + +* { + @apply border-border; +} + +html, +body { + height: 100%; +} + +body { + @apply bg-background text-foreground; + font-family: "Manrope", "Avenir Next", "Segoe UI", sans-serif; + position: relative; + z-index: 0; + isolation: isolate; + overflow-x: hidden; + background-color: hsl(var(--background)); +} + +body::before { + content: ""; + position: fixed; + inset: -15vh -15vw; + z-index: -1; + pointer-events: none; + background-image: + radial-gradient( + 68% 58% at 50% -10%, + hsl(193 95% 58% / 0.24) 0%, + hsl(193 95% 58% / 0.13) 38%, + transparent 76% + ), + radial-gradient(52% 64% at 102% 42%, hsl(162 90% 50% / 0.11) 0%, transparent 74%), + radial-gradient(52% 64% at -2% 78%, hsl(210 92% 56% / 0.1) 0%, transparent 74%), + linear-gradient(180deg, hsl(222 45% 7%) 0%, hsl(223 48% 6%) 100%); + transform: translateZ(0); + will-change: transform; +} + +.font-heading { + font-family: "Space Grotesk", "Manrope", "Segoe UI", sans-serif; +} + +@layer base { + h1, + h2, + h3, + h4, + h5, + h6 { + @apply font-heading; + } +} diff --git a/app/layout.tsx b/app/layout.tsx new file mode 100644 index 0000000..996590f --- /dev/null +++ b/app/layout.tsx @@ -0,0 +1,24 @@ +import type { Metadata } from "next"; + +import "./globals.css"; +import "currency-flags/dist/currency-flags.min.css"; + +export const metadata: Metadata = { + title: "NexCurrency | Modern Currency & Crypto Converter", + description: + "Convert fiat and crypto assets instantly with live rates, smart formatting, and a premium modern interface." +}; + +export default function RootLayout({ + children +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( + + + {children} + + + ); +} diff --git a/app/page.tsx b/app/page.tsx new file mode 100644 index 0000000..583213e --- /dev/null +++ b/app/page.tsx @@ -0,0 +1,65 @@ +"use client"; + +import { useCallback, useState } from "react"; + +import { ConverterCard } from "@/components/converter/converter-card"; +import { Hero } from "@/components/sections/hero"; +import { InsightsSection } from "@/components/sections/insights-section"; + +const DEFAULT_FROM = "USD"; +const DEFAULT_TO = "EUR"; + +export default function HomePage() { + const [selectedFromCode, setSelectedFromCode] = useState(DEFAULT_FROM); + const [selectedToCode, setSelectedToCode] = useState(DEFAULT_TO); + + const handleSelectPopularPair = useCallback( + (fromCode: string, toCode: string) => { + setSelectedFromCode(fromCode); + setSelectedToCode(toCode); + }, + [], + ); + + const handlePairChange = useCallback((fromCode: string, toCode: string) => { + setSelectedFromCode(fromCode); + setSelectedToCode(toCode); + }, []); + + return ( +
+
+ +
+ + +
+
+ +
+

+ Market data is provided by Frankfurter and CoinGecko. Rates are + refreshed automatically. +

+ {/* + + Repository + + */} +
+
+ ); +} diff --git a/components/converter/converter-card.tsx b/components/converter/converter-card.tsx new file mode 100644 index 0000000..080d274 --- /dev/null +++ b/components/converter/converter-card.tsx @@ -0,0 +1,362 @@ +"use client"; + +import { useEffect, useMemo, useState } from "react"; +import { AlertTriangle, ArrowUpDown, Loader2, RefreshCcw } from "lucide-react"; + +import { CurrencyIcon } from "@/components/converter/currency-icon"; +import { CurrencySelect } from "@/components/converter/currency-select"; +import { Badge } from "@/components/ui/badge"; +import { Button } from "@/components/ui/button"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle +} from "@/components/ui/card"; +import { Input } from "@/components/ui/input"; +import { Separator } from "@/components/ui/separator"; +import { Skeleton } from "@/components/ui/skeleton"; +import { useDebouncedValue } from "@/hooks/use-debounced-value"; +import { useMarketRates } from "@/hooks/use-market-rates"; +import { + formatAmount, + formatInverseRate, + formatRate, + formatTimestamp +} from "@/lib/format"; +import { buildRateMap, convertAmount } from "@/lib/rates"; +import { validateAmount } from "@/lib/validation"; + +const DEFAULT_FROM = "USD"; +const DEFAULT_TO = "EUR"; + +interface ConverterCardProps { + forcedFromCode?: string; + forcedToCode?: string; + onPairChange?: (fromCode: string, toCode: string) => void; +} + +function ConverterSkeleton() { + return ( + + + + + + +
+ + +
+
+ + + +
+ +
+
+ ); +} + +function ErrorState({ + message, + onRetry +}: { + message: string; + onRetry: () => void; +}) { + return ( + + +
+ +
+

Unable to load market rates

+

{message}

+
+
+ +
+
+ ); +} + +function EmptyState() { + return ( + + +

+ No assets are currently available. Please try again shortly. +

+
+
+ ); +} + +export function ConverterCard({ + forcedFromCode, + forcedToCode, + onPairChange +}: ConverterCardProps) { + const { data, error, isLoading, refresh } = useMarketRates(); + + const [amountInput, setAmountInput] = useState("1"); + const [fromCode, setFromCode] = useState(DEFAULT_FROM); + const [toCode, setToCode] = useState(DEFAULT_TO); + + const debouncedAmount = useDebouncedValue(amountInput, 120); + + const assets = useMemo(() => data?.assets ?? [], [data]); + const rateMap = useMemo(() => buildRateMap(assets), [assets]); + + useEffect(() => { + if (!assets.length) { + return; + } + + if (!rateMap.has(fromCode)) { + setFromCode(rateMap.has(DEFAULT_FROM) ? DEFAULT_FROM : assets[0].code); + } + + if (!rateMap.has(toCode)) { + const fallback = rateMap.has(DEFAULT_TO) + ? DEFAULT_TO + : assets.find((asset) => asset.code !== fromCode)?.code ?? assets[0].code; + + setToCode(fallback); + } + }, [assets, fromCode, toCode, rateMap]); + + useEffect(() => { + if (!assets.length) { + return; + } + + if (forcedFromCode && rateMap.has(forcedFromCode)) { + setFromCode(forcedFromCode); + } + + if (forcedToCode && rateMap.has(forcedToCode)) { + setToCode(forcedToCode); + } + }, [assets, forcedFromCode, forcedToCode, rateMap]); + + useEffect(() => { + onPairChange?.(fromCode, toCode); + }, [fromCode, toCode, onPairChange]); + + const inputValidation = validateAmount(amountInput); + const debouncedValidation = validateAmount(debouncedAmount); + + const fromAsset = rateMap.get(fromCode); + const toAsset = rateMap.get(toCode); + + const convertedValue = useMemo(() => { + if (!fromAsset || !toAsset || !debouncedValidation.ok) { + return null; + } + + return convertAmount(debouncedValidation.value, fromAsset, toAsset); + }, [fromAsset, toAsset, debouncedValidation]); + + const currentRate = useMemo(() => { + if (!fromAsset || !toAsset) { + return null; + } + + return formatRate(fromAsset, toAsset); + }, [fromAsset, toAsset]); + + const inverseRate = useMemo(() => { + if (!fromAsset || !toAsset) { + return null; + } + + return formatInverseRate(fromAsset, toAsset); + }, [fromAsset, toAsset]); + + const handleSwap = () => { + setFromCode(toCode); + setToCode(fromCode); + }; + + if (isLoading && !data) { + return ; + } + + if (!data && error) { + return void refresh()} />; + } + + if (!data || assets.length === 0) { + return ; + } + + const convertedDisplay = + convertedValue !== null && toAsset + ? `${formatAmount(convertedValue, toAsset)} ${toAsset.code}` + : "--"; + + const amountError = inputValidation.ok ? null : inputValidation.error; + + return ( + + +
+ + Smart Converter + +
+ + Fiat: {data.sources.fiat} + + + Crypto: {data.sources.crypto} + +
+
+ + Convert fiat and crypto assets instantly using live normalized USD quote data. + +
+ + {error ? ( +
+ + Using last successful data. Latest refresh failed: {error} +
+ ) : null} + +
+ + setAmountInput(event.target.value)} + placeholder="Enter amount" + className="h-14 rounded-xl bg-background/70 px-4 text-lg" + aria-invalid={Boolean(amountError)} + aria-describedby={amountError ? "amount-error" : undefined} + /> + {amountError ? ( +

+ {amountError} +

+ ) : null} +
+ +
+ + + +
+ +
+

+ Converted value +

+ {fromAsset && toAsset ? ( +
+ + + {fromAsset.code} + + to + + + {toAsset.code} + +
+ ) : null} +

+ {convertedDisplay} +

+ {fromAsset ? ( +

+ for {inputValidation.ok ? formatAmount(inputValidation.value, fromAsset) : "-"}{" "} + {fromAsset.code} +

+ ) : null} +
+ + + +
+
+

Current rate

+

+ {fromAsset && toAsset && currentRate + ? `1 ${fromAsset.code} = ${currentRate} ${toAsset.code}` + : "-"} +

+
+
+

Inverse rate

+

+ {fromAsset && toAsset && inverseRate + ? `1 ${toAsset.code} = ${inverseRate} ${fromAsset.code}` + : "-"} +

+
+
+

Last updated

+

+ {formatTimestamp(data.updatedAt)} +

+
+
+ +
+ +
+ + {isLoading ? ( +
+ + Updating market rates... +
+ ) : null} +
+
+ ); +} diff --git a/components/converter/currency-icon.tsx b/components/converter/currency-icon.tsx new file mode 100644 index 0000000..54d71f1 --- /dev/null +++ b/components/converter/currency-icon.tsx @@ -0,0 +1,82 @@ +"use client"; + +import { useMemo, useState } from "react"; + +import type { AssetType } from "@/lib/assets"; +import { FIAT_FLAG_CODES } from "@/lib/fiat-flag-codes"; +import { cn } from "@/lib/utils"; + +const sizeClassMap = { + sm: "h-5 w-5", + md: "h-6 w-6", + lg: "h-8 w-8" +} as const; + +type IconSize = keyof typeof sizeClassMap; + +interface CurrencyIconProps { + code: string; + type: AssetType; + size?: IconSize; + className?: string; +} + +export function CurrencyIcon({ + code, + type, + size = "md", + className +}: CurrencyIconProps) { + const [cryptoMissing, setCryptoMissing] = useState(false); + + const lowerCode = useMemo(() => code.toLowerCase(), [code]); + const wrapperSize = sizeClassMap[size]; + + if (type === "fiat" && FIAT_FLAG_CODES.has(lowerCode)) { + return ( + + + + ); + } + + if (type === "crypto" && !cryptoMissing) { + return ( + setCryptoMissing(true)} + /> + ); + } + + return ( + + {code.slice(0, 2)} + + ); +} diff --git a/components/converter/currency-select.tsx b/components/converter/currency-select.tsx new file mode 100644 index 0000000..4d7f5e3 --- /dev/null +++ b/components/converter/currency-select.tsx @@ -0,0 +1,193 @@ +"use client"; + +import { useMemo, useState } from "react"; +import { Check, ChevronDown } from "lucide-react"; + +import { POPULAR_CODES } from "@/lib/assets"; +import { RateAsset } from "@/lib/rates"; +import { cn } from "@/lib/utils"; +import { CurrencyIcon } from "@/components/converter/currency-icon"; +import { Button } from "@/components/ui/button"; +import { + Command, + CommandEmpty, + CommandGroup, + CommandInput, + CommandItem, + CommandList, + CommandSeparator +} from "@/components/ui/command"; +import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"; + +interface CurrencySelectProps { + value: string; + onChange: (nextCode: string) => void; + assets: RateAsset[]; + label: string; + disabled?: boolean; +} + +function AssetLabel({ asset }: { asset?: RateAsset }) { + if (!asset) { + return ( + Choose currency + ); + } + + return ( + + + + + {asset.code} - {asset.name} + + + {asset.type === "fiat" ? "Fiat" : "Crypto"} + {asset.symbol ? ` | ${asset.symbol}` : ""} + + + + ); +} + +export function CurrencySelect({ + value, + onChange, + assets, + label, + disabled +}: CurrencySelectProps) { + const [open, setOpen] = useState(false); + + const selectedAsset = useMemo( + () => assets.find((asset) => asset.code === value), + [assets, value] + ); + + const popularAssets = useMemo( + () => + POPULAR_CODES.map((code) => assets.find((asset) => asset.code === code)).filter( + (asset): asset is RateAsset => Boolean(asset) + ), + [assets] + ); + + const allAssets = useMemo(() => { + const popularSet = new Set(popularAssets.map((asset) => asset.code)); + + return assets + .filter((asset) => !popularSet.has(asset.code)) + .sort((a, b) => { + if (a.type !== b.type) { + return a.type === "fiat" ? -1 : 1; + } + + return a.code.localeCompare(b.code); + }); + }, [assets, popularAssets]); + + return ( +
+

+ {label} +

+ + + + + + + + + No assets found. + {popularAssets.length > 0 ? ( + + {popularAssets.map((asset) => ( + { + onChange(asset.code); + setOpen(false); + }} + > +
+ + + + {asset.code} - {asset.name} + + + {asset.type === "fiat" ? "Fiat" : "Crypto"} + {asset.symbol ? ` | ${asset.symbol}` : ""} + + +
+ +
+ ))} +
+ ) : null} + {allAssets.length > 0 ? : null} + + {allAssets.map((asset) => ( + { + onChange(asset.code); + setOpen(false); + }} + > +
+ + + + {asset.code} - {asset.name} + + + {asset.type === "fiat" ? "Fiat" : "Crypto"} + {asset.symbol ? ` | ${asset.symbol}` : ""} + + +
+ +
+ ))} +
+
+
+
+
+
+ ); +} diff --git a/components/sections/hero.tsx b/components/sections/hero.tsx new file mode 100644 index 0000000..661f538 --- /dev/null +++ b/components/sections/hero.tsx @@ -0,0 +1,23 @@ +import { Badge } from "@/components/ui/badge"; + +export function Hero() { + return ( +
+
+ + Real-time fiat and crypto conversion + +

+ Convert Global Currencies and Crypto in One Premium Workspace +

+

+ Instantly switch between fiat and digital assets with live rates, smart + formatting, and a clean professional interface built for speed. +

+
+
+ ); +} diff --git a/components/sections/insights-section.tsx b/components/sections/insights-section.tsx new file mode 100644 index 0000000..930ba13 --- /dev/null +++ b/components/sections/insights-section.tsx @@ -0,0 +1,145 @@ +"use client"; + +import { ArrowRightLeft, Landmark, Layers, MoveRight, Workflow } from "lucide-react"; + +import { CurrencyIcon } from "@/components/converter/currency-icon"; +import { Button } from "@/components/ui/button"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import type { AssetType } from "@/lib/assets"; +import { cn } from "@/lib/utils"; + +interface PopularPair { + from: string; + to: string; + fromType: AssetType; + toType: AssetType; +} + +const popularPairs: PopularPair[] = [ + { from: "USD", to: "PLN", fromType: "fiat", toType: "fiat" }, + { from: "EUR", to: "GBP", fromType: "fiat", toType: "fiat" }, + { from: "USD", to: "BTC", fromType: "fiat", toType: "crypto" }, + { from: "BTC", to: "USD", fromType: "crypto", toType: "fiat" }, + { from: "ETH", to: "SOL", fromType: "crypto", toType: "crypto" }, + { from: "XMR", to: "BTC", fromType: "crypto", toType: "crypto" }, + { from: "LTC", to: "BTC", fromType: "crypto", toType: "crypto" }, + { from: "CHF", to: "JPY", fromType: "fiat", toType: "fiat" } +]; + +const howItWorks = [ + "Fiat rates are fetched from Frankfurter with USD as the common quote.", + "Crypto prices are fetched from CoinGecko in USD.", + "Any pair is converted through normalized USD-per-unit pricing." +]; + +const supportedAssets = [ + { + title: "Fiat currencies", + description: + "Supports a broad list of global government-issued currencies, including major and regional pairs." + }, + { + title: "Cryptocurrencies", + description: + "Includes leading crypto assets such as BTC, ETH, LTC, XMR, SOL, USDT, and more." + }, + { + title: "Cross-market pairs", + description: + "Convert fiat-to-crypto, crypto-to-fiat, and crypto-to-crypto in one unified experience." + } +]; + +interface InsightsSectionProps { + selectedFromCode: string; + selectedToCode: string; + onSelectPopularPair: (fromCode: string, toCode: string) => void; +} + +export function InsightsSection({ + selectedFromCode, + selectedToCode, + onSelectPopularPair +}: InsightsSectionProps) { + return ( +
+ + + + + Popular conversions + + + + {popularPairs.map((pair) => { + const isActive = + pair.from === selectedFromCode && pair.to === selectedToCode; + + return ( + + ); + })} + + + + + + + + How it works + + + + {howItWorks.map((line) => ( +

+ {line} +

+ ))} +
+
+ + + + + + Supported asset types + + + + {supportedAssets.map((item) => ( +
+

+ + {item.title} +

+

{item.description}

+
+ ))} +
+
+
+ ); +} diff --git a/components/ui/badge.tsx b/components/ui/badge.tsx new file mode 100644 index 0000000..dc384b4 --- /dev/null +++ b/components/ui/badge.tsx @@ -0,0 +1,30 @@ +import * as React from "react"; +import { cva, type VariantProps } from "class-variance-authority"; + +import { cn } from "@/lib/utils"; + +const badgeVariants = cva( + "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-medium transition-colors", + { + variants: { + variant: { + default: "border-transparent bg-primary/20 text-primary", + secondary: "border-transparent bg-secondary text-secondary-foreground", + outline: "border-border text-foreground" + } + }, + defaultVariants: { + variant: "default" + } + } +); + +export interface BadgeProps + extends React.HTMLAttributes, + VariantProps {} + +function Badge({ className, variant, ...props }: BadgeProps) { + return
; +} + +export { Badge, badgeVariants }; diff --git a/components/ui/button.tsx b/components/ui/button.tsx new file mode 100644 index 0000000..30ec2bf --- /dev/null +++ b/components/ui/button.tsx @@ -0,0 +1,55 @@ +import * as React from "react"; +import { Slot } from "@radix-ui/react-slot"; +import { cva, type VariantProps } from "class-variance-authority"; + +import { cn } from "@/lib/utils"; + +const buttonVariants = cva( + "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-lg text-sm font-medium transition-all duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50", + { + variants: { + variant: { + default: + "bg-primary text-primary-foreground shadow-sm hover:bg-primary/90 active:scale-[0.99]", + secondary: + "bg-secondary text-secondary-foreground hover:bg-secondary/85", + ghost: "hover:bg-accent hover:text-accent-foreground", + outline: + "border border-border bg-background/70 backdrop-blur hover:bg-accent hover:text-accent-foreground" + }, + size: { + default: "h-10 px-4 py-2", + sm: "h-9 rounded-md px-3", + lg: "h-11 rounded-lg px-8", + icon: "h-10 w-10" + } + }, + defaultVariants: { + variant: "default", + size: "default" + } + } +); + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps { + asChild?: boolean; +} + +const Button = React.forwardRef( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "button"; + + return ( + + ); + } +); +Button.displayName = "Button"; + +export { Button, buttonVariants }; diff --git a/components/ui/card.tsx b/components/ui/card.tsx new file mode 100644 index 0000000..040b6aa --- /dev/null +++ b/components/ui/card.tsx @@ -0,0 +1,72 @@ +import * as React from "react"; + +import { cn } from "@/lib/utils"; + +const Card = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)); +Card.displayName = "Card"; + +const CardHeader = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)); +CardHeader.displayName = "CardHeader"; + +const CardTitle = React.forwardRef< + HTMLHeadingElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)); +CardTitle.displayName = "CardTitle"; + +const CardDescription = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)); +CardDescription.displayName = "CardDescription"; + +const CardContent = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)); +CardContent.displayName = "CardContent"; + +const CardFooter = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)); +CardFooter.displayName = "CardFooter"; + +export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }; diff --git a/components/ui/command.tsx b/components/ui/command.tsx new file mode 100644 index 0000000..581a52a --- /dev/null +++ b/components/ui/command.tsx @@ -0,0 +1,116 @@ +"use client"; + +import * as React from "react"; +import { Command as CommandPrimitive } from "cmdk"; +import { Search } from "lucide-react"; + +import { cn } from "@/lib/utils"; + +const Command = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +Command.displayName = CommandPrimitive.displayName; + +const CommandInput = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( +
+ + +
+)); +CommandInput.displayName = CommandPrimitive.Input.displayName; + +const CommandList = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +CommandList.displayName = CommandPrimitive.List.displayName; + +const CommandEmpty = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>((props, ref) => ( + +)); +CommandEmpty.displayName = CommandPrimitive.Empty.displayName; + +const CommandGroup = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +CommandGroup.displayName = CommandPrimitive.Group.displayName; + +const CommandItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +CommandItem.displayName = CommandPrimitive.Item.displayName; + +const CommandSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +CommandSeparator.displayName = CommandPrimitive.Separator.displayName; + +export { + Command, + CommandInput, + CommandList, + CommandEmpty, + CommandGroup, + CommandItem, + CommandSeparator +}; diff --git a/components/ui/input.tsx b/components/ui/input.tsx new file mode 100644 index 0000000..3fcc313 --- /dev/null +++ b/components/ui/input.tsx @@ -0,0 +1,24 @@ +import * as React from "react"; + +import { cn } from "@/lib/utils"; + +export type InputProps = React.InputHTMLAttributes; + +const Input = React.forwardRef( + ({ className, type, ...props }, ref) => { + return ( + + ); + } +); +Input.displayName = "Input"; + +export { Input }; diff --git a/components/ui/popover.tsx b/components/ui/popover.tsx new file mode 100644 index 0000000..3cd2af4 --- /dev/null +++ b/components/ui/popover.tsx @@ -0,0 +1,31 @@ +"use client"; + +import * as React from "react"; +import * as PopoverPrimitive from "@radix-ui/react-popover"; + +import { cn } from "@/lib/utils"; + +const Popover = PopoverPrimitive.Root; +const PopoverTrigger = PopoverPrimitive.Trigger; +const PopoverAnchor = PopoverPrimitive.Anchor; + +const PopoverContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, align = "center", sideOffset = 10, ...props }, ref) => ( + + + +)); +PopoverContent.displayName = PopoverPrimitive.Content.displayName; + +export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }; diff --git a/components/ui/separator.tsx b/components/ui/separator.tsx new file mode 100644 index 0000000..00ace7b --- /dev/null +++ b/components/ui/separator.tsx @@ -0,0 +1,28 @@ +import * as React from "react"; + +import { cn } from "@/lib/utils"; + +function Separator({ + className, + orientation = "horizontal", + decorative = true, + ...props +}: React.HTMLAttributes & { + orientation?: "horizontal" | "vertical"; + decorative?: boolean; +}) { + return ( +
+ ); +} + +export { Separator }; diff --git a/components/ui/skeleton.tsx b/components/ui/skeleton.tsx new file mode 100644 index 0000000..975c697 --- /dev/null +++ b/components/ui/skeleton.tsx @@ -0,0 +1,17 @@ +import type * as React from "react"; + +import { cn } from "@/lib/utils"; + +function Skeleton({ className, ...props }: React.HTMLAttributes) { + return ( +
+ ); +} + +export { Skeleton }; diff --git a/hooks/use-debounced-value.ts b/hooks/use-debounced-value.ts new file mode 100644 index 0000000..48812b4 --- /dev/null +++ b/hooks/use-debounced-value.ts @@ -0,0 +1,19 @@ +"use client"; + +import { useEffect, useState } from "react"; + +export function useDebouncedValue(value: T, delayMs: number): T { + const [debounced, setDebounced] = useState(value); + + useEffect(() => { + const id = window.setTimeout(() => { + setDebounced(value); + }, delayMs); + + return () => { + window.clearTimeout(id); + }; + }, [value, delayMs]); + + return debounced; +} diff --git a/hooks/use-market-rates.ts b/hooks/use-market-rates.ts new file mode 100644 index 0000000..9d35f7e --- /dev/null +++ b/hooks/use-market-rates.ts @@ -0,0 +1,89 @@ +"use client"; + +import { useCallback, useEffect, useMemo, useState } from "react"; + +import { parseRatesResponse, RatesResponse } from "@/lib/rates"; + +const REFRESH_INTERVAL_MS = 60_000; + +function buildApiUrl(path: string): string { + const base = process.env.NEXT_PUBLIC_API_BASE_URL?.trim(); + + if (!base) { + return path; + } + + return `${base.replace(/\/$/, "")}${path}`; +} + +export function useMarketRates() { + const [data, setData] = useState(null); + const [error, setError] = useState(null); + const [isLoading, setIsLoading] = useState(true); + + const fetchRates = useCallback(async () => { + try { + const response = await fetch(buildApiUrl("/api/rates")); + + if (!response.ok) { + const payload = (await response.json().catch(() => null)) as { + message?: string; + } | null; + + throw new Error( + payload?.message ?? "Unable to fetch latest market rates", + ); + } + + const payload = await response.json(); + const parsed = parseRatesResponse(payload); + + setData(parsed); + setError(null); + } catch (err) { + const message = err instanceof Error ? err.message : "Unknown error"; + setError(message); + } finally { + setIsLoading(false); + } + }, []); + + useEffect(() => { + void fetchRates(); + + const tick = () => { + if (document.visibilityState === "visible") { + void fetchRates(); + } + }; + + const id = window.setInterval(() => { + tick(); + }, REFRESH_INTERVAL_MS); + + const handleVisibilityChange = () => { + if (document.visibilityState === "visible") { + void fetchRates(); + } + }; + + document.addEventListener("visibilitychange", handleVisibilityChange); + + return () => { + window.clearInterval(id); + document.removeEventListener("visibilitychange", handleVisibilityChange); + }; + }, [fetchRates]); + + const state = useMemo( + () => ({ + data, + error, + isLoading, + refresh: fetchRates, + }), + [data, error, isLoading, fetchRates], + ); + + return state; +} diff --git a/lib/api/crypto.ts b/lib/api/crypto.ts new file mode 100644 index 0000000..235fffa --- /dev/null +++ b/lib/api/crypto.ts @@ -0,0 +1,66 @@ +import { CRYPTO_ASSETS } from "@/lib/assets"; + +export interface CryptoRateResult { + usdPrices: Record; + updatedAt: string; +} + +const COINGECKO_BASE_URL = "https://api.coingecko.com/api/v3"; + +export async function fetchCryptoData(): Promise { + const ids = CRYPTO_ASSETS.map((asset) => asset.providerId).filter( + (id): id is string => Boolean(id) + ); + + const url = `${COINGECKO_BASE_URL}/simple/price?ids=${encodeURIComponent( + ids.join(",") + )}&vs_currencies=usd&include_last_updated_at=true`; + + const response = await fetch(url, { + next: { revalidate: 60 }, + headers: { + accept: "application/json" + } + }); + + if (!response.ok) { + throw new Error(`Unable to load crypto rates (${response.status})`); + } + + const payload = (await response.json()) as Record< + string, + { + usd?: number; + last_updated_at?: number; + } + >; + + const usdPrices: Record = {}; + let mostRecentUpdate = 0; + + for (const asset of CRYPTO_ASSETS) { + if (!asset.providerId) { + continue; + } + + const entry = payload[asset.providerId]; + + if (!entry?.usd || entry.usd <= 0) { + continue; + } + + usdPrices[asset.code] = entry.usd; + + if (entry.last_updated_at && entry.last_updated_at > mostRecentUpdate) { + mostRecentUpdate = entry.last_updated_at; + } + } + + return { + usdPrices, + updatedAt: + mostRecentUpdate > 0 + ? new Date(mostRecentUpdate * 1000).toISOString() + : new Date().toISOString() + }; +} diff --git a/lib/api/fiat.ts b/lib/api/fiat.ts new file mode 100644 index 0000000..89449c7 --- /dev/null +++ b/lib/api/fiat.ts @@ -0,0 +1,43 @@ +export interface FiatRateResult { + currencyNames: Record; + usdRates: Record; + updatedAt: string; +} + +const FRANKFURTER_BASE_URL = "https://api.frankfurter.app"; + +export async function fetchFiatData(): Promise { + const [currenciesRes, latestRes] = await Promise.all([ + fetch(`${FRANKFURTER_BASE_URL}/currencies`, { + next: { revalidate: 60 } + }), + fetch(`${FRANKFURTER_BASE_URL}/latest?from=USD`, { + next: { revalidate: 60 } + }) + ]); + + if (!currenciesRes.ok) { + throw new Error(`Unable to load fiat currency names (${currenciesRes.status})`); + } + + if (!latestRes.ok) { + throw new Error(`Unable to load fiat rates (${latestRes.status})`); + } + + const currencyNames = (await currenciesRes.json()) as Record; + const latest = (await latestRes.json()) as { + date: string; + rates: Record; + }; + + const usdRates: Record = { + USD: 1, + ...latest.rates + }; + + return { + currencyNames, + usdRates, + updatedAt: new Date(`${latest.date}T00:00:00Z`).toISOString() + }; +} diff --git a/lib/api/normalize.ts b/lib/api/normalize.ts new file mode 100644 index 0000000..173d5ee --- /dev/null +++ b/lib/api/normalize.ts @@ -0,0 +1,58 @@ +import { buildAllAssets } from "@/lib/assets"; +import { fetchCryptoData } from "@/lib/api/crypto"; +import { fetchFiatData } from "@/lib/api/fiat"; +import { RateAsset, RatesResponse } from "@/lib/rates"; + +function normalizeFiatUsdPrice(usdRate: number): number { + return 1 / usdRate; +} + +export async function fetchUnifiedRates(): Promise { + const [fiat, crypto] = await Promise.all([fetchFiatData(), fetchCryptoData()]); + const assetDefinitions = buildAllAssets(fiat.currencyNames); + + const assets: RateAsset[] = []; + + for (const asset of assetDefinitions) { + if (asset.type === "fiat") { + const usdRate = fiat.usdRates[asset.code]; + + if (!usdRate || usdRate <= 0) { + continue; + } + + assets.push({ + ...asset, + usdPrice: normalizeFiatUsdPrice(usdRate), + updatedAt: fiat.updatedAt + }); + + continue; + } + + const usdPrice = crypto.usdPrices[asset.code]; + + if (!usdPrice || usdPrice <= 0) { + continue; + } + + assets.push({ + ...asset, + usdPrice, + updatedAt: crypto.updatedAt + }); + } + + const fiatUpdated = new Date(fiat.updatedAt).getTime(); + const cryptoUpdated = new Date(crypto.updatedAt).getTime(); + + return { + assets, + quoteCurrency: "USD", + updatedAt: new Date(Math.max(fiatUpdated, cryptoUpdated)).toISOString(), + sources: { + fiat: "Frankfurter", + crypto: "CoinGecko" + } + }; +} diff --git a/lib/assets.ts b/lib/assets.ts new file mode 100644 index 0000000..0ba1746 --- /dev/null +++ b/lib/assets.ts @@ -0,0 +1,133 @@ +export type AssetType = "fiat" | "crypto"; + +export interface AssetDefinition { + code: string; + name: string; + type: AssetType; + symbol?: string; + providerId?: string; + popular?: boolean; + decimals?: number; +} + +export const POPULAR_CODES = [ + "USD", + "EUR", + "GBP", + "PLN", + "CHF", + "JPY", + "BTC", + "ETH", + "LTC", + "XMR", + "SOL", + "USDT" +] as const; + +export const POPULAR_CODE_SET = new Set(POPULAR_CODES); + +export const FALLBACK_FIAT_CURRENCIES: Record = { + USD: { name: "US Dollar", symbol: "$" }, + EUR: { name: "Euro", symbol: "EUR" }, + GBP: { name: "British Pound", symbol: "GBP" }, + PLN: { name: "Polish Zloty", symbol: "PLN" }, + CHF: { name: "Swiss Franc", symbol: "CHF" }, + JPY: { name: "Japanese Yen", symbol: "JPY" }, + CAD: { name: "Canadian Dollar", symbol: "CAD" }, + AUD: { name: "Australian Dollar", symbol: "AUD" }, + NZD: { name: "New Zealand Dollar", symbol: "NZD" }, + SEK: { name: "Swedish Krona", symbol: "SEK" }, + NOK: { name: "Norwegian Krone", symbol: "NOK" }, + DKK: { name: "Danish Krone", symbol: "DKK" }, + CZK: { name: "Czech Koruna", symbol: "CZK" }, + HUF: { name: "Hungarian Forint", symbol: "HUF" }, + RON: { name: "Romanian Leu", symbol: "RON" }, + BGN: { name: "Bulgarian Lev", symbol: "BGN" }, + CNY: { name: "Chinese Yuan", symbol: "CNY" }, + HKD: { name: "Hong Kong Dollar", symbol: "HKD" }, + SGD: { name: "Singapore Dollar", symbol: "SGD" }, + INR: { name: "Indian Rupee", symbol: "INR" }, + KRW: { name: "South Korean Won", symbol: "KRW" }, + TRY: { name: "Turkish Lira", symbol: "TRY" }, + BRL: { name: "Brazilian Real", symbol: "BRL" }, + MXN: { name: "Mexican Peso", symbol: "MXN" }, + ZAR: { name: "South African Rand", symbol: "ZAR" }, + AED: { name: "UAE Dirham", symbol: "AED" }, + SAR: { name: "Saudi Riyal", symbol: "SAR" }, + ILS: { name: "Israeli New Shekel", symbol: "ILS" }, + THB: { name: "Thai Baht", symbol: "THB" }, + MYR: { name: "Malaysian Ringgit", symbol: "MYR" }, + IDR: { name: "Indonesian Rupiah", symbol: "IDR" } +}; + +export const CRYPTO_ASSETS: AssetDefinition[] = [ + { code: "BTC", name: "Bitcoin", type: "crypto", providerId: "bitcoin", symbol: "BTC", popular: true, decimals: 8 }, + { code: "ETH", name: "Ethereum", type: "crypto", providerId: "ethereum", popular: true, decimals: 8 }, + { code: "LTC", name: "Litecoin", type: "crypto", providerId: "litecoin", popular: true, decimals: 8 }, + { code: "XMR", name: "Monero", type: "crypto", providerId: "monero", popular: true, decimals: 8 }, + { code: "SOL", name: "Solana", type: "crypto", providerId: "solana", popular: true, decimals: 8 }, + { code: "USDT", name: "Tether", type: "crypto", providerId: "tether", popular: true, decimals: 8 }, + { code: "BNB", name: "BNB", type: "crypto", providerId: "binancecoin", decimals: 8 }, + { code: "XRP", name: "XRP", type: "crypto", providerId: "ripple", decimals: 8 }, + { code: "USDC", name: "USD Coin", type: "crypto", providerId: "usd-coin", decimals: 8 }, + { code: "ADA", name: "Cardano", type: "crypto", providerId: "cardano", decimals: 8 }, + { code: "DOGE", name: "Dogecoin", type: "crypto", providerId: "dogecoin", decimals: 8 }, + { code: "TRX", name: "TRON", type: "crypto", providerId: "tron", decimals: 8 }, + { code: "DOT", name: "Polkadot", type: "crypto", providerId: "polkadot", decimals: 8 }, + { code: "AVAX", name: "Avalanche", type: "crypto", providerId: "avalanche-2", decimals: 8 }, + { code: "LINK", name: "Chainlink", type: "crypto", providerId: "chainlink", decimals: 8 }, + { code: "TON", name: "Toncoin", type: "crypto", providerId: "the-open-network", decimals: 8 }, + { code: "NEAR", name: "NEAR Protocol", type: "crypto", providerId: "near", decimals: 8 }, + { code: "ATOM", name: "Cosmos", type: "crypto", providerId: "cosmos", decimals: 8 }, + { code: "BCH", name: "Bitcoin Cash", type: "crypto", providerId: "bitcoin-cash", decimals: 8 }, + { code: "ALGO", name: "Algorand", type: "crypto", providerId: "algorand", decimals: 8 }, + { code: "MATIC", name: "Polygon", type: "crypto", providerId: "matic-network", decimals: 8 }, + { code: "ETC", name: "Ethereum Classic", type: "crypto", providerId: "ethereum-classic", decimals: 8 } +]; + +export function buildFiatAssets( + fiatCurrencies?: Record +): AssetDefinition[] { + const source = fiatCurrencies && Object.keys(fiatCurrencies).length > 0 + ? fiatCurrencies + : Object.fromEntries( + Object.entries(FALLBACK_FIAT_CURRENCIES).map(([code, value]) => [code, value.name]) + ); + + return Object.entries(source) + .map(([code, name]) => { + const fallback = FALLBACK_FIAT_CURRENCIES[code]; + + return { + code, + name: fallback?.name ?? name, + type: "fiat" as const, + symbol: fallback?.symbol, + popular: POPULAR_CODE_SET.has(code) + }; + }) + .sort((a, b) => a.code.localeCompare(b.code)); +} + +export function buildAllAssets(fiatCurrencies?: Record): AssetDefinition[] { + return [...buildFiatAssets(fiatCurrencies), ...CRYPTO_ASSETS].sort((a, b) => { + if (a.popular && !b.popular) { + return -1; + } + + if (!a.popular && b.popular) { + return 1; + } + + if (a.type !== b.type) { + return a.type === "fiat" ? -1 : 1; + } + + return a.code.localeCompare(b.code); + }); +} + +export function isPopularCode(code: string): boolean { + return POPULAR_CODE_SET.has(code); +} diff --git a/lib/fiat-flag-codes.ts b/lib/fiat-flag-codes.ts new file mode 100644 index 0000000..6cea770 --- /dev/null +++ b/lib/fiat-flag-codes.ts @@ -0,0 +1,50 @@ +export const FIAT_FLAG_CODES = new Set([ + "aed", + "ars", + "aud", + "bdt", + "bgn", + "brl", + "cad", + "chf", + "clp", + "cny", + "cop", + "czk", + "dkk", + "eur", + "gbp", + "gel", + "hkd", + "hrk", + "huf", + "idr", + "inr", + "jmd", + "jpy", + "kes", + "krw", + "lkr", + "mad", + "mxn", + "myr", + "ngn", + "nok", + "npr", + "nzd", + "pen", + "php", + "pkr", + "pln", + "ron", + "rub", + "sar", + "sek", + "sgd", + "thb", + "try", + "uah", + "usd", + "vnd", + "zar" +]); diff --git a/lib/format.ts b/lib/format.ts new file mode 100644 index 0000000..89dee66 --- /dev/null +++ b/lib/format.ts @@ -0,0 +1,52 @@ +import { RateAsset } from "@/lib/rates"; + +function trimTrailingZeroes(value: string): string { + return value.replace(/\.?0+$/, ""); +} + +export function formatAmount(value: number, asset: RateAsset): string { + if (!Number.isFinite(value)) { + return "-"; + } + + if (asset.type === "crypto") { + if (value === 0) { + return "0"; + } + + if (Math.abs(value) < 0.00000001) { + return "<0.00000001"; + } + + const precision = asset.decimals ?? 8; + const formatted = value.toLocaleString("en-US", { + minimumFractionDigits: value < 1 ? 4 : 2, + maximumFractionDigits: precision + }); + + return trimTrailingZeroes(formatted); + } + + return value.toLocaleString("en-US", { + minimumFractionDigits: 2, + maximumFractionDigits: value < 1 ? 6 : 4 + }); +} + +export function formatRate(from: RateAsset, to: RateAsset): string { + const rate = from.usdPrice / to.usdPrice; + return formatAmount(rate, to); +} + +export function formatInverseRate(from: RateAsset, to: RateAsset): string { + const inverse = to.usdPrice / from.usdPrice; + return formatAmount(inverse, from); +} + +export function formatTimestamp(value: string): string { + const date = new Date(value); + return new Intl.DateTimeFormat("en-US", { + dateStyle: "medium", + timeStyle: "short" + }).format(date); +} diff --git a/lib/rates.ts b/lib/rates.ts new file mode 100644 index 0000000..88c97f8 --- /dev/null +++ b/lib/rates.ts @@ -0,0 +1,55 @@ +import { z } from "zod"; +import { AssetDefinition } from "@/lib/assets"; + +export interface RateAsset extends AssetDefinition { + usdPrice: number; + updatedAt: string; +} + +export interface RatesResponse { + assets: RateAsset[]; + quoteCurrency: "USD"; + updatedAt: string; + sources: { + fiat: string; + crypto: string; + }; +} + +const rateAssetSchema = z.object({ + code: z.string(), + name: z.string(), + type: z.enum(["fiat", "crypto"]), + symbol: z.string().optional(), + providerId: z.string().optional(), + popular: z.boolean().optional(), + decimals: z.number().optional(), + usdPrice: z.number().positive(), + updatedAt: z.string() +}); + +const ratesResponseSchema = z.object({ + assets: z.array(rateAssetSchema), + quoteCurrency: z.literal("USD"), + updatedAt: z.string(), + sources: z.object({ + fiat: z.string(), + crypto: z.string() + }) +}); + +export function parseRatesResponse(payload: unknown): RatesResponse { + return ratesResponseSchema.parse(payload); +} + +export function buildRateMap(assets: RateAsset[]): Map { + return new Map(assets.map((asset) => [asset.code, asset])); +} + +export function convertAmount( + amount: number, + fromAsset: RateAsset, + toAsset: RateAsset +): number { + return amount * (fromAsset.usdPrice / toAsset.usdPrice); +} diff --git a/lib/utils.ts b/lib/utils.ts new file mode 100644 index 0000000..365058c --- /dev/null +++ b/lib/utils.ts @@ -0,0 +1,6 @@ +import { type ClassValue, clsx } from "clsx"; +import { twMerge } from "tailwind-merge"; + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} diff --git a/lib/validation.ts b/lib/validation.ts new file mode 100644 index 0000000..c172ef0 --- /dev/null +++ b/lib/validation.ts @@ -0,0 +1,26 @@ +import { z } from "zod"; + +export const amountSchema = z + .string() + .trim() + .min(1, "Enter an amount") + .refine((value) => !Number.isNaN(Number(value)), "Enter a valid number") + .transform((value) => Number(value)) + .refine((value) => Number.isFinite(value), "Enter a valid number") + .refine((value) => value > 0, "Amount must be greater than zero") + .refine((value) => value <= 1_000_000_000_000, "Amount is too large"); + +export function validateAmount(amount: string): + | { ok: true; value: number } + | { ok: false; error: string } { + const result = amountSchema.safeParse(amount); + + if (result.success) { + return { ok: true, value: result.data }; + } + + return { + ok: false, + error: result.error.issues[0]?.message ?? "Invalid amount" + }; +} diff --git a/next-env.d.ts b/next-env.d.ts new file mode 100644 index 0000000..40c3d68 --- /dev/null +++ b/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information. diff --git a/next.config.mjs b/next.config.mjs new file mode 100644 index 0000000..7d08ffa --- /dev/null +++ b/next.config.mjs @@ -0,0 +1,6 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + reactStrictMode: true +}; + +export default nextConfig; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..c24dfd3 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6986 @@ +{ + "name": "nexcurrency", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "nexcurrency", + "version": "0.1.0", + "dependencies": { + "@radix-ui/react-popover": "^1.1.2", + "@radix-ui/react-slot": "^1.1.0", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", + "cmdk": "^1.0.4", + "cryptocurrency-icons": "^0.18.1", + "currency-flags": "github:vivekimsit/currency-flags", + "lucide-react": "^0.475.0", + "next": "^14.2.24", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "tailwind-merge": "^2.5.5", + "zod": "^3.24.1" + }, + "devDependencies": { + "@types/node": "^22.10.2", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", + "autoprefixer": "^10.4.20", + "eslint": "^8.57.1", + "eslint-config-next": "^14.2.24", + "postcss": "^8.4.49", + "tailwindcss": "^3.4.17", + "tailwindcss-animate": "^1.0.7", + "typescript": "^5.7.2" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@emnapi/core": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", + "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.1.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", + "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", + "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", + "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", + "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.5", + "@floating-ui/utils": "^0.2.11" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.8.tgz", + "integrity": "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.7.6" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", + "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", + "license": "MIT" + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" + } + }, + "node_modules/@next/env": { + "version": "14.2.35", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.35.tgz", + "integrity": "sha512-DuhvCtj4t9Gwrx80dmz2F4t/zKQ4ktN8WrMwOuVzkJfBilwAwGr6v16M5eI8yCuZ63H9TTuEU09Iu2HqkzFPVQ==", + "license": "MIT" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "14.2.35", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.35.tgz", + "integrity": "sha512-Jw9A3ICz2183qSsqwi7fgq4SBPiNfmOLmTPXKvlnzstUwyvBrtySiY+8RXJweNAs9KThb1+bYhZh9XWcNOr2zQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob": "10.3.10" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "14.2.33", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.33.tgz", + "integrity": "sha512-HqYnb6pxlsshoSTubdXKu15g3iivcbsMXg4bYpjL2iS/V6aQot+iyF4BUc2qA/J/n55YtvE4PHMKWBKGCF/+wA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "14.2.33", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.33.tgz", + "integrity": "sha512-8HGBeAE5rX3jzKvF593XTTFg3gxeU4f+UWnswa6JPhzaR6+zblO5+fjltJWIZc4aUalqTclvN2QtTC37LxvZAA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "14.2.33", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.33.tgz", + "integrity": "sha512-JXMBka6lNNmqbkvcTtaX8Gu5by9547bukHQvPoLe9VRBx1gHwzf5tdt4AaezW85HAB3pikcvyqBToRTDA4DeLw==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "14.2.33", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.33.tgz", + "integrity": "sha512-Bm+QulsAItD/x6Ih8wGIMfRJy4G73tu1HJsrccPW6AfqdZd0Sfm5Imhgkgq2+kly065rYMnCOxTBvmvFY1BKfg==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "14.2.33", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.33.tgz", + "integrity": "sha512-FnFn+ZBgsVMbGDsTqo8zsnRzydvsGV8vfiWwUo1LD8FTmPTdV+otGSWKc4LJec0oSexFnCYVO4hX8P8qQKaSlg==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "14.2.33", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.33.tgz", + "integrity": "sha512-345tsIWMzoXaQndUTDv1qypDRiebFxGYx9pYkhwY4hBRaOLt8UGfiWKr9FSSHs25dFIf8ZqIFaPdy5MljdoawA==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "14.2.33", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.33.tgz", + "integrity": "sha512-nscpt0G6UCTkrT2ppnJnFsYbPDQwmum4GNXYTeoTIdsmMydSKFz9Iny2jpaRupTb+Wl298+Rh82WKzt9LCcqSQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "14.2.33", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.33.tgz", + "integrity": "sha512-pc9LpGNKhJ0dXQhZ5QMmYxtARwwmWLpeocFmVG5Z0DzWq5Uf0izcI8tLc+qOpqxO1PWqZ5A7J1blrUIKrIFc7Q==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "14.2.33", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.33.tgz", + "integrity": "sha512-nOjfZMy8B94MdisuzZo9/57xuFVLHJaDj5e/xrduJp9CV2/HrfxTRH2fbyLe+K9QT41WBLUd4iXX3R7jBp0EUg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.4.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@radix-ui/primitive": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", + "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", + "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", + "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", + "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-escape-keydown": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", + "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", + "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", + "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.15.tgz", + "integrity": "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", + "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-rect": "1.1.1", + "@radix-ui/react-use-size": "1.1.1", + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", + "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", + "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.4.tgz", + "integrity": "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", + "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", + "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-effect-event": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", + "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", + "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", + "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", + "license": "MIT", + "dependencies": { + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", + "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", + "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", + "license": "MIT" + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.16.1.tgz", + "integrity": "sha512-TvZbIpeKqGQQ7X0zSCvPH9riMSFQFSggnfBjFZ1mEoILW+UuXCKwOoPcgjMwiUtRqFZ8jWhPJc4um14vC6I4ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "license": "Apache-2.0" + }, + "node_modules/@swc/helpers": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz", + "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==", + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3", + "tslib": "^2.4.0" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.19.15", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.15.tgz", + "integrity": "sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.28", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.28.tgz", + "integrity": "sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "devOptional": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.56.1.tgz", + "integrity": "sha512-Jz9ZztpB37dNC+HU2HI28Bs9QXpzCz+y/twHOwhyrIRdbuVDxSytJNDl6z/aAKlaRIwC7y8wJdkBv7FxYGgi0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.56.1", + "@typescript-eslint/type-utils": "8.56.1", + "@typescript-eslint/utils": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.56.1", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.56.1.tgz", + "integrity": "sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.56.1", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/typescript-estree": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.56.1.tgz", + "integrity": "sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.56.1", + "@typescript-eslint/types": "^8.56.1", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.1.tgz", + "integrity": "sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.1.tgz", + "integrity": "sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.56.1.tgz", + "integrity": "sha512-yB/7dxi7MgTtGhZdaHCemf7PuwrHMenHjmzgUW1aJpO+bBU43OycnM3Wn+DdvDO/8zzA9HlhaJ0AUGuvri4oGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/typescript-estree": "8.56.1", + "@typescript-eslint/utils": "8.56.1", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.1.tgz", + "integrity": "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.1.tgz", + "integrity": "sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.56.1", + "@typescript-eslint/tsconfig-utils": "8.56.1", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", + "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.56.1.tgz", + "integrity": "sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.56.1", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/typescript-estree": "8.56.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.1.tgz", + "integrity": "sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.56.1", + "eslint-visitor-keys": "^5.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@unrs/resolver-binding-android-arm-eabi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", + "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", + "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", + "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", + "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", + "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", + "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", + "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", + "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", + "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", + "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", + "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", + "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", + "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", + "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", + "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", + "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.11" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", + "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", + "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", + "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-hidden": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.27", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.27.tgz", + "integrity": "sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1", + "caniuse-lite": "^1.0.30001774", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.1.tgz", + "integrity": "sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz", + "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001777", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001777.tgz", + "integrity": "sha512-tmN+fJxroPndC74efCdp12j+0rk0RHwV5Jwa1zWaFVyw2ZxAuPeG8ZgWC3Wz7uSjT3qMRQ5XHZ4COgQmsCMJAQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "license": "MIT" + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cmdk": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-1.1.1.tgz", + "integrity": "sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "^1.1.1", + "@radix-ui/react-dialog": "^1.1.6", + "@radix-ui/react-id": "^1.1.0", + "@radix-ui/react-primitive": "^2.0.2" + }, + "peerDependencies": { + "react": "^18 || ^19 || ^19.0.0-rc", + "react-dom": "^18 || ^19 || ^19.0.0-rc" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cryptocurrency-icons": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/cryptocurrency-icons/-/cryptocurrency-icons-0.18.1.tgz", + "integrity": "sha512-dvR5O8JOmav3559Yb0Igpkia+3vpt/aeNvMu5ZIVUG2Bzpq9wNcOJRIQas49XJrPjtZ98GAEn3aDQO+w7uhS2w==", + "license": "CC0-1.0" + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/currency-flags": { + "version": "0.4.0", + "resolved": "git+ssh://git@github.com/vivekimsit/currency-flags.git#e01ece902f39c73521093f840902d2dfc226ae34", + "license": "MIT" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.307", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.307.tgz", + "integrity": "sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-abstract": { + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", + "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.2.tgz", + "integrity": "sha512-BrUQ0cPTB/IwXj23HtwHjS9n7O4h9FX94b4xc5zlTHxeLgTAdzYUDyy6KdExAl9lbN5rtfe44xpjpmj9grxs5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.1", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.1.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.3.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.5", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-next": { + "version": "14.2.35", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.35.tgz", + "integrity": "sha512-BpLsv01UisH193WyT/1lpHqq5iJ/Orfz9h/NOOlAmTUq4GY349PextQ62K4XpnaM9supeiEn3TaOTeQO07gURg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@next/eslint-plugin-next": "14.2.35", + "@rushstack/eslint-patch": "^1.3.3", + "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz", + "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.4.0", + "get-tsconfig": "^4.10.0", + "is-bun-module": "^2.0.0", + "stable-hash": "^0.0.5", + "tinyglobby": "^0.2.13", + "unrs-resolver": "^1.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-import-resolver-typescript" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.0.0-canary-7118f5dd7-20230705", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0-canary-7118f5dd7-20230705.tgz", + "integrity": "sha512-AZYbMo/NW9chdL7vk6HQzQhT+PvTAEVqWk9ziruUoW2kAOcN5qNyelv70e0F1VNQAbvutOC9oc+xfWycI9FxDw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.6", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.6.tgz", + "integrity": "sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "node-exports-info": "^1.6.0", + "object-keys": "^1.1.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.4.tgz", + "integrity": "sha512-3+mMldrTAPdta5kjX2G2J7iX4zxtnwpdA8Tr2ZSjkyPSanvbZAcy6flmtnXbEybHrDcU9641lxrMfFuUxVz9vA==", + "dev": true, + "license": "ISC" + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.13.6", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.6.tgz", + "integrity": "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bun-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz", + "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.7.1" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dev": true, + "license": "MIT", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/lucide-react": { + "version": "0.475.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.475.0.tgz", + "integrity": "sha512-NJzvVu1HwFVeZ+Gwq2q00KygM1aBhy/ZrhY9FsAgJtpB+E4R7uxRk9M2iKvHa6/vNxZydIB59htha4c2vvwvVg==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/napi-postinstall": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", + "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", + "dev": true, + "license": "MIT", + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/next": { + "version": "14.2.35", + "resolved": "https://registry.npmjs.org/next/-/next-14.2.35.tgz", + "integrity": "sha512-KhYd2Hjt/O1/1aZVX3dCwGXM1QmOV4eNM2UTacK5gipDdPN/oHHK/4oVGy7X8GMfPMsUTUEmGlsy0EY1YGAkig==", + "license": "MIT", + "dependencies": { + "@next/env": "14.2.35", + "@swc/helpers": "0.5.5", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001579", + "graceful-fs": "^4.2.11", + "postcss": "8.4.31", + "styled-jsx": "5.1.1" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=18.17.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "14.2.33", + "@next/swc-darwin-x64": "14.2.33", + "@next/swc-linux-arm64-gnu": "14.2.33", + "@next/swc-linux-arm64-musl": "14.2.33", + "@next/swc-linux-x64-gnu": "14.2.33", + "@next/swc-linux-x64-musl": "14.2.33", + "@next/swc-win32-arm64-msvc": "14.2.33", + "@next/swc-win32-ia32-msvc": "14.2.33", + "@next/swc-win32-x64-msvc": "14.2.33" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.41.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/node-exports-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.0.tgz", + "integrity": "sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "array.prototype.flatmap": "^1.3.3", + "es-errors": "^1.3.0", + "object.entries": "^1.1.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/node-exports-info/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/node-releases": { + "version": "2.0.36", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", + "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/react-remove-scroll": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.2.tgz", + "integrity": "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==", + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.7", + "react-style-singleton": "^2.2.3", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "license": "MIT", + "dependencies": { + "react-style-singleton": "^2.2.2", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stable-hash": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", + "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==", + "dev": true, + "license": "MIT" + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", + "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", + "license": "MIT", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/sucrase": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwind-merge": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.1.tgz", + "integrity": "sha512-Oo6tHdpZsGpkKG88HJ8RR1rg/RdnEkQEfMoEk2x1XRI3F1AxeU+ijRXpiVUF4UbLfcxxRGw6TbUINKYdWVsQTQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz", + "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.7", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss-animate": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", + "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/unrs-resolver": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", + "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "napi-postinstall": "^0.3.0" + }, + "funding": { + "url": "https://opencollective.com/unrs-resolver" + }, + "optionalDependencies": { + "@unrs/resolver-binding-android-arm-eabi": "1.11.1", + "@unrs/resolver-binding-android-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-x64": "1.11.1", + "@unrs/resolver-binding-freebsd-x64": "1.11.1", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", + "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-musl": "1.11.1", + "@unrs/resolver-binding-wasm32-wasi": "1.11.1", + "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", + "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", + "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-callback-ref": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..ff31a42 --- /dev/null +++ b/package.json @@ -0,0 +1,39 @@ +{ + "name": "nexcurrency", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint", + "sync:crypto-icons": "mkdir -p public/icons/crypto && cp node_modules/cryptocurrency-icons/32/color/*.png public/icons/crypto/" + }, + "dependencies": { + "@radix-ui/react-popover": "^1.1.2", + "@radix-ui/react-slot": "^1.1.0", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", + "cmdk": "^1.0.4", + "cryptocurrency-icons": "^0.18.1", + "currency-flags": "github:vivekimsit/currency-flags", + "lucide-react": "^0.475.0", + "next": "^14.2.24", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "tailwind-merge": "^2.5.5", + "zod": "^3.24.1" + }, + "devDependencies": { + "@types/node": "^22.10.2", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", + "autoprefixer": "^10.4.20", + "eslint": "^8.57.1", + "eslint-config-next": "^14.2.24", + "postcss": "^8.4.49", + "tailwindcss": "^3.4.17", + "tailwindcss-animate": "^1.0.7", + "typescript": "^5.7.2" + } +} diff --git a/postcss.config.mjs b/postcss.config.mjs new file mode 100644 index 0000000..ba80730 --- /dev/null +++ b/postcss.config.mjs @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {} + } +}; diff --git a/public/icons/crypto/$pac.png b/public/icons/crypto/$pac.png new file mode 100644 index 0000000..f63d88d Binary files /dev/null and b/public/icons/crypto/$pac.png differ diff --git a/public/icons/crypto/0xbtc.png b/public/icons/crypto/0xbtc.png new file mode 100644 index 0000000..276ccdb Binary files /dev/null and b/public/icons/crypto/0xbtc.png differ diff --git a/public/icons/crypto/1inch.png b/public/icons/crypto/1inch.png new file mode 100644 index 0000000..638f531 Binary files /dev/null and b/public/icons/crypto/1inch.png differ diff --git a/public/icons/crypto/2give.png b/public/icons/crypto/2give.png new file mode 100644 index 0000000..b3ebba5 Binary files /dev/null and b/public/icons/crypto/2give.png differ diff --git a/public/icons/crypto/aave.png b/public/icons/crypto/aave.png new file mode 100644 index 0000000..00768dd Binary files /dev/null and b/public/icons/crypto/aave.png differ diff --git a/public/icons/crypto/abt.png b/public/icons/crypto/abt.png new file mode 100644 index 0000000..ba2ba6c Binary files /dev/null and b/public/icons/crypto/abt.png differ diff --git a/public/icons/crypto/act.png b/public/icons/crypto/act.png new file mode 100644 index 0000000..b1a707f Binary files /dev/null and b/public/icons/crypto/act.png differ diff --git a/public/icons/crypto/actn.png b/public/icons/crypto/actn.png new file mode 100644 index 0000000..c148dfc Binary files /dev/null and b/public/icons/crypto/actn.png differ diff --git a/public/icons/crypto/ada.png b/public/icons/crypto/ada.png new file mode 100644 index 0000000..f055023 Binary files /dev/null and b/public/icons/crypto/ada.png differ diff --git a/public/icons/crypto/add.png b/public/icons/crypto/add.png new file mode 100644 index 0000000..c0225af Binary files /dev/null and b/public/icons/crypto/add.png differ diff --git a/public/icons/crypto/adx.png b/public/icons/crypto/adx.png new file mode 100644 index 0000000..39a95b4 Binary files /dev/null and b/public/icons/crypto/adx.png differ diff --git a/public/icons/crypto/ae.png b/public/icons/crypto/ae.png new file mode 100644 index 0000000..4a780e8 Binary files /dev/null and b/public/icons/crypto/ae.png differ diff --git a/public/icons/crypto/aeon.png b/public/icons/crypto/aeon.png new file mode 100644 index 0000000..ec53e03 Binary files /dev/null and b/public/icons/crypto/aeon.png differ diff --git a/public/icons/crypto/aeur.png b/public/icons/crypto/aeur.png new file mode 100644 index 0000000..3b28fe7 Binary files /dev/null and b/public/icons/crypto/aeur.png differ diff --git a/public/icons/crypto/agi.png b/public/icons/crypto/agi.png new file mode 100644 index 0000000..32bc534 Binary files /dev/null and b/public/icons/crypto/agi.png differ diff --git a/public/icons/crypto/agrs.png b/public/icons/crypto/agrs.png new file mode 100644 index 0000000..ade10d8 Binary files /dev/null and b/public/icons/crypto/agrs.png differ diff --git a/public/icons/crypto/aion.png b/public/icons/crypto/aion.png new file mode 100644 index 0000000..24ff00e Binary files /dev/null and b/public/icons/crypto/aion.png differ diff --git a/public/icons/crypto/algo.png b/public/icons/crypto/algo.png new file mode 100644 index 0000000..22eec1e Binary files /dev/null and b/public/icons/crypto/algo.png differ diff --git a/public/icons/crypto/amb.png b/public/icons/crypto/amb.png new file mode 100644 index 0000000..bde314c Binary files /dev/null and b/public/icons/crypto/amb.png differ diff --git a/public/icons/crypto/amp.png b/public/icons/crypto/amp.png new file mode 100644 index 0000000..c6d6ac8 Binary files /dev/null and b/public/icons/crypto/amp.png differ diff --git a/public/icons/crypto/ampl.png b/public/icons/crypto/ampl.png new file mode 100644 index 0000000..b7b1f76 Binary files /dev/null and b/public/icons/crypto/ampl.png differ diff --git a/public/icons/crypto/ankr.png b/public/icons/crypto/ankr.png new file mode 100644 index 0000000..1b42997 Binary files /dev/null and b/public/icons/crypto/ankr.png differ diff --git a/public/icons/crypto/ant.png b/public/icons/crypto/ant.png new file mode 100644 index 0000000..4ebebb1 Binary files /dev/null and b/public/icons/crypto/ant.png differ diff --git a/public/icons/crypto/ape.png b/public/icons/crypto/ape.png new file mode 100644 index 0000000..6ae825b Binary files /dev/null and b/public/icons/crypto/ape.png differ diff --git a/public/icons/crypto/apex.png b/public/icons/crypto/apex.png new file mode 100644 index 0000000..2206d32 Binary files /dev/null and b/public/icons/crypto/apex.png differ diff --git a/public/icons/crypto/appc.png b/public/icons/crypto/appc.png new file mode 100644 index 0000000..fae6e33 Binary files /dev/null and b/public/icons/crypto/appc.png differ diff --git a/public/icons/crypto/ardr.png b/public/icons/crypto/ardr.png new file mode 100644 index 0000000..179234c Binary files /dev/null and b/public/icons/crypto/ardr.png differ diff --git a/public/icons/crypto/arg.png b/public/icons/crypto/arg.png new file mode 100644 index 0000000..ffad0a1 Binary files /dev/null and b/public/icons/crypto/arg.png differ diff --git a/public/icons/crypto/ark.png b/public/icons/crypto/ark.png new file mode 100644 index 0000000..d1ce42c Binary files /dev/null and b/public/icons/crypto/ark.png differ diff --git a/public/icons/crypto/arn.png b/public/icons/crypto/arn.png new file mode 100644 index 0000000..3256972 Binary files /dev/null and b/public/icons/crypto/arn.png differ diff --git a/public/icons/crypto/arnx.png b/public/icons/crypto/arnx.png new file mode 100644 index 0000000..85eb976 Binary files /dev/null and b/public/icons/crypto/arnx.png differ diff --git a/public/icons/crypto/ary.png b/public/icons/crypto/ary.png new file mode 100644 index 0000000..6832622 Binary files /dev/null and b/public/icons/crypto/ary.png differ diff --git a/public/icons/crypto/ast.png b/public/icons/crypto/ast.png new file mode 100644 index 0000000..2d3a509 Binary files /dev/null and b/public/icons/crypto/ast.png differ diff --git a/public/icons/crypto/atlas.png b/public/icons/crypto/atlas.png new file mode 100644 index 0000000..d51c43d Binary files /dev/null and b/public/icons/crypto/atlas.png differ diff --git a/public/icons/crypto/atm.png b/public/icons/crypto/atm.png new file mode 100644 index 0000000..bcd4559 Binary files /dev/null and b/public/icons/crypto/atm.png differ diff --git a/public/icons/crypto/atom.png b/public/icons/crypto/atom.png new file mode 100644 index 0000000..ad17893 Binary files /dev/null and b/public/icons/crypto/atom.png differ diff --git a/public/icons/crypto/audr.png b/public/icons/crypto/audr.png new file mode 100644 index 0000000..fe00de6 Binary files /dev/null and b/public/icons/crypto/audr.png differ diff --git a/public/icons/crypto/aury.png b/public/icons/crypto/aury.png new file mode 100644 index 0000000..50bea30 Binary files /dev/null and b/public/icons/crypto/aury.png differ diff --git a/public/icons/crypto/auto.png b/public/icons/crypto/auto.png new file mode 100644 index 0000000..cd06516 Binary files /dev/null and b/public/icons/crypto/auto.png differ diff --git a/public/icons/crypto/avax.png b/public/icons/crypto/avax.png new file mode 100644 index 0000000..7a84987 Binary files /dev/null and b/public/icons/crypto/avax.png differ diff --git a/public/icons/crypto/aywa.png b/public/icons/crypto/aywa.png new file mode 100644 index 0000000..a873a99 Binary files /dev/null and b/public/icons/crypto/aywa.png differ diff --git a/public/icons/crypto/bab.png b/public/icons/crypto/bab.png new file mode 100644 index 0000000..a201760 Binary files /dev/null and b/public/icons/crypto/bab.png differ diff --git a/public/icons/crypto/bal.png b/public/icons/crypto/bal.png new file mode 100644 index 0000000..7e79ebb Binary files /dev/null and b/public/icons/crypto/bal.png differ diff --git a/public/icons/crypto/band.png b/public/icons/crypto/band.png new file mode 100644 index 0000000..1667b2b Binary files /dev/null and b/public/icons/crypto/band.png differ diff --git a/public/icons/crypto/bat.png b/public/icons/crypto/bat.png new file mode 100644 index 0000000..50c5c24 Binary files /dev/null and b/public/icons/crypto/bat.png differ diff --git a/public/icons/crypto/bay.png b/public/icons/crypto/bay.png new file mode 100644 index 0000000..c0955e5 Binary files /dev/null and b/public/icons/crypto/bay.png differ diff --git a/public/icons/crypto/bcbc.png b/public/icons/crypto/bcbc.png new file mode 100644 index 0000000..725513e Binary files /dev/null and b/public/icons/crypto/bcbc.png differ diff --git a/public/icons/crypto/bcc.png b/public/icons/crypto/bcc.png new file mode 100644 index 0000000..ee25113 Binary files /dev/null and b/public/icons/crypto/bcc.png differ diff --git a/public/icons/crypto/bcd.png b/public/icons/crypto/bcd.png new file mode 100644 index 0000000..1933d00 Binary files /dev/null and b/public/icons/crypto/bcd.png differ diff --git a/public/icons/crypto/bch.png b/public/icons/crypto/bch.png new file mode 100644 index 0000000..453ae4f Binary files /dev/null and b/public/icons/crypto/bch.png differ diff --git a/public/icons/crypto/bcio.png b/public/icons/crypto/bcio.png new file mode 100644 index 0000000..a23c202 Binary files /dev/null and b/public/icons/crypto/bcio.png differ diff --git a/public/icons/crypto/bcn.png b/public/icons/crypto/bcn.png new file mode 100644 index 0000000..0270d6b Binary files /dev/null and b/public/icons/crypto/bcn.png differ diff --git a/public/icons/crypto/bco.png b/public/icons/crypto/bco.png new file mode 100644 index 0000000..e5fdb9e Binary files /dev/null and b/public/icons/crypto/bco.png differ diff --git a/public/icons/crypto/bcpt.png b/public/icons/crypto/bcpt.png new file mode 100644 index 0000000..b4ea131 Binary files /dev/null and b/public/icons/crypto/bcpt.png differ diff --git a/public/icons/crypto/bdl.png b/public/icons/crypto/bdl.png new file mode 100644 index 0000000..d6689d0 Binary files /dev/null and b/public/icons/crypto/bdl.png differ diff --git a/public/icons/crypto/beam.png b/public/icons/crypto/beam.png new file mode 100644 index 0000000..85d4796 Binary files /dev/null and b/public/icons/crypto/beam.png differ diff --git a/public/icons/crypto/bela.png b/public/icons/crypto/bela.png new file mode 100644 index 0000000..17e72a0 Binary files /dev/null and b/public/icons/crypto/bela.png differ diff --git a/public/icons/crypto/bix.png b/public/icons/crypto/bix.png new file mode 100644 index 0000000..c151d36 Binary files /dev/null and b/public/icons/crypto/bix.png differ diff --git a/public/icons/crypto/blcn.png b/public/icons/crypto/blcn.png new file mode 100644 index 0000000..fcc7a5b Binary files /dev/null and b/public/icons/crypto/blcn.png differ diff --git a/public/icons/crypto/blk.png b/public/icons/crypto/blk.png new file mode 100644 index 0000000..bea85a8 Binary files /dev/null and b/public/icons/crypto/blk.png differ diff --git a/public/icons/crypto/block.png b/public/icons/crypto/block.png new file mode 100644 index 0000000..c627e32 Binary files /dev/null and b/public/icons/crypto/block.png differ diff --git a/public/icons/crypto/blz.png b/public/icons/crypto/blz.png new file mode 100644 index 0000000..9ab411a Binary files /dev/null and b/public/icons/crypto/blz.png differ diff --git a/public/icons/crypto/bnb.png b/public/icons/crypto/bnb.png new file mode 100644 index 0000000..92ceb6e Binary files /dev/null and b/public/icons/crypto/bnb.png differ diff --git a/public/icons/crypto/bnt.png b/public/icons/crypto/bnt.png new file mode 100644 index 0000000..4526514 Binary files /dev/null and b/public/icons/crypto/bnt.png differ diff --git a/public/icons/crypto/bnty.png b/public/icons/crypto/bnty.png new file mode 100644 index 0000000..8c8b587 Binary files /dev/null and b/public/icons/crypto/bnty.png differ diff --git a/public/icons/crypto/booty.png b/public/icons/crypto/booty.png new file mode 100644 index 0000000..91649f5 Binary files /dev/null and b/public/icons/crypto/booty.png differ diff --git a/public/icons/crypto/bos.png b/public/icons/crypto/bos.png new file mode 100644 index 0000000..b796f3f Binary files /dev/null and b/public/icons/crypto/bos.png differ diff --git a/public/icons/crypto/bpt.png b/public/icons/crypto/bpt.png new file mode 100644 index 0000000..8a5a6d4 Binary files /dev/null and b/public/icons/crypto/bpt.png differ diff --git a/public/icons/crypto/bq.png b/public/icons/crypto/bq.png new file mode 100644 index 0000000..76a1d18 Binary files /dev/null and b/public/icons/crypto/bq.png differ diff --git a/public/icons/crypto/brd.png b/public/icons/crypto/brd.png new file mode 100644 index 0000000..3fe9ed5 Binary files /dev/null and b/public/icons/crypto/brd.png differ diff --git a/public/icons/crypto/bsd.png b/public/icons/crypto/bsd.png new file mode 100644 index 0000000..053946a Binary files /dev/null and b/public/icons/crypto/bsd.png differ diff --git a/public/icons/crypto/bsv.png b/public/icons/crypto/bsv.png new file mode 100644 index 0000000..6fdec36 Binary files /dev/null and b/public/icons/crypto/bsv.png differ diff --git a/public/icons/crypto/btc.png b/public/icons/crypto/btc.png new file mode 100644 index 0000000..da93fd1 Binary files /dev/null and b/public/icons/crypto/btc.png differ diff --git a/public/icons/crypto/btcd.png b/public/icons/crypto/btcd.png new file mode 100644 index 0000000..3d52b37 Binary files /dev/null and b/public/icons/crypto/btcd.png differ diff --git a/public/icons/crypto/btch.png b/public/icons/crypto/btch.png new file mode 100644 index 0000000..aa12921 Binary files /dev/null and b/public/icons/crypto/btch.png differ diff --git a/public/icons/crypto/btcp.png b/public/icons/crypto/btcp.png new file mode 100644 index 0000000..330152d Binary files /dev/null and b/public/icons/crypto/btcp.png differ diff --git a/public/icons/crypto/btcz.png b/public/icons/crypto/btcz.png new file mode 100644 index 0000000..382e260 Binary files /dev/null and b/public/icons/crypto/btcz.png differ diff --git a/public/icons/crypto/btdx.png b/public/icons/crypto/btdx.png new file mode 100644 index 0000000..9334c6b Binary files /dev/null and b/public/icons/crypto/btdx.png differ diff --git a/public/icons/crypto/btg.png b/public/icons/crypto/btg.png new file mode 100644 index 0000000..11efa48 Binary files /dev/null and b/public/icons/crypto/btg.png differ diff --git a/public/icons/crypto/btm.png b/public/icons/crypto/btm.png new file mode 100644 index 0000000..a7e80d6 Binary files /dev/null and b/public/icons/crypto/btm.png differ diff --git a/public/icons/crypto/bts.png b/public/icons/crypto/bts.png new file mode 100644 index 0000000..b053b17 Binary files /dev/null and b/public/icons/crypto/bts.png differ diff --git a/public/icons/crypto/btt.png b/public/icons/crypto/btt.png new file mode 100644 index 0000000..db22c09 Binary files /dev/null and b/public/icons/crypto/btt.png differ diff --git a/public/icons/crypto/btx.png b/public/icons/crypto/btx.png new file mode 100644 index 0000000..2df903d Binary files /dev/null and b/public/icons/crypto/btx.png differ diff --git a/public/icons/crypto/burst.png b/public/icons/crypto/burst.png new file mode 100644 index 0000000..b34bd76 Binary files /dev/null and b/public/icons/crypto/burst.png differ diff --git a/public/icons/crypto/bze.png b/public/icons/crypto/bze.png new file mode 100644 index 0000000..1bb8118 Binary files /dev/null and b/public/icons/crypto/bze.png differ diff --git a/public/icons/crypto/call.png b/public/icons/crypto/call.png new file mode 100644 index 0000000..95902db Binary files /dev/null and b/public/icons/crypto/call.png differ diff --git a/public/icons/crypto/cc.png b/public/icons/crypto/cc.png new file mode 100644 index 0000000..1d6da27 Binary files /dev/null and b/public/icons/crypto/cc.png differ diff --git a/public/icons/crypto/cdn.png b/public/icons/crypto/cdn.png new file mode 100644 index 0000000..e25126d Binary files /dev/null and b/public/icons/crypto/cdn.png differ diff --git a/public/icons/crypto/cdt.png b/public/icons/crypto/cdt.png new file mode 100644 index 0000000..8135b7f Binary files /dev/null and b/public/icons/crypto/cdt.png differ diff --git a/public/icons/crypto/cenz.png b/public/icons/crypto/cenz.png new file mode 100644 index 0000000..ea1dcb7 Binary files /dev/null and b/public/icons/crypto/cenz.png differ diff --git a/public/icons/crypto/chain.png b/public/icons/crypto/chain.png new file mode 100644 index 0000000..c492902 Binary files /dev/null and b/public/icons/crypto/chain.png differ diff --git a/public/icons/crypto/chat.png b/public/icons/crypto/chat.png new file mode 100644 index 0000000..b4761eb Binary files /dev/null and b/public/icons/crypto/chat.png differ diff --git a/public/icons/crypto/chips.png b/public/icons/crypto/chips.png new file mode 100644 index 0000000..f17ffe6 Binary files /dev/null and b/public/icons/crypto/chips.png differ diff --git a/public/icons/crypto/chsb.png b/public/icons/crypto/chsb.png new file mode 100644 index 0000000..feb4700 Binary files /dev/null and b/public/icons/crypto/chsb.png differ diff --git a/public/icons/crypto/chz.png b/public/icons/crypto/chz.png new file mode 100644 index 0000000..899749b Binary files /dev/null and b/public/icons/crypto/chz.png differ diff --git a/public/icons/crypto/cix.png b/public/icons/crypto/cix.png new file mode 100644 index 0000000..4ea3e0d Binary files /dev/null and b/public/icons/crypto/cix.png differ diff --git a/public/icons/crypto/clam.png b/public/icons/crypto/clam.png new file mode 100644 index 0000000..fc183e5 Binary files /dev/null and b/public/icons/crypto/clam.png differ diff --git a/public/icons/crypto/cloak.png b/public/icons/crypto/cloak.png new file mode 100644 index 0000000..343b042 Binary files /dev/null and b/public/icons/crypto/cloak.png differ diff --git a/public/icons/crypto/cmm.png b/public/icons/crypto/cmm.png new file mode 100644 index 0000000..f1caee8 Binary files /dev/null and b/public/icons/crypto/cmm.png differ diff --git a/public/icons/crypto/cmt.png b/public/icons/crypto/cmt.png new file mode 100644 index 0000000..48dba0e Binary files /dev/null and b/public/icons/crypto/cmt.png differ diff --git a/public/icons/crypto/cnd.png b/public/icons/crypto/cnd.png new file mode 100644 index 0000000..598eed6 Binary files /dev/null and b/public/icons/crypto/cnd.png differ diff --git a/public/icons/crypto/cnx.png b/public/icons/crypto/cnx.png new file mode 100644 index 0000000..142d50e Binary files /dev/null and b/public/icons/crypto/cnx.png differ diff --git a/public/icons/crypto/cny.png b/public/icons/crypto/cny.png new file mode 100644 index 0000000..8b66073 Binary files /dev/null and b/public/icons/crypto/cny.png differ diff --git a/public/icons/crypto/cob.png b/public/icons/crypto/cob.png new file mode 100644 index 0000000..4738cb7 Binary files /dev/null and b/public/icons/crypto/cob.png differ diff --git a/public/icons/crypto/colx.png b/public/icons/crypto/colx.png new file mode 100644 index 0000000..6c4055a Binary files /dev/null and b/public/icons/crypto/colx.png differ diff --git a/public/icons/crypto/comp.png b/public/icons/crypto/comp.png new file mode 100644 index 0000000..4af4ef0 Binary files /dev/null and b/public/icons/crypto/comp.png differ diff --git a/public/icons/crypto/coqui.png b/public/icons/crypto/coqui.png new file mode 100644 index 0000000..c1dff4a Binary files /dev/null and b/public/icons/crypto/coqui.png differ diff --git a/public/icons/crypto/cred.png b/public/icons/crypto/cred.png new file mode 100644 index 0000000..e477ef2 Binary files /dev/null and b/public/icons/crypto/cred.png differ diff --git a/public/icons/crypto/crpt.png b/public/icons/crypto/crpt.png new file mode 100644 index 0000000..f13379c Binary files /dev/null and b/public/icons/crypto/crpt.png differ diff --git a/public/icons/crypto/crv.png b/public/icons/crypto/crv.png new file mode 100644 index 0000000..adaca68 Binary files /dev/null and b/public/icons/crypto/crv.png differ diff --git a/public/icons/crypto/crw.png b/public/icons/crypto/crw.png new file mode 100644 index 0000000..2a242f8 Binary files /dev/null and b/public/icons/crypto/crw.png differ diff --git a/public/icons/crypto/cs.png b/public/icons/crypto/cs.png new file mode 100644 index 0000000..1c7abdf Binary files /dev/null and b/public/icons/crypto/cs.png differ diff --git a/public/icons/crypto/ctr.png b/public/icons/crypto/ctr.png new file mode 100644 index 0000000..243b586 Binary files /dev/null and b/public/icons/crypto/ctr.png differ diff --git a/public/icons/crypto/ctxc.png b/public/icons/crypto/ctxc.png new file mode 100644 index 0000000..bbbb80d Binary files /dev/null and b/public/icons/crypto/ctxc.png differ diff --git a/public/icons/crypto/cvc.png b/public/icons/crypto/cvc.png new file mode 100644 index 0000000..680b922 Binary files /dev/null and b/public/icons/crypto/cvc.png differ diff --git a/public/icons/crypto/d.png b/public/icons/crypto/d.png new file mode 100644 index 0000000..fa87652 Binary files /dev/null and b/public/icons/crypto/d.png differ diff --git a/public/icons/crypto/dai.png b/public/icons/crypto/dai.png new file mode 100644 index 0000000..aa2a744 Binary files /dev/null and b/public/icons/crypto/dai.png differ diff --git a/public/icons/crypto/dash.png b/public/icons/crypto/dash.png new file mode 100644 index 0000000..8b27f14 Binary files /dev/null and b/public/icons/crypto/dash.png differ diff --git a/public/icons/crypto/dat.png b/public/icons/crypto/dat.png new file mode 100644 index 0000000..a774946 Binary files /dev/null and b/public/icons/crypto/dat.png differ diff --git a/public/icons/crypto/data.png b/public/icons/crypto/data.png new file mode 100644 index 0000000..451c147 Binary files /dev/null and b/public/icons/crypto/data.png differ diff --git a/public/icons/crypto/dbc.png b/public/icons/crypto/dbc.png new file mode 100644 index 0000000..368ac9d Binary files /dev/null and b/public/icons/crypto/dbc.png differ diff --git a/public/icons/crypto/dcn.png b/public/icons/crypto/dcn.png new file mode 100644 index 0000000..7dfe5b6 Binary files /dev/null and b/public/icons/crypto/dcn.png differ diff --git a/public/icons/crypto/dcr.png b/public/icons/crypto/dcr.png new file mode 100644 index 0000000..e209b3d Binary files /dev/null and b/public/icons/crypto/dcr.png differ diff --git a/public/icons/crypto/deez.png b/public/icons/crypto/deez.png new file mode 100644 index 0000000..2f5f5bf Binary files /dev/null and b/public/icons/crypto/deez.png differ diff --git a/public/icons/crypto/dent.png b/public/icons/crypto/dent.png new file mode 100644 index 0000000..2398eb4 Binary files /dev/null and b/public/icons/crypto/dent.png differ diff --git a/public/icons/crypto/dew.png b/public/icons/crypto/dew.png new file mode 100644 index 0000000..b460344 Binary files /dev/null and b/public/icons/crypto/dew.png differ diff --git a/public/icons/crypto/dgb.png b/public/icons/crypto/dgb.png new file mode 100644 index 0000000..8bf9cb6 Binary files /dev/null and b/public/icons/crypto/dgb.png differ diff --git a/public/icons/crypto/dgd.png b/public/icons/crypto/dgd.png new file mode 100644 index 0000000..27b1ef0 Binary files /dev/null and b/public/icons/crypto/dgd.png differ diff --git a/public/icons/crypto/dlt.png b/public/icons/crypto/dlt.png new file mode 100644 index 0000000..cc8c73f Binary files /dev/null and b/public/icons/crypto/dlt.png differ diff --git a/public/icons/crypto/dnt.png b/public/icons/crypto/dnt.png new file mode 100644 index 0000000..a68b008 Binary files /dev/null and b/public/icons/crypto/dnt.png differ diff --git a/public/icons/crypto/dock.png b/public/icons/crypto/dock.png new file mode 100644 index 0000000..1f4c039 Binary files /dev/null and b/public/icons/crypto/dock.png differ diff --git a/public/icons/crypto/doge.png b/public/icons/crypto/doge.png new file mode 100644 index 0000000..9f0212a Binary files /dev/null and b/public/icons/crypto/doge.png differ diff --git a/public/icons/crypto/dot.png b/public/icons/crypto/dot.png new file mode 100644 index 0000000..3c0ae13 Binary files /dev/null and b/public/icons/crypto/dot.png differ diff --git a/public/icons/crypto/drgn.png b/public/icons/crypto/drgn.png new file mode 100644 index 0000000..81469fd Binary files /dev/null and b/public/icons/crypto/drgn.png differ diff --git a/public/icons/crypto/drop.png b/public/icons/crypto/drop.png new file mode 100644 index 0000000..ab174a0 Binary files /dev/null and b/public/icons/crypto/drop.png differ diff --git a/public/icons/crypto/dta.png b/public/icons/crypto/dta.png new file mode 100644 index 0000000..edafaff Binary files /dev/null and b/public/icons/crypto/dta.png differ diff --git a/public/icons/crypto/dth.png b/public/icons/crypto/dth.png new file mode 100644 index 0000000..71d4047 Binary files /dev/null and b/public/icons/crypto/dth.png differ diff --git a/public/icons/crypto/dtr.png b/public/icons/crypto/dtr.png new file mode 100644 index 0000000..3dd4d35 Binary files /dev/null and b/public/icons/crypto/dtr.png differ diff --git a/public/icons/crypto/ebst.png b/public/icons/crypto/ebst.png new file mode 100644 index 0000000..22e55e8 Binary files /dev/null and b/public/icons/crypto/ebst.png differ diff --git a/public/icons/crypto/eca.png b/public/icons/crypto/eca.png new file mode 100644 index 0000000..ce337af Binary files /dev/null and b/public/icons/crypto/eca.png differ diff --git a/public/icons/crypto/edg.png b/public/icons/crypto/edg.png new file mode 100644 index 0000000..f53f619 Binary files /dev/null and b/public/icons/crypto/edg.png differ diff --git a/public/icons/crypto/edo.png b/public/icons/crypto/edo.png new file mode 100644 index 0000000..373816e Binary files /dev/null and b/public/icons/crypto/edo.png differ diff --git a/public/icons/crypto/edoge.png b/public/icons/crypto/edoge.png new file mode 100644 index 0000000..1d1a865 Binary files /dev/null and b/public/icons/crypto/edoge.png differ diff --git a/public/icons/crypto/ela.png b/public/icons/crypto/ela.png new file mode 100644 index 0000000..82b148f Binary files /dev/null and b/public/icons/crypto/ela.png differ diff --git a/public/icons/crypto/elec.png b/public/icons/crypto/elec.png new file mode 100644 index 0000000..828e564 Binary files /dev/null and b/public/icons/crypto/elec.png differ diff --git a/public/icons/crypto/elf.png b/public/icons/crypto/elf.png new file mode 100644 index 0000000..ab0c41d Binary files /dev/null and b/public/icons/crypto/elf.png differ diff --git a/public/icons/crypto/elix.png b/public/icons/crypto/elix.png new file mode 100644 index 0000000..3296bf2 Binary files /dev/null and b/public/icons/crypto/elix.png differ diff --git a/public/icons/crypto/ella.png b/public/icons/crypto/ella.png new file mode 100644 index 0000000..d6a54e0 Binary files /dev/null and b/public/icons/crypto/ella.png differ diff --git a/public/icons/crypto/emb.png b/public/icons/crypto/emb.png new file mode 100644 index 0000000..4479b6e Binary files /dev/null and b/public/icons/crypto/emb.png differ diff --git a/public/icons/crypto/emc.png b/public/icons/crypto/emc.png new file mode 100644 index 0000000..9b606ad Binary files /dev/null and b/public/icons/crypto/emc.png differ diff --git a/public/icons/crypto/emc2.png b/public/icons/crypto/emc2.png new file mode 100644 index 0000000..9185a25 Binary files /dev/null and b/public/icons/crypto/emc2.png differ diff --git a/public/icons/crypto/eng.png b/public/icons/crypto/eng.png new file mode 100644 index 0000000..a34efc0 Binary files /dev/null and b/public/icons/crypto/eng.png differ diff --git a/public/icons/crypto/enj.png b/public/icons/crypto/enj.png new file mode 100644 index 0000000..02fd216 Binary files /dev/null and b/public/icons/crypto/enj.png differ diff --git a/public/icons/crypto/entrp.png b/public/icons/crypto/entrp.png new file mode 100644 index 0000000..5a251e3 Binary files /dev/null and b/public/icons/crypto/entrp.png differ diff --git a/public/icons/crypto/eon.png b/public/icons/crypto/eon.png new file mode 100644 index 0000000..e4f3f98 Binary files /dev/null and b/public/icons/crypto/eon.png differ diff --git a/public/icons/crypto/eop.png b/public/icons/crypto/eop.png new file mode 100644 index 0000000..fde1e1d Binary files /dev/null and b/public/icons/crypto/eop.png differ diff --git a/public/icons/crypto/eos.png b/public/icons/crypto/eos.png new file mode 100644 index 0000000..4d32fa5 Binary files /dev/null and b/public/icons/crypto/eos.png differ diff --git a/public/icons/crypto/eqli.png b/public/icons/crypto/eqli.png new file mode 100644 index 0000000..16cf4b7 Binary files /dev/null and b/public/icons/crypto/eqli.png differ diff --git a/public/icons/crypto/equa.png b/public/icons/crypto/equa.png new file mode 100644 index 0000000..b62d256 Binary files /dev/null and b/public/icons/crypto/equa.png differ diff --git a/public/icons/crypto/etc.png b/public/icons/crypto/etc.png new file mode 100644 index 0000000..2e8ebda Binary files /dev/null and b/public/icons/crypto/etc.png differ diff --git a/public/icons/crypto/eth.png b/public/icons/crypto/eth.png new file mode 100644 index 0000000..e93b45d Binary files /dev/null and b/public/icons/crypto/eth.png differ diff --git a/public/icons/crypto/ethos.png b/public/icons/crypto/ethos.png new file mode 100644 index 0000000..1e6a5c6 Binary files /dev/null and b/public/icons/crypto/ethos.png differ diff --git a/public/icons/crypto/etn.png b/public/icons/crypto/etn.png new file mode 100644 index 0000000..9762c4d Binary files /dev/null and b/public/icons/crypto/etn.png differ diff --git a/public/icons/crypto/etp.png b/public/icons/crypto/etp.png new file mode 100644 index 0000000..d192e94 Binary files /dev/null and b/public/icons/crypto/etp.png differ diff --git a/public/icons/crypto/eur.png b/public/icons/crypto/eur.png new file mode 100644 index 0000000..393d84b Binary files /dev/null and b/public/icons/crypto/eur.png differ diff --git a/public/icons/crypto/evx.png b/public/icons/crypto/evx.png new file mode 100644 index 0000000..acaca2a Binary files /dev/null and b/public/icons/crypto/evx.png differ diff --git a/public/icons/crypto/exmo.png b/public/icons/crypto/exmo.png new file mode 100644 index 0000000..0a4aa34 Binary files /dev/null and b/public/icons/crypto/exmo.png differ diff --git a/public/icons/crypto/exp.png b/public/icons/crypto/exp.png new file mode 100644 index 0000000..8112d34 Binary files /dev/null and b/public/icons/crypto/exp.png differ diff --git a/public/icons/crypto/fair.png b/public/icons/crypto/fair.png new file mode 100644 index 0000000..224884c Binary files /dev/null and b/public/icons/crypto/fair.png differ diff --git a/public/icons/crypto/fct.png b/public/icons/crypto/fct.png new file mode 100644 index 0000000..37e1f8a Binary files /dev/null and b/public/icons/crypto/fct.png differ diff --git a/public/icons/crypto/fida.png b/public/icons/crypto/fida.png new file mode 100644 index 0000000..48fe512 Binary files /dev/null and b/public/icons/crypto/fida.png differ diff --git a/public/icons/crypto/fil.png b/public/icons/crypto/fil.png new file mode 100644 index 0000000..2ec4a26 Binary files /dev/null and b/public/icons/crypto/fil.png differ diff --git a/public/icons/crypto/fjc.png b/public/icons/crypto/fjc.png new file mode 100644 index 0000000..643a8f3 Binary files /dev/null and b/public/icons/crypto/fjc.png differ diff --git a/public/icons/crypto/fldc.png b/public/icons/crypto/fldc.png new file mode 100644 index 0000000..fe0e176 Binary files /dev/null and b/public/icons/crypto/fldc.png differ diff --git a/public/icons/crypto/flo.png b/public/icons/crypto/flo.png new file mode 100644 index 0000000..a25482f Binary files /dev/null and b/public/icons/crypto/flo.png differ diff --git a/public/icons/crypto/flux.png b/public/icons/crypto/flux.png new file mode 100644 index 0000000..fb2a48f Binary files /dev/null and b/public/icons/crypto/flux.png differ diff --git a/public/icons/crypto/fsn.png b/public/icons/crypto/fsn.png new file mode 100644 index 0000000..ca7e324 Binary files /dev/null and b/public/icons/crypto/fsn.png differ diff --git a/public/icons/crypto/ftc.png b/public/icons/crypto/ftc.png new file mode 100644 index 0000000..bb6c92f Binary files /dev/null and b/public/icons/crypto/ftc.png differ diff --git a/public/icons/crypto/fuel.png b/public/icons/crypto/fuel.png new file mode 100644 index 0000000..fe26e0a Binary files /dev/null and b/public/icons/crypto/fuel.png differ diff --git a/public/icons/crypto/fun.png b/public/icons/crypto/fun.png new file mode 100644 index 0000000..fc60a0b Binary files /dev/null and b/public/icons/crypto/fun.png differ diff --git a/public/icons/crypto/game.png b/public/icons/crypto/game.png new file mode 100644 index 0000000..dd39d30 Binary files /dev/null and b/public/icons/crypto/game.png differ diff --git a/public/icons/crypto/gas.png b/public/icons/crypto/gas.png new file mode 100644 index 0000000..d42c1b4 Binary files /dev/null and b/public/icons/crypto/gas.png differ diff --git a/public/icons/crypto/gbp.png b/public/icons/crypto/gbp.png new file mode 100644 index 0000000..9b10de4 Binary files /dev/null and b/public/icons/crypto/gbp.png differ diff --git a/public/icons/crypto/gbx.png b/public/icons/crypto/gbx.png new file mode 100644 index 0000000..eee829e Binary files /dev/null and b/public/icons/crypto/gbx.png differ diff --git a/public/icons/crypto/gbyte.png b/public/icons/crypto/gbyte.png new file mode 100644 index 0000000..ceacec9 Binary files /dev/null and b/public/icons/crypto/gbyte.png differ diff --git a/public/icons/crypto/generic.png b/public/icons/crypto/generic.png new file mode 100644 index 0000000..d9d54e0 Binary files /dev/null and b/public/icons/crypto/generic.png differ diff --git a/public/icons/crypto/gin.png b/public/icons/crypto/gin.png new file mode 100644 index 0000000..601833b Binary files /dev/null and b/public/icons/crypto/gin.png differ diff --git a/public/icons/crypto/glxt.png b/public/icons/crypto/glxt.png new file mode 100644 index 0000000..b85012e Binary files /dev/null and b/public/icons/crypto/glxt.png differ diff --git a/public/icons/crypto/gmr.png b/public/icons/crypto/gmr.png new file mode 100644 index 0000000..c0c5ecb Binary files /dev/null and b/public/icons/crypto/gmr.png differ diff --git a/public/icons/crypto/gmt.png b/public/icons/crypto/gmt.png new file mode 100644 index 0000000..844a818 Binary files /dev/null and b/public/icons/crypto/gmt.png differ diff --git a/public/icons/crypto/gno.png b/public/icons/crypto/gno.png new file mode 100644 index 0000000..2cd0bdc Binary files /dev/null and b/public/icons/crypto/gno.png differ diff --git a/public/icons/crypto/gnt.png b/public/icons/crypto/gnt.png new file mode 100644 index 0000000..ba2ded8 Binary files /dev/null and b/public/icons/crypto/gnt.png differ diff --git a/public/icons/crypto/gold.png b/public/icons/crypto/gold.png new file mode 100644 index 0000000..9c49c4c Binary files /dev/null and b/public/icons/crypto/gold.png differ diff --git a/public/icons/crypto/grc.png b/public/icons/crypto/grc.png new file mode 100644 index 0000000..543d52f Binary files /dev/null and b/public/icons/crypto/grc.png differ diff --git a/public/icons/crypto/grin.png b/public/icons/crypto/grin.png new file mode 100644 index 0000000..93e959b Binary files /dev/null and b/public/icons/crypto/grin.png differ diff --git a/public/icons/crypto/grs.png b/public/icons/crypto/grs.png new file mode 100644 index 0000000..0c6861a Binary files /dev/null and b/public/icons/crypto/grs.png differ diff --git a/public/icons/crypto/grt.png b/public/icons/crypto/grt.png new file mode 100644 index 0000000..caf2372 Binary files /dev/null and b/public/icons/crypto/grt.png differ diff --git a/public/icons/crypto/gsc.png b/public/icons/crypto/gsc.png new file mode 100644 index 0000000..8df928e Binary files /dev/null and b/public/icons/crypto/gsc.png differ diff --git a/public/icons/crypto/gto.png b/public/icons/crypto/gto.png new file mode 100644 index 0000000..0fe36f5 Binary files /dev/null and b/public/icons/crypto/gto.png differ diff --git a/public/icons/crypto/gup.png b/public/icons/crypto/gup.png new file mode 100644 index 0000000..b5b7736 Binary files /dev/null and b/public/icons/crypto/gup.png differ diff --git a/public/icons/crypto/gusd.png b/public/icons/crypto/gusd.png new file mode 100644 index 0000000..1c795e9 Binary files /dev/null and b/public/icons/crypto/gusd.png differ diff --git a/public/icons/crypto/gvt.png b/public/icons/crypto/gvt.png new file mode 100644 index 0000000..97507a9 Binary files /dev/null and b/public/icons/crypto/gvt.png differ diff --git a/public/icons/crypto/gxs.png b/public/icons/crypto/gxs.png new file mode 100644 index 0000000..3cc7d78 Binary files /dev/null and b/public/icons/crypto/gxs.png differ diff --git a/public/icons/crypto/gzr.png b/public/icons/crypto/gzr.png new file mode 100644 index 0000000..f4e4346 Binary files /dev/null and b/public/icons/crypto/gzr.png differ diff --git a/public/icons/crypto/hight.png b/public/icons/crypto/hight.png new file mode 100644 index 0000000..08e8e9b Binary files /dev/null and b/public/icons/crypto/hight.png differ diff --git a/public/icons/crypto/hns.png b/public/icons/crypto/hns.png new file mode 100644 index 0000000..09e99c9 Binary files /dev/null and b/public/icons/crypto/hns.png differ diff --git a/public/icons/crypto/hodl.png b/public/icons/crypto/hodl.png new file mode 100644 index 0000000..0bbd9fa Binary files /dev/null and b/public/icons/crypto/hodl.png differ diff --git a/public/icons/crypto/hot.png b/public/icons/crypto/hot.png new file mode 100644 index 0000000..b998619 Binary files /dev/null and b/public/icons/crypto/hot.png differ diff --git a/public/icons/crypto/hpb.png b/public/icons/crypto/hpb.png new file mode 100644 index 0000000..87be3cd Binary files /dev/null and b/public/icons/crypto/hpb.png differ diff --git a/public/icons/crypto/hsr.png b/public/icons/crypto/hsr.png new file mode 100644 index 0000000..bb7e901 Binary files /dev/null and b/public/icons/crypto/hsr.png differ diff --git a/public/icons/crypto/ht.png b/public/icons/crypto/ht.png new file mode 100644 index 0000000..4c6e1d9 Binary files /dev/null and b/public/icons/crypto/ht.png differ diff --git a/public/icons/crypto/html.png b/public/icons/crypto/html.png new file mode 100644 index 0000000..e7fbb13 Binary files /dev/null and b/public/icons/crypto/html.png differ diff --git a/public/icons/crypto/huc.png b/public/icons/crypto/huc.png new file mode 100644 index 0000000..ca5729f Binary files /dev/null and b/public/icons/crypto/huc.png differ diff --git a/public/icons/crypto/husd.png b/public/icons/crypto/husd.png new file mode 100644 index 0000000..d2f2045 Binary files /dev/null and b/public/icons/crypto/husd.png differ diff --git a/public/icons/crypto/hush.png b/public/icons/crypto/hush.png new file mode 100644 index 0000000..d488df9 Binary files /dev/null and b/public/icons/crypto/hush.png differ diff --git a/public/icons/crypto/icn.png b/public/icons/crypto/icn.png new file mode 100644 index 0000000..b437550 Binary files /dev/null and b/public/icons/crypto/icn.png differ diff --git a/public/icons/crypto/icp.png b/public/icons/crypto/icp.png new file mode 100644 index 0000000..546c5d0 Binary files /dev/null and b/public/icons/crypto/icp.png differ diff --git a/public/icons/crypto/icx.png b/public/icons/crypto/icx.png new file mode 100644 index 0000000..cdafdbc Binary files /dev/null and b/public/icons/crypto/icx.png differ diff --git a/public/icons/crypto/ignis.png b/public/icons/crypto/ignis.png new file mode 100644 index 0000000..6991ee5 Binary files /dev/null and b/public/icons/crypto/ignis.png differ diff --git a/public/icons/crypto/ilk.png b/public/icons/crypto/ilk.png new file mode 100644 index 0000000..d5b4b97 Binary files /dev/null and b/public/icons/crypto/ilk.png differ diff --git a/public/icons/crypto/ink.png b/public/icons/crypto/ink.png new file mode 100644 index 0000000..38353dd Binary files /dev/null and b/public/icons/crypto/ink.png differ diff --git a/public/icons/crypto/ins.png b/public/icons/crypto/ins.png new file mode 100644 index 0000000..bb260eb Binary files /dev/null and b/public/icons/crypto/ins.png differ diff --git a/public/icons/crypto/ion.png b/public/icons/crypto/ion.png new file mode 100644 index 0000000..6bf6457 Binary files /dev/null and b/public/icons/crypto/ion.png differ diff --git a/public/icons/crypto/iop.png b/public/icons/crypto/iop.png new file mode 100644 index 0000000..b447443 Binary files /dev/null and b/public/icons/crypto/iop.png differ diff --git a/public/icons/crypto/iost.png b/public/icons/crypto/iost.png new file mode 100644 index 0000000..f9e180c Binary files /dev/null and b/public/icons/crypto/iost.png differ diff --git a/public/icons/crypto/iotx.png b/public/icons/crypto/iotx.png new file mode 100644 index 0000000..2d3e81e Binary files /dev/null and b/public/icons/crypto/iotx.png differ diff --git a/public/icons/crypto/iq.png b/public/icons/crypto/iq.png new file mode 100644 index 0000000..a7d160e Binary files /dev/null and b/public/icons/crypto/iq.png differ diff --git a/public/icons/crypto/itc.png b/public/icons/crypto/itc.png new file mode 100644 index 0000000..a15c41a Binary files /dev/null and b/public/icons/crypto/itc.png differ diff --git a/public/icons/crypto/jnt.png b/public/icons/crypto/jnt.png new file mode 100644 index 0000000..51087f2 Binary files /dev/null and b/public/icons/crypto/jnt.png differ diff --git a/public/icons/crypto/jpy.png b/public/icons/crypto/jpy.png new file mode 100644 index 0000000..e576373 Binary files /dev/null and b/public/icons/crypto/jpy.png differ diff --git a/public/icons/crypto/kcs.png b/public/icons/crypto/kcs.png new file mode 100644 index 0000000..3513395 Binary files /dev/null and b/public/icons/crypto/kcs.png differ diff --git a/public/icons/crypto/kin.png b/public/icons/crypto/kin.png new file mode 100644 index 0000000..8f743ed Binary files /dev/null and b/public/icons/crypto/kin.png differ diff --git a/public/icons/crypto/klown.png b/public/icons/crypto/klown.png new file mode 100644 index 0000000..2202777 Binary files /dev/null and b/public/icons/crypto/klown.png differ diff --git a/public/icons/crypto/kmd.png b/public/icons/crypto/kmd.png new file mode 100644 index 0000000..d3adaf6 Binary files /dev/null and b/public/icons/crypto/kmd.png differ diff --git a/public/icons/crypto/knc.png b/public/icons/crypto/knc.png new file mode 100644 index 0000000..b9bedec Binary files /dev/null and b/public/icons/crypto/knc.png differ diff --git a/public/icons/crypto/krb.png b/public/icons/crypto/krb.png new file mode 100644 index 0000000..2d865cc Binary files /dev/null and b/public/icons/crypto/krb.png differ diff --git a/public/icons/crypto/ksm.png b/public/icons/crypto/ksm.png new file mode 100644 index 0000000..2b64228 Binary files /dev/null and b/public/icons/crypto/ksm.png differ diff --git a/public/icons/crypto/lbc.png b/public/icons/crypto/lbc.png new file mode 100644 index 0000000..edf42ca Binary files /dev/null and b/public/icons/crypto/lbc.png differ diff --git a/public/icons/crypto/lend.png b/public/icons/crypto/lend.png new file mode 100644 index 0000000..5959a67 Binary files /dev/null and b/public/icons/crypto/lend.png differ diff --git a/public/icons/crypto/leo.png b/public/icons/crypto/leo.png new file mode 100644 index 0000000..43ae0dd Binary files /dev/null and b/public/icons/crypto/leo.png differ diff --git a/public/icons/crypto/link.png b/public/icons/crypto/link.png new file mode 100644 index 0000000..c0f6961 Binary files /dev/null and b/public/icons/crypto/link.png differ diff --git a/public/icons/crypto/lkk.png b/public/icons/crypto/lkk.png new file mode 100644 index 0000000..0fb7645 Binary files /dev/null and b/public/icons/crypto/lkk.png differ diff --git a/public/icons/crypto/loom.png b/public/icons/crypto/loom.png new file mode 100644 index 0000000..bb6acdd Binary files /dev/null and b/public/icons/crypto/loom.png differ diff --git a/public/icons/crypto/lpt.png b/public/icons/crypto/lpt.png new file mode 100644 index 0000000..6548ccc Binary files /dev/null and b/public/icons/crypto/lpt.png differ diff --git a/public/icons/crypto/lrc.png b/public/icons/crypto/lrc.png new file mode 100644 index 0000000..b7bcb1b Binary files /dev/null and b/public/icons/crypto/lrc.png differ diff --git a/public/icons/crypto/lsk.png b/public/icons/crypto/lsk.png new file mode 100644 index 0000000..d7fadae Binary files /dev/null and b/public/icons/crypto/lsk.png differ diff --git a/public/icons/crypto/ltc.png b/public/icons/crypto/ltc.png new file mode 100644 index 0000000..44637ac Binary files /dev/null and b/public/icons/crypto/ltc.png differ diff --git a/public/icons/crypto/lun.png b/public/icons/crypto/lun.png new file mode 100644 index 0000000..175aa6f Binary files /dev/null and b/public/icons/crypto/lun.png differ diff --git a/public/icons/crypto/maid.png b/public/icons/crypto/maid.png new file mode 100644 index 0000000..708c1de Binary files /dev/null and b/public/icons/crypto/maid.png differ diff --git a/public/icons/crypto/mana.png b/public/icons/crypto/mana.png new file mode 100644 index 0000000..e633e83 Binary files /dev/null and b/public/icons/crypto/mana.png differ diff --git a/public/icons/crypto/matic.png b/public/icons/crypto/matic.png new file mode 100644 index 0000000..9bf373e Binary files /dev/null and b/public/icons/crypto/matic.png differ diff --git a/public/icons/crypto/max.png b/public/icons/crypto/max.png new file mode 100644 index 0000000..5088c09 Binary files /dev/null and b/public/icons/crypto/max.png differ diff --git a/public/icons/crypto/mcap.png b/public/icons/crypto/mcap.png new file mode 100644 index 0000000..c433e42 Binary files /dev/null and b/public/icons/crypto/mcap.png differ diff --git a/public/icons/crypto/mco.png b/public/icons/crypto/mco.png new file mode 100644 index 0000000..aac677b Binary files /dev/null and b/public/icons/crypto/mco.png differ diff --git a/public/icons/crypto/mda.png b/public/icons/crypto/mda.png new file mode 100644 index 0000000..16190a8 Binary files /dev/null and b/public/icons/crypto/mda.png differ diff --git a/public/icons/crypto/mds.png b/public/icons/crypto/mds.png new file mode 100644 index 0000000..53f5233 Binary files /dev/null and b/public/icons/crypto/mds.png differ diff --git a/public/icons/crypto/med.png b/public/icons/crypto/med.png new file mode 100644 index 0000000..28ea94b Binary files /dev/null and b/public/icons/crypto/med.png differ diff --git a/public/icons/crypto/meetone.png b/public/icons/crypto/meetone.png new file mode 100644 index 0000000..d0d8006 Binary files /dev/null and b/public/icons/crypto/meetone.png differ diff --git a/public/icons/crypto/mft.png b/public/icons/crypto/mft.png new file mode 100644 index 0000000..4d82c5c Binary files /dev/null and b/public/icons/crypto/mft.png differ diff --git a/public/icons/crypto/miota.png b/public/icons/crypto/miota.png new file mode 100644 index 0000000..8c31f15 Binary files /dev/null and b/public/icons/crypto/miota.png differ diff --git a/public/icons/crypto/mith.png b/public/icons/crypto/mith.png new file mode 100644 index 0000000..a1f43a2 Binary files /dev/null and b/public/icons/crypto/mith.png differ diff --git a/public/icons/crypto/mkr.png b/public/icons/crypto/mkr.png new file mode 100644 index 0000000..9055f36 Binary files /dev/null and b/public/icons/crypto/mkr.png differ diff --git a/public/icons/crypto/mln.png b/public/icons/crypto/mln.png new file mode 100644 index 0000000..73a9b2f Binary files /dev/null and b/public/icons/crypto/mln.png differ diff --git a/public/icons/crypto/mnx.png b/public/icons/crypto/mnx.png new file mode 100644 index 0000000..2e61837 Binary files /dev/null and b/public/icons/crypto/mnx.png differ diff --git a/public/icons/crypto/mnz.png b/public/icons/crypto/mnz.png new file mode 100644 index 0000000..1e0bd83 Binary files /dev/null and b/public/icons/crypto/mnz.png differ diff --git a/public/icons/crypto/moac.png b/public/icons/crypto/moac.png new file mode 100644 index 0000000..5bef94d Binary files /dev/null and b/public/icons/crypto/moac.png differ diff --git a/public/icons/crypto/mod.png b/public/icons/crypto/mod.png new file mode 100644 index 0000000..9a7063a Binary files /dev/null and b/public/icons/crypto/mod.png differ diff --git a/public/icons/crypto/mona.png b/public/icons/crypto/mona.png new file mode 100644 index 0000000..c1b9951 Binary files /dev/null and b/public/icons/crypto/mona.png differ diff --git a/public/icons/crypto/msr.png b/public/icons/crypto/msr.png new file mode 100644 index 0000000..69a37f5 Binary files /dev/null and b/public/icons/crypto/msr.png differ diff --git a/public/icons/crypto/mth.png b/public/icons/crypto/mth.png new file mode 100644 index 0000000..b2755ce Binary files /dev/null and b/public/icons/crypto/mth.png differ diff --git a/public/icons/crypto/mtl.png b/public/icons/crypto/mtl.png new file mode 100644 index 0000000..dd16644 Binary files /dev/null and b/public/icons/crypto/mtl.png differ diff --git a/public/icons/crypto/music.png b/public/icons/crypto/music.png new file mode 100644 index 0000000..c8d8015 Binary files /dev/null and b/public/icons/crypto/music.png differ diff --git a/public/icons/crypto/mzc.png b/public/icons/crypto/mzc.png new file mode 100644 index 0000000..81bd9d7 Binary files /dev/null and b/public/icons/crypto/mzc.png differ diff --git a/public/icons/crypto/nano.png b/public/icons/crypto/nano.png new file mode 100644 index 0000000..b829747 Binary files /dev/null and b/public/icons/crypto/nano.png differ diff --git a/public/icons/crypto/nas.png b/public/icons/crypto/nas.png new file mode 100644 index 0000000..0eafff7 Binary files /dev/null and b/public/icons/crypto/nas.png differ diff --git a/public/icons/crypto/nav.png b/public/icons/crypto/nav.png new file mode 100644 index 0000000..46b40ee Binary files /dev/null and b/public/icons/crypto/nav.png differ diff --git a/public/icons/crypto/ncash.png b/public/icons/crypto/ncash.png new file mode 100644 index 0000000..cc1482e Binary files /dev/null and b/public/icons/crypto/ncash.png differ diff --git a/public/icons/crypto/ndz.png b/public/icons/crypto/ndz.png new file mode 100644 index 0000000..d492717 Binary files /dev/null and b/public/icons/crypto/ndz.png differ diff --git a/public/icons/crypto/near.png b/public/icons/crypto/near.png new file mode 100644 index 0000000..c8ca8b9 Binary files /dev/null and b/public/icons/crypto/near.png differ diff --git a/public/icons/crypto/nebl.png b/public/icons/crypto/nebl.png new file mode 100644 index 0000000..dc187f9 Binary files /dev/null and b/public/icons/crypto/nebl.png differ diff --git a/public/icons/crypto/neo.png b/public/icons/crypto/neo.png new file mode 100644 index 0000000..823bd43 Binary files /dev/null and b/public/icons/crypto/neo.png differ diff --git a/public/icons/crypto/neos.png b/public/icons/crypto/neos.png new file mode 100644 index 0000000..d095b68 Binary files /dev/null and b/public/icons/crypto/neos.png differ diff --git a/public/icons/crypto/neu.png b/public/icons/crypto/neu.png new file mode 100644 index 0000000..2732c2f Binary files /dev/null and b/public/icons/crypto/neu.png differ diff --git a/public/icons/crypto/nexo.png b/public/icons/crypto/nexo.png new file mode 100644 index 0000000..2b690ed Binary files /dev/null and b/public/icons/crypto/nexo.png differ diff --git a/public/icons/crypto/ngc.png b/public/icons/crypto/ngc.png new file mode 100644 index 0000000..40ca2f4 Binary files /dev/null and b/public/icons/crypto/ngc.png differ diff --git a/public/icons/crypto/nio.png b/public/icons/crypto/nio.png new file mode 100644 index 0000000..d9e9449 Binary files /dev/null and b/public/icons/crypto/nio.png differ diff --git a/public/icons/crypto/nkn.png b/public/icons/crypto/nkn.png new file mode 100644 index 0000000..a43e70c Binary files /dev/null and b/public/icons/crypto/nkn.png differ diff --git a/public/icons/crypto/nlc2.png b/public/icons/crypto/nlc2.png new file mode 100644 index 0000000..f835c85 Binary files /dev/null and b/public/icons/crypto/nlc2.png differ diff --git a/public/icons/crypto/nlg.png b/public/icons/crypto/nlg.png new file mode 100644 index 0000000..2cfbe41 Binary files /dev/null and b/public/icons/crypto/nlg.png differ diff --git a/public/icons/crypto/nmc.png b/public/icons/crypto/nmc.png new file mode 100644 index 0000000..6012c55 Binary files /dev/null and b/public/icons/crypto/nmc.png differ diff --git a/public/icons/crypto/nmr.png b/public/icons/crypto/nmr.png new file mode 100644 index 0000000..db722af Binary files /dev/null and b/public/icons/crypto/nmr.png differ diff --git a/public/icons/crypto/npxs.png b/public/icons/crypto/npxs.png new file mode 100644 index 0000000..fc6c450 Binary files /dev/null and b/public/icons/crypto/npxs.png differ diff --git a/public/icons/crypto/ntbc.png b/public/icons/crypto/ntbc.png new file mode 100644 index 0000000..a918ed1 Binary files /dev/null and b/public/icons/crypto/ntbc.png differ diff --git a/public/icons/crypto/nuls.png b/public/icons/crypto/nuls.png new file mode 100644 index 0000000..99562d7 Binary files /dev/null and b/public/icons/crypto/nuls.png differ diff --git a/public/icons/crypto/nxs.png b/public/icons/crypto/nxs.png new file mode 100644 index 0000000..8371e7f Binary files /dev/null and b/public/icons/crypto/nxs.png differ diff --git a/public/icons/crypto/nxt.png b/public/icons/crypto/nxt.png new file mode 100644 index 0000000..85b90ff Binary files /dev/null and b/public/icons/crypto/nxt.png differ diff --git a/public/icons/crypto/oax.png b/public/icons/crypto/oax.png new file mode 100644 index 0000000..4c96d8f Binary files /dev/null and b/public/icons/crypto/oax.png differ diff --git a/public/icons/crypto/ok.png b/public/icons/crypto/ok.png new file mode 100644 index 0000000..b210aef Binary files /dev/null and b/public/icons/crypto/ok.png differ diff --git a/public/icons/crypto/omg.png b/public/icons/crypto/omg.png new file mode 100644 index 0000000..4c7039d Binary files /dev/null and b/public/icons/crypto/omg.png differ diff --git a/public/icons/crypto/omni.png b/public/icons/crypto/omni.png new file mode 100644 index 0000000..8256df5 Binary files /dev/null and b/public/icons/crypto/omni.png differ diff --git a/public/icons/crypto/one.png b/public/icons/crypto/one.png new file mode 100644 index 0000000..2cb814a Binary files /dev/null and b/public/icons/crypto/one.png differ diff --git a/public/icons/crypto/ong.png b/public/icons/crypto/ong.png new file mode 100644 index 0000000..f54b7b3 Binary files /dev/null and b/public/icons/crypto/ong.png differ diff --git a/public/icons/crypto/ont.png b/public/icons/crypto/ont.png new file mode 100644 index 0000000..b06aa7b Binary files /dev/null and b/public/icons/crypto/ont.png differ diff --git a/public/icons/crypto/oot.png b/public/icons/crypto/oot.png new file mode 100644 index 0000000..0f2f945 Binary files /dev/null and b/public/icons/crypto/oot.png differ diff --git a/public/icons/crypto/ost.png b/public/icons/crypto/ost.png new file mode 100644 index 0000000..f901ddc Binary files /dev/null and b/public/icons/crypto/ost.png differ diff --git a/public/icons/crypto/ox.png b/public/icons/crypto/ox.png new file mode 100644 index 0000000..25b34b8 Binary files /dev/null and b/public/icons/crypto/ox.png differ diff --git a/public/icons/crypto/oxt.png b/public/icons/crypto/oxt.png new file mode 100644 index 0000000..6b3a2e9 Binary files /dev/null and b/public/icons/crypto/oxt.png differ diff --git a/public/icons/crypto/oxy.png b/public/icons/crypto/oxy.png new file mode 100644 index 0000000..9f165f8 Binary files /dev/null and b/public/icons/crypto/oxy.png differ diff --git a/public/icons/crypto/part.png b/public/icons/crypto/part.png new file mode 100644 index 0000000..23a1f98 Binary files /dev/null and b/public/icons/crypto/part.png differ diff --git a/public/icons/crypto/pasc.png b/public/icons/crypto/pasc.png new file mode 100644 index 0000000..f6da94b Binary files /dev/null and b/public/icons/crypto/pasc.png differ diff --git a/public/icons/crypto/pasl.png b/public/icons/crypto/pasl.png new file mode 100644 index 0000000..546020d Binary files /dev/null and b/public/icons/crypto/pasl.png differ diff --git a/public/icons/crypto/pax.png b/public/icons/crypto/pax.png new file mode 100644 index 0000000..752b220 Binary files /dev/null and b/public/icons/crypto/pax.png differ diff --git a/public/icons/crypto/paxg.png b/public/icons/crypto/paxg.png new file mode 100644 index 0000000..9d61e45 Binary files /dev/null and b/public/icons/crypto/paxg.png differ diff --git a/public/icons/crypto/pay.png b/public/icons/crypto/pay.png new file mode 100644 index 0000000..02a4ce7 Binary files /dev/null and b/public/icons/crypto/pay.png differ diff --git a/public/icons/crypto/payx.png b/public/icons/crypto/payx.png new file mode 100644 index 0000000..2595398 Binary files /dev/null and b/public/icons/crypto/payx.png differ diff --git a/public/icons/crypto/pink.png b/public/icons/crypto/pink.png new file mode 100644 index 0000000..2940dfb Binary files /dev/null and b/public/icons/crypto/pink.png differ diff --git a/public/icons/crypto/pirl.png b/public/icons/crypto/pirl.png new file mode 100644 index 0000000..9abfda1 Binary files /dev/null and b/public/icons/crypto/pirl.png differ diff --git a/public/icons/crypto/pivx.png b/public/icons/crypto/pivx.png new file mode 100644 index 0000000..381e971 Binary files /dev/null and b/public/icons/crypto/pivx.png differ diff --git a/public/icons/crypto/plr.png b/public/icons/crypto/plr.png new file mode 100644 index 0000000..1ae9c34 Binary files /dev/null and b/public/icons/crypto/plr.png differ diff --git a/public/icons/crypto/poa.png b/public/icons/crypto/poa.png new file mode 100644 index 0000000..88acf82 Binary files /dev/null and b/public/icons/crypto/poa.png differ diff --git a/public/icons/crypto/poe.png b/public/icons/crypto/poe.png new file mode 100644 index 0000000..923f197 Binary files /dev/null and b/public/icons/crypto/poe.png differ diff --git a/public/icons/crypto/polis.png b/public/icons/crypto/polis.png new file mode 100644 index 0000000..8fddcb8 Binary files /dev/null and b/public/icons/crypto/polis.png differ diff --git a/public/icons/crypto/poly.png b/public/icons/crypto/poly.png new file mode 100644 index 0000000..97e498e Binary files /dev/null and b/public/icons/crypto/poly.png differ diff --git a/public/icons/crypto/pot.png b/public/icons/crypto/pot.png new file mode 100644 index 0000000..73fd481 Binary files /dev/null and b/public/icons/crypto/pot.png differ diff --git a/public/icons/crypto/powr.png b/public/icons/crypto/powr.png new file mode 100644 index 0000000..b3ad10f Binary files /dev/null and b/public/icons/crypto/powr.png differ diff --git a/public/icons/crypto/ppc.png b/public/icons/crypto/ppc.png new file mode 100644 index 0000000..ad11d2f Binary files /dev/null and b/public/icons/crypto/ppc.png differ diff --git a/public/icons/crypto/ppp.png b/public/icons/crypto/ppp.png new file mode 100644 index 0000000..4dc1e9f Binary files /dev/null and b/public/icons/crypto/ppp.png differ diff --git a/public/icons/crypto/ppt.png b/public/icons/crypto/ppt.png new file mode 100644 index 0000000..c6a5ee8 Binary files /dev/null and b/public/icons/crypto/ppt.png differ diff --git a/public/icons/crypto/pre.png b/public/icons/crypto/pre.png new file mode 100644 index 0000000..1f3d142 Binary files /dev/null and b/public/icons/crypto/pre.png differ diff --git a/public/icons/crypto/prl.png b/public/icons/crypto/prl.png new file mode 100644 index 0000000..9cacbec Binary files /dev/null and b/public/icons/crypto/prl.png differ diff --git a/public/icons/crypto/pungo.png b/public/icons/crypto/pungo.png new file mode 100644 index 0000000..7c308ef Binary files /dev/null and b/public/icons/crypto/pungo.png differ diff --git a/public/icons/crypto/pura.png b/public/icons/crypto/pura.png new file mode 100644 index 0000000..0bc54ca Binary files /dev/null and b/public/icons/crypto/pura.png differ diff --git a/public/icons/crypto/qash.png b/public/icons/crypto/qash.png new file mode 100644 index 0000000..6ed50c2 Binary files /dev/null and b/public/icons/crypto/qash.png differ diff --git a/public/icons/crypto/qiwi.png b/public/icons/crypto/qiwi.png new file mode 100644 index 0000000..38dd0a3 Binary files /dev/null and b/public/icons/crypto/qiwi.png differ diff --git a/public/icons/crypto/qlc.png b/public/icons/crypto/qlc.png new file mode 100644 index 0000000..9fa18e2 Binary files /dev/null and b/public/icons/crypto/qlc.png differ diff --git a/public/icons/crypto/qnt.png b/public/icons/crypto/qnt.png new file mode 100644 index 0000000..3c440ba Binary files /dev/null and b/public/icons/crypto/qnt.png differ diff --git a/public/icons/crypto/qrl.png b/public/icons/crypto/qrl.png new file mode 100644 index 0000000..6abfeec Binary files /dev/null and b/public/icons/crypto/qrl.png differ diff --git a/public/icons/crypto/qsp.png b/public/icons/crypto/qsp.png new file mode 100644 index 0000000..2dc5440 Binary files /dev/null and b/public/icons/crypto/qsp.png differ diff --git a/public/icons/crypto/qtum.png b/public/icons/crypto/qtum.png new file mode 100644 index 0000000..10865b0 Binary files /dev/null and b/public/icons/crypto/qtum.png differ diff --git a/public/icons/crypto/r.png b/public/icons/crypto/r.png new file mode 100644 index 0000000..bc476e2 Binary files /dev/null and b/public/icons/crypto/r.png differ diff --git a/public/icons/crypto/rads.png b/public/icons/crypto/rads.png new file mode 100644 index 0000000..11248ef Binary files /dev/null and b/public/icons/crypto/rads.png differ diff --git a/public/icons/crypto/rap.png b/public/icons/crypto/rap.png new file mode 100644 index 0000000..39f951f Binary files /dev/null and b/public/icons/crypto/rap.png differ diff --git a/public/icons/crypto/ray.png b/public/icons/crypto/ray.png new file mode 100644 index 0000000..cb48c8d Binary files /dev/null and b/public/icons/crypto/ray.png differ diff --git a/public/icons/crypto/rcn.png b/public/icons/crypto/rcn.png new file mode 100644 index 0000000..77d9c86 Binary files /dev/null and b/public/icons/crypto/rcn.png differ diff --git a/public/icons/crypto/rdd.png b/public/icons/crypto/rdd.png new file mode 100644 index 0000000..00e79ee Binary files /dev/null and b/public/icons/crypto/rdd.png differ diff --git a/public/icons/crypto/rdn.png b/public/icons/crypto/rdn.png new file mode 100644 index 0000000..8d7f3df Binary files /dev/null and b/public/icons/crypto/rdn.png differ diff --git a/public/icons/crypto/ren.png b/public/icons/crypto/ren.png new file mode 100644 index 0000000..eb30ace Binary files /dev/null and b/public/icons/crypto/ren.png differ diff --git a/public/icons/crypto/rep.png b/public/icons/crypto/rep.png new file mode 100644 index 0000000..449b3f5 Binary files /dev/null and b/public/icons/crypto/rep.png differ diff --git a/public/icons/crypto/repv2.png b/public/icons/crypto/repv2.png new file mode 100644 index 0000000..ffea557 Binary files /dev/null and b/public/icons/crypto/repv2.png differ diff --git a/public/icons/crypto/req.png b/public/icons/crypto/req.png new file mode 100644 index 0000000..ca6bc6e Binary files /dev/null and b/public/icons/crypto/req.png differ diff --git a/public/icons/crypto/rhoc.png b/public/icons/crypto/rhoc.png new file mode 100644 index 0000000..0be6e04 Binary files /dev/null and b/public/icons/crypto/rhoc.png differ diff --git a/public/icons/crypto/ric.png b/public/icons/crypto/ric.png new file mode 100644 index 0000000..f7616bd Binary files /dev/null and b/public/icons/crypto/ric.png differ diff --git a/public/icons/crypto/rise.png b/public/icons/crypto/rise.png new file mode 100644 index 0000000..c49b544 Binary files /dev/null and b/public/icons/crypto/rise.png differ diff --git a/public/icons/crypto/rlc.png b/public/icons/crypto/rlc.png new file mode 100644 index 0000000..c5f7b07 Binary files /dev/null and b/public/icons/crypto/rlc.png differ diff --git a/public/icons/crypto/rpx.png b/public/icons/crypto/rpx.png new file mode 100644 index 0000000..7d9734c Binary files /dev/null and b/public/icons/crypto/rpx.png differ diff --git a/public/icons/crypto/rub.png b/public/icons/crypto/rub.png new file mode 100644 index 0000000..c09c264 Binary files /dev/null and b/public/icons/crypto/rub.png differ diff --git a/public/icons/crypto/rvn.png b/public/icons/crypto/rvn.png new file mode 100644 index 0000000..14faea8 Binary files /dev/null and b/public/icons/crypto/rvn.png differ diff --git a/public/icons/crypto/ryo.png b/public/icons/crypto/ryo.png new file mode 100644 index 0000000..254a283 Binary files /dev/null and b/public/icons/crypto/ryo.png differ diff --git a/public/icons/crypto/safe.png b/public/icons/crypto/safe.png new file mode 100644 index 0000000..a2821c8 Binary files /dev/null and b/public/icons/crypto/safe.png differ diff --git a/public/icons/crypto/safemoon.png b/public/icons/crypto/safemoon.png new file mode 100644 index 0000000..a1b62da Binary files /dev/null and b/public/icons/crypto/safemoon.png differ diff --git a/public/icons/crypto/sai.png b/public/icons/crypto/sai.png new file mode 100644 index 0000000..ab62b85 Binary files /dev/null and b/public/icons/crypto/sai.png differ diff --git a/public/icons/crypto/salt.png b/public/icons/crypto/salt.png new file mode 100644 index 0000000..1258565 Binary files /dev/null and b/public/icons/crypto/salt.png differ diff --git a/public/icons/crypto/san.png b/public/icons/crypto/san.png new file mode 100644 index 0000000..b0de9b1 Binary files /dev/null and b/public/icons/crypto/san.png differ diff --git a/public/icons/crypto/sand.png b/public/icons/crypto/sand.png new file mode 100644 index 0000000..170ea7b Binary files /dev/null and b/public/icons/crypto/sand.png differ diff --git a/public/icons/crypto/sbd.png b/public/icons/crypto/sbd.png new file mode 100644 index 0000000..47f5de4 Binary files /dev/null and b/public/icons/crypto/sbd.png differ diff --git a/public/icons/crypto/sberbank.png b/public/icons/crypto/sberbank.png new file mode 100644 index 0000000..62a4035 Binary files /dev/null and b/public/icons/crypto/sberbank.png differ diff --git a/public/icons/crypto/sc.png b/public/icons/crypto/sc.png new file mode 100644 index 0000000..ea6de14 Binary files /dev/null and b/public/icons/crypto/sc.png differ diff --git a/public/icons/crypto/ser.png b/public/icons/crypto/ser.png new file mode 100644 index 0000000..f969b95 Binary files /dev/null and b/public/icons/crypto/ser.png differ diff --git a/public/icons/crypto/shift.png b/public/icons/crypto/shift.png new file mode 100644 index 0000000..f9d98b8 Binary files /dev/null and b/public/icons/crypto/shift.png differ diff --git a/public/icons/crypto/sib.png b/public/icons/crypto/sib.png new file mode 100644 index 0000000..eddc6d0 Binary files /dev/null and b/public/icons/crypto/sib.png differ diff --git a/public/icons/crypto/sin.png b/public/icons/crypto/sin.png new file mode 100644 index 0000000..0831340 Binary files /dev/null and b/public/icons/crypto/sin.png differ diff --git a/public/icons/crypto/skl.png b/public/icons/crypto/skl.png new file mode 100644 index 0000000..fe898f7 Binary files /dev/null and b/public/icons/crypto/skl.png differ diff --git a/public/icons/crypto/sky.png b/public/icons/crypto/sky.png new file mode 100644 index 0000000..391f486 Binary files /dev/null and b/public/icons/crypto/sky.png differ diff --git a/public/icons/crypto/slr.png b/public/icons/crypto/slr.png new file mode 100644 index 0000000..5b4bd77 Binary files /dev/null and b/public/icons/crypto/slr.png differ diff --git a/public/icons/crypto/sls.png b/public/icons/crypto/sls.png new file mode 100644 index 0000000..ad6b1fa Binary files /dev/null and b/public/icons/crypto/sls.png differ diff --git a/public/icons/crypto/smart.png b/public/icons/crypto/smart.png new file mode 100644 index 0000000..354b642 Binary files /dev/null and b/public/icons/crypto/smart.png differ diff --git a/public/icons/crypto/sngls.png b/public/icons/crypto/sngls.png new file mode 100644 index 0000000..1d0cc09 Binary files /dev/null and b/public/icons/crypto/sngls.png differ diff --git a/public/icons/crypto/snm.png b/public/icons/crypto/snm.png new file mode 100644 index 0000000..a8ab217 Binary files /dev/null and b/public/icons/crypto/snm.png differ diff --git a/public/icons/crypto/snt.png b/public/icons/crypto/snt.png new file mode 100644 index 0000000..cb778d1 Binary files /dev/null and b/public/icons/crypto/snt.png differ diff --git a/public/icons/crypto/snx.png b/public/icons/crypto/snx.png new file mode 100644 index 0000000..ee631c9 Binary files /dev/null and b/public/icons/crypto/snx.png differ diff --git a/public/icons/crypto/soc.png b/public/icons/crypto/soc.png new file mode 100644 index 0000000..ee5774a Binary files /dev/null and b/public/icons/crypto/soc.png differ diff --git a/public/icons/crypto/sol.png b/public/icons/crypto/sol.png new file mode 100644 index 0000000..c810292 Binary files /dev/null and b/public/icons/crypto/sol.png differ diff --git a/public/icons/crypto/spacehbit.png b/public/icons/crypto/spacehbit.png new file mode 100644 index 0000000..244ae76 Binary files /dev/null and b/public/icons/crypto/spacehbit.png differ diff --git a/public/icons/crypto/spank.png b/public/icons/crypto/spank.png new file mode 100644 index 0000000..9d12b03 Binary files /dev/null and b/public/icons/crypto/spank.png differ diff --git a/public/icons/crypto/sphtx.png b/public/icons/crypto/sphtx.png new file mode 100644 index 0000000..cc085b7 Binary files /dev/null and b/public/icons/crypto/sphtx.png differ diff --git a/public/icons/crypto/srn.png b/public/icons/crypto/srn.png new file mode 100644 index 0000000..c7f910f Binary files /dev/null and b/public/icons/crypto/srn.png differ diff --git a/public/icons/crypto/stak.png b/public/icons/crypto/stak.png new file mode 100644 index 0000000..2e0ff1f Binary files /dev/null and b/public/icons/crypto/stak.png differ diff --git a/public/icons/crypto/start.png b/public/icons/crypto/start.png new file mode 100644 index 0000000..a61f820 Binary files /dev/null and b/public/icons/crypto/start.png differ diff --git a/public/icons/crypto/steem.png b/public/icons/crypto/steem.png new file mode 100644 index 0000000..44e5cb8 Binary files /dev/null and b/public/icons/crypto/steem.png differ diff --git a/public/icons/crypto/storj.png b/public/icons/crypto/storj.png new file mode 100644 index 0000000..20cc7ae Binary files /dev/null and b/public/icons/crypto/storj.png differ diff --git a/public/icons/crypto/storm.png b/public/icons/crypto/storm.png new file mode 100644 index 0000000..86deb91 Binary files /dev/null and b/public/icons/crypto/storm.png differ diff --git a/public/icons/crypto/stox.png b/public/icons/crypto/stox.png new file mode 100644 index 0000000..2b1b8d7 Binary files /dev/null and b/public/icons/crypto/stox.png differ diff --git a/public/icons/crypto/stq.png b/public/icons/crypto/stq.png new file mode 100644 index 0000000..e7c8e37 Binary files /dev/null and b/public/icons/crypto/stq.png differ diff --git a/public/icons/crypto/strat.png b/public/icons/crypto/strat.png new file mode 100644 index 0000000..95174c0 Binary files /dev/null and b/public/icons/crypto/strat.png differ diff --git a/public/icons/crypto/stx.png b/public/icons/crypto/stx.png new file mode 100644 index 0000000..7bb1d2a Binary files /dev/null and b/public/icons/crypto/stx.png differ diff --git a/public/icons/crypto/sub.png b/public/icons/crypto/sub.png new file mode 100644 index 0000000..aa656d3 Binary files /dev/null and b/public/icons/crypto/sub.png differ diff --git a/public/icons/crypto/sumo.png b/public/icons/crypto/sumo.png new file mode 100644 index 0000000..5dd31f7 Binary files /dev/null and b/public/icons/crypto/sumo.png differ diff --git a/public/icons/crypto/sushi.png b/public/icons/crypto/sushi.png new file mode 100644 index 0000000..8cae96f Binary files /dev/null and b/public/icons/crypto/sushi.png differ diff --git a/public/icons/crypto/sys.png b/public/icons/crypto/sys.png new file mode 100644 index 0000000..a38b9e8 Binary files /dev/null and b/public/icons/crypto/sys.png differ diff --git a/public/icons/crypto/taas.png b/public/icons/crypto/taas.png new file mode 100644 index 0000000..5531c0e Binary files /dev/null and b/public/icons/crypto/taas.png differ diff --git a/public/icons/crypto/tau.png b/public/icons/crypto/tau.png new file mode 100644 index 0000000..6b0dc52 Binary files /dev/null and b/public/icons/crypto/tau.png differ diff --git a/public/icons/crypto/tbx.png b/public/icons/crypto/tbx.png new file mode 100644 index 0000000..5e18ac2 Binary files /dev/null and b/public/icons/crypto/tbx.png differ diff --git a/public/icons/crypto/tel.png b/public/icons/crypto/tel.png new file mode 100644 index 0000000..36204d5 Binary files /dev/null and b/public/icons/crypto/tel.png differ diff --git a/public/icons/crypto/ten.png b/public/icons/crypto/ten.png new file mode 100644 index 0000000..5f7da5c Binary files /dev/null and b/public/icons/crypto/ten.png differ diff --git a/public/icons/crypto/tern.png b/public/icons/crypto/tern.png new file mode 100644 index 0000000..c584c18 Binary files /dev/null and b/public/icons/crypto/tern.png differ diff --git a/public/icons/crypto/tgch.png b/public/icons/crypto/tgch.png new file mode 100644 index 0000000..8fd6ef2 Binary files /dev/null and b/public/icons/crypto/tgch.png differ diff --git a/public/icons/crypto/theta.png b/public/icons/crypto/theta.png new file mode 100644 index 0000000..77e7d2a Binary files /dev/null and b/public/icons/crypto/theta.png differ diff --git a/public/icons/crypto/tix.png b/public/icons/crypto/tix.png new file mode 100644 index 0000000..d4db3d7 Binary files /dev/null and b/public/icons/crypto/tix.png differ diff --git a/public/icons/crypto/tkn.png b/public/icons/crypto/tkn.png new file mode 100644 index 0000000..b0e8c27 Binary files /dev/null and b/public/icons/crypto/tkn.png differ diff --git a/public/icons/crypto/tks.png b/public/icons/crypto/tks.png new file mode 100644 index 0000000..b6ca066 Binary files /dev/null and b/public/icons/crypto/tks.png differ diff --git a/public/icons/crypto/tnb.png b/public/icons/crypto/tnb.png new file mode 100644 index 0000000..042b762 Binary files /dev/null and b/public/icons/crypto/tnb.png differ diff --git a/public/icons/crypto/tnc.png b/public/icons/crypto/tnc.png new file mode 100644 index 0000000..bfe01c5 Binary files /dev/null and b/public/icons/crypto/tnc.png differ diff --git a/public/icons/crypto/tnt.png b/public/icons/crypto/tnt.png new file mode 100644 index 0000000..423a4cf Binary files /dev/null and b/public/icons/crypto/tnt.png differ diff --git a/public/icons/crypto/tomo.png b/public/icons/crypto/tomo.png new file mode 100644 index 0000000..44d52f5 Binary files /dev/null and b/public/icons/crypto/tomo.png differ diff --git a/public/icons/crypto/ton.png b/public/icons/crypto/ton.png new file mode 100644 index 0000000..7c09295 Binary files /dev/null and b/public/icons/crypto/ton.png differ diff --git a/public/icons/crypto/tpay.png b/public/icons/crypto/tpay.png new file mode 100644 index 0000000..9bac578 Binary files /dev/null and b/public/icons/crypto/tpay.png differ diff --git a/public/icons/crypto/trig.png b/public/icons/crypto/trig.png new file mode 100644 index 0000000..67b741f Binary files /dev/null and b/public/icons/crypto/trig.png differ diff --git a/public/icons/crypto/trtl.png b/public/icons/crypto/trtl.png new file mode 100644 index 0000000..7347fe4 Binary files /dev/null and b/public/icons/crypto/trtl.png differ diff --git a/public/icons/crypto/trx.png b/public/icons/crypto/trx.png new file mode 100644 index 0000000..a1f2401 Binary files /dev/null and b/public/icons/crypto/trx.png differ diff --git a/public/icons/crypto/tusd.png b/public/icons/crypto/tusd.png new file mode 100644 index 0000000..d88ed36 Binary files /dev/null and b/public/icons/crypto/tusd.png differ diff --git a/public/icons/crypto/tzc.png b/public/icons/crypto/tzc.png new file mode 100644 index 0000000..46bce3d Binary files /dev/null and b/public/icons/crypto/tzc.png differ diff --git a/public/icons/crypto/ubq.png b/public/icons/crypto/ubq.png new file mode 100644 index 0000000..ab1acb7 Binary files /dev/null and b/public/icons/crypto/ubq.png differ diff --git a/public/icons/crypto/uma.png b/public/icons/crypto/uma.png new file mode 100644 index 0000000..4a3d645 Binary files /dev/null and b/public/icons/crypto/uma.png differ diff --git a/public/icons/crypto/uni.png b/public/icons/crypto/uni.png new file mode 100644 index 0000000..2475567 Binary files /dev/null and b/public/icons/crypto/uni.png differ diff --git a/public/icons/crypto/unity.png b/public/icons/crypto/unity.png new file mode 100644 index 0000000..9f00770 Binary files /dev/null and b/public/icons/crypto/unity.png differ diff --git a/public/icons/crypto/usd.png b/public/icons/crypto/usd.png new file mode 100644 index 0000000..1fcc380 Binary files /dev/null and b/public/icons/crypto/usd.png differ diff --git a/public/icons/crypto/usdc.png b/public/icons/crypto/usdc.png new file mode 100644 index 0000000..a2304bf Binary files /dev/null and b/public/icons/crypto/usdc.png differ diff --git a/public/icons/crypto/usdt.png b/public/icons/crypto/usdt.png new file mode 100644 index 0000000..bc2e5f6 Binary files /dev/null and b/public/icons/crypto/usdt.png differ diff --git a/public/icons/crypto/utk.png b/public/icons/crypto/utk.png new file mode 100644 index 0000000..59d5efa Binary files /dev/null and b/public/icons/crypto/utk.png differ diff --git a/public/icons/crypto/veri.png b/public/icons/crypto/veri.png new file mode 100644 index 0000000..3bc6767 Binary files /dev/null and b/public/icons/crypto/veri.png differ diff --git a/public/icons/crypto/vet.png b/public/icons/crypto/vet.png new file mode 100644 index 0000000..3cd3084 Binary files /dev/null and b/public/icons/crypto/vet.png differ diff --git a/public/icons/crypto/via.png b/public/icons/crypto/via.png new file mode 100644 index 0000000..e68c5ad Binary files /dev/null and b/public/icons/crypto/via.png differ diff --git a/public/icons/crypto/vib.png b/public/icons/crypto/vib.png new file mode 100644 index 0000000..d9e33ee Binary files /dev/null and b/public/icons/crypto/vib.png differ diff --git a/public/icons/crypto/vibe.png b/public/icons/crypto/vibe.png new file mode 100644 index 0000000..0d030ae Binary files /dev/null and b/public/icons/crypto/vibe.png differ diff --git a/public/icons/crypto/vivo.png b/public/icons/crypto/vivo.png new file mode 100644 index 0000000..1477569 Binary files /dev/null and b/public/icons/crypto/vivo.png differ diff --git a/public/icons/crypto/vrc.png b/public/icons/crypto/vrc.png new file mode 100644 index 0000000..affe7a1 Binary files /dev/null and b/public/icons/crypto/vrc.png differ diff --git a/public/icons/crypto/vrsc.png b/public/icons/crypto/vrsc.png new file mode 100644 index 0000000..db012be Binary files /dev/null and b/public/icons/crypto/vrsc.png differ diff --git a/public/icons/crypto/vtc.png b/public/icons/crypto/vtc.png new file mode 100644 index 0000000..bc6e380 Binary files /dev/null and b/public/icons/crypto/vtc.png differ diff --git a/public/icons/crypto/vtho.png b/public/icons/crypto/vtho.png new file mode 100644 index 0000000..0b82f1d Binary files /dev/null and b/public/icons/crypto/vtho.png differ diff --git a/public/icons/crypto/wabi.png b/public/icons/crypto/wabi.png new file mode 100644 index 0000000..62899b6 Binary files /dev/null and b/public/icons/crypto/wabi.png differ diff --git a/public/icons/crypto/wan.png b/public/icons/crypto/wan.png new file mode 100644 index 0000000..f05634a Binary files /dev/null and b/public/icons/crypto/wan.png differ diff --git a/public/icons/crypto/waves.png b/public/icons/crypto/waves.png new file mode 100644 index 0000000..d82339a Binary files /dev/null and b/public/icons/crypto/waves.png differ diff --git a/public/icons/crypto/wax.png b/public/icons/crypto/wax.png new file mode 100644 index 0000000..29c0673 Binary files /dev/null and b/public/icons/crypto/wax.png differ diff --git a/public/icons/crypto/wbtc.png b/public/icons/crypto/wbtc.png new file mode 100644 index 0000000..a7978ea Binary files /dev/null and b/public/icons/crypto/wbtc.png differ diff --git a/public/icons/crypto/wgr.png b/public/icons/crypto/wgr.png new file mode 100644 index 0000000..3e42128 Binary files /dev/null and b/public/icons/crypto/wgr.png differ diff --git a/public/icons/crypto/wicc.png b/public/icons/crypto/wicc.png new file mode 100644 index 0000000..698e43b Binary files /dev/null and b/public/icons/crypto/wicc.png differ diff --git a/public/icons/crypto/wings.png b/public/icons/crypto/wings.png new file mode 100644 index 0000000..724ab10 Binary files /dev/null and b/public/icons/crypto/wings.png differ diff --git a/public/icons/crypto/wpr.png b/public/icons/crypto/wpr.png new file mode 100644 index 0000000..97dc3d1 Binary files /dev/null and b/public/icons/crypto/wpr.png differ diff --git a/public/icons/crypto/wtc.png b/public/icons/crypto/wtc.png new file mode 100644 index 0000000..c74393a Binary files /dev/null and b/public/icons/crypto/wtc.png differ diff --git a/public/icons/crypto/x.png b/public/icons/crypto/x.png new file mode 100644 index 0000000..a54ca30 Binary files /dev/null and b/public/icons/crypto/x.png differ diff --git a/public/icons/crypto/xas.png b/public/icons/crypto/xas.png new file mode 100644 index 0000000..ea36559 Binary files /dev/null and b/public/icons/crypto/xas.png differ diff --git a/public/icons/crypto/xbc.png b/public/icons/crypto/xbc.png new file mode 100644 index 0000000..a519274 Binary files /dev/null and b/public/icons/crypto/xbc.png differ diff --git a/public/icons/crypto/xbp.png b/public/icons/crypto/xbp.png new file mode 100644 index 0000000..beeef27 Binary files /dev/null and b/public/icons/crypto/xbp.png differ diff --git a/public/icons/crypto/xby.png b/public/icons/crypto/xby.png new file mode 100644 index 0000000..cf5dfa3 Binary files /dev/null and b/public/icons/crypto/xby.png differ diff --git a/public/icons/crypto/xcp.png b/public/icons/crypto/xcp.png new file mode 100644 index 0000000..3253be9 Binary files /dev/null and b/public/icons/crypto/xcp.png differ diff --git a/public/icons/crypto/xdn.png b/public/icons/crypto/xdn.png new file mode 100644 index 0000000..989a262 Binary files /dev/null and b/public/icons/crypto/xdn.png differ diff --git a/public/icons/crypto/xem.png b/public/icons/crypto/xem.png new file mode 100644 index 0000000..637cd72 Binary files /dev/null and b/public/icons/crypto/xem.png differ diff --git a/public/icons/crypto/xin.png b/public/icons/crypto/xin.png new file mode 100644 index 0000000..9c587ac Binary files /dev/null and b/public/icons/crypto/xin.png differ diff --git a/public/icons/crypto/xlm.png b/public/icons/crypto/xlm.png new file mode 100644 index 0000000..924d503 Binary files /dev/null and b/public/icons/crypto/xlm.png differ diff --git a/public/icons/crypto/xmcc.png b/public/icons/crypto/xmcc.png new file mode 100644 index 0000000..691ac79 Binary files /dev/null and b/public/icons/crypto/xmcc.png differ diff --git a/public/icons/crypto/xmg.png b/public/icons/crypto/xmg.png new file mode 100644 index 0000000..424cc69 Binary files /dev/null and b/public/icons/crypto/xmg.png differ diff --git a/public/icons/crypto/xmo.png b/public/icons/crypto/xmo.png new file mode 100644 index 0000000..ff2d1a9 Binary files /dev/null and b/public/icons/crypto/xmo.png differ diff --git a/public/icons/crypto/xmr.png b/public/icons/crypto/xmr.png new file mode 100644 index 0000000..b4dd276 Binary files /dev/null and b/public/icons/crypto/xmr.png differ diff --git a/public/icons/crypto/xmy.png b/public/icons/crypto/xmy.png new file mode 100644 index 0000000..08351da Binary files /dev/null and b/public/icons/crypto/xmy.png differ diff --git a/public/icons/crypto/xp.png b/public/icons/crypto/xp.png new file mode 100644 index 0000000..03c644c Binary files /dev/null and b/public/icons/crypto/xp.png differ diff --git a/public/icons/crypto/xpa.png b/public/icons/crypto/xpa.png new file mode 100644 index 0000000..0d6c67d Binary files /dev/null and b/public/icons/crypto/xpa.png differ diff --git a/public/icons/crypto/xpm.png b/public/icons/crypto/xpm.png new file mode 100644 index 0000000..6d4932b Binary files /dev/null and b/public/icons/crypto/xpm.png differ diff --git a/public/icons/crypto/xpr.png b/public/icons/crypto/xpr.png new file mode 100644 index 0000000..a46afc0 Binary files /dev/null and b/public/icons/crypto/xpr.png differ diff --git a/public/icons/crypto/xrp.png b/public/icons/crypto/xrp.png new file mode 100644 index 0000000..7000c7f Binary files /dev/null and b/public/icons/crypto/xrp.png differ diff --git a/public/icons/crypto/xsg.png b/public/icons/crypto/xsg.png new file mode 100644 index 0000000..c06c5a1 Binary files /dev/null and b/public/icons/crypto/xsg.png differ diff --git a/public/icons/crypto/xtz.png b/public/icons/crypto/xtz.png new file mode 100644 index 0000000..32a5fda Binary files /dev/null and b/public/icons/crypto/xtz.png differ diff --git a/public/icons/crypto/xuc.png b/public/icons/crypto/xuc.png new file mode 100644 index 0000000..55e7420 Binary files /dev/null and b/public/icons/crypto/xuc.png differ diff --git a/public/icons/crypto/xvc.png b/public/icons/crypto/xvc.png new file mode 100644 index 0000000..b031fde Binary files /dev/null and b/public/icons/crypto/xvc.png differ diff --git a/public/icons/crypto/xvg.png b/public/icons/crypto/xvg.png new file mode 100644 index 0000000..c7d1faa Binary files /dev/null and b/public/icons/crypto/xvg.png differ diff --git a/public/icons/crypto/xzc.png b/public/icons/crypto/xzc.png new file mode 100644 index 0000000..8919f7d Binary files /dev/null and b/public/icons/crypto/xzc.png differ diff --git a/public/icons/crypto/yfi.png b/public/icons/crypto/yfi.png new file mode 100644 index 0000000..227eecd Binary files /dev/null and b/public/icons/crypto/yfi.png differ diff --git a/public/icons/crypto/yoyow.png b/public/icons/crypto/yoyow.png new file mode 100644 index 0000000..dc52a1f Binary files /dev/null and b/public/icons/crypto/yoyow.png differ diff --git a/public/icons/crypto/zcl.png b/public/icons/crypto/zcl.png new file mode 100644 index 0000000..bf2a5c1 Binary files /dev/null and b/public/icons/crypto/zcl.png differ diff --git a/public/icons/crypto/zec.png b/public/icons/crypto/zec.png new file mode 100644 index 0000000..c2ba69a Binary files /dev/null and b/public/icons/crypto/zec.png differ diff --git a/public/icons/crypto/zel.png b/public/icons/crypto/zel.png new file mode 100644 index 0000000..9eaffb8 Binary files /dev/null and b/public/icons/crypto/zel.png differ diff --git a/public/icons/crypto/zen.png b/public/icons/crypto/zen.png new file mode 100644 index 0000000..7defb7d Binary files /dev/null and b/public/icons/crypto/zen.png differ diff --git a/public/icons/crypto/zest.png b/public/icons/crypto/zest.png new file mode 100644 index 0000000..9953fa3 Binary files /dev/null and b/public/icons/crypto/zest.png differ diff --git a/public/icons/crypto/zil.png b/public/icons/crypto/zil.png new file mode 100644 index 0000000..9bad425 Binary files /dev/null and b/public/icons/crypto/zil.png differ diff --git a/public/icons/crypto/zilla.png b/public/icons/crypto/zilla.png new file mode 100644 index 0000000..ba88863 Binary files /dev/null and b/public/icons/crypto/zilla.png differ diff --git a/public/icons/crypto/zrx.png b/public/icons/crypto/zrx.png new file mode 100644 index 0000000..fb09369 Binary files /dev/null and b/public/icons/crypto/zrx.png differ diff --git a/tailwind.config.ts b/tailwind.config.ts new file mode 100644 index 0000000..af01385 --- /dev/null +++ b/tailwind.config.ts @@ -0,0 +1,91 @@ +import type { Config } from "tailwindcss"; +import tailwindcssAnimate from "tailwindcss-animate"; + +const config: Config = { + darkMode: ["class"], + content: [ + "./pages/**/*.{ts,tsx}", + "./components/**/*.{ts,tsx}", + "./app/**/*.{ts,tsx}", + "./src/**/*.{ts,tsx}" + ], + theme: { + container: { + center: true, + padding: "1.25rem", + screens: { + "2xl": "1300px" + } + }, + extend: { + colors: { + border: "hsl(var(--border))", + input: "hsl(var(--input))", + ring: "hsl(var(--ring))", + background: "hsl(var(--background))", + foreground: "hsl(var(--foreground))", + primary: { + DEFAULT: "hsl(var(--primary))", + foreground: "hsl(var(--primary-foreground))" + }, + secondary: { + DEFAULT: "hsl(var(--secondary))", + foreground: "hsl(var(--secondary-foreground))" + }, + muted: { + DEFAULT: "hsl(var(--muted))", + foreground: "hsl(var(--muted-foreground))" + }, + accent: { + DEFAULT: "hsl(var(--accent))", + foreground: "hsl(var(--accent-foreground))" + }, + popover: { + DEFAULT: "hsl(var(--popover))", + foreground: "hsl(var(--popover-foreground))" + }, + card: { + DEFAULT: "hsl(var(--card))", + foreground: "hsl(var(--card-foreground))" + } + }, + borderRadius: { + xl: "calc(var(--radius) + 4px)", + lg: "var(--radius)", + md: "calc(var(--radius) - 2px)", + sm: "calc(var(--radius) - 4px)" + }, + boxShadow: { + glow: "0 0 0 1px hsl(var(--border)), 0 15px 40px hsl(221 80% 8% / 0.6)", + card: "0 12px 40px hsl(221 65% 6% / 0.5)" + }, + keyframes: { + "accordion-down": { + from: { height: "0" }, + to: { height: "var(--radix-accordion-content-height)" } + }, + "accordion-up": { + from: { height: "var(--radix-accordion-content-height)" }, + to: { height: "0" } + }, + float: { + "0%, 100%": { transform: "translateY(0px)" }, + "50%": { transform: "translateY(-6px)" } + }, + shimmer: { + "0%": { backgroundPosition: "-200% 0" }, + "100%": { backgroundPosition: "200% 0" } + } + }, + animation: { + "accordion-down": "accordion-down 0.2s ease-out", + "accordion-up": "accordion-up 0.2s ease-out", + float: "float 5s ease-in-out infinite", + shimmer: "shimmer 2.2s linear infinite" + } + } + }, + plugins: [tailwindcssAnimate] +}; + +export default config; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..6b9a958 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "target": "ES2017", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": false, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./*"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] +}