diff --git a/libs/burn-waitlist/src/lib/components/index.ts b/libs/burn-waitlist/src/lib/components/index.ts index d183f1c17..3ec9c441d 100644 --- a/libs/burn-waitlist/src/lib/components/index.ts +++ b/libs/burn-waitlist/src/lib/components/index.ts @@ -7,3 +7,4 @@ export * from './status-messages'; export * from './wallet-connection-warning'; export * from './network-warning'; export * from './waitlist-balances'; +export * from './price-chart'; diff --git a/libs/burn-waitlist/src/lib/components/participation-form.tsx b/libs/burn-waitlist/src/lib/components/participation-form.tsx index efee392de..438d74048 100644 --- a/libs/burn-waitlist/src/lib/components/participation-form.tsx +++ b/libs/burn-waitlist/src/lib/components/participation-form.tsx @@ -3,16 +3,21 @@ import { useMemo } from 'react'; import { Button } from '@haqq/shell-ui-kit'; import { ModalInput } from '@haqq/shell-ui-kit'; +import { formatUnits } from 'viem'; import { FundsSource } from '../constants/waitlist-config'; import { WaitlistBalances } from './waitlist-balances'; import type { WaitlistBalancesResponse } from '../hooks/use-waitlist-balances'; -import { formatEthDecimal } from '@haqq/shell-shared'; +import { formatEthDecimal, formatNumberWithSuffix } from '@haqq/shell-shared'; export interface ParticipationFormProps { amount: string; source: FundsSource; availableBalance?: bigint; balances?: WaitlistBalancesResponse; + /** Current price per token (atto) from API - used to show price at submission and estimated receive */ + currentPriceAtto?: string; + /** User amount in wei - used with currentPriceAtto to compute estimated receive */ + formattedAmount?: bigint; onAmountChange: (amount: string) => void; onSourceChange: (source: FundsSource) => void; onMaxClick: () => void; @@ -29,6 +34,8 @@ export function ParticipationForm({ source, availableBalance, balances, + currentPriceAtto, + formattedAmount, onAmountChange, onSourceChange, onMaxClick, @@ -50,9 +57,42 @@ export function ParticipationForm({ return formatEthDecimal(availableBalance, 4); }, [availableBalance]); + const priceDisplay = useMemo(() => { + if (!currentPriceAtto) return null; + try { + const priceWei = BigInt(currentPriceAtto); + if (priceWei === 0n) return null; + return formatEthDecimal(priceWei, 4, 0); + } catch { + return null; + } + }, [currentPriceAtto]); + + const estimatedReceiveDisplay = useMemo(() => { + if (!formattedAmount || !currentPriceAtto) return null; + try { + const priceWei = BigInt(currentPriceAtto); + if (priceWei === 0n) return null; + // Use BigInt division to avoid Number precision loss for large values + const tokensWei = formattedAmount / priceWei; + + return formatEthDecimal(tokensWei, 4, 18); + } catch { + return null; + } + }, [formattedAmount, currentPriceAtto]); + return (
+ {priceDisplay !== null && ( +
+
Price at submission
+
+ {priceDisplay} ISLM per token +
+
+ )}
{/* Only show Funds Source selection if ucDAO balance is greater than 0 */} diff --git a/libs/burn-waitlist/src/lib/components/price-chart.tsx b/libs/burn-waitlist/src/lib/components/price-chart.tsx new file mode 100644 index 000000000..ea292b425 --- /dev/null +++ b/libs/burn-waitlist/src/lib/components/price-chart.tsx @@ -0,0 +1,251 @@ +'use client'; + +import { useId, useMemo } from 'react'; +import { + Area, + AreaChart, + CartesianGrid, + ResponsiveContainer, + Tooltip, + XAxis, + YAxis, +} from 'recharts'; +import type { PriceChartPoint } from '../hooks/use-waitlist-price-chart'; +import { formatEthDecimal } from '@haqq/shell-shared'; + +export interface PriceChartProps { + data: PriceChartPoint[]; + /** Chart height in pixels */ + height?: number; + /** Whether price values are in atto (wei) - will format for display */ + priceInAtto?: boolean; + isLoading?: boolean; + error?: Error | null; +} + +const DEFAULT_HEIGHT = 240; +const ONE_HOUR = 3600; + +/** + * Expands chart data by adding a point every hour from the last point up to now. + * So a single API point becomes a line from that time to current time (same price). + */ +function expandDataWithHourlyPoints( + data: Array<{ timestamp: number; price: number }>, +): Array<{ timestamp: number; price: number }> { + if (!data.length) return []; + const now = Math.floor(Date.now() / 1000); + const last = data[data.length - 1]!; + if (last.timestamp >= now) return data; + const result: PriceChartPoint[] = [...data]; + for (let t = last.timestamp + ONE_HOUR; t <= now; t += ONE_HOUR) { + result.push({ timestamp: t, price: last.price }); + } + if (result[result.length - 1]!.timestamp < now) { + result.push({ timestamp: now, price: last.price }); + } + return result; +} + +function formatChartTime(ts: number): string { + const d = new Date(ts * 1000); + const now = new Date(); + const isToday = + d.getDate() === now.getDate() && + d.getMonth() === now.getMonth() && + d.getFullYear() === now.getFullYear(); + if (isToday) { + return d.toLocaleTimeString(undefined, { + hour: '2-digit', + minute: '2-digit', + }); + } + return d.toLocaleDateString(undefined, { + month: 'short', + day: 'numeric', + hour: '2-digit', + minute: '2-digit', + }); +} + +/** + * Price chart built with Recharts (SVG-based). Web3-style dark card. + * @see https://recharts.org/ + */ +export function PriceChart({ + data, + height = DEFAULT_HEIGHT, + priceInAtto = true, + isLoading = false, + error = null, +}: PriceChartProps) { + const uid = useId(); + const expandedData = useMemo(() => expandDataWithHourlyPoints(data), [data]); + + const chartData = useMemo( + () => + expandedData.map((d) => ({ + ...d, + timeLabel: formatChartTime(d.timestamp), + })), + [expandedData], + ); + + const formatPrice = useMemo( + () => (p: number) => + priceInAtto && p > 0 ? formatEthDecimal(BigInt(p), 2, 0) : p.toFixed(2), + [priceInAtto], + ); + + const currentPriceFormatted = useMemo(() => { + if (!chartData.length) return '0'; + return formatPrice(chartData[chartData.length - 1]!.price); + }, [chartData, formatPrice]); + + const isSinglePoint = chartData.length === 1; + + const gradientId = `price-chart-gradient-${uid.replace(/:/g, '')}`; + + if (error) { + return ( +
+
+ Failed to load price chart +
+
+ ); + } + + if (isLoading) { + return ( +
+ ); + } + + if (!data.length) { + return ( +
+
No chart data yet
+
+ ); + } + + return ( +
+
+ + Price history + +
+ {isSinglePoint && ( + + Holding + + )} + + {currentPriceFormatted} + + ISLM/HAQQ +
+
+ +
+ + + + + + + + + + + formatChartTime(ts)} + stroke="#C5C5C5" + tick={{ fill: '#C5C5C5', fontSize: 9 }} + axisLine={false} + tickLine={false} + /> + formatPrice(p)} + stroke="#C5C5C5" + tick={{ fill: '#C5C5C5', fontSize: 10 }} + axisLine={false} + tickLine={false} + width={56} + tickMargin={12} + /> + ; + }) => { + if (!active || !payload?.length) return null; + const point = payload[0]?.payload as { + timestamp: number; + price: number; + timeLabel: string; + }; + if (!point) return null; + return ( +
+
+ {point.timeLabel} +
+
+ {formatPrice(point.price)} ISLM +
+
+ ); + }} + cursor={{ stroke: '#C5C5C5', strokeWidth: 1 }} + /> + +
+
+
+
+ ); +} diff --git a/libs/burn-waitlist/src/lib/components/requests-list.tsx b/libs/burn-waitlist/src/lib/components/requests-list.tsx index f49e4c830..bf38257f1 100644 --- a/libs/burn-waitlist/src/lib/components/requests-list.tsx +++ b/libs/burn-waitlist/src/lib/components/requests-list.tsx @@ -6,6 +6,7 @@ import { Button } from '@haqq/shell-ui-kit'; import { FundsSource } from '../constants/waitlist-config'; import type { Application } from '../hooks/use-waitlist-applications'; import type { WaitlistBalancesResponse } from '../hooks/use-waitlist-balances'; +import { formatEthDecimal } from '@haqq/shell-shared'; export interface RequestsListProps { applications: Array< @@ -100,6 +101,24 @@ export function RequestsList({ {amount} ISLM
+ {app.price !== undefined && app.price !== '' && ( +
+ Minting price:{' '} + + {formatEthDecimal(BigInt(app.price), 0, 0)} ISLM/HAQQ + +
+ )} + {app.receiveAmount !== undefined && + app.receiveAmount !== '' && ( +
+ Expected receive:{' '} + + {formatEthDecimal(BigInt(app.receiveAmount), 4, 18)}{' '} + HAQQ + +
+ )}
Source:{' '} diff --git a/libs/burn-waitlist/src/lib/constants/waitlist-config.ts b/libs/burn-waitlist/src/lib/constants/waitlist-config.ts index 8c051ae53..eed8f7c57 100644 --- a/libs/burn-waitlist/src/lib/constants/waitlist-config.ts +++ b/libs/burn-waitlist/src/lib/constants/waitlist-config.ts @@ -8,7 +8,7 @@ export const WAITLIST_CONTRACT_ADDRESSES: Record = { [haqqMainnet.id]: '0xe974fc272bA869E638f402e2818161EB88b2A392' as `0x${string}`, [haqqTestedge2.id]: - '0xCAFec7F6C482507fB5E6B5ed02250487Fd883C9f' as `0x${string}`, + '0xeCad76E45BcD709B6c1662397FBbb890C684a9aB' as `0x${string}`, // Add more chain deployments here as they become available }; @@ -48,8 +48,9 @@ export function isWaitlistChainSupported(chainId?: number): boolean { /** * Default chain ID for waitlist (first supported chain) */ -export const WAITLIST_DEFAULT_CHAIN_ID = - WAITLIST_SUPPORTED_CHAIN_IDS[0] || haqqMainnet.id; + +// TODO: Change to mainnet when ready +export const WAITLIST_DEFAULT_CHAIN_ID = haqqTestedge2.id; /** * Backend API base URL @@ -58,12 +59,12 @@ export const WAITLIST_DEFAULT_CHAIN_ID = */ export const getBackendApiUrl = (chainId?: number): string => { // Return chain-specific URL based on chain ID - if (chainId === haqqTestedge2.id) { - return 'https://waitlist.vorobevsa.com'; + if (chainId === haqqMainnet.id) { + return 'https://waitlist.haqq.network'; } - // Default to production URL for mainnet or unknown chains - return 'https://waitlist.haqq.network'; + // Default to production URL for testnet or unknown chains + return 'https://waitlist.vorobevsa.com'; }; /** diff --git a/libs/burn-waitlist/src/lib/hooks/index.ts b/libs/burn-waitlist/src/lib/hooks/index.ts index 374434625..45c48fada 100644 --- a/libs/burn-waitlist/src/lib/hooks/index.ts +++ b/libs/burn-waitlist/src/lib/hooks/index.ts @@ -4,3 +4,6 @@ export * from './use-waitlist-requests'; export * from './use-waitlist-form'; export * from './use-waitlist-balances'; export * from './use-waitlist-applications'; +export * from './use-waitlist-price'; +export * from './use-waitlist-price-chart'; +export * from './use-waitlist-global-stats'; diff --git a/libs/burn-waitlist/src/lib/hooks/use-waitlist-applications.ts b/libs/burn-waitlist/src/lib/hooks/use-waitlist-applications.ts index 4447b4e32..5592c4c48 100644 --- a/libs/burn-waitlist/src/lib/hooks/use-waitlist-applications.ts +++ b/libs/burn-waitlist/src/lib/hooks/use-waitlist-applications.ts @@ -9,8 +9,14 @@ export interface Application { author: string; source: number; // 0 for OwnBalance, 1 for ucDAO cancelled: boolean; + cancelledAt?: string; + createdAt?: string; valid: boolean; ready: boolean; + /** Minting price (cost, in atto) */ + price?: string; + /** Expected tokens to receive (in atto) */ + receiveAmount?: string; } export interface ApplicationsListResponse { @@ -61,6 +67,7 @@ export function useWaitlistApplications({ params.append('pageSize', pageSize.toString()); const queryString = params.toString(); + console.log('chainId', chainId); const apiUrl = getBackendApiUrl(chainId); const url = queryString ? `${apiUrl}/api/v1/applications?${queryString}` @@ -82,7 +89,6 @@ export function useWaitlistApplications({ return response.json(); }, - enabled: !!address, // Only fetch if address is provided staleTime: 0, // Always refetch to get latest data }); } diff --git a/libs/burn-waitlist/src/lib/hooks/use-waitlist-global-stats.ts b/libs/burn-waitlist/src/lib/hooks/use-waitlist-global-stats.ts new file mode 100644 index 000000000..9a69125bf --- /dev/null +++ b/libs/burn-waitlist/src/lib/hooks/use-waitlist-global-stats.ts @@ -0,0 +1,58 @@ +'use client'; + +import { useQuery } from '@tanstack/react-query'; +import { getBackendApiUrl } from '../constants/waitlist-config'; + +export interface WaitlistGlobalStats { + totalCount: number; + totalAmount: string; +} + +interface UseWaitlistGlobalStatsParams { + chainId?: number; + /** When false, the query does not run (e.g. when user is connected and contract state is used) */ + enabled?: boolean; +} + +/** + * Fetches global waitlist stats (total applications count and total amount) from backend API. + * Used for anonymous users who don't have a connected wallet (no RPC/contract read). + */ +export function useWaitlistGlobalStats({ + chainId, + enabled = true, +}: UseWaitlistGlobalStatsParams = {}) { + return useQuery({ + queryKey: ['waitlist-global-stats', chainId], + queryFn: async () => { + const apiUrl = getBackendApiUrl(chainId); + + const [applicationsRes, priceRes] = await Promise.all([ + fetch(`${apiUrl}/api/v1/applications?page=1&pageSize=1`, { + method: 'GET', + headers: { Accept: 'application/json' }, + }), + fetch(`${apiUrl}/api/v1/price/current`, { + method: 'GET', + headers: { Accept: 'application/json' }, + }), + ]); + + let totalCount = 0; + if (applicationsRes.ok) { + const applicationsData = await applicationsRes.json(); + totalCount = applicationsData.total ?? 0; + } + + let totalAmount = '0'; + if (priceRes.ok && priceRes.status !== 503) { + const priceData = await priceRes.json(); + totalAmount = priceData.totalActiveAmount ?? '0'; + } + + return { totalCount, totalAmount }; + }, + enabled: enabled, + staleTime: 30_000, + }); +} diff --git a/libs/burn-waitlist/src/lib/hooks/use-waitlist-price-chart.ts b/libs/burn-waitlist/src/lib/hooks/use-waitlist-price-chart.ts new file mode 100644 index 000000000..a001286c8 --- /dev/null +++ b/libs/burn-waitlist/src/lib/hooks/use-waitlist-price-chart.ts @@ -0,0 +1,73 @@ +'use client'; + +import { useQuery } from '@tanstack/react-query'; +import { getBackendApiUrl } from '../constants/waitlist-config'; + +export interface PriceChartPoint { + timestamp: number; + price: number; +} + +export interface PriceChartMeta { + from: number; + to: number; + dataPoints: number; + chartStart: number; + chartEnd: number; + granularity: string; +} + +export interface PriceChartResponse { + data: PriceChartPoint[]; + meta: PriceChartMeta; +} + +export type PriceChartGranularity = 'event' | 'hour' | 'day'; + +interface UseWaitlistPriceChartParams { + chainId?: number; + from?: number; + to?: number; + limit?: number; + granularity?: PriceChartGranularity; +} + +/** + * Hook to fetch price chart from backend API (GET /api/v1/price/chart). + */ +export function useWaitlistPriceChart({ + chainId, + from, + to, + limit = 2000, + granularity = 'event', +}: UseWaitlistPriceChartParams = {}) { + return useQuery({ + queryKey: ['waitlist-price-chart', chainId, from, to, limit, granularity], + queryFn: async () => { + const apiUrl = getBackendApiUrl(chainId); + const params = new URLSearchParams(); + if (from !== undefined) params.append('from', String(from)); + if (to !== undefined) params.append('to', String(to)); + params.append('limit', String(limit)); + params.append('granularity', granularity); + const url = `${apiUrl}/api/v1/price/chart?${params.toString()}`; + + const response = await fetch(url, { + method: 'GET', + headers: { Accept: 'application/json' }, + }); + + if (!response.ok) { + const text = await response.text(); + throw new Error( + `Failed to fetch price chart: ${response.status} ${text}`, + ); + } + + return response.json(); + }, + enabled: chainId !== undefined, + staleTime: 60_000, // 1 minute + }); +} diff --git a/libs/burn-waitlist/src/lib/hooks/use-waitlist-price.ts b/libs/burn-waitlist/src/lib/hooks/use-waitlist-price.ts new file mode 100644 index 000000000..5fce1d0a8 --- /dev/null +++ b/libs/burn-waitlist/src/lib/hooks/use-waitlist-price.ts @@ -0,0 +1,44 @@ +'use client'; + +import { useQuery } from '@tanstack/react-query'; +import { getBackendApiUrl } from '../constants/waitlist-config'; + +export interface PriceCurrentResponse { + /** Price tier value (cost per token) - may be number or string for large atto values */ + currentPrice: number | string; + totalActiveAmount: string; +} + +interface UseWaitlistPriceParams { + chainId?: number; +} + +/** + * Hook to fetch current price from backend API (GET /api/v1/price/current). + * Price is the cost per token for the next application (price tier value). + * totalActiveAmount is sum of all active applications in atto. + */ +export function useWaitlistPrice({ chainId }: UseWaitlistPriceParams = {}) { + return useQuery({ + queryKey: ['waitlist-price', chainId], + queryFn: async () => { + const apiUrl = getBackendApiUrl(chainId); + const response = await fetch(`${apiUrl}/api/v1/price/current`, { + method: 'GET', + headers: { Accept: 'application/json' }, + }); + + if (response.status === 503) { + throw new Error('Price cache not available'); + } + if (!response.ok) { + const text = await response.text(); + throw new Error(`Failed to fetch price: ${response.status} ${text}`); + } + + return response.json(); + }, + enabled: chainId !== undefined, + staleTime: 30_000, // 30 seconds + }); +} diff --git a/libs/burn-waitlist/src/lib/waitlist-page.tsx b/libs/burn-waitlist/src/lib/waitlist-page.tsx index 578763c70..5cb072a95 100644 --- a/libs/burn-waitlist/src/lib/waitlist-page.tsx +++ b/libs/burn-waitlist/src/lib/waitlist-page.tsx @@ -10,6 +10,9 @@ import { useCancelWaitlistRequest, useWaitlistBalances, useWaitlistApplications, + useWaitlistPrice, + useWaitlistPriceChart, + useWaitlistGlobalStats, } from './hooks'; import type { Application } from './hooks/use-waitlist-applications'; import { useBackendSignature } from './hooks/use-backend-signature'; @@ -17,6 +20,7 @@ import { useWaitlistForm } from './hooks/use-waitlist-form'; import { ParticipationForm, ParticipationFormSkeleton, + PriceChart, RequestsList, RequestsListSkeleton, StatusMessages, @@ -115,6 +119,8 @@ export function WaitlistPage({ locale = 'en' }: WaitlistPageProps = {}) { refetchAll: refetchContractState, } = useWaitlistContractState(); + console.log('chain', chain); + // Get balances from backend API const { data: waitlistBalances, @@ -133,6 +139,27 @@ export function WaitlistPage({ locale = 'en' }: WaitlistPageProps = {}) { chainId: chain?.id, }); + // Current price (cost per token at submission) + const { data: priceData } = useWaitlistPrice({ chainId: chain?.id }); + + // Price chart data (use default chain when not connected so guests see chart) + const { + data: chartData, + isLoading: isLoadingChart, + error: chartError, + } = useWaitlistPriceChart({ + chainId: chain?.id ?? WAITLIST_DEFAULT_CHAIN_ID, + granularity: 'hour', + limit: 500, + }); + + // Global stats from backend for anonymous users (contract read may not run without wallet) + const { data: globalStats, isLoading: isLoadingGlobalStats } = + useWaitlistGlobalStats({ + chainId: WAITLIST_DEFAULT_CHAIN_ID, + enabled: !isConnected, + }); + // User wallet balance (EVM) - for display purposes const { data: walletBalance, refetch: refetchBalance } = useBalance({ address: address as `0x${string}` | undefined, @@ -657,7 +684,7 @@ export function WaitlistPage({ locale = 'en' }: WaitlistPageProps = {}) { Burn Waitlist - {/* Display total stats before wallet connection */} + {/* Display total stats before wallet connection (from backend API) */} {!isConnected && (
@@ -665,16 +692,22 @@ export function WaitlistPage({ locale = 'en' }: WaitlistPageProps = {}) {
Total Applications
-
- {totalCount !== undefined ? totalCount.toString() : '—'} +
+ {isLoadingGlobalStats + ? '—' + : globalStats?.totalCount !== undefined + ? globalStats.totalCount.toString() + : '—'}
Total Amount
-
- {totalAmount !== undefined - ? `${formatEthDecimal(totalAmount, 4)} ISLM` - : '—'} +
+ {isLoadingGlobalStats + ? '—' + : globalStats?.totalAmount !== undefined + ? `${formatEthDecimal(BigInt(globalStats.totalAmount), 4)} ISLM` + : '—'}
@@ -683,6 +716,16 @@ export function WaitlistPage({ locale = 'en' }: WaitlistPageProps = {}) { {!isConnected && } + {/* Price chart - visible to all (uses default chain when not connected) */} +
+ +
+ {isConnected ? ( <> { setAmount(amount); }} diff --git a/package.json b/package.json index b82ab9305..abcab377a 100644 --- a/package.json +++ b/package.json @@ -81,6 +81,7 @@ "react-success-indicator": "1.1.0", "react-text-mask": "5.5.0", "reaptcha": "1.12.1", + "recharts": "3.7.0", "seedrandom": "3.0.5", "sharp": "0.33.5", "store2": "2.14.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c18cc2233..8120c8031 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -100,7 +100,7 @@ importers: version: 1.3.1(next@16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.97.3))(react@18.3.1) '@wagmi/core': specifier: 2.21.2 - version: 2.21.2(@tanstack/query-core@5.67.1)(@types/react@18.3.12)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)) + version: 2.21.2(@tanstack/query-core@5.67.1)(@types/react@18.3.12)(immer@11.1.4)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)) bech32: specifier: 2.0.0 version: 2.0.0 @@ -182,6 +182,9 @@ importers: reaptcha: specifier: 1.12.1 version: 1.12.1(react@18.3.1) + recharts: + specifier: 3.7.0 + version: 3.7.0(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(redux@5.0.1) seedrandom: specifier: 3.0.5 version: 3.0.5 @@ -214,7 +217,7 @@ importers: version: 2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) wagmi: specifier: 2.17.5 - version: 2.17.5(@tanstack/query-core@5.67.1)(@tanstack/react-query@5.67.1(react@18.3.1))(@types/react@18.3.12)(@vercel/blob@1.0.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2) + version: 2.17.5(@tanstack/query-core@5.67.1)(@tanstack/react-query@5.67.1(react@18.3.1))(@types/react@18.3.12)(@vercel/blob@1.0.2)(bufferutil@4.1.0)(encoding@0.1.13)(immer@11.1.4)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2) zod: specifier: 3.24.2 version: 3.24.2 @@ -3899,6 +3902,17 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + '@reduxjs/toolkit@2.11.2': + resolution: {integrity: sha512-Kd6kAHTA6/nUpp8mySPqj3en3dm0tdMIgbttnQ1xFMVpufoj+ADi8pXLBsd4xzTRHQa7t/Jv8W5UnCuW4kuWMQ==} + peerDependencies: + react: ^16.9.0 || ^17.0.0 || ^18 || ^19 + react-redux: ^7.2.1 || ^8.1.3 || ^9.0.0 + peerDependenciesMeta: + react: + optional: true + react-redux: + optional: true + '@remix-run/router@1.23.2': resolution: {integrity: sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w==} engines: {node: '>=14.0.0'} @@ -4513,6 +4527,12 @@ packages: '@solidity-parser/parser@0.20.2': resolution: {integrity: sha512-rbu0bzwNvMcwAjH86hiEAcOeRI2EeK8zCkHDrFykh/Al8mvJeFmjy3UrE7GYQjNwOgbGUUtCn5/k8CB8zIu7QA==} + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + + '@standard-schema/utils@0.3.0': + resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==} + '@starknet-io/types-js@0.7.10': resolution: {integrity: sha512-1VtCqX4AHWJlRRSYGSn+4X1mqolI1Tdq62IwzoU2vUuEE72S1OlEeGhpvd6XsdqXcfHmVzYfj8k1XtKBQqwo9w==} @@ -5082,6 +5102,33 @@ packages: '@types/conventional-commits-parser@5.0.2': resolution: {integrity: sha512-BgT2szDXnVypgpNxOK8aL5SGjUdaQbC++WZNjF1Qge3Og2+zhHj+RWhmehLhYyvQwqAmvezruVfOf8+3m74W+g==} + '@types/d3-array@3.2.2': + resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==} + + '@types/d3-color@3.1.3': + resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==} + + '@types/d3-ease@3.0.2': + resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==} + + '@types/d3-interpolate@3.0.4': + resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==} + + '@types/d3-path@3.1.1': + resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==} + + '@types/d3-scale@4.0.9': + resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==} + + '@types/d3-shape@3.1.8': + resolution: {integrity: sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==} + + '@types/d3-time@3.0.4': + resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==} + + '@types/d3-timer@3.0.2': + resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} + '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} @@ -5270,6 +5317,9 @@ packages: '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + '@types/use-sync-external-store@0.0.6': + resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} + '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} @@ -7228,6 +7278,50 @@ packages: engines: {node: ^20.1.0 || ^22.0.0 || >=24.0.0} hasBin: true + d3-array@3.2.4: + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} + engines: {node: '>=12'} + + d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + + d3-ease@3.0.1: + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} + + d3-format@3.1.2: + resolution: {integrity: sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==} + engines: {node: '>=12'} + + d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + + d3-path@3.1.0: + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} + engines: {node: '>=12'} + + d3-scale@4.0.2: + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} + engines: {node: '>=12'} + + d3-shape@3.2.0: + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} + engines: {node: '>=12'} + + d3-time-format@4.1.0: + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} + engines: {node: '>=12'} + + d3-time@3.1.0: + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} + engines: {node: '>=12'} + + d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} @@ -7314,6 +7408,9 @@ packages: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} + decimal.js-light@2.5.1: + resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==} + decimal.js@10.6.0: resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} @@ -7721,6 +7818,9 @@ packages: es-toolkit@1.33.0: resolution: {integrity: sha512-X13Q/ZSc+vsO1q600bvNK4bxgXMkHcf//RxCmYDaRY5DAcT+eoXjY5hoAPGMdRnWQjvyLEcyauG3b6hz76LNqg==} + es-toolkit@1.44.0: + resolution: {integrity: sha512-6penXeZalaV88MM3cGkFZZfOoLGWshWWfdy0tWw/RlVVyhvMaWSBTOvXNeiW3e5FwdS5ePW0LGEu17zT139ktg==} + esbuild-register@3.6.0: resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} peerDependencies: @@ -8778,6 +8878,12 @@ packages: engines: {node: '>=16.x'} hasBin: true + immer@10.2.0: + resolution: {integrity: sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==} + + immer@11.1.4: + resolution: {integrity: sha512-XREFCPo6ksxVzP4E0ekD5aMdf8WMwmdNaz6vuvxgI40UaEiu6q3p8X52aU6GdyvLY3XXX/8R7JOTXStz/nBbRw==} + immutable@5.1.4: resolution: {integrity: sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==} @@ -8832,6 +8938,10 @@ packages: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} + internmap@2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} + interpret@1.4.0: resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} engines: {node: '>= 0.10'} @@ -11517,6 +11627,18 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + react-redux@9.2.0: + resolution: {integrity: sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==} + peerDependencies: + '@types/react': ^18.2.25 || ^19 + react: ^18.0 || ^19 + redux: ^5.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + redux: + optional: true + react-refresh@0.14.2: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} @@ -11609,6 +11731,14 @@ packages: resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} engines: {node: '>= 4'} + recharts@3.7.0: + resolution: {integrity: sha512-l2VCsy3XXeraxIID9fx23eCb6iCBsxUQDnE8tWm6DFdszVAO7WVY/ChAD9wVit01y6B2PMupYiMmQwhgPHc9Ew==} + engines: {node: '>=18'} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-is: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + rechoir@0.6.2: resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} engines: {node: '>= 0.10'} @@ -11620,6 +11750,14 @@ packages: redeyed@2.1.1: resolution: {integrity: sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==} + redux-thunk@3.1.0: + resolution: {integrity: sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==} + peerDependencies: + redux: ^5.0.0 + + redux@5.0.1: + resolution: {integrity: sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==} + reflect-metadata@0.2.2: resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} @@ -11687,6 +11825,9 @@ packages: requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + reselect@5.1.1: + resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==} + resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} @@ -13269,6 +13410,9 @@ packages: resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} engines: {'0': node >=0.6.0} + victory-vendor@37.3.6: + resolution: {integrity: sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==} + viem@2.23.2: resolution: {integrity: sha512-NVmW/E0c5crMOtbEAqMF0e3NmvQykFXhLOc/CkLIXOlzHSA6KXVz3CYVmaKqBF8/xtjsjHAGjdJN3Ru1kFJLaA==} peerDependencies: @@ -14669,7 +14813,7 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 - '@base-org/account@1.1.1(@types/react@18.3.12)(bufferutil@4.1.0)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(zod@3.24.2)': + '@base-org/account@1.1.1(@types/react@18.3.12)(bufferutil@4.1.0)(immer@11.1.4)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(zod@3.24.2)': dependencies: '@noble/hashes': 1.4.0 clsx: 1.2.1 @@ -14678,7 +14822,7 @@ snapshots: ox: 0.6.9(typescript@5.8.2)(zod@3.24.2) preact: 10.24.2 viem: 2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) - zustand: 5.0.3(@types/react@18.3.12)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) + zustand: 5.0.3(@types/react@18.3.12)(immer@11.1.4)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) transitivePeerDependencies: - '@types/react' - bufferutil @@ -14713,7 +14857,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@coinbase/wallet-sdk@4.3.6(@types/react@18.3.12)(bufferutil@4.1.0)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(zod@3.24.2)': + '@coinbase/wallet-sdk@4.3.6(@types/react@18.3.12)(bufferutil@4.1.0)(immer@11.1.4)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(zod@3.24.2)': dependencies: '@noble/hashes': 1.4.0 clsx: 1.2.1 @@ -14722,7 +14866,7 @@ snapshots: ox: 0.6.9(typescript@5.8.2)(zod@3.24.2) preact: 10.24.2 viem: 2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) - zustand: 5.0.3(@types/react@18.3.12)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) + zustand: 5.0.3(@types/react@18.3.12)(immer@11.1.4)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) transitivePeerDependencies: - '@types/react' - bufferutil @@ -18185,6 +18329,18 @@ snapshots: dependencies: react: 18.3.1 + '@reduxjs/toolkit@2.11.2(react-redux@9.2.0(@types/react@18.3.12)(react@18.3.1)(redux@5.0.1))(react@18.3.1)': + dependencies: + '@standard-schema/spec': 1.1.0 + '@standard-schema/utils': 0.3.0 + immer: 11.1.4 + redux: 5.0.1 + redux-thunk: 3.1.0(redux@5.0.1) + reselect: 5.1.1 + optionalDependencies: + react: 18.3.1 + react-redux: 9.2.0(@types/react@18.3.12)(react@18.3.1)(redux@5.0.1) + '@remix-run/router@1.23.2': {} '@reown/appkit-common@1.7.8(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.22.4)': @@ -19014,6 +19170,10 @@ snapshots: '@solidity-parser/parser@0.20.2': {} + '@standard-schema/spec@1.1.0': {} + + '@standard-schema/utils@0.3.0': {} + '@starknet-io/types-js@0.7.10': {} '@storybook/builder-vite@10.2.8(esbuild@0.27.2)(rollup@3.29.5)(storybook@10.2.8(@testing-library/dom@10.4.0)(bufferutil@4.1.0)(prettier@3.5.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(utf-8-validate@5.0.10))(vite@5.4.21(@types/node@22.13.9)(less@4.5.1)(lightningcss@1.30.2)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0))(webpack@5.105.1(@swc/core@1.15.8(@swc/helpers@0.5.18))(esbuild@0.27.2))': @@ -19627,6 +19787,30 @@ snapshots: dependencies: '@types/node': 22.13.9 + '@types/d3-array@3.2.2': {} + + '@types/d3-color@3.1.3': {} + + '@types/d3-ease@3.0.2': {} + + '@types/d3-interpolate@3.0.4': + dependencies: + '@types/d3-color': 3.1.3 + + '@types/d3-path@3.1.1': {} + + '@types/d3-scale@4.0.9': + dependencies: + '@types/d3-time': 3.0.4 + + '@types/d3-shape@3.1.8': + dependencies: + '@types/d3-path': 3.1.1 + + '@types/d3-time@3.0.4': {} + + '@types/d3-timer@3.0.2': {} + '@types/debug@4.1.12': dependencies: '@types/ms': 2.1.0 @@ -19834,6 +20018,8 @@ snapshots: '@types/trusted-types@2.0.7': {} + '@types/use-sync-external-store@0.0.6': {} + '@types/ws@8.18.1': dependencies: '@types/node': 22.13.9 @@ -20487,18 +20673,18 @@ snapshots: loupe: 3.2.1 tinyrainbow: 2.0.0 - '@wagmi/connectors@5.11.2(@tanstack/react-query@5.67.1(react@18.3.1))(@types/react@18.3.12)(@vercel/blob@1.0.2)(@wagmi/core@2.21.2(@tanstack/query-core@5.67.1)(@types/react@18.3.12)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)))(bufferutil@4.1.0)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(wagmi@2.17.5(@tanstack/query-core@5.67.1)(@tanstack/react-query@5.67.1(react@18.3.1))(@types/react@18.3.12)(@vercel/blob@1.0.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2))(zod@3.24.2)': + '@wagmi/connectors@5.11.2(@tanstack/react-query@5.67.1(react@18.3.1))(@types/react@18.3.12)(@vercel/blob@1.0.2)(@wagmi/core@2.21.2(@tanstack/query-core@5.67.1)(@types/react@18.3.12)(immer@11.1.4)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)))(bufferutil@4.1.0)(encoding@0.1.13)(immer@11.1.4)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(wagmi@2.17.5(@tanstack/query-core@5.67.1)(@tanstack/react-query@5.67.1(react@18.3.1))(@types/react@18.3.12)(@vercel/blob@1.0.2)(bufferutil@4.1.0)(encoding@0.1.13)(immer@11.1.4)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2))(zod@3.24.2)': dependencies: - '@base-org/account': 1.1.1(@types/react@18.3.12)(bufferutil@4.1.0)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(zod@3.24.2) - '@coinbase/wallet-sdk': 4.3.6(@types/react@18.3.12)(bufferutil@4.1.0)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(zod@3.24.2) + '@base-org/account': 1.1.1(@types/react@18.3.12)(bufferutil@4.1.0)(immer@11.1.4)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(zod@3.24.2) + '@coinbase/wallet-sdk': 4.3.6(@types/react@18.3.12)(bufferutil@4.1.0)(immer@11.1.4)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(zod@3.24.2) '@gemini-wallet/core': 0.2.0(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)) '@metamask/sdk': 0.33.1(bufferutil@4.1.0)(encoding@0.1.13)(utf-8-validate@5.0.10) '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) - '@wagmi/core': 2.21.2(@tanstack/query-core@5.67.1)(@types/react@18.3.12)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)) + '@wagmi/core': 2.21.2(@tanstack/query-core@5.67.1)(@types/react@18.3.12)(immer@11.1.4)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)) '@walletconnect/ethereum-provider': 2.21.1(@types/react@18.3.12)(@vercel/blob@1.0.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) cbw-sdk: '@coinbase/wallet-sdk@3.9.3' - porto: 0.2.19(@tanstack/react-query@5.67.1(react@18.3.1))(@types/react@18.3.12)(@wagmi/core@2.21.2(@tanstack/query-core@5.67.1)(@types/react@18.3.12)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)))(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(wagmi@2.17.5(@tanstack/query-core@5.67.1)(@tanstack/react-query@5.67.1(react@18.3.1))(@types/react@18.3.12)(@vercel/blob@1.0.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2)) + porto: 0.2.19(@tanstack/react-query@5.67.1(react@18.3.1))(@types/react@18.3.12)(@wagmi/core@2.21.2(@tanstack/query-core@5.67.1)(@types/react@18.3.12)(immer@11.1.4)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)))(immer@11.1.4)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(wagmi@2.17.5(@tanstack/query-core@5.67.1)(@tanstack/react-query@5.67.1(react@18.3.1))(@types/react@18.3.12)(@vercel/blob@1.0.2)(bufferutil@4.1.0)(encoding@0.1.13)(immer@11.1.4)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2)) viem: 2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) optionalDependencies: typescript: 5.8.2 @@ -20534,12 +20720,12 @@ snapshots: - wagmi - zod - '@wagmi/core@2.21.2(@tanstack/query-core@5.67.1)(@types/react@18.3.12)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))': + '@wagmi/core@2.21.2(@tanstack/query-core@5.67.1)(@types/react@18.3.12)(immer@11.1.4)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))': dependencies: eventemitter3: 5.0.1 mipd: 0.0.7(typescript@5.8.2) viem: 2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) - zustand: 5.0.0(@types/react@18.3.12)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) + zustand: 5.0.0(@types/react@18.3.12)(immer@11.1.4)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) optionalDependencies: '@tanstack/query-core': 5.67.1 typescript: 5.8.2 @@ -22777,6 +22963,44 @@ snapshots: untildify: 4.0.0 yauzl: 2.10.0 + d3-array@3.2.4: + dependencies: + internmap: 2.0.3 + + d3-color@3.1.0: {} + + d3-ease@3.0.1: {} + + d3-format@3.1.2: {} + + d3-interpolate@3.0.1: + dependencies: + d3-color: 3.1.0 + + d3-path@3.1.0: {} + + d3-scale@4.0.2: + dependencies: + d3-array: 3.2.4 + d3-format: 3.1.2 + d3-interpolate: 3.0.1 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + + d3-shape@3.2.0: + dependencies: + d3-path: 3.1.0 + + d3-time-format@4.1.0: + dependencies: + d3-time: 3.1.0 + + d3-time@3.1.0: + dependencies: + d3-array: 3.2.4 + + d3-timer@3.0.1: {} + damerau-levenshtein@1.0.8: {} dargs@8.1.0: {} @@ -22849,6 +23073,8 @@ snapshots: decamelize@1.2.0: {} + decimal.js-light@2.5.1: {} + decimal.js@10.6.0: {} decode-uri-component@0.2.2: {} @@ -23309,6 +23535,8 @@ snapshots: es-toolkit@1.33.0: {} + es-toolkit@1.44.0: {} + esbuild-register@3.6.0(esbuild@0.27.2): dependencies: debug: 4.4.3(supports-color@8.1.1) @@ -24743,6 +24971,10 @@ snapshots: image-size@2.0.2: {} + immer@10.2.0: {} + + immer@11.1.4: {} + immutable@5.1.4: {} import-fresh@3.3.1: @@ -24793,6 +25025,8 @@ snapshots: hasown: 2.0.2 side-channel: 1.1.0 + internmap@2.0.3: {} + interpret@1.4.0: {} intl-messageformat@10.7.18: @@ -27206,21 +27440,21 @@ snapshots: transitivePeerDependencies: - supports-color - porto@0.2.19(@tanstack/react-query@5.67.1(react@18.3.1))(@types/react@18.3.12)(@wagmi/core@2.21.2(@tanstack/query-core@5.67.1)(@types/react@18.3.12)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)))(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(wagmi@2.17.5(@tanstack/query-core@5.67.1)(@tanstack/react-query@5.67.1(react@18.3.1))(@types/react@18.3.12)(@vercel/blob@1.0.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2)): + porto@0.2.19(@tanstack/react-query@5.67.1(react@18.3.1))(@types/react@18.3.12)(@wagmi/core@2.21.2(@tanstack/query-core@5.67.1)(@types/react@18.3.12)(immer@11.1.4)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)))(immer@11.1.4)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(wagmi@2.17.5(@tanstack/query-core@5.67.1)(@tanstack/react-query@5.67.1(react@18.3.1))(@types/react@18.3.12)(@vercel/blob@1.0.2)(bufferutil@4.1.0)(encoding@0.1.13)(immer@11.1.4)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2)): dependencies: - '@wagmi/core': 2.21.2(@tanstack/query-core@5.67.1)(@types/react@18.3.12)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)) + '@wagmi/core': 2.21.2(@tanstack/query-core@5.67.1)(@types/react@18.3.12)(immer@11.1.4)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)) hono: 4.11.9 idb-keyval: 6.2.2 mipd: 0.0.7(typescript@5.8.2) ox: 0.9.17(typescript@5.8.2)(zod@4.3.6) viem: 2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) zod: 4.3.6 - zustand: 5.0.11(@types/react@18.3.12)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) + zustand: 5.0.11(@types/react@18.3.12)(immer@11.1.4)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)) optionalDependencies: '@tanstack/react-query': 5.67.1(react@18.3.1) react: 18.3.1 typescript: 5.8.2 - wagmi: 2.17.5(@tanstack/query-core@5.67.1)(@tanstack/react-query@5.67.1(react@18.3.1))(@types/react@18.3.12)(@vercel/blob@1.0.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2) + wagmi: 2.17.5(@tanstack/query-core@5.67.1)(@tanstack/react-query@5.67.1(react@18.3.1))(@types/react@18.3.12)(@vercel/blob@1.0.2)(bufferutil@4.1.0)(encoding@0.1.13)(immer@11.1.4)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2) transitivePeerDependencies: - '@types/react' - immer @@ -27938,6 +28172,15 @@ snapshots: react-is@18.3.1: {} + react-redux@9.2.0(@types/react@18.3.12)(react@18.3.1)(redux@5.0.1): + dependencies: + '@types/use-sync-external-store': 0.0.6 + react: 18.3.1 + use-sync-external-store: 1.6.0(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + redux: 5.0.1 + react-refresh@0.14.2: {} react-router-dom@6.30.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): @@ -28052,6 +28295,26 @@ snapshots: tiny-invariant: 1.3.3 tslib: 2.8.1 + recharts@3.7.0(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(redux@5.0.1): + dependencies: + '@reduxjs/toolkit': 2.11.2(react-redux@9.2.0(@types/react@18.3.12)(react@18.3.1)(redux@5.0.1))(react@18.3.1) + clsx: 2.1.1 + decimal.js-light: 2.5.1 + es-toolkit: 1.44.0 + eventemitter3: 5.0.4 + immer: 10.2.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-is: 18.3.1 + react-redux: 9.2.0(@types/react@18.3.12)(react@18.3.1)(redux@5.0.1) + reselect: 5.1.1 + tiny-invariant: 1.3.3 + use-sync-external-store: 1.6.0(react@18.3.1) + victory-vendor: 37.3.6 + transitivePeerDependencies: + - '@types/react' + - redux + rechoir@0.6.2: dependencies: resolve: 1.22.11 @@ -28065,6 +28328,12 @@ snapshots: dependencies: esprima: 4.0.1 + redux-thunk@3.1.0(redux@5.0.1): + dependencies: + redux: 5.0.1 + + redux@5.0.1: {} + reflect-metadata@0.2.2: {} reflect.getprototypeof@1.0.10: @@ -28146,6 +28415,8 @@ snapshots: requires-port@1.0.0: {} + reselect@5.1.1: {} + resolve-alpn@1.2.1: {} resolve-cwd@3.0.0: @@ -29891,6 +30162,23 @@ snapshots: core-util-is: 1.0.2 extsprintf: 1.3.0 + victory-vendor@37.3.6: + dependencies: + '@types/d3-array': 3.2.2 + '@types/d3-ease': 3.0.2 + '@types/d3-interpolate': 3.0.4 + '@types/d3-scale': 4.0.9 + '@types/d3-shape': 3.1.8 + '@types/d3-time': 3.0.4 + '@types/d3-timer': 3.0.2 + d3-array: 3.2.4 + d3-ease: 3.0.1 + d3-interpolate: 3.0.1 + d3-scale: 4.0.2 + d3-shape: 3.2.0 + d3-time: 3.1.0 + d3-timer: 3.0.1 + viem@2.23.2(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2): dependencies: '@noble/curves': 1.8.1 @@ -30056,11 +30344,11 @@ snapshots: dependencies: xml-name-validator: 4.0.0 - wagmi@2.17.5(@tanstack/query-core@5.67.1)(@tanstack/react-query@5.67.1(react@18.3.1))(@types/react@18.3.12)(@vercel/blob@1.0.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2): + wagmi@2.17.5(@tanstack/query-core@5.67.1)(@tanstack/react-query@5.67.1(react@18.3.1))(@types/react@18.3.12)(@vercel/blob@1.0.2)(bufferutil@4.1.0)(encoding@0.1.13)(immer@11.1.4)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2): dependencies: '@tanstack/react-query': 5.67.1(react@18.3.1) - '@wagmi/connectors': 5.11.2(@tanstack/react-query@5.67.1(react@18.3.1))(@types/react@18.3.12)(@vercel/blob@1.0.2)(@wagmi/core@2.21.2(@tanstack/query-core@5.67.1)(@types/react@18.3.12)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)))(bufferutil@4.1.0)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(wagmi@2.17.5(@tanstack/query-core@5.67.1)(@tanstack/react-query@5.67.1(react@18.3.1))(@types/react@18.3.12)(@vercel/blob@1.0.2)(bufferutil@4.1.0)(encoding@0.1.13)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2))(zod@3.24.2) - '@wagmi/core': 2.21.2(@tanstack/query-core@5.67.1)(@types/react@18.3.12)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)) + '@wagmi/connectors': 5.11.2(@tanstack/react-query@5.67.1(react@18.3.1))(@types/react@18.3.12)(@vercel/blob@1.0.2)(@wagmi/core@2.21.2(@tanstack/query-core@5.67.1)(@types/react@18.3.12)(immer@11.1.4)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)))(bufferutil@4.1.0)(encoding@0.1.13)(immer@11.1.4)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(utf-8-validate@5.0.10)(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(wagmi@2.17.5(@tanstack/query-core@5.67.1)(@tanstack/react-query@5.67.1(react@18.3.1))(@types/react@18.3.12)(@vercel/blob@1.0.2)(bufferutil@4.1.0)(encoding@0.1.13)(immer@11.1.4)(react@18.3.1)(typescript@5.8.2)(utf-8-validate@5.0.10)(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2))(zod@3.24.2))(zod@3.24.2) + '@wagmi/core': 2.21.2(@tanstack/query-core@5.67.1)(@types/react@18.3.12)(immer@11.1.4)(react@18.3.1)(typescript@5.8.2)(use-sync-external-store@1.4.0(react@18.3.1))(viem@2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2)) react: 18.3.1 use-sync-external-store: 1.4.0(react@18.3.1) viem: 2.43.1(bufferutil@4.1.0)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.24.2) @@ -30470,20 +30758,23 @@ snapshots: zod@4.3.6: {} - zustand@5.0.0(@types/react@18.3.12)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)): + zustand@5.0.0(@types/react@18.3.12)(immer@11.1.4)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)): optionalDependencies: '@types/react': 18.3.12 + immer: 11.1.4 react: 18.3.1 use-sync-external-store: 1.4.0(react@18.3.1) - zustand@5.0.11(@types/react@18.3.12)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)): + zustand@5.0.11(@types/react@18.3.12)(immer@11.1.4)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)): optionalDependencies: '@types/react': 18.3.12 + immer: 11.1.4 react: 18.3.1 use-sync-external-store: 1.4.0(react@18.3.1) - zustand@5.0.3(@types/react@18.3.12)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)): + zustand@5.0.3(@types/react@18.3.12)(immer@11.1.4)(react@18.3.1)(use-sync-external-store@1.4.0(react@18.3.1)): optionalDependencies: '@types/react': 18.3.12 + immer: 11.1.4 react: 18.3.1 use-sync-external-store: 1.4.0(react@18.3.1)