From 2fa5393fab45802d3c390bd0cc626e8a38e0dd08 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Tue, 24 Feb 2026 17:09:39 -0300 Subject: [PATCH 01/37] chore: add CLAUDE.md and basic claude settings --- .claude/settings.json | 8 ++ .gitignore | 3 + AGENTS.md | 1 + CLAUDE.md | 229 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 241 insertions(+) create mode 100644 .claude/settings.json create mode 120000 AGENTS.md create mode 100644 CLAUDE.md diff --git a/.claude/settings.json b/.claude/settings.json new file mode 100644 index 00000000..170d2ef8 --- /dev/null +++ b/.claude/settings.json @@ -0,0 +1,8 @@ +{ + "permissions": { + "allow": [ + "WebFetch(domain:docs.dappbooster.dev)", + "WebFetch(domain:components.dappbooster.dev)" + ] + } +} diff --git a/.gitignore b/.gitignore index 246a75ca..1f28c385 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,9 @@ src/subgraphs/gql src/hooks/generated.ts vite.config.ts.timestamp* +# Claude Code +.claude/settings.local.json + # Project .env files .env.local .env diff --git a/AGENTS.md b/AGENTS.md new file mode 120000 index 00000000..681311eb --- /dev/null +++ b/AGENTS.md @@ -0,0 +1 @@ +CLAUDE.md \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000..531ef86e --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,229 @@ +# dAppBooster + +A repository template / starter-kit for building decentralized applications (dApps). Built by BootNode based on 5+ years of dApp development. Docs: https://docs.dappbooster.dev/ | Components: https://components.dappbooster.dev/ + +## Requirements + +- Node 24+ (see `.nvmrc`) +- pnpm 10.30.2+ (enforced via `packageManager` in package.json; corepack will block npm/yarn) + +## Setup + +1. `pnpm install` (postinstall automatically runs `pnpm wagmi-generate`) +2. `cp .env.example .env.local` +3. Edit `.env.local`: + - `PUBLIC_APP_NAME` is mandatory + - `PUBLIC_WALLETCONNECT_PROJECT_ID` is needed for wallet connection to work + - RPC vars (`PUBLIC_RPC_*`) are optional -- wagmi falls back to default public RPCs + - Subgraph vars are all-or-nothing: if ANY `PUBLIC_SUBGRAPHS_*` var is missing or empty, codegen will skip and the app will crash at runtime. Either set them all or remove all subgraph-related code. +4. `pnpm subgraph-codegen` (only if subgraph vars are configured) +5. `pnpm dev` + +## Git Hooks (Husky) + +Three hooks run automatically and will block on failure: + +- **pre-commit:** lint-staged runs Biome check + Vitest on related files for staged changes +- **commit-msg:** commitlint enforces conventional commit format. Valid types: `feat`, `fix`, `docs`, `test`, `ci`, `refactor`, `perf`, `chore`, `revert`. PR titles are also validated via CI. +- **pre-push:** full `tsc --noEmit` type check (pushes with type errors will be rejected) + +## Quick Reference + +- **Dev server:** `pnpm dev` +- **Build:** `pnpm build` (runs tsc + vite build) +- **Lint:** `pnpm lint` (Biome) / `pnpm lint:fix` +- **Test:** `pnpm test` / `pnpm test:watch` / `pnpm test:coverage` +- **Generate contract hooks:** `pnpm wagmi-generate` +- **Generate routes:** `pnpm routes:generate` +- **Generate subgraph types:** `pnpm subgraph-codegen` +- **Docs site:** `pnpm docs:dev` + +## Tech Stack + +- React 19 + TypeScript (strict mode, ESM -- `"type": "module"`, no `require()`) +- Vite + SWC (fast JSX transform) +- Wagmi 2 + viem 2 (Ethereum interaction) +- TanStack Router (file-based routing with auto code-splitting) +- TanStack Query (server state / data fetching) +- Chakra UI 3 (component library + theming) +- ConnectKit (default wallet connector; RainbowKit and Web3Modal also available) +- LI.FI SDK (token prices/balances) +- Zod + @t3-oss/env-core (environment variable validation) +- Biome (linting + formatting) +- Vitest + Testing Library (testing) + +## Project Structure + +``` +src/ + components/ + pageComponents/ # Page-level components (home/, weth/, demos/) + sharedComponents/ # Reusable UI + business components + ui/ # Chakra provider + theme setup + hooks/ # Custom React hooks + generated.ts # Auto-generated by wagmi-cli (do not edit) + providers/ # Web3Provider, TransactionNotificationProvider + routes/ # TanStack Router file-based routes + __root.tsx # Root layout (provider stack + shell) + lib/ + networks.config.ts # Chain + transport configuration + wagmi/ # Wagmi CLI config + custom Suspense plugin + wallets/ # ConnectKit, RainbowKit, Web3Modal configs + constants/ + contracts/ # Contract ABIs + addresses per chain + tokenLists.ts # Token list URLs + common.ts # Shared constants (isDev, includeTestnets) + types/ # TypeScript type definitions + utils/ # Utility functions + subgraphs/ # GraphQL codegen config + queries + env.ts # Zod-validated environment variables + main.tsx # Entry point + routeTree.gen.ts # Auto-generated route tree (do not edit) +``` + +No top-level barrel exports. Import directly from each file/folder path. + +## Provider Stack + +The root layout (`src/routes/__root.tsx`) wraps the app in this order: + +``` +Chakra Provider (theme, color mode) + Web3Provider (WagmiProvider -> QueryClientProvider -> WalletProvider) + TransactionNotificationProvider (tx toast context) + Header / Outlet (page) / Footer +``` + +New providers should be inserted at the appropriate layer based on their dependencies. + +## Code Style + +- **No semicolons** in TypeScript/JavaScript +- **Single quotes** +- 2-space indentation, 100 char line width +- Import organization handled by Biome +- Path aliases: `@/src/*` and `@packageJSON` +- All env vars prefixed with `PUBLIC_` and validated in `src/env.ts` +- JSDoc comments on exported functions/components (follow existing patterns) + +## Styling + +- **Chakra UI props** are the primary styling method. No CSS modules, no Tailwind, no styled-components. +- Theme is defined in `src/components/ui/provider.tsx` using `createSystem` extending `defaultConfig`. +- Use **semantic tokens** for colors: `bg`, `primary`, `text`, `danger`, `ok`, `warning`. These support light/dark mode. Do not hardcode color values. +- Fonts: Manrope (body/heading), Roboto Mono (mono/code). +- Complex components export style objects from a `styles.ts` file, consumed via Chakra's `css` prop or spread into component props. + +## Component Conventions + +- **Simple components:** single file (e.g., `ExplorerLink.tsx`, `SwitchNetwork.tsx`) +- **Complex components:** folder with: + - `index.tsx` -- main component and public API + - `Components.tsx` -- sub-components (styled primitives, layout pieces) + - `styles.ts` -- style objects + - `useComponentName.ts` -- dedicated hook (optional) +- Page components go in `src/components/pageComponents//` +- Shared/reusable components go in `src/components/sharedComponents/` + +## Key Patterns + +### Adding a New Contract + +1. Save ABI in `src/constants/contracts/abis/YourContract.ts` (export as const) +2. Register in `src/constants/contracts/contracts.ts` with name, ABI, and addresses per chain +3. Run `pnpm wagmi-generate` to auto-generate typed hooks in `src/hooks/generated.ts` + +The contracts array uses `as const satisfies ContractConfig[]` for full type inference. Follow this pattern. + +Use `getContract(name, chainId)` to retrieve a typed contract config at runtime (e.g., `getContract('WETH', sepolia.id)` returns `{ abi, address }`). + +### Generated Hook Naming Convention + +`pnpm wagmi-generate` produces hooks in `src/hooks/generated.ts` following this naming pattern: + +- `useReadContractNameFunctionName` -- standard read hook +- `useWriteContractNameFunctionName` -- write hook +- `useSuspenseReadContractNameFunctionName` -- Suspense-enabled read hook +- `useSimulateContractNameFunctionName` -- simulation hook + +Example: contract named `WETH` with function `allowance` generates `useReadWethAllowance`, `useWriteWethApprove`, `useSuspenseReadWethAllowance`, etc. + +### Adding a New Route/Page + +1. Create route file in `src/routes/` using `.lazy.tsx` extension for code-split lazy loading (e.g., `yourpage.lazy.tsx`). Use plain `.tsx` only for routes that must be eagerly loaded. +2. Create page component in `src/components/pageComponents/yourpage/` +3. Route tree auto-generates via TanStack Router plugin + +### Adding a New Network + +1. Import chain from `viem/chains` in `src/lib/networks.config.ts` +2. Add to the appropriate chain array (devChains or prodChains) +3. Add transport entry with optional custom RPC from env +4. Add RPC env var to `src/env.ts` if needed + +### Environment Variables + +- Defined and validated with Zod in `src/env.ts` +- Access via `import { env } from '@/src/env'` (never `import.meta.env` directly) +- New variables MUST be added to both `.env.example` and `src/env.ts` + +### Web3 Status + +- Use `useWeb3Status()` for unified wallet/chain state +- Use `useWeb3StatusConnected()` when wallet connection is guaranteed (throws otherwise) +- Use `withWalletStatusVerifier()` HOC to gate components behind wallet connection + +### Suspense and Error Boundaries + +- Contract read hooks use React Suspense via custom `reactSuspenseRead` wagmi plugin +- `useTokenLists` is Suspense-based +- Wrap async components with `withSuspenseAndRetry()` from `src/utils/suspenseWrapper.tsx` -- this is the primary error boundary pattern. It integrates with TanStack Query's `QueryErrorResetBoundary` for automatic retry on query failures. +- `withSuspenseAndRetry` accepts: `suspenseFallback`, `errorFallback`, `defaultFallbackFormat` ('dialog' | 'default'), `spinnerSize` +- Simpler variant `withSuspense()` available when retry logic is not needed + +### Transaction Handling + +Two components for two different jobs -- both auto-wrap with `withWalletStatusVerifier` (do not double-wrap): + +- **`TransactionButton`** -- for on-chain transactions. Takes `transaction: () => Promise` prop. Attach a `methodId` string property to the function for notification context. Calls `onMined(receipt)` on confirmation. +- **`SignButton`** -- for message signing only (uses `useSignMessage`). Takes `message`, `onSign`, `onError` props. + +`TransactionNotificationProvider` handles toast notifications and tx watching for both. + +### Token Management + +- Token lists configured in `src/constants/tokenLists.ts` +- Fetch with `useTokenLists()` hook (Suspense-based). Tokens are deduplicated by `chainId + address` (lowercased). Native tokens are auto-injected for each configured chain. +- Token prices/balances via `useTokens()` (LI.FI SDK) +- `TokenInput` + `useTokenInput()` for amount input with validation +- For raw bigint/decimal conversion in inputs, use `BigNumberInput` (wraps viem's `parseUnits`/`formatUnits`). Never use `parseFloat` or `Number()` for token amounts. + +### Wallet Provider + +- Default: ConnectKit (configured in `src/lib/wallets/connectkit.config.tsx`) +- To switch: modify `src/providers/Web3Provider.tsx` imports +- Alternatives available: RainbowKit (`rainbowkit.config.tsx`), Web3Modal (`web3modal.config.tsx`) + +## Auto-Generated Files (Do Not Edit, Do Not Commit) + +These files are gitignored and regenerated from source: + +- `src/hooks/generated.ts` -- regenerate with `pnpm wagmi-generate` +- `src/routeTree.gen.ts` -- regenerate with `pnpm routes:generate` +- `src/subgraphs/gql/` -- regenerate with `pnpm subgraph-codegen` + +## Utilities + +- **Number formatting:** Use `formatNumber()` from `src/utils/numberFormat.ts` with the appropriate `NumberType` context (`TokenTx`, `FiatTokenPrice`, `SwapPrice`, `PortfolioBalance`, etc.). Never use raw `.toString()` or `.toFixed()` for user-facing numbers. +- **Explorer links:** `getExplorerLink()` from `src/utils/getExplorerLink.ts` +- **String truncation:** `truncateStringInTheMiddle()`, `getTruncatedHash()` from `src/utils/strings.ts` +- **Native token check:** `isNativeToken()` from `src/utils/address.ts` +- **Hash detection:** `detectHash()` from `src/utils/hash.ts` -- identifies ENS names, transaction hashes, contract addresses, and EOAs + +## Testing + +- Framework: Vitest with jsdom environment +- Test files: colocated as `*.test.ts` / `*.test.tsx` +- Mocking: `vi.mock()` for module mocks +- Component testing: Testing Library + jest-dom matchers +- Run: `pnpm test` (single run) or `pnpm test:watch` From 293edc7447bed757afb60d8950f72c3a5f2dcf72 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 23 Mar 2026 17:13:36 -0300 Subject: [PATCH 02/37] chore: add ignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 1f28c385..be85071d 100644 --- a/.gitignore +++ b/.gitignore @@ -24,6 +24,7 @@ vite.config.ts.timestamp* # Claude Code .claude/settings.local.json +CLAUDE.local.md # Project .env files .env.local From 5f33eced2b27b14b365da7c59f4d4cada66e4aee Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 23 Mar 2026 19:15:28 -0300 Subject: [PATCH 03/37] docs: fix pipe separator in CLAUDE.md and convert AGENTS.md to regular file Replace the literal pipe character between the two URLs in the header with a space separator to avoid Markdown table syntax confusion. Convert AGENTS.md from a symlink to a regular file copy of CLAUDE.md so it works reliably on Windows and in CI environments where symlinks may not be supported. --- AGENTS.md | 230 +++++++++++++++++++++++++++++++++++++++++++++++++++++- CLAUDE.md | 2 +- 2 files changed, 230 insertions(+), 2 deletions(-) mode change 120000 => 100644 AGENTS.md diff --git a/AGENTS.md b/AGENTS.md deleted file mode 120000 index 681311eb..00000000 --- a/AGENTS.md +++ /dev/null @@ -1 +0,0 @@ -CLAUDE.md \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 00000000..23b6104e --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,229 @@ +# dAppBooster + +A repository template / starter-kit for building decentralized applications (dApps). Built by BootNode based on 5+ years of dApp development. Docs: https://docs.dappbooster.dev/ Components: https://components.dappbooster.dev/ + +## Requirements + +- Node 24+ (see `.nvmrc`) +- pnpm 10.30.2+ (enforced via `packageManager` in package.json; corepack will block npm/yarn) + +## Setup + +1. `pnpm install` (postinstall automatically runs `pnpm wagmi-generate`) +2. `cp .env.example .env.local` +3. Edit `.env.local`: + - `PUBLIC_APP_NAME` is mandatory + - `PUBLIC_WALLETCONNECT_PROJECT_ID` is needed for wallet connection to work + - RPC vars (`PUBLIC_RPC_*`) are optional -- wagmi falls back to default public RPCs + - Subgraph vars are all-or-nothing: if ANY `PUBLIC_SUBGRAPHS_*` var is missing or empty, codegen will skip and the app will crash at runtime. Either set them all or remove all subgraph-related code. +4. `pnpm subgraph-codegen` (only if subgraph vars are configured) +5. `pnpm dev` + +## Git Hooks (Husky) + +Three hooks run automatically and will block on failure: + +- **pre-commit:** lint-staged runs Biome check + Vitest on related files for staged changes +- **commit-msg:** commitlint enforces conventional commit format. Valid types: `feat`, `fix`, `docs`, `test`, `ci`, `refactor`, `perf`, `chore`, `revert`. PR titles are also validated via CI. +- **pre-push:** full `tsc --noEmit` type check (pushes with type errors will be rejected) + +## Quick Reference + +- **Dev server:** `pnpm dev` +- **Build:** `pnpm build` (runs tsc + vite build) +- **Lint:** `pnpm lint` (Biome) / `pnpm lint:fix` +- **Test:** `pnpm test` / `pnpm test:watch` / `pnpm test:coverage` +- **Generate contract hooks:** `pnpm wagmi-generate` +- **Generate routes:** `pnpm routes:generate` +- **Generate subgraph types:** `pnpm subgraph-codegen` +- **Docs site:** `pnpm docs:dev` + +## Tech Stack + +- React 19 + TypeScript (strict mode, ESM -- `"type": "module"`, no `require()`) +- Vite + SWC (fast JSX transform) +- Wagmi 2 + viem 2 (Ethereum interaction) +- TanStack Router (file-based routing with auto code-splitting) +- TanStack Query (server state / data fetching) +- Chakra UI 3 (component library + theming) +- ConnectKit (default wallet connector; RainbowKit and Web3Modal also available) +- LI.FI SDK (token prices/balances) +- Zod + @t3-oss/env-core (environment variable validation) +- Biome (linting + formatting) +- Vitest + Testing Library (testing) + +## Project Structure + +``` +src/ + components/ + pageComponents/ # Page-level components (home/, weth/, demos/) + sharedComponents/ # Reusable UI + business components + ui/ # Chakra provider + theme setup + hooks/ # Custom React hooks + generated.ts # Auto-generated by wagmi-cli (do not edit) + providers/ # Web3Provider, TransactionNotificationProvider + routes/ # TanStack Router file-based routes + __root.tsx # Root layout (provider stack + shell) + lib/ + networks.config.ts # Chain + transport configuration + wagmi/ # Wagmi CLI config + custom Suspense plugin + wallets/ # ConnectKit, RainbowKit, Web3Modal configs + constants/ + contracts/ # Contract ABIs + addresses per chain + tokenLists.ts # Token list URLs + common.ts # Shared constants (isDev, includeTestnets) + types/ # TypeScript type definitions + utils/ # Utility functions + subgraphs/ # GraphQL codegen config + queries + env.ts # Zod-validated environment variables + main.tsx # Entry point + routeTree.gen.ts # Auto-generated route tree (do not edit) +``` + +No top-level barrel exports. Import directly from each file/folder path. + +## Provider Stack + +The root layout (`src/routes/__root.tsx`) wraps the app in this order: + +``` +Chakra Provider (theme, color mode) + Web3Provider (WagmiProvider -> QueryClientProvider -> WalletProvider) + TransactionNotificationProvider (tx toast context) + Header / Outlet (page) / Footer +``` + +New providers should be inserted at the appropriate layer based on their dependencies. + +## Code Style + +- **No semicolons** in TypeScript/JavaScript +- **Single quotes** +- 2-space indentation, 100 char line width +- Import organization handled by Biome +- Path aliases: `@/src/*` and `@packageJSON` +- All env vars prefixed with `PUBLIC_` and validated in `src/env.ts` +- JSDoc comments on exported functions/components (follow existing patterns) + +## Styling + +- **Chakra UI props** are the primary styling method. No CSS modules, no Tailwind, no styled-components. +- Theme is defined in `src/components/ui/provider.tsx` using `createSystem` extending `defaultConfig`. +- Use **semantic tokens** for colors: `bg`, `primary`, `text`, `danger`, `ok`, `warning`. These support light/dark mode. Do not hardcode color values. +- Fonts: Manrope (body/heading), Roboto Mono (mono/code). +- Complex components export style objects from a `styles.ts` file, consumed via Chakra's `css` prop or spread into component props. + +## Component Conventions + +- **Simple components:** single file (e.g., `ExplorerLink.tsx`, `SwitchNetwork.tsx`) +- **Complex components:** folder with: + - `index.tsx` -- main component and public API + - `Components.tsx` -- sub-components (styled primitives, layout pieces) + - `styles.ts` -- style objects + - `useComponentName.ts` -- dedicated hook (optional) +- Page components go in `src/components/pageComponents//` +- Shared/reusable components go in `src/components/sharedComponents/` + +## Key Patterns + +### Adding a New Contract + +1. Save ABI in `src/constants/contracts/abis/YourContract.ts` (export as const) +2. Register in `src/constants/contracts/contracts.ts` with name, ABI, and addresses per chain +3. Run `pnpm wagmi-generate` to auto-generate typed hooks in `src/hooks/generated.ts` + +The contracts array uses `as const satisfies ContractConfig[]` for full type inference. Follow this pattern. + +Use `getContract(name, chainId)` to retrieve a typed contract config at runtime (e.g., `getContract('WETH', sepolia.id)` returns `{ abi, address }`). + +### Generated Hook Naming Convention + +`pnpm wagmi-generate` produces hooks in `src/hooks/generated.ts` following this naming pattern: + +- `useReadContractNameFunctionName` -- standard read hook +- `useWriteContractNameFunctionName` -- write hook +- `useSuspenseReadContractNameFunctionName` -- Suspense-enabled read hook +- `useSimulateContractNameFunctionName` -- simulation hook + +Example: contract named `WETH` with function `allowance` generates `useReadWethAllowance`, `useWriteWethApprove`, `useSuspenseReadWethAllowance`, etc. + +### Adding a New Route/Page + +1. Create route file in `src/routes/` using `.lazy.tsx` extension for code-split lazy loading (e.g., `yourpage.lazy.tsx`). Use plain `.tsx` only for routes that must be eagerly loaded. +2. Create page component in `src/components/pageComponents/yourpage/` +3. Route tree auto-generates via TanStack Router plugin + +### Adding a New Network + +1. Import chain from `viem/chains` in `src/lib/networks.config.ts` +2. Add to the appropriate chain array (devChains or prodChains) +3. Add transport entry with optional custom RPC from env +4. Add RPC env var to `src/env.ts` if needed + +### Environment Variables + +- Defined and validated with Zod in `src/env.ts` +- Access via `import { env } from '@/src/env'` (never `import.meta.env` directly) +- New variables MUST be added to both `.env.example` and `src/env.ts` + +### Web3 Status + +- Use `useWeb3Status()` for unified wallet/chain state +- Use `useWeb3StatusConnected()` when wallet connection is guaranteed (throws otherwise) +- Use `withWalletStatusVerifier()` HOC to gate components behind wallet connection + +### Suspense and Error Boundaries + +- Contract read hooks use React Suspense via custom `reactSuspenseRead` wagmi plugin +- `useTokenLists` is Suspense-based +- Wrap async components with `withSuspenseAndRetry()` from `src/utils/suspenseWrapper.tsx` -- this is the primary error boundary pattern. It integrates with TanStack Query's `QueryErrorResetBoundary` for automatic retry on query failures. +- `withSuspenseAndRetry` accepts: `suspenseFallback`, `errorFallback`, `defaultFallbackFormat` ('dialog' | 'default'), `spinnerSize` +- Simpler variant `withSuspense()` available when retry logic is not needed + +### Transaction Handling + +Two components for two different jobs -- both auto-wrap with `withWalletStatusVerifier` (do not double-wrap): + +- **`TransactionButton`** -- for on-chain transactions. Takes `transaction: () => Promise` prop. Attach a `methodId` string property to the function for notification context. Calls `onMined(receipt)` on confirmation. +- **`SignButton`** -- for message signing only (uses `useSignMessage`). Takes `message`, `onSign`, `onError` props. + +`TransactionNotificationProvider` handles toast notifications and tx watching for both. + +### Token Management + +- Token lists configured in `src/constants/tokenLists.ts` +- Fetch with `useTokenLists()` hook (Suspense-based). Tokens are deduplicated by `chainId + address` (lowercased). Native tokens are auto-injected for each configured chain. +- Token prices/balances via `useTokens()` (LI.FI SDK) +- `TokenInput` + `useTokenInput()` for amount input with validation +- For raw bigint/decimal conversion in inputs, use `BigNumberInput` (wraps viem's `parseUnits`/`formatUnits`). Never use `parseFloat` or `Number()` for token amounts. + +### Wallet Provider + +- Default: ConnectKit (configured in `src/lib/wallets/connectkit.config.tsx`) +- To switch: modify `src/providers/Web3Provider.tsx` imports +- Alternatives available: RainbowKit (`rainbowkit.config.tsx`), Web3Modal (`web3modal.config.tsx`) + +## Auto-Generated Files (Do Not Edit, Do Not Commit) + +These files are gitignored and regenerated from source: + +- `src/hooks/generated.ts` -- regenerate with `pnpm wagmi-generate` +- `src/routeTree.gen.ts` -- regenerate with `pnpm routes:generate` +- `src/subgraphs/gql/` -- regenerate with `pnpm subgraph-codegen` + +## Utilities + +- **Number formatting:** Use `formatNumber()` from `src/utils/numberFormat.ts` with the appropriate `NumberType` context (`TokenTx`, `FiatTokenPrice`, `SwapPrice`, `PortfolioBalance`, etc.). Never use raw `.toString()` or `.toFixed()` for user-facing numbers. +- **Explorer links:** `getExplorerLink()` from `src/utils/getExplorerLink.ts` +- **String truncation:** `truncateStringInTheMiddle()`, `getTruncatedHash()` from `src/utils/strings.ts` +- **Native token check:** `isNativeToken()` from `src/utils/address.ts` +- **Hash detection:** `detectHash()` from `src/utils/hash.ts` -- identifies ENS names, transaction hashes, contract addresses, and EOAs + +## Testing + +- Framework: Vitest with jsdom environment +- Test files: colocated as `*.test.ts` / `*.test.tsx` +- Mocking: `vi.mock()` for module mocks +- Component testing: Testing Library + jest-dom matchers +- Run: `pnpm test` (single run) or `pnpm test:watch` diff --git a/CLAUDE.md b/CLAUDE.md index 531ef86e..23b6104e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,6 +1,6 @@ # dAppBooster -A repository template / starter-kit for building decentralized applications (dApps). Built by BootNode based on 5+ years of dApp development. Docs: https://docs.dappbooster.dev/ | Components: https://components.dappbooster.dev/ +A repository template / starter-kit for building decentralized applications (dApps). Built by BootNode based on 5+ years of dApp development. Docs: https://docs.dappbooster.dev/ Components: https://components.dappbooster.dev/ ## Requirements From 2dd84b78704ac5911abc87a172df6457c61a5e84 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 23 Mar 2026 19:20:26 -0300 Subject: [PATCH 04/37] docs: add sync reminder between CLAUDE.md and AGENTS.md --- AGENTS.md | 2 ++ CLAUDE.md | 2 ++ 2 files changed, 4 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index 23b6104e..eceea487 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,5 +1,7 @@ # dAppBooster +> This file is mirrored as `CLAUDE.md` for Claude. Keep both files in sync when making changes. + A repository template / starter-kit for building decentralized applications (dApps). Built by BootNode based on 5+ years of dApp development. Docs: https://docs.dappbooster.dev/ Components: https://components.dappbooster.dev/ ## Requirements diff --git a/CLAUDE.md b/CLAUDE.md index 23b6104e..cb3ccf5c 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,5 +1,7 @@ # dAppBooster +> This file is mirrored as `AGENTS.md` for non-Claude AI agents. Keep both files in sync when making changes. + A repository template / starter-kit for building decentralized applications (dApps). Built by BootNode based on 5+ years of dApp development. Docs: https://docs.dappbooster.dev/ Components: https://components.dappbooster.dev/ ## Requirements From 1a9a0aa9c73529baabb5bdd66c1a36e02d1b4a01 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 23 Mar 2026 17:19:09 -0300 Subject: [PATCH 05/37] test: add utility and env test coverage (Tier 1) Add test safety net before dependency updates. New files: - src/test-utils.tsx: renderWithProviders, createMockWeb3Status, createMockChain - src/utils/strings.test.ts: truncateStringInTheMiddle and getTruncatedHash (13 tests) - src/utils/getExplorerLink.test.ts: getExplorerLink (6 tests) - src/utils/address.test.ts: isNativeToken (5 tests) - src/env.test.ts: Zod-validated env schema (9 tests) - .env.test: Vitest environment variables for required PUBLIC_ fields --- .env.test | 7 +++ src/env.test.ts | 53 +++++++++++++++++++++ src/test-utils.tsx | 52 ++++++++++++++++++++ src/utils/address.test.ts | 35 ++++++++++++++ src/utils/getExplorerLink.test.ts | 52 ++++++++++++++++++++ src/utils/strings.test.ts | 79 +++++++++++++++++++++++++++++++ 6 files changed, 278 insertions(+) create mode 100644 .env.test create mode 100644 src/env.test.ts create mode 100644 src/test-utils.tsx create mode 100644 src/utils/address.test.ts create mode 100644 src/utils/getExplorerLink.test.ts create mode 100644 src/utils/strings.test.ts diff --git a/.env.test b/.env.test new file mode 100644 index 00000000..f4bf82d2 --- /dev/null +++ b/.env.test @@ -0,0 +1,7 @@ +# Test environment variables for Vitest +PUBLIC_APP_NAME=dAppBooster Test +PUBLIC_NATIVE_TOKEN_ADDRESS=0x0000000000000000000000000000000000000000 +PUBLIC_WALLETCONNECT_PROJECT_ID=test-project-id +PUBLIC_SUBGRAPHS_API_KEY=test-api-key +PUBLIC_SUBGRAPHS_CHAINS_RESOURCE_IDS=1:test:test-resource-id +PUBLIC_SUBGRAPHS_ENVIRONMENT=production diff --git a/src/env.test.ts b/src/env.test.ts new file mode 100644 index 00000000..648db0f6 --- /dev/null +++ b/src/env.test.ts @@ -0,0 +1,53 @@ +import { zeroAddress } from 'viem' +import { describe, expect, it } from 'vitest' + +// env.ts reads import.meta.env at module load time. +// Vitest loads .env.test automatically for the "test" mode, +// so PUBLIC_APP_NAME, PUBLIC_SUBGRAPHS_*, etc. are set via .env.test. +import { env } from './env' + +describe('env', () => { + it('exposes PUBLIC_APP_NAME from test env', () => { + expect(env.PUBLIC_APP_NAME).toBe('dAppBooster Test') + }) + + it('defaults PUBLIC_NATIVE_TOKEN_ADDRESS to zero address when not set', () => { + // .env.test sets it to the zero address explicitly + expect(env.PUBLIC_NATIVE_TOKEN_ADDRESS).toBe(zeroAddress.toLowerCase()) + }) + + it('lowercases PUBLIC_NATIVE_TOKEN_ADDRESS', () => { + expect(env.PUBLIC_NATIVE_TOKEN_ADDRESS).toBe(env.PUBLIC_NATIVE_TOKEN_ADDRESS.toLowerCase()) + }) + + it('defaults PUBLIC_ENABLE_PORTO to true', () => { + expect(env.PUBLIC_ENABLE_PORTO).toBe(true) + }) + + it('defaults PUBLIC_USE_DEFAULT_TOKENS to true', () => { + expect(env.PUBLIC_USE_DEFAULT_TOKENS).toBe(true) + }) + + it('defaults PUBLIC_INCLUDE_TESTNETS to true', () => { + expect(env.PUBLIC_INCLUDE_TESTNETS).toBe(true) + }) + + it('defaults PUBLIC_SUBGRAPHS_ENVIRONMENT to production', () => { + expect(env.PUBLIC_SUBGRAPHS_ENVIRONMENT).toBe('production') + }) + + it('exposes PUBLIC_SUBGRAPHS_API_KEY from test env', () => { + expect(env.PUBLIC_SUBGRAPHS_API_KEY).toBe('test-api-key') + }) + + it('exposes PUBLIC_WALLETCONNECT_PROJECT_ID with empty string default', () => { + // .env.test sets it to 'test-project-id' + expect(typeof env.PUBLIC_WALLETCONNECT_PROJECT_ID).toBe('string') + }) + + it('optional RPC vars are undefined when not set in test env', () => { + // None of the RPC vars are set in .env.test + expect(env.PUBLIC_RPC_MAINNET).toBeUndefined() + expect(env.PUBLIC_RPC_SEPOLIA).toBeUndefined() + }) +}) diff --git a/src/test-utils.tsx b/src/test-utils.tsx new file mode 100644 index 00000000..124d95c3 --- /dev/null +++ b/src/test-utils.tsx @@ -0,0 +1,52 @@ +import { ChakraProvider, createSystem, defaultConfig } from '@chakra-ui/react' +import { render } from '@testing-library/react' +import type { ReactNode } from 'react' +import type { Chain } from 'viem' + +const system = createSystem(defaultConfig) + +/** + * Wraps a component in the providers needed for most tests. + */ +export function renderWithProviders(ui: ReactNode) { + return render({ui}) +} + +/** + * Returns a minimal mock of the useWeb3Status return value. + * Pass overrides to test specific states. + */ +export function createMockWeb3Status(overrides?: Partial>) { + return { ..._mockShape(), ...overrides } +} + +function _mockShape() { + return { + address: undefined as `0x${string}` | undefined, + isConnected: false, + isConnecting: false, + isDisconnected: true, + chainId: undefined as number | undefined, + balance: undefined, + publicClient: undefined, + walletClient: undefined, + disconnect: () => {}, + switchChain: undefined, + } +} + +/** + * Returns a minimal valid viem Chain object for tests. + */ +export function createMockChain(overrides?: Partial): Chain { + return { + id: 1, + name: 'Mock Chain', + nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 }, + rpcUrls: { default: { http: ['https://mock.rpc.url'] } }, + blockExplorers: { + default: { name: 'MockExplorer', url: 'https://mock.explorer.url' }, + }, + ...overrides, + } as Chain +} diff --git a/src/utils/address.test.ts b/src/utils/address.test.ts new file mode 100644 index 00000000..6a49fd05 --- /dev/null +++ b/src/utils/address.test.ts @@ -0,0 +1,35 @@ +import { zeroAddress } from 'viem' +import { describe, expect, it, vi } from 'vitest' + +// Mock env before importing isNativeToken so the module sees the mock +vi.mock('@/src/env', () => ({ + env: { + PUBLIC_NATIVE_TOKEN_ADDRESS: zeroAddress.toLowerCase(), + }, +})) + +import { isNativeToken } from './address' + +describe('isNativeToken', () => { + it('returns true for the zero address (default native token)', () => { + expect(isNativeToken(zeroAddress)).toBe(true) + }) + + it('returns true for the zero address in lowercase', () => { + expect(isNativeToken(zeroAddress.toLowerCase())).toBe(true) + }) + + it('returns true for a checksummed zero address', () => { + // zeroAddress is already lowercase, but ensure uppercase hex still matches + expect(isNativeToken('0x0000000000000000000000000000000000000000')).toBe(true) + }) + + it('returns false for a regular ERC20 contract address', () => { + expect(isNativeToken('0x71C7656EC7ab88b098defB751B7401B5f6d8976F')).toBe(false) + }) + + it('comparison is case-insensitive', () => { + // Both upper and lower case should match the native token (zero address) + expect(isNativeToken('0X0000000000000000000000000000000000000000')).toBe(true) + }) +}) diff --git a/src/utils/getExplorerLink.test.ts b/src/utils/getExplorerLink.test.ts new file mode 100644 index 00000000..31398572 --- /dev/null +++ b/src/utils/getExplorerLink.test.ts @@ -0,0 +1,52 @@ +import { createMockChain } from '@/src/test-utils' +import type { Chain } from 'viem' +import { describe, expect, it } from 'vitest' +import { getExplorerLink } from './getExplorerLink' + +const chain = createMockChain() +// A valid address (40 hex chars after 0x) +const address = '0x71C7656EC7ab88b098defB751B7401B5f6d8976F' as const +// A valid tx hash (64 hex chars after 0x) +const txHash = '0xd85ef8c70dc31a4f8d5bf0331e1eac886935905f15d32e71b348df745cd38e19' as const + +describe('getExplorerLink', () => { + it('returns address URL using chain block explorer', () => { + const url = getExplorerLink({ chain, hashOrAddress: address }) + expect(url).toBe(`${chain.blockExplorers?.default.url}/address/${address}`) + }) + + it('returns tx URL using chain block explorer for a hash', () => { + const url = getExplorerLink({ chain, hashOrAddress: txHash }) + expect(url).toBe(`${chain.blockExplorers?.default.url}/tx/${txHash}`) + }) + + it('uses custom explorerUrl for an address', () => { + const explorerUrl = 'https://custom.explorer.io' + const url = getExplorerLink({ chain, hashOrAddress: address, explorerUrl }) + expect(url).toBe(`${explorerUrl}/address/${address}`) + }) + + it('uses custom explorerUrl for a tx hash', () => { + const explorerUrl = 'https://custom.explorer.io' + const url = getExplorerLink({ chain, hashOrAddress: txHash, explorerUrl }) + expect(url).toBe(`${explorerUrl}/tx/${txHash}`) + }) + + it('throws for an invalid hash or address', () => { + expect(() => + // biome-ignore lint/suspicious/noExplicitAny: intentionally testing invalid input + getExplorerLink({ chain, hashOrAddress: 'not-valid' as any }), + ).toThrow('Invalid hash or address') + }) + + it('works with a chain that has no default block explorer (explorerUrl provided)', () => { + const chainWithoutExplorer: Chain = { ...chain, blockExplorers: undefined } + const explorerUrl = 'https://fallback.explorer.io' + const url = getExplorerLink({ + chain: chainWithoutExplorer, + hashOrAddress: address, + explorerUrl, + }) + expect(url).toBe(`${explorerUrl}/address/${address}`) + }) +}) diff --git a/src/utils/strings.test.ts b/src/utils/strings.test.ts new file mode 100644 index 00000000..e3e8d775 --- /dev/null +++ b/src/utils/strings.test.ts @@ -0,0 +1,79 @@ +import { describe, expect, it } from 'vitest' +import { getTruncatedHash, truncateStringInTheMiddle } from './strings' + +describe('truncateStringInTheMiddle', () => { + it('truncates a long string keeping start and end', () => { + const result = truncateStringInTheMiddle('0x1234567890abcdef1234567890abcdef12345678', 8, 6) + expect(result).toBe('0x123456...345678') + }) + + it('returns the original string when it fits within start + end length', () => { + const result = truncateStringInTheMiddle('short', 4, 4) + expect(result).toBe('short') + }) + + it('returns the original string when length equals start + end exactly', () => { + const result = truncateStringInTheMiddle('1234567890', 5, 5) + expect(result).toBe('1234567890') + }) + + it('truncates when length exceeds start + end by one', () => { + const result = truncateStringInTheMiddle('12345678901', 5, 5) + expect(result).toBe('12345...78901') + }) + + it('handles empty string', () => { + const result = truncateStringInTheMiddle('', 4, 4) + expect(result).toBe('') + }) + + it('handles asymmetric start and end positions', () => { + const result = truncateStringInTheMiddle('abcdefghijklmnop', 3, 7) + expect(result).toBe('abc...jklmnop') + }) + + it('handles start position of 0', () => { + const result = truncateStringInTheMiddle('abcdefghij', 0, 3) + expect(result).toBe('...hij') + }) +}) + +describe('getTruncatedHash', () => { + const address = '0x1234567890abcdef1234567890abcdef12345678' + const txHash = '0xd85ef8c70dc31a4f8d5bf0331e1eac886935905f15d32e71b348df745cd38e19' + + it('truncates with default length of 6', () => { + const result = getTruncatedHash(address) + // 0x + 6 chars ... last 6 chars + expect(result).toBe('0x123456...345678') + }) + + it('truncates with custom length', () => { + const result = getTruncatedHash(address, 4) + // 0x + 4 chars ... last 4 chars + expect(result).toBe('0x1234...5678') + }) + + it('truncates a transaction hash', () => { + const result = getTruncatedHash(txHash, 6) + expect(result).toBe('0xd85ef8...d38e19') + }) + + it('clamps length to minimum of 1', () => { + const result = getTruncatedHash(address, 0) + // length clamped to 1: 0x + 1 char ... last 1 char + expect(result).toBe('0x1...8') + }) + + it('clamps length to maximum of 16', () => { + const result = getTruncatedHash(address, 100) + // address = '0x1234567890abcdef1234567890abcdef12345678' (42 chars) + // length clamped to 16: slice(0, 18) = '0x1234567890abcdef', slice(42-16, 42) = '90abcdef12345678' + expect(result).toBe('0x1234567890abcdef...90abcdef12345678') + }) + + it('handles negative length by clamping to 1', () => { + const result = getTruncatedHash(address, -5) + expect(result).toBe('0x1...8') + }) +}) From 7edb47f9b971224b3f07f408e665ea4313f97127 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 23 Mar 2026 18:55:14 -0300 Subject: [PATCH 06/37] test: address review feedback on Tier 1 test suite - Fix env.test.ts test names that incorrectly claimed to test defaults while .env.test was setting those vars explicitly - Assert exact value for PUBLIC_WALLETCONNECT_PROJECT_ID (was typeof check) - Fix createMockWeb3Status shape to match actual Web3Status interface (was using isConnected/chainId/publicClient; hook uses isWalletConnected/ walletChainId/readOnlyClient) - Hardcode expected explorer URL in getExplorerLink assertions instead of deriving from mock chain (prevents false positives if mock misconfigured) --- src/env.test.ts | 11 ++++++----- src/test-utils.tsx | 17 +++++++++++------ src/utils/getExplorerLink.test.ts | 4 ++-- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/env.test.ts b/src/env.test.ts index 648db0f6..7abfc60f 100644 --- a/src/env.test.ts +++ b/src/env.test.ts @@ -11,8 +11,8 @@ describe('env', () => { expect(env.PUBLIC_APP_NAME).toBe('dAppBooster Test') }) - it('defaults PUBLIC_NATIVE_TOKEN_ADDRESS to zero address when not set', () => { - // .env.test sets it to the zero address explicitly + it('reads and normalizes PUBLIC_NATIVE_TOKEN_ADDRESS from env', () => { + // .env.test sets it to the zero address; the schema lowercases the value expect(env.PUBLIC_NATIVE_TOKEN_ADDRESS).toBe(zeroAddress.toLowerCase()) }) @@ -32,7 +32,8 @@ describe('env', () => { expect(env.PUBLIC_INCLUDE_TESTNETS).toBe(true) }) - it('defaults PUBLIC_SUBGRAPHS_ENVIRONMENT to production', () => { + it('reads PUBLIC_SUBGRAPHS_ENVIRONMENT from test env', () => { + // .env.test sets it to 'production'; to test the schema default use vi.resetModules() expect(env.PUBLIC_SUBGRAPHS_ENVIRONMENT).toBe('production') }) @@ -40,9 +41,9 @@ describe('env', () => { expect(env.PUBLIC_SUBGRAPHS_API_KEY).toBe('test-api-key') }) - it('exposes PUBLIC_WALLETCONNECT_PROJECT_ID with empty string default', () => { + it('exposes PUBLIC_WALLETCONNECT_PROJECT_ID from test env', () => { // .env.test sets it to 'test-project-id' - expect(typeof env.PUBLIC_WALLETCONNECT_PROJECT_ID).toBe('string') + expect(env.PUBLIC_WALLETCONNECT_PROJECT_ID).toBe('test-project-id') }) it('optional RPC vars are undefined when not set in test env', () => { diff --git a/src/test-utils.tsx b/src/test-utils.tsx index 124d95c3..d60fd802 100644 --- a/src/test-utils.tsx +++ b/src/test-utils.tsx @@ -22,16 +22,21 @@ export function createMockWeb3Status(overrides?: Partial {}, - switchChain: undefined, + switchChain: (_chainId?: number) => {}, } } diff --git a/src/utils/getExplorerLink.test.ts b/src/utils/getExplorerLink.test.ts index 31398572..c7ca4fad 100644 --- a/src/utils/getExplorerLink.test.ts +++ b/src/utils/getExplorerLink.test.ts @@ -12,12 +12,12 @@ const txHash = '0xd85ef8c70dc31a4f8d5bf0331e1eac886935905f15d32e71b348df745cd38e describe('getExplorerLink', () => { it('returns address URL using chain block explorer', () => { const url = getExplorerLink({ chain, hashOrAddress: address }) - expect(url).toBe(`${chain.blockExplorers?.default.url}/address/${address}`) + expect(url).toBe(`https://mock.explorer.url/address/${address}`) }) it('returns tx URL using chain block explorer for a hash', () => { const url = getExplorerLink({ chain, hashOrAddress: txHash }) - expect(url).toBe(`${chain.blockExplorers?.default.url}/tx/${txHash}`) + expect(url).toBe(`https://mock.explorer.url/tx/${txHash}`) }) it('uses custom explorerUrl for an address', () => { From 55510e5d0c6704222c0c28d29a1cea4a536eb42e Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 23 Mar 2026 17:21:33 -0300 Subject: [PATCH 07/37] test: enhance BigNumberInput and HashInput coverage (Tier 2) BigNumberInput: add 9 tests covering placeholder, disabled state, onChange with parsed bigint, onError for min/max violations, decimal precision enforcement, and input clearing. HashInput: add 7 tests covering placeholder, typed value reflection, initial value, clear to null, debounced search callback, onLoading lifecycle, and custom renderInput. --- .../sharedComponents/BigNumberInput.test.tsx | 126 ++++++++++++++++-- .../sharedComponents/HashInput.test.tsx | 95 ++++++++++++- 2 files changed, 202 insertions(+), 19 deletions(-) diff --git a/src/components/sharedComponents/BigNumberInput.test.tsx b/src/components/sharedComponents/BigNumberInput.test.tsx index 7554dc5a..a28532d6 100644 --- a/src/components/sharedComponents/BigNumberInput.test.tsx +++ b/src/components/sharedComponents/BigNumberInput.test.tsx @@ -1,24 +1,126 @@ import { ChakraProvider, createSystem, defaultConfig } from '@chakra-ui/react' import { render, screen } from '@testing-library/react' -import { describe, expect, it } from 'vitest' +import userEvent from '@testing-library/user-event' +import { maxUint256 } from 'viem' +import { describe, expect, it, vi } from 'vitest' import { BigNumberInput } from './BigNumberInput' const system = createSystem(defaultConfig) +function renderInput( + props: Partial> & { + onChange?: (v: bigint) => void + } = {}, +) { + const onChange = props.onChange ?? vi.fn() + const { container } = render( + + + , + ) + return { input: screen.getByRole('textbox') as HTMLInputElement, onChange, container } +} + describe('BigNumberInput', () => { it('renders without crashing', () => { - render( - - {}} - /> - , - ) - - const input = screen.getByRole('textbox') + const { input } = renderInput() expect(input).not.toBeNull() expect(input.tagName).toBe('INPUT') }) + + it('renders with default placeholder', () => { + const { input } = renderInput() + expect(input.placeholder).toBe('0.00') + }) + + it('renders with custom placeholder', () => { + const { input } = renderInput({ placeholder: 'Amount' }) + expect(input.placeholder).toBe('Amount') + }) + + it('renders as disabled when disabled prop is set', () => { + const { input } = renderInput({ disabled: true }) + expect(input.disabled).toBe(true) + }) + + it('calls onChange with BigInt(0) when input is cleared after typing', async () => { + const onChange = vi.fn() + renderInput({ decimals: 0, onChange }) + const input = screen.getByRole('textbox') + await userEvent.type(input, '5') + await userEvent.clear(input) + expect(onChange).toHaveBeenLastCalledWith(BigInt(0)) + }) + + it('calls onChange with the parsed bigint when a valid value is typed', async () => { + const onChange = vi.fn() + renderInput({ decimals: 6, onChange }) + const input = screen.getByRole('textbox') + await userEvent.type(input, '1.5') + // 1.5 * 10^6 = 1500000 + expect(onChange).toHaveBeenLastCalledWith(BigInt(1_500_000)) + }) + + it('calls onError when value exceeds max', async () => { + const onChange = vi.fn() + const onError = vi.fn() + renderInput({ + decimals: 0, + max: BigInt(100), + onChange, + onError, + }) + const input = screen.getByRole('textbox') + await userEvent.type(input, '200') + expect(onError).toHaveBeenCalledWith(expect.objectContaining({ value: '200' })) + }) + + it('calls onError when value is below min', async () => { + const onChange = vi.fn() + const onError = vi.fn() + renderInput({ + decimals: 0, + min: BigInt(10), + onChange, + onError, + }) + const input = screen.getByRole('textbox') + await userEvent.type(input, '5') + expect(onError).toHaveBeenCalledWith(expect.objectContaining({ value: '5' })) + }) + + it('calls onError(null) is NOT called for valid values (no error clearing tested via absence)', async () => { + const onError = vi.fn() + renderInput({ decimals: 0, max: BigInt(100), onError }) + const input = screen.getByRole('textbox') + await userEvent.type(input, '50') + // onError is only called on invalid values; valid value should not trigger it + expect(onError).not.toHaveBeenCalled() + }) + + it('ignores the extra digit when input has too many decimals', async () => { + const onChange = vi.fn() + renderInput({ decimals: 2, onChange }) + const input = screen.getByRole('textbox') + await userEvent.type(input, '1.123') + // '1.12' is valid (2 decimals), '1.123' has 3 and is ignored + // Last valid call should be for 1.12 = 112n (2 decimals) + const lastCall = onChange.mock.calls.at(-1)?.[0] + expect(lastCall).toBe(BigInt(112)) + }) + + it('does not update on maxUint256 overflow', async () => { + const onError = vi.fn() + renderInput({ decimals: 0, max: maxUint256, onError }) + // Typing an absurdly large number won't overflow since max = maxUint256 + // Just verify no onError for normal large numbers + const input = screen.getByRole('textbox') + await userEvent.type(input, '9999999') + expect(onError).not.toHaveBeenCalled() + }) }) diff --git a/src/components/sharedComponents/HashInput.test.tsx b/src/components/sharedComponents/HashInput.test.tsx index 72f11389..0506e9ad 100644 --- a/src/components/sharedComponents/HashInput.test.tsx +++ b/src/components/sharedComponents/HashInput.test.tsx @@ -1,28 +1,109 @@ import { ChakraProvider, createSystem, defaultConfig } from '@chakra-ui/react' -import { render, screen } from '@testing-library/react' +import { render, screen, waitFor } from '@testing-library/react' +import userEvent from '@testing-library/user-event' import { mainnet } from 'viem/chains' import { describe, expect, it, vi } from 'vitest' import HashInput from './HashInput' const system = createSystem(defaultConfig) +const detectHashMock = vi.fn().mockResolvedValue({ type: 'EOA', data: '0xabc' }) vi.mock('@/src/utils/hash', () => ({ - default: vi.fn().mockResolvedValue(null), + default: (...args: unknown[]) => detectHashMock(...args), })) +function renderHashInput(props: Partial> = {}) { + const onSearch = props.onSearch ?? vi.fn() + render( + + + , + ) + return { input: screen.getByTestId('hash-input') as HTMLInputElement, onSearch } +} + describe('HashInput', () => { it('renders without crashing', () => { + const { input } = renderHashInput() + expect(input).not.toBeNull() + expect(input.tagName).toBe('INPUT') + }) + + it('renders with placeholder prop', () => { + renderHashInput({ placeholder: 'Enter address or hash' }) + expect(screen.getByPlaceholderText('Enter address or hash')).toBeDefined() + }) + + it('reflects typed value in the input', async () => { + const { input } = renderHashInput() + await userEvent.type(input, 'test.eth') + expect(input.value).toBe('test.eth') + }) + + it('renders with initial value', () => { + renderHashInput({ value: '0xInitial' }) + const input = screen.getByTestId('hash-input') as HTMLInputElement + expect(input.value).toBe('0xInitial') + }) + + it('calls onSearch with null when input is cleared', async () => { + const onSearch = vi.fn() + const { input } = renderHashInput({ onSearch }) + await userEvent.type(input, 'abc') + await userEvent.clear(input) + await waitFor(() => { + expect(onSearch).toHaveBeenLastCalledWith(null) + }) + }) + + it('calls onSearch with detection result after debounce', async () => { + const onSearch = vi.fn() + detectHashMock.mockResolvedValueOnce({ type: 'ENS', data: '0x123' }) + renderHashInput({ onSearch, debounceTime: 0 }) + const input = screen.getByTestId('hash-input') + await userEvent.type(input, 'vitalik.eth') + await waitFor(() => { + expect(onSearch).toHaveBeenCalledWith({ type: 'ENS', data: '0x123' }) + }) + }) + + it('calls onLoading(true) then onLoading(false) during search', async () => { + const onLoading = vi.fn() + let resolveDetect!: (v: unknown) => void + detectHashMock.mockImplementationOnce( + () => + new Promise((res) => { + resolveDetect = res + }), + ) + renderHashInput({ onLoading, debounceTime: 0 }) + const input = screen.getByTestId('hash-input') + await userEvent.type(input, 'q') + await waitFor(() => expect(onLoading).toHaveBeenCalledWith(true)) + resolveDetect({ type: null, data: null }) + await waitFor(() => expect(onLoading).toHaveBeenCalledWith(false)) + }) + + it('uses custom renderInput when provided', () => { render( {}} + onSearch={vi.fn()} + renderInput={(props) => ( + + )} /> , ) - - const input = screen.getByTestId('hash-input') - expect(input).not.toBeNull() - expect(input.tagName).toBe('INPUT') + expect(screen.getByTestId('custom-input')).toBeDefined() }) }) From 33e3ca302dff75f9cd16b17fb1f5cf35d9c466e2 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 23 Mar 2026 18:58:56 -0300 Subject: [PATCH 08/37] test: address review feedback on Tier 2 test suite - Rename misleading test names in BigNumberInput (onError absence test, maxUint256 constraint test) - Add beforeEach mock clear in HashInput to prevent cross-test contamination from unconsumed mockResolvedValueOnce calls - Add debounceTime: 0 to clear test to avoid real-timer dependency - Rename debounce test to accurately describe what it covers; fake-timer debounce testing conflicts with waitFor + userEvent in jsdom --- .../sharedComponents/BigNumberInput.test.tsx | 7 +++---- src/components/sharedComponents/HashInput.test.tsx | 14 +++++++++++--- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/components/sharedComponents/BigNumberInput.test.tsx b/src/components/sharedComponents/BigNumberInput.test.tsx index a28532d6..8659683d 100644 --- a/src/components/sharedComponents/BigNumberInput.test.tsx +++ b/src/components/sharedComponents/BigNumberInput.test.tsx @@ -94,7 +94,7 @@ describe('BigNumberInput', () => { expect(onError).toHaveBeenCalledWith(expect.objectContaining({ value: '5' })) }) - it('calls onError(null) is NOT called for valid values (no error clearing tested via absence)', async () => { + it('does not call onError for valid values', async () => { const onError = vi.fn() renderInput({ decimals: 0, max: BigInt(100), onError }) const input = screen.getByRole('textbox') @@ -114,11 +114,10 @@ describe('BigNumberInput', () => { expect(lastCall).toBe(BigInt(112)) }) - it('does not update on maxUint256 overflow', async () => { + it('does not call onError when value is within max constraint', async () => { const onError = vi.fn() renderInput({ decimals: 0, max: maxUint256, onError }) - // Typing an absurdly large number won't overflow since max = maxUint256 - // Just verify no onError for normal large numbers + // Large but valid number — well within maxUint256, so no error const input = screen.getByRole('textbox') await userEvent.type(input, '9999999') expect(onError).not.toHaveBeenCalled() diff --git a/src/components/sharedComponents/HashInput.test.tsx b/src/components/sharedComponents/HashInput.test.tsx index 0506e9ad..4d99df13 100644 --- a/src/components/sharedComponents/HashInput.test.tsx +++ b/src/components/sharedComponents/HashInput.test.tsx @@ -2,7 +2,7 @@ import { ChakraProvider, createSystem, defaultConfig } from '@chakra-ui/react' import { render, screen, waitFor } from '@testing-library/react' import userEvent from '@testing-library/user-event' import { mainnet } from 'viem/chains' -import { describe, expect, it, vi } from 'vitest' +import { beforeEach, describe, expect, it, vi } from 'vitest' import HashInput from './HashInput' const system = createSystem(defaultConfig) @@ -27,6 +27,11 @@ function renderHashInput(props: Partial> } describe('HashInput', () => { + beforeEach(() => { + detectHashMock.mockClear() + detectHashMock.mockResolvedValue({ type: 'EOA', data: '0xabc' }) + }) + it('renders without crashing', () => { const { input } = renderHashInput() expect(input).not.toBeNull() @@ -52,7 +57,8 @@ describe('HashInput', () => { it('calls onSearch with null when input is cleared', async () => { const onSearch = vi.fn() - const { input } = renderHashInput({ onSearch }) + // debounceTime: 0 to avoid relying on real timers for non-debounce behavior + const { input } = renderHashInput({ onSearch, debounceTime: 0 }) await userEvent.type(input, 'abc') await userEvent.clear(input) await waitFor(() => { @@ -60,7 +66,9 @@ describe('HashInput', () => { }) }) - it('calls onSearch with detection result after debounce', async () => { + it('calls onSearch with the detected result', async () => { + // debounceTime: 0 keeps the test fast; this covers the callback wiring, + // not the debounce delay itself (fake timers + waitFor + userEvent conflict in jsdom) const onSearch = vi.fn() detectHashMock.mockResolvedValueOnce({ type: 'ENS', data: '0x123' }) renderHashInput({ onSearch, debounceTime: 0 }) From 40e06d3e6aa2628f86a5ee20fe59fc5d52a00924 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 23 Mar 2026 20:52:46 -0300 Subject: [PATCH 09/37] test: address review feedback on Tier 1 test suite (round 2) - Use @/src/env alias import in env.test.ts (matches repo convention) - Rename 'checksummed zero address' test to 'zero address string literal' (no checksum casing difference in this value; name was misleading) --- src/env.test.ts | 2 +- src/utils/address.test.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/env.test.ts b/src/env.test.ts index 7abfc60f..07c3a923 100644 --- a/src/env.test.ts +++ b/src/env.test.ts @@ -4,7 +4,7 @@ import { describe, expect, it } from 'vitest' // env.ts reads import.meta.env at module load time. // Vitest loads .env.test automatically for the "test" mode, // so PUBLIC_APP_NAME, PUBLIC_SUBGRAPHS_*, etc. are set via .env.test. -import { env } from './env' +import { env } from '@/src/env' describe('env', () => { it('exposes PUBLIC_APP_NAME from test env', () => { diff --git a/src/utils/address.test.ts b/src/utils/address.test.ts index 6a49fd05..754488d8 100644 --- a/src/utils/address.test.ts +++ b/src/utils/address.test.ts @@ -19,8 +19,8 @@ describe('isNativeToken', () => { expect(isNativeToken(zeroAddress.toLowerCase())).toBe(true) }) - it('returns true for a checksummed zero address', () => { - // zeroAddress is already lowercase, but ensure uppercase hex still matches + it('returns true for the zero address string literal', () => { + // zeroAddress is already lowercase; the literal string is identical — testing the exact value expect(isNativeToken('0x0000000000000000000000000000000000000000')).toBe(true) }) From 543f5f4eda7e046ca75d471d82e08c985a0d3e6e Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 23 Mar 2026 20:55:34 -0300 Subject: [PATCH 10/37] test: import ComponentProps from react instead of using React namespace React global namespace is not available without explicit import; use named import from 'react' to avoid 'Cannot find namespace React' errors. --- src/components/sharedComponents/BigNumberInput.test.tsx | 3 ++- src/components/sharedComponents/HashInput.test.tsx | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/components/sharedComponents/BigNumberInput.test.tsx b/src/components/sharedComponents/BigNumberInput.test.tsx index 8659683d..03588853 100644 --- a/src/components/sharedComponents/BigNumberInput.test.tsx +++ b/src/components/sharedComponents/BigNumberInput.test.tsx @@ -1,6 +1,7 @@ import { ChakraProvider, createSystem, defaultConfig } from '@chakra-ui/react' import { render, screen } from '@testing-library/react' import userEvent from '@testing-library/user-event' +import type { ComponentProps } from 'react' import { maxUint256 } from 'viem' import { describe, expect, it, vi } from 'vitest' import { BigNumberInput } from './BigNumberInput' @@ -8,7 +9,7 @@ import { BigNumberInput } from './BigNumberInput' const system = createSystem(defaultConfig) function renderInput( - props: Partial> & { + props: Partial> & { onChange?: (v: bigint) => void } = {}, ) { diff --git a/src/components/sharedComponents/HashInput.test.tsx b/src/components/sharedComponents/HashInput.test.tsx index 4d99df13..34a8c3df 100644 --- a/src/components/sharedComponents/HashInput.test.tsx +++ b/src/components/sharedComponents/HashInput.test.tsx @@ -1,6 +1,7 @@ import { ChakraProvider, createSystem, defaultConfig } from '@chakra-ui/react' import { render, screen, waitFor } from '@testing-library/react' import userEvent from '@testing-library/user-event' +import type { ComponentProps } from 'react' import { mainnet } from 'viem/chains' import { beforeEach, describe, expect, it, vi } from 'vitest' import HashInput from './HashInput' @@ -12,7 +13,7 @@ vi.mock('@/src/utils/hash', () => ({ default: (...args: unknown[]) => detectHashMock(...args), })) -function renderHashInput(props: Partial> = {}) { +function renderHashInput(props: Partial> = {}) { const onSearch = props.onSearch ?? vi.fn() render( From 2b605b6595cf27a754aa385e2578476448b55f49 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 23 Mar 2026 17:25:10 -0300 Subject: [PATCH 11/37] test: add hook test coverage (Tier 3) - useWeb3Status.test.ts: 8 tests covering disconnected/connected state, isWalletSynced, switchingChain, disconnect, switchChain, appChainId - useWeb3StatusConnected.test.ts: 2 tests (co-located in same file) covering throw-on-disconnect and pass-through when connected - useErc20Balance.test.ts: 5 tests covering missing address/token, native token skip, successful balance fetch, and error handling - useTokenLists.test.ts: 4 tests covering return shape, deduplication, native token injection, and schema validation filtering --- src/hooks/useErc20Balance.test.ts | 82 ++++++++++++++++++ src/hooks/useTokenLists.test.ts | 136 ++++++++++++++++++++++++++++++ src/hooks/useWeb3Status.test.ts | 119 ++++++++++++++++++++++++++ 3 files changed, 337 insertions(+) create mode 100644 src/hooks/useErc20Balance.test.ts create mode 100644 src/hooks/useTokenLists.test.ts create mode 100644 src/hooks/useWeb3Status.test.ts diff --git a/src/hooks/useErc20Balance.test.ts b/src/hooks/useErc20Balance.test.ts new file mode 100644 index 00000000..28ff74ee --- /dev/null +++ b/src/hooks/useErc20Balance.test.ts @@ -0,0 +1,82 @@ +import type { Token } from '@/src/types/token' +import { QueryClient, QueryClientProvider } from '@tanstack/react-query' +import { renderHook, waitFor } from '@testing-library/react' +import type { ReactNode } from 'react' +import { createElement } from 'react' +import { zeroAddress } from 'viem' +import { describe, expect, it, vi } from 'vitest' +import { useErc20Balance } from './useErc20Balance' + +const mockReadContract = vi.fn() + +vi.mock('wagmi', () => ({ + usePublicClient: vi.fn(() => ({ + readContract: mockReadContract, + })), +})) + +vi.mock('@/src/env', () => ({ + env: { PUBLIC_NATIVE_TOKEN_ADDRESS: zeroAddress.toLowerCase() }, +})) + +const wrapper = ({ children }: { children: ReactNode }) => + createElement( + QueryClientProvider, + { client: new QueryClient({ defaultOptions: { queries: { retry: false } } }) }, + children, + ) + +const mockToken: Token = { + address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', + chainId: 1, + decimals: 6, + name: 'USD Coin', + symbol: 'USDC', +} + +const walletAddress = '0x71C7656EC7ab88b098defB751B7401B5f6d8976F' as `0x${string}` + +describe('useErc20Balance', () => { + it('returns undefined balance when address is missing', () => { + const { result } = renderHook(() => useErc20Balance({ token: mockToken }), { wrapper }) + expect(result.current.balance).toBeUndefined() + expect(result.current.isLoadingBalance).toBe(false) + }) + + it('returns undefined balance when token is missing', () => { + const { result } = renderHook(() => useErc20Balance({ address: walletAddress }), { wrapper }) + expect(result.current.balance).toBeUndefined() + expect(result.current.isLoadingBalance).toBe(false) + }) + + it('does not fetch balance for native token address', () => { + const nativeToken: Token = { ...mockToken, address: zeroAddress } + const { result } = renderHook( + () => useErc20Balance({ address: walletAddress, token: nativeToken }), + { wrapper }, + ) + expect(mockReadContract).not.toHaveBeenCalled() + expect(result.current.isLoadingBalance).toBe(false) + }) + + it('returns balance when query resolves', async () => { + mockReadContract.mockResolvedValueOnce(BigInt(1_000_000)) + const { result } = renderHook( + () => useErc20Balance({ address: walletAddress, token: mockToken }), + { wrapper }, + ) + await waitFor(() => expect(result.current.isLoadingBalance).toBe(false)) + expect(result.current.balance).toBe(BigInt(1_000_000)) + expect(result.current.balanceError).toBeNull() + }) + + it('returns error when query fails', async () => { + mockReadContract.mockRejectedValueOnce(new Error('RPC error')) + const { result } = renderHook( + () => useErc20Balance({ address: walletAddress, token: mockToken }), + { wrapper }, + ) + await waitFor(() => expect(result.current.balanceError).toBeTruthy()) + expect(result.current.balance).toBeUndefined() + }) +}) diff --git a/src/hooks/useTokenLists.test.ts b/src/hooks/useTokenLists.test.ts new file mode 100644 index 00000000..bb8ddc0f --- /dev/null +++ b/src/hooks/useTokenLists.test.ts @@ -0,0 +1,136 @@ +import type { Token } from '@/src/types/token' +import tokenListsCache, { updateTokenListsCache } from '@/src/utils/tokenListsCache' +import { QueryClient, QueryClientProvider } from '@tanstack/react-query' +import { renderHook } from '@testing-library/react' +import { createElement } from 'react' +import type { ReactNode } from 'react' +import { zeroAddress } from 'viem' +import { beforeEach, describe, expect, it, vi } from 'vitest' + +vi.mock('@/src/utils/tokenListsCache', () => { + const cache = { tokens: [] as Token[], tokensByChainId: {} as Record } + return { + default: cache, + updateTokenListsCache: vi.fn((map: typeof cache) => { + cache.tokens = map.tokens + cache.tokensByChainId = map.tokensByChainId + }), + addTokenToTokenList: vi.fn(), + } +}) + +vi.mock('@/src/env', () => ({ + env: { + PUBLIC_NATIVE_TOKEN_ADDRESS: zeroAddress.toLowerCase(), + PUBLIC_USE_DEFAULT_TOKENS: false, + }, +})) + +vi.mock('@/src/constants/tokenLists', () => ({ + tokenLists: {}, +})) + +vi.mock('@tanstack/react-query', async (importActual) => { + const actual = await importActual() + return { ...actual, useSuspenseQueries: vi.fn() } +}) + +import * as tanstackQuery from '@tanstack/react-query' +import { useTokenLists } from './useTokenLists' + +const mockToken1: Token = { + address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', + chainId: 1, + decimals: 6, + name: 'USD Coin', + symbol: 'USDC', +} +const mockToken2: Token = { + address: '0xdAC17F958D2ee523a2206206994597C13D831ec7', + chainId: 1, + decimals: 6, + name: 'Tether USD', + symbol: 'USDT', +} + +const mockSuspenseQueryResult = (tokens: Token[]) => ({ + data: { name: 'Mock List', timestamp: '', version: { major: 1, minor: 0, patch: 0 }, tokens }, + isLoading: false, + isSuccess: true, + error: null, +}) + +const wrapper = ({ children }: { children: ReactNode }) => + createElement(QueryClientProvider, { client: new QueryClient() }, children) + +beforeEach(() => { + // Reset cache between tests + tokenListsCache.tokens = [] + tokenListsCache.tokensByChainId = {} + vi.mocked(updateTokenListsCache).mockImplementation((map) => { + tokenListsCache.tokens = map.tokens + tokenListsCache.tokensByChainId = map.tokensByChainId + }) +}) + +describe('useTokenLists', () => { + it('returns tokens and tokensByChainId', () => { + vi.mocked(tanstackQuery.useSuspenseQueries).mockReturnValueOnce( + // biome-ignore lint/suspicious/noExplicitAny: mocking overloaded hook return type + { tokens: [mockToken1], tokensByChainId: { 1: [mockToken1] } } as any, + ) + + const { result } = renderHook(() => useTokenLists(), { wrapper }) + expect(result.current.tokens).toBeDefined() + expect(result.current.tokensByChainId).toBeDefined() + }) + + it('deduplicates tokens with the same chainId and address', () => { + // biome-ignore lint/suspicious/noExplicitAny: mocking internal combine param + vi.mocked(tanstackQuery.useSuspenseQueries).mockImplementation(({ combine }: any) => { + const results = [ + mockSuspenseQueryResult([mockToken1, mockToken2]), + mockSuspenseQueryResult([{ ...mockToken1 }]), // duplicate + ] + return combine(results) + }) + + const { result } = renderHook(() => useTokenLists(), { wrapper }) + const erc20Tokens = result.current.tokens.filter((t) => t.address !== zeroAddress.toLowerCase()) + expect(erc20Tokens).toHaveLength(2) + expect(erc20Tokens.map((t) => t.symbol)).toContain('USDC') + expect(erc20Tokens.map((t) => t.symbol)).toContain('USDT') + }) + + it('injects a native ETH token for mainnet (chainId 1) tokens', () => { + vi.mocked(tanstackQuery.useSuspenseQueries).mockImplementation( + // biome-ignore lint/suspicious/noExplicitAny: mocking internal combine param + ({ combine }: any) => combine([mockSuspenseQueryResult([mockToken1])]), + ) + + const { result } = renderHook(() => useTokenLists(), { wrapper }) + const nativeToken = result.current.tokensByChainId[1]?.[0] + expect(nativeToken?.address).toBe(zeroAddress.toLowerCase()) + expect(nativeToken?.symbol).toBe('ETH') + }) + + it('filters out tokens that fail schema validation', () => { + // biome-ignore lint/suspicious/noExplicitAny: mocking internal combine param + vi.mocked(tanstackQuery.useSuspenseQueries).mockImplementation(({ combine }: any) => { + const invalidToken = { + address: 'not-an-address', + chainId: 1, + name: 'Bad', + symbol: 'BAD', + decimals: 18, + } + // biome-ignore lint/suspicious/noExplicitAny: intentionally testing invalid token input + return combine([mockSuspenseQueryResult([mockToken1, invalidToken as any])]) + }) + + const { result } = renderHook(() => useTokenLists(), { wrapper }) + const erc20Tokens = result.current.tokens.filter((t) => t.address !== zeroAddress.toLowerCase()) + expect(erc20Tokens).toHaveLength(1) + expect(erc20Tokens[0].symbol).toBe('USDC') + }) +}) diff --git a/src/hooks/useWeb3Status.test.ts b/src/hooks/useWeb3Status.test.ts new file mode 100644 index 00000000..83e2a208 --- /dev/null +++ b/src/hooks/useWeb3Status.test.ts @@ -0,0 +1,119 @@ +import { renderHook } from '@testing-library/react' +import { describe, expect, it, vi } from 'vitest' +import { useWeb3Status, useWeb3StatusConnected } from './useWeb3Status' + +const mockDisconnect = vi.fn() +const mockSwitchChain = vi.fn() + +vi.mock('wagmi', () => ({ + useAccount: vi.fn(() => ({ + address: undefined, + chainId: undefined, + isConnected: false, + isConnecting: false, + })), + useChainId: vi.fn(() => 1), + useSwitchChain: vi.fn(() => ({ isPending: false, switchChain: mockSwitchChain })), + usePublicClient: vi.fn(() => undefined), + useWalletClient: vi.fn(() => ({ data: undefined })), + useBalance: vi.fn(() => ({ data: undefined })), + useDisconnect: vi.fn(() => ({ disconnect: mockDisconnect })), +})) + +import * as wagmi from 'wagmi' + +type MockAccount = ReturnType +type MockSwitchChain = ReturnType + +describe('useWeb3Status', () => { + it('returns disconnected state when no wallet connected', () => { + const { result } = renderHook(() => useWeb3Status()) + expect(result.current.isWalletConnected).toBe(false) + expect(result.current.address).toBeUndefined() + expect(result.current.walletChainId).toBeUndefined() + }) + + it('returns connected state with wallet address', () => { + const mock = { + address: '0xabc123' as `0x${string}`, + chainId: 1, + isConnected: true, + isConnecting: false, + } as unknown as MockAccount + vi.mocked(wagmi.useAccount).mockReturnValueOnce(mock) + const { result } = renderHook(() => useWeb3Status()) + expect(result.current.isWalletConnected).toBe(true) + expect(result.current.address).toBe('0xabc123') + }) + + it('sets isWalletSynced true when wallet chainId matches app chainId', () => { + const mock = { + address: '0xabc123' as `0x${string}`, + chainId: 1, + isConnected: true, + isConnecting: false, + } as unknown as MockAccount + vi.mocked(wagmi.useAccount).mockReturnValueOnce(mock) + vi.mocked(wagmi.useChainId).mockReturnValueOnce(1) + const { result } = renderHook(() => useWeb3Status()) + expect(result.current.isWalletSynced).toBe(true) + }) + + it('sets isWalletSynced false when wallet chainId differs from app chainId', () => { + const mock = { + address: '0xabc123' as `0x${string}`, + chainId: 137, + isConnected: true, + isConnecting: false, + } as unknown as MockAccount + vi.mocked(wagmi.useAccount).mockReturnValueOnce(mock) + vi.mocked(wagmi.useChainId).mockReturnValueOnce(1) + const { result } = renderHook(() => useWeb3Status()) + expect(result.current.isWalletSynced).toBe(false) + }) + + it('sets switchingChain when useSwitchChain is pending', () => { + const mock = { isPending: true, switchChain: mockSwitchChain } as unknown as MockSwitchChain + vi.mocked(wagmi.useSwitchChain).mockReturnValueOnce(mock) + const { result } = renderHook(() => useWeb3Status()) + expect(result.current.switchingChain).toBe(true) + }) + + it('exposes disconnect function', () => { + const { result } = renderHook(() => useWeb3Status()) + result.current.disconnect() + expect(mockDisconnect).toHaveBeenCalled() + }) + + it('calls switchChain with chainId when switchChain action is invoked', () => { + const { result } = renderHook(() => useWeb3Status()) + result.current.switchChain(137) + expect(mockSwitchChain).toHaveBeenCalledWith({ chainId: 137 }) + }) + + it('exposes appChainId from useChainId', () => { + vi.mocked(wagmi.useChainId).mockReturnValueOnce(42161) + const { result } = renderHook(() => useWeb3Status()) + expect(result.current.appChainId).toBe(42161) + }) +}) + +describe('useWeb3StatusConnected', () => { + it('throws when wallet is not connected', () => { + expect(() => renderHook(() => useWeb3StatusConnected())).toThrow( + 'Use useWeb3StatusConnected only when a wallet is connected', + ) + }) + + it('returns status when wallet is connected', () => { + const mock = { + address: '0xdeadbeef' as `0x${string}`, + chainId: 1, + isConnected: true, + isConnecting: false, + } as unknown as MockAccount + vi.mocked(wagmi.useAccount).mockReturnValue(mock) + const { result } = renderHook(() => useWeb3StatusConnected()) + expect(result.current.isWalletConnected).toBe(true) + }) +}) From d6ced762232baf4ef29715a4c381ee9732496990 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 23 Mar 2026 18:59:40 -0300 Subject: [PATCH 12/37] test: address review feedback on Tier 3 hook test suite - Add beforeEach mock clearing in useWeb3Status to prevent shared mock call history leaking between tests - Switch mockReturnValue to mockReturnValueOnce for the connected test in useWeb3StatusConnected (hook calls useWeb3Status twice internally) - Add beforeEach mockReadContract.mockClear() in useErc20Balance to prevent cross-test false negatives on not.toHaveBeenCalled assertions --- src/hooks/useErc20Balance.test.ts | 6 +++++- src/hooks/useWeb3Status.test.ts | 10 ++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/hooks/useErc20Balance.test.ts b/src/hooks/useErc20Balance.test.ts index 28ff74ee..04b3f033 100644 --- a/src/hooks/useErc20Balance.test.ts +++ b/src/hooks/useErc20Balance.test.ts @@ -4,7 +4,7 @@ import { renderHook, waitFor } from '@testing-library/react' import type { ReactNode } from 'react' import { createElement } from 'react' import { zeroAddress } from 'viem' -import { describe, expect, it, vi } from 'vitest' +import { beforeEach, describe, expect, it, vi } from 'vitest' import { useErc20Balance } from './useErc20Balance' const mockReadContract = vi.fn() @@ -37,6 +37,10 @@ const mockToken: Token = { const walletAddress = '0x71C7656EC7ab88b098defB751B7401B5f6d8976F' as `0x${string}` describe('useErc20Balance', () => { + beforeEach(() => { + mockReadContract.mockClear() + }) + it('returns undefined balance when address is missing', () => { const { result } = renderHook(() => useErc20Balance({ token: mockToken }), { wrapper }) expect(result.current.balance).toBeUndefined() diff --git a/src/hooks/useWeb3Status.test.ts b/src/hooks/useWeb3Status.test.ts index 83e2a208..ab31f452 100644 --- a/src/hooks/useWeb3Status.test.ts +++ b/src/hooks/useWeb3Status.test.ts @@ -1,5 +1,5 @@ import { renderHook } from '@testing-library/react' -import { describe, expect, it, vi } from 'vitest' +import { beforeEach, describe, expect, it, vi } from 'vitest' import { useWeb3Status, useWeb3StatusConnected } from './useWeb3Status' const mockDisconnect = vi.fn() @@ -26,6 +26,11 @@ type MockAccount = ReturnType type MockSwitchChain = ReturnType describe('useWeb3Status', () => { + beforeEach(() => { + mockDisconnect.mockClear() + mockSwitchChain.mockClear() + }) + it('returns disconnected state when no wallet connected', () => { const { result } = renderHook(() => useWeb3Status()) expect(result.current.isWalletConnected).toBe(false) @@ -112,7 +117,8 @@ describe('useWeb3StatusConnected', () => { isConnected: true, isConnecting: false, } as unknown as MockAccount - vi.mocked(wagmi.useAccount).mockReturnValue(mock) + // useWeb3StatusConnected calls useWeb3Status twice; both calls must see connected state + vi.mocked(wagmi.useAccount).mockReturnValueOnce(mock).mockReturnValueOnce(mock) const { result } = renderHook(() => useWeb3StatusConnected()) expect(result.current.isWalletConnected).toBe(true) }) From 7bda650bb0b4e3e344d336d8c2009b2f88534b14 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 23 Mar 2026 17:39:28 -0300 Subject: [PATCH 13/37] test: add component test coverage (Tier 4) New tests for shared components and utilities: - TokenLogo: img src/alt/size, IPFS URL conversion, placeholder on error - TransactionButton: wallet states, pending label, onMined callback - SwitchNetwork: network display, disabled state, menu item rendering - WalletStatusVerifier: connect fallback, wrong chain, synced renders children - withWalletStatusVerifier HOC: fallback and pass-through behavior - withSuspense/withSuspenseAndRetry: Suspense fallback, error message, retry Also adds: - ResizeObserver mock to setupTests.ts (required by @floating-ui in jsdom) - .env.test and src/test-utils.tsx (shared test utilities from tier 1) --- setupTests.ts | 9 +- .../sharedComponents/SwitchNetwork.test.tsx | 115 ++++++++++++++ .../sharedComponents/TokenLogo.test.tsx | 75 +++++++++ .../TransactionButton.test.tsx | 142 ++++++++++++++++++ .../WalletStatusVerifier.test.tsx | 121 +++++++++++++++ src/utils/suspenseWrapper.test.tsx | 115 ++++++++++++++ 6 files changed, 576 insertions(+), 1 deletion(-) create mode 100644 src/components/sharedComponents/SwitchNetwork.test.tsx create mode 100644 src/components/sharedComponents/TokenLogo.test.tsx create mode 100644 src/components/sharedComponents/TransactionButton.test.tsx create mode 100644 src/components/sharedComponents/WalletStatusVerifier.test.tsx create mode 100644 src/utils/suspenseWrapper.test.tsx diff --git a/setupTests.ts b/setupTests.ts index a55b20e6..f70a3b90 100644 --- a/setupTests.ts +++ b/setupTests.ts @@ -1,9 +1,16 @@ import * as matchers from '@testing-library/jest-dom/matchers' import { cleanup } from '@testing-library/react' -import { afterEach, expect } from 'vitest' +import { afterEach, expect, vi } from 'vitest' expect.extend(matchers) +// ResizeObserver is not implemented in jsdom but required by @floating-ui (Chakra menus/popovers) +global.ResizeObserver = vi.fn().mockImplementation(() => ({ + observe: vi.fn(), + unobserve: vi.fn(), + disconnect: vi.fn(), +})) + afterEach(() => { cleanup() }) diff --git a/src/components/sharedComponents/SwitchNetwork.test.tsx b/src/components/sharedComponents/SwitchNetwork.test.tsx new file mode 100644 index 00000000..edbe1408 --- /dev/null +++ b/src/components/sharedComponents/SwitchNetwork.test.tsx @@ -0,0 +1,115 @@ +import { ChakraProvider, createSystem, defaultConfig } from '@chakra-ui/react' +import { fireEvent, render, screen, waitFor } from '@testing-library/react' +import { describe, expect, it, vi } from 'vitest' +import SwitchNetwork, { type Networks } from './SwitchNetwork' + +const system = createSystem(defaultConfig) + +vi.mock('@/src/hooks/useWeb3Status', () => ({ + useWeb3Status: vi.fn(), +})) + +vi.mock('wagmi', () => ({ + useSwitchChain: vi.fn(), +})) + +import * as useWeb3StatusModule from '@/src/hooks/useWeb3Status' +import * as wagmiModule from 'wagmi' + +const mockNetworks: Networks = [ + { id: 1, label: 'Ethereum', icon: ETH }, + { id: 137, label: 'Polygon', icon: MATIC }, +] + +function defaultWeb3Status(overrides = {}) { + return { + isWalletConnected: true, + walletChainId: undefined as number | undefined, + walletClient: undefined, + ...overrides, + } +} + +function defaultSwitchChain() { + return { + chains: [ + { id: 1, name: 'Ethereum' }, + { id: 137, name: 'Polygon' }, + ], + switchChain: vi.fn(), + } +} + +function renderSwitchNetwork(networks = mockNetworks) { + return render( + + + , + ) +} + +describe('SwitchNetwork', () => { + it('shows "Select a network" when wallet chain does not match any network', () => { + vi.mocked(useWeb3StatusModule.useWeb3Status).mockReturnValue( + // biome-ignore lint/suspicious/noExplicitAny: partial mock + defaultWeb3Status({ walletChainId: 999 }) as any, + ) + vi.mocked(wagmiModule.useSwitchChain).mockReturnValue( + // biome-ignore lint/suspicious/noExplicitAny: partial mock + defaultSwitchChain() as any, + ) + renderSwitchNetwork() + expect(screen.getByText('Select a network')).toBeDefined() + }) + + it('shows current network label when wallet is on a listed chain', async () => { + vi.mocked(useWeb3StatusModule.useWeb3Status).mockReturnValue( + // biome-ignore lint/suspicious/noExplicitAny: partial mock + defaultWeb3Status({ walletChainId: 1 }) as any, + ) + vi.mocked(wagmiModule.useSwitchChain).mockReturnValue( + // biome-ignore lint/suspicious/noExplicitAny: partial mock + defaultSwitchChain() as any, + ) + renderSwitchNetwork() + expect(screen.getByText('Ethereum')).toBeDefined() + }) + + it('trigger button is disabled when wallet not connected', () => { + vi.mocked(useWeb3StatusModule.useWeb3Status).mockReturnValue( + // biome-ignore lint/suspicious/noExplicitAny: partial mock + defaultWeb3Status({ isWalletConnected: false }) as any, + ) + vi.mocked(wagmiModule.useSwitchChain).mockReturnValue( + // biome-ignore lint/suspicious/noExplicitAny: partial mock + defaultSwitchChain() as any, + ) + renderSwitchNetwork() + const button = screen.getByRole('button') + expect(button).toBeDefined() + expect(button.hasAttribute('disabled') || button.getAttribute('data-disabled') !== null).toBe( + true, + ) + }) + + it('shows all network options in the menu after opening it', async () => { + vi.mocked(useWeb3StatusModule.useWeb3Status).mockReturnValue( + // biome-ignore lint/suspicious/noExplicitAny: partial mock + defaultWeb3Status({ isWalletConnected: true }) as any, + ) + vi.mocked(wagmiModule.useSwitchChain).mockReturnValue( + // biome-ignore lint/suspicious/noExplicitAny: partial mock + defaultSwitchChain() as any, + ) + renderSwitchNetwork() + + // Open the menu by clicking the trigger + const trigger = screen.getByRole('button') + fireEvent.click(trigger) + + await waitFor(() => { + expect(screen.getByText('Ethereum')).toBeDefined() + expect(screen.getByText('Polygon')).toBeDefined() + }) + }) +}) diff --git a/src/components/sharedComponents/TokenLogo.test.tsx b/src/components/sharedComponents/TokenLogo.test.tsx new file mode 100644 index 00000000..b71166ed --- /dev/null +++ b/src/components/sharedComponents/TokenLogo.test.tsx @@ -0,0 +1,75 @@ +import type { Token } from '@/src/types/token' +import { ChakraProvider, createSystem, defaultConfig } from '@chakra-ui/react' +import { fireEvent, render, screen } from '@testing-library/react' +import { describe, expect, it } from 'vitest' +import TokenLogo from './TokenLogo' + +const system = createSystem(defaultConfig) + +const mockToken: Token = { + address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', + chainId: 1, + decimals: 6, + name: 'USD Coin', + symbol: 'USDC', + logoURI: 'https://example.com/usdc.png', +} + +const tokenWithoutLogo: Token = { + ...mockToken, + logoURI: undefined, +} + +function renderTokenLogo(token: Token, size?: number) { + return render( + + + , + ) +} + +describe('TokenLogo', () => { + it('renders an img with correct src when logoURI is present', () => { + renderTokenLogo(mockToken) + const img = screen.getByRole('img') + expect(img).toBeDefined() + expect(img.getAttribute('src')).toBe(mockToken.logoURI) + }) + + it('renders an img with correct alt text', () => { + renderTokenLogo(mockToken) + const img = screen.getByAltText('USD Coin') + expect(img).toBeDefined() + }) + + it('applies correct width and height from size prop', () => { + renderTokenLogo(mockToken, 48) + const img = screen.getByRole('img') + expect(img.getAttribute('width')).toBe('48') + expect(img.getAttribute('height')).toBe('48') + }) + + it('renders placeholder with token symbol initial when no logoURI', () => { + renderTokenLogo(tokenWithoutLogo) + expect(screen.queryByRole('img')).toBeNull() + expect(screen.getByText('U')).toBeDefined() // first char of 'USDC' + }) + + it('renders placeholder when img fails to load', () => { + renderTokenLogo(mockToken) + const img = screen.getByRole('img') + fireEvent.error(img) + expect(screen.queryByRole('img')).toBeNull() + expect(screen.getByText('U')).toBeDefined() + }) + + it('converts ipfs:// URLs to https://ipfs.io gateway URLs', () => { + const ipfsToken: Token = { ...mockToken, logoURI: 'ipfs://QmHash123' } + renderTokenLogo(ipfsToken) + const img = screen.getByRole('img') + expect(img.getAttribute('src')).toBe('https://ipfs.io/ipfs/QmHash123') + }) +}) diff --git a/src/components/sharedComponents/TransactionButton.test.tsx b/src/components/sharedComponents/TransactionButton.test.tsx new file mode 100644 index 00000000..d15ff916 --- /dev/null +++ b/src/components/sharedComponents/TransactionButton.test.tsx @@ -0,0 +1,142 @@ +import { ChakraProvider, createSystem, defaultConfig } from '@chakra-ui/react' +import { fireEvent, render, screen, waitFor } from '@testing-library/react' +import { describe, expect, it, vi } from 'vitest' +import TransactionButton from './TransactionButton' + +const system = createSystem(defaultConfig) + +vi.mock('@/src/hooks/useWeb3Status', () => ({ + useWeb3Status: vi.fn(), +})) + +vi.mock('@/src/providers/TransactionNotificationProvider', () => ({ + useTransactionNotification: vi.fn(() => ({ + watchTx: vi.fn(), + watchHash: vi.fn(), + watchSignature: vi.fn(), + })), +})) + +vi.mock('wagmi', () => ({ + useWaitForTransactionReceipt: vi.fn(() => ({ data: undefined })), +})) + +vi.mock('@/src/providers/Web3Provider', () => ({ + ConnectWalletButton: () => , +})) + +import * as useWeb3StatusModule from '@/src/hooks/useWeb3Status' +import * as wagmiModule from 'wagmi' + +// chains[0] = optimismSepolia (id: 11155420) when PUBLIC_INCLUDE_TESTNETS=true (default) +const OP_SEPOLIA_ID = 11155420 as const + +function connectedStatus() { + return { + isWalletConnected: true, + isWalletSynced: true, + walletChainId: OP_SEPOLIA_ID, + appChainId: OP_SEPOLIA_ID, + address: '0x1234567890abcdef1234567890abcdef12345678' as `0x${string}`, + balance: undefined, + connectingWallet: false, + switchingChain: false, + walletClient: undefined, + readOnlyClient: undefined, + switchChain: vi.fn(), + disconnect: vi.fn(), + } +} + +// biome-ignore lint/suspicious/noExplicitAny: test helper accepts flexible props +function renderButton(props: any = {}) { + return render( + + Promise.resolve('0x1' as `0x${string}`)} + {...props} + /> + , + ) +} + +describe('TransactionButton', () => { + it('renders fallback when wallet not connected', () => { + vi.mocked(useWeb3StatusModule.useWeb3Status).mockReturnValue({ + ...connectedStatus(), + isWalletConnected: false, + isWalletSynced: false, + }) + renderButton() + expect(screen.getByText('Connect Wallet')).toBeDefined() + }) + + it('renders switch chain button when wallet is on wrong chain', () => { + vi.mocked(useWeb3StatusModule.useWeb3Status).mockReturnValue({ + ...connectedStatus(), + isWalletSynced: false, + walletChainId: 1, + }) + renderButton() + expect(screen.getByRole('button').textContent?.toLowerCase()).toContain('switch to') + }) + + it('renders with default label when wallet is connected and synced', () => { + vi.mocked(useWeb3StatusModule.useWeb3Status).mockReturnValue(connectedStatus()) + vi.mocked(wagmiModule.useWaitForTransactionReceipt).mockReturnValue({ + data: undefined, + } as ReturnType) + renderButton() + expect(screen.getByText('Send Transaction')).toBeDefined() + }) + + it('renders with custom children label', () => { + vi.mocked(useWeb3StatusModule.useWeb3Status).mockReturnValue(connectedStatus()) + vi.mocked(wagmiModule.useWaitForTransactionReceipt).mockReturnValue({ + data: undefined, + } as ReturnType) + renderButton({ children: 'Deposit ETH' }) + expect(screen.getByText('Deposit ETH')).toBeDefined() + }) + + it('shows labelSending while transaction is pending', async () => { + vi.mocked(useWeb3StatusModule.useWeb3Status).mockReturnValue(connectedStatus()) + vi.mocked(wagmiModule.useWaitForTransactionReceipt).mockReturnValue({ + data: undefined, + } as ReturnType) + + const neverResolves = () => new Promise<`0x${string}`>(() => {}) + renderButton({ transaction: neverResolves, labelSending: 'Processing...' }) + + expect(screen.getByRole('button').textContent).not.toContain('Processing...') + + fireEvent.click(screen.getByRole('button')) + + await waitFor(() => { + expect(screen.getByRole('button').textContent).toContain('Processing...') + }) + }) + + it('calls onMined when receipt becomes available', async () => { + // biome-ignore lint/suspicious/noExplicitAny: mock receipt shape + const mockReceipt = { status: 'success', transactionHash: '0x1' } as any + const onMined = vi.fn() + + vi.mocked(useWeb3StatusModule.useWeb3Status).mockReturnValue(connectedStatus()) + // Return receipt immediately so effect fires once isPending=true + vi.mocked(wagmiModule.useWaitForTransactionReceipt).mockReturnValue({ + data: mockReceipt, + } as ReturnType) + + renderButton({ + transaction: () => Promise.resolve('0x1' as `0x${string}`), + onMined, + }) + + fireEvent.click(screen.getByRole('button')) + + await waitFor(() => { + expect(onMined).toHaveBeenCalledWith(mockReceipt) + }) + }) +}) diff --git a/src/components/sharedComponents/WalletStatusVerifier.test.tsx b/src/components/sharedComponents/WalletStatusVerifier.test.tsx new file mode 100644 index 00000000..bd7d75ed --- /dev/null +++ b/src/components/sharedComponents/WalletStatusVerifier.test.tsx @@ -0,0 +1,121 @@ +import { ChakraProvider, createSystem, defaultConfig } from '@chakra-ui/react' +import { render, screen } from '@testing-library/react' +import { describe, expect, it, vi } from 'vitest' +import { WalletStatusVerifier, withWalletStatusVerifier } from './WalletStatusVerifier' + +const system = createSystem(defaultConfig) + +vi.mock('@/src/hooks/useWeb3Status', () => ({ + useWeb3Status: vi.fn(), +})) + +vi.mock('@/src/providers/Web3Provider', () => ({ + ConnectWalletButton: () => , +})) + +import * as useWeb3StatusModule from '@/src/hooks/useWeb3Status' + +// chains[0] = optimismSepolia (id: 11155420) when PUBLIC_INCLUDE_TESTNETS=true (default) +const OP_SEPOLIA_ID = 11155420 as const + +function connectedSyncedStatus(overrides = {}) { + return { + isWalletConnected: true, + isWalletSynced: true, + walletChainId: OP_SEPOLIA_ID, + appChainId: OP_SEPOLIA_ID, + switchChain: vi.fn(), + disconnect: vi.fn(), + address: '0x1234567890abcdef1234567890abcdef12345678' as `0x${string}`, + balance: undefined, + connectingWallet: false, + switchingChain: false, + walletClient: undefined, + readOnlyClient: undefined, + ...overrides, + } +} + +function wrap(ui: React.ReactElement) { + return render({ui}) +} + +describe('WalletStatusVerifier', () => { + it('renders default ConnectWalletButton fallback when wallet not connected', () => { + vi.mocked(useWeb3StatusModule.useWeb3Status).mockReturnValue( + // biome-ignore lint/suspicious/noExplicitAny: partial mock + connectedSyncedStatus({ isWalletConnected: false, isWalletSynced: false }) as any, + ) + wrap( + +
Protected Content
+
, + ) + expect(screen.getByText('Connect Wallet')).toBeDefined() + expect(screen.queryByText('Protected Content')).toBeNull() + }) + + it('renders custom fallback when wallet not connected', () => { + vi.mocked(useWeb3StatusModule.useWeb3Status).mockReturnValue( + // biome-ignore lint/suspicious/noExplicitAny: partial mock + connectedSyncedStatus({ isWalletConnected: false, isWalletSynced: false }) as any, + ) + wrap( + Custom Fallback}> +
Protected Content
+
, + ) + expect(screen.getByText('Custom Fallback')).toBeDefined() + }) + + it('renders switch chain button when wallet is on wrong chain', () => { + vi.mocked(useWeb3StatusModule.useWeb3Status).mockReturnValue( + // biome-ignore lint/suspicious/noExplicitAny: partial mock + connectedSyncedStatus({ isWalletSynced: false, walletChainId: 1 }) as any, + ) + wrap( + +
Protected Content
+
, + ) + expect(screen.getByRole('button').textContent?.toLowerCase()).toContain('switch to') + expect(screen.queryByText('Protected Content')).toBeNull() + }) + + it('renders children when wallet is connected and synced', () => { + vi.mocked(useWeb3StatusModule.useWeb3Status).mockReturnValue( + // biome-ignore lint/suspicious/noExplicitAny: partial mock + connectedSyncedStatus() as any, + ) + wrap( + +
Protected Content
+
, + ) + expect(screen.getByText('Protected Content')).toBeDefined() + }) +}) + +describe('withWalletStatusVerifier HOC', () => { + const ProtectedComponent = () =>
Protected Component
+ const Wrapped = withWalletStatusVerifier(ProtectedComponent) + + it('renders fallback when wallet not connected', () => { + vi.mocked(useWeb3StatusModule.useWeb3Status).mockReturnValue( + // biome-ignore lint/suspicious/noExplicitAny: partial mock + connectedSyncedStatus({ isWalletConnected: false, isWalletSynced: false }) as any, + ) + wrap() + expect(screen.getByText('Connect Wallet')).toBeDefined() + expect(screen.queryByText('Protected Component')).toBeNull() + }) + + it('renders wrapped component when wallet is connected and synced', () => { + vi.mocked(useWeb3StatusModule.useWeb3Status).mockReturnValue( + // biome-ignore lint/suspicious/noExplicitAny: partial mock + connectedSyncedStatus() as any, + ) + wrap() + expect(screen.getByText('Protected Component')).toBeDefined() + }) +}) diff --git a/src/utils/suspenseWrapper.test.tsx b/src/utils/suspenseWrapper.test.tsx new file mode 100644 index 00000000..a130d244 --- /dev/null +++ b/src/utils/suspenseWrapper.test.tsx @@ -0,0 +1,115 @@ +import { ChakraProvider, createSystem, defaultConfig } from '@chakra-ui/react' +import { QueryClient, QueryClientProvider } from '@tanstack/react-query' +import { fireEvent, render, screen, waitFor } from '@testing-library/react' +import type { ReactNode } from 'react' +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' +import { withSuspense, withSuspenseAndRetry } from './suspenseWrapper' + +const system = createSystem(defaultConfig) + +// Silence expected React error boundary console.errors +beforeEach(() => { + vi.spyOn(console, 'error').mockImplementation(() => {}) +}) +afterEach(() => { + vi.restoreAllMocks() +}) + +function wrap(ui: ReactNode, withQuery = false) { + const queryClient = new QueryClient({ defaultOptions: { queries: { retry: false } } }) + const inner = withQuery ? ( + {ui} + ) : ( + ui + ) + return render({inner}) +} + +const NormalComponent = () =>
Normal Content
+const SuspendedComponent = () => { + // eslint-disable-next-line @typescript-eslint/no-throw-literal + throw new Promise(() => {}) +} + +function makeErrorComponent(message: string) { + return function ErrorComponent() { + throw new Error(message) + } +} + +describe('withSuspense', () => { + it('renders the wrapped component when no error or suspension', () => { + const Wrapped = withSuspense(NormalComponent) + wrap() + expect(screen.getByText('Normal Content')).toBeDefined() + }) + + it('shows custom suspense fallback while component is suspended', () => { + const Wrapped = withSuspense(SuspendedComponent) + wrap(Loading...} />) + expect(screen.getByText('Loading...')).toBeDefined() + }) + + it('shows default error message when component throws', async () => { + const Wrapped = withSuspense(makeErrorComponent('boom')) + wrap() + await waitFor(() => { + expect(screen.getByText('Something went wrong...')).toBeDefined() + }) + }) + + it('shows custom errorFallback text when provided', async () => { + const Wrapped = withSuspense(makeErrorComponent('boom')) + wrap() + await waitFor(() => { + expect(screen.getByText('Custom error text')).toBeDefined() + }) + }) +}) + +describe('withSuspenseAndRetry', () => { + it('renders the wrapped component when no error or suspension', () => { + const Wrapped = withSuspenseAndRetry(NormalComponent) + wrap(, true) + expect(screen.getByText('Normal Content')).toBeDefined() + }) + + it('shows custom suspense fallback while component is suspended', () => { + const Wrapped = withSuspenseAndRetry(SuspendedComponent) + wrap(Loading...} />, true) + expect(screen.getByText('Loading...')).toBeDefined() + }) + + it('shows error message and Try Again button when component throws', async () => { + const Wrapped = withSuspenseAndRetry(makeErrorComponent('Fetch failed')) + wrap(, true) + await waitFor(() => { + expect(screen.getByText('Fetch failed')).toBeDefined() + expect(screen.getByText('Try Again')).toBeDefined() + }) + }) + + it('resets error boundary when Try Again is clicked', async () => { + // Use an external flag so React 19 retries also throw (React retries after first throw + // before giving up to the error boundary, which would reset renderCount-based approaches) + const state = { shouldThrow: true } + const RecoveryComponent = () => { + if (state.shouldThrow) throw new Error('Persistent error') + return
Recovered
+ } + + const Wrapped = withSuspenseAndRetry(RecoveryComponent) + wrap(, true) + + await waitFor(() => { + expect(screen.getByText('Persistent error')).toBeDefined() + }) + + state.shouldThrow = false + fireEvent.click(screen.getByText('Try Again')) + + await waitFor(() => { + expect(screen.getByText('Recovered')).toBeDefined() + }) + }) +}) From 7b00d3b6f13f87fe697808842d0a1e5ca23bb376 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 23 Mar 2026 20:57:36 -0300 Subject: [PATCH 14/37] test: address review feedback on Tier 4 component tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - setupTests.ts: replace vi.fn() ResizeObserver with a real class guarded by a conditional check — vi.restoreAllMocks() can no longer clear it - suspenseWrapper.test.tsx: restore only the console.error spy in afterEach instead of vi.restoreAllMocks() which would wipe the ResizeObserver polyfill - TransactionButton.test.tsx: make useWaitForTransactionReceipt mock hash-aware so it only returns the receipt when called with the expected hash --- setupTests.ts | 21 ++++++++++++------- .../TransactionButton.test.tsx | 12 +++++++---- src/utils/suspenseWrapper.test.tsx | 9 +++++--- 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/setupTests.ts b/setupTests.ts index f70a3b90..a9d13f77 100644 --- a/setupTests.ts +++ b/setupTests.ts @@ -1,15 +1,22 @@ import * as matchers from '@testing-library/jest-dom/matchers' import { cleanup } from '@testing-library/react' -import { afterEach, expect, vi } from 'vitest' +import { afterEach, expect } from 'vitest' expect.extend(matchers) -// ResizeObserver is not implemented in jsdom but required by @floating-ui (Chakra menus/popovers) -global.ResizeObserver = vi.fn().mockImplementation(() => ({ - observe: vi.fn(), - unobserve: vi.fn(), - disconnect: vi.fn(), -})) +// ResizeObserver is not implemented in jsdom but required by @floating-ui (Chakra menus/popovers). +// Use a real class rather than vi.fn() so vi.restoreAllMocks() in test files cannot clear it. +if (typeof globalThis.ResizeObserver === 'undefined') { + class ResizeObserver { + // biome-ignore lint/suspicious/noExplicitAny: stub for jsdom test environment + observe(_target: any) {} + // biome-ignore lint/suspicious/noExplicitAny: stub for jsdom test environment + unobserve(_target: any) {} + disconnect() {} + } + // @ts-expect-error ResizeObserver is not in the Node/jsdom type definitions + globalThis.ResizeObserver = ResizeObserver +} afterEach(() => { cleanup() diff --git a/src/components/sharedComponents/TransactionButton.test.tsx b/src/components/sharedComponents/TransactionButton.test.tsx index d15ff916..74e4686d 100644 --- a/src/components/sharedComponents/TransactionButton.test.tsx +++ b/src/components/sharedComponents/TransactionButton.test.tsx @@ -123,10 +123,14 @@ describe('TransactionButton', () => { const onMined = vi.fn() vi.mocked(useWeb3StatusModule.useWeb3Status).mockReturnValue(connectedStatus()) - // Return receipt immediately so effect fires once isPending=true - vi.mocked(wagmiModule.useWaitForTransactionReceipt).mockReturnValue({ - data: mockReceipt, - } as ReturnType) + // Only return a receipt when called with the matching hash so the mock + // doesn't fire prematurely before the transaction is submitted. + vi.mocked(wagmiModule.useWaitForTransactionReceipt).mockImplementation( + (config) => + ({ + data: config?.hash === '0x1' ? mockReceipt : undefined, + }) as ReturnType, + ) renderButton({ transaction: () => Promise.resolve('0x1' as `0x${string}`), diff --git a/src/utils/suspenseWrapper.test.tsx b/src/utils/suspenseWrapper.test.tsx index a130d244..bd529c57 100644 --- a/src/utils/suspenseWrapper.test.tsx +++ b/src/utils/suspenseWrapper.test.tsx @@ -7,12 +7,15 @@ import { withSuspense, withSuspenseAndRetry } from './suspenseWrapper' const system = createSystem(defaultConfig) -// Silence expected React error boundary console.errors +// Silence expected React error boundary console.errors. +// Only restore this specific spy — vi.restoreAllMocks() would also wipe global +// polyfills set up in setupTests.ts (e.g. ResizeObserver). +let consoleErrorSpy: ReturnType beforeEach(() => { - vi.spyOn(console, 'error').mockImplementation(() => {}) + consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => {}) }) afterEach(() => { - vi.restoreAllMocks() + consoleErrorSpy.mockRestore() }) function wrap(ui: ReactNode, withQuery = false) { From 09e9de14ccff9cda4aae8f0be2e93066d61e5182 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 23 Mar 2026 17:46:21 -0300 Subject: [PATCH 15/37] test: add demo page smoke tests (Tier 5) Smoke tests for all demo page components to verify they render without crashing. Mocks external Web3 deps at module level. New test files: - home/index.test.tsx: Home renders Welcome + Examples sections - NotFound404.test.tsx: 404 page with mocked useNavigate - demos/ConnectWallet/index.test.tsx: mocked ConnectWalletButton - demos/EnsName/index.test.tsx: mocked useEnsName - demos/HashHandling/index.test.tsx: mocked useWeb3Status + detectHash - demos/SignMessage/index.test.tsx: shows fallback when wallet absent - demos/SwitchNetwork/index.test.tsx: shows fallback when wallet absent - demos/TransactionButton/index.test.tsx: shows fallback when wallet absent - demos/TokenDropdown/index.test.tsx: mocked BaseTokenDropdown - demos/TokenInput/index.test.tsx: mocked useTokenLists + useTokenSearch Also adds .env.test and src/test-utils.tsx (shared test utilities). --- .../pageComponents/NotFound404.test.tsx | 22 ++++++++ .../demos/ConnectWallet/index.test.tsx | 17 +++++++ .../Examples/demos/EnsName/index.test.tsx | 20 ++++++++ .../demos/HashHandling/index.test.tsx | 24 +++++++++ .../Examples/demos/SignMessage/index.test.tsx | 27 ++++++++++ .../demos/SwitchNetwork/index.test.tsx | 23 +++++++++ .../demos/TokenDropdown/index.test.tsx | 20 ++++++++ .../Examples/demos/TokenInput/index.test.tsx | 51 +++++++++++++++++++ .../demos/TransactionButton/index.test.tsx | 27 ++++++++++ .../pageComponents/home/index.test.tsx | 27 ++++++++++ 10 files changed, 258 insertions(+) create mode 100644 src/components/pageComponents/NotFound404.test.tsx create mode 100644 src/components/pageComponents/home/Examples/demos/ConnectWallet/index.test.tsx create mode 100644 src/components/pageComponents/home/Examples/demos/EnsName/index.test.tsx create mode 100644 src/components/pageComponents/home/Examples/demos/HashHandling/index.test.tsx create mode 100644 src/components/pageComponents/home/Examples/demos/SignMessage/index.test.tsx create mode 100644 src/components/pageComponents/home/Examples/demos/SwitchNetwork/index.test.tsx create mode 100644 src/components/pageComponents/home/Examples/demos/TokenDropdown/index.test.tsx create mode 100644 src/components/pageComponents/home/Examples/demos/TokenInput/index.test.tsx create mode 100644 src/components/pageComponents/home/Examples/demos/TransactionButton/index.test.tsx create mode 100644 src/components/pageComponents/home/index.test.tsx diff --git a/src/components/pageComponents/NotFound404.test.tsx b/src/components/pageComponents/NotFound404.test.tsx new file mode 100644 index 00000000..6ce87039 --- /dev/null +++ b/src/components/pageComponents/NotFound404.test.tsx @@ -0,0 +1,22 @@ +import { ChakraProvider, createSystem, defaultConfig } from '@chakra-ui/react' +import { render, screen } from '@testing-library/react' +import { describe, expect, it, vi } from 'vitest' +import NotFound404 from './NotFound404' + +const system = createSystem(defaultConfig) + +vi.mock('@tanstack/react-router', () => ({ + useNavigate: vi.fn(() => vi.fn()), +})) + +describe('NotFound404', () => { + it('renders 404 title and message', () => { + render( + + + , + ) + expect(screen.getByText('404 - Not Found')).toBeDefined() + expect(screen.getByRole('button', { name: 'Home' })).toBeDefined() + }) +}) diff --git a/src/components/pageComponents/home/Examples/demos/ConnectWallet/index.test.tsx b/src/components/pageComponents/home/Examples/demos/ConnectWallet/index.test.tsx new file mode 100644 index 00000000..ab37345f --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/ConnectWallet/index.test.tsx @@ -0,0 +1,17 @@ +import { ChakraProvider, createSystem, defaultConfig } from '@chakra-ui/react' +import { render, screen } from '@testing-library/react' +import { describe, expect, it, vi } from 'vitest' +import connectWallet from './index' + +const system = createSystem(defaultConfig) + +vi.mock('@/src/providers/Web3Provider', () => ({ + ConnectWalletButton: () => , +})) + +describe('ConnectWallet demo', () => { + it('renders the connect wallet button', () => { + render({connectWallet.demo}) + expect(screen.getByRole('button', { name: 'Connect Wallet' })).toBeDefined() + }) +}) diff --git a/src/components/pageComponents/home/Examples/demos/EnsName/index.test.tsx b/src/components/pageComponents/home/Examples/demos/EnsName/index.test.tsx new file mode 100644 index 00000000..2463d875 --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/EnsName/index.test.tsx @@ -0,0 +1,20 @@ +import { ChakraProvider, createSystem, defaultConfig } from '@chakra-ui/react' +import { render, screen } from '@testing-library/react' +import { describe, expect, it, vi } from 'vitest' +import ensName from './index' + +const system = createSystem(defaultConfig) + +vi.mock('wagmi', () => ({ + useEnsName: vi.fn(() => ({ data: undefined, error: undefined, status: 'pending' })), +})) + +describe('EnsName demo', () => { + it('renders the ENS name search interface', () => { + render({ensName.demo}) + expect(screen.getByText('Find ENS name')).toBeDefined() + expect( + screen.getByPlaceholderText('Enter an address or select one from the dropdown'), + ).toBeDefined() + }) +}) diff --git a/src/components/pageComponents/home/Examples/demos/HashHandling/index.test.tsx b/src/components/pageComponents/home/Examples/demos/HashHandling/index.test.tsx new file mode 100644 index 00000000..938c0b6e --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/HashHandling/index.test.tsx @@ -0,0 +1,24 @@ +import { ChakraProvider, createSystem, defaultConfig } from '@chakra-ui/react' +import { render, screen } from '@testing-library/react' +import { describe, expect, it, vi } from 'vitest' +import hashHandling from './index' + +const system = createSystem(defaultConfig) + +vi.mock('@/src/hooks/useWeb3Status', () => ({ + useWeb3Status: vi.fn(() => ({ + isWalletConnected: false, + walletChainId: undefined, + })), +})) + +vi.mock('@/src/utils/hash', () => ({ + detectHash: vi.fn(() => Promise.resolve(null)), +})) + +describe('HashHandling demo', () => { + it('renders the hash input field', () => { + render({hashHandling.demo}) + expect(screen.getByPlaceholderText(/address|hash/i)).toBeDefined() + }) +}) diff --git a/src/components/pageComponents/home/Examples/demos/SignMessage/index.test.tsx b/src/components/pageComponents/home/Examples/demos/SignMessage/index.test.tsx new file mode 100644 index 00000000..d673002c --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/SignMessage/index.test.tsx @@ -0,0 +1,27 @@ +import { ChakraProvider, createSystem, defaultConfig } from '@chakra-ui/react' +import { render, screen } from '@testing-library/react' +import { describe, expect, it, vi } from 'vitest' +import signMessage from './index' + +const system = createSystem(defaultConfig) + +vi.mock('@/src/hooks/useWeb3Status', () => ({ + useWeb3Status: vi.fn(() => ({ + isWalletConnected: false, + isWalletSynced: false, + walletChainId: undefined, + appChainId: 11155420, + switchChain: vi.fn(), + })), +})) + +vi.mock('@/src/providers/Web3Provider', () => ({ + ConnectWalletButton: () => , +})) + +describe('SignMessage demo', () => { + it('renders connect wallet fallback when wallet not connected', () => { + render({signMessage.demo}) + expect(screen.getByRole('button', { name: 'Connect Wallet' })).toBeDefined() + }) +}) diff --git a/src/components/pageComponents/home/Examples/demos/SwitchNetwork/index.test.tsx b/src/components/pageComponents/home/Examples/demos/SwitchNetwork/index.test.tsx new file mode 100644 index 00000000..7b93bb7b --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/SwitchNetwork/index.test.tsx @@ -0,0 +1,23 @@ +import { ChakraProvider, createSystem, defaultConfig } from '@chakra-ui/react' +import { render, screen } from '@testing-library/react' +import { describe, expect, it, vi } from 'vitest' +import switchNetwork from './index' + +const system = createSystem(defaultConfig) + +vi.mock('@/src/hooks/useWeb3Status', () => ({ + useWeb3Status: vi.fn(() => ({ + isWalletConnected: false, + })), +})) + +vi.mock('@/src/providers/Web3Provider', () => ({ + ConnectWalletButton: () => , +})) + +describe('SwitchNetwork demo', () => { + it('renders connect wallet button when wallet not connected', () => { + render({switchNetwork.demo}) + expect(screen.getByRole('button', { name: 'Connect Wallet' })).toBeDefined() + }) +}) diff --git a/src/components/pageComponents/home/Examples/demos/TokenDropdown/index.test.tsx b/src/components/pageComponents/home/Examples/demos/TokenDropdown/index.test.tsx new file mode 100644 index 00000000..ade29b7c --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/TokenDropdown/index.test.tsx @@ -0,0 +1,20 @@ +import { ChakraProvider, createSystem, defaultConfig } from '@chakra-ui/react' +import { render, screen } from '@testing-library/react' +import { describe, expect, it, vi } from 'vitest' +import tokenDropdown from './index' + +const system = createSystem(defaultConfig) + +// Mock the shared component to avoid its deep dependency chain +// (TokenSelect uses withSuspenseAndRetry, useTokenLists, useTokens, etc.) +vi.mock('@/src/components/sharedComponents/TokenDropdown', () => ({ + default: () =>
Token Dropdown
, +})) + +describe('TokenDropdown demo', () => { + it('renders the token dropdown container', () => { + render({tokenDropdown.demo}) + expect(screen.getByText('Search and select a token')).toBeDefined() + expect(screen.getByTestId('token-dropdown-mock')).toBeDefined() + }) +}) diff --git a/src/components/pageComponents/home/Examples/demos/TokenInput/index.test.tsx b/src/components/pageComponents/home/Examples/demos/TokenInput/index.test.tsx new file mode 100644 index 00000000..18930d6d --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/TokenInput/index.test.tsx @@ -0,0 +1,51 @@ +import { ChakraProvider, createSystem, defaultConfig } from '@chakra-ui/react' +import { QueryClient, QueryClientProvider } from '@tanstack/react-query' +import { render, screen } from '@testing-library/react' +import { describe, expect, it, vi } from 'vitest' +import tokenInput from './index' + +const system = createSystem(defaultConfig) + +vi.mock('@/src/hooks/useWeb3Status', () => ({ + useWeb3Status: vi.fn(() => ({ + isWalletConnected: false, + })), +})) + +vi.mock('@/src/hooks/useTokenLists', () => ({ + useTokenLists: vi.fn(() => ({ + tokens: [], + tokensByChainId: {}, + tokensByAddress: {}, + tokensBySymbol: {}, + })), +})) + +vi.mock('@/src/hooks/useTokenSearch', () => ({ + useTokenSearch: vi.fn(() => ({ + searchResult: [], + })), +})) + +vi.mock('@/src/components/sharedComponents/TokenInput/useTokenInput', () => ({ + useTokenInput: vi.fn(() => ({ + value: '', + token: undefined, + error: undefined, + onChange: vi.fn(), + onTokenSelect: vi.fn(), + })), +})) + +describe('TokenInput demo', () => { + it('renders the token input container', () => { + const queryClient = new QueryClient({ defaultOptions: { queries: { retry: false } } }) + render( + + {tokenInput.demo} + , + ) + // The mode dropdown should be visible + expect(screen.getByText('Single token')).toBeDefined() + }) +}) diff --git a/src/components/pageComponents/home/Examples/demos/TransactionButton/index.test.tsx b/src/components/pageComponents/home/Examples/demos/TransactionButton/index.test.tsx new file mode 100644 index 00000000..6304186b --- /dev/null +++ b/src/components/pageComponents/home/Examples/demos/TransactionButton/index.test.tsx @@ -0,0 +1,27 @@ +import { ChakraProvider, createSystem, defaultConfig } from '@chakra-ui/react' +import { render, screen } from '@testing-library/react' +import { describe, expect, it, vi } from 'vitest' +import transactionButton from './index' + +const system = createSystem(defaultConfig) + +vi.mock('@/src/hooks/useWeb3Status', () => ({ + useWeb3Status: vi.fn(() => ({ + isWalletConnected: false, + isWalletSynced: false, + walletChainId: undefined, + appChainId: 11155420, + switchChain: vi.fn(), + })), +})) + +vi.mock('@/src/providers/Web3Provider', () => ({ + ConnectWalletButton: () => , +})) + +describe('TransactionButton demo', () => { + it('renders connect wallet fallback when wallet not connected', () => { + render({transactionButton.demo}) + expect(screen.getByRole('button', { name: 'Connect Wallet' })).toBeDefined() + }) +}) diff --git a/src/components/pageComponents/home/index.test.tsx b/src/components/pageComponents/home/index.test.tsx new file mode 100644 index 00000000..b73a7e48 --- /dev/null +++ b/src/components/pageComponents/home/index.test.tsx @@ -0,0 +1,27 @@ +import { ChakraProvider, createSystem, defaultConfig } from '@chakra-ui/react' +import { render, screen } from '@testing-library/react' +import { describe, expect, it, vi } from 'vitest' +import { Home } from './index' + +const system = createSystem(defaultConfig) + +// Mock sub-components that pull in Web3 dependencies to keep this a pure structural test +vi.mock('@/src/components/pageComponents/home/Examples', () => ({ + default: () =>
Examples
, +})) + +vi.mock('@/src/components/pageComponents/home/Welcome', () => ({ + default: () =>
Welcome
, +})) + +describe('Home', () => { + it('renders Welcome and Examples sections', () => { + render( + + + , + ) + expect(screen.getByTestId('welcome')).toBeDefined() + expect(screen.getByTestId('examples')).toBeDefined() + }) +}) From 4fe5f28ab4b6b44576585a31be60df45dcceebce Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 23 Mar 2026 19:00:21 -0300 Subject: [PATCH 16/37] test: fix detectHash mock in HashHandling smoke test The module exports detectHash as a default export; the mock only provided a named export so HashInput would receive undefined and throw on invocation. Added both default and named exports to the mock factory. --- .../home/Examples/demos/HashHandling/index.test.tsx | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/components/pageComponents/home/Examples/demos/HashHandling/index.test.tsx b/src/components/pageComponents/home/Examples/demos/HashHandling/index.test.tsx index 938c0b6e..90fc9c0f 100644 --- a/src/components/pageComponents/home/Examples/demos/HashHandling/index.test.tsx +++ b/src/components/pageComponents/home/Examples/demos/HashHandling/index.test.tsx @@ -12,9 +12,13 @@ vi.mock('@/src/hooks/useWeb3Status', () => ({ })), })) -vi.mock('@/src/utils/hash', () => ({ - detectHash: vi.fn(() => Promise.resolve(null)), -})) +vi.mock('@/src/utils/hash', () => { + const mockFn = vi.fn(() => Promise.resolve(null)) + return { + default: mockFn, + detectHash: mockFn, + } +}) describe('HashHandling demo', () => { it('renders the hash input field', () => { From b0fe779caf0ba2e2cbcd46a25874ab75044b39af Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 23 Mar 2026 20:59:27 -0300 Subject: [PATCH 17/37] test: address review feedback on Tier 5 demo smoke tests - home/index.test.tsx: use renderWithProviders from test-utils - TransactionButton demo: use createMockWeb3Status for complete hook shape - TokenInput demo: fix useTokenInput mock to match the real hook return (amount/setAmount/amountError/balance/isLoadingBalance/selectedToken/setTokenSelected) and use renderWithProviders + createMockWeb3Status helpers --- .../Examples/demos/TokenInput/index.test.tsx | 30 +++++++++---------- .../demos/TransactionButton/index.test.tsx | 16 +++------- .../pageComponents/home/index.test.tsx | 12 ++------ 3 files changed, 21 insertions(+), 37 deletions(-) diff --git a/src/components/pageComponents/home/Examples/demos/TokenInput/index.test.tsx b/src/components/pageComponents/home/Examples/demos/TokenInput/index.test.tsx index 18930d6d..9e86b8b7 100644 --- a/src/components/pageComponents/home/Examples/demos/TokenInput/index.test.tsx +++ b/src/components/pageComponents/home/Examples/demos/TokenInput/index.test.tsx @@ -1,15 +1,11 @@ -import { ChakraProvider, createSystem, defaultConfig } from '@chakra-ui/react' +import { createMockWeb3Status, renderWithProviders } from '@/src/test-utils' import { QueryClient, QueryClientProvider } from '@tanstack/react-query' -import { render, screen } from '@testing-library/react' +import { screen } from '@testing-library/react' import { describe, expect, it, vi } from 'vitest' import tokenInput from './index' -const system = createSystem(defaultConfig) - vi.mock('@/src/hooks/useWeb3Status', () => ({ - useWeb3Status: vi.fn(() => ({ - isWalletConnected: false, - })), + useWeb3Status: vi.fn(() => createMockWeb3Status()), })) vi.mock('@/src/hooks/useTokenLists', () => ({ @@ -29,21 +25,23 @@ vi.mock('@/src/hooks/useTokenSearch', () => ({ vi.mock('@/src/components/sharedComponents/TokenInput/useTokenInput', () => ({ useTokenInput: vi.fn(() => ({ - value: '', - token: undefined, - error: undefined, - onChange: vi.fn(), - onTokenSelect: vi.fn(), + amount: 0n, + setAmount: vi.fn(), + amountError: null, + setAmountError: vi.fn(), + balance: 0n, + balanceError: null, + isLoadingBalance: false, + selectedToken: undefined, + setTokenSelected: vi.fn(), })), })) describe('TokenInput demo', () => { it('renders the token input container', () => { const queryClient = new QueryClient({ defaultOptions: { queries: { retry: false } } }) - render( - - {tokenInput.demo} - , + renderWithProviders( + {tokenInput.demo}, ) // The mode dropdown should be visible expect(screen.getByText('Single token')).toBeDefined() diff --git a/src/components/pageComponents/home/Examples/demos/TransactionButton/index.test.tsx b/src/components/pageComponents/home/Examples/demos/TransactionButton/index.test.tsx index 6304186b..1d7d3be8 100644 --- a/src/components/pageComponents/home/Examples/demos/TransactionButton/index.test.tsx +++ b/src/components/pageComponents/home/Examples/demos/TransactionButton/index.test.tsx @@ -1,18 +1,10 @@ -import { ChakraProvider, createSystem, defaultConfig } from '@chakra-ui/react' -import { render, screen } from '@testing-library/react' +import { createMockWeb3Status, renderWithProviders } from '@/src/test-utils' +import { screen } from '@testing-library/react' import { describe, expect, it, vi } from 'vitest' import transactionButton from './index' -const system = createSystem(defaultConfig) - vi.mock('@/src/hooks/useWeb3Status', () => ({ - useWeb3Status: vi.fn(() => ({ - isWalletConnected: false, - isWalletSynced: false, - walletChainId: undefined, - appChainId: 11155420, - switchChain: vi.fn(), - })), + useWeb3Status: vi.fn(() => createMockWeb3Status({ appChainId: 11155420 })), })) vi.mock('@/src/providers/Web3Provider', () => ({ @@ -21,7 +13,7 @@ vi.mock('@/src/providers/Web3Provider', () => ({ describe('TransactionButton demo', () => { it('renders connect wallet fallback when wallet not connected', () => { - render({transactionButton.demo}) + renderWithProviders(transactionButton.demo) expect(screen.getByRole('button', { name: 'Connect Wallet' })).toBeDefined() }) }) diff --git a/src/components/pageComponents/home/index.test.tsx b/src/components/pageComponents/home/index.test.tsx index b73a7e48..d498d8a1 100644 --- a/src/components/pageComponents/home/index.test.tsx +++ b/src/components/pageComponents/home/index.test.tsx @@ -1,10 +1,8 @@ -import { ChakraProvider, createSystem, defaultConfig } from '@chakra-ui/react' -import { render, screen } from '@testing-library/react' +import { renderWithProviders } from '@/src/test-utils' +import { screen } from '@testing-library/react' import { describe, expect, it, vi } from 'vitest' import { Home } from './index' -const system = createSystem(defaultConfig) - // Mock sub-components that pull in Web3 dependencies to keep this a pure structural test vi.mock('@/src/components/pageComponents/home/Examples', () => ({ default: () =>
Examples
, @@ -16,11 +14,7 @@ vi.mock('@/src/components/pageComponents/home/Welcome', () => ({ describe('Home', () => { it('renders Welcome and Examples sections', () => { - render( - - - , - ) + renderWithProviders() expect(screen.getByTestId('welcome')).toBeDefined() expect(screen.getByTestId('examples')).toBeDefined() }) From cf8852da9549d01b103c776aa48658428c873bb7 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 23 Mar 2026 18:37:40 -0300 Subject: [PATCH 18/37] fix(a11y): fix color contrast, skip link, focus rings, and aria attributes - Fix warning color contrast: #cc0 fails WCAG AA; use #996600 (light) / #e6b800 (dark) - Fix danger/ok colors: add proper light/dark variants (#ff6666, #66ee66) for dark mode contrast - Add skip-to-main-content link in root layout for keyboard navigation - Add aria-invalid to BigNumberInput default input on range validation failure - Replace outline:none with _focusVisible focus ring on CopyButton and ExternalLink - Add aria-label="Close" to icon-only close buttons in Modal and TokenInput - Add aria-label="View on explorer" to icon-only ExternalLink in Hash component --- .../sharedComponents/BigNumberInput.tsx | 6 ++++++ src/components/sharedComponents/Hash.tsx | 7 ++++++- .../sharedComponents/TokenInput/index.tsx | 5 ++++- .../sharedComponents/ui/CopyButton/index.tsx | 7 ++++++- .../sharedComponents/ui/ExternalLink/index.tsx | 7 ++++++- .../sharedComponents/ui/Modal/index.tsx | 7 ++++++- src/components/ui/provider.tsx | 10 +++++----- src/routes/__root.tsx | 16 +++++++++++++++- 8 files changed, 54 insertions(+), 11 deletions(-) diff --git a/src/components/sharedComponents/BigNumberInput.tsx b/src/components/sharedComponents/BigNumberInput.tsx index 60702ede..b3715cd5 100644 --- a/src/components/sharedComponents/BigNumberInput.tsx +++ b/src/components/sharedComponents/BigNumberInput.tsx @@ -6,6 +6,7 @@ import { type RefObject, useEffect, useRef, + useState, } from 'react' import { formatUnits, maxUint256, parseUnits } from 'viem' export type RenderInputProps = Omit & { @@ -66,6 +67,7 @@ export const BigNumberInput: FC = ({ value, }: BigNumberInputProps) => { const inputRef = useRef(null) + const [hasError, setHasError] = useState(false) // update inputValue when value changes useEffect(() => { @@ -125,6 +127,9 @@ export const BigNumberInput: FC = ({ }] and value is: ${value}` console.warn(message) onError?.({ value, message }) + setHasError(true) + } else { + setHasError(false) } onChange(newValue) @@ -141,6 +146,7 @@ export const BigNumberInput: FC = ({ renderInput({ ...inputProps, inputRef }) ) : ( diff --git a/src/components/sharedComponents/Hash.tsx b/src/components/sharedComponents/Hash.tsx index 5022ee1f..f44594df 100644 --- a/src/components/sharedComponents/Hash.tsx +++ b/src/components/sharedComponents/Hash.tsx @@ -61,7 +61,12 @@ const Hash: FC = ({ aria-label="Copy" /> )} - {explorerURL && } + {explorerURL && ( + + )} ) } diff --git a/src/components/sharedComponents/TokenInput/index.tsx b/src/components/sharedComponents/TokenInput/index.tsx index 60d60626..d558d39b 100644 --- a/src/components/sharedComponents/TokenInput/index.tsx +++ b/src/components/sharedComponents/TokenInput/index.tsx @@ -202,7 +202,10 @@ const TokenInput: FC = ({ showBalance={showBalance} showTopTokens={showTopTokens} > - setIsOpen(false)} /> + setIsOpen(false)} + /> diff --git a/src/components/sharedComponents/ui/CopyButton/index.tsx b/src/components/sharedComponents/ui/CopyButton/index.tsx index 93a2b523..55863799 100644 --- a/src/components/sharedComponents/ui/CopyButton/index.tsx +++ b/src/components/sharedComponents/ui/CopyButton/index.tsx @@ -77,8 +77,13 @@ export const CopyButton: FC = ({ height="fit-content" justifyContent="center" lineHeight="1" - outline="none" padding="0" + _focusVisible={{ + outline: '2px solid', + outlineColor: 'primary.default', + outlineOffset: '2px', + borderRadius: '2px', + }} textDecoration="none" transition="background-color {durations.moderate}, border-color {durations.moderate}, color {durations.moderate" userSelect="none" diff --git a/src/components/sharedComponents/ui/ExternalLink/index.tsx b/src/components/sharedComponents/ui/ExternalLink/index.tsx index feb27ac5..eedbc24d 100644 --- a/src/components/sharedComponents/ui/ExternalLink/index.tsx +++ b/src/components/sharedComponents/ui/ExternalLink/index.tsx @@ -57,8 +57,13 @@ export const ExternalLinkButton: FC = ({ fontWeight="400" height="fit-content" justifyContent="center" - outline="none" padding="0" + _focusVisible={{ + outline: '2px solid', + outlineColor: 'primary.default', + outlineOffset: '2px', + borderRadius: '2px', + }} transition="background-color {durations.moderate}, border-color {durations.moderate}, color {durations.moderate" whiteSpace="nowrap" width="fit-content" diff --git a/src/components/sharedComponents/ui/Modal/index.tsx b/src/components/sharedComponents/ui/Modal/index.tsx index 57b263d7..d72455e6 100644 --- a/src/components/sharedComponents/ui/Modal/index.tsx +++ b/src/components/sharedComponents/ui/Modal/index.tsx @@ -84,7 +84,12 @@ export const Modal: FC = ({ css, children, title, onClose, text, ...restP > {title} - {onClose && onClose()} />} + {onClose && ( + onClose()} + /> + )} {children ? children : 'No contents'} + + Skip to main content +
From 1ae1991fcf77de0b09cc08a5e82babd415bce9fb Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 23 Mar 2026 19:01:34 -0300 Subject: [PATCH 19/37] fix(a11y): address review feedback on accessibility fixes - Fix malformed transition string in CopyButton and ExternalLink (missing closing brace on last token) - Move aria-invalid into inputProps so it applies to both the default input and any custom renderInput renderer - Clear hasError state on empty-string input path (was only cleared on valid range path, leaving aria-invalid=true after user clears the field) - Add tabIndex={-1} to #main-content so skip link activation moves keyboard focus into the main region --- src/components/sharedComponents/BigNumberInput.tsx | 3 ++- src/components/sharedComponents/ui/CopyButton/index.tsx | 2 +- src/components/sharedComponents/ui/ExternalLink/index.tsx | 2 +- src/routes/__root.tsx | 1 + 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/components/sharedComponents/BigNumberInput.tsx b/src/components/sharedComponents/BigNumberInput.tsx index b3715cd5..20d07889 100644 --- a/src/components/sharedComponents/BigNumberInput.tsx +++ b/src/components/sharedComponents/BigNumberInput.tsx @@ -93,6 +93,7 @@ export const BigNumberInput: FC = ({ const { value } = typeof event === 'string' ? { value: event } : event.currentTarget if (value === '') { + setHasError(false) onChange(BigInt(0)) return } @@ -136,6 +137,7 @@ export const BigNumberInput: FC = ({ } const inputProps = { + 'aria-invalid': (hasError || undefined) as true | undefined, disabled, onChange: updateValue, placeholder, @@ -146,7 +148,6 @@ export const BigNumberInput: FC = ({ renderInput({ ...inputProps, inputRef }) ) : ( diff --git a/src/components/sharedComponents/ui/CopyButton/index.tsx b/src/components/sharedComponents/ui/CopyButton/index.tsx index 55863799..bff35858 100644 --- a/src/components/sharedComponents/ui/CopyButton/index.tsx +++ b/src/components/sharedComponents/ui/CopyButton/index.tsx @@ -85,7 +85,7 @@ export const CopyButton: FC = ({ borderRadius: '2px', }} textDecoration="none" - transition="background-color {durations.moderate}, border-color {durations.moderate}, color {durations.moderate" + transition="background-color {durations.moderate}, border-color {durations.moderate}, color {durations.moderate}" userSelect="none" whiteSpace="nowrap" width="fit-content" diff --git a/src/components/sharedComponents/ui/ExternalLink/index.tsx b/src/components/sharedComponents/ui/ExternalLink/index.tsx index eedbc24d..6fda6159 100644 --- a/src/components/sharedComponents/ui/ExternalLink/index.tsx +++ b/src/components/sharedComponents/ui/ExternalLink/index.tsx @@ -64,7 +64,7 @@ export const ExternalLinkButton: FC = ({ outlineOffset: '2px', borderRadius: '2px', }} - transition="background-color {durations.moderate}, border-color {durations.moderate}, color {durations.moderate" + transition="background-color {durations.moderate}, border-color {durations.moderate}, color {durations.moderate}" whiteSpace="nowrap" width="fit-content" _hover={{ diff --git a/src/routes/__root.tsx b/src/routes/__root.tsx index fb6b48ab..7037e400 100644 --- a/src/routes/__root.tsx +++ b/src/routes/__root.tsx @@ -49,6 +49,7 @@ function Root() { direction="column" flexGrow="1" id="main-content" + tabIndex={-1} > From 6a2f37e9494af85b9872780bdb9333bf1b8df9fa Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 23 Mar 2026 21:00:22 -0300 Subject: [PATCH 20/37] fix(a11y): guard parseUnits in BigNumberInput sync effect against throws An intermediate/unparseable input string while the user is typing could cause the useEffect that syncs the DOM value on external prop changes to throw. Wrap parseUnits in a try/catch and use a sentinel value to force the DOM overwrite when the current string is not parseable. --- src/components/sharedComponents/BigNumberInput.tsx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/components/sharedComponents/BigNumberInput.tsx b/src/components/sharedComponents/BigNumberInput.tsx index 20d07889..d299629e 100644 --- a/src/components/sharedComponents/BigNumberInput.tsx +++ b/src/components/sharedComponents/BigNumberInput.tsx @@ -75,7 +75,15 @@ export const BigNumberInput: FC = ({ if (!current) { return } - const currentInputValue = parseUnits(current.value.replace(/,/g, '') || '0', decimals) + // The input may contain an intermediate/unparseable string while the user is + // typing; guard against a parseUnits throw so an external value update never + // crashes the effect. + let currentInputValue: bigint + try { + currentInputValue = parseUnits(current.value.replace(/,/g, '') || '0', decimals) + } catch { + currentInputValue = BigInt(-1) // sentinel: force the DOM value to be overwritten + } if (currentInputValue !== value) { current.value = formatUnits(value, decimals) From ad55ae257f178f19a0ad58ae25e2669ba54cc80c Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 23 Mar 2026 18:39:51 -0300 Subject: [PATCH 21/37] fix(performance): lazy loading, dns-prefetch, and vendor chunk splitting - Add loading="lazy" to img in TokenLogo and Avatar - Add dns-prefetch for common blockchain RPC endpoints - Add manualChunks to split vendor libs into separate cached chunks --- index.html | 4 ++++ src/components/sharedComponents/Avatar.tsx | 1 + src/components/sharedComponents/TokenLogo.tsx | 1 + vite.config.ts | 13 +++++++++++++ 4 files changed, 19 insertions(+) diff --git a/index.html b/index.html index ebcc0889..5c3b95bc 100644 --- a/index.html +++ b/index.html @@ -31,6 +31,10 @@ + + + + diff --git a/src/components/sharedComponents/Avatar.tsx b/src/components/sharedComponents/Avatar.tsx index 3d54ea86..83242610 100644 --- a/src/components/sharedComponents/Avatar.tsx +++ b/src/components/sharedComponents/Avatar.tsx @@ -54,6 +54,7 @@ const Avatar: FC = ({ {ensName diff --git a/src/components/sharedComponents/TokenLogo.tsx b/src/components/sharedComponents/TokenLogo.tsx index 37ccc101..87627cdf 100644 --- a/src/components/sharedComponents/TokenLogo.tsx +++ b/src/components/sharedComponents/TokenLogo.tsx @@ -101,6 +101,7 @@ const TokenLogo: FC = ({ size = 24, token }) => { {token.name} setHasError(true)} src={getSrc(logoURI)} width={`${size}`} diff --git a/vite.config.ts b/vite.config.ts index e050c981..2d9b6863 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -17,6 +17,19 @@ export default defineConfig({ hostname: 'https://dappbooster.dev', }), ], + build: { + rollupOptions: { + output: { + manualChunks: { + 'vendor-react': ['react', 'react-dom'], + 'vendor-wagmi': ['wagmi', 'viem'], + 'vendor-tanstack': ['@tanstack/react-query', '@tanstack/react-router'], + 'vendor-chakra': ['@chakra-ui/react'], + 'vendor-web3': ['@reown/appkit', '@reown/appkit-adapter-wagmi'], + }, + }, + }, + }, envPrefix: 'PUBLIC_', resolve: { alias: { From ba8c91b61ba62a20a353a49e069af98d879f12e9 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 23 Mar 2026 19:01:59 -0300 Subject: [PATCH 22/37] fix(performance): add react-dom/client to vendor-react chunk Rollup treats subpath imports as separate module IDs; without explicitly including react-dom/client the subpath resolves into a separate chunk, splitting the React vendor bundle and defeating cache stability. --- vite.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vite.config.ts b/vite.config.ts index 2d9b6863..c79df3d1 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -21,7 +21,7 @@ export default defineConfig({ rollupOptions: { output: { manualChunks: { - 'vendor-react': ['react', 'react-dom'], + 'vendor-react': ['react', 'react-dom', 'react-dom/client'], 'vendor-wagmi': ['wagmi', 'viem'], 'vendor-tanstack': ['@tanstack/react-query', '@tanstack/react-router'], 'vendor-chakra': ['@chakra-ui/react'], From a37445c94c3ea4db86642c156763ef59f68518d8 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 23 Mar 2026 18:41:21 -0300 Subject: [PATCH 23/37] fix(seo): add JSON-LD structured data and fix sitemap hostname - Add Organization and WebApplication JSON-LD schemas to index.html - Make sitemap hostname configurable via PUBLIC_APP_URL env var with fallback to demo.dappbooster.dev --- index.html | 21 +++++++++++++++++++++ vite.config.ts | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/index.html b/index.html index 5c3b95bc..f27869d9 100644 --- a/index.html +++ b/index.html @@ -46,6 +46,27 @@
+ \ No newline at end of file diff --git a/vite.config.ts b/vite.config.ts index c79df3d1..75bc91f9 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -14,7 +14,7 @@ export default defineConfig({ react(), tsconfigPaths(), Sitemap({ - hostname: 'https://dappbooster.dev', + hostname: process.env.PUBLIC_APP_URL ?? 'https://demo.dappbooster.dev', }), ], build: { From d0c83c85aa725ad58a3f58603c6a191b1a9d806e Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 23 Mar 2026 19:02:17 -0300 Subject: [PATCH 24/37] fix(seo): use || instead of ?? for sitemap hostname fallback ?? only falls back on null/undefined; an empty string (the default in .env.example) would pass through as the hostname and produce an invalid sitemap. || also handles empty strings. --- vite.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vite.config.ts b/vite.config.ts index 75bc91f9..160a913a 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -14,7 +14,7 @@ export default defineConfig({ react(), tsconfigPaths(), Sitemap({ - hostname: process.env.PUBLIC_APP_URL ?? 'https://demo.dappbooster.dev', + hostname: process.env.PUBLIC_APP_URL || 'https://demo.dappbooster.dev', }), ], build: { From d8cb43757a1a272d98811bca71b1e8768506e420 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 23 Mar 2026 18:42:04 -0300 Subject: [PATCH 25/37] fix(security): add CSP report-only header and security headers - Add Content-Security-Policy-Report-Only via vercel.json headers to capture violations without breaking existing functionality - Add X-Content-Type-Options, X-Frame-Options, and Referrer-Policy headers --- vercel.json | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/vercel.json b/vercel.json index 408821b1..a28b45f2 100644 --- a/vercel.json +++ b/vercel.json @@ -1,4 +1,27 @@ { + "headers": [ + { + "source": "/(.*)", + "headers": [ + { + "key": "Content-Security-Policy-Report-Only", + "value": "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://va.vercel-scripts.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data: https: blob:; connect-src 'self' https: wss:; frame-ancestors 'none'; report-uri /csp-report" + }, + { + "key": "X-Content-Type-Options", + "value": "nosniff" + }, + { + "key": "X-Frame-Options", + "value": "DENY" + }, + { + "key": "Referrer-Policy", + "value": "strict-origin-when-cross-origin" + } + ] + } + ], "rewrites": [ { "source": "/(.*)", From 4b34dfe58229f12ed0b180c376ba04c1c804314f Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 23 Mar 2026 18:43:48 -0300 Subject: [PATCH 26/37] chore(deps): update minor and patch dependencies - @reown/appkit + adapter 1.8.18 -> 1.8.19 (fixes h3 path traversal) - viem 2.46.3 -> 2.47.6 - @tanstack/react-query 5.90.21 -> 5.95.2 - @tanstack/react-router 1.162.9 -> 1.168.3 - @tanstack/react-virtual 3.13.19 -> 3.13.23 - @t3-oss/env-core 0.13.10 -> 0.13.11 - graphql 16.13.0 -> 16.13.1 - react-number-format 5.4.4 -> 5.4.5 --- package.json | 22 +- pnpm-lock.yaml | 2507 +++++++++++++++++++++++++----------------------- 2 files changed, 1311 insertions(+), 1218 deletions(-) diff --git a/package.json b/package.json index e67fa106..85fe79b2 100644 --- a/package.json +++ b/package.json @@ -26,22 +26,22 @@ }, "dependencies": { "@bootnodedev/db-subgraph": "^0.1.2", - "@chakra-ui/react": "^3.17.0", + "@chakra-ui/react": "^3.34.0", "@emotion/react": "^11.14.0", - "@lifi/sdk": "^3.6.13", + "@lifi/sdk": "^3.16.3", "@rainbow-me/rainbowkit": "^2.2.9", - "@reown/appkit": "^1.8.10", - "@reown/appkit-adapter-wagmi": "^1.8.10", - "@t3-oss/env-core": "^0.13.4", - "@tanstack/react-query": "^5.75.7", - "@tanstack/react-router": "^1.120.3", - "@tanstack/react-virtual": "^3.13.8", + "@reown/appkit": "^1.8.19", + "@reown/appkit-adapter-wagmi": "^1.8.19", + "@t3-oss/env-core": "^0.13.11", + "@tanstack/react-query": "^5.95.2", + "@tanstack/react-router": "^1.168.3", + "@tanstack/react-virtual": "^3.13.23", "@uniswap/default-token-list": "^13.33.0", "@vercel/analytics": "^1.5.0", "@web3icons/core": "^4.0.13", "@web3icons/react": "^4.0.13", "connectkit": "^1.9.0", - "graphql": "^16.11.0", + "graphql": "^16.13.1", "graphql-request": "^7.1.2", "next-themes": "^0.4.6", "porto": "^0.2.28", @@ -49,9 +49,9 @@ "react-dom": "19.1.0", "react-error-boundary": "^6.0.0", "react-jazzicon": "^1.0.4", - "react-number-format": "^5.4.4", + "react-number-format": "^5.4.5", "use-debounce": "^10.0.4", - "viem": "^2.37.9", + "viem": "^2.47.6", "wagmi": "^2.17.5", "zod": "^3.24.4" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c2a3d856..8640919f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,37 +10,37 @@ importers: dependencies: '@bootnodedev/db-subgraph': specifier: ^0.1.2 - version: 0.1.2(@parcel/watcher@2.5.6)(@tanstack/react-query@5.90.21(react@19.1.0))(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql-tag@2.12.6(graphql@16.13.0))(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) + version: 0.1.2(@parcel/watcher@2.5.6)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql-tag@2.12.6(graphql@16.13.1))(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) '@chakra-ui/react': - specifier: ^3.17.0 - version: 3.33.0(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^3.34.0 + version: 3.34.0(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@emotion/react': specifier: ^11.14.0 version: 11.14.0(@types/react@19.2.14)(react@19.1.0) '@lifi/sdk': - specifier: ^3.6.13 - version: 3.15.6(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) + specifier: ^3.16.3 + version: 3.16.3(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) '@rainbow-me/rainbowkit': specifier: ^2.2.9 - version: 2.2.10(@tanstack/react-query@5.90.21(react@19.1.0))(@types/react@19.2.14)(babel-plugin-macros@3.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.3)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)) + version: 2.2.10(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(babel-plugin-macros@3.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.3)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)) '@reown/appkit': - specifier: ^1.8.10 - version: 1.8.18(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76) + specifier: ^1.8.19 + version: 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76) '@reown/appkit-adapter-wagmi': - specifier: ^1.8.10 - version: 1.8.18(e532ee338308575ad93e4f12488ada4c) + specifier: ^1.8.19 + version: 1.8.19(3041b67b8915d842a532aec1c6c6eb72) '@t3-oss/env-core': - specifier: ^0.13.4 - version: 0.13.10(typescript@5.9.3)(valibot@1.2.0(typescript@5.9.3))(zod@3.25.76) + specifier: ^0.13.11 + version: 0.13.11(typescript@5.9.3)(valibot@1.2.0(typescript@5.9.3))(zod@3.25.76) '@tanstack/react-query': - specifier: ^5.75.7 - version: 5.90.21(react@19.1.0) + specifier: ^5.95.2 + version: 5.95.2(react@19.1.0) '@tanstack/react-router': - specifier: ^1.120.3 - version: 1.162.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^1.168.3 + version: 1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tanstack/react-virtual': - specifier: ^3.13.8 - version: 3.13.19(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^3.13.23 + version: 3.13.23(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@uniswap/default-token-list': specifier: ^13.33.0 version: 13.47.0 @@ -55,19 +55,19 @@ importers: version: 4.1.17(react@19.1.0)(typescript@5.9.3) connectkit: specifier: ^1.9.0 - version: 1.9.1(@babel/core@7.29.0)(@tanstack/react-query@5.90.21(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)) + version: 1.9.1(@babel/core@7.29.0)(@tanstack/react-query@5.95.2(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react-is@17.0.2)(react@19.1.0)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)) graphql: - specifier: ^16.11.0 - version: 16.13.0 + specifier: ^16.13.1 + version: 16.13.1 graphql-request: specifier: ^7.1.2 - version: 7.4.0(graphql@16.13.0) + version: 7.4.0(graphql@16.13.1) next-themes: specifier: ^0.4.6 version: 0.4.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) porto: specifier: ^0.2.28 - version: 0.2.37(@tanstack/react-query@5.90.21(react@19.1.0))(@types/react@19.2.14)(@wagmi/core@3.4.0(@tanstack/query-core@5.90.20)(@types/react@19.2.14)(ox@0.12.4(typescript@5.9.3)(zod@3.25.76))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)) + version: 0.2.37(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(@wagmi/core@3.4.0(@tanstack/query-core@5.95.2)(@types/react@19.2.14)(ox@0.14.7(typescript@5.9.3)(zod@3.25.76))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)) react: specifier: 19.1.0 version: 19.1.0 @@ -81,17 +81,17 @@ importers: specifier: ^1.0.4 version: 1.0.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react-number-format: - specifier: ^5.4.4 - version: 5.4.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^5.4.5 + version: 5.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) use-debounce: specifier: ^10.0.4 version: 10.1.0(react@19.1.0) viem: - specifier: ^2.37.9 - version: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + specifier: ^2.47.6 + version: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) wagmi: specifier: ^2.17.5 - version: 2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) + version: 2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) zod: specifier: ^3.24.4 version: 3.25.76 @@ -107,25 +107,25 @@ importers: version: 19.8.1 '@graphql-codegen/cli': specifier: ^5.0.6 - version: 5.0.7(@parcel/watcher@2.5.6)(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + version: 5.0.7(@parcel/watcher@2.5.6)(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.1)(typescript@5.9.3)(utf-8-validate@5.0.10) '@graphql-typed-document-node/core': specifier: ^3.2.0 - version: 3.2.0(graphql@16.13.0) + version: 3.2.0(graphql@16.13.1) '@parcel/watcher': specifier: ^2.5.1 version: 2.5.6 '@tanstack/react-query-devtools': specifier: ^5.75.7 - version: 5.91.3(@tanstack/react-query@5.90.21(react@19.1.0))(react@19.1.0) + version: 5.91.3(@tanstack/react-query@5.95.2(react@19.1.0))(react@19.1.0) '@tanstack/router-cli': specifier: ^1.120.3 version: 1.162.9 '@tanstack/router-devtools': specifier: ^1.120.3 - version: 1.162.9(@tanstack/react-router@1.162.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.162.9)(csstype@3.2.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 1.162.9(@tanstack/react-router@1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.168.3)(csstype@3.2.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tanstack/router-plugin': specifier: ^1.120.3 - version: 1.162.9(@tanstack/react-router@1.162.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 1.162.9(@tanstack/react-router@1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) '@testing-library/jest-dom': specifier: ^6.6.3 version: 6.9.1 @@ -146,7 +146,7 @@ importers: version: 3.11.0(@swc/helpers@0.5.19)(vite@6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/coverage-v8': specifier: ^3.1.3 - version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@25.3.0)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 3.2.4(vitest@3.2.4(@types/debug@4.1.13)(@types/node@25.3.0)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) '@wagmi/cli': specifier: ^2.3.1 version: 2.10.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) @@ -194,7 +194,7 @@ importers: version: 5.1.4(typescript@5.9.3)(vite@6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) vitest: specifier: ^3.1.3 - version: 3.2.4(@types/debug@4.1.12)(@types/node@25.3.0)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + version: 3.2.4(@types/debug@4.1.13)(@types/node@25.3.0)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) vocs: specifier: 1.0.11 version: 1.0.11(@types/node@25.3.0)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(babel-plugin-macros@3.1.0)(jiti@2.6.1)(lightningcss@1.31.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rollup@4.59.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) @@ -237,8 +237,8 @@ packages: peerDependencies: graphql: '*' - '@ark-ui/react@5.32.0': - resolution: {integrity: sha512-BGKlp48rEpDH41YJIfYwJ/GYAq7urGab5+SRQK5Cv3teCghJCMqKGkTf9xb+0tdeUurnlQ6jgS36mjl2t+D0KA==} + '@ark-ui/react@5.34.1': + resolution: {integrity: sha512-RJlXCvsHzbK9LVxUVtaSD5pyF1PL8IUR1rHHkf0H0Sa397l6kOFE4EH7MCSj3pDumj2NsmKDVeVgfkfG0KCuEw==} peerDependencies: react: '>=18.0.0' react-dom: '>=18.0.0' @@ -517,6 +517,10 @@ packages: resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} engines: {node: '>=6.9.0'} + '@babel/runtime@7.29.2': + resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} + engines: {node: '>=6.9.0'} + '@babel/template@7.28.6': resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} engines: {node: '>=6.9.0'} @@ -536,8 +540,8 @@ packages: resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} - '@bigmi/core@0.6.5': - resolution: {integrity: sha512-prjyiUm8xYYcyiHf/I3MvFnqgHIv2XsA4c9EvCw0Do2thVDIJrQCcr3Z76U1ettrgg5u8XRS4MyOO+ITwG6FWA==} + '@bigmi/core@0.7.1': + resolution: {integrity: sha512-qG7457V8QlsTmoxuAjmc1h7e259cSfzd6Ifnxg/JJOTo4KNzd1Eb01oHQFK0KUwzqEHm6bQ2mPLQwropNUiFjA==} peerDependencies: bs58: ^6.0.0 @@ -608,8 +612,8 @@ packages: react: ^18 viem: ^2 - '@chakra-ui/react@3.33.0': - resolution: {integrity: sha512-HNbUFsFABjVL5IHBxsqtuT+AH/vQT1+xsEWrxnG0GBM2VjlzlMqlqCxNiDyQOsjLZXQC1ciCMbzPNcSCc63Y9w==} + '@chakra-ui/react@3.34.0': + resolution: {integrity: sha512-VLhpVwv5IVxhwajO10KnS1VQT4hDqQMQP/A796Ya+uVu8AdoSX+5HHyTLTkYIeXIDMe0xLqJfov04OBKbBchJA==} peerDependencies: '@emotion/react': '>=11' react: '>=18' @@ -1141,9 +1145,15 @@ packages: '@floating-ui/core@1.7.4': resolution: {integrity: sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==} + '@floating-ui/core@1.7.5': + resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} + '@floating-ui/dom@1.7.5': resolution: {integrity: sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==} + '@floating-ui/dom@1.7.6': + resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} + '@floating-ui/react-dom@2.1.7': resolution: {integrity: sha512-0tLRojf/1Go2JgEVm+3Frg9A3IW8bJgKgdO0BN5RkF//ufuz2joZM63Npau2ff3J6lUVYgDSNzNkR+aH3IVfjg==} peerDependencies: @@ -1159,6 +1169,9 @@ packages: '@floating-ui/utils@0.2.10': resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + '@floating-ui/utils@0.2.11': + resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} + '@gemini-wallet/core@0.3.2': resolution: {integrity: sha512-Z4aHi3ECFf5oWYWM3F1rW83GJfB9OvhBYPTmb5q+VyK3uvzvS48lwo+jwh2eOoCRWEuT/crpb9Vwp2QaS5JqgQ==} peerDependencies: @@ -1516,15 +1529,15 @@ packages: '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - '@lifi/sdk@3.15.6': - resolution: {integrity: sha512-rs6w5DUFN6XMblUECnxa1+TmIQH5+tmXDjifwHyLc3l8XJckfhorIGMVzlDwLIF0O+aPOh+PciFvpjiyo82RKQ==} + '@lifi/sdk@3.16.3': + resolution: {integrity: sha512-7fpeBIOkEtOiRoBGYkGjaLwFASgmkHKvDn+52rw/q5YM6MMKMGpPBlBsvAjOapLaZWMgnan1VFPaIc+v/QyJKA==} peerDependencies: '@solana/wallet-adapter-base': ^0.9.0 '@solana/web3.js': ^1.98.0 viem: ^2.21.0 - '@lifi/types@17.59.0': - resolution: {integrity: sha512-skXdBgQgp0Fc10vrNVp4EkYAYkwUy2jnt1hd3MbrbOGbP8rjeEys4iarAWin/pRWkRht/+JEtAje9MWlBOuWFg==} + '@lifi/types@17.65.0': + resolution: {integrity: sha512-2COF1WimbFiPv51x4T1lvXSs8sRB6CP0SzOTCt7xCwaaeMBLczuuJmF0r10pY9JPxdzbJtVMM83Za3uCslqlWA==} '@lit-labs/ssr-dom-shim@1.5.1': resolution: {integrity: sha512-Aou5UdlSpr5whQe8AA/bZG0jMj96CoJIWbGfZ91qieWu5AWUMKw8VR/pAkQkJYvBNhmCcWnZlyyk5oze8JIqYA==} @@ -1649,8 +1662,8 @@ packages: '@motionone/utils@10.18.0': resolution: {integrity: sha512-3XVF7sgyTSI2KWvTf6uLlBJ5iAgRgmvp3bpuOiQJvInd4nZ19ET8lX5unn30SlmRH7hXbBbH+Gxd0m0klJ3Xtw==} - '@msgpack/msgpack@3.1.2': - resolution: {integrity: sha512-JEW4DEtBzfe8HvUYecLU9e6+XJnKDlUAIve8FvPzF3Kzs6Xo/KuZkZJsDH0wJXl/qEZbeeE7edxDNY3kMs39hQ==} + '@msgpack/msgpack@3.1.3': + resolution: {integrity: sha512-47XIizs9XZXvuJgoaJUIE2lFoID8ugvc0jzSHP+Ptfk8nTbnR8g788wv48N03Kx0UkAv559HWRQ3yzOgzlRNUA==} engines: {node: '>= 18'} '@mysten/bcs@1.9.2': @@ -2579,8 +2592,8 @@ packages: viem: 2.x wagmi: ^2.9.0 - '@reown/appkit-adapter-wagmi@1.8.18': - resolution: {integrity: sha512-6FaSRG6I7GBFzqsLrVDs8369B9SgC3rw+zz+CEjfw4o+I1zeOoIt/MupO7dv1FkxM48wgeCrTD/hGSDPKv0vtw==} + '@reown/appkit-adapter-wagmi@1.8.19': + resolution: {integrity: sha512-KY2sbIXJDLlUVBAKdHBQ8KT8aQY67rWwW9aIz4XthRIt8WCjZQBEf4JGy/kd0LwRS78XSSpZcxDxEBarMPLpaA==} peerDependencies: '@wagmi/core': '>=2.21.2' viem: '>=2.45.0' @@ -2589,60 +2602,60 @@ packages: '@reown/appkit-common@1.7.8': resolution: {integrity: sha512-ridIhc/x6JOp7KbDdwGKY4zwf8/iK8EYBl+HtWrruutSLwZyVi5P8WaZa+8iajL6LcDcDF7LoyLwMTym7SRuwQ==} - '@reown/appkit-common@1.8.18': - resolution: {integrity: sha512-IaEZ/t2NoQwt9rUJArwJmFzzhznFoV33bHuF9JpSg1tASqe2ibnzxEVU6lM+SfjiO5cjlW8r3tYhPkieEUxpYg==} + '@reown/appkit-common@1.8.19': + resolution: {integrity: sha512-z5wDrYjUGY7YbM4b14NHVo54WKZ5++PQtGkcsXhiOP39yAVijubBQD8BfHs/Pu2fSFqnqLIFoCVvIEfNWWccRw==} '@reown/appkit-controllers@1.7.8': resolution: {integrity: sha512-IdXlJlivrlj6m63VsGLsjtPHHsTWvKGVzWIP1fXZHVqmK+rZCBDjCi9j267Rb9/nYRGHWBtlFQhO8dK35WfeDA==} - '@reown/appkit-controllers@1.8.18': - resolution: {integrity: sha512-pUbq4tfA3Ca27KA6pmM0TEhWPCCHualo9z0WuiZxPgR0Daak3FelhpFM+eyNAAcz7OBbiLQmy+isnDXaVyN0Mg==} + '@reown/appkit-controllers@1.8.19': + resolution: {integrity: sha512-JFNT8CfAVit9FJXh596Ye4U8A/oIapW+Y0KQqjB59DXyTCDZbxZDB32rULBQrSkZ6PufTEa239Dil4kABCQKtg==} '@reown/appkit-pay@1.7.8': resolution: {integrity: sha512-OSGQ+QJkXx0FEEjlpQqIhT8zGJKOoHzVnyy/0QFrl3WrQTjCzg0L6+i91Ad5Iy1zb6V5JjqtfIFpRVRWN4M3pw==} - '@reown/appkit-pay@1.8.18': - resolution: {integrity: sha512-MjGYOJiT5ie2Ize0m/IbVoeA7009hasiAP/62uBgE47WicmVMRr6013d5VlKK6AN/RR63D3TVhkw7k5F8ZJ+Sg==} + '@reown/appkit-pay@1.8.19': + resolution: {integrity: sha512-HO/tQT0TbTQO3eONxNNPJAOZAOzUiHvjM0Mty1rFFeRBH68auiqQxQi2YFNMs014gNkRN+cb84VYau7+MCC0fQ==} '@reown/appkit-polyfills@1.7.8': resolution: {integrity: sha512-W/kq786dcHHAuJ3IV2prRLEgD/2iOey4ueMHf1sIFjhhCGMynMkhsOhQMUH0tzodPqUgAC494z4bpIDYjwWXaA==} - '@reown/appkit-polyfills@1.8.18': - resolution: {integrity: sha512-K0Uzrs0QjSZam1B0OZRCh3PfzJqeiZ2sVw9B0ln2qAVvAlNQ2Yt3MItA06j2IGwoS4YACf9vgWYgOjFVQfz4ZQ==} + '@reown/appkit-polyfills@1.8.19': + resolution: {integrity: sha512-PSoetRSuZg7f2YFPzdfs4BayQl51zcGqYr7frwOe6td0XEsspLrrVFn/zk5QFbFHZVsMdfRZ+TTunt84ozRdnQ==} '@reown/appkit-scaffold-ui@1.7.8': resolution: {integrity: sha512-RCeHhAwOrIgcvHwYlNWMcIDibdI91waaoEYBGw71inE0kDB8uZbE7tE6DAXJmDkvl0qPh+DqlC4QbJLF1FVYdQ==} - '@reown/appkit-scaffold-ui@1.8.18': - resolution: {integrity: sha512-//42qeCET6jMKzdvPRwuGVr3idsXRFbIHj75JnFln3LEveK6kgCew/KhRgKhMq3/zJ78l8NTqJFNd9yUvFFCVA==} + '@reown/appkit-scaffold-ui@1.8.19': + resolution: {integrity: sha512-Ak767x0VzeDIXb0wbzkl19kx6udw7vkb1EU0SAweG3iKc9BunW87Rfcd48/YimzMZycJaYmlbtfmqQQDYs6Few==} '@reown/appkit-ui@1.7.8': resolution: {integrity: sha512-1hjCKjf6FLMFzrulhl0Y9Vb9Fu4royE+SXCPSWh4VhZhWqlzUFc7kutnZKx8XZFVQH4pbBvY62SpRC93gqoHow==} - '@reown/appkit-ui@1.8.18': - resolution: {integrity: sha512-ozfZxfr9JZqiAgBbu4CAtjSjxmLQ4Ak8hT4G4IojB9ZiStGfw+VCJHeNC44oac5G4do4bfmOsDPcbbKpE6AbnQ==} + '@reown/appkit-ui@1.8.19': + resolution: {integrity: sha512-fCAwW8yyyC3JcgKLBPvCtYuDGC4H8anO7u4LTaAXGEzdcU5H+IrCgNFSPNK7NuTSmgXm1TnoYxPxRFKNiNwFdA==} '@reown/appkit-utils@1.7.8': resolution: {integrity: sha512-8X7UvmE8GiaoitCwNoB86pttHgQtzy4ryHZM9kQpvjQ0ULpiER44t1qpVLXNM4X35O0v18W0Dk60DnYRMH2WRw==} peerDependencies: valtio: 1.13.2 - '@reown/appkit-utils@1.8.18': - resolution: {integrity: sha512-wB49IwYrhon7ZnLIA70Af9E2zV2U3aUm8fZWDwnU9Sx8cagHCXoMPXt6/SH/plvU3EKgplkiOXqfwc7QmV5UEQ==} + '@reown/appkit-utils@1.8.19': + resolution: {integrity: sha512-VQPgUMTFqoh4UD3EDZSw9wyMkyZsmIVmu8CdQ2FUxIuqYW4fLd0VIpkDeO64MMhSv8b0X8Vd6m4+eGcqSwlUAg==} peerDependencies: valtio: 2.1.7 '@reown/appkit-wallet@1.7.8': resolution: {integrity: sha512-kspz32EwHIOT/eg/ZQbFPxgXq0B/olDOj3YMu7gvLEFz4xyOFd/wgzxxAXkp5LbG4Cp++s/elh79rVNmVFdB9A==} - '@reown/appkit-wallet@1.8.18': - resolution: {integrity: sha512-1FWTkh269iBm2XzN0plHFIgIM1wMUmXrdeNmQK3NcJvGHpZ1YO1z2zFHTkWCPFVMZCHoQH28fcP6Aobq1FuFbA==} + '@reown/appkit-wallet@1.8.19': + resolution: {integrity: sha512-NVdIKceUhkXYtsG32925ctmVn0QJFNyDlr+mWheMLCEZ/IUPn+6aA53vTVaSUquhyeFxUXtrCOh3ln6v1tup5w==} '@reown/appkit@1.7.8': resolution: {integrity: sha512-51kTleozhA618T1UvMghkhKfaPcc9JlKwLJ5uV+riHyvSoWPKPRIa5A6M1Wano5puNyW0s3fwywhyqTHSilkaA==} - '@reown/appkit@1.8.18': - resolution: {integrity: sha512-NdLSO2HzFZzflLeik5QX0o6DQSk9wC+MbMp55jHFBJZCX99VNzO6EVtJ9OaQ4uHn58fEvkrM/NwdPomwVmg+LQ==} + '@reown/appkit@1.8.19': + resolution: {integrity: sha512-wB+xatkRbOy0AY1cZxxtcKzzPk3l3CTFulDbaISLVmZI6ZnQrOFuLnYc285zGsC6DB4d6bmwYUh89zcMLa4PvQ==} '@repeaterjs/repeater@3.0.6': resolution: {integrity: sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==} @@ -3363,8 +3376,8 @@ packages: '@swc/types@0.1.25': resolution: {integrity: sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==} - '@t3-oss/env-core@0.13.10': - resolution: {integrity: sha512-NNFfdlJ+HmPHkLi2HKy7nwuat9SIYOxei9K10lO2YlcSObDILY7mHZNSHsieIM3A0/5OOzw/P/b+yLvPdaG52g==} + '@t3-oss/env-core@0.13.11': + resolution: {integrity: sha512-sM7GYY+KL7H/Hl0BE0inWfk3nRHZOLhmVn7sHGxaZt9FAR6KqREXAE+6TqKfiavfXmpRxO/OZ2QgKRd+oiBYRQ==} peerDependencies: arktype: ^2.1.0 typescript: '>=5.0.0' @@ -3466,8 +3479,12 @@ packages: resolution: {integrity: sha512-Kp/WSt411ZWYvgXy6uiv5RmhHrz9cAml05AQPrtdAp7eUqvIDbMGPnML25OKbzR3RJ1q4wgENxDTvlGPa9+Mww==} engines: {node: '>=20.19'} - '@tanstack/query-core@5.90.20': - resolution: {integrity: sha512-OMD2HLpNouXEfZJWcKeVKUgQ5n+n3A2JFmBaScpNDUqSrQSjiveC7dKMe53uJUg1nDG16ttFPz2xfilz6i2uVg==} + '@tanstack/history@1.161.6': + resolution: {integrity: sha512-NaOGLRrddszbQj9upGat6HG/4TKvXLvu+osAIgfxPYA+eIvYKv8GKDJOrY2D3/U9MRnKfMWD7bU4jeD4xmqyIg==} + engines: {node: '>=20.19'} + + '@tanstack/query-core@5.95.2': + resolution: {integrity: sha512-o4T8vZHZET4Bib3jZ/tCW9/7080urD4c+0/AUaYVpIqOsr7y0reBc1oX3ttNaSW5mYyvZHctiQ/UOP2PfdmFEQ==} '@tanstack/query-devtools@5.93.0': resolution: {integrity: sha512-+kpsx1NQnOFTZsw6HAFCW3HkKg0+2cepGtAWXjiiSOJJ1CtQpt72EE2nyZb+AjAbLRPoeRmPJ8MtQd8r8gsPdg==} @@ -3478,8 +3495,8 @@ packages: '@tanstack/react-query': ^5.90.20 react: ^18 || ^19 - '@tanstack/react-query@5.90.21': - resolution: {integrity: sha512-0Lu6y5t+tvlTJMTO7oh5NSpJfpg/5D41LlThfepTixPYkJ0sE2Jj0m0f6yYqujBwIXlId87e234+MxG3D3g7kg==} + '@tanstack/react-query@5.95.2': + resolution: {integrity: sha512-/wGkvLj/st5Ud1Q76KF1uFxScV7WeqN1slQx5280ycwAyYkIPGaRZAEgHxe3bjirSd5Zpwkj6zNcR4cqYni/ZA==} peerDependencies: react: ^18 || ^19 @@ -3495,21 +3512,21 @@ packages: '@tanstack/router-core': optional: true - '@tanstack/react-router@1.162.9': - resolution: {integrity: sha512-APbwKAF+YgSNpHAaA+FdgrmfI/7+qa9hApuVO9+P0IVksJayNIWFQ/6AFG90WQiTYWk64RI1R9cFV2K9Z+j2pQ==} + '@tanstack/react-router@1.168.3': + resolution: {integrity: sha512-hMWXhckeaSvjepHT5x9tUYJVXMvT/kUjaVHOUDmCfyOBtjxJNYJKbEWClXoopGwWlHjRTAzhsndhnQQRbIiKmA==} engines: {node: '>=20.19'} peerDependencies: react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-store@0.9.1': - resolution: {integrity: sha512-YzJLnRvy5lIEFTLWBAZmcOjK3+2AepnBv/sr6NZmiqJvq7zTQggyK99Gw8fqYdMdHPQWXjz0epFKJXC+9V2xDA==} + '@tanstack/react-store@0.9.2': + resolution: {integrity: sha512-Vt5usJE5sHG/cMechQfmwvwne6ktGCELe89Lmvoxe3LKRoFrhPa8OCKWs0NliG8HTJElEIj7PLtaBQIcux5pAQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/react-virtual@3.13.19': - resolution: {integrity: sha512-KzwmU1IbE0IvCZSm6OXkS+kRdrgW2c2P3Ho3NC+zZXWK6oObv/L+lcV/2VuJ+snVESRlMJ+w/fg4WXI/JzoNGQ==} + '@tanstack/react-virtual@3.13.23': + resolution: {integrity: sha512-XnMRnHQ23piOVj2bzJqHrRrLg4r+F86fuBcwteKfbIjJrtGxb4z7tIvPVAe4B+4UVwo9G4Giuz5fmapcrnZ0OQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -3523,6 +3540,11 @@ packages: resolution: {integrity: sha512-eG7C0oVtZbFOkfvsaF8UyGuNjEc1BfIfD5EzQNwG4vqLKOAyY5SMFBCNjabAi2sglRhL0ZOwKon1SExusU5fxA==} engines: {node: '>=20.19'} + '@tanstack/router-core@1.168.3': + resolution: {integrity: sha512-qcjArls3v12UQQkEpU0+todc0/MCyrEZeXxhtgZZ0e5gxZDG25BUe/HlNcIjzyb7NZaw0TQAUBXbTClmFaHZiw==} + engines: {node: '>=20.19'} + hasBin: true + '@tanstack/router-devtools-core@1.162.9': resolution: {integrity: sha512-fX54Aub/mS9KVrWy/CSe5+vu/pSez45RojzBZYK4KLMA8HsTxQ4/jjBfHwGg6FaqXKL52b72f4BAB+Cx559rIA==} engines: {node: '>=20.19'} @@ -3577,8 +3599,11 @@ packages: '@tanstack/store@0.9.1': resolution: {integrity: sha512-+qcNkOy0N1qSGsP7omVCW0SDrXtaDcycPqBDE726yryiA5eTDFpjBReaYjghVJwNf1pcPMyzIwTGlYjCSQR0Fg==} - '@tanstack/virtual-core@3.13.19': - resolution: {integrity: sha512-/BMP7kNhzKOd7wnDeB8NrIRNLwkf5AhCYCvtfZV2GXWbBieFm/el0n6LOAXlTi6ZwHICSNnQcIxRCWHrLzDY+g==} + '@tanstack/store@0.9.2': + resolution: {integrity: sha512-K013lUJEFJK2ofFQ/hZKJUmCnpcV00ebLyOyFOWQvyQHUOZp/iYO84BM6aOGiV81JzwbX0APTVmW8YI7yiG5oA==} + + '@tanstack/virtual-core@3.13.23': + resolution: {integrity: sha512-zSz2Z2HNyLjCplANTDyl3BcdQJc2k1+yyFoKhNRmCr7V7dY8o8q5m8uFTI1/Pg1kL+Hgrz6u3Xo6eFUB7l66cg==} '@tanstack/virtual-file-routes@1.161.4': resolution: {integrity: sha512-42WoRePf8v690qG8yGRe/YOh+oHni9vUaUUfoqlS91U2scd3a5rkLtVsc6b7z60w3RogH0I00vdrC5AaeiZ18w==} @@ -3658,6 +3683,9 @@ packages: '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/debug@4.1.13': + resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} + '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} @@ -3950,8 +3978,8 @@ packages: resolution: {integrity: sha512-Tp4MHJYcdWD846PH//2r+Mu4wz1/ZU/fr9av1UWFiaYQ2t2TPLDiZxjLw54AAEpMqlEHemwCgiRiAmjR1NDdTQ==} engines: {node: '>=18'} - '@walletconnect/core@2.23.2': - resolution: {integrity: sha512-KkaTELRu8t/mt3J9doCQ1fBGCbYsCNfpo2JpKdCwKQR7PVjVKeVpYQK/blVkA5m6uLPpBtVRbOMKjnHW1m7JLw==} + '@walletconnect/core@2.23.7': + resolution: {integrity: sha512-yTyymn9mFaDZkUfLfZ3E9VyaSDPeHAXlrPxQRmNx2zFsEt/25GmTU2A848aomimLxZnAG2jNLhxbJ8I0gyNV+w==} engines: {node: '>=18.20.8'} '@walletconnect/environment@1.0.1': @@ -4013,8 +4041,8 @@ packages: resolution: {integrity: sha512-QaXzmPsMnKGV6tc4UcdnQVNOz4zyXgarvdIQibJ4L3EmLat73r5ZVl4c0cCOcoaV7rgM9Wbphgu5E/7jNcd3Zg==} deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' - '@walletconnect/sign-client@2.23.2': - resolution: {integrity: sha512-LL5KgmJHvY5NqQn+ZHQJLia1p6fpUWXHtiG97S5rNfyuPx6gT/Jkkwqc2LwdmAjFkr61t8zTagHC9ETq203mNA==} + '@walletconnect/sign-client@2.23.7': + resolution: {integrity: sha512-SX61lzb1bTl/LijlcHQttnoHPBzzoY5mW9ArR6qhFtDNDTS7yr2rcH7rCngxHlYeb4rAYcWLHgbiGSrdKxl/mg==} '@walletconnect/time@1.0.2': resolution: {integrity: sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==} @@ -4025,8 +4053,8 @@ packages: '@walletconnect/types@2.21.1': resolution: {integrity: sha512-UeefNadqP6IyfwWC1Yi7ux+ljbP2R66PLfDrDm8izmvlPmYlqRerJWJvYO4t0Vvr9wrG4Ko7E0c4M7FaPKT/sQ==} - '@walletconnect/types@2.23.2': - resolution: {integrity: sha512-5dxBCdUM+4Dqe1/A7uqkm2tWPXce4UUGSr+ImfI0YjwEExQS8+TzdOlhMt3n32ncnBCllU5paG+fsndT06R0iw==} + '@walletconnect/types@2.23.7': + resolution: {integrity: sha512-6PAKK+iR2IntmlkCFLMAHjYeIaerCJJYRDmdRimhon0u+aNmQT+HyGM6zxDAth0rdpBD7qEvKP5IXZTE7KFUhw==} '@walletconnect/universal-provider@2.21.0': resolution: {integrity: sha512-mtUQvewt+X0VBQay/xOJBvxsB3Xsm1lTwFjZ6WUwSOTR1X+FNb71hSApnV5kbsdDIpYPXeQUbGt2se1n5E5UBg==} @@ -4036,8 +4064,8 @@ packages: resolution: {integrity: sha512-Wjx9G8gUHVMnYfxtasC9poGm8QMiPCpXpbbLFT+iPoQskDDly8BwueWnqKs4Mx2SdIAWAwuXeZ5ojk5qQOxJJg==} deprecated: 'Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases' - '@walletconnect/universal-provider@2.23.2': - resolution: {integrity: sha512-vs9iorPUAiVesFJ95O6XvLjmRgF+B2TspxJNL90ZULbrkRw4JFsmaRdb965PZKc+s182k1MkS/MQ0o964xRcEw==} + '@walletconnect/universal-provider@2.23.7': + resolution: {integrity: sha512-6UicU/Mhr/1bh7MNoajypz7BhigORbHpP1LFTf8FYLQGDqzmqHMqmMH2GDAImtaY2sFTi2jBvc22tLl8VMze/A==} '@walletconnect/utils@2.21.0': resolution: {integrity: sha512-zfHLiUoBrQ8rP57HTPXW7rQMnYxYI4gT9yTACxVW6LhIFROTF6/ytm5SKNoIvi4a5nX5dfXG4D9XwQUCu8Ilig==} @@ -4045,8 +4073,8 @@ packages: '@walletconnect/utils@2.21.1': resolution: {integrity: sha512-VPZvTcrNQCkbGOjFRbC24mm/pzbRMUq2DSQoiHlhh0X1U7ZhuIrzVtAoKsrzu6rqjz0EEtGxCr3K1TGRqDG4NA==} - '@walletconnect/utils@2.23.2': - resolution: {integrity: sha512-ReSjU3kX+3i3tYJQZbVfetY5SSUL+iM6uiIVVD1PJalePa/5A40VgLVRTF7sDCJTIFfpf3Mt4bFjeaYuoxWtIw==} + '@walletconnect/utils@2.23.7': + resolution: {integrity: sha512-3p38gNrkVcIiQixVrlsWSa66Gjs5PqHOug2TxDgYUVBW5NcKjwQA08GkC6CKBQUfr5iaCtbfy6uZJW1LKSIvWQ==} '@walletconnect/window-getters@1.0.1': resolution: {integrity: sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==} @@ -4085,234 +4113,234 @@ packages: resolution: {integrity: sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA==} engines: {node: '>=16.0.0'} - '@zag-js/accordion@1.34.1': - resolution: {integrity: sha512-FEk9iBwoCkbs96386MfKG7fKZ6uAnID/ppkYFs3FatTf79liJi6cQekWuOxhDPwpmbndCBNSO+eRJgsN1DWGxw==} + '@zag-js/accordion@1.35.3': + resolution: {integrity: sha512-wmw6yo5Zr6ShiKGTc5ICEOJCurWAOSGubIpGISiHi3cZ4tlxKF/vpATIUT3eq8xzdB56YK57yKCujs/WmwqqoA==} - '@zag-js/anatomy@1.34.1': - resolution: {integrity: sha512-FQuhlB5ggZvC2AKy52qITBe8Q8GCHdO+tsSY0A7kOe1C3wDnZNRCKtiNfkcIlEc3uP+alMhF/7xn09N7XXOTcQ==} + '@zag-js/anatomy@1.35.3': + resolution: {integrity: sha512-oqU9iLNNylrtJMBX5Xu4DsxnPNvtZLiobryv2oNtsDI1mi1Fca/XHghQC9K5aYT0qNsmHj1M3W5WAWTaOtPLkQ==} - '@zag-js/angle-slider@1.34.1': - resolution: {integrity: sha512-TQjzs9GZMWX4TKCmO164eWBnmw9R0EzQUkbEMSPgQ5Ue2vxxU4CCFlcn2HNlP0cz1PASk2xnMPRhcoPoRUTM+w==} + '@zag-js/angle-slider@1.35.3': + resolution: {integrity: sha512-HXRlmsbNEJSBT53fq9XQKL/vwZWwJC3nprskI7s4f/jy8a4uXPTlv7N7zuBYjew+ScTMzZah6fLWzUztBehmSg==} - '@zag-js/aria-hidden@1.34.1': - resolution: {integrity: sha512-3oO8T4ezzZI+DSDTaPZ4ZE6wdzHqywlz2Q6sqwjnsE46NcmlnZkaFgDPJCNPH56tXLsB7uE7A6KXLYxQrLf6fw==} + '@zag-js/aria-hidden@1.35.3': + resolution: {integrity: sha512-dk5POebn10WneQfLrEgbTzwolaXWpCSHL6F3jCTinW9IbOx7BXghzJD21iU5Iun+y9CorqJPW3p7LplYNUMO5Q==} - '@zag-js/async-list@1.34.1': - resolution: {integrity: sha512-Tt8dLkZGaVoX5CSmZhtg2kjzcz6uxruq29H+RLpG6mHooJt7YSjClmQIdLCgh/B/8aNDlXHir5pM/iiyGPHsqw==} + '@zag-js/async-list@1.35.3': + resolution: {integrity: sha512-SXX3wGzLK/maKS1PJ3XfLIGWbu0022f/OhcFsT1PbiHnoFZTH7h2fBhirrCBfy2TYFQ6r5uxgjkhPUNkuaeYnA==} - '@zag-js/auto-resize@1.34.1': - resolution: {integrity: sha512-jBOPBB/ILpVX1Craw/0ng2rlWDsBDTwXa9Nt/QFg2fJ0F5GYbye874/2kQQyroiEB7g2KGLgEAhmZt/7SHS8JA==} + '@zag-js/auto-resize@1.35.3': + resolution: {integrity: sha512-ufG8HSqzLd9h5rnos8aumj8iORlRskeR/gbpJu1NHrnHBWIrpuXm6KJJR2oZhTFY1BUMMk8eYIBA2QkVuiJzWA==} - '@zag-js/avatar@1.34.1': - resolution: {integrity: sha512-O7Bt02kZiTozNsEaWWgGYyTOU3wFejQIQl1Y0bYEeFbBQ2y75pmffhK9792UW6oZ+nwQ+s/0/kAMkzZWSl3qww==} + '@zag-js/avatar@1.35.3': + resolution: {integrity: sha512-lbQ2Q4Va8AAScKULOHw2tCQez+0JRYGHSMFq6i+dJmeT3dlSgRanm69ra6K2po6hM9E4v6pRe+xOVE+9QMDnuA==} - '@zag-js/carousel@1.34.1': - resolution: {integrity: sha512-aKOXJCslU8HoPp54sNv0tQraVG00fq9qL/ZwmZAzKw6G2kLtHaHtxBunQMRVrVGCYxXqsdoHWGikKT9PJWIICg==} + '@zag-js/carousel@1.35.3': + resolution: {integrity: sha512-F+b8HzUeZfB+xUkAkLG4r0Ubui8pj7pSgZhi26ZiWgsM7tsd7cD+xRMXkvPEITN5Fd5QCe3KlVBuE00w5byjmg==} - '@zag-js/cascade-select@1.34.1': - resolution: {integrity: sha512-NfGskK/4uezZWmVF/Mo4mEeG47GbRE0CrU0+l8UkWWKF4ZMjLl49hBbvyoZlJLiHiDl0KxIrixr8VWR/gAgiJQ==} + '@zag-js/cascade-select@1.35.3': + resolution: {integrity: sha512-Nifdx77hEuAdXqr1wpZSPjLXqygRhq/WvnPjGhCeSqFPpy62uT4JZ3avyjUZ4I0UhvIpkleUcXtFwQ3cSMh4ww==} - '@zag-js/checkbox@1.34.1': - resolution: {integrity: sha512-qj9paN6hcFwmQz+T7ABrlN8zVeA/11WLB2JDhno2xuJjdHDmOSWnWVxCEf8lv4nxcw3SUnJnMgFtAWLd0xJkFA==} + '@zag-js/checkbox@1.35.3': + resolution: {integrity: sha512-8XBt/Wg2zSQWqV2ZFqZBQUjYRkOYHA2O3IEi0VVYtds3S1n7Pu/HqkZT5qDw+E/SY2+X9Uyx4hO7h2XrlsiZQQ==} - '@zag-js/clipboard@1.34.1': - resolution: {integrity: sha512-O1xH2e3E+GYXubA/vtBkuE3AD81hO3N5P1weA6iHOCyDl8CAtKMZZ1xMuCTwt+wujwdvM1DT4IF+II9fBMngAw==} + '@zag-js/clipboard@1.35.3': + resolution: {integrity: sha512-obTwynBpp6c17fLHe5tg//FQ497QsyCEry+K3bTdlrivWW200wvfHxZ6RKVbKwDAwhH+ye0bI1xkYAId8j7sdA==} - '@zag-js/collapsible@1.34.1': - resolution: {integrity: sha512-1u32Zz/shcmxPbPsXuiIc5D9eIoZdpFoLuzlUzGlutBzq7zoavmMVIGmSevBEn12a6vhk/dPoiz2+OAKXi+2ww==} + '@zag-js/collapsible@1.35.3': + resolution: {integrity: sha512-IweG8JOBCerJwLO6QzTZGEMlsYUmQfQSeD0jniFguMM8vcunvGVSrM+AaL8pDbmXd+snXokaGyJpGO3vzMW6Fw==} - '@zag-js/collection@1.34.1': - resolution: {integrity: sha512-C61BL3cFyEfPCsPKeWshc8l7D3igqySPksVtmfzHhxcnlOxgVkBBpik7JF/cYk9yU6pHB6bCRzRgPDziiyOHLQ==} + '@zag-js/collection@1.35.3': + resolution: {integrity: sha512-BYoWJ4b7ma2PgiuQbRSnP603f2DlK6se5JtViUHTamZScLLLWnWHuQ6zFa1KS5kiIkbb7CFM6/bJ3WNYLch8Ig==} - '@zag-js/color-picker@1.34.1': - resolution: {integrity: sha512-ajvJoGtKvGJ3KZaoLV/wu1djg9/ahKDgyyR1fcfnFRrlpczPAejTqgan+Yazuc4ZuZ/fbAMeCfVxY2BzVoxYOQ==} + '@zag-js/color-picker@1.35.3': + resolution: {integrity: sha512-i9roSgtqeA1b4Q+jWqnxjXB//BQXMP5m1FQ4YcZVq/0yT14A53JIknchuqrh3wC3yPsJMXFqCoKg+NET2+OVig==} - '@zag-js/color-utils@1.34.1': - resolution: {integrity: sha512-8QcwmqyydxQPJBMOIsMqDHS0F2wDHmvPG2XhlgoGZD6wX/++atz/usLBPV29q53HCIowrIiCh05whWyHodKREQ==} + '@zag-js/color-utils@1.35.3': + resolution: {integrity: sha512-vxkEVgz4YdSbdaPvjiRI1VsJAdwzu/dUNvzqOaiVcPDrHr/FFgmUbv0SOFjnfSb2QWGI8EDEMn02RW9ym+BzGw==} - '@zag-js/combobox@1.34.1': - resolution: {integrity: sha512-YzqOYbfh8vDmc/ewj3DetGHt0hwYuvDV/2BdCQJ5rLtLK8iLJuTB79x8l6QJBCi93BG64E7aY7Wa7jyK+1oILQ==} + '@zag-js/combobox@1.35.3': + resolution: {integrity: sha512-s1qmttTGJTMjlDakL+uvWSEggpafKr1vhOeZCh8j+N4eFt9bLAwaffjuh/1JzWBvzovw7WoMVkizdTXPlN8oYg==} - '@zag-js/core@1.34.1': - resolution: {integrity: sha512-GjOZOL/p0tsuH/koYR+mSoegs3JXpP0ZkFuidAf0R4zqklNSdTLzhb00CZHGZcdWCExhmG18YwpjbEx8eyfV5g==} + '@zag-js/core@1.35.3': + resolution: {integrity: sha512-fGAHyqOYSEFmo52t7wI4dvbFfLyJmUlyf7wknsiUlzUHlrn3yv5PAZYZ2TibpOD1hwXIp4AoCjbiIPPZBxirZw==} - '@zag-js/date-picker@1.34.1': - resolution: {integrity: sha512-ubhpCRDf7vVXSvToJvnsnqjTB2hhbsYEaeIrwsHTFAFOETD15A5H/aC5PeiwCouLEbTQDiIoaDlOsNh57IO7XQ==} + '@zag-js/date-picker@1.35.3': + resolution: {integrity: sha512-4G10h6pzzLbd84SE2CKtqi6Z9wEBhSyx4GRSxxy3tsf5wAxnz4anRFat9CGwn2YVUYcUJpD+umYgBMPt6zGDnA==} peerDependencies: '@internationalized/date': '>=3.0.0' - '@zag-js/date-utils@1.34.1': - resolution: {integrity: sha512-UG0aooQXNWINlO8RWcBFv6aEHE1jAFKU4vNprh0nDOl61O0+j+lbV0qYushgyZ7O6aYSoI+tdb/Myv+BPqQxyg==} + '@zag-js/date-utils@1.35.3': + resolution: {integrity: sha512-1co0FPpZ6nO5dN8sZtECkMYaf+3E5zu0KSIJZpZiXb4TgsZMDyHu7K7IsiKFHk9qmhuF6AdPpNxBju91pSXMFg==} peerDependencies: '@internationalized/date': '>=3.0.0' - '@zag-js/dialog@1.34.1': - resolution: {integrity: sha512-2PfuUhC2e0ouQ2s2F9qmeThwTMGptVCAMDNMh1ZOPeVzQLvnsIQDvcYHeb62BuKgYDeoUiz3Tz/ns/sV/VI1kw==} + '@zag-js/dialog@1.35.3': + resolution: {integrity: sha512-byosV+aBHH5LoFKnjEgC7WdqJid7bP9UhgWLSC7+IXbxrif9Czg1YVp6ZlQM6Nx6uD1vnty4touI3P7D7CTKcw==} - '@zag-js/dismissable@1.34.1': - resolution: {integrity: sha512-7dj7G0Cl6Fu7IHENdLT1tFeePuq8BqxPT6xANdk66hnpVeyDKcrR3XjN+ChWpYxGIkeOfPGYsjRHx1kDiFv89g==} + '@zag-js/dismissable@1.35.3': + resolution: {integrity: sha512-XPk+lqmsZp2Z1yMb5K1yj/e7Sobv4D7zK66B1GS97lk9Xzz8vuSgsimcLy0p7RXQl3KL6H5L69inSuQa2exybQ==} - '@zag-js/dom-query@1.34.1': - resolution: {integrity: sha512-7GaxMaShtWsGgsz9jPfi+aJSQrx7aVFnCi5edGet76Tcytv0MRTqFKUcpSCWu3W3znBt8tQO07Mu1SBSNQk07Q==} + '@zag-js/dom-query@1.35.3': + resolution: {integrity: sha512-1RbFZoT4CjlHN9TUNse1++ZVOyKo45ktucTIT349o6HMsoWWKmTJDPvFkMBbmu/qY6XXn4dT+LJEp4bL3DR+Qw==} - '@zag-js/drawer@1.34.1': - resolution: {integrity: sha512-8Dc6MDxVf6t9a0VQ++7hI3jSNhnVLXF4oNSnyBNUqI4XNbxffp8vk5KWeVC7fKxgoMxnlfmipiYdS+PmyWJffQ==} + '@zag-js/drawer@1.35.3': + resolution: {integrity: sha512-DN5bwa7bDCDaUSbNzFxMc2U/WmbLcXvPSQjyOpKI6CC3VbW2kKaOnjJ5qQG+W5YBO0FpmJBtaxRV7lke4sZH2w==} - '@zag-js/editable@1.34.1': - resolution: {integrity: sha512-IXR8TE/S7uuTOY/Mj3tk8zmXlpgym9OUYZGFjohVdXeUC9INIeO27ei8mfAxY3JLqnYIyrLGD0Q7OUUj2L/vTQ==} + '@zag-js/editable@1.35.3': + resolution: {integrity: sha512-HcjeacS61vQXfNT9IalZj/+oS45yW5bIDO2NjJWV7zNe5AG29NCceUnvBhy+hrUKPnKcjfDocdW5rCL+Lvs/CQ==} - '@zag-js/file-upload@1.34.1': - resolution: {integrity: sha512-lzAo3GUyHHfhRfQvlVDx7FERcCjJajyxEMuWQzOYd10jy62oaeBFkqyF2m6O3SZ6aMAiGyzR+sXpCWf/LRnxdQ==} + '@zag-js/file-upload@1.35.3': + resolution: {integrity: sha512-oIYwnDct4ERo2mfmcxsBIJnlmpzjrzYx82SQsXWD3NGKx3cgdh2lwBX+ebItaLH1jkgzBa3z0TWxc6rfvcUXbw==} - '@zag-js/file-utils@1.34.1': - resolution: {integrity: sha512-fn6FoCg36hkFvn5MrMgs3kT9T+EADnPIV90hz2uyf1VmHq6BudYU13yhebqfY0vWHk7vGmXWkiZaemW5JkXbRA==} + '@zag-js/file-utils@1.35.3': + resolution: {integrity: sha512-Tb05RCzx4swc156hd4jLiO7z+Gxg/HQ+JCds03jgTbrFJAz2D56YaMeI7gSDc1m4Xre3nyqQpSo9AeX5nzbE/w==} - '@zag-js/floating-panel@1.34.1': - resolution: {integrity: sha512-2yreCW74MO047Yd3jjofFyJpbfd55E9TBw0Hh4W1kMPpWg8E3XnL4gWrYYKX6ycjeWNVNNvyAg1O/0qiM49fiA==} + '@zag-js/floating-panel@1.35.3': + resolution: {integrity: sha512-nTZypcS0X46Oo1kpCQTnP5UlzjhypOAj3B4dq2z/3bAOC0TntYTnFkj8PbEJtExk7364xfMyxfgZOiv7Aqq01w==} - '@zag-js/focus-trap@1.34.1': - resolution: {integrity: sha512-vfIC3diaYbdxDmKmNASZYx0RrNj6bG0InrIgQF0Kk/qI81FcK/VXQDjpXnnWC+yG2u3hG8h+6kbfgHtgoCuDjQ==} + '@zag-js/focus-trap@1.35.3': + resolution: {integrity: sha512-evErLlGFdDVCI8xipNS5k0rAvO+KFRA9g273bbfWAL1+mT54mcB/XHa85nC3QpPgMNrSh+6LUNq9fapyOGoyYg==} - '@zag-js/focus-visible@1.34.1': - resolution: {integrity: sha512-Wvl/w6JpPU8DwEfq+I82yzlBX9mEp2o2k6DZc+3Kb3x/3oP8Jr0fCXdk+qWTvKekfVvDpM2vS1fjNNLfiOaQww==} + '@zag-js/focus-visible@1.35.3': + resolution: {integrity: sha512-g4F8PRGIoFoKBrHiQ1HQh5AjCS7brFRXHvpbDNb9+T11FGlF5Turb+6OVRoNV8MmiuqMltO2I28l36YsGc//uQ==} - '@zag-js/highlight-word@1.34.1': - resolution: {integrity: sha512-pPT5xaxTfW6E8/CRzMhtRTfacd6C/XpLtSCuDV0Ps84rAjsl1yrHJBT2InaMTR0fKbZd+T9HcUFKtvAe48qQfA==} + '@zag-js/highlight-word@1.35.3': + resolution: {integrity: sha512-K+mvEBbf3SUFjQeMeJQYb3cjri3x6sPaPhcKWayalelSLB/StWEGqcpmz+a6uUYrCUAK5kEi3Hn0YLGfn0GOig==} - '@zag-js/hover-card@1.34.1': - resolution: {integrity: sha512-o5ikKq83QVs63kouL3QyRIdSjs6On9joyl2/JnlWLEhGJA4NfdMLDUwdbUOzEbQgtlj8RV0VQN09lRtqs7UBWw==} + '@zag-js/hover-card@1.35.3': + resolution: {integrity: sha512-xVoKOtvrnzhYzciZ1csgiV76IQ4DRtx1lsJeFSrfg5MH0kYWeC/pcmm3yCd2+Qh/45J7DbSXeZneqxpyiF5Vvw==} - '@zag-js/i18n-utils@1.34.1': - resolution: {integrity: sha512-LqBStUq24txCz0CFW1R9/kaSA3ZrB13DpRdQfZ+o8C8HxRokdUe8Nz0uxko8NtXgO8hput9CSs5+xKjg1buc2A==} + '@zag-js/i18n-utils@1.35.3': + resolution: {integrity: sha512-k7UcNxbnC2jvGwCoHYAkFD3ZaRSMQNVHfuy8TujZQ+ci3IJovwgWLveZoRfFbXHkTLfhmbpE2tFXBdpwOVZutg==} - '@zag-js/image-cropper@1.34.1': - resolution: {integrity: sha512-LKVaIqv98BchQOQ6R7tir3mBYODZCYMwjfsNj7YgnnsN+gh9Fie1Cy4Hy/3UMMsXXCJL8LgOWULsK9Vc8PJOzw==} + '@zag-js/image-cropper@1.35.3': + resolution: {integrity: sha512-1PH6bg8JAQESHzNqjka2TJ0QGNBGBAO6rb7AZ+9CaCCLw0pIzbUJhqPMkwd9GhdWGKGP+e7wFitnjcT4W5Js8g==} - '@zag-js/interact-outside@1.34.1': - resolution: {integrity: sha512-wQdOYVhPFyYPJUDPYXQc1tg8vdJGTG5xwTEdOGVG1DpVo87VNsdb0KjnWPZsfPQEUSkvJIXtbjopp/OLw4fFow==} + '@zag-js/interact-outside@1.35.3': + resolution: {integrity: sha512-tOcuo/IztzpU7UKXtjVrLZtXzzcbhP4n2WynKwDRkTkq3mRCp61xXJp1csIBycI3JHm/CMeAEcPdRIioxIT/Zw==} - '@zag-js/json-tree-utils@1.34.1': - resolution: {integrity: sha512-MfZZvBxexy24VJtBGM8ngsoMILiVRI/MwL2+LVJQcuRlAyKvPBC5BnTSxVpokXIiu0cCHyvzAYbXqAcBNM+gWA==} + '@zag-js/json-tree-utils@1.35.3': + resolution: {integrity: sha512-nOv2dPJf+1mxsobYiSlYt96hR1MK7iHKG1iDLoO5wLggS6GQA3ix1BerHJK0zdehoEZ71R45el5ghCG1HB9VzQ==} - '@zag-js/listbox@1.34.1': - resolution: {integrity: sha512-0KcGH8lILd1fLO49VCl3nyalesm+Nvr6/oH6qflsbn+frM4JaDcF/S6gngtKXJ8Mzx+5Qua97uAvuk047Z0I/A==} + '@zag-js/listbox@1.35.3': + resolution: {integrity: sha512-FE6FOuBr6aWtOb8U8oDvAvcUzD6JKLXAe8WngiLFG+b2yyW4nlaz2AcKRG1bjjB066UMxMo9/+2p4D0Kf5Id1Q==} - '@zag-js/live-region@1.34.1': - resolution: {integrity: sha512-0Heu0z0cBQQDA1289nm0wQM3+ybEuOSqpPffHQdRgaTtUWnG0xkw0jt8qq0A/tq2VIlwLnbNledE4dh1Y6KwhA==} + '@zag-js/live-region@1.35.3': + resolution: {integrity: sha512-64rWcfggYpyr2Fn4pdrB/lljMgm3quwn9is+vdDN85Vv3WShKWoz08T4njidm0hwcIbzas0bRqQYWDLLsAoSJQ==} - '@zag-js/marquee@1.34.1': - resolution: {integrity: sha512-SR5H7oBjjtwvO893Zu8oCzwVSHOkOSSlOuzuOkoebTGIVxHXtWukM6hS9wxgS40Tp03X1qzeI1XqiCGK1wqaaQ==} + '@zag-js/marquee@1.35.3': + resolution: {integrity: sha512-bKZVpmAJWPDORP7WOWnS+65W5ZQBQmRs8zvV33ZfCpFbkXjhRiqKSzIj223/VOc2NEDjyWagz2vioAxrFYVzww==} - '@zag-js/menu@1.34.1': - resolution: {integrity: sha512-nhVM6dNf48QqeY0qzn6n5hTk8qbBM7FwnGAUJmGRx9nrrG1SpIpQ5sCxDcOwgI/Q2vMu+2ggmIiObvZKAqZkiA==} + '@zag-js/menu@1.35.3': + resolution: {integrity: sha512-KyY0EZXkIU57Mjt+Lg+pupiePk3LcnQcB3Gl05Vva61bNjBjdKV71qwCQru/OxPZEwYgPo46L7TDIb56kfK/VQ==} - '@zag-js/navigation-menu@1.34.1': - resolution: {integrity: sha512-LwGyM0VpcZxvIvoEnnAEVV3+gGQ+SLYjhj9M1GFJrtFBlHF+dhCRS3sJ1m58RiZYAiJgt6jiNe94S+WRbXs+9g==} + '@zag-js/navigation-menu@1.35.3': + resolution: {integrity: sha512-8cCHx0X/KjEpr2BaMOxJS5LiA6fs/CNqVTF/sTTgZAv7Dm+MH0yNuKm4kpPvcLaVeBpVE09bnyCHrNKzZes+Fw==} - '@zag-js/number-input@1.34.1': - resolution: {integrity: sha512-ZcqsC7XRzutc3nDV1AJO/kwb6ycAeDGTMOL3jTQND0xPZfUb5u/YZcMxinWHLwXZZ8ZuXZeWvtiy3veCUJGCFg==} + '@zag-js/number-input@1.35.3': + resolution: {integrity: sha512-uqawVybAcLcefVEHMVONuAA5kDSDPP5TsROr5PnAyFlhM1iD85+r3KAfCueoDX5w2X4ibbu9o2tdV6zTFKD/nQ==} - '@zag-js/pagination@1.34.1': - resolution: {integrity: sha512-lnQsu1TxiLUDYiIL5mng2dA5RtyBG4WkZeMCZXhk8gCe8wBJ4jbTe3KhPBAFALV9Lq4YCrV/DyhsCNWcoXGkyg==} + '@zag-js/pagination@1.35.3': + resolution: {integrity: sha512-fKm4s5KAd12RiCI/EDmmGKjPQ+i2qS/UsJPdMe65yb/4mY5OibwV2zyHcVeFsOD4gBZpnU6kYlDAGSttmLWLlQ==} - '@zag-js/password-input@1.34.1': - resolution: {integrity: sha512-0gay9u9NqN8b4QuIpABlCtP93TbQJ8uRGurUSQwgbbG6llf+EOLiZs5f0H19MVnhbcINatv9p34Je6GAP2SBbA==} + '@zag-js/password-input@1.35.3': + resolution: {integrity: sha512-etd0gm6ELAm3y+cFhPU+TYm8khm9cL5Mg5m2DcZxu1Mqpj7JY0LsXZ8SFOdCZgTIHuMEhKBiYfnuyMAd4CJztA==} - '@zag-js/pin-input@1.34.1': - resolution: {integrity: sha512-xmXdDA2JahFD+I+avDw62WX9/tKH6ab6rkn46ciqHbGTTgSW23s/btiPRuMshdd4lnqXgQgKBE/wkVdRZzeRnA==} + '@zag-js/pin-input@1.35.3': + resolution: {integrity: sha512-ZFt+WIHMdVlSg29BrQLFq5ijabiUO3tXMhoKhjjzTSe/tLqfNeu3UxFB6y/FYpn8+Cvn6xwvhu3lgnORYmI0zQ==} - '@zag-js/popover@1.34.1': - resolution: {integrity: sha512-zIbR0weo16mxOmsjwDCjyMvYZjZjSKSx00YnRinsZw388SzFYRQoKV1eEpHsms8SD6xPIcqfGqedv3oCOBss4Q==} + '@zag-js/popover@1.35.3': + resolution: {integrity: sha512-+MIEENPsbKPxzoNuDI/C5d5ZN9uxnfZ+MBDc5C5XSgjjg9FcvMXClNq7IFM1aZi24peRXg9cMNf//lApVRT37w==} - '@zag-js/popper@1.34.1': - resolution: {integrity: sha512-e9xklP5YjfqS6sTSzezsRBdaD5ilMTQoEedAQecy16jstIAQsberctUYZVg8vRQubA9ukmv1JvaNbkVFclr13w==} + '@zag-js/popper@1.35.3': + resolution: {integrity: sha512-gpB7Xn9WtlfrUsIVbSgNQGDwgNOL/cSGt0Id3wEQKArmqVC704EWtPvXzOMMybBEdm8YW2hQrXuo+o66abI1Sg==} - '@zag-js/presence@1.34.1': - resolution: {integrity: sha512-KxbxEvZwpFAeStKFLCIc4tNZ0T9bEfdhY0f2PEfITsiu0b4s5JVu5+ClUqvhhNI1TUcn6Hah3ZvBkvQZGf9soQ==} + '@zag-js/presence@1.35.3': + resolution: {integrity: sha512-ev5E7+U9IZAGvEaflpdVLHaZl8ZaQMhGB3ypd0yKhPwXeM51obV8w3+5HjzTqHPl8TKuoHWL31YaiUBd5EuS6w==} - '@zag-js/progress@1.34.1': - resolution: {integrity: sha512-w1/wTOuxOZLt+VttcyaBef/Us2DfS3omN+1c0Cyqu61VVPAfQj1cE05K8M52H2VkSMvpTjMqW23cAfX3nfGWig==} + '@zag-js/progress@1.35.3': + resolution: {integrity: sha512-u0GxQN1AfXMAgzYOUMxKQA12DyuAP0svh2S//KvOorTSv7d5hAa8nZXi2cEv5abYsyfKJ6/bc1Z56byzW1jVZw==} - '@zag-js/qr-code@1.34.1': - resolution: {integrity: sha512-Y331dZLgEXYsM6bmRUmZi8eBbplNmlEd1yaYutyljoJ9rl/EuUtcCjLS1QoDCIFxS6egtbYBQamqCtUA0DIakw==} + '@zag-js/qr-code@1.35.3': + resolution: {integrity: sha512-t0Ehwogr49vTNtWyNdQU2tYex7uJyfAn7N/5LgD7FXw8aa+RBMWZWlqjCUvHqJ929tVMrn+LIrQnZCcwNunalA==} - '@zag-js/radio-group@1.34.1': - resolution: {integrity: sha512-dRy7Z1zE2qwyyjI68icLBkPzM+ZzL0aAklFVc7kd/ejYxZfk6SrPoMjg3u22a34J2scxHwh/LdSuQFmauj4sAA==} + '@zag-js/radio-group@1.35.3': + resolution: {integrity: sha512-kOzocjqWk3dXuRfyfsHwfw63Z99NHbc7rvVUutSsfXANXi+DFYZHuqdPUwMt+29LfaL15XTOfuGV+yUXDCgQHQ==} - '@zag-js/rating-group@1.34.1': - resolution: {integrity: sha512-ndvw9jHGYO1bYaYN4xL2z+zQimXoetPgems43YChbntOzfbSELYSXvdLG1KCll3Kti/caHgRT+yaodHcTvjN3w==} + '@zag-js/rating-group@1.35.3': + resolution: {integrity: sha512-BmhJZdbaTnd3nFWMY+nR+HF952UhWXfaXXxiBWptSLMBfAYImQTWBMrLgTHCSnVfmFATj4Gb7xQe79FQU8T5fA==} - '@zag-js/react@1.34.1': - resolution: {integrity: sha512-i1NDSvptwY8e+DEYyTJb+UVjg6b2pBLMJe3vkg45UUhm6AHpmusphnooBPOpmEhzDeoDAPIoQY05LYvaSut7dQ==} + '@zag-js/react@1.35.3': + resolution: {integrity: sha512-x2PxYUCQ6OgOpUdmSkG5tbL9JWVqYRh42r4V2UeAdMh0MRwjAJtxjvAy50DZ8Sfia5o4UGdZMXJyDY2O7Pdhyw==} peerDependencies: react: '>=18.0.0' react-dom: '>=18.0.0' - '@zag-js/rect-utils@1.34.1': - resolution: {integrity: sha512-ms81ltfYBsabzk6tqy+kheMAUkx9IB+AUt8sATWGgqSTemBuMv/dptCJt3+WbkQjc8NveuEWmq3S6w1KJ31gaQ==} + '@zag-js/rect-utils@1.35.3': + resolution: {integrity: sha512-mt/oD3RXdyaX6ZPSd8BO13vvPBJ7QpVWieubE3O0WM3OPhU7ykDMRp/tR7cYMQrzUm04GlY9pbkmSSw2uABxlA==} - '@zag-js/remove-scroll@1.34.1': - resolution: {integrity: sha512-irnvF4cwoAidwdU4UsPQyhTivnY3V/ZBO9EW/zTJ78qm3sjkRDDZsKEVV2UstUEmvH1jcFFPp6eNoTVItsyJBg==} + '@zag-js/remove-scroll@1.35.3': + resolution: {integrity: sha512-e59z9SbEpPiw0qwNQa2cB5/h30ZCLREaHsCw1TKTANFhwg7v85k9Lq1H/G/49li1CAjmiaOU9BNGlDvbzpNETQ==} - '@zag-js/scroll-area@1.34.1': - resolution: {integrity: sha512-yP4D+j8D99kVRX9mJfPDHKS4wYVZgPs4S6qqCnVGZHTngMvrzzVtHYTzNdn+jnKHIVqYBizO3lIglAd7jQOvTw==} + '@zag-js/scroll-area@1.35.3': + resolution: {integrity: sha512-IQwdUws/AckRIHK1z/wHdHurnOeGd8h8Dmspfh3VT7NkwTnxeJ4SW9di9smuD+d25eXkJRuX5zGEDHAyx2IaPQ==} - '@zag-js/scroll-snap@1.34.1': - resolution: {integrity: sha512-pvgbJ3tjKRM1LlF14QY5riV/KT2EYGfYY4Cl5QuONqjO0ergrRd0FxDzhiwqIthgXrDZOavMucr7yqCLrjVQQA==} + '@zag-js/scroll-snap@1.35.3': + resolution: {integrity: sha512-NVa2yRm2DQnF6hTV9k7Xz7l8YCZBagZTiqSwNvWKUulKD1csjt2fpBxvUt2cK+1iQnLOey2ydhs7MMsAnXPbJA==} - '@zag-js/select@1.34.1': - resolution: {integrity: sha512-4Pc062McPgdRYwOU6v8jaqP48nBeTuSbuToHWixTVUhDkAsLDd7A8od2sKPsGHRsPOce0D259vJS5L3c0vtfig==} + '@zag-js/select@1.35.3': + resolution: {integrity: sha512-ztszGHWvlbBDE0YT5LYPH+sMd6VH1ct5pH/M9VSzIUO6C5PARkW0NwSVQ1rCQJMj4sfvSE1gC1/r7urRzqEcUQ==} - '@zag-js/signature-pad@1.34.1': - resolution: {integrity: sha512-yeYi4Tl+IgPfGA5ejbYSpHU52MBchR0S2aqT9X4kRJniCcnKLV3ZI5VOz8cYXCpYMDiWSsQnzcIIohHNHVhK2g==} + '@zag-js/signature-pad@1.35.3': + resolution: {integrity: sha512-jvtxxzAQ8fre11zWUh6HflG4Ycr5z83Wba4pONRJbUE/vNgkJQ7yJgfyUl1QTlkn8Arfg2Zwoxu9GIq80HLZWg==} - '@zag-js/slider@1.34.1': - resolution: {integrity: sha512-mzM1IhbldUdaS9aBNdAJpA2B1uF0vdIeEv5X9Fcn8xD/u+o8RMiFomunJmMDwZ8VlSnODwomopOP5UVKI9J3SQ==} + '@zag-js/slider@1.35.3': + resolution: {integrity: sha512-Th142JO4Fqla5AWhGrTW6CQicwvTw87PdVpur/WotQ7brlZIww5HipzEMh5eQJSWfwpKD4PI2bYK9V/ZE/mpXA==} - '@zag-js/splitter@1.34.1': - resolution: {integrity: sha512-Gg3KC1Moo+67/96Mo/EIz/0/I1Ib5Ui5uC9mdnAwzVdKjanEHRHSV6uCZITA4wlFKA7lQKbDwjhRo0kqsw8egw==} + '@zag-js/splitter@1.35.3': + resolution: {integrity: sha512-IsIbRwzjr5amGANEDsZDSToaSn8wHUWvS2l0XHmf3BiiguVApaZgQTlfqthVQC9hBHMOaGIXIW1CFUOrQYkvUQ==} - '@zag-js/steps@1.34.1': - resolution: {integrity: sha512-3MlrmND0MLrMXh1oXkDQkn3V4XuF5Li93wVVT7pvCT+VxnXgXUWGMT82IM2Edj/MA6DTbUqZtOEfFkcFw3aySw==} + '@zag-js/steps@1.35.3': + resolution: {integrity: sha512-TYIrqV+v9/ULhvrTRBtQFFvJQPPTWOmjFXxlIxDwozek5R4dCIyeUYt1/ChJEc2mNETocbfDVSTxRO1dwCFpwQ==} - '@zag-js/store@1.34.1': - resolution: {integrity: sha512-127OWtrFKuS9HsbZITancVrydA9CpDHxyS5V+gDA7bnsNdw8kKx1H82oMh8Ok6hkDXvilhEB+g+UIOVeQD7RwQ==} + '@zag-js/store@1.35.3': + resolution: {integrity: sha512-7kEV4T/20DU36UIfVMzuDlLhWSSEy/vabmpiB700tcdD9BBBODTiSg3ZeljW17dQbvE545vZOFEjVf/cQ5LVGA==} - '@zag-js/switch@1.34.1': - resolution: {integrity: sha512-yOibKwJ+/WZBxVBpiK7mFEFjz88rLCzAhYEr5Om52fsWPc7BbxZKBZw058e0yx5mEBXJUTXNebgp1fkmth7U9g==} + '@zag-js/switch@1.35.3': + resolution: {integrity: sha512-EP/2cJ46sd+6C5x5+89jn/9NOpM05CRESYB4RMhOnTe/WFtcS4IpiYtVHFhikdXkvJoibm67O2EHep2Pm/Xj4w==} - '@zag-js/tabs@1.34.1': - resolution: {integrity: sha512-5qAz3jyawmfwpIjd5rNe10yae3YdZSaUu9bNk8ZzJXkXu+Sf69BO6M/k32+ZtAS1i+cku7ZXluza95CxA/Oshg==} + '@zag-js/tabs@1.35.3': + resolution: {integrity: sha512-lZKlDmxE25miCikj9QZCCnL02SVV2K14KZy5bn7+XDgrWlfSNTpNTj8r5E3zGlSgio5pkTGou57ASqS7WaPDWg==} - '@zag-js/tags-input@1.34.1': - resolution: {integrity: sha512-6kgb9Ww+sgTi5kV0eoPE+uV42R2PCj4plUffNK+z4j3+km2T2jvp2/gvB6JKk0aV2NCzVzQ3lyk+Oy62sH6lyg==} + '@zag-js/tags-input@1.35.3': + resolution: {integrity: sha512-HqyoQ3DZFhByOGnDShFfxi6u0bIf7aSVTlwmAvcL+b2ZhyU6/wIMGc4WJE7BMx1NYWM/jNLHedvGExAI8R0kXQ==} - '@zag-js/timer@1.34.1': - resolution: {integrity: sha512-awQXcKCHAKS+XBJCV+TpZhSI+zRmQCtYUqVjXMv6Mj1jmB7PS/I7gAt1D7wGmMKtkBZ4vbRxe2p2qO3StlpxRA==} + '@zag-js/timer@1.35.3': + resolution: {integrity: sha512-edmgitbRgsq+msxvVB4wc17Q5d5k63zMWaLJnWjUdDGAgEtM6/HNxwGb3riv46S2U3RgYxaaHTNZ/M7EE5mvYw==} - '@zag-js/toast@1.34.1': - resolution: {integrity: sha512-Ad1QQ2aSbJUO+wDOLRAONrhhTsAm6YHwSxKnp4wMOvTw6UcBgRr2MeebrvYx/kwHa4UK/Y9L5rxoyRoTrk2mGg==} + '@zag-js/toast@1.35.3': + resolution: {integrity: sha512-whlR791GHdnMD21nNPsl2Dbql8+qu1wBZl75QzwYrjR8FlKjp8bhr3gXKzQEddcBXe9GPEFGvUs4iCyXsuTbpg==} - '@zag-js/toggle-group@1.34.1': - resolution: {integrity: sha512-QDgABKDhz8EShqZoIK4NR0Ca2qDpOYAaClHlq4loyWqBhKSt1Xtok7GaD4iwer+U/5WpkzJqIlwV2nC09dsRpA==} + '@zag-js/toggle-group@1.35.3': + resolution: {integrity: sha512-Gn6JHzkQ4tlttjZcE0ZjIdxYkFeVp9VHrcMVizjJTkGZRmQ+kPZ5G/wOsZhIrvLX3Dw6Y0NkuBcP+jDHz/o3TA==} - '@zag-js/toggle@1.34.1': - resolution: {integrity: sha512-zwKX3+VMHg5U6/b0pzHIto7TQTWVHgKpoenzSApGnoHcJMgJRLkV738uBgmiP6wGzgAX9RmUIf1jjzOdLFndaA==} + '@zag-js/toggle@1.35.3': + resolution: {integrity: sha512-aFfHKuR4sKzglhkmWLA+0RTNPs9dfeqwtc96qljawGYfAYWJXkEPYK9dFfVa+arZ7L84xBi24QSLiTg7LGSFLw==} - '@zag-js/tooltip@1.34.1': - resolution: {integrity: sha512-3IsEixpaOqZ6ZRSqEabZOp97yHx2uQFFA6Ge9FbJC+gK7clqwoqPJrg79PkBYTBvi0H7JoyRPhImWRSQES2YSA==} + '@zag-js/tooltip@1.35.3': + resolution: {integrity: sha512-/pImDGYl79MfLdvEphj3rSvNdj2tLW4GwGEncgdLM/GKwQiEUjfi/9EJOfLYP23M4lOOnoW7orehJ9xeaXOAkA==} - '@zag-js/tour@1.34.1': - resolution: {integrity: sha512-V1uw8VulpQJ6HG6OR0BSQHphnkEJLMPV9EyN2nm+d7JWKiikxLf2zlopw/CKwaBbg4JNlqo2q1K0lhzv2wBeBQ==} + '@zag-js/tour@1.35.3': + resolution: {integrity: sha512-DI2aCXmZaE9KcPZDs9itc2BO7ixLApJ/yVRfM69pXwVOrucdSeDDNPFkfbhj5XwB+9VjjZEkqWFHKntRIyPl5g==} - '@zag-js/tree-view@1.34.1': - resolution: {integrity: sha512-ExoUFplWtTyVEGITgAFR2kIaJax/zznPuWVBiWL+Avf7qn0+CCs1b1JOPeGQtqUXk9Fso67uw9BwNQFOxbQelA==} + '@zag-js/tree-view@1.35.3': + resolution: {integrity: sha512-DbHaLxSNa1goE3o3IsXxEdzp8P5dvmkk1rVWgNUUIhpA+44idEjSSNXJkHPl18Mk5blqSMVjK1EX91oqai01Vw==} - '@zag-js/types@1.34.1': - resolution: {integrity: sha512-DAg2cD5g0PvYGIC08GWa71aSyO2IEGlQCIIdOtmUSN2PdLyRi3IllNHlnDYFCkTGbb0GUunCro8FLvE9Aj2BOA==} + '@zag-js/types@1.35.3': + resolution: {integrity: sha512-Fnm3AMs1lfb55hlkip/eJeWHOjFB3gSi1JkZlkkdltG2l7y/zsHkumPSe6jIKy+DRRIFKRCyXVTatbPN27bO3w==} - '@zag-js/utils@1.34.1': - resolution: {integrity: sha512-XgNTbcxPgNkPEuH/s/WUSU3M1mnO7453P53Wvym3dte+zPmqjwf5VT1FmEw8t6YQDBiBkIEKpUnNwR2x/pmZgg==} + '@zag-js/utils@1.35.3': + resolution: {integrity: sha512-LHcC+9y6TFhDsIz9I3koYxONl2JFfx5yQDzc6ZEQO2cqzXedRcN0R9IPqNGCX7JuhGt14ctDkVCm1JWGP2J6Wg==} JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} @@ -5271,8 +5299,8 @@ packages: es-toolkit@1.33.0: resolution: {integrity: sha512-X13Q/ZSc+vsO1q600bvNK4bxgXMkHcf//RxCmYDaRY5DAcT+eoXjY5hoAPGMdRnWQjvyLEcyauG3b6hz76LNqg==} - es-toolkit@1.39.3: - resolution: {integrity: sha512-Qb/TCFCldgOy8lZ5uC7nLGdqJwSabkQiYQShmw4jyiPk1pZzaYWTwaYKYP7EgLccWYgZocMrtItrwh683voaww==} + es-toolkit@1.44.0: + resolution: {integrity: sha512-6penXeZalaV88MM3cGkFZZfOoLGWshWWfdy0tWw/RlVVyhvMaWSBTOvXNeiW3e5FwdS5ePW0LGEu17zT139ktg==} es6-promise@4.2.8: resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} @@ -5695,8 +5723,8 @@ packages: ws: optional: true - graphql@16.13.0: - resolution: {integrity: sha512-uSisMYERbaB9bkA9M4/4dnqyktaEkf1kMHNKq/7DHyxVeWqHQ2mBmVqm5u6/FVHwF3iCNalKcg82Zfl+tffWoA==} + graphql@16.13.1: + resolution: {integrity: sha512-gGgrVCoDKlIZ8fIqXBBb0pPKqDgki0Z/FSKNiQzSGj2uEYHr1tq5wmBegGwJx6QB5S5cM0khSBpi/JFHMCvsmQ==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} h3@1.15.5: @@ -6829,8 +6857,8 @@ packages: resolution: {integrity: sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==} engines: {node: '>=16'} - ox@0.12.4: - resolution: {integrity: sha512-+P+C7QzuwPV8lu79dOwjBKfB2CbnbEXe/hfyyrff1drrO1nOOj3Hc87svHfcW1yneRr3WXaKr6nz11nq+/DF9Q==} + ox@0.14.7: + resolution: {integrity: sha512-zSQ/cfBdolj7U4++NAvH7sI+VG0T3pEohITCgcQj8KlawvTDY4vGVhDT64Atsm0d6adWfIYHDpu88iUBMMp+AQ==} peerDependencies: typescript: '>=5.4.0' peerDependenciesMeta: @@ -7138,8 +7166,8 @@ packages: preact@10.24.2: resolution: {integrity: sha512-1cSoF0aCC8uaARATfrlz4VCBqE8LwZwRfLgkxJOQwAlQt6ayTmi0D9OF7nXid1POI5SZidFuG9CnlXbDfLqY/Q==} - preact@10.28.4: - resolution: {integrity: sha512-uKFfOHWuSNpRFVTnljsCluEFq57OKT+0QdOiQo8XWnQ/pSvg7OpX5eNOejELXJMWy+BwM2nobz0FkvzmnpCNsQ==} + preact@10.29.0: + resolution: {integrity: sha512-wSAGyk2bYR1c7t3SZ3jHcM6xy0lcBcDel6lODcs9ME6Th++Dx2KU+6D3HD8wMMKGA8Wpw7OMd3/4RGzYRpzwRg==} prettier@3.8.1: resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} @@ -7266,8 +7294,8 @@ packages: react: '>=17.0.0' react-dom: '>=17.0.0' - react-number-format@5.4.4: - resolution: {integrity: sha512-wOmoNZoOpvMminhifQYiYSTCLUDOiUbBunrMrMjA+dV52sY+vck1S4UhR6PkgnoCquvvMSeJjErXZ4qSaWCliA==} + react-number-format@5.4.5: + resolution: {integrity: sha512-y8O2yHHj3w0aE9XO8d2BCcUOOdQTRSVq+WIuMlLVucAm5XNjJAy+BoOJiuQMldVYVOKTMyvVNfnbl2Oqp+YxGw==} peerDependencies: react: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -7578,10 +7606,20 @@ packages: peerDependencies: seroval: ^1.0 + seroval-plugins@1.5.1: + resolution: {integrity: sha512-4FbuZ/TMl02sqv0RTFexu0SP6V+ywaIe5bAWCCEik0fk17BhALgwvUDVF7e3Uvf9pxmwCEJsRPmlkUE6HdzLAw==} + engines: {node: '>=10'} + peerDependencies: + seroval: ^1.0 + seroval@1.5.0: resolution: {integrity: sha512-OE4cvmJ1uSPrKorFIH9/w/Qwuvi/IMcGbv5RKgcJ/zjA/IohDLU6SVaxFN9FwajbP7nsX0dQqMDes1whk3y+yw==} engines: {node: '>=10'} + seroval@1.5.1: + resolution: {integrity: sha512-OwrZRZAfhHww0WEnKHDY8OM0U/Qs8OTfIDWhUD4BLpNJUfXK4cGmjiagGze086m+mhI+V2nD0gfbHEnJjb9STA==} + engines: {node: '>=10'} + serve-static@1.16.3: resolution: {integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==} engines: {node: '>= 0.8.0'} @@ -8328,8 +8366,8 @@ packages: typescript: optional: true - viem@2.46.3: - resolution: {integrity: sha512-2LJS+Hyh2sYjHXQtzfv1kU9pZx9dxFzvoU/ZKIcn0FNtOU0HQuIICuYdWtUDFHaGXbAdVo8J1eCvmjkL9JVGwg==} + viem@2.47.6: + resolution: {integrity: sha512-zExmbI99NGvMdYa7fmqSTLgkwh48dmhgEqFrUgkpL4kfG4XkVefZ8dZqIKVUhZo6Uhf0FrrEXOsHm9LUyIvI2Q==} peerDependencies: typescript: '>=5.0.4' peerDependenciesMeta: @@ -8672,6 +8710,24 @@ packages: use-sync-external-store: optional: true + zustand@5.0.12: + resolution: {integrity: sha512-i77ae3aZq4dhMlRhJVCYgMLKuSiZAaUPAct2AksxQ+gOtimhGMdXljRT21P5BNpeT4kXlLIckvkPM029OljD7g==} + engines: {node: '>=12.20.0'} + peerDependencies: + '@types/react': '>=18.0.0' + immer: '>=9.0.6' + react: '>=18.0.0' + use-sync-external-store: '>=1.2.0' + peerDependenciesMeta: + '@types/react': + optional: true + immer: + optional: true + react: + optional: true + use-sync-external-store: + optional: true + zustand@5.0.3: resolution: {integrity: sha512-14fwWQtU3pH4dE0dOpdMiWjddcH+QzKIgk1cl8epwSE7yag43k/AD/m4L6+K7DytAOr9gGBe3/EXj9g7cdostg==} engines: {node: '>=12.20.0'} @@ -8695,14 +8751,14 @@ packages: snapshots: - '@0no-co/graphql.web@1.2.0(graphql@16.13.0)': + '@0no-co/graphql.web@1.2.0(graphql@16.13.1)': optionalDependencies: - graphql: 16.13.0 + graphql: 16.13.1 - '@0no-co/graphqlsp@1.15.2(graphql@16.13.0)(typescript@5.9.3)': + '@0no-co/graphqlsp@1.15.2(graphql@16.13.1)(typescript@5.9.3)': dependencies: - '@gql.tada/internal': 1.0.8(graphql@16.13.0)(typescript@5.9.3) - graphql: 16.13.0 + '@gql.tada/internal': 1.0.8(graphql@16.13.1)(typescript@5.9.3) + graphql: 16.13.1 typescript: 5.9.3 '@adobe/css-tools@4.4.4': {} @@ -8714,7 +8770,7 @@ snapshots: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 - '@ardatan/relay-compiler@12.0.0(graphql@16.13.0)': + '@ardatan/relay-compiler@12.0.0(graphql@16.13.1)': dependencies: '@babel/core': 7.29.0 '@babel/generator': 7.29.1 @@ -8727,7 +8783,7 @@ snapshots: fb-watchman: 2.0.2 fbjs: 3.0.5 glob: 7.2.3 - graphql: 16.13.0 + graphql: 16.13.1 immutable: 3.7.6 invariant: 2.2.4 nullthrows: 1.1.1 @@ -8738,14 +8794,14 @@ snapshots: - encoding - supports-color - '@ardatan/relay-compiler@12.0.3(graphql@16.13.0)': + '@ardatan/relay-compiler@12.0.3(graphql@16.13.1)': dependencies: '@babel/generator': 7.29.1 '@babel/parser': 7.29.0 '@babel/runtime': 7.28.6 chalk: 4.1.2 fb-watchman: 2.0.2 - graphql: 16.13.0 + graphql: 16.13.1 immutable: 3.7.6 invariant: 2.2.4 nullthrows: 1.1.1 @@ -8754,73 +8810,73 @@ snapshots: transitivePeerDependencies: - encoding - '@ark-ui/react@5.32.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@ark-ui/react@5.34.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@internationalized/date': 3.11.0 - '@zag-js/accordion': 1.34.1 - '@zag-js/anatomy': 1.34.1 - '@zag-js/angle-slider': 1.34.1 - '@zag-js/async-list': 1.34.1 - '@zag-js/auto-resize': 1.34.1 - '@zag-js/avatar': 1.34.1 - '@zag-js/carousel': 1.34.1 - '@zag-js/cascade-select': 1.34.1 - '@zag-js/checkbox': 1.34.1 - '@zag-js/clipboard': 1.34.1 - '@zag-js/collapsible': 1.34.1 - '@zag-js/collection': 1.34.1 - '@zag-js/color-picker': 1.34.1 - '@zag-js/color-utils': 1.34.1 - '@zag-js/combobox': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/date-picker': 1.34.1(@internationalized/date@3.11.0) - '@zag-js/date-utils': 1.34.1(@internationalized/date@3.11.0) - '@zag-js/dialog': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/drawer': 1.34.1 - '@zag-js/editable': 1.34.1 - '@zag-js/file-upload': 1.34.1 - '@zag-js/file-utils': 1.34.1 - '@zag-js/floating-panel': 1.34.1 - '@zag-js/focus-trap': 1.34.1 - '@zag-js/highlight-word': 1.34.1 - '@zag-js/hover-card': 1.34.1 - '@zag-js/i18n-utils': 1.34.1 - '@zag-js/image-cropper': 1.34.1 - '@zag-js/json-tree-utils': 1.34.1 - '@zag-js/listbox': 1.34.1 - '@zag-js/marquee': 1.34.1 - '@zag-js/menu': 1.34.1 - '@zag-js/navigation-menu': 1.34.1 - '@zag-js/number-input': 1.34.1 - '@zag-js/pagination': 1.34.1 - '@zag-js/password-input': 1.34.1 - '@zag-js/pin-input': 1.34.1 - '@zag-js/popover': 1.34.1 - '@zag-js/presence': 1.34.1 - '@zag-js/progress': 1.34.1 - '@zag-js/qr-code': 1.34.1 - '@zag-js/radio-group': 1.34.1 - '@zag-js/rating-group': 1.34.1 - '@zag-js/react': 1.34.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@zag-js/scroll-area': 1.34.1 - '@zag-js/select': 1.34.1 - '@zag-js/signature-pad': 1.34.1 - '@zag-js/slider': 1.34.1 - '@zag-js/splitter': 1.34.1 - '@zag-js/steps': 1.34.1 - '@zag-js/switch': 1.34.1 - '@zag-js/tabs': 1.34.1 - '@zag-js/tags-input': 1.34.1 - '@zag-js/timer': 1.34.1 - '@zag-js/toast': 1.34.1 - '@zag-js/toggle': 1.34.1 - '@zag-js/toggle-group': 1.34.1 - '@zag-js/tooltip': 1.34.1 - '@zag-js/tour': 1.34.1 - '@zag-js/tree-view': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/accordion': 1.35.3 + '@zag-js/anatomy': 1.35.3 + '@zag-js/angle-slider': 1.35.3 + '@zag-js/async-list': 1.35.3 + '@zag-js/auto-resize': 1.35.3 + '@zag-js/avatar': 1.35.3 + '@zag-js/carousel': 1.35.3 + '@zag-js/cascade-select': 1.35.3 + '@zag-js/checkbox': 1.35.3 + '@zag-js/clipboard': 1.35.3 + '@zag-js/collapsible': 1.35.3 + '@zag-js/collection': 1.35.3 + '@zag-js/color-picker': 1.35.3 + '@zag-js/color-utils': 1.35.3 + '@zag-js/combobox': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/date-picker': 1.35.3(@internationalized/date@3.11.0) + '@zag-js/date-utils': 1.35.3(@internationalized/date@3.11.0) + '@zag-js/dialog': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/drawer': 1.35.3 + '@zag-js/editable': 1.35.3 + '@zag-js/file-upload': 1.35.3 + '@zag-js/file-utils': 1.35.3 + '@zag-js/floating-panel': 1.35.3 + '@zag-js/focus-trap': 1.35.3 + '@zag-js/highlight-word': 1.35.3 + '@zag-js/hover-card': 1.35.3 + '@zag-js/i18n-utils': 1.35.3 + '@zag-js/image-cropper': 1.35.3 + '@zag-js/json-tree-utils': 1.35.3 + '@zag-js/listbox': 1.35.3 + '@zag-js/marquee': 1.35.3 + '@zag-js/menu': 1.35.3 + '@zag-js/navigation-menu': 1.35.3 + '@zag-js/number-input': 1.35.3 + '@zag-js/pagination': 1.35.3 + '@zag-js/password-input': 1.35.3 + '@zag-js/pin-input': 1.35.3 + '@zag-js/popover': 1.35.3 + '@zag-js/presence': 1.35.3 + '@zag-js/progress': 1.35.3 + '@zag-js/qr-code': 1.35.3 + '@zag-js/radio-group': 1.35.3 + '@zag-js/rating-group': 1.35.3 + '@zag-js/react': 1.35.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@zag-js/scroll-area': 1.35.3 + '@zag-js/select': 1.35.3 + '@zag-js/signature-pad': 1.35.3 + '@zag-js/slider': 1.35.3 + '@zag-js/splitter': 1.35.3 + '@zag-js/steps': 1.35.3 + '@zag-js/switch': 1.35.3 + '@zag-js/tabs': 1.35.3 + '@zag-js/tags-input': 1.35.3 + '@zag-js/timer': 1.35.3 + '@zag-js/toast': 1.35.3 + '@zag-js/toggle': 1.35.3 + '@zag-js/toggle-group': 1.35.3 + '@zag-js/tooltip': 1.35.3 + '@zag-js/tour': 1.35.3 + '@zag-js/tree-view': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) @@ -9148,6 +9204,8 @@ snapshots: '@babel/runtime@7.28.6': {} + '@babel/runtime@7.29.2': {} + '@babel/template@7.28.6': dependencies: '@babel/code-frame': 7.29.0 @@ -9180,7 +9238,7 @@ snapshots: idb-keyval: 6.2.1 ox: 0.6.9(typescript@5.9.3)(zod@3.25.76) preact: 10.24.2 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) zustand: 5.0.3(@types/react@19.2.14)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)) transitivePeerDependencies: - '@types/react' @@ -9197,14 +9255,14 @@ snapshots: '@bcoe/v8-coverage@1.0.2': {} - '@bigmi/core@0.6.5(@types/react@19.2.14)(bs58@6.0.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))': + '@bigmi/core@0.7.1(@types/react@19.2.14)(bs58@6.0.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))': dependencies: '@noble/hashes': 1.8.0 bech32: 2.0.0 bitcoinjs-lib: 7.0.1(typescript@5.9.3) bs58: 6.0.0 eventemitter3: 5.0.4 - zustand: 5.0.11(@types/react@19.2.14)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)) + zustand: 5.0.12(@types/react@19.2.14)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)) transitivePeerDependencies: - '@types/react' - immer @@ -9251,15 +9309,15 @@ snapshots: dependencies: '@noble/curves': 1.9.7 - '@bootnodedev/db-subgraph@0.1.2(@parcel/watcher@2.5.6)(@tanstack/react-query@5.90.21(react@19.1.0))(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql-tag@2.12.6(graphql@16.13.0))(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))': + '@bootnodedev/db-subgraph@0.1.2(@parcel/watcher@2.5.6)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql-tag@2.12.6(graphql@16.13.1))(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))': dependencies: - '@graphql-codegen/cli': 5.0.7(@parcel/watcher@2.5.6)(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.0)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@graphql-codegen/typescript-graphql-request': 6.4.0(graphql-request@6.1.0(graphql@16.13.0))(graphql-tag@2.12.6(graphql@16.13.0))(graphql@16.13.0) - '@tanstack/react-query': 5.90.21(react@19.1.0) - graphql: 16.13.0 - graphql-request: 6.1.0(graphql@16.13.0) + '@graphql-codegen/cli': 5.0.7(@parcel/watcher@2.5.6)(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.1)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@graphql-codegen/typescript-graphql-request': 6.4.0(graphql-request@6.1.0(graphql@16.13.1))(graphql-tag@2.12.6(graphql@16.13.1))(graphql@16.13.1) + '@tanstack/react-query': 5.95.2(react@19.1.0) + graphql: 16.13.1 + graphql-request: 6.1.0(graphql@16.13.1) react: 19.1.0 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@fastify/websocket' - '@parcel/watcher' @@ -9275,9 +9333,9 @@ snapshots: - typescript - utf-8-validate - '@chakra-ui/react@3.33.0(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@chakra-ui/react@3.34.0(@emotion/react@11.14.0(@types/react@19.2.14)(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@ark-ui/react': 5.32.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@ark-ui/react': 5.34.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@emotion/is-prop-valid': 1.4.0 '@emotion/react': 11.14.0(@types/react@19.2.14)(react@19.1.0) '@emotion/serialize': 1.3.3 @@ -9311,7 +9369,7 @@ snapshots: jose: 6.1.3 md5: 2.3.0 uncrypto: 0.1.3 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) zod: 3.25.76 transitivePeerDependencies: - bufferutil @@ -9330,7 +9388,7 @@ snapshots: eth-json-rpc-filters: 6.0.1 eventemitter3: 5.0.4 keccak: 3.0.4 - preact: 10.28.4 + preact: 10.29.0 sha.js: 2.4.12 transitivePeerDependencies: - supports-color @@ -9343,7 +9401,7 @@ snapshots: idb-keyval: 6.2.1 ox: 0.6.9(typescript@5.9.3)(zod@3.25.76) preact: 10.24.2 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) zustand: 5.0.3(@types/react@19.2.14)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)) transitivePeerDependencies: - '@types/react' @@ -9772,11 +9830,20 @@ snapshots: dependencies: '@floating-ui/utils': 0.2.10 + '@floating-ui/core@1.7.5': + dependencies: + '@floating-ui/utils': 0.2.11 + '@floating-ui/dom@1.7.5': dependencies: '@floating-ui/core': 1.7.4 '@floating-ui/utils': 0.2.10 + '@floating-ui/dom@1.7.6': + dependencies: + '@floating-ui/core': 1.7.5 + '@floating-ui/utils': 0.2.11 + '@floating-ui/react-dom@2.1.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@floating-ui/dom': 1.7.5 @@ -9793,11 +9860,13 @@ snapshots: '@floating-ui/utils@0.2.10': {} - '@gemini-wallet/core@0.3.2(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))': + '@floating-ui/utils@0.2.11': {} + + '@gemini-wallet/core@0.3.2(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))': dependencies: '@metamask/rpc-errors': 7.0.2 eventemitter3: 5.0.1 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - supports-color @@ -9809,50 +9878,50 @@ snapshots: '@shikijs/types': 3.22.0 '@shikijs/vscode-textmate': 10.0.2 - '@gql.tada/cli-utils@1.7.2(@0no-co/graphqlsp@1.15.2(graphql@16.13.0)(typescript@5.9.3))(graphql@16.13.0)(typescript@5.9.3)': + '@gql.tada/cli-utils@1.7.2(@0no-co/graphqlsp@1.15.2(graphql@16.13.1)(typescript@5.9.3))(graphql@16.13.1)(typescript@5.9.3)': dependencies: - '@0no-co/graphqlsp': 1.15.2(graphql@16.13.0)(typescript@5.9.3) - '@gql.tada/internal': 1.0.8(graphql@16.13.0)(typescript@5.9.3) - graphql: 16.13.0 + '@0no-co/graphqlsp': 1.15.2(graphql@16.13.1)(typescript@5.9.3) + '@gql.tada/internal': 1.0.8(graphql@16.13.1)(typescript@5.9.3) + graphql: 16.13.1 typescript: 5.9.3 - '@gql.tada/internal@1.0.8(graphql@16.13.0)(typescript@5.9.3)': + '@gql.tada/internal@1.0.8(graphql@16.13.1)(typescript@5.9.3)': dependencies: - '@0no-co/graphql.web': 1.2.0(graphql@16.13.0) - graphql: 16.13.0 + '@0no-co/graphql.web': 1.2.0(graphql@16.13.1) + graphql: 16.13.1 typescript: 5.9.3 - '@graphql-codegen/add@5.0.3(graphql@16.13.0)': + '@graphql-codegen/add@5.0.3(graphql@16.13.1)': dependencies: - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.13.0) - graphql: 16.13.0 + '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.13.1) + graphql: 16.13.1 tslib: 2.6.3 - '@graphql-codegen/cli@5.0.7(@parcel/watcher@2.5.6)(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': + '@graphql-codegen/cli@5.0.7(@parcel/watcher@2.5.6)(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.1)(typescript@5.9.3)(utf-8-validate@5.0.10)': dependencies: '@babel/generator': 7.29.1 '@babel/template': 7.28.6 '@babel/types': 7.29.0 - '@graphql-codegen/client-preset': 4.8.3(graphql@16.13.0) - '@graphql-codegen/core': 4.0.2(graphql@16.13.0) - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.13.0) - '@graphql-tools/apollo-engine-loader': 8.0.28(graphql@16.13.0) - '@graphql-tools/code-file-loader': 8.1.28(graphql@16.13.0) - '@graphql-tools/git-loader': 8.0.32(graphql@16.13.0) - '@graphql-tools/github-loader': 8.0.22(@types/node@25.3.0)(graphql@16.13.0) - '@graphql-tools/graphql-file-loader': 8.1.9(graphql@16.13.0) - '@graphql-tools/json-file-loader': 8.0.26(graphql@16.13.0) - '@graphql-tools/load': 8.1.8(graphql@16.13.0) - '@graphql-tools/prisma-loader': 8.0.17(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.0)(utf-8-validate@5.0.10) - '@graphql-tools/url-loader': 8.0.33(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.0)(utf-8-validate@5.0.10) - '@graphql-tools/utils': 10.11.0(graphql@16.13.0) + '@graphql-codegen/client-preset': 4.8.3(graphql@16.13.1) + '@graphql-codegen/core': 4.0.2(graphql@16.13.1) + '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.13.1) + '@graphql-tools/apollo-engine-loader': 8.0.28(graphql@16.13.1) + '@graphql-tools/code-file-loader': 8.1.28(graphql@16.13.1) + '@graphql-tools/git-loader': 8.0.32(graphql@16.13.1) + '@graphql-tools/github-loader': 8.0.22(@types/node@25.3.0)(graphql@16.13.1) + '@graphql-tools/graphql-file-loader': 8.1.9(graphql@16.13.1) + '@graphql-tools/json-file-loader': 8.0.26(graphql@16.13.1) + '@graphql-tools/load': 8.1.8(graphql@16.13.1) + '@graphql-tools/prisma-loader': 8.0.17(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.1)(utf-8-validate@5.0.10) + '@graphql-tools/url-loader': 8.0.33(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.1)(utf-8-validate@5.0.10) + '@graphql-tools/utils': 10.11.0(graphql@16.13.1) '@whatwg-node/fetch': 0.10.13 chalk: 4.1.2 cosmiconfig: 8.3.6(typescript@5.9.3) debounce: 1.2.1 detect-indent: 6.1.0 - graphql: 16.13.0 - graphql-config: 5.1.5(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + graphql: 16.13.1 + graphql-config: 5.1.5(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.1)(typescript@5.9.3)(utf-8-validate@5.0.10) inquirer: 8.2.7(@types/node@25.3.0) is-glob: 4.0.3 jiti: 1.21.7 @@ -9881,145 +9950,145 @@ snapshots: - typescript - utf-8-validate - '@graphql-codegen/client-preset@4.8.3(graphql@16.13.0)': + '@graphql-codegen/client-preset@4.8.3(graphql@16.13.1)': dependencies: '@babel/helper-plugin-utils': 7.28.6 '@babel/template': 7.28.6 - '@graphql-codegen/add': 5.0.3(graphql@16.13.0) - '@graphql-codegen/gql-tag-operations': 4.0.17(graphql@16.13.0) - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.13.0) - '@graphql-codegen/typed-document-node': 5.1.2(graphql@16.13.0) - '@graphql-codegen/typescript': 4.1.6(graphql@16.13.0) - '@graphql-codegen/typescript-operations': 4.6.1(graphql@16.13.0) - '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.13.0) - '@graphql-tools/documents': 1.0.1(graphql@16.13.0) - '@graphql-tools/utils': 10.11.0(graphql@16.13.0) - '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.0) - graphql: 16.13.0 + '@graphql-codegen/add': 5.0.3(graphql@16.13.1) + '@graphql-codegen/gql-tag-operations': 4.0.17(graphql@16.13.1) + '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.13.1) + '@graphql-codegen/typed-document-node': 5.1.2(graphql@16.13.1) + '@graphql-codegen/typescript': 4.1.6(graphql@16.13.1) + '@graphql-codegen/typescript-operations': 4.6.1(graphql@16.13.1) + '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.13.1) + '@graphql-tools/documents': 1.0.1(graphql@16.13.1) + '@graphql-tools/utils': 10.11.0(graphql@16.13.1) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.1) + graphql: 16.13.1 tslib: 2.6.3 transitivePeerDependencies: - encoding - '@graphql-codegen/core@4.0.2(graphql@16.13.0)': + '@graphql-codegen/core@4.0.2(graphql@16.13.1)': dependencies: - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.13.0) - '@graphql-tools/schema': 10.0.31(graphql@16.13.0) - '@graphql-tools/utils': 10.11.0(graphql@16.13.0) - graphql: 16.13.0 + '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.13.1) + '@graphql-tools/schema': 10.0.31(graphql@16.13.1) + '@graphql-tools/utils': 10.11.0(graphql@16.13.1) + graphql: 16.13.1 tslib: 2.6.3 - '@graphql-codegen/gql-tag-operations@4.0.17(graphql@16.13.0)': + '@graphql-codegen/gql-tag-operations@4.0.17(graphql@16.13.1)': dependencies: - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.13.0) - '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.13.0) - '@graphql-tools/utils': 10.11.0(graphql@16.13.0) + '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.13.1) + '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.13.1) + '@graphql-tools/utils': 10.11.0(graphql@16.13.1) auto-bind: 4.0.0 - graphql: 16.13.0 + graphql: 16.13.1 tslib: 2.6.3 transitivePeerDependencies: - encoding - '@graphql-codegen/plugin-helpers@3.1.2(graphql@16.13.0)': + '@graphql-codegen/plugin-helpers@3.1.2(graphql@16.13.1)': dependencies: - '@graphql-tools/utils': 9.2.1(graphql@16.13.0) + '@graphql-tools/utils': 9.2.1(graphql@16.13.1) change-case-all: 1.0.15 common-tags: 1.8.2 - graphql: 16.13.0 + graphql: 16.13.1 import-from: 4.0.0 lodash: 4.17.23 tslib: 2.4.1 - '@graphql-codegen/plugin-helpers@5.1.1(graphql@16.13.0)': + '@graphql-codegen/plugin-helpers@5.1.1(graphql@16.13.1)': dependencies: - '@graphql-tools/utils': 10.11.0(graphql@16.13.0) + '@graphql-tools/utils': 10.11.0(graphql@16.13.1) change-case-all: 1.0.15 common-tags: 1.8.2 - graphql: 16.13.0 + graphql: 16.13.1 import-from: 4.0.0 lodash: 4.17.23 tslib: 2.6.3 - '@graphql-codegen/schema-ast@4.1.0(graphql@16.13.0)': + '@graphql-codegen/schema-ast@4.1.0(graphql@16.13.1)': dependencies: - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.13.0) - '@graphql-tools/utils': 10.11.0(graphql@16.13.0) - graphql: 16.13.0 + '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.13.1) + '@graphql-tools/utils': 10.11.0(graphql@16.13.1) + graphql: 16.13.1 tslib: 2.6.3 - '@graphql-codegen/typed-document-node@5.1.2(graphql@16.13.0)': + '@graphql-codegen/typed-document-node@5.1.2(graphql@16.13.1)': dependencies: - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.13.0) - '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.13.0) + '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.13.1) + '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.13.1) auto-bind: 4.0.0 change-case-all: 1.0.15 - graphql: 16.13.0 + graphql: 16.13.1 tslib: 2.6.3 transitivePeerDependencies: - encoding - '@graphql-codegen/typescript-graphql-request@6.4.0(graphql-request@6.1.0(graphql@16.13.0))(graphql-tag@2.12.6(graphql@16.13.0))(graphql@16.13.0)': + '@graphql-codegen/typescript-graphql-request@6.4.0(graphql-request@6.1.0(graphql@16.13.1))(graphql-tag@2.12.6(graphql@16.13.1))(graphql@16.13.1)': dependencies: - '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.13.0) - '@graphql-codegen/visitor-plugin-common': 2.13.8(graphql@16.13.0) + '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.13.1) + '@graphql-codegen/visitor-plugin-common': 2.13.8(graphql@16.13.1) auto-bind: 4.0.0 - graphql: 16.13.0 - graphql-request: 6.1.0(graphql@16.13.0) - graphql-tag: 2.12.6(graphql@16.13.0) + graphql: 16.13.1 + graphql-request: 6.1.0(graphql@16.13.1) + graphql-tag: 2.12.6(graphql@16.13.1) tslib: 2.8.1 transitivePeerDependencies: - encoding - supports-color - '@graphql-codegen/typescript-operations@4.6.1(graphql@16.13.0)': + '@graphql-codegen/typescript-operations@4.6.1(graphql@16.13.1)': dependencies: - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.13.0) - '@graphql-codegen/typescript': 4.1.6(graphql@16.13.0) - '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.13.0) + '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.13.1) + '@graphql-codegen/typescript': 4.1.6(graphql@16.13.1) + '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.13.1) auto-bind: 4.0.0 - graphql: 16.13.0 + graphql: 16.13.1 tslib: 2.6.3 transitivePeerDependencies: - encoding - '@graphql-codegen/typescript@4.1.6(graphql@16.13.0)': + '@graphql-codegen/typescript@4.1.6(graphql@16.13.1)': dependencies: - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.13.0) - '@graphql-codegen/schema-ast': 4.1.0(graphql@16.13.0) - '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.13.0) + '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.13.1) + '@graphql-codegen/schema-ast': 4.1.0(graphql@16.13.1) + '@graphql-codegen/visitor-plugin-common': 5.8.0(graphql@16.13.1) auto-bind: 4.0.0 - graphql: 16.13.0 + graphql: 16.13.1 tslib: 2.6.3 transitivePeerDependencies: - encoding - '@graphql-codegen/visitor-plugin-common@2.13.8(graphql@16.13.0)': + '@graphql-codegen/visitor-plugin-common@2.13.8(graphql@16.13.1)': dependencies: - '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.13.0) - '@graphql-tools/optimize': 1.4.0(graphql@16.13.0) - '@graphql-tools/relay-operation-optimizer': 6.5.18(graphql@16.13.0) - '@graphql-tools/utils': 9.2.1(graphql@16.13.0) + '@graphql-codegen/plugin-helpers': 3.1.2(graphql@16.13.1) + '@graphql-tools/optimize': 1.4.0(graphql@16.13.1) + '@graphql-tools/relay-operation-optimizer': 6.5.18(graphql@16.13.1) + '@graphql-tools/utils': 9.2.1(graphql@16.13.1) auto-bind: 4.0.0 change-case-all: 1.0.15 dependency-graph: 0.11.0 - graphql: 16.13.0 - graphql-tag: 2.12.6(graphql@16.13.0) + graphql: 16.13.1 + graphql-tag: 2.12.6(graphql@16.13.1) parse-filepath: 1.0.2 tslib: 2.4.1 transitivePeerDependencies: - encoding - supports-color - '@graphql-codegen/visitor-plugin-common@5.8.0(graphql@16.13.0)': + '@graphql-codegen/visitor-plugin-common@5.8.0(graphql@16.13.1)': dependencies: - '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.13.0) - '@graphql-tools/optimize': 2.0.0(graphql@16.13.0) - '@graphql-tools/relay-operation-optimizer': 7.0.27(graphql@16.13.0) - '@graphql-tools/utils': 10.11.0(graphql@16.13.0) + '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.13.1) + '@graphql-tools/optimize': 2.0.0(graphql@16.13.1) + '@graphql-tools/relay-operation-optimizer': 7.0.27(graphql@16.13.1) + '@graphql-tools/utils': 10.11.0(graphql@16.13.1) auto-bind: 4.0.0 change-case-all: 1.0.15 dependency-graph: 0.11.0 - graphql: 16.13.0 - graphql-tag: 2.12.6(graphql@16.13.0) + graphql: 16.13.1 + graphql-tag: 2.12.6(graphql@16.13.1) parse-filepath: 1.0.2 tslib: 2.6.3 transitivePeerDependencies: @@ -10027,71 +10096,71 @@ snapshots: '@graphql-hive/signal@1.0.0': {} - '@graphql-tools/apollo-engine-loader@8.0.28(graphql@16.13.0)': + '@graphql-tools/apollo-engine-loader@8.0.28(graphql@16.13.1)': dependencies: - '@graphql-tools/utils': 11.0.0(graphql@16.13.0) + '@graphql-tools/utils': 11.0.0(graphql@16.13.1) '@whatwg-node/fetch': 0.10.13 - graphql: 16.13.0 + graphql: 16.13.1 sync-fetch: 0.6.0 tslib: 2.8.1 - '@graphql-tools/batch-execute@9.0.19(graphql@16.13.0)': + '@graphql-tools/batch-execute@9.0.19(graphql@16.13.1)': dependencies: - '@graphql-tools/utils': 10.11.0(graphql@16.13.0) + '@graphql-tools/utils': 10.11.0(graphql@16.13.1) '@whatwg-node/promise-helpers': 1.3.2 dataloader: 2.2.3 - graphql: 16.13.0 + graphql: 16.13.1 tslib: 2.8.1 - '@graphql-tools/code-file-loader@8.1.28(graphql@16.13.0)': + '@graphql-tools/code-file-loader@8.1.28(graphql@16.13.1)': dependencies: - '@graphql-tools/graphql-tag-pluck': 8.3.27(graphql@16.13.0) - '@graphql-tools/utils': 11.0.0(graphql@16.13.0) + '@graphql-tools/graphql-tag-pluck': 8.3.27(graphql@16.13.1) + '@graphql-tools/utils': 11.0.0(graphql@16.13.1) globby: 11.1.0 - graphql: 16.13.0 + graphql: 16.13.1 tslib: 2.8.1 unixify: 1.0.0 transitivePeerDependencies: - supports-color - '@graphql-tools/delegate@10.2.23(graphql@16.13.0)': + '@graphql-tools/delegate@10.2.23(graphql@16.13.1)': dependencies: - '@graphql-tools/batch-execute': 9.0.19(graphql@16.13.0) - '@graphql-tools/executor': 1.5.1(graphql@16.13.0) - '@graphql-tools/schema': 10.0.31(graphql@16.13.0) - '@graphql-tools/utils': 10.11.0(graphql@16.13.0) + '@graphql-tools/batch-execute': 9.0.19(graphql@16.13.1) + '@graphql-tools/executor': 1.5.1(graphql@16.13.1) + '@graphql-tools/schema': 10.0.31(graphql@16.13.1) + '@graphql-tools/utils': 10.11.0(graphql@16.13.1) '@repeaterjs/repeater': 3.0.6 '@whatwg-node/promise-helpers': 1.3.2 dataloader: 2.2.3 dset: 3.1.4 - graphql: 16.13.0 + graphql: 16.13.1 tslib: 2.8.1 - '@graphql-tools/documents@1.0.1(graphql@16.13.0)': + '@graphql-tools/documents@1.0.1(graphql@16.13.1)': dependencies: - graphql: 16.13.0 + graphql: 16.13.1 lodash.sortby: 4.7.0 tslib: 2.8.1 - '@graphql-tools/executor-common@0.0.4(graphql@16.13.0)': + '@graphql-tools/executor-common@0.0.4(graphql@16.13.1)': dependencies: '@envelop/core': 5.5.1 - '@graphql-tools/utils': 10.11.0(graphql@16.13.0) - graphql: 16.13.0 + '@graphql-tools/utils': 10.11.0(graphql@16.13.1) + graphql: 16.13.1 - '@graphql-tools/executor-common@0.0.6(graphql@16.13.0)': + '@graphql-tools/executor-common@0.0.6(graphql@16.13.1)': dependencies: '@envelop/core': 5.5.1 - '@graphql-tools/utils': 10.11.0(graphql@16.13.0) - graphql: 16.13.0 + '@graphql-tools/utils': 10.11.0(graphql@16.13.1) + graphql: 16.13.1 - '@graphql-tools/executor-graphql-ws@2.0.7(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.0)(utf-8-validate@5.0.10)': + '@graphql-tools/executor-graphql-ws@2.0.7(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.1)(utf-8-validate@5.0.10)': dependencies: - '@graphql-tools/executor-common': 0.0.6(graphql@16.13.0) - '@graphql-tools/utils': 10.11.0(graphql@16.13.0) + '@graphql-tools/executor-common': 0.0.6(graphql@16.13.1) + '@graphql-tools/utils': 10.11.0(graphql@16.13.1) '@whatwg-node/disposablestack': 0.0.6 - graphql: 16.13.0 - graphql-ws: 6.0.7(crossws@0.3.5)(graphql@16.13.0)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) + graphql: 16.13.1 + graphql-ws: 6.0.7(crossws@0.3.5)(graphql@16.13.1)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) isomorphic-ws: 5.0.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) tslib: 2.8.1 ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) @@ -10101,26 +10170,26 @@ snapshots: - crossws - utf-8-validate - '@graphql-tools/executor-http@1.3.3(@types/node@25.3.0)(graphql@16.13.0)': + '@graphql-tools/executor-http@1.3.3(@types/node@25.3.0)(graphql@16.13.1)': dependencies: '@graphql-hive/signal': 1.0.0 - '@graphql-tools/executor-common': 0.0.4(graphql@16.13.0) - '@graphql-tools/utils': 10.11.0(graphql@16.13.0) + '@graphql-tools/executor-common': 0.0.4(graphql@16.13.1) + '@graphql-tools/utils': 10.11.0(graphql@16.13.1) '@repeaterjs/repeater': 3.0.6 '@whatwg-node/disposablestack': 0.0.6 '@whatwg-node/fetch': 0.10.13 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.13.0 + graphql: 16.13.1 meros: 1.3.2(@types/node@25.3.0) tslib: 2.8.1 transitivePeerDependencies: - '@types/node' - '@graphql-tools/executor-legacy-ws@1.1.25(bufferutil@4.1.0)(graphql@16.13.0)(utf-8-validate@5.0.10)': + '@graphql-tools/executor-legacy-ws@1.1.25(bufferutil@4.1.0)(graphql@16.13.1)(utf-8-validate@5.0.10)': dependencies: - '@graphql-tools/utils': 11.0.0(graphql@16.13.0) + '@graphql-tools/utils': 11.0.0(graphql@16.13.1) '@types/ws': 8.18.1 - graphql: 16.13.0 + graphql: 16.13.1 isomorphic-ws: 5.0.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) tslib: 2.8.1 ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) @@ -10128,21 +10197,21 @@ snapshots: - bufferutil - utf-8-validate - '@graphql-tools/executor@1.5.1(graphql@16.13.0)': + '@graphql-tools/executor@1.5.1(graphql@16.13.1)': dependencies: - '@graphql-tools/utils': 11.0.0(graphql@16.13.0) - '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.0) + '@graphql-tools/utils': 11.0.0(graphql@16.13.1) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.1) '@repeaterjs/repeater': 3.0.6 '@whatwg-node/disposablestack': 0.0.6 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.13.0 + graphql: 16.13.1 tslib: 2.8.1 - '@graphql-tools/git-loader@8.0.32(graphql@16.13.0)': + '@graphql-tools/git-loader@8.0.32(graphql@16.13.1)': dependencies: - '@graphql-tools/graphql-tag-pluck': 8.3.27(graphql@16.13.0) - '@graphql-tools/utils': 11.0.0(graphql@16.13.0) - graphql: 16.13.0 + '@graphql-tools/graphql-tag-pluck': 8.3.27(graphql@16.13.1) + '@graphql-tools/utils': 11.0.0(graphql@16.13.1) + graphql: 16.13.1 is-glob: 4.0.3 micromatch: 4.0.8 tslib: 2.8.1 @@ -10150,97 +10219,97 @@ snapshots: transitivePeerDependencies: - supports-color - '@graphql-tools/github-loader@8.0.22(@types/node@25.3.0)(graphql@16.13.0)': + '@graphql-tools/github-loader@8.0.22(@types/node@25.3.0)(graphql@16.13.1)': dependencies: - '@graphql-tools/executor-http': 1.3.3(@types/node@25.3.0)(graphql@16.13.0) - '@graphql-tools/graphql-tag-pluck': 8.3.27(graphql@16.13.0) - '@graphql-tools/utils': 10.11.0(graphql@16.13.0) + '@graphql-tools/executor-http': 1.3.3(@types/node@25.3.0)(graphql@16.13.1) + '@graphql-tools/graphql-tag-pluck': 8.3.27(graphql@16.13.1) + '@graphql-tools/utils': 10.11.0(graphql@16.13.1) '@whatwg-node/fetch': 0.10.13 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.13.0 + graphql: 16.13.1 sync-fetch: 0.6.0-2 tslib: 2.8.1 transitivePeerDependencies: - '@types/node' - supports-color - '@graphql-tools/graphql-file-loader@8.1.9(graphql@16.13.0)': + '@graphql-tools/graphql-file-loader@8.1.9(graphql@16.13.1)': dependencies: - '@graphql-tools/import': 7.1.9(graphql@16.13.0) - '@graphql-tools/utils': 11.0.0(graphql@16.13.0) + '@graphql-tools/import': 7.1.9(graphql@16.13.1) + '@graphql-tools/utils': 11.0.0(graphql@16.13.1) globby: 11.1.0 - graphql: 16.13.0 + graphql: 16.13.1 tslib: 2.8.1 unixify: 1.0.0 transitivePeerDependencies: - supports-color - '@graphql-tools/graphql-tag-pluck@8.3.27(graphql@16.13.0)': + '@graphql-tools/graphql-tag-pluck@8.3.27(graphql@16.13.1)': dependencies: '@babel/core': 7.29.0 '@babel/parser': 7.29.0 '@babel/plugin-syntax-import-assertions': 7.28.6(@babel/core@7.29.0) '@babel/traverse': 7.29.0(supports-color@5.5.0) '@babel/types': 7.29.0 - '@graphql-tools/utils': 11.0.0(graphql@16.13.0) - graphql: 16.13.0 + '@graphql-tools/utils': 11.0.0(graphql@16.13.1) + graphql: 16.13.1 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@graphql-tools/import@7.1.9(graphql@16.13.0)': + '@graphql-tools/import@7.1.9(graphql@16.13.1)': dependencies: - '@graphql-tools/utils': 11.0.0(graphql@16.13.0) - '@theguild/federation-composition': 0.21.3(graphql@16.13.0) - graphql: 16.13.0 + '@graphql-tools/utils': 11.0.0(graphql@16.13.1) + '@theguild/federation-composition': 0.21.3(graphql@16.13.1) + graphql: 16.13.1 resolve-from: 5.0.0 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@graphql-tools/json-file-loader@8.0.26(graphql@16.13.0)': + '@graphql-tools/json-file-loader@8.0.26(graphql@16.13.1)': dependencies: - '@graphql-tools/utils': 11.0.0(graphql@16.13.0) + '@graphql-tools/utils': 11.0.0(graphql@16.13.1) globby: 11.1.0 - graphql: 16.13.0 + graphql: 16.13.1 tslib: 2.8.1 unixify: 1.0.0 - '@graphql-tools/load@8.1.8(graphql@16.13.0)': + '@graphql-tools/load@8.1.8(graphql@16.13.1)': dependencies: - '@graphql-tools/schema': 10.0.31(graphql@16.13.0) - '@graphql-tools/utils': 11.0.0(graphql@16.13.0) - graphql: 16.13.0 + '@graphql-tools/schema': 10.0.31(graphql@16.13.1) + '@graphql-tools/utils': 11.0.0(graphql@16.13.1) + graphql: 16.13.1 p-limit: 3.1.0 tslib: 2.8.1 - '@graphql-tools/merge@9.1.7(graphql@16.13.0)': + '@graphql-tools/merge@9.1.7(graphql@16.13.1)': dependencies: - '@graphql-tools/utils': 11.0.0(graphql@16.13.0) - graphql: 16.13.0 + '@graphql-tools/utils': 11.0.0(graphql@16.13.1) + graphql: 16.13.1 tslib: 2.8.1 - '@graphql-tools/optimize@1.4.0(graphql@16.13.0)': + '@graphql-tools/optimize@1.4.0(graphql@16.13.1)': dependencies: - graphql: 16.13.0 + graphql: 16.13.1 tslib: 2.8.1 - '@graphql-tools/optimize@2.0.0(graphql@16.13.0)': + '@graphql-tools/optimize@2.0.0(graphql@16.13.1)': dependencies: - graphql: 16.13.0 + graphql: 16.13.1 tslib: 2.8.1 - '@graphql-tools/prisma-loader@8.0.17(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.0)(utf-8-validate@5.0.10)': + '@graphql-tools/prisma-loader@8.0.17(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.1)(utf-8-validate@5.0.10)': dependencies: - '@graphql-tools/url-loader': 8.0.33(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.0)(utf-8-validate@5.0.10) - '@graphql-tools/utils': 10.11.0(graphql@16.13.0) + '@graphql-tools/url-loader': 8.0.33(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.1)(utf-8-validate@5.0.10) + '@graphql-tools/utils': 10.11.0(graphql@16.13.1) '@types/js-yaml': 4.0.9 '@whatwg-node/fetch': 0.10.13 chalk: 4.1.2 debug: 4.4.3(supports-color@5.5.0) dotenv: 16.6.1 - graphql: 16.13.0 - graphql-request: 6.1.0(graphql@16.13.0) + graphql: 16.13.1 + graphql-request: 6.1.0(graphql@16.13.1) http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 jose: 5.10.0 @@ -10258,43 +10327,43 @@ snapshots: - supports-color - utf-8-validate - '@graphql-tools/relay-operation-optimizer@6.5.18(graphql@16.13.0)': + '@graphql-tools/relay-operation-optimizer@6.5.18(graphql@16.13.1)': dependencies: - '@ardatan/relay-compiler': 12.0.0(graphql@16.13.0) - '@graphql-tools/utils': 9.2.1(graphql@16.13.0) - graphql: 16.13.0 + '@ardatan/relay-compiler': 12.0.0(graphql@16.13.1) + '@graphql-tools/utils': 9.2.1(graphql@16.13.1) + graphql: 16.13.1 tslib: 2.8.1 transitivePeerDependencies: - encoding - supports-color - '@graphql-tools/relay-operation-optimizer@7.0.27(graphql@16.13.0)': + '@graphql-tools/relay-operation-optimizer@7.0.27(graphql@16.13.1)': dependencies: - '@ardatan/relay-compiler': 12.0.3(graphql@16.13.0) - '@graphql-tools/utils': 11.0.0(graphql@16.13.0) - graphql: 16.13.0 + '@ardatan/relay-compiler': 12.0.3(graphql@16.13.1) + '@graphql-tools/utils': 11.0.0(graphql@16.13.1) + graphql: 16.13.1 tslib: 2.8.1 transitivePeerDependencies: - encoding - '@graphql-tools/schema@10.0.31(graphql@16.13.0)': + '@graphql-tools/schema@10.0.31(graphql@16.13.1)': dependencies: - '@graphql-tools/merge': 9.1.7(graphql@16.13.0) - '@graphql-tools/utils': 11.0.0(graphql@16.13.0) - graphql: 16.13.0 + '@graphql-tools/merge': 9.1.7(graphql@16.13.1) + '@graphql-tools/utils': 11.0.0(graphql@16.13.1) + graphql: 16.13.1 tslib: 2.8.1 - '@graphql-tools/url-loader@8.0.33(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.0)(utf-8-validate@5.0.10)': + '@graphql-tools/url-loader@8.0.33(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.1)(utf-8-validate@5.0.10)': dependencies: - '@graphql-tools/executor-graphql-ws': 2.0.7(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.0)(utf-8-validate@5.0.10) - '@graphql-tools/executor-http': 1.3.3(@types/node@25.3.0)(graphql@16.13.0) - '@graphql-tools/executor-legacy-ws': 1.1.25(bufferutil@4.1.0)(graphql@16.13.0)(utf-8-validate@5.0.10) - '@graphql-tools/utils': 10.11.0(graphql@16.13.0) - '@graphql-tools/wrap': 10.1.4(graphql@16.13.0) + '@graphql-tools/executor-graphql-ws': 2.0.7(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.1)(utf-8-validate@5.0.10) + '@graphql-tools/executor-http': 1.3.3(@types/node@25.3.0)(graphql@16.13.1) + '@graphql-tools/executor-legacy-ws': 1.1.25(bufferutil@4.1.0)(graphql@16.13.1)(utf-8-validate@5.0.10) + '@graphql-tools/utils': 10.11.0(graphql@16.13.1) + '@graphql-tools/wrap': 10.1.4(graphql@16.13.1) '@types/ws': 8.18.1 '@whatwg-node/fetch': 0.10.13 '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.13.0 + graphql: 16.13.1 isomorphic-ws: 5.0.0(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)) sync-fetch: 0.6.0-2 tslib: 2.8.1 @@ -10306,40 +10375,40 @@ snapshots: - crossws - utf-8-validate - '@graphql-tools/utils@10.11.0(graphql@16.13.0)': + '@graphql-tools/utils@10.11.0(graphql@16.13.1)': dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.0) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.1) '@whatwg-node/promise-helpers': 1.3.2 cross-inspect: 1.0.1 - graphql: 16.13.0 + graphql: 16.13.1 tslib: 2.8.1 - '@graphql-tools/utils@11.0.0(graphql@16.13.0)': + '@graphql-tools/utils@11.0.0(graphql@16.13.1)': dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.0) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.1) '@whatwg-node/promise-helpers': 1.3.2 cross-inspect: 1.0.1 - graphql: 16.13.0 + graphql: 16.13.1 tslib: 2.8.1 - '@graphql-tools/utils@9.2.1(graphql@16.13.0)': + '@graphql-tools/utils@9.2.1(graphql@16.13.1)': dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.0) - graphql: 16.13.0 + '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.1) + graphql: 16.13.1 tslib: 2.8.1 - '@graphql-tools/wrap@10.1.4(graphql@16.13.0)': + '@graphql-tools/wrap@10.1.4(graphql@16.13.1)': dependencies: - '@graphql-tools/delegate': 10.2.23(graphql@16.13.0) - '@graphql-tools/schema': 10.0.31(graphql@16.13.0) - '@graphql-tools/utils': 10.11.0(graphql@16.13.0) + '@graphql-tools/delegate': 10.2.23(graphql@16.13.1) + '@graphql-tools/schema': 10.0.31(graphql@16.13.1) + '@graphql-tools/utils': 10.11.0(graphql@16.13.1) '@whatwg-node/promise-helpers': 1.3.2 - graphql: 16.13.0 + graphql: 16.13.1 tslib: 2.8.1 - '@graphql-typed-document-node/core@3.2.0(graphql@16.13.0)': + '@graphql-typed-document-node/core@3.2.0(graphql@16.13.1)': dependencies: - graphql: 16.13.0 + graphql: 16.13.1 '@hono/node-server@1.19.9(hono@4.12.2)': dependencies: @@ -10395,11 +10464,11 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@lifi/sdk@3.15.6(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)': + '@lifi/sdk@3.16.3(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)': dependencies: - '@bigmi/core': 0.6.5(@types/react@19.2.14)(bs58@6.0.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0)) + '@bigmi/core': 0.7.1(@types/react@19.2.14)(bs58@6.0.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0)) '@bitcoinerlab/secp256k1': 1.2.0 - '@lifi/types': 17.59.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@lifi/types': 17.65.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) '@mysten/sui': 1.45.2(typescript@5.9.3) '@mysten/wallet-standard': 0.19.9(typescript@5.9.3) '@noble/curves': 1.9.7 @@ -10408,7 +10477,7 @@ snapshots: bech32: 2.0.0 bitcoinjs-lib: 7.0.1(typescript@5.9.3) bs58: 6.0.0 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@gql.tada/svelte-support' - '@gql.tada/vue-support' @@ -10421,9 +10490,9 @@ snapshots: - utf-8-validate - zod - '@lifi/types@17.59.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@lifi/types@17.65.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - bufferutil - typescript @@ -10637,7 +10706,7 @@ snapshots: '@metamask/utils@5.0.2': dependencies: '@ethereumjs/tx': 4.2.0 - '@types/debug': 4.1.12 + '@types/debug': 4.1.13 debug: 4.4.3(supports-color@5.5.0) semver: 7.7.4 superstruct: 1.0.4 @@ -10707,7 +10776,7 @@ snapshots: hey-listen: 1.0.8 tslib: 2.8.1 - '@msgpack/msgpack@3.1.2': {} + '@msgpack/msgpack@3.1.3': {} '@mysten/bcs@1.9.2': dependencies: @@ -10716,7 +10785,7 @@ snapshots: '@mysten/sui@1.45.2(typescript@5.9.3)': dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.0) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.1) '@mysten/bcs': 1.9.2 '@mysten/utils': 0.2.0 '@noble/curves': 1.9.4 @@ -10727,8 +10796,8 @@ snapshots: '@scure/base': 1.2.6 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - gql.tada: 1.9.0(graphql@16.13.0)(typescript@5.9.3) - graphql: 16.13.0 + gql.tada: 1.9.0(graphql@16.13.1)(typescript@5.9.3) + graphql: 16.13.1 poseidon-lite: 0.2.1 valibot: 1.2.0(typescript@5.9.3) transitivePeerDependencies: @@ -11657,9 +11726,9 @@ snapshots: '@radix-ui/rect@1.1.1': {} - '@rainbow-me/rainbowkit@2.2.10(@tanstack/react-query@5.90.21(react@19.1.0))(@types/react@19.2.14)(babel-plugin-macros@3.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.3)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76))': + '@rainbow-me/rainbowkit@2.2.10(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(babel-plugin-macros@3.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.3)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76))': dependencies: - '@tanstack/react-query': 5.90.21(react@19.1.0) + '@tanstack/react-query': 5.95.2(react@19.1.0) '@vanilla-extract/css': 1.17.3(babel-plugin-macros@3.1.0) '@vanilla-extract/dynamic': 2.1.4 '@vanilla-extract/sprinkles': 1.6.4(@vanilla-extract/css@1.17.3(babel-plugin-macros@3.1.0)) @@ -11669,29 +11738,29 @@ snapshots: react-dom: 19.1.0(react@19.1.0) react-remove-scroll: 2.6.2(@types/react@19.2.14)(react@19.1.0) ua-parser-js: 1.0.41 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - wagmi: 2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + wagmi: 2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) transitivePeerDependencies: - '@types/react' - babel-plugin-macros - typescript - '@reown/appkit-adapter-wagmi@1.8.18(e532ee338308575ad93e4f12488ada4c)': - dependencies: - '@reown/appkit': 1.8.18(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-common': 1.8.18(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.8.18(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-polyfills': 1.8.18 - '@reown/appkit-scaffold-ui': 1.8.18(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76) - '@reown/appkit-utils': 1.8.18(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76) - '@reown/appkit-wallet': 1.8.18(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@wagmi/core': 3.4.0(@tanstack/query-core@5.90.20)(@types/react@19.2.14)(ox@0.12.4(typescript@5.9.3)(zod@3.25.76))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) - '@walletconnect/universal-provider': 2.23.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-adapter-wagmi@1.8.19(3041b67b8915d842a532aec1c6c6eb72)': + dependencies: + '@reown/appkit': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-controllers': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-polyfills': 1.8.19 + '@reown/appkit-scaffold-ui': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76) + '@reown/appkit-utils': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76) + '@reown/appkit-wallet': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@wagmi/core': 3.4.0(@tanstack/query-core@5.95.2)(@types/react@19.2.14)(ox@0.14.7(typescript@5.9.3)(zod@3.25.76))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) + '@walletconnect/universal-provider': 2.23.7(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) valtio: 2.1.7(@types/react@19.2.14)(react@19.1.0) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - wagmi: 2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + wagmi: 2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) optionalDependencies: - '@wagmi/connectors': 7.2.1(4a8065821c97262ffe59e3e74cb0c1f9) + '@wagmi/connectors': 7.2.1(7a3af5fbb3d5f20af6e588f956426ab3) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -11735,7 +11804,7 @@ snapshots: dependencies: big.js: 6.2.2 dayjs: 1.11.13 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.22.4) + viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.22.4) transitivePeerDependencies: - bufferutil - typescript @@ -11746,29 +11815,29 @@ snapshots: dependencies: big.js: 6.2.2 dayjs: 1.11.13 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - bufferutil - typescript - utf-8-validate - zod - '@reown/appkit-common@1.8.18(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.22.4)': + '@reown/appkit-common@1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.22.4)': dependencies: big.js: 6.2.2 dayjs: 1.11.13 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.22.4) + viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.22.4) transitivePeerDependencies: - bufferutil - typescript - utf-8-validate - zod - '@reown/appkit-common@1.8.18(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit-common@1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: big.js: 6.2.2 dayjs: 1.11.13 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - bufferutil - typescript @@ -11781,7 +11850,7 @@ snapshots: '@reown/appkit-wallet': 1.7.8(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) valtio: 1.13.2(@types/react@19.2.14)(react@19.1.0) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -11810,13 +11879,13 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-controllers@1.8.18(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit-controllers@1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: - '@reown/appkit-common': 1.8.18(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-wallet': 1.8.18(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@walletconnect/universal-provider': 2.23.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-wallet': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@walletconnect/universal-provider': 2.23.7(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) valtio: 2.1.7(@types/react@19.2.14)(react@19.1.0) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -11881,12 +11950,12 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-pay@1.8.18(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit-pay@1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: - '@reown/appkit-common': 1.8.18(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.8.18(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-ui': 1.8.18(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-utils': 1.8.18(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76) + '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-controllers': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-ui': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-utils': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76) lit: 3.3.0 valtio: 2.1.7(@types/react@19.2.14)(react@19.1.0) transitivePeerDependencies: @@ -11925,7 +11994,7 @@ snapshots: dependencies: buffer: 6.0.3 - '@reown/appkit-polyfills@1.8.18': + '@reown/appkit-polyfills@1.8.19': dependencies: buffer: 6.0.3 @@ -11966,14 +12035,14 @@ snapshots: - valtio - zod - '@reown/appkit-scaffold-ui@1.8.18(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76)': + '@reown/appkit-scaffold-ui@1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76)': dependencies: - '@reown/appkit-common': 1.8.18(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.8.18(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-pay': 1.8.18(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-ui': 1.8.18(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-utils': 1.8.18(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76) - '@reown/appkit-wallet': 1.8.18(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-controllers': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-pay': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-ui': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-utils': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76) + '@reown/appkit-wallet': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) lit: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -12043,12 +12112,12 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-ui@1.8.18(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@reown/appkit-ui@1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@phosphor-icons/webcomponents': 2.1.5 - '@reown/appkit-common': 1.8.18(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.8.18(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-wallet': 1.8.18(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-controllers': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-wallet': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) lit: 3.3.0 qrcode: 1.5.3 transitivePeerDependencies: @@ -12088,7 +12157,7 @@ snapshots: '@walletconnect/logger': 2.1.2 '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) valtio: 1.13.2(@types/react@19.2.14)(react@19.1.0) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -12117,17 +12186,17 @@ snapshots: - utf-8-validate - zod - '@reown/appkit-utils@1.8.18(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76)': + '@reown/appkit-utils@1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76)': dependencies: - '@reown/appkit-common': 1.8.18(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.8.18(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-polyfills': 1.8.18 - '@reown/appkit-wallet': 1.8.18(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-controllers': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-polyfills': 1.8.19 + '@reown/appkit-wallet': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) '@wallet-standard/wallet': 1.1.0 '@walletconnect/logger': 3.0.2 - '@walletconnect/universal-provider': 2.23.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/universal-provider': 2.23.7(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) valtio: 2.1.7(@types/react@19.2.14)(react@19.1.0) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) optionalDependencies: '@base-org/account': 2.4.0(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76) '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) @@ -12175,10 +12244,10 @@ snapshots: - typescript - utf-8-validate - '@reown/appkit-wallet@1.8.18(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': + '@reown/appkit-wallet@1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)': dependencies: - '@reown/appkit-common': 1.8.18(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.22.4) - '@reown/appkit-polyfills': 1.8.18 + '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.22.4) + '@reown/appkit-polyfills': 1.8.19 '@walletconnect/logger': 3.0.2 zod: 3.22.4 transitivePeerDependencies: @@ -12200,7 +12269,7 @@ snapshots: '@walletconnect/universal-provider': 2.21.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) bs58: 6.0.0 valtio: 1.13.2(@types/react@19.2.14)(react@19.1.0) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -12229,21 +12298,21 @@ snapshots: - utf-8-validate - zod - '@reown/appkit@1.8.18(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76)': - dependencies: - '@reown/appkit-common': 1.8.18(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-controllers': 1.8.18(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-pay': 1.8.18(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-polyfills': 1.8.18 - '@reown/appkit-scaffold-ui': 1.8.18(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76) - '@reown/appkit-ui': 1.8.18(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@reown/appkit-utils': 1.8.18(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76) - '@reown/appkit-wallet': 1.8.18(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) - '@walletconnect/universal-provider': 2.23.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit@1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76)': + dependencies: + '@reown/appkit-common': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-controllers': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-pay': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-polyfills': 1.8.19 + '@reown/appkit-scaffold-ui': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76) + '@reown/appkit-ui': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@reown/appkit-utils': 1.8.19(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(valtio@2.1.7(@types/react@19.2.14)(react@19.1.0))(zod@3.25.76) + '@reown/appkit-wallet': 1.8.19(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10) + '@walletconnect/universal-provider': 2.23.7(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) bs58: 6.0.0 semver: 7.7.2 valtio: 2.1.7(@types/react@19.2.14)(react@19.1.0) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) optionalDependencies: '@lit/react': 1.0.8(@types/react@19.2.14) transitivePeerDependencies: @@ -12378,7 +12447,7 @@ snapshots: '@safe-global/safe-apps-sdk@9.1.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@safe-global/safe-gateway-typescript-sdk': 3.23.1 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) transitivePeerDependencies: - bufferutil - typescript @@ -13050,7 +13119,7 @@ snapshots: dependencies: '@swc/counter': 0.1.3 - '@t3-oss/env-core@0.13.10(typescript@5.9.3)(valibot@1.2.0(typescript@5.9.3))(zod@3.25.76)': + '@t3-oss/env-core@0.13.11(typescript@5.9.3)(valibot@1.2.0(typescript@5.9.3))(zod@3.25.76)': optionalDependencies: typescript: 5.9.3 valibot: 1.2.0(typescript@5.9.3) @@ -13119,53 +13188,53 @@ snapshots: '@tanstack/history@1.161.4': {} - '@tanstack/query-core@5.90.20': {} + '@tanstack/history@1.161.6': {} + + '@tanstack/query-core@5.95.2': {} '@tanstack/query-devtools@5.93.0': {} - '@tanstack/react-query-devtools@5.91.3(@tanstack/react-query@5.90.21(react@19.1.0))(react@19.1.0)': + '@tanstack/react-query-devtools@5.91.3(@tanstack/react-query@5.95.2(react@19.1.0))(react@19.1.0)': dependencies: '@tanstack/query-devtools': 5.93.0 - '@tanstack/react-query': 5.90.21(react@19.1.0) + '@tanstack/react-query': 5.95.2(react@19.1.0) react: 19.1.0 - '@tanstack/react-query@5.90.21(react@19.1.0)': + '@tanstack/react-query@5.95.2(react@19.1.0)': dependencies: - '@tanstack/query-core': 5.90.20 + '@tanstack/query-core': 5.95.2 react: 19.1.0 - '@tanstack/react-router-devtools@1.162.9(@tanstack/react-router@1.162.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.162.9)(csstype@3.2.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@tanstack/react-router-devtools@1.162.9(@tanstack/react-router@1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.168.3)(csstype@3.2.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@tanstack/react-router': 1.162.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@tanstack/router-devtools-core': 1.162.9(@tanstack/router-core@1.162.9)(csstype@3.2.3) + '@tanstack/react-router': 1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@tanstack/router-devtools-core': 1.162.9(@tanstack/router-core@1.168.3)(csstype@3.2.3) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: - '@tanstack/router-core': 1.162.9 + '@tanstack/router-core': 1.168.3 transitivePeerDependencies: - csstype - '@tanstack/react-router@1.162.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@tanstack/react-router@1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@tanstack/history': 1.161.4 - '@tanstack/react-store': 0.9.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@tanstack/router-core': 1.162.9 + '@tanstack/history': 1.161.6 + '@tanstack/react-store': 0.9.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@tanstack/router-core': 1.168.3 isbot: 5.1.35 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - tiny-invariant: 1.3.3 - tiny-warning: 1.0.3 - '@tanstack/react-store@0.9.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@tanstack/react-store@0.9.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@tanstack/store': 0.9.1 + '@tanstack/store': 0.9.2 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) use-sync-external-store: 1.6.0(react@19.1.0) - '@tanstack/react-virtual@3.13.19(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@tanstack/react-virtual@3.13.23(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@tanstack/virtual-core': 3.13.19 + '@tanstack/virtual-core': 3.13.23 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) @@ -13187,19 +13256,26 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/router-devtools-core@1.162.9(@tanstack/router-core@1.162.9)(csstype@3.2.3)': + '@tanstack/router-core@1.168.3': dependencies: - '@tanstack/router-core': 1.162.9 + '@tanstack/history': 1.161.6 + cookie-es: 2.0.0 + seroval: 1.5.1 + seroval-plugins: 1.5.1(seroval@1.5.1) + + '@tanstack/router-devtools-core@1.162.9(@tanstack/router-core@1.168.3)(csstype@3.2.3)': + dependencies: + '@tanstack/router-core': 1.168.3 clsx: 2.1.1 goober: 2.1.18(csstype@3.2.3) tiny-invariant: 1.3.3 optionalDependencies: csstype: 3.2.3 - '@tanstack/router-devtools@1.162.9(@tanstack/react-router@1.162.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.162.9)(csstype@3.2.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@tanstack/router-devtools@1.162.9(@tanstack/react-router@1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.168.3)(csstype@3.2.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@tanstack/react-router': 1.162.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@tanstack/react-router-devtools': 1.162.9(@tanstack/react-router@1.162.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.162.9)(csstype@3.2.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@tanstack/react-router': 1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@tanstack/react-router-devtools': 1.162.9(@tanstack/react-router@1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.168.3)(csstype@3.2.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) clsx: 2.1.1 goober: 2.1.18(csstype@3.2.3) react: 19.1.0 @@ -13222,7 +13298,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.162.9(@tanstack/react-router@1.162.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))': + '@tanstack/router-plugin@1.162.9(@tanstack/react-router@1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) @@ -13238,7 +13314,7 @@ snapshots: unplugin: 2.3.11 zod: 3.25.76 optionalDependencies: - '@tanstack/react-router': 1.162.9(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@tanstack/react-router': 1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) vite: 6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color @@ -13259,14 +13335,16 @@ snapshots: '@tanstack/store@0.9.1': {} - '@tanstack/virtual-core@3.13.19': {} + '@tanstack/store@0.9.2': {} + + '@tanstack/virtual-core@3.13.23': {} '@tanstack/virtual-file-routes@1.161.4': {} '@testing-library/dom@10.4.1': dependencies: '@babel/code-frame': 7.29.0 - '@babel/runtime': 7.28.6 + '@babel/runtime': 7.29.2 '@types/aria-query': 5.0.4 aria-query: 5.3.0 dom-accessibility-api: 0.5.16 @@ -13297,11 +13375,11 @@ snapshots: dependencies: '@testing-library/dom': 10.4.1 - '@theguild/federation-composition@0.21.3(graphql@16.13.0)': + '@theguild/federation-composition@0.21.3(graphql@16.13.1)': dependencies: constant-case: 3.0.4 debug: 4.4.3(supports-color@5.5.0) - graphql: 16.13.0 + graphql: 16.13.1 json5: 2.2.3 lodash.sortby: 4.7.0 transitivePeerDependencies: @@ -13355,6 +13433,10 @@ snapshots: dependencies: '@types/ms': 2.1.0 + '@types/debug@4.1.13': + dependencies: + '@types/ms': 2.1.0 + '@types/deep-eql@4.0.2': {} '@types/estree-jsx@1.0.5': @@ -13557,7 +13639,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@25.3.0)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.13)(@types/node@25.3.0)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 @@ -13572,7 +13654,7 @@ snapshots: std-env: 3.10.0 test-exclude: 7.0.2 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@25.3.0)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) + vitest: 3.2.4(@types/debug@4.1.13)(@types/node@25.3.0)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color @@ -13636,7 +13718,7 @@ snapshots: picocolors: 1.1.1 picomatch: 3.0.1 prettier: 3.8.1 - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) + viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6) zod: 4.3.6 optionalDependencies: typescript: 5.9.3 @@ -13644,19 +13726,19 @@ snapshots: - bufferutil - utf-8-validate - '@wagmi/connectors@6.2.0(@tanstack/react-query@5.90.21(react@19.1.0))(@types/react@19.2.14)(@wagmi/core@2.22.1(@tanstack/query-core@5.90.20)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76))(zod@3.25.76)': + '@wagmi/connectors@6.2.0(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(@wagmi/core@2.22.1(@tanstack/query-core@5.95.2)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76))(zod@3.25.76)': dependencies: '@base-org/account': 2.4.0(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76) '@coinbase/wallet-sdk': 4.3.6(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76) - '@gemini-wallet/core': 0.3.2(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) + '@gemini-wallet/core': 0.3.2(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) '@metamask/sdk': 0.33.1(bufferutil@4.1.0)(utf-8-validate@5.0.10) '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@wagmi/core': 2.22.1(@tanstack/query-core@5.90.20)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) + '@wagmi/core': 2.22.1(@tanstack/query-core@5.95.2)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) '@walletconnect/ethereum-provider': 2.21.1(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) cbw-sdk: '@coinbase/wallet-sdk@3.9.3' - porto: 0.2.35(@tanstack/react-query@5.90.21(react@19.1.0))(@types/react@19.2.14)(@wagmi/core@2.22.1(@tanstack/query-core@5.90.20)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + porto: 0.2.35(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(@wagmi/core@2.22.1(@tanstack/query-core@5.95.2)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)) + viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: @@ -13697,28 +13779,28 @@ snapshots: - wagmi - zod - '@wagmi/connectors@7.2.1(4a8065821c97262ffe59e3e74cb0c1f9)': + '@wagmi/connectors@7.2.1(7a3af5fbb3d5f20af6e588f956426ab3)': dependencies: - '@wagmi/core': 3.4.0(@tanstack/query-core@5.90.20)(@types/react@19.2.14)(ox@0.12.4(typescript@5.9.3)(zod@3.25.76))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@wagmi/core': 3.4.0(@tanstack/query-core@5.95.2)(@types/react@19.2.14)(ox@0.14.7(typescript@5.9.3)(zod@3.25.76))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) + viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) optionalDependencies: '@coinbase/wallet-sdk': 4.3.6(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(zod@3.25.76) '@metamask/sdk': 0.33.1(bufferutil@4.1.0)(utf-8-validate@5.0.10) '@safe-global/safe-apps-provider': 0.18.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) '@safe-global/safe-apps-sdk': 9.1.0(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) '@walletconnect/ethereum-provider': 2.21.1(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - porto: 0.2.37(@tanstack/react-query@5.90.21(react@19.1.0))(@types/react@19.2.14)(@wagmi/core@3.4.0(@tanstack/query-core@5.90.20)(@types/react@19.2.14)(ox@0.12.4(typescript@5.9.3)(zod@3.25.76))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)) + porto: 0.2.37(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(@wagmi/core@3.4.0(@tanstack/query-core@5.95.2)(@types/react@19.2.14)(ox@0.14.7(typescript@5.9.3)(zod@3.25.76))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)) typescript: 5.9.3 optional: true - '@wagmi/core@2.22.1(@tanstack/query-core@5.90.20)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))': + '@wagmi/core@2.22.1(@tanstack/query-core@5.95.2)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))': dependencies: eventemitter3: 5.0.1 mipd: 0.0.7(typescript@5.9.3) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) zustand: 5.0.0(@types/react@19.2.14)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)) optionalDependencies: - '@tanstack/query-core': 5.90.20 + '@tanstack/query-core': 5.95.2 typescript: 5.9.3 transitivePeerDependencies: - '@types/react' @@ -13726,15 +13808,15 @@ snapshots: - react - use-sync-external-store - '@wagmi/core@3.4.0(@tanstack/query-core@5.90.20)(@types/react@19.2.14)(ox@0.12.4(typescript@5.9.3)(zod@3.25.76))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))': + '@wagmi/core@3.4.0(@tanstack/query-core@5.95.2)(@types/react@19.2.14)(ox@0.14.7(typescript@5.9.3)(zod@3.25.76))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))': dependencies: eventemitter3: 5.0.1 mipd: 0.0.7(typescript@5.9.3) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) zustand: 5.0.0(@types/react@19.2.14)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)) optionalDependencies: - '@tanstack/query-core': 5.90.20 - ox: 0.12.4(typescript@5.9.3)(zod@3.25.76) + '@tanstack/query-core': 5.95.2 + ox: 0.14.7(typescript@5.9.3)(zod@3.25.76) typescript: 5.9.3 transitivePeerDependencies: - '@types/react' @@ -13857,7 +13939,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/core@2.23.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/core@2.23.7(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-provider': 1.0.14 @@ -13870,10 +13952,10 @@ snapshots: '@walletconnect/relay-auth': 1.1.0 '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.23.2 - '@walletconnect/utils': 2.23.2(typescript@5.9.3)(zod@3.25.76) + '@walletconnect/types': 2.23.7 + '@walletconnect/utils': 2.23.7(typescript@5.9.3)(zod@3.25.76) '@walletconnect/window-getters': 1.0.1 - es-toolkit: 1.39.3 + es-toolkit: 1.44.0 events: 3.3.0 uint8arrays: 3.1.1 transitivePeerDependencies: @@ -14116,16 +14198,16 @@ snapshots: - utf-8-validate - zod - '@walletconnect/sign-client@2.23.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/sign-client@2.23.7(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: - '@walletconnect/core': 2.23.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/core': 2.23.7(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/logger': 3.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.23.2 - '@walletconnect/utils': 2.23.2(typescript@5.9.3)(zod@3.25.76) + '@walletconnect/types': 2.23.7 + '@walletconnect/utils': 2.23.7(typescript@5.9.3)(zod@3.25.76) events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -14214,7 +14296,7 @@ snapshots: - ioredis - uploadthing - '@walletconnect/types@2.23.2': + '@walletconnect/types@2.23.7': dependencies: '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 @@ -14323,7 +14405,7 @@ snapshots: - utf-8-validate - zod - '@walletconnect/universal-provider@2.23.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': + '@walletconnect/universal-provider@2.23.7(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@walletconnect/events': 1.0.1 '@walletconnect/jsonrpc-http-connection': 1.0.8 @@ -14332,10 +14414,10 @@ snapshots: '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/keyvaluestorage': 1.1.1 '@walletconnect/logger': 3.0.2 - '@walletconnect/sign-client': 2.23.2(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - '@walletconnect/types': 2.23.2 - '@walletconnect/utils': 2.23.2(typescript@5.9.3)(zod@3.25.76) - es-toolkit: 1.39.3 + '@walletconnect/sign-client': 2.23.7(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + '@walletconnect/types': 2.23.7 + '@walletconnect/utils': 2.23.7(typescript@5.9.3)(zod@3.25.76) + es-toolkit: 1.44.0 events: 3.3.0 transitivePeerDependencies: - '@azure/app-configuration' @@ -14451,9 +14533,9 @@ snapshots: - utf-8-validate - zod - '@walletconnect/utils@2.23.2(typescript@5.9.3)(zod@3.25.76)': + '@walletconnect/utils@2.23.7(typescript@5.9.3)(zod@3.25.76)': dependencies: - '@msgpack/msgpack': 3.1.2 + '@msgpack/msgpack': 3.1.3 '@noble/ciphers': 1.3.0 '@noble/curves': 1.9.7 '@noble/hashes': 1.8.0 @@ -14465,11 +14547,10 @@ snapshots: '@walletconnect/relay-auth': 1.1.0 '@walletconnect/safe-json': 1.0.2 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.23.2 + '@walletconnect/types': 2.23.7 '@walletconnect/window-getters': 1.0.1 '@walletconnect/window-metadata': 1.0.1 blakejs: 1.2.1 - bs58: 6.0.0 detect-browser: 5.3.0 ox: 0.9.3(typescript@5.9.3)(zod@3.25.76) uint8arrays: 3.1.1 @@ -14542,561 +14623,561 @@ snapshots: dependencies: tslib: 2.8.1 - '@zag-js/accordion@1.34.1': + '@zag-js/accordion@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/anatomy@1.34.1': {} + '@zag-js/anatomy@1.35.3': {} - '@zag-js/angle-slider@1.34.1': + '@zag-js/angle-slider@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/rect-utils': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/rect-utils': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/aria-hidden@1.34.1': + '@zag-js/aria-hidden@1.35.3': dependencies: - '@zag-js/dom-query': 1.34.1 + '@zag-js/dom-query': 1.35.3 - '@zag-js/async-list@1.34.1': + '@zag-js/async-list@1.35.3': dependencies: - '@zag-js/core': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/core': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/auto-resize@1.34.1': + '@zag-js/auto-resize@1.35.3': dependencies: - '@zag-js/dom-query': 1.34.1 + '@zag-js/dom-query': 1.35.3 - '@zag-js/avatar@1.34.1': + '@zag-js/avatar@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/carousel@1.34.1': + '@zag-js/carousel@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/scroll-snap': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/scroll-snap': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/cascade-select@1.34.1': + '@zag-js/cascade-select@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/collection': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dismissable': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/focus-visible': 1.34.1 - '@zag-js/popper': 1.34.1 - '@zag-js/rect-utils': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/collection': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dismissable': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/focus-visible': 1.35.3 + '@zag-js/popper': 1.35.3 + '@zag-js/rect-utils': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/checkbox@1.34.1': + '@zag-js/checkbox@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/focus-visible': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/focus-visible': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/clipboard@1.34.1': + '@zag-js/clipboard@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/collapsible@1.34.1': + '@zag-js/collapsible@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/collection@1.34.1': + '@zag-js/collection@1.35.3': dependencies: - '@zag-js/utils': 1.34.1 + '@zag-js/utils': 1.35.3 - '@zag-js/color-picker@1.34.1': + '@zag-js/color-picker@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/color-utils': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dismissable': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/popper': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/color-utils': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dismissable': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/popper': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/color-utils@1.34.1': + '@zag-js/color-utils@1.35.3': dependencies: - '@zag-js/utils': 1.34.1 + '@zag-js/utils': 1.35.3 - '@zag-js/combobox@1.34.1': + '@zag-js/combobox@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/aria-hidden': 1.34.1 - '@zag-js/collection': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dismissable': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/focus-visible': 1.34.1 - '@zag-js/popper': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/aria-hidden': 1.35.3 + '@zag-js/collection': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dismissable': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/focus-visible': 1.35.3 + '@zag-js/popper': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/core@1.34.1': + '@zag-js/core@1.35.3': dependencies: - '@zag-js/dom-query': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/dom-query': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/date-picker@1.34.1(@internationalized/date@3.11.0)': + '@zag-js/date-picker@1.35.3(@internationalized/date@3.11.0)': dependencies: '@internationalized/date': 3.11.0 - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/date-utils': 1.34.1(@internationalized/date@3.11.0) - '@zag-js/dismissable': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/live-region': 1.34.1 - '@zag-js/popper': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/date-utils@1.34.1(@internationalized/date@3.11.0)': + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/date-utils': 1.35.3(@internationalized/date@3.11.0) + '@zag-js/dismissable': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/live-region': 1.35.3 + '@zag-js/popper': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/date-utils@1.35.3(@internationalized/date@3.11.0)': dependencies: '@internationalized/date': 3.11.0 - '@zag-js/dialog@1.34.1': + '@zag-js/dialog@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/aria-hidden': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dismissable': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/focus-trap': 1.34.1 - '@zag-js/remove-scroll': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/aria-hidden': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dismissable': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/focus-trap': 1.35.3 + '@zag-js/remove-scroll': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/dismissable@1.34.1': + '@zag-js/dismissable@1.35.3': dependencies: - '@zag-js/dom-query': 1.34.1 - '@zag-js/interact-outside': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/dom-query': 1.35.3 + '@zag-js/interact-outside': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/dom-query@1.34.1': + '@zag-js/dom-query@1.35.3': dependencies: - '@zag-js/types': 1.34.1 + '@zag-js/types': 1.35.3 - '@zag-js/drawer@1.34.1': + '@zag-js/drawer@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/aria-hidden': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dismissable': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/focus-trap': 1.34.1 - '@zag-js/remove-scroll': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/aria-hidden': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dismissable': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/focus-trap': 1.35.3 + '@zag-js/remove-scroll': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/editable@1.34.1': + '@zag-js/editable@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/interact-outside': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/interact-outside': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/file-upload@1.34.1': + '@zag-js/file-upload@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/file-utils': 1.34.1 - '@zag-js/i18n-utils': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/file-utils': 1.35.3 + '@zag-js/i18n-utils': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/file-utils@1.34.1': + '@zag-js/file-utils@1.35.3': dependencies: - '@zag-js/i18n-utils': 1.34.1 + '@zag-js/i18n-utils': 1.35.3 - '@zag-js/floating-panel@1.34.1': + '@zag-js/floating-panel@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/popper': 1.34.1 - '@zag-js/rect-utils': 1.34.1 - '@zag-js/store': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/popper': 1.35.3 + '@zag-js/rect-utils': 1.35.3 + '@zag-js/store': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/focus-trap@1.34.1': + '@zag-js/focus-trap@1.35.3': dependencies: - '@zag-js/dom-query': 1.34.1 + '@zag-js/dom-query': 1.35.3 - '@zag-js/focus-visible@1.34.1': + '@zag-js/focus-visible@1.35.3': dependencies: - '@zag-js/dom-query': 1.34.1 + '@zag-js/dom-query': 1.35.3 - '@zag-js/highlight-word@1.34.1': {} + '@zag-js/highlight-word@1.35.3': {} - '@zag-js/hover-card@1.34.1': + '@zag-js/hover-card@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dismissable': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/popper': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dismissable': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/popper': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/i18n-utils@1.34.1': + '@zag-js/i18n-utils@1.35.3': dependencies: - '@zag-js/dom-query': 1.34.1 + '@zag-js/dom-query': 1.35.3 - '@zag-js/image-cropper@1.34.1': + '@zag-js/image-cropper@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/interact-outside@1.34.1': + '@zag-js/interact-outside@1.35.3': dependencies: - '@zag-js/dom-query': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/dom-query': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/json-tree-utils@1.34.1': {} + '@zag-js/json-tree-utils@1.35.3': {} - '@zag-js/listbox@1.34.1': + '@zag-js/listbox@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/collection': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/focus-visible': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/collection': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/focus-visible': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/live-region@1.34.1': {} + '@zag-js/live-region@1.35.3': {} - '@zag-js/marquee@1.34.1': + '@zag-js/marquee@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/menu@1.34.1': + '@zag-js/menu@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dismissable': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/focus-visible': 1.34.1 - '@zag-js/popper': 1.34.1 - '@zag-js/rect-utils': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dismissable': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/focus-visible': 1.35.3 + '@zag-js/popper': 1.35.3 + '@zag-js/rect-utils': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/navigation-menu@1.34.1': + '@zag-js/navigation-menu@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dismissable': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dismissable': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/number-input@1.34.1': + '@zag-js/number-input@1.35.3': dependencies: '@internationalized/number': 3.6.5 - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/pagination@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/password-input@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/pin-input@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/popover@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/aria-hidden': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dismissable': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/focus-trap': 1.34.1 - '@zag-js/popper': 1.34.1 - '@zag-js/remove-scroll': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/popper@1.34.1': - dependencies: - '@floating-ui/dom': 1.7.5 - '@zag-js/dom-query': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/presence@1.34.1': - dependencies: - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - - '@zag-js/progress@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/qr-code@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/pagination@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/password-input@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/pin-input@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/popover@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/aria-hidden': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dismissable': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/focus-trap': 1.35.3 + '@zag-js/popper': 1.35.3 + '@zag-js/remove-scroll': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/popper@1.35.3': + dependencies: + '@floating-ui/dom': 1.7.6 + '@zag-js/dom-query': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/presence@1.35.3': + dependencies: + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + + '@zag-js/progress@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/qr-code@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 proxy-memoize: 3.0.1 uqr: 0.1.2 - '@zag-js/radio-group@1.34.1': + '@zag-js/radio-group@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/focus-visible': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/focus-visible': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/rating-group@1.34.1': + '@zag-js/rating-group@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/react@1.34.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@zag-js/react@1.35.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@zag-js/core': 1.34.1 - '@zag-js/store': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/core': 1.35.3 + '@zag-js/store': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@zag-js/rect-utils@1.34.1': {} + '@zag-js/rect-utils@1.35.3': {} - '@zag-js/remove-scroll@1.34.1': + '@zag-js/remove-scroll@1.35.3': dependencies: - '@zag-js/dom-query': 1.34.1 + '@zag-js/dom-query': 1.35.3 - '@zag-js/scroll-area@1.34.1': + '@zag-js/scroll-area@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/scroll-snap@1.34.1': + '@zag-js/scroll-snap@1.35.3': dependencies: - '@zag-js/dom-query': 1.34.1 + '@zag-js/dom-query': 1.35.3 - '@zag-js/select@1.34.1': + '@zag-js/select@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/collection': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dismissable': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/focus-visible': 1.34.1 - '@zag-js/popper': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/collection': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dismissable': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/focus-visible': 1.35.3 + '@zag-js/popper': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/signature-pad@1.34.1': + '@zag-js/signature-pad@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 perfect-freehand: 1.2.3 - '@zag-js/slider@1.34.1': + '@zag-js/slider@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/splitter@1.34.1': + '@zag-js/splitter@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/steps@1.34.1': + '@zag-js/steps@1.35.3': dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 - '@zag-js/store@1.34.1': + '@zag-js/store@1.35.3': dependencies: proxy-compare: 3.0.1 - '@zag-js/switch@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/focus-visible': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/tabs@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/tags-input@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/auto-resize': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/interact-outside': 1.34.1 - '@zag-js/live-region': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/timer@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/toast@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dismissable': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/toggle-group@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/toggle@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/tooltip@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/focus-visible': 1.34.1 - '@zag-js/popper': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/tour@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dismissable': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/focus-trap': 1.34.1 - '@zag-js/interact-outside': 1.34.1 - '@zag-js/popper': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/tree-view@1.34.1': - dependencies: - '@zag-js/anatomy': 1.34.1 - '@zag-js/collection': 1.34.1 - '@zag-js/core': 1.34.1 - '@zag-js/dom-query': 1.34.1 - '@zag-js/types': 1.34.1 - '@zag-js/utils': 1.34.1 - - '@zag-js/types@1.34.1': + '@zag-js/switch@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/focus-visible': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/tabs@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/tags-input@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/auto-resize': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/interact-outside': 1.35.3 + '@zag-js/live-region': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/timer@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/toast@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dismissable': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/toggle-group@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/toggle@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/tooltip@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/focus-visible': 1.35.3 + '@zag-js/popper': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/tour@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dismissable': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/focus-trap': 1.35.3 + '@zag-js/interact-outside': 1.35.3 + '@zag-js/popper': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/tree-view@1.35.3': + dependencies: + '@zag-js/anatomy': 1.35.3 + '@zag-js/collection': 1.35.3 + '@zag-js/core': 1.35.3 + '@zag-js/dom-query': 1.35.3 + '@zag-js/types': 1.35.3 + '@zag-js/utils': 1.35.3 + + '@zag-js/types@1.35.3': dependencies: csstype: 3.2.3 - '@zag-js/utils@1.34.1': {} + '@zag-js/utils@1.35.3': {} JSONStream@1.3.5: dependencies: @@ -15270,14 +15351,14 @@ snapshots: cosmiconfig: 7.1.0 resolve: 1.22.11 - babel-plugin-styled-components@2.1.4(@babel/core@7.29.0)(styled-components@5.3.11(@babel/core@7.29.0)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0))(supports-color@5.5.0): + babel-plugin-styled-components@2.1.4(@babel/core@7.29.0)(styled-components@5.3.11(@babel/core@7.29.0)(react-dom@19.1.0(react@19.1.0))(react-is@17.0.2)(react@19.1.0))(supports-color@5.5.0): dependencies: '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-module-imports': 7.28.6(supports-color@5.5.0) '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) lodash: 4.17.23 picomatch: 2.3.1 - styled-components: 5.3.11(@babel/core@7.29.0)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0) + styled-components: 5.3.11(@babel/core@7.29.0)(react-dom@19.1.0(react@19.1.0))(react-is@17.0.2)(react@19.1.0) transitivePeerDependencies: - '@babel/core' - supports-color @@ -15663,12 +15744,12 @@ snapshots: confbox@0.1.8: {} - connectkit@1.9.1(@babel/core@7.29.0)(@tanstack/react-query@5.90.21(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)): + connectkit@1.9.1(@babel/core@7.29.0)(@tanstack/react-query@5.95.2(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react-is@17.0.2)(react@19.1.0)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)): dependencies: - '@tanstack/react-query': 5.90.21(react@19.1.0) + '@tanstack/react-query': 5.95.2(react@19.1.0) buffer: 6.0.3 detect-browser: 5.3.0 - family: 0.1.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)) + family: 0.1.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)) framer-motion: 6.5.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) qrcode: 1.5.4 react: 19.1.0 @@ -15676,9 +15757,9 @@ snapshots: react-transition-state: 1.1.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react-use-measure: 2.1.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0) resize-observer-polyfill: 1.5.1 - styled-components: 5.3.11(@babel/core@7.29.0)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - wagmi: 2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) + styled-components: 5.3.11(@babel/core@7.29.0)(react-dom@19.1.0(react@19.1.0))(react-is@17.0.2)(react@19.1.0) + viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + wagmi: 2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) transitivePeerDependencies: - '@babel/core' - react-is @@ -16044,7 +16125,7 @@ snapshots: es-toolkit@1.33.0: {} - es-toolkit@1.39.3: {} + es-toolkit@1.44.0: {} es6-promise@4.2.8: {} @@ -16259,12 +16340,12 @@ snapshots: eyes@0.1.8: {} - family@0.1.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)): + family@0.1.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)): optionalDependencies: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) - wagmi: 2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + wagmi: 2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) fast-deep-equal@3.1.3: {} @@ -16506,12 +16587,12 @@ snapshots: gopd@1.2.0: {} - gql.tada@1.9.0(graphql@16.13.0)(typescript@5.9.3): + gql.tada@1.9.0(graphql@16.13.1)(typescript@5.9.3): dependencies: - '@0no-co/graphql.web': 1.2.0(graphql@16.13.0) - '@0no-co/graphqlsp': 1.15.2(graphql@16.13.0)(typescript@5.9.3) - '@gql.tada/cli-utils': 1.7.2(@0no-co/graphqlsp@1.15.2(graphql@16.13.0)(typescript@5.9.3))(graphql@16.13.0)(typescript@5.9.3) - '@gql.tada/internal': 1.0.8(graphql@16.13.0)(typescript@5.9.3) + '@0no-co/graphql.web': 1.2.0(graphql@16.13.1) + '@0no-co/graphqlsp': 1.15.2(graphql@16.13.1)(typescript@5.9.3) + '@gql.tada/cli-utils': 1.7.2(@0no-co/graphqlsp@1.15.2(graphql@16.13.1)(typescript@5.9.3))(graphql@16.13.1)(typescript@5.9.3) + '@gql.tada/internal': 1.0.8(graphql@16.13.1)(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - '@gql.tada/svelte-support' @@ -16520,16 +16601,16 @@ snapshots: graceful-fs@4.2.11: {} - graphql-config@5.1.5(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.0)(typescript@5.9.3)(utf-8-validate@5.0.10): + graphql-config@5.1.5(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.1)(typescript@5.9.3)(utf-8-validate@5.0.10): dependencies: - '@graphql-tools/graphql-file-loader': 8.1.9(graphql@16.13.0) - '@graphql-tools/json-file-loader': 8.0.26(graphql@16.13.0) - '@graphql-tools/load': 8.1.8(graphql@16.13.0) - '@graphql-tools/merge': 9.1.7(graphql@16.13.0) - '@graphql-tools/url-loader': 8.0.33(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.0)(utf-8-validate@5.0.10) - '@graphql-tools/utils': 10.11.0(graphql@16.13.0) + '@graphql-tools/graphql-file-loader': 8.1.9(graphql@16.13.1) + '@graphql-tools/json-file-loader': 8.0.26(graphql@16.13.1) + '@graphql-tools/load': 8.1.8(graphql@16.13.1) + '@graphql-tools/merge': 9.1.7(graphql@16.13.1) + '@graphql-tools/url-loader': 8.0.33(@types/node@25.3.0)(bufferutil@4.1.0)(crossws@0.3.5)(graphql@16.13.1)(utf-8-validate@5.0.10) + '@graphql-tools/utils': 10.11.0(graphql@16.13.1) cosmiconfig: 8.3.6(typescript@5.9.3) - graphql: 16.13.0 + graphql: 16.13.1 jiti: 2.6.1 minimatch: 9.0.6 string-env-interpolation: 1.0.1 @@ -16543,32 +16624,32 @@ snapshots: - typescript - utf-8-validate - graphql-request@6.1.0(graphql@16.13.0): + graphql-request@6.1.0(graphql@16.13.1): dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.0) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.1) cross-fetch: 3.2.0 - graphql: 16.13.0 + graphql: 16.13.1 transitivePeerDependencies: - encoding - graphql-request@7.4.0(graphql@16.13.0): + graphql-request@7.4.0(graphql@16.13.1): dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.0) - graphql: 16.13.0 + '@graphql-typed-document-node/core': 3.2.0(graphql@16.13.1) + graphql: 16.13.1 - graphql-tag@2.12.6(graphql@16.13.0): + graphql-tag@2.12.6(graphql@16.13.1): dependencies: - graphql: 16.13.0 + graphql: 16.13.1 tslib: 2.8.1 - graphql-ws@6.0.7(crossws@0.3.5)(graphql@16.13.0)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)): + graphql-ws@6.0.7(crossws@0.3.5)(graphql@16.13.1)(ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10)): dependencies: - graphql: 16.13.0 + graphql: 16.13.1 optionalDependencies: crossws: 0.3.5 ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) - graphql@16.13.0: {} + graphql@16.13.1: {} h3@1.15.5: dependencies: @@ -18030,7 +18111,7 @@ snapshots: string-width: 6.1.0 strip-ansi: 7.1.2 - ox@0.12.4(typescript@5.9.3)(zod@3.22.4): + ox@0.14.7(typescript@5.9.3)(zod@3.22.4): dependencies: '@adraffy/ens-normalize': 1.11.1 '@noble/ciphers': 1.3.0 @@ -18045,7 +18126,7 @@ snapshots: transitivePeerDependencies: - zod - ox@0.12.4(typescript@5.9.3)(zod@3.25.76): + ox@0.14.7(typescript@5.9.3)(zod@3.25.76): dependencies: '@adraffy/ens-normalize': 1.11.1 '@noble/ciphers': 1.3.0 @@ -18060,7 +18141,7 @@ snapshots: transitivePeerDependencies: - zod - ox@0.12.4(typescript@5.9.3)(zod@4.3.6): + ox@0.14.7(typescript@5.9.3)(zod@4.3.6): dependencies: '@adraffy/ens-normalize': 1.11.1 '@noble/ciphers': 1.3.0 @@ -18324,41 +18405,41 @@ snapshots: style-value-types: 5.0.0 tslib: 2.8.1 - porto@0.2.35(@tanstack/react-query@5.90.21(react@19.1.0))(@types/react@19.2.14)(@wagmi/core@2.22.1(@tanstack/query-core@5.90.20)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)): + porto@0.2.35(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(@wagmi/core@2.22.1(@tanstack/query-core@5.95.2)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)): dependencies: - '@wagmi/core': 2.22.1(@tanstack/query-core@5.90.20)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) + '@wagmi/core': 2.22.1(@tanstack/query-core@5.95.2)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) hono: 4.12.2 idb-keyval: 6.2.2 mipd: 0.0.7(typescript@5.9.3) ox: 0.9.17(typescript@5.9.3)(zod@4.3.6) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) zod: 4.3.6 zustand: 5.0.11(@types/react@19.2.14)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)) optionalDependencies: - '@tanstack/react-query': 5.90.21(react@19.1.0) + '@tanstack/react-query': 5.95.2(react@19.1.0) react: 19.1.0 typescript: 5.9.3 - wagmi: 2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) + wagmi: 2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) transitivePeerDependencies: - '@types/react' - immer - use-sync-external-store - porto@0.2.37(@tanstack/react-query@5.90.21(react@19.1.0))(@types/react@19.2.14)(@wagmi/core@3.4.0(@tanstack/query-core@5.90.20)(@types/react@19.2.14)(ox@0.12.4(typescript@5.9.3)(zod@3.25.76))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)): + porto@0.2.37(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(@wagmi/core@3.4.0(@tanstack/query-core@5.95.2)(@types/react@19.2.14)(ox@0.14.7(typescript@5.9.3)(zod@3.25.76))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76)): dependencies: - '@wagmi/core': 3.4.0(@tanstack/query-core@5.90.20)(@types/react@19.2.14)(ox@0.12.4(typescript@5.9.3)(zod@3.25.76))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) + '@wagmi/core': 3.4.0(@tanstack/query-core@5.95.2)(@types/react@19.2.14)(ox@0.14.7(typescript@5.9.3)(zod@3.25.76))(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) hono: 4.12.2 idb-keyval: 6.2.2 mipd: 0.0.7(typescript@5.9.3) ox: 0.9.17(typescript@5.9.3)(zod@4.3.6) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) zod: 4.3.6 zustand: 5.0.11(@types/react@19.2.14)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)) optionalDependencies: - '@tanstack/react-query': 5.90.21(react@19.1.0) + '@tanstack/react-query': 5.95.2(react@19.1.0) react: 19.1.0 typescript: 5.9.3 - wagmi: 2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) + wagmi: 2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76) transitivePeerDependencies: - '@types/react' - immer @@ -18378,7 +18459,7 @@ snapshots: preact@10.24.2: {} - preact@10.28.4: {} + preact@10.29.0: {} prettier@3.8.1: {} @@ -18539,7 +18620,7 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - react-number-format@5.4.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + react-number-format@5.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) @@ -18953,8 +19034,14 @@ snapshots: dependencies: seroval: 1.5.0 + seroval-plugins@1.5.1(seroval@1.5.1): + dependencies: + seroval: 1.5.1 + seroval@1.5.0: {} + seroval@1.5.1: {} + serve-static@1.16.3: dependencies: encodeurl: 2.0.0 @@ -19189,19 +19276,19 @@ snapshots: hey-listen: 1.0.8 tslib: 2.8.1 - styled-components@5.3.11(@babel/core@7.29.0)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0): + styled-components@5.3.11(@babel/core@7.29.0)(react-dom@19.1.0(react@19.1.0))(react-is@17.0.2)(react@19.1.0): dependencies: '@babel/helper-module-imports': 7.28.6(supports-color@5.5.0) '@babel/traverse': 7.29.0(supports-color@5.5.0) '@emotion/is-prop-valid': 1.4.0 '@emotion/stylis': 0.8.5 '@emotion/unitless': 0.7.5 - babel-plugin-styled-components: 2.1.4(@babel/core@7.29.0)(styled-components@5.3.11(@babel/core@7.29.0)(react-dom@19.1.0(react@19.1.0))(react-is@16.13.1)(react@19.1.0))(supports-color@5.5.0) + babel-plugin-styled-components: 2.1.4(@babel/core@7.29.0)(styled-components@5.3.11(@babel/core@7.29.0)(react-dom@19.1.0(react@19.1.0))(react-is@17.0.2)(react@19.1.0))(supports-color@5.5.0) css-to-react-native: 3.2.0 hoist-non-react-statics: 3.3.2 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - react-is: 16.13.1 + react-is: 17.0.2 shallowequal: 1.1.0 supports-color: 5.5.0 transitivePeerDependencies: @@ -19640,7 +19727,7 @@ snapshots: - utf-8-validate - zod - viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.22.4): + viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.22.4): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 @@ -19648,7 +19735,7 @@ snapshots: '@scure/bip39': 1.6.0 abitype: 1.2.3(typescript@5.9.3)(zod@3.22.4) isows: 1.0.7(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) - ox: 0.12.4(typescript@5.9.3)(zod@3.22.4) + ox: 0.14.7(typescript@5.9.3)(zod@3.22.4) ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) optionalDependencies: typescript: 5.9.3 @@ -19657,7 +19744,7 @@ snapshots: - utf-8-validate - zod - viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76): + viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 @@ -19665,7 +19752,7 @@ snapshots: '@scure/bip39': 1.6.0 abitype: 1.2.3(typescript@5.9.3)(zod@3.25.76) isows: 1.0.7(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) - ox: 0.12.4(typescript@5.9.3)(zod@3.25.76) + ox: 0.14.7(typescript@5.9.3)(zod@3.25.76) ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) optionalDependencies: typescript: 5.9.3 @@ -19674,7 +19761,7 @@ snapshots: - utf-8-validate - zod - viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6): + viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@4.3.6): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 @@ -19682,7 +19769,7 @@ snapshots: '@scure/bip39': 1.6.0 abitype: 1.2.3(typescript@5.9.3)(zod@4.3.6) isows: 1.0.7(ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10)) - ox: 0.12.4(typescript@5.9.3)(zod@4.3.6) + ox: 0.14.7(typescript@5.9.3)(zod@4.3.6) ws: 8.18.3(bufferutil@4.1.0)(utf-8-validate@5.0.10) optionalDependencies: typescript: 5.9.3 @@ -19741,7 +19828,7 @@ snapshots: tsx: 4.21.0 yaml: 2.8.2 - vitest@3.2.4(@types/debug@4.1.12)(@types/node@25.3.0)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2): + vitest@3.2.4(@types/debug@4.1.13)(@types/node@25.3.0)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.1.0)(utf-8-validate@5.0.10))(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 @@ -19767,7 +19854,7 @@ snapshots: vite-node: 3.2.4(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: - '@types/debug': 4.1.12 + '@types/debug': 4.1.13 '@types/node': 25.3.0 jsdom: 26.1.0(bufferutil@4.1.0)(utf-8-validate@5.0.10) transitivePeerDependencies: @@ -19877,14 +19964,14 @@ snapshots: dependencies: xml-name-validator: 5.0.0 - wagmi@2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76): + wagmi@2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76): dependencies: - '@tanstack/react-query': 5.90.21(react@19.1.0) - '@wagmi/connectors': 6.2.0(@tanstack/react-query@5.90.21(react@19.1.0))(@types/react@19.2.14)(@wagmi/core@2.22.1(@tanstack/query-core@5.90.20)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76))(zod@3.25.76) - '@wagmi/core': 2.22.1(@tanstack/query-core@5.90.20)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) + '@tanstack/react-query': 5.95.2(react@19.1.0) + '@wagmi/connectors': 6.2.0(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(@wagmi/core@2.22.1(@tanstack/query-core@5.95.2)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)))(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(wagmi@2.19.5(@tanstack/query-core@5.95.2)(@tanstack/react-query@5.95.2(react@19.1.0))(@types/react@19.2.14)(bufferutil@4.1.0)(react@19.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76))(zod@3.25.76))(zod@3.25.76) + '@wagmi/core': 2.22.1(@tanstack/query-core@5.95.2)(@types/react@19.2.14)(react@19.1.0)(typescript@5.9.3)(use-sync-external-store@1.4.0(react@19.1.0))(viem@2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76)) react: 19.1.0 use-sync-external-store: 1.4.0(react@19.1.0) - viem: 2.46.3(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) + viem: 2.47.6(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@5.0.10)(zod@3.25.76) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: @@ -20094,6 +20181,12 @@ snapshots: react: 19.1.0 use-sync-external-store: 1.4.0(react@19.1.0) + zustand@5.0.12(@types/react@19.2.14)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)): + optionalDependencies: + '@types/react': 19.2.14 + react: 19.1.0 + use-sync-external-store: 1.4.0(react@19.1.0) + zustand@5.0.3(@types/react@19.2.14)(react@19.1.0)(use-sync-external-store@1.4.0(react@19.1.0)): optionalDependencies: '@types/react': 19.2.14 From 9ab7ee53ab151932dad4760a2283d36ad4de80d1 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 23 Mar 2026 19:03:14 -0300 Subject: [PATCH 27/37] chore(deps): align @tanstack devtools versions with runtime packages @tanstack/react-query-devtools was behind the query runtime by two minor versions; router-cli, router-devtools, and router-plugin were 48 minor versions behind @tanstack/react-router. Keep tooling in sync to avoid CLI/codegen/devtools incompatibilities. --- package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 85fe79b2..d5339512 100644 --- a/package.json +++ b/package.json @@ -62,10 +62,10 @@ "@graphql-codegen/cli": "^5.0.6", "@graphql-typed-document-node/core": "^3.2.0", "@parcel/watcher": "^2.5.1", - "@tanstack/react-query-devtools": "^5.75.7", - "@tanstack/router-cli": "^1.120.3", - "@tanstack/router-devtools": "^1.120.3", - "@tanstack/router-plugin": "^1.120.3", + "@tanstack/react-query-devtools": "^5.95.2", + "@tanstack/router-cli": "^1.168.3", + "@tanstack/router-devtools": "^1.168.3", + "@tanstack/router-plugin": "^1.168.3", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.3.0", "@testing-library/user-event": "^14.6.1", From 49b989f36223a195639bfd0d8be4c3e5a089eae7 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 23 Mar 2026 19:11:45 -0300 Subject: [PATCH 28/37] chore(deps): use actual latest available versions for @tanstack devtools @tanstack/router-cli, router-devtools, and router-plugin lag behind the router core release cadence and do not have a 1.168.3 release. Update specifiers to the actual latest available: - @tanstack/router-cli 1.162.9 -> 1.166.18 - @tanstack/router-devtools 1.162.9 -> 1.166.11 - @tanstack/router-plugin 1.162.9 -> 1.167.4 - @tanstack/react-query-devtools 5.91.3 -> 5.95.2 (lockfile) --- package.json | 6 +- pnpm-lock.yaml | 159 ++++++++++++++++++------------------------------- 2 files changed, 60 insertions(+), 105 deletions(-) diff --git a/package.json b/package.json index d5339512..29e5067f 100644 --- a/package.json +++ b/package.json @@ -63,9 +63,9 @@ "@graphql-typed-document-node/core": "^3.2.0", "@parcel/watcher": "^2.5.1", "@tanstack/react-query-devtools": "^5.95.2", - "@tanstack/router-cli": "^1.168.3", - "@tanstack/router-devtools": "^1.168.3", - "@tanstack/router-plugin": "^1.168.3", + "@tanstack/router-cli": "^1.166.18", + "@tanstack/router-devtools": "^1.166.11", + "@tanstack/router-plugin": "^1.167.4", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.3.0", "@testing-library/user-event": "^14.6.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8640919f..f30a3eb9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -115,17 +115,17 @@ importers: specifier: ^2.5.1 version: 2.5.6 '@tanstack/react-query-devtools': - specifier: ^5.75.7 - version: 5.91.3(@tanstack/react-query@5.95.2(react@19.1.0))(react@19.1.0) + specifier: ^5.95.2 + version: 5.95.2(@tanstack/react-query@5.95.2(react@19.1.0))(react@19.1.0) '@tanstack/router-cli': - specifier: ^1.120.3 - version: 1.162.9 + specifier: ^1.166.18 + version: 1.166.18 '@tanstack/router-devtools': - specifier: ^1.120.3 - version: 1.162.9(@tanstack/react-router@1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.168.3)(csstype@3.2.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^1.166.11 + version: 1.166.11(@tanstack/react-router@1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.168.3)(csstype@3.2.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tanstack/router-plugin': - specifier: ^1.120.3 - version: 1.162.9(@tanstack/react-router@1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) + specifier: ^1.167.4 + version: 1.167.4(@tanstack/react-router@1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2)) '@testing-library/jest-dom': specifier: ^6.6.3 version: 6.9.1 @@ -3475,10 +3475,6 @@ packages: peerDependencies: vite: ^5.2.0 || ^6 - '@tanstack/history@1.161.4': - resolution: {integrity: sha512-Kp/WSt411ZWYvgXy6uiv5RmhHrz9cAml05AQPrtdAp7eUqvIDbMGPnML25OKbzR3RJ1q4wgENxDTvlGPa9+Mww==} - engines: {node: '>=20.19'} - '@tanstack/history@1.161.6': resolution: {integrity: sha512-NaOGLRrddszbQj9upGat6HG/4TKvXLvu+osAIgfxPYA+eIvYKv8GKDJOrY2D3/U9MRnKfMWD7bU4jeD4xmqyIg==} engines: {node: '>=20.19'} @@ -3486,13 +3482,13 @@ packages: '@tanstack/query-core@5.95.2': resolution: {integrity: sha512-o4T8vZHZET4Bib3jZ/tCW9/7080urD4c+0/AUaYVpIqOsr7y0reBc1oX3ttNaSW5mYyvZHctiQ/UOP2PfdmFEQ==} - '@tanstack/query-devtools@5.93.0': - resolution: {integrity: sha512-+kpsx1NQnOFTZsw6HAFCW3HkKg0+2cepGtAWXjiiSOJJ1CtQpt72EE2nyZb+AjAbLRPoeRmPJ8MtQd8r8gsPdg==} + '@tanstack/query-devtools@5.95.2': + resolution: {integrity: sha512-QfaoqBn9uAZ+ICkA8brd1EHj+qBF6glCFgt94U8XP5BT6ppSsDBI8IJ00BU+cAGjQzp6wcKJL2EmRYvxy0TWIg==} - '@tanstack/react-query-devtools@5.91.3': - resolution: {integrity: sha512-nlahjMtd/J1h7IzOOfqeyDh5LNfG0eULwlltPEonYy0QL+nqrBB+nyzJfULV+moL7sZyxc2sHdNJki+vLA9BSA==} + '@tanstack/react-query-devtools@5.95.2': + resolution: {integrity: sha512-AFQFmbznVkbtfpx8VJ2DylW17wWagQel/qLstVLkYmNRo2CmJt3SNej5hvl6EnEeljJIdC3BTB+W7HZtpsH+3g==} peerDependencies: - '@tanstack/react-query': ^5.90.20 + '@tanstack/react-query': ^5.95.2 react: ^18 || ^19 '@tanstack/react-query@5.95.2': @@ -3500,12 +3496,12 @@ packages: peerDependencies: react: ^18 || ^19 - '@tanstack/react-router-devtools@1.162.9': - resolution: {integrity: sha512-8xDqykw8MYWj4JoNfiJR/ZnocRBlfFeDSOQWVoWlnZKlciLCJ9dVfXuXQJlDlWr3JdmsWyyRvruZBnYr1YlUcg==} + '@tanstack/react-router-devtools@1.166.11': + resolution: {integrity: sha512-WYR3q4Xui5yPT/5PXtQh8i03iUA7q8dONBjWpV3nsGdM8Cs1FxpfhLstW0wZO1dOvSyElscwTRCJ6nO5N8r3Lg==} engines: {node: '>=20.19'} peerDependencies: - '@tanstack/react-router': ^1.162.9 - '@tanstack/router-core': ^1.162.9 + '@tanstack/react-router': ^1.168.2 + '@tanstack/router-core': ^1.168.2 react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' peerDependenciesMeta: @@ -3531,35 +3527,31 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/router-cli@1.162.9': - resolution: {integrity: sha512-kwNfO4vM0TdG+XC76iJNn/D5LG4io6yyn64ONacU8apJo3AT0tbPIEjfPU37iY+hbkdtLUO2b+9L/XjGfWbLBQ==} + '@tanstack/router-cli@1.166.18': + resolution: {integrity: sha512-NR48iTLMuNm53SUWBBEQyE0TG3zAoqalPbcmVyQ9NOrzcXW/E7QLo96/8TYF4hiAu/x51e+z2fZ5wYl8XcGB7w==} engines: {node: '>=20.19'} hasBin: true - '@tanstack/router-core@1.162.9': - resolution: {integrity: sha512-eG7C0oVtZbFOkfvsaF8UyGuNjEc1BfIfD5EzQNwG4vqLKOAyY5SMFBCNjabAi2sglRhL0ZOwKon1SExusU5fxA==} - engines: {node: '>=20.19'} - '@tanstack/router-core@1.168.3': resolution: {integrity: sha512-qcjArls3v12UQQkEpU0+todc0/MCyrEZeXxhtgZZ0e5gxZDG25BUe/HlNcIjzyb7NZaw0TQAUBXbTClmFaHZiw==} engines: {node: '>=20.19'} hasBin: true - '@tanstack/router-devtools-core@1.162.9': - resolution: {integrity: sha512-fX54Aub/mS9KVrWy/CSe5+vu/pSez45RojzBZYK4KLMA8HsTxQ4/jjBfHwGg6FaqXKL52b72f4BAB+Cx559rIA==} + '@tanstack/router-devtools-core@1.167.1': + resolution: {integrity: sha512-ECMM47J4KmifUvJguGituSiBpfN8SyCUEoxQks5RY09hpIBfR2eswCv2e6cJimjkKwBQXOVTPkTUk/yRvER+9w==} engines: {node: '>=20.19'} peerDependencies: - '@tanstack/router-core': ^1.162.9 + '@tanstack/router-core': ^1.168.2 csstype: ^3.0.10 peerDependenciesMeta: csstype: optional: true - '@tanstack/router-devtools@1.162.9': - resolution: {integrity: sha512-ggR71Dy2hX404EOqZ7LqP2v/apbnz/zkBJtTRCXQIgeTWaoODsBXAoAtd2RA9RM6Wp5/qg3TkkJzjZmncEYKmA==} + '@tanstack/router-devtools@1.166.11': + resolution: {integrity: sha512-jvFKr1fQ5pWMOZTILhitJc1kJt1wj8qqtRClVJvyD1AjHc1XINihkqK+R6+FmC8F2m+XOhKME4CSnTtJ6Nf34w==} engines: {node: '>=20.19'} peerDependencies: - '@tanstack/react-router': ^1.162.9 + '@tanstack/react-router': ^1.168.2 csstype: ^3.0.10 react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' @@ -3567,16 +3559,17 @@ packages: csstype: optional: true - '@tanstack/router-generator@1.162.9': - resolution: {integrity: sha512-yVYFL/b0hRNRDTJn7+k/BEgRICIV064G2aAkvioRx2apYaMaDvWPAYSSFkNM/4etA+J16ATMhK30513glQmVug==} + '@tanstack/router-generator@1.166.17': + resolution: {integrity: sha512-sBs6lyvA+B51hpUWYLx0KdaAIO/m9Ml2bsAdfVYyvs5DZXiAZZEbVD0myndyIkWaPR5x+kzuBakkrgTxJ9/m9Q==} engines: {node: '>=20.19'} - '@tanstack/router-plugin@1.162.9': - resolution: {integrity: sha512-RnvDntkf4d8YxuG0zxqb9BqLnDhbCjpyzOAG/Jw9AV3d0kih0UcTbAZCzfoDAiGMuztOsAWMyiVXcoy5LnPKag==} + '@tanstack/router-plugin@1.167.4': + resolution: {integrity: sha512-VChByI+CHdHMW350E6winbgqdX4tzmZIHovys8vXidRZkxGAhlygj/zhbnepF/TGX88rubj+SXDwSHY25qEcpQ==} engines: {node: '>=20.19'} + hasBin: true peerDependencies: '@rsbuild/core': '>=1.0.2' - '@tanstack/react-router': ^1.162.9 + '@tanstack/react-router': ^1.168.3 vite: '>=5.0.0 || >=6.0.0 || >=7.0.0' vite-plugin-solid: ^2.11.10 webpack: '>=5.92.0' @@ -3592,22 +3585,20 @@ packages: webpack: optional: true - '@tanstack/router-utils@1.161.4': - resolution: {integrity: sha512-r8TpjyIZoqrXXaf2DDyjd44gjGBoyE+/oEaaH68yLI9ySPO1gUWmQENZ1MZnmBnpUGN24NOZxdjDLc8npK0SAw==} + '@tanstack/router-utils@1.161.6': + resolution: {integrity: sha512-nRcYw+w2OEgK6VfjirYvGyPLOK+tZQz1jkYcmH5AjMamQ9PycnlxZF2aEZtPpNoUsaceX2bHptn6Ub5hGXqNvw==} engines: {node: '>=20.19'} - '@tanstack/store@0.9.1': - resolution: {integrity: sha512-+qcNkOy0N1qSGsP7omVCW0SDrXtaDcycPqBDE726yryiA5eTDFpjBReaYjghVJwNf1pcPMyzIwTGlYjCSQR0Fg==} - '@tanstack/store@0.9.2': resolution: {integrity: sha512-K013lUJEFJK2ofFQ/hZKJUmCnpcV00ebLyOyFOWQvyQHUOZp/iYO84BM6aOGiV81JzwbX0APTVmW8YI7yiG5oA==} '@tanstack/virtual-core@3.13.23': resolution: {integrity: sha512-zSz2Z2HNyLjCplANTDyl3BcdQJc2k1+yyFoKhNRmCr7V7dY8o8q5m8uFTI1/Pg1kL+Hgrz6u3Xo6eFUB7l66cg==} - '@tanstack/virtual-file-routes@1.161.4': - resolution: {integrity: sha512-42WoRePf8v690qG8yGRe/YOh+oHni9vUaUUfoqlS91U2scd3a5rkLtVsc6b7z60w3RogH0I00vdrC5AaeiZ18w==} + '@tanstack/virtual-file-routes@1.161.7': + resolution: {integrity: sha512-olW33+Cn+bsCsZKPwEGhlkqS6w3M2slFv11JIobdnCFKMLG97oAI2kWKdx5/zsywTL8flpnoIgaZZPlQTFYhdQ==} engines: {node: '>=20.19'} + hasBin: true '@testing-library/dom@10.4.1': resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} @@ -7600,22 +7591,12 @@ packages: sentence-case@3.0.4: resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} - seroval-plugins@1.5.0: - resolution: {integrity: sha512-EAHqADIQondwRZIdeW2I636zgsODzoBDwb3PT/+7TLDWyw1Dy/Xv7iGUIEXXav7usHDE9HVhOU61irI3EnyyHA==} - engines: {node: '>=10'} - peerDependencies: - seroval: ^1.0 - seroval-plugins@1.5.1: resolution: {integrity: sha512-4FbuZ/TMl02sqv0RTFexu0SP6V+ywaIe5bAWCCEik0fk17BhALgwvUDVF7e3Uvf9pxmwCEJsRPmlkUE6HdzLAw==} engines: {node: '>=10'} peerDependencies: seroval: ^1.0 - seroval@1.5.0: - resolution: {integrity: sha512-OE4cvmJ1uSPrKorFIH9/w/Qwuvi/IMcGbv5RKgcJ/zjA/IohDLU6SVaxFN9FwajbP7nsX0dQqMDes1whk3y+yw==} - engines: {node: '>=10'} - seroval@1.5.1: resolution: {integrity: sha512-OwrZRZAfhHww0WEnKHDY8OM0U/Qs8OTfIDWhUD4BLpNJUfXK4cGmjiagGze086m+mhI+V2nD0gfbHEnJjb9STA==} engines: {node: '>=10'} @@ -7926,9 +7907,6 @@ packages: tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - tiny-warning@1.0.3: - resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} - tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -13186,17 +13164,15 @@ snapshots: tailwindcss: 4.0.7 vite: 6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2) - '@tanstack/history@1.161.4': {} - '@tanstack/history@1.161.6': {} '@tanstack/query-core@5.95.2': {} - '@tanstack/query-devtools@5.93.0': {} + '@tanstack/query-devtools@5.95.2': {} - '@tanstack/react-query-devtools@5.91.3(@tanstack/react-query@5.95.2(react@19.1.0))(react@19.1.0)': + '@tanstack/react-query-devtools@5.95.2(@tanstack/react-query@5.95.2(react@19.1.0))(react@19.1.0)': dependencies: - '@tanstack/query-devtools': 5.93.0 + '@tanstack/query-devtools': 5.95.2 '@tanstack/react-query': 5.95.2(react@19.1.0) react: 19.1.0 @@ -13205,10 +13181,10 @@ snapshots: '@tanstack/query-core': 5.95.2 react: 19.1.0 - '@tanstack/react-router-devtools@1.162.9(@tanstack/react-router@1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.168.3)(csstype@3.2.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@tanstack/react-router-devtools@1.166.11(@tanstack/react-router@1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.168.3)(csstype@3.2.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@tanstack/react-router': 1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@tanstack/router-devtools-core': 1.162.9(@tanstack/router-core@1.168.3)(csstype@3.2.3) + '@tanstack/router-devtools-core': 1.167.1(@tanstack/router-core@1.168.3)(csstype@3.2.3) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) optionalDependencies: @@ -13238,24 +13214,14 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@tanstack/router-cli@1.162.9': + '@tanstack/router-cli@1.166.18': dependencies: - '@tanstack/router-generator': 1.162.9 + '@tanstack/router-generator': 1.166.17 chokidar: 3.6.0 yargs: 17.7.2 transitivePeerDependencies: - supports-color - '@tanstack/router-core@1.162.9': - dependencies: - '@tanstack/history': 1.161.4 - '@tanstack/store': 0.9.1 - cookie-es: 2.0.0 - seroval: 1.5.0 - seroval-plugins: 1.5.0(seroval@1.5.0) - tiny-invariant: 1.3.3 - tiny-warning: 1.0.3 - '@tanstack/router-core@1.168.3': dependencies: '@tanstack/history': 1.161.6 @@ -13263,19 +13229,18 @@ snapshots: seroval: 1.5.1 seroval-plugins: 1.5.1(seroval@1.5.1) - '@tanstack/router-devtools-core@1.162.9(@tanstack/router-core@1.168.3)(csstype@3.2.3)': + '@tanstack/router-devtools-core@1.167.1(@tanstack/router-core@1.168.3)(csstype@3.2.3)': dependencies: '@tanstack/router-core': 1.168.3 clsx: 2.1.1 goober: 2.1.18(csstype@3.2.3) - tiny-invariant: 1.3.3 optionalDependencies: csstype: 3.2.3 - '@tanstack/router-devtools@1.162.9(@tanstack/react-router@1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.168.3)(csstype@3.2.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@tanstack/router-devtools@1.166.11(@tanstack/react-router@1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.168.3)(csstype@3.2.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@tanstack/react-router': 1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@tanstack/react-router-devtools': 1.162.9(@tanstack/react-router@1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.168.3)(csstype@3.2.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@tanstack/react-router-devtools': 1.166.11(@tanstack/react-router@1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.168.3)(csstype@3.2.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) clsx: 2.1.1 goober: 2.1.18(csstype@3.2.3) react: 19.1.0 @@ -13285,11 +13250,11 @@ snapshots: transitivePeerDependencies: - '@tanstack/router-core' - '@tanstack/router-generator@1.162.9': + '@tanstack/router-generator@1.166.17': dependencies: - '@tanstack/router-core': 1.162.9 - '@tanstack/router-utils': 1.161.4 - '@tanstack/virtual-file-routes': 1.161.4 + '@tanstack/router-core': 1.168.3 + '@tanstack/router-utils': 1.161.6 + '@tanstack/virtual-file-routes': 1.161.7 prettier: 3.8.1 recast: 0.23.11 source-map: 0.7.6 @@ -13298,7 +13263,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.162.9(@tanstack/react-router@1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))': + '@tanstack/router-plugin@1.167.4(@tanstack/react-router@1.168.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(vite@6.4.1(@types/node@25.3.0)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) @@ -13306,10 +13271,10 @@ snapshots: '@babel/template': 7.28.6 '@babel/traverse': 7.29.0(supports-color@5.5.0) '@babel/types': 7.29.0 - '@tanstack/router-core': 1.162.9 - '@tanstack/router-generator': 1.162.9 - '@tanstack/router-utils': 1.161.4 - '@tanstack/virtual-file-routes': 1.161.4 + '@tanstack/router-core': 1.168.3 + '@tanstack/router-generator': 1.166.17 + '@tanstack/router-utils': 1.161.6 + '@tanstack/virtual-file-routes': 1.161.7 chokidar: 3.6.0 unplugin: 2.3.11 zod: 3.25.76 @@ -13319,7 +13284,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-utils@1.161.4': + '@tanstack/router-utils@1.161.6': dependencies: '@babel/core': 7.29.0 '@babel/generator': 7.29.1 @@ -13333,13 +13298,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/store@0.9.1': {} - '@tanstack/store@0.9.2': {} '@tanstack/virtual-core@3.13.23': {} - '@tanstack/virtual-file-routes@1.161.4': {} + '@tanstack/virtual-file-routes@1.161.7': {} '@testing-library/dom@10.4.1': dependencies: @@ -19030,16 +18993,10 @@ snapshots: tslib: 2.8.1 upper-case-first: 2.0.2 - seroval-plugins@1.5.0(seroval@1.5.0): - dependencies: - seroval: 1.5.0 - seroval-plugins@1.5.1(seroval@1.5.1): dependencies: seroval: 1.5.1 - seroval@1.5.0: {} - seroval@1.5.1: {} serve-static@1.16.3: @@ -19358,8 +19315,6 @@ snapshots: tiny-invariant@1.3.3: {} - tiny-warning@1.0.3: {} - tinybench@2.9.0: {} tinyexec@0.3.2: {} From a412c4f52ff176c9173efdbc9c26ae2626afdbb0 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Wed, 25 Mar 2026 15:14:39 -0300 Subject: [PATCH 29/37] test: fix redundant cases in isNativeToken test suite --- src/utils/address.test.ts | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/utils/address.test.ts b/src/utils/address.test.ts index 754488d8..49c079a9 100644 --- a/src/utils/address.test.ts +++ b/src/utils/address.test.ts @@ -4,7 +4,7 @@ import { describe, expect, it, vi } from 'vitest' // Mock env before importing isNativeToken so the module sees the mock vi.mock('@/src/env', () => ({ env: { - PUBLIC_NATIVE_TOKEN_ADDRESS: zeroAddress.toLowerCase(), + PUBLIC_NATIVE_TOKEN_ADDRESS: zeroAddress, }, })) @@ -15,10 +15,6 @@ describe('isNativeToken', () => { expect(isNativeToken(zeroAddress)).toBe(true) }) - it('returns true for the zero address in lowercase', () => { - expect(isNativeToken(zeroAddress.toLowerCase())).toBe(true) - }) - it('returns true for the zero address string literal', () => { // zeroAddress is already lowercase; the literal string is identical — testing the exact value expect(isNativeToken('0x0000000000000000000000000000000000000000')).toBe(true) @@ -27,9 +23,4 @@ describe('isNativeToken', () => { it('returns false for a regular ERC20 contract address', () => { expect(isNativeToken('0x71C7656EC7ab88b098defB751B7401B5f6d8976F')).toBe(false) }) - - it('comparison is case-insensitive', () => { - // Both upper and lower case should match the native token (zero address) - expect(isNativeToken('0X0000000000000000000000000000000000000000')).toBe(true) - }) }) From 990a656c71a30ec6236775b488cb6d2ab7a5d087 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Wed, 25 Mar 2026 15:18:19 -0300 Subject: [PATCH 30/37] chore: ignore .worktrees directory --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index be85071d..9203123b 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,4 @@ yarn-debug.log* yarn-error.log* pnpm-debug.log* lerna-debug.log* +.worktrees From 5861213a33118758d63e0f3cf88879f2eb509e5b Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Wed, 25 Mar 2026 15:45:33 -0300 Subject: [PATCH 31/37] refactor(tests): use Address type from viem instead of template literal --- src/hooks/useWeb3Status.test.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/hooks/useWeb3Status.test.ts b/src/hooks/useWeb3Status.test.ts index ab31f452..1010ea0b 100644 --- a/src/hooks/useWeb3Status.test.ts +++ b/src/hooks/useWeb3Status.test.ts @@ -1,4 +1,5 @@ import { renderHook } from '@testing-library/react' +import type { Address } from 'viem' import { beforeEach, describe, expect, it, vi } from 'vitest' import { useWeb3Status, useWeb3StatusConnected } from './useWeb3Status' @@ -40,7 +41,7 @@ describe('useWeb3Status', () => { it('returns connected state with wallet address', () => { const mock = { - address: '0xabc123' as `0x${string}`, + address: '0xabc123' as Address, chainId: 1, isConnected: true, isConnecting: false, @@ -53,7 +54,7 @@ describe('useWeb3Status', () => { it('sets isWalletSynced true when wallet chainId matches app chainId', () => { const mock = { - address: '0xabc123' as `0x${string}`, + address: '0xabc123' as Address, chainId: 1, isConnected: true, isConnecting: false, @@ -66,7 +67,7 @@ describe('useWeb3Status', () => { it('sets isWalletSynced false when wallet chainId differs from app chainId', () => { const mock = { - address: '0xabc123' as `0x${string}`, + address: '0xabc123' as Address, chainId: 137, isConnected: true, isConnecting: false, @@ -112,7 +113,7 @@ describe('useWeb3StatusConnected', () => { it('returns status when wallet is connected', () => { const mock = { - address: '0xdeadbeef' as `0x${string}`, + address: '0xdeadbeef' as Address, chainId: 1, isConnected: true, isConnecting: false, From a23f4944f0441e2abe3a239301040a80af820860 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Wed, 25 Mar 2026 15:20:47 -0300 Subject: [PATCH 32/37] fix: throw when getExplorerLink has no block explorer URL available --- src/utils/getExplorerLink.test.ts | 7 +++++++ src/utils/getExplorerLink.ts | 15 +++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/utils/getExplorerLink.test.ts b/src/utils/getExplorerLink.test.ts index c7ca4fad..9833c82f 100644 --- a/src/utils/getExplorerLink.test.ts +++ b/src/utils/getExplorerLink.test.ts @@ -39,6 +39,13 @@ describe('getExplorerLink', () => { ).toThrow('Invalid hash or address') }) + it('throws when chain has no block explorer and no explorerUrl is provided', () => { + const chainWithoutExplorer: Chain = { ...chain, blockExplorers: undefined } + expect(() => getExplorerLink({ chain: chainWithoutExplorer, hashOrAddress: address })).toThrow( + 'No block explorer URL available for this chain', + ) + }) + it('works with a chain that has no default block explorer (explorerUrl provided)', () => { const chainWithoutExplorer: Chain = { ...chain, blockExplorers: undefined } const explorerUrl = 'https://fallback.explorer.io' diff --git a/src/utils/getExplorerLink.ts b/src/utils/getExplorerLink.ts index 17237132..50e4fb3e 100644 --- a/src/utils/getExplorerLink.ts +++ b/src/utils/getExplorerLink.ts @@ -19,6 +19,7 @@ export type GetExplorerUrlParams = { * @param {string} [params.explorerUrl] - Optional custom explorer URL to override the chain's default explorer * * @throws {Error} Throws an error if the provided hash or address is invalid + * @throws {Error} Throws an error if no explorer URL is available (neither `explorerUrl` nor `chain.blockExplorers`) * * @returns {string} The complete explorer URL for the given hash or address * @@ -43,15 +44,17 @@ export type GetExplorerUrlParams = { * ``` */ export const getExplorerLink = ({ chain, explorerUrl, hashOrAddress }: GetExplorerUrlParams) => { + const baseUrl = explorerUrl ?? chain.blockExplorers?.default.url + + if (!baseUrl) { + throw new Error('No block explorer URL available for this chain') + } + if (isAddress(hashOrAddress)) { - return explorerUrl - ? `${explorerUrl}/address/${hashOrAddress}` - : `${chain.blockExplorers?.default.url}/address/${hashOrAddress}` + return `${baseUrl}/address/${hashOrAddress}` } if (isHash(hashOrAddress)) { - return explorerUrl - ? `${explorerUrl}/tx/${hashOrAddress}` - : `${chain.blockExplorers?.default.url}/tx/${hashOrAddress}` + return `${baseUrl}/tx/${hashOrAddress}` } throw new Error('Invalid hash or address') From 738bfda1eddc26d57209b7960bf1b91070b610dd Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 30 Mar 2026 15:50:14 -0300 Subject: [PATCH 33/37] fix: add default rel="noopener noreferrer" to ExternalLinkButton Also exclude .worktrees/ from vitest to prevent cross-worktree test pollution. --- src/components/sharedComponents/ui/ExternalLink/index.tsx | 2 ++ vite.config.ts | 1 + 2 files changed, 3 insertions(+) diff --git a/src/components/sharedComponents/ui/ExternalLink/index.tsx b/src/components/sharedComponents/ui/ExternalLink/index.tsx index 6fda6159..4af70c36 100644 --- a/src/components/sharedComponents/ui/ExternalLink/index.tsx +++ b/src/components/sharedComponents/ui/ExternalLink/index.tsx @@ -41,6 +41,7 @@ const LinkSVG: FC> = ({ ...restProps }) => ( export const ExternalLinkButton: FC = ({ children = , css, + rel = 'noopener noreferrer', target = '_blank', ...restProps }: LinkProps) => { @@ -78,6 +79,7 @@ export const ExternalLinkButton: FC = ({ cursor: 'not-allowed', opacity: 0.6, }} + rel={rel} target={target} {...restProps} > diff --git a/vite.config.ts b/vite.config.ts index e050c981..3244648d 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -26,6 +26,7 @@ export default defineConfig({ }, test: { environment: 'jsdom', + exclude: ['**/node_modules/**', '.worktrees/**'], globals: true, setupFiles: ['./setupTests.ts'], }, From c35e0ffaf3844001457aa0e5900719dce2563d0a Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 30 Mar 2026 16:01:11 -0300 Subject: [PATCH 34/37] fix(security): remove broken report-uri from CSP header --- vercel.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vercel.json b/vercel.json index a28b45f2..44f7f0aa 100644 --- a/vercel.json +++ b/vercel.json @@ -5,7 +5,7 @@ "headers": [ { "key": "Content-Security-Policy-Report-Only", - "value": "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://va.vercel-scripts.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data: https: blob:; connect-src 'self' https: wss:; frame-ancestors 'none'; report-uri /csp-report" + "value": "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://va.vercel-scripts.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data: https: blob:; connect-src 'self' https: wss:; frame-ancestors 'none'" }, { "key": "X-Content-Type-Options", From 2a9ac2693d5e22670b5d539b6921448ea8b00b58 Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 30 Mar 2026 16:17:43 -0300 Subject: [PATCH 35/37] fix: use ReactElement type import in WalletStatusVerifier test --- src/components/sharedComponents/WalletStatusVerifier.test.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/sharedComponents/WalletStatusVerifier.test.tsx b/src/components/sharedComponents/WalletStatusVerifier.test.tsx index bd7d75ed..09c5b00d 100644 --- a/src/components/sharedComponents/WalletStatusVerifier.test.tsx +++ b/src/components/sharedComponents/WalletStatusVerifier.test.tsx @@ -1,5 +1,6 @@ import { ChakraProvider, createSystem, defaultConfig } from '@chakra-ui/react' import { render, screen } from '@testing-library/react' +import type { ReactElement } from 'react' import { describe, expect, it, vi } from 'vitest' import { WalletStatusVerifier, withWalletStatusVerifier } from './WalletStatusVerifier' @@ -36,7 +37,7 @@ function connectedSyncedStatus(overrides = {}) { } } -function wrap(ui: React.ReactElement) { +function wrap(ui: ReactElement) { return render({ui}) } From 1de9337898f0c878bad25cca505160c4f25435aa Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 30 Mar 2026 16:18:06 -0300 Subject: [PATCH 36/37] fix: use explicit undefined checks for bigint min/max bounds --- src/components/sharedComponents/BigNumberInput.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/sharedComponents/BigNumberInput.tsx b/src/components/sharedComponents/BigNumberInput.tsx index d299629e..b9cce87b 100644 --- a/src/components/sharedComponents/BigNumberInput.tsx +++ b/src/components/sharedComponents/BigNumberInput.tsx @@ -126,7 +126,8 @@ export const BigNumberInput: FC = ({ // fall-through } - const invalidValue = (min && newValue < min) || (max && newValue > max) + const invalidValue = + (min !== undefined && newValue < min) || (max !== undefined && newValue > max) if (invalidValue) { const _min = formatUnits(min, decimals) From 30f1062782f2d81eae1b98303cf0be8091d0813c Mon Sep 17 00:00:00 2001 From: Gabito Esmiapodo <4015436+gabitoesmiapodo@users.noreply.github.com> Date: Mon, 30 Mar 2026 16:18:52 -0300 Subject: [PATCH 37/37] fix: read PUBLIC_APP_URL via loadEnv in vite config --- vite.config.ts | 67 ++++++++++++++++++++++++++------------------------ 1 file changed, 35 insertions(+), 32 deletions(-) diff --git a/vite.config.ts b/vite.config.ts index 4d23efa0..9b541109 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -2,45 +2,48 @@ import { resolve } from 'node:path' import { TanStackRouterVite } from '@tanstack/router-plugin/vite' import react from '@vitejs/plugin-react-swc' -import { defineConfig } from 'vite' +import { defineConfig, loadEnv } from 'vite' import Sitemap from 'vite-plugin-sitemap' import tsconfigPaths from 'vite-tsconfig-paths' // https://vitejs.dev/config/ /** @type {import('vite').UserConfig} */ -export default defineConfig({ - plugins: [ - TanStackRouterVite({ target: 'react', autoCodeSplitting: true }), - react(), - tsconfigPaths(), - Sitemap({ - hostname: process.env.PUBLIC_APP_URL || 'https://demo.dappbooster.dev', - }), - ], - build: { - rollupOptions: { - output: { - manualChunks: { - 'vendor-react': ['react', 'react-dom', 'react-dom/client'], - 'vendor-wagmi': ['wagmi', 'viem'], - 'vendor-tanstack': ['@tanstack/react-query', '@tanstack/react-router'], - 'vendor-chakra': ['@chakra-ui/react'], - 'vendor-web3': ['@reown/appkit', '@reown/appkit-adapter-wagmi'], +export default defineConfig(({ mode }) => { + const env = loadEnv(mode, process.cwd(), '') + return { + plugins: [ + TanStackRouterVite({ target: 'react', autoCodeSplitting: true }), + react(), + tsconfigPaths(), + Sitemap({ + hostname: env.PUBLIC_APP_URL || 'https://demo.dappbooster.dev', + }), + ], + build: { + rollupOptions: { + output: { + manualChunks: { + 'vendor-react': ['react', 'react-dom', 'react-dom/client'], + 'vendor-wagmi': ['wagmi', 'viem'], + 'vendor-tanstack': ['@tanstack/react-query', '@tanstack/react-router'], + 'vendor-chakra': ['@chakra-ui/react'], + 'vendor-web3': ['@reown/appkit', '@reown/appkit-adapter-wagmi'], + }, }, }, }, - }, - envPrefix: 'PUBLIC_', - resolve: { - alias: { - '@/src': resolve(__dirname, './src'), - '@packageJSON': resolve(__dirname, 'package.json'), + envPrefix: 'PUBLIC_', + resolve: { + alias: { + '@/src': resolve(__dirname, './src'), + '@packageJSON': resolve(__dirname, 'package.json'), + }, + }, + test: { + environment: 'jsdom', + exclude: ['**/node_modules/**', '.worktrees/**'], + globals: true, + setupFiles: ['./setupTests.ts'], }, - }, - test: { - environment: 'jsdom', - exclude: ['**/node_modules/**', '.worktrees/**'], - globals: true, - setupFiles: ['./setupTests.ts'], - }, + } })