From b46f7d8c7abbd2beb0689685ff8aa58722dcfa60 Mon Sep 17 00:00:00 2001 From: maayan Date: Thu, 25 Sep 2025 12:22:11 -0400 Subject: [PATCH 1/6] add cross chain accounts example --- apps/{web => cross-chain-accounts}/.gitignore | 0 apps/cross-chain-accounts/README.md | 149 + .../app/favicon.ico | Bin .../app/fonts/GeistMonoVF.woff | Bin .../app/fonts/GeistVF.woff | Bin apps/cross-chain-accounts/app/globals.css | 1 + .../app/layout.tsx | 13 +- apps/cross-chain-accounts/app/page.tsx | 28 + apps/cross-chain-accounts/components.json | 20 + .../components/AccountBlobs.tsx | 112 + .../components/FileUpload.tsx | 100 + .../components/Header.tsx | 19 + .../components/WalletProvider.tsx | 29 + .../hooks/useSubmitFileToChain.tsx | 117 + .../hooks/useUploadFile.tsx | 44 + apps/cross-chain-accounts/next.config.ts | 11 + .../package.json | 15 +- apps/cross-chain-accounts/postcss.config.mjs | 1 + .../public/file-text.svg | 0 .../public/globe.svg | 0 .../public/images/pfp.jpeg | Bin 0 -> 2461 bytes .../public/next.svg | 0 .../public/turborepo-dark.svg | 0 .../public/turborepo-light.svg | 0 .../public/vercel.svg | 0 .../public/window.svg | 0 .../tsconfig.json | 6 +- apps/cross-chain-accounts/utils/client.ts | 24 + apps/cross-chain-accounts/utils/encodeFile.ts | 14 + apps/web/README.md | 36 - apps/web/app/globals.css | 50 - apps/web/app/page.module.css | 192 - apps/web/app/page.tsx | 102 - apps/web/next.config.js | 4 - packages/ui/components.json | 20 + packages/ui/package.json | 29 +- packages/ui/postcss.config.mjs | 6 + packages/ui/src/button.tsx | 21 - packages/ui/src/card.tsx | 27 - packages/ui/src/code.tsx | 11 - packages/ui/src/components/button.tsx | 59 + packages/ui/src/components/collapsible.tsx | 33 + packages/ui/src/components/dialog.tsx | 142 + packages/ui/src/components/dropdown-menu.tsx | 256 ++ .../ui/src/components/expanding-container.tsx | 35 + packages/ui/src/components/index.ts | 5 + packages/ui/src/components/sonner.tsx | 25 + .../components/x-chain-wallet-selector.tsx | 435 ++ packages/ui/src/index.ts | 1 + packages/ui/src/lib/utils.ts | 6 + packages/ui/src/styles/globals.css | 144 + packages/ui/tsconfig.json | 32 +- pnpm-lock.yaml | 3700 +++++++++++++++-- 53 files changed, 5290 insertions(+), 784 deletions(-) rename apps/{web => cross-chain-accounts}/.gitignore (100%) create mode 100644 apps/cross-chain-accounts/README.md rename apps/{web => cross-chain-accounts}/app/favicon.ico (100%) rename apps/{web => cross-chain-accounts}/app/fonts/GeistMonoVF.woff (100%) rename apps/{web => cross-chain-accounts}/app/fonts/GeistVF.woff (100%) create mode 100644 apps/cross-chain-accounts/app/globals.css rename apps/{web => cross-chain-accounts}/app/layout.tsx (70%) create mode 100644 apps/cross-chain-accounts/app/page.tsx create mode 100644 apps/cross-chain-accounts/components.json create mode 100644 apps/cross-chain-accounts/components/AccountBlobs.tsx create mode 100644 apps/cross-chain-accounts/components/FileUpload.tsx create mode 100644 apps/cross-chain-accounts/components/Header.tsx create mode 100644 apps/cross-chain-accounts/components/WalletProvider.tsx create mode 100644 apps/cross-chain-accounts/hooks/useSubmitFileToChain.tsx create mode 100644 apps/cross-chain-accounts/hooks/useUploadFile.tsx create mode 100644 apps/cross-chain-accounts/next.config.ts rename apps/{web => cross-chain-accounts}/package.json (54%) create mode 100644 apps/cross-chain-accounts/postcss.config.mjs rename apps/{web => cross-chain-accounts}/public/file-text.svg (100%) rename apps/{web => cross-chain-accounts}/public/globe.svg (100%) create mode 100644 apps/cross-chain-accounts/public/images/pfp.jpeg rename apps/{web => cross-chain-accounts}/public/next.svg (100%) rename apps/{web => cross-chain-accounts}/public/turborepo-dark.svg (100%) rename apps/{web => cross-chain-accounts}/public/turborepo-light.svg (100%) rename apps/{web => cross-chain-accounts}/public/vercel.svg (100%) rename apps/{web => cross-chain-accounts}/public/window.svg (100%) rename apps/{web => cross-chain-accounts}/tsconfig.json (80%) create mode 100644 apps/cross-chain-accounts/utils/client.ts create mode 100644 apps/cross-chain-accounts/utils/encodeFile.ts delete mode 100644 apps/web/README.md delete mode 100644 apps/web/app/globals.css delete mode 100644 apps/web/app/page.module.css delete mode 100644 apps/web/app/page.tsx delete mode 100644 apps/web/next.config.js create mode 100644 packages/ui/components.json create mode 100644 packages/ui/postcss.config.mjs delete mode 100644 packages/ui/src/button.tsx delete mode 100644 packages/ui/src/card.tsx delete mode 100644 packages/ui/src/code.tsx create mode 100644 packages/ui/src/components/button.tsx create mode 100644 packages/ui/src/components/collapsible.tsx create mode 100644 packages/ui/src/components/dialog.tsx create mode 100644 packages/ui/src/components/dropdown-menu.tsx create mode 100644 packages/ui/src/components/expanding-container.tsx create mode 100644 packages/ui/src/components/index.ts create mode 100644 packages/ui/src/components/sonner.tsx create mode 100644 packages/ui/src/components/x-chain-wallet-selector.tsx create mode 100644 packages/ui/src/index.ts create mode 100644 packages/ui/src/lib/utils.ts create mode 100644 packages/ui/src/styles/globals.css diff --git a/apps/web/.gitignore b/apps/cross-chain-accounts/.gitignore similarity index 100% rename from apps/web/.gitignore rename to apps/cross-chain-accounts/.gitignore diff --git a/apps/cross-chain-accounts/README.md b/apps/cross-chain-accounts/README.md new file mode 100644 index 0000000..48d266c --- /dev/null +++ b/apps/cross-chain-accounts/README.md @@ -0,0 +1,149 @@ +# Shelby Cross-Chain Accounts Example + +This example demonstrates how one can upload and view files using cross-chain (non-Aptos) wallets on the Shelby network. + +### Starting the Demo dApp + +```bash +pnpm install +pnpm run dev +``` + +### Implementation Details + +The dApp provides a flow to connect an Aptos native or cross-chain wallet, upload a static file to the Shelby network, and view the account's uploaded files through a user interface. + +### Upload a File + +At a high level, uploading a file to Shelby includes 3 steps: + +1. Encode the File +2. Register the file on chain (transaction submission) +3. Upload the file to Shelby RPC + +#### Encode File + +Encoding a file means we split the file into chunks, where each chunk has a `commitment hash` and these are combined to make the `blob merkle root hash`. + +We then send all these hashes to the blockchain so they can be verified with the storage providers. + +```ts +export const encodeFile = async (file: File): Promise => { + const data = Buffer.isBuffer(file) + ? file + : Buffer.from(await file.arrayBuffer()); + + const commitments = await generateCommitments(data); + + return commitments; +}; +``` + +#### Register the file on chain (transaction submission) + +After we have the commitment hashes of the file, we can register the file on chain by submitting a transaction. + +```ts +// Generate the transaction payload +const payload = ShelbyBlobClient.createWriteBlobCommitmentsPayload({ + account: account.address, + blobName: file.name, + blobMerkleRoot: commitment.blob_merkle_root, + chunksetChunkCommitments: commitment.chunkset_commitments.map( + (chunkset) => chunkset.chunk_commitments + ), + expirationMicros: (1000 * 60 * 60 * 24 * 30 + Date.now()) * 1000, // 30 days from now in microseconds + size: commitment.raw_data_size, +}); +``` + +Once we have the transaction payload, we can submit it to chain. As mentioned before, in this example we support both Aptos native and cross-chain wallet transaction submissions. + +##### Aptos native wallets + +```ts +// Send the transaction to the connected wallet to sign and submit +const transaction: InputTransactionData = { + data: payload, +}; +const transactionSubmitted = await signAndSubmitTransaction(transaction); +// Wait for transaction to be submitted on chain +await getShelbyClient().aptos.waitForTransaction({ + transactionHash: transactionSubmitted.hash, +}); +``` + +##### Cross-chain wallets + +Following the [cross-chain wallet docs](https://aptos.dev/build/sdks/wallet-adapter/x-chain-accounts#submitting-a-transaction), it is recommended to sponsor the transaction as we can assume a cross-chain wallet does not have APT to pay the transaction fees. + +```ts +// Create the sponsor account +const privateKey = new Ed25519PrivateKey( + PrivateKey.formatPrivateKey( + process.env.NEXT_PUBLIC_SPONSOR_PRIVATE_KEY as string, + PrivateKeyVariants.Ed25519 + ) +); +const sponsorAccount = Account.fromPrivateKey({ privateKey }); + +// Build the transaction +const rawTransaction = await getShelbyClient().aptos.transaction.build.simple({ + sender: account.address, + data: payload, + withFeePayer: true, +}); + +// Send the transaction to the connected (cross-chain) wallet to sign +const walletSignedTransaction = await signTransaction({ + transactionOrPayload: rawTransaction, +}); + +// Sponsor signs the transaction +const sponsorAuthenticator = getShelbyClient().aptos.transaction.signAsFeePayer( + { + signer: sponsorAccount, + transaction: rawTransaction, + } +); + +// Submit the transaction to chain +const transactionSubmitted = + await getShelbyClient().aptos.transaction.submit.simple({ + transaction: rawTransaction, + senderAuthenticator: walletSignedTransaction.authenticator, + feePayerAuthenticator: sponsorAuthenticator, + }); + +// Wait for transaction to be submitted on chain +await getShelbyClient().aptos.waitForTransaction({ + transactionHash: transactionSubmitted.hash, +}); +``` + +#### Upload the file to Shelby RPC + +After we submit the transaction and register the commitment hashes on chain, we can upload the file to the Shelby RPC so it can be verified with the storage providers to ensure that the uploaded data matches the one on the blockchain by comparing the hashes. + +> Note: The RPC will make checks on-chain to ensure the file is there first, which is why registration can't happen in parallel with an upload to the RPC. + +```ts +await getShelbyClient().rpc.putBlob({ + account: account.address, + blobName: file.name, + blobData: new Uint8Array(await file.arrayBuffer()), +}); +``` + +### View the account's uploaded files + +To view the files uploaded by an account, we can simply query for the blobs + +```ts +const getBlobs = async (): Promise => { + const blobs = await getShelbyClient().coordination.getAccountBlobs({ + account: account.address, + }); + return blobs; +}; +``` diff --git a/apps/web/app/favicon.ico b/apps/cross-chain-accounts/app/favicon.ico similarity index 100% rename from apps/web/app/favicon.ico rename to apps/cross-chain-accounts/app/favicon.ico diff --git a/apps/web/app/fonts/GeistMonoVF.woff b/apps/cross-chain-accounts/app/fonts/GeistMonoVF.woff similarity index 100% rename from apps/web/app/fonts/GeistMonoVF.woff rename to apps/cross-chain-accounts/app/fonts/GeistMonoVF.woff diff --git a/apps/web/app/fonts/GeistVF.woff b/apps/cross-chain-accounts/app/fonts/GeistVF.woff similarity index 100% rename from apps/web/app/fonts/GeistVF.woff rename to apps/cross-chain-accounts/app/fonts/GeistVF.woff diff --git a/apps/cross-chain-accounts/app/globals.css b/apps/cross-chain-accounts/app/globals.css new file mode 100644 index 0000000..200400d --- /dev/null +++ b/apps/cross-chain-accounts/app/globals.css @@ -0,0 +1 @@ +@import "@shelby-protocol/ui/globals.css"; diff --git a/apps/web/app/layout.tsx b/apps/cross-chain-accounts/app/layout.tsx similarity index 70% rename from apps/web/app/layout.tsx rename to apps/cross-chain-accounts/app/layout.tsx index 8469537..917fe00 100644 --- a/apps/web/app/layout.tsx +++ b/apps/cross-chain-accounts/app/layout.tsx @@ -1,5 +1,6 @@ -import type { Metadata } from "next"; import localFont from "next/font/local"; +import { Toaster } from "@shelby-protocol/ui/components"; +import { WalletProvider } from "@/components/WalletProvider"; import "./globals.css"; const geistSans = localFont({ @@ -11,11 +12,6 @@ const geistMono = localFont({ variable: "--font-geist-mono", }); -export const metadata: Metadata = { - title: "Create Next App", - description: "Generated by create next app", -}; - export default function RootLayout({ children, }: Readonly<{ @@ -24,7 +20,10 @@ export default function RootLayout({ return ( - {children} + + {children} + + ); diff --git a/apps/cross-chain-accounts/app/page.tsx b/apps/cross-chain-accounts/app/page.tsx new file mode 100644 index 0000000..70e4f52 --- /dev/null +++ b/apps/cross-chain-accounts/app/page.tsx @@ -0,0 +1,28 @@ +"use client"; + +import { useState } from "react"; +import { Header } from "@/components/Header"; +import { FileUpload } from "@/components/FileUpload"; +import { AccountBlobs } from "@/components/AccountBlobs"; + +export default function Home() { + const [refreshTrigger, setRefreshTrigger] = useState(0); + + const handleUploadSuccess = () => { + setRefreshTrigger((prev) => prev + 1); + }; + + return ( +
+
+ + {/* Main Content */} +
+
+ + +
+
+
+ ); +} diff --git a/apps/cross-chain-accounts/components.json b/apps/cross-chain-accounts/components.json new file mode 100644 index 0000000..e1847ad --- /dev/null +++ b/apps/cross-chain-accounts/components.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": true, + "tsx": true, + "tailwind": { + "config": "", + "css": "../../packages/ui/src/styles/globals.css", + "baseColor": "neutral", + "cssVariables": true + }, + "iconLibrary": "lucide", + "aliases": { + "components": "@/components", + "hooks": "@/hooks", + "lib": "@/lib", + "utils": "@shelby-protocol/ui/lib/utils", + "ui": "@shelby-protocol/ui/components" + } +} diff --git a/apps/cross-chain-accounts/components/AccountBlobs.tsx b/apps/cross-chain-accounts/components/AccountBlobs.tsx new file mode 100644 index 0000000..971b73a --- /dev/null +++ b/apps/cross-chain-accounts/components/AccountBlobs.tsx @@ -0,0 +1,112 @@ +import Link from "next/link"; +import { useState } from "react"; +import { useEffect } from "react"; +import { useWallet } from "@aptos-labs/wallet-adapter-react"; +import { BlobMetadata } from "@shelby-protocol/sdk/browser"; +import { getShelbyClient } from "@/utils/client"; + +interface AccountBlobsProps { + refreshTrigger?: number; +} + +export const AccountBlobs = ({ refreshTrigger }: AccountBlobsProps) => { + const { account } = useWallet(); + const [blobs, setBlobs] = useState([]); + + useEffect(() => { + if (!account) { + setBlobs([]); + return; + } + const getBlobs = async (): Promise => { + const blobs = await getShelbyClient().coordination.getAccountBlobs({ + account: account.address, + }); + return blobs; + }; + + getBlobs().then((blobs) => setBlobs(blobs)); + }, [account, refreshTrigger]); + + return ( +
+ {!account && ( +
+

+ Please connect your wallet to view blobs +

+
+ )} + {account && blobs.length === 0 && ( +
+

+ No blobs found for this account. Upload a file to get started! +

+
+ )} +
+ {blobs.map((blob) => ( +
+ {/* Image Section */} +
+
+ {blob.name} { + console.error("Image failed to load:", e); + }} + /> +
+
+ + {/* Content Section */} +
+

+ {blob.name} +

+ +
+
+ + Owner: + +

+ {blob.owner.toString()} +

+
+ +
+ + Download: + + + View Image + +
+
+
+
+ ))} +
+
+ ); +}; diff --git a/apps/cross-chain-accounts/components/FileUpload.tsx b/apps/cross-chain-accounts/components/FileUpload.tsx new file mode 100644 index 0000000..ab122b3 --- /dev/null +++ b/apps/cross-chain-accounts/components/FileUpload.tsx @@ -0,0 +1,100 @@ +import { useState } from "react"; +import { useWallet } from "@aptos-labs/wallet-adapter-react"; +import { Button } from "@shelby-protocol/ui/components/button"; +import { useSubmitFileToChain } from "@/hooks/useSubmitFileToChain"; +import { useUploadFile } from "@/hooks/useUploadFile"; +import { encodeFile } from "@/utils/encodeFile"; + +interface FileUploadProps { + onUploadSuccess?: () => void; +} + +export const FileUpload = ({ onUploadSuccess }: FileUploadProps) => { + // Hooks + const { account, wallet } = useWallet(); + const { uploadFileToRcp } = useUploadFile(); + const { submitFileToChain } = useSubmitFileToChain(); + + // Internal State + const [isUploading, setIsUploading] = useState(false); + const [selectedFile, setSelectedFile] = useState(null); + + const handleFileChange = (event: React.ChangeEvent) => { + const file = event.target.files?.[0]; + if (file) { + setSelectedFile(file); + } + }; + + const uploadFile = async () => { + if (!selectedFile || !account || !wallet) return; + + setIsUploading(true); + try { + // Encode the file + const commitments = await encodeFile(selectedFile); + + // Submit the file to the chain + await submitFileToChain(commitments, selectedFile); + + // Upload the file to the RCP + await uploadFileToRcp(selectedFile); + + alert("File uploaded successfully"); + + // Trigger refresh of AccountBlobs component + onUploadSuccess?.(); + } catch (error) { + console.error("Upload failed:", error); + } finally { + setIsUploading(false); + } + }; + + return ( +
+

+ Upload File +

+
+
+ + +
+ {selectedFile && ( +
+
+ + Selected: + + + {selectedFile.name} + + + ({(selectedFile.size / 1024).toFixed(1)} KB) + +
+ +
+ )} +
+
+ ); +}; diff --git a/apps/cross-chain-accounts/components/Header.tsx b/apps/cross-chain-accounts/components/Header.tsx new file mode 100644 index 0000000..105f4aa --- /dev/null +++ b/apps/cross-chain-accounts/components/Header.tsx @@ -0,0 +1,19 @@ +import { XChainWalletSelector } from "@shelby-protocol/ui/components/x-chain-wallet-selector"; + +export const Header = () => { + return ( +
+
+

+ Shelby Examples +

+
+
+ +
+
+ ); +}; diff --git a/apps/cross-chain-accounts/components/WalletProvider.tsx b/apps/cross-chain-accounts/components/WalletProvider.tsx new file mode 100644 index 0000000..930c4ca --- /dev/null +++ b/apps/cross-chain-accounts/components/WalletProvider.tsx @@ -0,0 +1,29 @@ +"use client"; + +import { AptosWalletAdapterProvider } from "@aptos-labs/wallet-adapter-react"; +import { PropsWithChildren } from "react"; +import { Network } from "@aptos-labs/ts-sdk"; +import { setupAutomaticSolanaWalletDerivation } from "@aptos-labs/derived-wallet-solana"; +import { setupAutomaticEthereumWalletDerivation } from "@aptos-labs/derived-wallet-ethereum"; + +setupAutomaticSolanaWalletDerivation({ defaultNetwork: Network.DEVNET }); +setupAutomaticEthereumWalletDerivation({ defaultNetwork: Network.DEVNET }); + +export const WalletProvider = ({ children }: PropsWithChildren) => { + return ( + { + console.log("error", error); + }} + > + {children} + + ); +}; diff --git a/apps/cross-chain-accounts/hooks/useSubmitFileToChain.tsx b/apps/cross-chain-accounts/hooks/useSubmitFileToChain.tsx new file mode 100644 index 0000000..2f479b9 --- /dev/null +++ b/apps/cross-chain-accounts/hooks/useSubmitFileToChain.tsx @@ -0,0 +1,117 @@ +import { useState, useCallback } from "react"; +import { + InputTransactionData, + useWallet, +} from "@aptos-labs/wallet-adapter-react"; +import { + BlobCommitments, + ShelbyBlobClient, +} from "@shelby-protocol/sdk/browser"; +import { + Account, + Ed25519PrivateKey, + PrivateKey, + PrivateKeyVariants, +} from "@aptos-labs/ts-sdk"; +import { getShelbyClient } from "@/utils/client"; + +interface UseSubmitFileToChainReturn { + submitFileToChain: (commitment: BlobCommitments, file: File) => Promise; + isSubmitting: boolean; + error: string | null; +} + +export const useSubmitFileToChain = (): UseSubmitFileToChainReturn => { + const [isSubmitting, setIsSubmitting] = useState(false); + const [error, setError] = useState(null); + const { account, wallet, signAndSubmitTransaction, signTransaction } = + useWallet(); + + const submitFileToChain = useCallback( + async (commitment: BlobCommitments, file: File) => { + if (!account || !wallet) { + throw new Error("Account and wallet are required"); + } + + setIsSubmitting(true); + setError(null); + + try { + const payload = ShelbyBlobClient.createWriteBlobCommitmentsPayload({ + account: account.address, + blobName: file.name, + blobMerkleRoot: commitment.blob_merkle_root, + chunksetChunkCommitments: commitment.chunkset_commitments.map( + (chunkset) => chunkset.chunk_commitments + ), + expirationMicros: (1000 * 60 * 60 * 24 * 30 + Date.now()) * 1000, // 30 days from now in microseconds + size: commitment.raw_data_size, + }); + + if (wallet.isAptosNativeWallet) { + const transaction: InputTransactionData = { + data: payload, + }; + const transactionSubmitted = await signAndSubmitTransaction( + transaction + ); + + await getShelbyClient().aptos.waitForTransaction({ + transactionHash: transactionSubmitted.hash, + }); + } else { + // Create the sponsor account + const privateKey = new Ed25519PrivateKey( + PrivateKey.formatPrivateKey( + process.env.NEXT_PUBLIC_SPONSOR_PRIVATE_KEY as string, + PrivateKeyVariants.Ed25519 + ) + ); + const sponsorAccount = Account.fromPrivateKey({ privateKey }); + + const rawTransaction = + await getShelbyClient().aptos.transaction.build.simple({ + sender: account.address, + data: payload, + withFeePayer: true, + }); + + const walletSignedTransaction = await signTransaction({ + transactionOrPayload: rawTransaction, + }); + + const sponsorAuthenticator = + getShelbyClient().aptos.transaction.signAsFeePayer({ + signer: sponsorAccount, + transaction: rawTransaction, + }); + + const transactionSubmitted = + await getShelbyClient().aptos.transaction.submit.simple({ + transaction: rawTransaction, + senderAuthenticator: walletSignedTransaction.authenticator, + feePayerAuthenticator: sponsorAuthenticator, + }); + + await getShelbyClient().aptos.waitForTransaction({ + transactionHash: transactionSubmitted.hash, + }); + } + } catch (err) { + const errorMessage = + err instanceof Error ? err.message : "An unknown error occurred"; + setError(errorMessage); + throw err; + } finally { + setIsSubmitting(false); + } + }, + [account, wallet, signAndSubmitTransaction, signTransaction] + ); + + return { + submitFileToChain, + isSubmitting, + error, + }; +}; diff --git a/apps/cross-chain-accounts/hooks/useUploadFile.tsx b/apps/cross-chain-accounts/hooks/useUploadFile.tsx new file mode 100644 index 0000000..21c589f --- /dev/null +++ b/apps/cross-chain-accounts/hooks/useUploadFile.tsx @@ -0,0 +1,44 @@ +import { useState } from "react"; +import { useWallet } from "@aptos-labs/wallet-adapter-react"; +import { getShelbyClient } from "@/utils/client"; + +interface UseUploadFileReturn { + uploadFileToRcp: (file: File) => Promise; + isUploading: boolean; + error: string | null; +} + +export const useUploadFile = (): UseUploadFileReturn => { + const { account, wallet } = useWallet(); + const [isUploading, setIsUploading] = useState(false); + const [error, setError] = useState(null); + + const uploadFileToRcp = async (file: File) => { + if (!account || !wallet) { + throw new Error("Wallet not connected"); + } + + setIsUploading(true); + setError(null); + + try { + await getShelbyClient().rpc.putBlob({ + account: account.address, + blobName: file.name, + blobData: new Uint8Array(await file.arrayBuffer()), + }); + } catch (err) { + const errorMessage = err instanceof Error ? err.message : "Upload failed"; + setError(errorMessage); + throw err; + } finally { + setIsUploading(false); + } + }; + + return { + uploadFileToRcp, + isUploading, + error, + }; +}; diff --git a/apps/cross-chain-accounts/next.config.ts b/apps/cross-chain-accounts/next.config.ts new file mode 100644 index 0000000..53eea2d --- /dev/null +++ b/apps/cross-chain-accounts/next.config.ts @@ -0,0 +1,11 @@ +import type { NextConfig } from "next"; + +const nextConfig: NextConfig = { + transpilePackages: ["@shelby-protocol/ui"], + typedRoutes: true, + images: { + remotePatterns: [new URL("https://api.devnet.shelby.xyz/shelby/**")], + }, +}; + +export default nextConfig; diff --git a/apps/web/package.json b/apps/cross-chain-accounts/package.json similarity index 54% rename from apps/web/package.json rename to apps/cross-chain-accounts/package.json index 7f3538f..4950d10 100644 --- a/apps/web/package.json +++ b/apps/cross-chain-accounts/package.json @@ -1,8 +1,7 @@ { - "name": "@shelby-protocol/web", - "version": "0.1.0", - "description": "A Next.js application showcasing Shelby integrations", - "type": "module", + "name": "@shelby-protocol/cross-chain-accounts", + "version": "0.0.0", + "description": "Shelby cross chain accounts example", "private": true, "scripts": { "dev": "next dev --turbopack --port 3000", @@ -13,6 +12,11 @@ "test:once": "echo 'No tests configured'" }, "dependencies": { + "@aptos-labs/derived-wallet-ethereum": "^0.8.0", + "@aptos-labs/derived-wallet-solana": "^0.8.0", + "@aptos-labs/ts-sdk": "^5.1.0", + "@aptos-labs/wallet-adapter-react": "^7.1.0", + "@shelby-protocol/sdk": "0.0.1-experimental.4", "@shelby-protocol/ui": "workspace:*", "next": "^15.5.0", "react": "^18.3.1", @@ -21,7 +25,6 @@ "devDependencies": { "@types/node": "^22.15.3", "@types/react": "^18.3.12", - "@types/react-dom": "^18.3.1", - "typescript": "5.8.2" + "@types/react-dom": "^18.3.1" } } diff --git a/apps/cross-chain-accounts/postcss.config.mjs b/apps/cross-chain-accounts/postcss.config.mjs new file mode 100644 index 0000000..e4b5ceb --- /dev/null +++ b/apps/cross-chain-accounts/postcss.config.mjs @@ -0,0 +1 @@ +export { default } from "@shelby-protocol/ui/postcss.config"; diff --git a/apps/web/public/file-text.svg b/apps/cross-chain-accounts/public/file-text.svg similarity index 100% rename from apps/web/public/file-text.svg rename to apps/cross-chain-accounts/public/file-text.svg diff --git a/apps/web/public/globe.svg b/apps/cross-chain-accounts/public/globe.svg similarity index 100% rename from apps/web/public/globe.svg rename to apps/cross-chain-accounts/public/globe.svg diff --git a/apps/cross-chain-accounts/public/images/pfp.jpeg b/apps/cross-chain-accounts/public/images/pfp.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..c0aa289169d5eab672de551a511a2c0bc0965c56 GIT binary patch literal 2461 zcmbW!c{JOJ764wZ^`y7Dd!n35oK#y+X91 zs;#!RDyp_1w%T_kV{MT!(|6{)Ki_-bbMF1;-aqc=T-Fe41c(PXpimf;odX7gadL8S z@d)zraC7sB2^{AWl!Qx5Nx~&0WE9kuW#mrDOGv2bo;Y<{6M;ZTE9)ESX`NNqMreUJ zIXQW_c|>`6MYUulWVQb1u-*dv9Ka3W1{fp~>;kfyCeY*dt}r=&L9Ljyd=7b2>N_E9&$@!P zTR=Q(Lg$RGp1#33Gjj_x#?s2+BF@pt`O;fd0e7f8=3N`$(ZS1;`TR;z&umWOIapN!2-=hBx6#IXP{sH~t zVKD$6FzD!EV157v3^R>NnMM`X?UmLlh+t>8SN_{MF{+8@1z>qFh)WW-FiMz!}V3LdW5o`lcM)`UHMI1}QK&y7#Tf44YOe{&=vY~TFC z(JkS`N6lsW&_WljOKdehvadH%=vpuP=c-Iv#yMJkoLgDvb@m~vrObiP3_ta5K9mzi}Yj(f?TDuD=t$SlBEXZe~XCA2LZ@{$F_X{`86 zX^jDjF=*^kV9c5YdfMJ7xygEBcFpf!+=nvD-zb&P1fs9{le>B^uKFgR9Rmm_*TTMS zR)yDiB%h@`un9zh*3C=e5FD#%xT?7eJAtXzs65n|WFvB`Awr7BMoc`({&4}-h~U!N zt3JllilJQF%W;;Q50r4L^`WVhxD>GfuEe!r507*$-3q86#aqb34bmf%A~^_pw2=`P zt%}If8#2xTB1h?W$qx$T%o$O%E|;-_iGn0xo}SyU;nqq;79fUMz_WuGw%eR>ZDM7N{H zFk8t^hk95mV{!3&Odm5}UbQFSviP`E^%jt$~H||Q- z%a0c^ZGzN(7kIi?JX|zGyjc4gblS}T*Qm@OU6khw&oP1}-dieoeK0EQ80g}1UbZ&g z(^4~|8{iA@L%};X5RBrqeCx7BdN}cpQ$)3k#iv=~{=1iSjTW;P8Sk?+N2s`r3l2(# zlUHN*qHlA}(yGJ>an9>|y$Xq<`z@S^g=6#Jky>KEg>FBg6CXczX06;M z2cm36w-4P@*-O1)K-$?}{zlKF=dMUtxZgiELqcWohLID4mOG?{7s&Pk3LN$2jbQ-*xxFwOM{Qy}Dq1<(pfr?3R-adRrX6$~CX_ zQXOE76sY=gf9YBF?)g0@y9mX@uKqXOY5v=~OzL1r-`yy^D!z4k1BGy_WvcongEPt} zonq{3kAn=kQ}LPo9@Hx0wBZ3?bKv4N8H}%5L55d-!Wm37Q`9{*se}cTHwejM7?VBG zLH<3Nn>y3vtkB#?vn{hT3A35x5F~90E|Mdiuo;v&OCOP70ih_3#gu@1G_8&e+b5$M zK_OXjpJ=JJ_0k9U2kqOX`^aJ&z4?b2^a9^j<#lBSWlpHD!~V(DAtP1VXXZ!UTcq1U zm%k~c55)4+?7y$^Jy)L8V6QFh@T_j&dHv@10!Mwnc9~`I)N@g!CYwo@@ZoJUKRr9y5Saa3X_^R(Ef`z)0_cn5HryS;p*-`NIr;JD@p7EyT@#&~8{JjQO zdGYLTU(!-zU&gkj+d4nYrFhtHZGCk%n0p*7=5`;`EJxBL%i0pB=^3Og13zbYkU)Hp z#d2rQ2T2Rel99O|ye(cy1UtGgezBIR8B!a<=*j3;C$!axRvyT8E@t^~re!yf_1#Rr z^BkZqKlXHJ2P2%z_Enq3{J~YxB$sV>wM~H>qC^xdXl0nRItqxl67&H9J+f;{fl>bU~-ES=N{#7b7 zE2P8QOAwp}XYVd6+pwCKH19goHg(rQD%h5W+fo^*hT52vTL{ze^y7OQaWj~(wsmQ% zbGMMqWPW`GijDWxYhhG`uRu-pJI5J#d-Or>@M=zDXu5m*g25E&cPlbV6{~XajC!^Y zz93ahRj_s1+gTrrCn*4mwyJo(EzhB)7D&edX0(HOguoyH~>FmPTtxpV@-RPiQ^B-~0x zZwmFOZI(CsV3$yOylPHhsmQ@Z(8D&?N`^>P07-*zK-KNmQ#v%r1x1Pf5 z62@q|GfJ>)*8X%|T>D_0U3C}T%%xAV>vy7M7oy&(Fx?Kn|3FY^1(+re7(;jeRmUX9$J|&(R8~Lk0tktDk=!xwXO?{u7$O BfYks1 literal 0 HcmV?d00001 diff --git a/apps/web/public/next.svg b/apps/cross-chain-accounts/public/next.svg similarity index 100% rename from apps/web/public/next.svg rename to apps/cross-chain-accounts/public/next.svg diff --git a/apps/web/public/turborepo-dark.svg b/apps/cross-chain-accounts/public/turborepo-dark.svg similarity index 100% rename from apps/web/public/turborepo-dark.svg rename to apps/cross-chain-accounts/public/turborepo-dark.svg diff --git a/apps/web/public/turborepo-light.svg b/apps/cross-chain-accounts/public/turborepo-light.svg similarity index 100% rename from apps/web/public/turborepo-light.svg rename to apps/cross-chain-accounts/public/turborepo-light.svg diff --git a/apps/web/public/vercel.svg b/apps/cross-chain-accounts/public/vercel.svg similarity index 100% rename from apps/web/public/vercel.svg rename to apps/cross-chain-accounts/public/vercel.svg diff --git a/apps/web/public/window.svg b/apps/cross-chain-accounts/public/window.svg similarity index 100% rename from apps/web/public/window.svg rename to apps/cross-chain-accounts/public/window.svg diff --git a/apps/web/tsconfig.json b/apps/cross-chain-accounts/tsconfig.json similarity index 80% rename from apps/web/tsconfig.json rename to apps/cross-chain-accounts/tsconfig.json index a449ab3..1e70252 100644 --- a/apps/web/tsconfig.json +++ b/apps/cross-chain-accounts/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { "target": "ES2017", - "lib": ["dom", "dom.iterable", "ES6"], + "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, "strict": true, @@ -18,9 +18,9 @@ "name": "next" } ], - "baseUrl": ".", "paths": { - "@/*": ["./src/*"] + "@/*": ["./*"], + "@shelby-protocol/ui/*": ["../../packages/ui/src/*"] } }, "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], diff --git a/apps/cross-chain-accounts/utils/client.ts b/apps/cross-chain-accounts/utils/client.ts new file mode 100644 index 0000000..8ef943d --- /dev/null +++ b/apps/cross-chain-accounts/utils/client.ts @@ -0,0 +1,24 @@ +import { Aptos, AptosConfig, Network } from "@aptos-labs/ts-sdk"; +import { ShelbyClient } from "@shelby-protocol/sdk/browser"; + +export const aptosClient = new Aptos( + new AptosConfig({ + network: Network.DEVNET, + clientConfig: { + API_KEY: process.env.NEXT_PUBLIC_APTOS_API_KEY, + }, + }) +); + +export const getAptosClient = () => { + return aptosClient; +}; + +const shelbyClient = new ShelbyClient({ + aptos: getAptosClient(), + shelby: { baseUrl: "https://api.devnet.shelby.xyz/shelby" }, +}); + +export const getShelbyClient = () => { + return shelbyClient; +}; diff --git a/apps/cross-chain-accounts/utils/encodeFile.ts b/apps/cross-chain-accounts/utils/encodeFile.ts new file mode 100644 index 0000000..3920674 --- /dev/null +++ b/apps/cross-chain-accounts/utils/encodeFile.ts @@ -0,0 +1,14 @@ +import { + BlobCommitments, + generateCommitments, +} from "@shelby-protocol/sdk/node"; + +export const encodeFile = async (file: File): Promise => { + const data = Buffer.isBuffer(file) + ? file + : Buffer.from(await file.arrayBuffer()); + + const commitments = await generateCommitments(data); + + return commitments; +}; diff --git a/apps/web/README.md b/apps/web/README.md deleted file mode 100644 index a98bfa8..0000000 --- a/apps/web/README.md +++ /dev/null @@ -1,36 +0,0 @@ -This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/create-next-app). - -## Getting Started - -First, run the development server: - -```bash -npm run dev -# or -yarn dev -# or -pnpm dev -# or -bun dev -``` - -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. - -You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. - -This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load Inter, a custom Google Font. - -## Learn More - -To learn more about Next.js, take a look at the following resources: - -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. - -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! - -## Deploy on Vercel - -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. - -Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. diff --git a/apps/web/app/globals.css b/apps/web/app/globals.css deleted file mode 100644 index 6af7ecb..0000000 --- a/apps/web/app/globals.css +++ /dev/null @@ -1,50 +0,0 @@ -:root { - --background: #ffffff; - --foreground: #171717; -} - -@media (prefers-color-scheme: dark) { - :root { - --background: #0a0a0a; - --foreground: #ededed; - } -} - -html, -body { - max-width: 100vw; - overflow-x: hidden; -} - -body { - color: var(--foreground); - background: var(--background); -} - -* { - box-sizing: border-box; - padding: 0; - margin: 0; -} - -a { - color: inherit; - text-decoration: none; -} - -.imgDark { - display: none; -} - -@media (prefers-color-scheme: dark) { - html { - color-scheme: dark; - } - - .imgLight { - display: none; - } - .imgDark { - display: unset; - } -} diff --git a/apps/web/app/page.module.css b/apps/web/app/page.module.css deleted file mode 100644 index e769a99..0000000 --- a/apps/web/app/page.module.css +++ /dev/null @@ -1,192 +0,0 @@ -.page { - --gray-rgb: 0, 0, 0; - --gray-alpha-200: rgba(var(--gray-rgb), 0.08); - --gray-alpha-100: rgba(var(--gray-rgb), 0.05); - - --button-primary-hover: #383838; - --button-secondary-hover: #f2f2f2; - - display: grid; - grid-template-rows: 20px 1fr 20px; - align-items: center; - justify-items: center; - min-height: 100svh; - padding: 80px; - gap: 64px; - font-synthesis: none; -} - -@media (prefers-color-scheme: dark) { - .page { - --gray-rgb: 255, 255, 255; - --gray-alpha-200: rgba(var(--gray-rgb), 0.145); - --gray-alpha-100: rgba(var(--gray-rgb), 0.06); - - --button-primary-hover: #ccc; - --button-secondary-hover: #1a1a1a; - } -} - -.main { - display: flex; - flex-direction: column; - gap: 32px; - grid-row-start: 2; -} - -.main ol { - font-family: var(--font-geist-mono); - padding-left: 0; - margin: 0; - font-size: 14px; - line-height: 24px; - letter-spacing: -0.01em; - list-style-position: inside; -} - -.main li:not(:last-of-type) { - margin-bottom: 8px; -} - -.main code { - font-family: inherit; - background: var(--gray-alpha-100); - padding: 2px 4px; - border-radius: 4px; - font-weight: 600; -} - -.ctas { - display: flex; - gap: 16px; -} - -.ctas a { - appearance: none; - border-radius: 128px; - height: 48px; - padding: 0 20px; - font-family: var(--font-geist-sans); - border: 1px solid transparent; - transition: - background 0.2s, - color 0.2s, - border-color 0.2s; - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - font-size: 16px; - line-height: 20px; - font-weight: 500; -} - -a.primary { - background: var(--foreground); - color: var(--background); - gap: 8px; -} - -a.secondary { - border-color: var(--gray-alpha-200); - min-width: 180px; -} - -button.secondary { - appearance: none; - border-radius: 128px; - height: 48px; - padding: 0 20px; - font-family: var(--font-geist-sans); - border: 1px solid transparent; - transition: - background 0.2s, - color 0.2s, - border-color 0.2s; - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - font-size: 16px; - line-height: 20px; - font-weight: 500; - background: transparent; - border-color: var(--gray-alpha-200); - min-width: 180px; -} - -.footer { - font-family: var(--font-geist-sans); - grid-row-start: 3; - display: flex; - gap: 24px; -} - -.footer a { - display: flex; - align-items: center; - gap: 8px; -} - -.footer img { - flex-shrink: 0; -} - -/* Enable hover only on non-touch devices */ -@media (hover: hover) and (pointer: fine) { - a.primary:hover { - background: var(--button-primary-hover); - border-color: transparent; - } - - a.secondary:hover { - background: var(--button-secondary-hover); - border-color: transparent; - } - - .footer a:hover { - text-decoration: underline; - text-underline-offset: 4px; - } -} - -@media (max-width: 600px) { - .page { - padding: 32px; - padding-bottom: 80px; - } - - .main { - align-items: center; - } - - .main ol { - text-align: center; - } - - .ctas { - flex-direction: column; - } - - .ctas a { - font-size: 14px; - height: 40px; - padding: 0 16px; - } - - a.secondary { - min-width: auto; - } - - .footer { - flex-wrap: wrap; - align-items: center; - justify-content: center; - } -} - -@media (prefers-color-scheme: dark) { - .logo { - filter: invert(); - } -} diff --git a/apps/web/app/page.tsx b/apps/web/app/page.tsx deleted file mode 100644 index 3c3e3c7..0000000 --- a/apps/web/app/page.tsx +++ /dev/null @@ -1,102 +0,0 @@ -import { Button } from "@shelby-protocol/ui/button"; -import Image, { type ImageProps } from "next/image"; -import styles from "./page.module.css"; - -type Props = Omit & { - srcLight: string; - srcDark: string; -}; - -const ThemeImage = (props: Props) => { - const { srcLight, srcDark, ...rest } = props; - - return ( - <> - - - - ); -}; - -export default function Home() { - return ( -
-
- -
    -
  1. - Get started by editing apps/web/app/page.tsx -
  2. -
  3. Save and see your changes instantly.
  4. -
- - - -
- -
- ); -} diff --git a/apps/web/next.config.js b/apps/web/next.config.js deleted file mode 100644 index 4678774..0000000 --- a/apps/web/next.config.js +++ /dev/null @@ -1,4 +0,0 @@ -/** @type {import('next').NextConfig} */ -const nextConfig = {}; - -export default nextConfig; diff --git a/packages/ui/components.json b/packages/ui/components.json new file mode 100644 index 0000000..bdc73d6 --- /dev/null +++ b/packages/ui/components.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": true, + "tsx": true, + "tailwind": { + "config": "", + "css": "src/styles/globals.css", + "baseColor": "neutral", + "cssVariables": true + }, + "iconLibrary": "lucide", + "aliases": { + "components": "@shelby-protocol/ui/components", + "utils": "@shelby-protocol/ui/lib/utils", + "hooks": "@shelby-protocol/ui/hooks", + "lib": "@shelby-protocol/ui/lib", + "ui": "@shelby-protocol/ui/components" + } +} diff --git a/packages/ui/package.json b/packages/ui/package.json index 799270b..d70dfaa 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -4,21 +4,46 @@ "description": "A React component library shared across applications", "private": true, "exports": { - "./*": "./src/*.tsx" + "./globals.css": "./src/styles/globals.css", + "./postcss.config": "./postcss.config.mjs", + "./lib/*": "./src/lib/*.ts", + "./components/*": "./src/components/*.tsx", + "./hooks/*": "./src/hooks/*.ts", + ".": "./src/index.ts" }, "scripts": { + "build": "tsc --noEmit", "lint": "biome check .", "fmt": "biome check . --write", "test:once": "echo 'No tests configured'" }, "devDependencies": { + "@tailwindcss/postcss": "^4.1.11", "@types/node": "^22.15.3", "@types/react": "^18.3.12", "@types/react-dom": "^18.3.1", + "autoprefixer": "^10.4.21", + "tailwindcss": "^4.1.13", "typescript": "5.8.2" }, "dependencies": { + "@aptos-labs/wallet-adapter-react": "^7.1.0", + "@intentui/icons": "^1.11.0", + "@radix-ui/react-collapsible": "^1.1.12", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-slot": "^1.2.3", + "@radix-ui/react-tabs": "^1.1.13", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "lucide-react": "^0.544.0", + "motion": "^12.23.19", + "next-themes": "^0.4.6", "react": "^18.3.1", - "react-dom": "^18.3.1" + "react-dom": "^18.3.1", + "react-use-measure": "^2.1.7", + "sonner": "^2.0.7", + "tailwind-merge": "^3.3.1", + "tw-animate-css": "^1.3.6" } } diff --git a/packages/ui/postcss.config.mjs b/packages/ui/postcss.config.mjs new file mode 100644 index 0000000..c15b998 --- /dev/null +++ b/packages/ui/postcss.config.mjs @@ -0,0 +1,6 @@ +/** @type {import('postcss-load-config').Config} */ +const config = { + plugins: { "@tailwindcss/postcss": {} }, +}; + +export default config; diff --git a/packages/ui/src/button.tsx b/packages/ui/src/button.tsx deleted file mode 100644 index 3f7f99f..0000000 --- a/packages/ui/src/button.tsx +++ /dev/null @@ -1,21 +0,0 @@ -"use client"; - -import type { ReactNode } from "react"; - -interface ButtonProps { - children: ReactNode; - className?: string; - appName: string; -} - -export const Button = ({ children, className, appName }: ButtonProps) => { - return ( - - ); -}; diff --git a/packages/ui/src/card.tsx b/packages/ui/src/card.tsx deleted file mode 100644 index 3f99a89..0000000 --- a/packages/ui/src/card.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import type { JSX } from "react"; - -export function Card({ - className, - title, - children, - href, -}: { - className?: string; - title: string; - children: React.ReactNode; - href: string; -}): JSX.Element { - return ( - -

- {title} -> -

-

{children}

-
- ); -} diff --git a/packages/ui/src/code.tsx b/packages/ui/src/code.tsx deleted file mode 100644 index 5448a06..0000000 --- a/packages/ui/src/code.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import type { JSX } from "react"; - -export function Code({ - children, - className, -}: { - children: React.ReactNode; - className?: string; -}): JSX.Element { - return {children}; -} diff --git a/packages/ui/src/components/button.tsx b/packages/ui/src/components/button.tsx new file mode 100644 index 0000000..f8f1775 --- /dev/null +++ b/packages/ui/src/components/button.tsx @@ -0,0 +1,59 @@ +import { Slot } from "@radix-ui/react-slot"; +import { cn } from "@shelby-protocol/ui/lib/utils"; +import { cva, type VariantProps } from "class-variance-authority"; +import type * as React from "react"; + +const buttonVariants = cva( + "cursor-pointer inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", + { + variants: { + variant: { + default: "bg-primary text-primary-foreground hover:bg-primary/90", + destructive: + "bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60", + outline: + "border bg-card hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50", + secondary: + "bg-secondary text-secondary-foreground hover:bg-secondary/80", + ghost: + "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50", + link: "text-primary underline-offset-4 hover:underline", + indent: + "text-primary-foreground font-lp-mono uppercase relative overflow-hidden bg-transparent indent-bg !rounded-none", + }, + size: { + default: "h-9 px-4 py-2 has-[>svg]:px-3", + sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5", + lg: "h-10 rounded-md px-6 has-[>svg]:px-4", + icon: "size-9", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + }, +); + +function Button({ + className, + variant, + size, + asChild = false, + ...props +}: React.ComponentProps<"button"> & + VariantProps & { + asChild?: boolean; + }) { + const Comp = asChild ? Slot : "button"; + + return ( + + ); +} + +export { Button, buttonVariants }; diff --git a/packages/ui/src/components/collapsible.tsx b/packages/ui/src/components/collapsible.tsx new file mode 100644 index 0000000..90935c6 --- /dev/null +++ b/packages/ui/src/components/collapsible.tsx @@ -0,0 +1,33 @@ +"use client"; + +import * as CollapsiblePrimitive from "@radix-ui/react-collapsible"; + +function Collapsible({ + ...props +}: React.ComponentProps) { + return ; +} + +function CollapsibleTrigger({ + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function CollapsibleContent({ + ...props +}: React.ComponentProps) { + return ( + + ); +} + +export { Collapsible, CollapsibleTrigger, CollapsibleContent }; diff --git a/packages/ui/src/components/dialog.tsx b/packages/ui/src/components/dialog.tsx new file mode 100644 index 0000000..e67e1ca --- /dev/null +++ b/packages/ui/src/components/dialog.tsx @@ -0,0 +1,142 @@ +"use client"; + +import * as DialogPrimitive from "@radix-ui/react-dialog"; +import { cn } from "@shelby-protocol/ui/lib/utils"; +import { XIcon } from "lucide-react"; +import type * as React from "react"; + +function Dialog({ + ...props +}: React.ComponentProps) { + return ; +} + +function DialogTrigger({ + ...props +}: React.ComponentProps) { + return ; +} + +function DialogPortal({ + ...props +}: React.ComponentProps) { + return ; +} + +function DialogClose({ + ...props +}: React.ComponentProps) { + return ; +} + +function DialogOverlay({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function DialogContent({ + className, + children, + showCloseButton = true, + ...props +}: React.ComponentProps & { + showCloseButton?: boolean; +}) { + return ( + + + + {children} + {showCloseButton && ( + + + Close + + )} + + + ); +} + +function DialogHeader({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ); +} + +function DialogFooter({ className, ...props }: React.ComponentProps<"div">) { + return ( +
+ ); +} + +function DialogTitle({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function DialogDescription({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +export { + Dialog, + DialogClose, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogOverlay, + DialogPortal, + DialogTitle, + DialogTrigger, +}; diff --git a/packages/ui/src/components/dropdown-menu.tsx b/packages/ui/src/components/dropdown-menu.tsx new file mode 100644 index 0000000..7e4e82b --- /dev/null +++ b/packages/ui/src/components/dropdown-menu.tsx @@ -0,0 +1,256 @@ +"use client"; + +import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"; +import { cn } from "@shelby-protocol/ui/lib/utils"; +import { CheckIcon, ChevronRightIcon, CircleIcon } from "lucide-react"; +import type * as React from "react"; + +function DropdownMenu({ + ...props +}: React.ComponentProps) { + return ; +} + +function DropdownMenuPortal({ + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function DropdownMenuTrigger({ + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function DropdownMenuContent({ + className, + sideOffset = 4, + ...props +}: React.ComponentProps) { + return ( + + + + ); +} + +function DropdownMenuGroup({ + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function DropdownMenuItem({ + className, + inset, + variant = "default", + ...props +}: React.ComponentProps & { + inset?: boolean; + variant?: "default" | "destructive"; +}) { + return ( + + ); +} + +function DropdownMenuCheckboxItem({ + className, + children, + checked, + ...props +}: React.ComponentProps) { + return ( + + + + + + + {children} + + ); +} + +function DropdownMenuRadioGroup({ + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function DropdownMenuRadioItem({ + className, + children, + ...props +}: React.ComponentProps) { + return ( + + + + + + + {children} + + ); +} + +function DropdownMenuLabel({ + className, + inset, + ...props +}: React.ComponentProps & { + inset?: boolean; +}) { + return ( + + ); +} + +function DropdownMenuSeparator({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +function DropdownMenuShortcut({ + className, + ...props +}: React.ComponentProps<"span">) { + return ( + + ); +} + +function DropdownMenuSub({ + ...props +}: React.ComponentProps) { + return ; +} + +function DropdownMenuSubTrigger({ + className, + inset, + children, + ...props +}: React.ComponentProps & { + inset?: boolean; +}) { + return ( + + {children} + + + ); +} + +function DropdownMenuSubContent({ + className, + ...props +}: React.ComponentProps) { + return ( + + ); +} + +export { + DropdownMenu, + DropdownMenuPortal, + DropdownMenuTrigger, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuLabel, + DropdownMenuItem, + DropdownMenuCheckboxItem, + DropdownMenuRadioGroup, + DropdownMenuRadioItem, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuSub, + DropdownMenuSubTrigger, + DropdownMenuSubContent, +}; diff --git a/packages/ui/src/components/expanding-container.tsx b/packages/ui/src/components/expanding-container.tsx new file mode 100644 index 0000000..8719907 --- /dev/null +++ b/packages/ui/src/components/expanding-container.tsx @@ -0,0 +1,35 @@ +"use client"; + +import { motion, type Transition } from "motion/react"; +import useMeasure from "react-use-measure"; + +interface ExpandingContainerProps { + children: React.ReactNode; + className?: string; + initialHeight?: number; + transition?: Transition; + debounce?: number; +} + +export function ExpandingContainer({ + children, + className, + initialHeight, + transition = { duration: 0.4, ease: [0.19, 1, 0.22, 1] }, + debounce, +}: ExpandingContainerProps) { + const [contentRef, { height }] = useMeasure({ offsetSize: true, debounce }); + + return ( + +
+ {children} +
+
+ ); +} diff --git a/packages/ui/src/components/index.ts b/packages/ui/src/components/index.ts new file mode 100644 index 0000000..1d8a569 --- /dev/null +++ b/packages/ui/src/components/index.ts @@ -0,0 +1,5 @@ +export * from "./button"; +export * from "./collapsible"; +export * from "./dialog"; +export * from "./sonner"; +export * from "./x-chain-wallet-selector"; diff --git a/packages/ui/src/components/sonner.tsx b/packages/ui/src/components/sonner.tsx new file mode 100644 index 0000000..22c3766 --- /dev/null +++ b/packages/ui/src/components/sonner.tsx @@ -0,0 +1,25 @@ +"use client"; + +import { useTheme } from "next-themes"; +import { Toaster as Sonner, type ToasterProps, toast } from "sonner"; + +const Toaster = ({ ...props }: ToasterProps) => { + const { theme = "system" } = useTheme(); + + return ( + + ); +}; + +export { Toaster, toast }; diff --git a/packages/ui/src/components/x-chain-wallet-selector.tsx b/packages/ui/src/components/x-chain-wallet-selector.tsx new file mode 100644 index 0000000..e17339c --- /dev/null +++ b/packages/ui/src/components/x-chain-wallet-selector.tsx @@ -0,0 +1,435 @@ +"use client"; + +import { + AboutAptosConnect, + type AboutAptosConnectEducationScreen, + type AdapterNotDetectedWallet, + type AdapterWallet, + APTOS_CONNECT_ACCOUNT_URL, + AptosPrivacyPolicy, + groupAndSortWallets, + isAptosConnectWallet, + isInstallRequired, + truncateAddress, + useWallet, + WalletItem, + type WalletSortingOptions, +} from "@aptos-labs/wallet-adapter-react"; +import { + IconArrowLeft, + IconArrowRight, + IconClipboard, + IconLogout, + IconPerson, +} from "@intentui/icons"; +import { cn } from "@shelby-protocol/ui/lib/utils"; +import { useCallback, useState } from "react"; +import { toast } from "sonner"; +import { Button } from "./button"; +import { + Collapsible, + CollapsibleContent, + CollapsibleTrigger, +} from "./collapsible"; +import { + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "./dialog"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from "./dropdown-menu"; +import { ExpandingContainer } from "./expanding-container"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@radix-ui/react-tabs"; +import { ChevronDown } from "lucide-react"; + +export interface XChainWalletSelectorProps { + walletSortingOptions?: WalletSortingOptions; + size?: "sm" | "default" | "lg"; + className?: string; +} + +export function XChainWalletSelector({ + walletSortingOptions = {}, + className, + size = "default", +}: XChainWalletSelectorProps) { + const { account, connected, disconnect, wallet } = useWallet(); + const [isDialogOpen, setIsDialogOpen] = useState(false); + + const closeDialog = useCallback(() => setIsDialogOpen(false), []); + + const copyAddress = useCallback(async () => { + if (!account?.address) return; + try { + await navigator.clipboard.writeText(account.address.toString()); + toast.success("Copied wallet address to clipboard."); + } catch { + toast.error("Failed to copy wallet address."); + } + }, [account?.address]); + + return connected && account ? ( + + + + + + + Copy address + + {wallet && isAptosConnectWallet(wallet) && ( + + + Account + + + )} + + + Disconnect + + + + ) : ( + + + + + + + ); +} + +interface ConnectWalletDialogProps extends WalletSortingOptions { + close: () => void; +} + +function ConnectWalletDialog({ + close, + ...walletSortingOptions +}: ConnectWalletDialogProps) { + const { wallets = [], notDetectedWallets = [] } = useWallet(); + + const { aptosConnectWallets, availableWallets, installableWallets } = + groupAndSortWallets( + [...wallets, ...notDetectedWallets], + walletSortingOptions + ); + + const hasAptosConnectWallets = !!aptosConnectWallets.length; + + const { evmWallets, solanaWallets, aptosWallets } = availableWallets.reduce<{ + evmWallets: AdapterWallet[]; + solanaWallets: AdapterWallet[]; + aptosWallets: AdapterWallet[]; + }>( + (acc, wallet) => { + if (wallet.name.includes("Ethereum")) { + acc.evmWallets.push(wallet); + } else if (wallet.name.includes("Solana")) { + acc.solanaWallets.push(wallet); + } else { + acc.aptosWallets.push(wallet); + } + return acc; + }, + { evmWallets: [], solanaWallets: [], aptosWallets: [] } + ); + + const { + evmInstallableWallets, + solanaInstallableWallets, + aptosInstallableWallets, + } = installableWallets.reduce<{ + evmInstallableWallets: AdapterNotDetectedWallet[]; + solanaInstallableWallets: AdapterNotDetectedWallet[]; + aptosInstallableWallets: AdapterNotDetectedWallet[]; + }>( + (acc, wallet) => { + if (wallet.name.includes("Ethereum")) { + acc.evmInstallableWallets.push(wallet); + } else if (wallet.name.includes("Solana")) { + acc.solanaInstallableWallets.push(wallet); + } else { + acc.aptosInstallableWallets.push(wallet); + } + return acc; + }, + { + evmInstallableWallets: [], + solanaInstallableWallets: [], + aptosInstallableWallets: [], + } + ); + + return ( + + + + + {hasAptosConnectWallets ? ( + <> + Log in or sign up + with Social + Aptos Connect + + ) : ( + "Connect Wallet" + )} + + + + + {hasAptosConnectWallets && ( +
+ {aptosConnectWallets.map((wallet) => ( + + ))} +

+ Learn more about{" "} + + Aptos Connect + +

+ +

+ {" "} + + . +

+ +
+
+
+ Or +
+
+
+ )} + +
+ {/* Handle Aptos wallets */} + + + + Aptos + Solana + Ethereum + + + {aptosWallets.map((wallet) => ( + + ))} + {!!aptosInstallableWallets.length && ( + + + + + + {aptosInstallableWallets.map((wallet) => ( + + ))} + + + )} + + {/* Handle Solana wallets */} + + {solanaWallets.map((wallet) => ( + + ))} + {!!solanaInstallableWallets.length && ( + + + + + + {solanaInstallableWallets.map((wallet) => ( + + ))} + + + )} + + {/* Handle Ethereum wallets */} + + {evmWallets.map((wallet) => ( + + ))} + {!!evmInstallableWallets.length && ( + + + + + + {evmInstallableWallets.map((wallet) => ( + + ))} + + + )} + + + +
+ + + ); +} + +interface WalletRowProps { + wallet: AdapterWallet | AdapterNotDetectedWallet; + onConnect?: () => void; +} + +function WalletRow({ wallet, onConnect }: WalletRowProps) { + return ( + +
+ + +
+ {isInstallRequired(wallet) ? ( + + ) : ( + + + + )} +
+ ); +} + +function AptosConnectWalletRow({ wallet, onConnect }: WalletRowProps) { + return ( + + + + + + ); +} + +function renderEducationScreen(screen: AboutAptosConnectEducationScreen) { + return ( + <> + + + + About Aptos Connect + + + +
+ +
+
+ + +
+ +
+ +
+ {screen.screenIndicators.map((ScreenIndicator, i) => ( + // biome-ignore lint/suspicious/noArrayIndexKey: ignore + +
+ + ))} +
+ +
+ + ); +} diff --git a/packages/ui/src/index.ts b/packages/ui/src/index.ts new file mode 100644 index 0000000..40b494c --- /dev/null +++ b/packages/ui/src/index.ts @@ -0,0 +1 @@ +export * from "./components"; diff --git a/packages/ui/src/lib/utils.ts b/packages/ui/src/lib/utils.ts new file mode 100644 index 0000000..365058c --- /dev/null +++ b/packages/ui/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { type ClassValue, clsx } from "clsx"; +import { twMerge } from "tailwind-merge"; + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} diff --git a/packages/ui/src/styles/globals.css b/packages/ui/src/styles/globals.css new file mode 100644 index 0000000..79835c1 --- /dev/null +++ b/packages/ui/src/styles/globals.css @@ -0,0 +1,144 @@ +@import "tailwindcss"; +@import "tw-animate-css"; + +@source "../../../apps/**/*.{ts,tsx}"; +@source "../../../components/**/*.{ts,tsx}"; +@source "../**/*.{ts,tsx}"; + +@custom-variant dark (&:is(.dark *)); + +:root { + --background: oklch(0.97 0.01 90); /* White 20 */ + --foreground: oklch(0.32 0.06 50); /* Brown */ + --card: oklch(0.99 0.005 90); /* White */ + --card-foreground: oklch(0.32 0.06 50); + --popover: oklch(0.99 0.005 90); + --popover-foreground: oklch(0.32 0.06 50); + --primary: oklch(0.75 0.21 340); /* Pink */ + --primary-foreground: oklch(0.32 0.06 50); + --secondary: oklch(0.97 0 0); + --secondary-foreground: oklch(0.205 0 0); + --muted: oklch(0.97 0 0); + --muted-foreground: oklch(0.556 0 0); + --accent: oklch(0.97 0 0); + --accent-foreground: oklch(0.205 0 0); + --destructive: oklch(0.577 0.245 27.325); + --destructive-foreground: oklch(0.577 0.245 27.325); + --border: oklch(0.922 0 0); + --input: oklch(0.922 0 0); + --ring: oklch(0.708 0 0); + --chart-1: oklch(0.646 0.222 41.116); + --chart-2: oklch(0.6 0.118 184.704); + --chart-3: oklch(0.398 0.07 227.392); + --chart-4: oklch(0.828 0.189 84.429); + --chart-5: oklch(0.769 0.188 70.08); + --radius: 0.625rem; + --sidebar: oklch(0.985 0 0); + --sidebar-foreground: oklch(0.145 0 0); + --sidebar-primary: oklch(0.205 0 0); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.97 0 0); + --sidebar-accent-foreground: oklch(0.205 0 0); + --sidebar-border: oklch(0.922 0 0); + --sidebar-ring: oklch(0.708 0 0); + + --lime: oklch(0.87 0.16 130); /* Lime */ + --yellow: oklch(0.88 0.12 90); /* Yellow */ + --orange: oklch(0.7443 0.1535 35.91); /* Orange */ + --lilac: oklch(0.82 0.2 310); /* Lilac */ +} + +.dark { + --background: oklch(0.145 0 0); + --foreground: oklch(0.985 0 0); + --card: oklch(0.145 0 0); + --card-foreground: oklch(0.985 0 0); + --popover: oklch(0.99 0.005 90); + --popover-foreground: oklch(0.32 0.06 50); + --primary: oklch(0.75 0.21 340); /* Pink */ + --primary-foreground: oklch(0.32 0.06 50); + --secondary: oklch(0.93 0.02 80); /* White 30 */ + --secondary-foreground: oklch(0.32 0.06 50); + --muted: oklch(0.92 0.015 80); /* White 20/30 blend */ + --muted-foreground: oklch(0.42 0.02 80); /* Black 70 */ + --accent: oklch(0.87 0.16 130); /* Lime */ + --accent-foreground: oklch(0.32 0.05 140); /* Forest */ + --destructive: oklch(0.65 0.21 30); /* Failure */ + --destructive-foreground: oklch(0.99 0.005 90); + --border: oklch(0.93 0.02 80); + --input: oklch(0.93 0.02 80); + --ring: oklch(0.75 0.21 340); + --chart-1: oklch(0.488 0.243 264.376); + --chart-2: oklch(0.696 0.17 162.48); + --chart-3: oklch(0.769 0.188 70.08); + --chart-4: oklch(0.627 0.265 303.9); + --chart-5: oklch(0.645 0.246 16.439); + --sidebar: oklch(0.205 0 0); + --sidebar-foreground: oklch(0.985 0 0); + --sidebar-primary: oklch(0.488 0.243 264.376); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.269 0 0); + --sidebar-accent-foreground: oklch(0.985 0 0); + --sidebar-border: oklch(0.269 0 0); + --sidebar-ring: oklch(0.439 0 0); +} + +@theme inline { + --color-background: var(--background); + --color-foreground: var(--foreground); + --color-card: var(--card); + --color-card-foreground: var(--card-foreground); + --color-popover: var(--popover); + --color-popover-foreground: var(--popover-foreground); + --color-primary: var(--primary); + --color-primary-foreground: var(--primary-foreground); + --color-secondary: var(--secondary); + --color-secondary-foreground: var(--secondary-foreground); + --color-muted: var(--muted); + --color-muted-foreground: var(--muted-foreground); + --color-accent: var(--accent); + --color-accent-foreground: var(--accent-foreground); + --color-destructive: var(--destructive); + --color-destructive-foreground: var(--destructive-foreground); + --color-border: var(--border); + --color-input: var(--input); + --color-ring: var(--ring); + --color-chart-1: var(--chart-1); + --color-chart-2: var(--chart-2); + --color-chart-3: var(--chart-3); + --color-chart-4: var(--chart-4); + --color-chart-5: var(--chart-5); + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); + --color-sidebar: var(--sidebar); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-ring: var(--sidebar-ring); + + --font-gt-planar: "GT Planar", sans-serif; + --font-repro-mono: "ABC Repro Mono", sans-serif; + + --color-success: var(--lime); + --color-warning: var(--yellow); + --color-info: var(--lilac); + + --color-lime: var(--lime); + --color-yellow: var(--yellow); + --color-orange: var(--orange); + --color-lilac: var(--lilac); +} + +@layer base { + * { + @apply border-border outline-ring/50; + } + body { + @apply bg-background text-foreground; + } +} diff --git a/packages/ui/tsconfig.json b/packages/ui/tsconfig.json index 98268d0..812fbbc 100644 --- a/packages/ui/tsconfig.json +++ b/packages/ui/tsconfig.json @@ -1,22 +1,26 @@ { + "$schema": "https://json.schemastore.org/tsconfig", "compilerOptions": { - "target": "ES2017", - "lib": ["dom", "dom.iterable", "ES6"], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "noEmit": false, + "declaration": true, + "declarationMap": true, "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "bundler", - "resolveJsonModule": true, + "incremental": false, "isolatedModules": true, + "lib": ["es2022", "DOM", "DOM.Iterable"], + "module": "ESNext", + "moduleDetection": "force", + "moduleResolution": "Bundler", + "noUncheckedIndexedAccess": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "strict": true, + "target": "ES2022", "jsx": "react-jsx", - "declaration": true, - "declarationMap": true, - "incremental": true, - "outDir": "dist" + "baseUrl": ".", + "paths": { + "@shelby-protocol/ui/*": ["./src/*"] + } }, - "include": ["src"], + "include": ["."], "exclude": ["node_modules", "dist"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9ca7bc4..6e77cad 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,8 +24,60 @@ importers: specifier: 5.8.2 version: 5.8.2 + apps/cross-chain-accounts: + dependencies: + '@aptos-labs/derived-wallet-ethereum': + specifier: ^0.8.0 + version: 0.8.0(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1)(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + '@aptos-labs/derived-wallet-solana': + specifier: ^0.8.0 + version: 0.8.0(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1)(bs58@4.0.1)(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@aptos-labs/ts-sdk': + specifier: ^5.1.0 + version: 5.1.0(got@11.8.6) + '@aptos-labs/wallet-adapter-react': + specifier: ^7.1.0 + version: 7.1.0(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@telegram-apps/bridge@1.9.2)(@types/react@18.3.24)(@wallet-standard/core@1.1.1)(aptos@1.21.0)(react@18.3.1) + '@shelby-protocol/sdk': + specifier: 0.0.1-experimental.4 + version: 0.0.1-experimental.4(@aptos-labs/ts-sdk@5.1.0(got@11.8.6)) + '@shelby-protocol/ui': + specifier: workspace:* + version: link:../../packages/ui + next: + specifier: ^15.5.0 + version: 15.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: + specifier: ^18.3.1 + version: 18.3.1 + react-dom: + specifier: ^18.3.1 + version: 18.3.1(react@18.3.1) + devDependencies: + '@types/node': + specifier: ^22.15.3 + version: 22.18.6 + '@types/react': + specifier: ^18.3.12 + version: 18.3.24 + '@types/react-dom': + specifier: ^18.3.1 + version: 18.3.7(@types/react@18.3.24) + apps/web: dependencies: + '@aptos-labs/derived-wallet-ethereum': + specifier: ^0.8.0 + version: 0.8.0(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1)(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@aptos-labs/derived-wallet-solana': + specifier: ^0.8.0 + version: 0.8.0(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1)(bs58@4.0.1)(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@aptos-labs/ts-sdk': + specifier: ^5.1.0 + version: 5.1.0(got@11.8.6) + '@aptos-labs/wallet-adapter-react': + specifier: ^7.1.0 + version: 7.1.0(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@telegram-apps/bridge@1.9.2)(@types/react@18.3.24)(@wallet-standard/core@1.1.1)(aptos@1.21.0)(react@18.3.1) '@shelby-protocol/ui': specifier: workspace:* version: link:../../packages/ui @@ -41,16 +93,13 @@ importers: devDependencies: '@types/node': specifier: ^22.15.3 - version: 22.15.3 + version: 22.18.6 '@types/react': specifier: ^18.3.12 version: 18.3.24 '@types/react-dom': specifier: ^18.3.1 version: 18.3.7(@types/react@18.3.24) - typescript: - specifier: 5.8.2 - version: 5.8.2 packages/table-generator: dependencies: @@ -67,28 +116,173 @@ importers: packages/ui: dependencies: + '@aptos-labs/wallet-adapter-react': + specifier: ^7.1.0 + version: 7.1.0(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@telegram-apps/bridge@1.9.2)(@types/react@18.3.24)(@wallet-standard/core@1.1.1)(aptos@1.21.0)(react@18.3.1) + '@intentui/icons': + specifier: ^1.11.0 + version: 1.11.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-collapsible': + specifier: ^1.1.12 + version: 1.1.12(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-dialog': + specifier: ^1.1.15 + version: 1.1.15(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-dropdown-menu': + specifier: ^2.1.16 + version: 2.1.16(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': + specifier: ^1.2.3 + version: 1.2.3(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-tabs': + specifier: ^1.1.13 + version: 1.1.13(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + class-variance-authority: + specifier: ^0.7.1 + version: 0.7.1 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + lucide-react: + specifier: ^0.544.0 + version: 0.544.0(react@18.3.1) + motion: + specifier: ^12.23.19 + version: 12.23.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next-themes: + specifier: ^0.4.6 + version: 0.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: specifier: ^18.3.1 version: 18.3.1 react-dom: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) + react-use-measure: + specifier: ^2.1.7 + version: 2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + sonner: + specifier: ^2.0.7 + version: 2.0.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + tailwind-merge: + specifier: ^3.3.1 + version: 3.3.1 + tw-animate-css: + specifier: ^1.3.6 + version: 1.3.8 devDependencies: + '@tailwindcss/postcss': + specifier: ^4.1.11 + version: 4.1.13 '@types/node': specifier: ^22.15.3 - version: 22.15.3 + version: 22.18.6 '@types/react': specifier: ^18.3.12 version: 18.3.24 '@types/react-dom': specifier: ^18.3.1 version: 18.3.7(@types/react@18.3.24) + autoprefixer: + specifier: ^10.4.21 + version: 10.4.21(postcss@8.5.6) + tailwindcss: + specifier: ^4.1.13 + version: 4.1.13 typescript: specifier: 5.8.2 version: 5.8.2 packages: + '@adraffy/ens-normalize@1.10.1': + resolution: {integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==} + + '@adraffy/ens-normalize@1.11.1': + resolution: {integrity: sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==} + + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + '@aptos-connect/wallet-adapter-plugin@2.5.2': + resolution: {integrity: sha512-AR0wm9TNRaF13AYToJdwqWFmjCjqpvbSlUGdJX2mvp2XpsbkpHYr8iy6Y1i6qvXDZqOd7OSSSUzX34lI/vN+vg==} + peerDependencies: + '@aptos-labs/ts-sdk': ^1.33.1 || ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 + + '@aptos-connect/wallet-api@0.3.2': + resolution: {integrity: sha512-U85pKOb8oWmOdT/yusbq+SkWcYNRRi5C1J08bBvI9j14T/c3R7MaTKYjAXPggx3tTtPWF9B7huKduYbwL2GtWw==} + peerDependencies: + '@aptos-labs/ts-sdk': ^1.33.1 || ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 + aptos: ^1.20.0 + + '@aptos-connect/web-transport@0.3.2': + resolution: {integrity: sha512-qEfanBmCbPhqommSydckfK66EOkqWcb1LDg59zlPrU4nu7bSzfhfRBSUgkmkulNEhPDPqFPYshDLvjytcEIIRg==} + peerDependencies: + '@aptos-labs/ts-sdk': ^1.33.1 || ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 + '@aptos-labs/wallet-standard': ^0.5.0 + '@telegram-apps/bridge': ^1.0.0 + aptos: ^1.20.0 + + '@aptos-labs/aptos-cli@1.0.2': + resolution: {integrity: sha512-PYPsd0Kk3ynkxNfe3S4fanI3DiUICCoh4ibQderbvjPFL5A0oK6F4lPEO2t0MDsQySTk2t4vh99Xjy6Bd9y+aQ==} + hasBin: true + + '@aptos-labs/aptos-client@0.1.1': + resolution: {integrity: sha512-kJsoy4fAPTOhzVr7Vwq8s/AUg6BQiJDa7WOqRzev4zsuIS3+JCuIZ6vUd7UBsjnxtmguJJulMRs9qWCzVBt2XA==} + engines: {node: '>=15.10.0'} + deprecated: <1.0.0 is no longer supported please upgrade to the latest version + + '@aptos-labs/aptos-client@2.0.0': + resolution: {integrity: sha512-A23T3zTCRXEKURodp00dkadVtIrhWjC9uo08dRDBkh69OhCnBAxkENmUy/rcBarfLoFr60nRWt7cBkc8wxr1mg==} + engines: {node: '>=20.0.0'} + peerDependencies: + got: ^11.8.6 + + '@aptos-labs/derived-wallet-base@0.8.0': + resolution: {integrity: sha512-PkXan6HHpawzWJBh/1ywiDweyLYKdnkE7DgG9GldECR7XZxtJiwLuDZVXIKIdcG15UjYhoFWPeskIUrpWEb1dQ==} + peerDependencies: + '@aptos-labs/ts-sdk': ^5.0.0 + + '@aptos-labs/derived-wallet-ethereum@0.8.0': + resolution: {integrity: sha512-ll+W5533OHdPOJNCopz4W0gI5SzUDE12niGZlk5syb2RWubDymAMY0o/3D80dr1eqBoNpu33/iTt2E4dOGUHvg==} + peerDependencies: + '@aptos-labs/ts-sdk': ^5.0.0 + + '@aptos-labs/derived-wallet-solana@0.8.0': + resolution: {integrity: sha512-CQFH4fxIIAIxPVz9dvqBH1hJyYAf0iDA0jT3Qj5vzI/YlSHjeMdfclHn5IX69kymwz7RiJqA8DAZvKoxxSAZTg==} + peerDependencies: + '@aptos-labs/ts-sdk': ^5.0.0 + + '@aptos-labs/siwa@0.4.0': + resolution: {integrity: sha512-BpDD7/PP7IqSvJx6gFR4CgoIIBBS9AcaquJ5HMhU/2cl22E073FzU/O7jYLy+p/dL3aZLmkAFpWoDYjAPz040g==} + peerDependencies: + '@aptos-labs/ts-sdk': '>=1.37.0 || >=2.0.0' + + '@aptos-labs/ts-sdk@5.1.0': + resolution: {integrity: sha512-rhlOFbK+5/XACkIEBc7jBjGZ4QIQVIxTD2GGlf906n5Ljq5f7jAV6Fer+0y2pRaP3JgyNmE4czizA55C2lAONg==} + engines: {node: '>=20.0.0'} + + '@aptos-labs/wallet-adapter-core@7.4.0': + resolution: {integrity: sha512-j6uuHyVsWIaKyqost9xp47xFxA179hUQE+7/LMecrc42bBMh1T1wP7PMK4lxJRefvpQ1PnPA4aC3RBee+MSuVg==} + peerDependencies: + '@aptos-labs/ts-sdk': ^5.0.0 + + '@aptos-labs/wallet-adapter-react@7.1.0': + resolution: {integrity: sha512-RMMzWcv+zOo0JkuIp3sC50TIdW2Qr1e0t4bDlNIZWqsVj92saKBAAB70IKFohNtWcedHzWTqE7wC8AkfBdwSuw==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + + '@aptos-labs/wallet-standard@0.5.2': + resolution: {integrity: sha512-aFQOMLLRSmEYXHBGzhLGSOICoQRKqrtRyaMR7kDdyKtEI+4Ocgf2QeW+5yNZEUKoeWlydcBZGIuO7xAQpWU7dw==} + peerDependencies: + '@aptos-labs/ts-sdk': ^3.1.3 || ^4.0.0 || ^5.0.0 + '@wallet-standard/core': ^1.0.3 + + '@babel/runtime@7.28.4': + resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} + engines: {node: '>=6.9.0'} + '@biomejs/biome@2.0.6': resolution: {integrity: sha512-RRP+9cdh5qwe2t0gORwXaa27oTOiQRQvrFf49x2PA1tnpsyU7FIHX4ZOFMtBC4QNtyWsN7Dqkf5EDbg4X+9iqA==} engines: {node: '>=14.21.3'} @@ -301,6 +495,41 @@ packages: cpu: [x64] os: [win32] + '@floating-ui/core@1.7.3': + resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} + + '@floating-ui/dom@1.7.4': + resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==} + + '@floating-ui/react-dom@2.1.6': + resolution: {integrity: sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.2.10': + resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + + '@identity-connect/api@0.7.0': + resolution: {integrity: sha512-mn/LZGeb3xgBD644p67tYOjvYSSdZpwxiO4/ZjwjsJZ8eYvGha5FiZg+pqVH73lg1S36qikwbkA3HUQOAE5GKA==} + + '@identity-connect/crypto@0.2.9': + resolution: {integrity: sha512-LPTCTSVp+L2JoLdYvu/281GqBn/gWjEBsRO3OMlqY3+JGbvhsz7IT9oYDZwvn3+PWddR3djCz/MDdqd3JST8FA==} + peerDependencies: + '@aptos-labs/ts-sdk': ^1.33.1 || ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 + + '@identity-connect/dapp-sdk@0.11.2': + resolution: {integrity: sha512-ZA8zeWpMaJMMGkGzzAPDPB4E0vafEbACVjQNV6RVSuDe3k5ALSAXqimZF9L7A6Jajd/Jj+jAEUGk2HOcRGmaCQ==} + peerDependencies: + '@aptos-labs/ts-sdk': ^1.33.1 || ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 + '@aptos-labs/wallet-standard': ^0.5.0 + + '@identity-connect/wallet-api@0.1.4': + resolution: {integrity: sha512-nXEfUYl1t9mgQu1RRmqH7lcWnsxet5IWtnsno5Vx5jw8PibVZDD5kgy5sZ3k/Brvw8DlhKPIjDwcYNAgcNHhvg==} + peerDependencies: + '@aptos-labs/ts-sdk': ^1.33.1 || ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 + aptos: ^1.20.0 + '@img/sharp-darwin-arm64@0.34.3': resolution: {integrity: sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -423,6 +652,36 @@ packages: cpu: [x64] os: [win32] + '@intentui/icons@1.11.0': + resolution: {integrity: sha512-5Bh1HTvzAdLSDDLPauDRlZBdXkhJ6J1yFrSuktHC1ISHK9cjB8Kox40g102MC1H+NHj4UhlWFH9SohDVnGueyw==} + peerDependencies: + react: ^19.1.0 + react-dom: ^19.1.0 + + '@isaacs/fs-minipass@4.0.1': + resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} + engines: {node: '>=18.0.0'} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@keyvhq/core@1.6.26': + resolution: {integrity: sha512-0jy/fOVCYdo3MImM3yjdHuFZNkycPmEAq0v+UGt0dRltnXccgQ+7vCdCNbLpgP3688g5Mw8L+0vcRt5MK53UPA==} + engines: {node: '>= 14'} + '@next/env@15.5.0': resolution: {integrity: sha512-sDaprBAfzCQiOgo2pO+LhnV0Wt2wBgartjrr+dpcTORYVnnXD0gwhHhiiyIih9hQbq+JnbqH4odgcFWhqCGidw==} @@ -474,462 +733,2716 @@ packages: cpu: [x64] os: [win32] - '@swc/helpers@0.5.15': - resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - - '@types/node@22.15.3': - resolution: {integrity: sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw==} + '@noble/ciphers@1.3.0': + resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==} + engines: {node: ^14.21.3 || >=16} - '@types/node@22.18.6': - resolution: {integrity: sha512-r8uszLPpeIWbNKtvWRt/DbVi5zbqZyj1PTmhRMqBMvDnaz1QpmSKujUtJLrqGZeoM8v72MfYggDceY4K1itzWQ==} + '@noble/curves@1.2.0': + resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} - '@types/prop-types@15.7.15': - resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} + '@noble/curves@1.9.1': + resolution: {integrity: sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==} + engines: {node: ^14.21.3 || >=16} - '@types/react-dom@18.3.7': - resolution: {integrity: sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==} - peerDependencies: - '@types/react': ^18.0.0 + '@noble/curves@1.9.7': + resolution: {integrity: sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==} + engines: {node: ^14.21.3 || >=16} - '@types/react@18.3.24': - resolution: {integrity: sha512-0dLEBsA1kI3OezMBF8nSsb7Nk19ZnsyE1LLhB8r27KbgU5H4pvuqZLdtE+aUkJVoXgTVuA+iLIwmZ0TuK4tx6A==} + '@noble/hashes@1.3.2': + resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} + engines: {node: '>= 16'} - caniuse-lite@1.0.30001736: - resolution: {integrity: sha512-ImpN5gLEY8gWeqfLUyEF4b7mYWcYoR2Si1VhnrbM4JizRFmfGaAQ12PhNykq6nvI4XvKLrsp8Xde74D5phJOSw==} + '@noble/hashes@1.3.3': + resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} + engines: {node: '>= 16'} - client-only@0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + '@noble/hashes@1.8.0': + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} + engines: {node: ^14.21.3 || >=16} - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + '@radix-ui/primitive@1.1.3': + resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + '@radix-ui/react-arrow@1.1.7': + resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + '@radix-ui/react-collapsible@1.1.12': + resolution: {integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} + '@radix-ui/react-collection@1.1.7': + resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + '@radix-ui/react-compose-refs@1.1.2': + resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - detect-libc@2.0.4: - resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} - engines: {node: '>=8'} + '@radix-ui/react-context@1.1.2': + resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - esbuild@0.25.10: - resolution: {integrity: sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==} - engines: {node: '>=18'} - hasBin: true + '@radix-ui/react-dialog@1.1.15': + resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] + '@radix-ui/react-direction@1.1.1': + resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - get-tsconfig@4.10.1: - resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} + '@radix-ui/react-dismissable-layer@1.1.11': + resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + '@radix-ui/react-dropdown-menu@2.1.16': + resolution: {integrity: sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + '@radix-ui/react-focus-guards@1.1.3': + resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true + '@radix-ui/react-focus-scope@1.1.7': + resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true + '@radix-ui/react-id@1.1.1': + resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - next@15.5.0: - resolution: {integrity: sha512-N1lp9Hatw3a9XLt0307lGB4uTKsXDhyOKQo7uYMzX4i0nF/c27grcGXkLdb7VcT8QPYLBa8ouIyEoUQJ2OyeNQ==} - engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} - hasBin: true + '@radix-ui/react-menu@2.1.16': + resolution: {integrity: sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==} peerDependencies: - '@opentelemetry/api': ^1.1.0 - '@playwright/test': ^1.51.1 - babel-plugin-react-compiler: '*' - react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 - react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 - sass: ^1.3.0 + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@opentelemetry/api': + '@types/react': optional: true - '@playwright/test': + '@types/react-dom': optional: true - babel-plugin-react-compiler: + + '@radix-ui/react-popper@1.2.8': + resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': optional: true - sass: + '@types/react-dom': optional: true - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + '@radix-ui/react-portal@1.1.9': + resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} + '@radix-ui/react-presence@1.1.5': + resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - react-dom@18.3.1: - resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + '@radix-ui/react-primitive@2.1.3': + resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} peerDependencies: - react: ^18.3.1 + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - react@18.3.1: - resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} - engines: {node: '>=0.10.0'} + '@radix-ui/react-roving-focus@1.1.11': + resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + '@radix-ui/react-slot@1.2.3': + resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - scheduler@0.23.2: - resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + '@radix-ui/react-tabs@1.1.13': + resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true - semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} - engines: {node: '>=10'} - hasBin: true + '@radix-ui/react-use-callback-ref@1.1.1': + resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - sharp@0.34.3: - resolution: {integrity: sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@radix-ui/react-use-controllable-state@1.2.2': + resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + '@radix-ui/react-use-effect-event@0.0.2': + resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} + '@radix-ui/react-use-escape-keydown@1.1.1': + resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - styled-jsx@5.1.6: - resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} - engines: {node: '>= 12.0.0'} + '@radix-ui/react-use-layout-effect@1.1.1': + resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} peerDependencies: - '@babel/core': '*' - babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: - '@babel/core': + '@types/react': optional: true - babel-plugin-macros: + + '@radix-ui/react-use-rect@1.1.1': + resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': optional: true - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + '@radix-ui/react-use-size@1.1.1': + resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - tsx@4.20.5: - resolution: {integrity: sha512-+wKjMNU9w/EaQayHXb7WA7ZaHY6hN8WgfvHNQ3t1PnU91/7O8TcTnIhCDYTZwnt8JsO9IBqZ30Ln1r7pPF52Aw==} - engines: {node: '>=18.0.0'} + '@radix-ui/rect@1.1.1': + resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + + '@scure/base@1.1.9': + resolution: {integrity: sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==} + + '@scure/base@1.2.6': + resolution: {integrity: sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==} + + '@scure/bip32@1.7.0': + resolution: {integrity: sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==} + + '@scure/bip39@1.2.1': + resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==} + + '@scure/bip39@1.6.0': + resolution: {integrity: sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==} + + '@shelby-protocol/reed-solomon@0.0.1-experimental.1': + resolution: {integrity: sha512-IIKlaDj6gE6EIh6emojSwafwYbIMdW6Kz1jheKEme+9sw5RkfDA/EjYsVKcv8AKKN53jIxS86cwxj1PekvK/VA==} + + '@shelby-protocol/sdk@0.0.1-experimental.4': + resolution: {integrity: sha512-ISH4xfEUKTLLKyF+hG9i6sbJqjX3S8QIpLPkYOESeojxxTBhQT2k5OdpQcwjZhgoNTuaDF40CRSWkv+YRF4G1w==} + peerDependencies: + '@aptos-labs/ts-sdk': ^2.0.1 || ^3.0.0 || ^4.0.0 || ^5.0.0 + + '@sindresorhus/is@4.6.0': + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} + + '@solana/buffer-layout@4.0.1': + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + + '@solana/codecs-core@2.3.0': + resolution: {integrity: sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/codecs-numbers@2.3.0': + resolution: {integrity: sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/errors@2.3.0': + resolution: {integrity: sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ==} + engines: {node: '>=20.18.0'} hasBin: true + peerDependencies: + typescript: '>=5.3.3' - turbo-darwin-64@2.5.7: - resolution: {integrity: sha512-c7QvEnTuBjKcw7HvVIoAe0qrmKlUgF2xYGnewICfvwruOpjGcKMKhDLiqZqbkYytr4eCgXTku4UCarVABsM9KA==} + '@solana/wallet-adapter-base@0.9.27': + resolution: {integrity: sha512-kXjeNfNFVs/NE9GPmysBRKQ/nf+foSaq3kfVSeMcO/iVgigyRmB551OjU3WyAolLG/1jeEfKLqF9fKwMCRkUqg==} + engines: {node: '>=20'} + peerDependencies: + '@solana/web3.js': ^1.98.0 + + '@solana/wallet-standard-chains@1.1.1': + resolution: {integrity: sha512-Us3TgL4eMVoVWhuC4UrePlYnpWN+lwteCBlhZDUhFZBJ5UMGh94mYPXno3Ho7+iHPYRtuCi/ePvPcYBqCGuBOw==} + engines: {node: '>=16'} + + '@solana/wallet-standard-features@1.3.0': + resolution: {integrity: sha512-ZhpZtD+4VArf6RPitsVExvgkF+nGghd1rzPjd97GmBximpnt1rsUxMOEyoIEuH3XBxPyNB6Us7ha7RHWQR+abg==} + engines: {node: '>=16'} + + '@solana/wallet-standard-util@1.1.2': + resolution: {integrity: sha512-rUXFNP4OY81Ddq7qOjQV4Kmkozx4wjYAxljvyrqPx8Ycz0FYChG/hQVWqvgpK3sPsEaO/7ABG1NOACsyAKWNOA==} + engines: {node: '>=16'} + + '@solana/wallet-standard-wallet-adapter-base@1.1.4': + resolution: {integrity: sha512-Q2Rie9YaidyFA4UxcUIxUsvynW+/gE2noj/Wmk+IOwDwlVrJUAXCvFaCNsPDSyKoiYEKxkSnlG13OA1v08G4iw==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.98.0 + bs58: ^6.0.0 + + '@solana/web3.js@1.98.4': + resolution: {integrity: sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw==} + + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + + '@szmarczak/http-timer@4.0.6': + resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} + engines: {node: '>=10'} + + '@tailwindcss/node@4.1.13': + resolution: {integrity: sha512-eq3ouolC1oEFOAvOMOBAmfCIqZBJuvWvvYWh5h5iOYfe1HFC6+GZ6EIL0JdM3/niGRJmnrOc+8gl9/HGUaaptw==} + + '@tailwindcss/oxide-android-arm64@4.1.13': + resolution: {integrity: sha512-BrpTrVYyejbgGo57yc8ieE+D6VT9GOgnNdmh5Sac6+t0m+v+sKQevpFVpwX3pBrM2qKrQwJ0c5eDbtjouY/+ew==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@tailwindcss/oxide-darwin-arm64@4.1.13': + resolution: {integrity: sha512-YP+Jksc4U0KHcu76UhRDHq9bx4qtBftp9ShK/7UGfq0wpaP96YVnnjFnj3ZFrUAjc5iECzODl/Ts0AN7ZPOANQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@tailwindcss/oxide-darwin-x64@4.1.13': + resolution: {integrity: sha512-aAJ3bbwrn/PQHDxCto9sxwQfT30PzyYJFG0u/BWZGeVXi5Hx6uuUOQEI2Fa43qvmUjTRQNZnGqe9t0Zntexeuw==} + engines: {node: '>= 10'} cpu: [x64] os: [darwin] - turbo-darwin-arm64@2.5.7: - resolution: {integrity: sha512-3IqKiAxNHny58KPK5Ok462WTTBzedeOtpnb/Yt4VsgvOhe85YFzqiRuor35+704wv52dPa2qudI3MFj3YWmwkQ==} + '@tailwindcss/oxide-freebsd-x64@4.1.13': + resolution: {integrity: sha512-Wt8KvASHwSXhKE/dJLCCWcTSVmBj3xhVhp/aF3RpAhGeZ3sVo7+NTfgiN8Vey/Fi8prRClDs6/f0KXPDTZE6nQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.13': + resolution: {integrity: sha512-mbVbcAsW3Gkm2MGwA93eLtWrwajz91aXZCNSkGTx/R5eb6KpKD5q8Ueckkh9YNboU8RH7jiv+ol/I7ZyQ9H7Bw==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-gnu@4.1.13': + resolution: {integrity: sha512-wdtfkmpXiwej/yoAkrCP2DNzRXCALq9NVLgLELgLim1QpSfhQM5+ZxQQF8fkOiEpuNoKLp4nKZ6RC4kmeFH0HQ==} + engines: {node: '>= 10'} cpu: [arm64] - os: [darwin] + os: [linux] + + '@tailwindcss/oxide-linux-arm64-musl@4.1.13': + resolution: {integrity: sha512-hZQrmtLdhyqzXHB7mkXfq0IYbxegaqTmfa1p9MBj72WPoDD3oNOh1Lnxf6xZLY9C3OV6qiCYkO1i/LrzEdW2mg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-gnu@4.1.13': + resolution: {integrity: sha512-uaZTYWxSXyMWDJZNY1Ul7XkJTCBRFZ5Fo6wtjrgBKzZLoJNrG+WderJwAjPzuNZOnmdrVg260DKwXCFtJ/hWRQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-linux-x64-musl@4.1.13': + resolution: {integrity: sha512-oXiPj5mi4Hdn50v5RdnuuIms0PVPI/EG4fxAfFiIKQh5TgQgX7oSuDWntHW7WNIi/yVLAiS+CRGW4RkoGSSgVQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@tailwindcss/oxide-wasm32-wasi@4.1.13': + resolution: {integrity: sha512-+LC2nNtPovtrDwBc/nqnIKYh/W2+R69FA0hgoeOn64BdCX522u19ryLh3Vf3F8W49XBcMIxSe665kwy21FkhvA==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.13': + resolution: {integrity: sha512-dziTNeQXtoQ2KBXmrjCxsuPk3F3CQ/yb7ZNZNA+UkNTeiTGgfeh+gH5Pi7mRncVgcPD2xgHvkFCh/MhZWSgyQg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@tailwindcss/oxide-win32-x64-msvc@4.1.13': + resolution: {integrity: sha512-3+LKesjXydTkHk5zXX01b5KMzLV1xl2mcktBJkje7rhFUpUlYJy7IMOLqjIRQncLTa1WZZiFY/foAeB5nmaiTw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@tailwindcss/oxide@4.1.13': + resolution: {integrity: sha512-CPgsM1IpGRa880sMbYmG1s4xhAy3xEt1QULgTJGQmZUeNgXFR7s1YxYygmJyBGtou4SyEosGAGEeYqY7R53bIA==} + engines: {node: '>= 10'} + + '@tailwindcss/postcss@4.1.13': + resolution: {integrity: sha512-HLgx6YSFKJT7rJqh9oJs/TkBFhxuMOfUKSBEPYwV+t78POOBsdQ7crhZLzwcH3T0UyUuOzU/GK5pk5eKr3wCiQ==} + + '@telegram-apps/bridge@1.9.2': + resolution: {integrity: sha512-SJLcNWLXhbbZr9MiqFH/g2ceuitSJKMxUIZysK4zUNyTUNuonrQG80Q/yrO+XiNbKUj8WdDNM86NBARhuyyinQ==} + deprecated: This package is not supported anymore. Use @tma.js/bridge instead + + '@telegram-apps/signals@1.1.2': + resolution: {integrity: sha512-1P1kdCLX7MfETGPxH7f3UZKIsdE7Tz5S7QmN4Km1sbYQMakD5Bi1NecSMR7/wnHp50gWMI1JzENcMtCEmouhSg==} + + '@telegram-apps/toolkit@1.1.1': + resolution: {integrity: sha512-+vhKx6ngfvjyTE6Xagl3z1TPVbfx5s7xAkcYzCdHYUo6T60jLIqLgyZMcI1UPoIAMuMu1pHoO+p8QNCj/+tFmw==} + + '@telegram-apps/transformers@1.2.2': + resolution: {integrity: sha512-vvMwXckd1D7Ozc0h66PSUwF5QLrRV9HlGJFFeBuUex8QEk5mSPtsJkLiqB8aBbwuFDa91+TUSM/CxqPZO/e9YQ==} + deprecated: This package is not supported anymore. Use @tma.js/transfomers instead + + '@telegram-apps/types@1.2.1': + resolution: {integrity: sha512-so4HLh7clur0YyMthi9KVIgWoGpZdXlFOuQjk3+Q5NAvJZ11nAheBSwPlGw/Ko92+zwvrSBE/lQyN2+p17RP+w==} + deprecated: This package is not supported anymore. Use @tma.js/types instead + + '@types/cacheable-request@6.0.3': + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/http-cache-semantics@4.0.4': + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + + '@types/keyv@3.1.4': + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@22.18.6': + resolution: {integrity: sha512-r8uszLPpeIWbNKtvWRt/DbVi5zbqZyj1PTmhRMqBMvDnaz1QpmSKujUtJLrqGZeoM8v72MfYggDceY4K1itzWQ==} + + '@types/node@22.7.5': + resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==} + + '@types/prop-types@15.7.15': + resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} + + '@types/react-dom@18.3.7': + resolution: {integrity: sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==} + peerDependencies: + '@types/react': ^18.0.0 + + '@types/react@18.3.24': + resolution: {integrity: sha512-0dLEBsA1kI3OezMBF8nSsb7Nk19ZnsyE1LLhB8r27KbgU5H4pvuqZLdtE+aUkJVoXgTVuA+iLIwmZ0TuK4tx6A==} + + '@types/responselike@1.0.3': + resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} + + '@types/uuid@8.3.4': + resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} + + '@types/ws@7.4.7': + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + + '@wallet-standard/app@1.1.0': + resolution: {integrity: sha512-3CijvrO9utx598kjr45hTbbeeykQrQfKmSnxeWOgU25TOEpvcipD/bYDQWIqUv1Oc6KK4YStokSMu/FBNecGUQ==} + engines: {node: '>=16'} + + '@wallet-standard/base@1.1.0': + resolution: {integrity: sha512-DJDQhjKmSNVLKWItoKThJS+CsJQjR9AOBOirBVT1F9YpRyC9oYHE+ZnSf8y8bxUphtKqdQMPVQ2mHohYdRvDVQ==} + engines: {node: '>=16'} + + '@wallet-standard/core@1.1.1': + resolution: {integrity: sha512-5Xmjc6+Oe0hcPfVc5n8F77NVLwx1JVAoCVgQpLyv/43/bhtIif+Gx3WUrDlaSDoM8i2kA2xd6YoFbHCxs+e0zA==} + engines: {node: '>=16'} + + '@wallet-standard/errors@0.1.1': + resolution: {integrity: sha512-V8Ju1Wvol8i/VDyQOHhjhxmMVwmKiwyxUZBnHhtiPZJTWY0U/Shb2iEWyGngYEbAkp2sGTmEeNX1tVyGR7PqNw==} + engines: {node: '>=16'} + hasBin: true + + '@wallet-standard/features@1.1.0': + resolution: {integrity: sha512-hiEivWNztx73s+7iLxsuD1sOJ28xtRix58W7Xnz4XzzA/pF0+aicnWgjOdA10doVDEDZdUuZCIIqG96SFNlDUg==} + engines: {node: '>=16'} + + '@wallet-standard/wallet@1.1.0': + resolution: {integrity: sha512-Gt8TnSlDZpAl+RWOOAB/kuvC7RpcdWAlFbHNoi4gsXsfaWa1QCT6LBcfIYTPdOZC9OVZUDwqGuGAcqZejDmHjg==} + engines: {node: '>=16'} + + abitype@1.1.0: + resolution: {integrity: sha512-6Vh4HcRxNMLA0puzPjM5GBgT4aAcFGKZzSgAXvuZ27shJP6NEpielTuqbBmZILR5/xd0PizkBGy5hReKz9jl5A==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3.22.0 || ^4.0.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + + aes-js@4.0.0-beta.5: + resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} + + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} + engines: {node: '>= 8.0.0'} + + aptos@1.21.0: + resolution: {integrity: sha512-PRKjoFgL8tVEc9+oS7eJUv8GNxx8n3+0byH2+m7CP3raYOD6yFKOecuwjVMIJmgfpjp6xH0P0HDMGZAXmSyU0Q==} + engines: {node: '>=11.0.0'} + deprecated: Package aptos is no longer supported, please migrate to https://www.npmjs.com/package/@aptos-labs/ts-sdk + + aria-hidden@1.2.6: + resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} + engines: {node: '>=10'} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + autoprefixer@10.4.21: + resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + axios@1.12.2: + resolution: {integrity: sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==} + + axios@1.7.4: + resolution: {integrity: sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==} + + base-x@3.0.11: + resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + baseline-browser-mapping@2.8.6: + resolution: {integrity: sha512-wrH5NNqren/QMtKUEEJf7z86YjfqW/2uw3IL3/xpqZUC95SSVIFXYQeeGjL6FT/X68IROu6RMehZQS5foy2BXw==} + hasBin: true + + bn.js@5.2.2: + resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==} + + borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + + browserslist@4.26.2: + resolution: {integrity: sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bufferutil@4.0.9: + resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==} + engines: {node: '>=6.14.2'} + + cacheable-lookup@5.0.4: + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} + engines: {node: '>=10.6.0'} + + cacheable-request@7.0.4: + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} + engines: {node: '>=8'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + caniuse-lite@1.0.30001743: + resolution: {integrity: sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw==} + + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chownr@3.0.0: + resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} + engines: {node: '>=18'} + + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + + clone-response@1.0.3: + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@13.1.0: + resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} + engines: {node: '>=18'} + + commander@14.0.1: + resolution: {integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==} + engines: {node: '>=20'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + + defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + detect-libc@2.0.4: + resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} + engines: {node: '>=8'} + + detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + ed2curve@0.3.0: + resolution: {integrity: sha512-8w2fmmq3hv9rCrcI7g9hms2pMunQr1JINfcjwR9tAyZqhtyaMN991lF/ZfHfr5tzZQ8c7y7aBgZbjfbd0fjFwQ==} + + electron-to-chromium@1.5.222: + resolution: {integrity: sha512-gA7psSwSwQRE60CEoLz6JBCQPIxNeuzB2nL8vE03GK/OHxlvykbLyeiumQy1iH5C2f3YbRAZpGCMT12a/9ih9w==} + + end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + + enhanced-resolve@5.18.3: + resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} + engines: {node: '>=10.13.0'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + + esbuild@0.25.10: + resolution: {integrity: sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + ethers@6.15.0: + resolution: {integrity: sha512-Kf/3ZW54L4UT0pZtsY/rf+EkBU7Qi5nnhonjUb8yTXcxH3cdcWrV2cRyk0Xk/4jK6OoHhxxZHriyhje20If2hQ==} + engines: {node: '>=14.0.0'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + + fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + + follow-redirects@1.15.11: + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + + form-data@4.0.4: + resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} + engines: {node: '>= 6'} + + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + + framer-motion@12.23.19: + resolution: {integrity: sha512-AaWAohgTs2+wUoDdpJaaqMgV6vkm1uzzDlZUItem45linLrFiFqi4iw7bryhcVqu4loaaSLtSjAojfCAB3qczw==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + get-tsconfig@4.10.1: + resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + got@11.8.6: + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} + engines: {node: '>=10.19.0'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} + + http2-wrapper@1.0.3: + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} + engines: {node: '>=10.19.0'} + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + + isomorphic-ws@4.0.1: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + + isows@1.0.7: + resolution: {integrity: sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg==} + peerDependencies: + ws: '*' + + jayson@4.2.0: + resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==} + engines: {node: '>=8'} + hasBin: true + + jiti@2.6.0: + resolution: {integrity: sha512-VXe6RjJkBPj0ohtqaO8vSWP3ZhAKo66fKrFNCll4BTcwljPLz03pCbaNKfzGP5MbrCYcbJ7v0nOYYwUzTEIdXQ==} + hasBin: true + + js-base64@3.7.8: + resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + jwt-decode@4.0.0: + resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} + engines: {node: '>=18'} + + lightningcss-darwin-arm64@1.30.1: + resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.30.1: + resolution: {integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.30.1: + resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.30.1: + resolution: {integrity: sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.30.1: + resolution: {integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.30.1: + resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.30.1: + resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.30.1: + resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.30.1: + resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.30.1: + resolution: {integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.30.1: + resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==} + engines: {node: '>= 12.0.0'} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lowercase-keys@2.0.0: + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} + + lucide-react@0.544.0: + resolution: {integrity: sha512-t5tS44bqd825zAW45UQxpG2CvcC4urOwn2TrwSH8u+MjeE+1NnWl6QqeQ/6NdjMqdOygyiT9p3Ev0p1NJykxjw==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + magic-string@0.30.19: + resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mimic-response@1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} + + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@3.1.0: + resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} + engines: {node: '>= 18'} + + mipd@0.0.7: + resolution: {integrity: sha512-aAPZPNDQ3uMTdKbuO2YmAw2TxLHO0moa4YKAyETM/DTj5FloZo+a+8tU+iv4GmW+sOxKLSRwcSFuczk+Cpt6fg==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + + motion-dom@12.23.19: + resolution: {integrity: sha512-ivUCJ0zVZt7S++D8+ONeefkJj/8JlpCRYzGegLdXr8Z9aWg64KyljdaCGVa54Vv0K8hNE7vRQSaQve7V5l3rMw==} + + motion-utils@12.23.6: + resolution: {integrity: sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==} + + motion@12.23.19: + resolution: {integrity: sha512-/GGg12T6gPllKgwftzlmPe4fbPsmjp6beb1qpHIwLte3KLwFXymSnqZDwWdSjGZH/sF3slYF8J2VAWzAkXwc0w==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + next-themes@0.4.6: + resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==} + peerDependencies: + react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + + next@15.5.0: + resolution: {integrity: sha512-N1lp9Hatw3a9XLt0307lGB4uTKsXDhyOKQo7uYMzX4i0nF/c27grcGXkLdb7VcT8QPYLBa8ouIyEoUQJ2OyeNQ==} + engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.51.1 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + + node-releases@2.0.21: + resolution: {integrity: sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==} + + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + + normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + ox@0.9.6: + resolution: {integrity: sha512-8SuCbHPvv2eZLYXrNmC0EC12rdzXQLdhnOMlHDW2wiCPLxBrOOJwX5L5E61by+UjTPOryqQiRSnjIKCI+GykKg==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + p-cancelable@2.1.1: + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + poseidon-lite@0.2.1: + resolution: {integrity: sha512-xIr+G6HeYfOhCuswdqcFpSX47SPhm0EpisWJ6h7fHlWwaVIvH3dLnejpatrtw6Xc6HaLrpq05y7VRfvDmDGIog==} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + pump@3.0.3: + resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} + + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + + react-remove-scroll-bar@2.3.8: + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-remove-scroll@2.7.1: + resolution: {integrity: sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react-style-singleton@2.2.3: + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react-use-measure@2.1.7: + resolution: {integrity: sha512-KrvcAo13I/60HpwGO5jpW7E9DfusKyLPLvuHlUyP5zqnmAPhNc6qTRjUQrdTADl0lpPpDVU2/Gg51UlOGHXbdg==} + peerDependencies: + react: '>=16.13' + react-dom: '>=16.13' + peerDependenciesMeta: + react-dom: + optional: true + + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + + resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + responselike@2.0.1: + resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + + rpc-websockets@9.1.3: + resolution: {integrity: sha512-I+kNjW0udB4Fetr3vvtRuYZJS0PcSPyyvBcH5sDdoV8DFs5E4W2pTr7aiMlKfPxANTClP9RlqCPolj9dd5MsEA==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + + sharp@0.34.3: + resolution: {integrity: sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + + sonner@2.0.7: + resolution: {integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + stream-chain@2.2.5: + resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==} + + stream-json@1.9.1: + resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==} + + styled-jsx@5.1.6: + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + + superstruct@2.0.2: + resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} + engines: {node: '>=14.0.0'} + + tailwind-merge@3.3.1: + resolution: {integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==} + + tailwindcss@4.1.13: + resolution: {integrity: sha512-i+zidfmTqtwquj4hMEwdjshYYgMbOrPzb9a0M3ZgNa0JMoZeFC6bxZvO8yr8ozS6ix2SDz0+mvryPeBs2TFE+w==} + + tapable@2.2.3: + resolution: {integrity: sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==} + engines: {node: '>=6'} + + tar@7.5.1: + resolution: {integrity: sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==} + engines: {node: '>=18'} + + text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsx@4.20.5: + resolution: {integrity: sha512-+wKjMNU9w/EaQayHXb7WA7ZaHY6hN8WgfvHNQ3t1PnU91/7O8TcTnIhCDYTZwnt8JsO9IBqZ30Ln1r7pPF52Aw==} + engines: {node: '>=18.0.0'} + hasBin: true + + turbo-darwin-64@2.5.7: + resolution: {integrity: sha512-c7QvEnTuBjKcw7HvVIoAe0qrmKlUgF2xYGnewICfvwruOpjGcKMKhDLiqZqbkYytr4eCgXTku4UCarVABsM9KA==} + cpu: [x64] + os: [darwin] + + turbo-darwin-arm64@2.5.7: + resolution: {integrity: sha512-3IqKiAxNHny58KPK5Ok462WTTBzedeOtpnb/Yt4VsgvOhe85YFzqiRuor35+704wv52dPa2qudI3MFj3YWmwkQ==} + cpu: [arm64] + os: [darwin] + + turbo-linux-64@2.5.7: + resolution: {integrity: sha512-4mHvDIzcIibmP/6mUz//dsocUB5kKRKRoiEblwPho9CmDAdygDC4wIXH+G8AGTM2eagrBRYiuQhHGlvoqmkFqA==} + cpu: [x64] + os: [linux] + + turbo-linux-arm64@2.5.7: + resolution: {integrity: sha512-tIwIeiGk4vZkGVambP++teCBChGdhKyZ5wErfSRacYcBHMo2dqT2qFXUlhY7ENzgBUxZX6mO6OHptTb59xrmOw==} + cpu: [arm64] + os: [linux] + + turbo-windows-64@2.5.7: + resolution: {integrity: sha512-N8hmV/1YyBCTuPSP+ymquWQM+JXsPbBDcNTzbVkgtLGqskAubon/07lw6w6InJe+2XpW7cLkCkiOlzOzrXYODg==} + cpu: [x64] + os: [win32] + + turbo-windows-arm64@2.5.7: + resolution: {integrity: sha512-Sp2RjE6NiJESSyml+skPU6Dn8U4Gc+DPQzOCyYSuIp/XflWV13xRCrhefH+Gf/KA3qi+m9IDRAT3VAKhXQtAWg==} + cpu: [arm64] + os: [win32] + + turbo@2.5.7: + resolution: {integrity: sha512-13o+6FDe8yDUL7TpocHWw6jQBKmmVOvi5cMemkmjYsuu5tG8hylYudsfOzPsybz4VGzPDoyyr4+nNS82HgqxBw==} + hasBin: true + + tw-animate-css@1.3.8: + resolution: {integrity: sha512-Qrk3PZ7l7wUcGYhwZloqfkWCmaXZAoqjkdbIDvzfGshwGtexa/DAs9koXxIkrpEasyevandomzCBAV1Yyop5rw==} + + tweetnacl@1.0.3: + resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} + + typescript@5.8.2: + resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + use-callback-ref@1.3.3: + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + use-sidecar@1.1.3: + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + viem@2.37.8: + resolution: {integrity: sha512-mL+5yvCQbRIR6QvngDQMfEiZTfNWfd+/QL5yFaOoYbpH3b1Q2ddwF7YG2eI2AcYSh9LE1gtUkbzZLFUAVyj4oQ==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + yallist@5.0.0: + resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} + engines: {node: '>=18'} + + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + +snapshots: + + '@adraffy/ens-normalize@1.10.1': {} + + '@adraffy/ens-normalize@1.11.1': {} + + '@alloc/quick-lru@5.2.0': {} + + '@aptos-connect/wallet-adapter-plugin@2.5.2(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@telegram-apps/bridge@1.9.2)(@wallet-standard/core@1.1.1)(aptos@1.21.0)': + dependencies: + '@aptos-connect/wallet-api': 0.3.2(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1)(aptos@1.21.0) + '@aptos-labs/ts-sdk': 5.1.0(got@11.8.6) + '@aptos-labs/wallet-standard': 0.5.2(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1) + '@identity-connect/crypto': 0.2.9(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1)(aptos@1.21.0) + '@identity-connect/dapp-sdk': 0.11.2(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@aptos-labs/wallet-standard@0.5.2(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1))(@telegram-apps/bridge@1.9.2)(@wallet-standard/core@1.1.1)(aptos@1.21.0) + transitivePeerDependencies: + - '@telegram-apps/bridge' + - '@wallet-standard/core' + - aptos + - debug + + '@aptos-connect/wallet-api@0.3.2(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1)(aptos@1.21.0)': + dependencies: + '@aptos-labs/ts-sdk': 5.1.0(got@11.8.6) + '@aptos-labs/wallet-standard': 0.5.2(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1) + '@identity-connect/api': 0.7.0 + aptos: 1.21.0 + transitivePeerDependencies: + - '@wallet-standard/core' + + '@aptos-connect/web-transport@0.3.2(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@aptos-labs/wallet-standard@0.5.2(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1))(@telegram-apps/bridge@1.9.2)(@wallet-standard/core@1.1.1)(aptos@1.21.0)': + dependencies: + '@aptos-connect/wallet-api': 0.3.2(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1)(aptos@1.21.0) + '@aptos-labs/ts-sdk': 5.1.0(got@11.8.6) + '@aptos-labs/wallet-standard': 0.5.2(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1) + '@telegram-apps/bridge': 1.9.2 + aptos: 1.21.0 + uuid: 9.0.1 + transitivePeerDependencies: + - '@wallet-standard/core' + + '@aptos-labs/aptos-cli@1.0.2': + dependencies: + commander: 12.1.0 + + '@aptos-labs/aptos-client@0.1.1': + dependencies: + axios: 1.7.4 + got: 11.8.6 + transitivePeerDependencies: + - debug + + '@aptos-labs/aptos-client@2.0.0(got@11.8.6)': + dependencies: + got: 11.8.6 + + '@aptos-labs/derived-wallet-base@0.8.0(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1)': + dependencies: + '@aptos-labs/ts-sdk': 5.1.0(got@11.8.6) + '@aptos-labs/wallet-standard': 0.5.2(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1) + transitivePeerDependencies: + - '@wallet-standard/core' + + '@aptos-labs/derived-wallet-ethereum@0.8.0(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1)(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)': + dependencies: + '@aptos-labs/derived-wallet-base': 0.8.0(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1) + '@aptos-labs/siwa': 0.4.0(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1) + '@aptos-labs/ts-sdk': 5.1.0(got@11.8.6) + '@aptos-labs/wallet-standard': 0.5.2(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1) + '@wallet-standard/app': 1.1.0 + ethers: 6.15.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + mipd: 0.0.7(typescript@5.8.2) + viem: 2.37.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - '@wallet-standard/core' + - bufferutil + - typescript + - utf-8-validate + - zod + + '@aptos-labs/derived-wallet-ethereum@0.8.0(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1)(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76)': + dependencies: + '@aptos-labs/derived-wallet-base': 0.8.0(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1) + '@aptos-labs/siwa': 0.4.0(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1) + '@aptos-labs/ts-sdk': 5.1.0(got@11.8.6) + '@aptos-labs/wallet-standard': 0.5.2(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1) + '@wallet-standard/app': 1.1.0 + ethers: 6.15.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + mipd: 0.0.7(typescript@5.8.2) + viem: 2.37.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76) + transitivePeerDependencies: + - '@wallet-standard/core' + - bufferutil + - typescript + - utf-8-validate + - zod + + '@aptos-labs/derived-wallet-solana@0.8.0(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1)(bs58@4.0.1)(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)': + dependencies: + '@aptos-labs/derived-wallet-base': 0.8.0(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1) + '@aptos-labs/siwa': 0.4.0(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1) + '@aptos-labs/ts-sdk': 5.1.0(got@11.8.6) + '@aptos-labs/wallet-standard': 0.5.2(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1) + '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)) + '@solana/wallet-standard-util': 1.1.2 + '@solana/wallet-standard-wallet-adapter-base': 1.1.4(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10))(bs58@4.0.1) + '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@wallet-standard/app': 1.1.0 + transitivePeerDependencies: + - '@wallet-standard/core' + - bs58 + - bufferutil + - encoding + - typescript + - utf-8-validate + + '@aptos-labs/siwa@0.4.0(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1)': + dependencies: + '@aptos-labs/ts-sdk': 5.1.0(got@11.8.6) + '@aptos-labs/wallet-standard': 0.5.2(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1) + '@noble/hashes': 1.8.0 + transitivePeerDependencies: + - '@wallet-standard/core' + + '@aptos-labs/ts-sdk@5.1.0(got@11.8.6)': + dependencies: + '@aptos-labs/aptos-cli': 1.0.2 + '@aptos-labs/aptos-client': 2.0.0(got@11.8.6) + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + eventemitter3: 5.0.1 + form-data: 4.0.4 + js-base64: 3.7.8 + jwt-decode: 4.0.0 + poseidon-lite: 0.2.1 + transitivePeerDependencies: + - got + + '@aptos-labs/wallet-adapter-core@7.4.0(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@telegram-apps/bridge@1.9.2)(@wallet-standard/core@1.1.1)(aptos@1.21.0)': + dependencies: + '@aptos-connect/wallet-adapter-plugin': 2.5.2(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@telegram-apps/bridge@1.9.2)(@wallet-standard/core@1.1.1)(aptos@1.21.0) + '@aptos-labs/ts-sdk': 5.1.0(got@11.8.6) + '@aptos-labs/wallet-standard': 0.5.2(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1) + buffer: 6.0.3 + eventemitter3: 4.0.7 + tweetnacl: 1.0.3 + transitivePeerDependencies: + - '@telegram-apps/bridge' + - '@wallet-standard/core' + - aptos + - debug + + '@aptos-labs/wallet-adapter-react@7.1.0(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@telegram-apps/bridge@1.9.2)(@types/react@18.3.24)(@wallet-standard/core@1.1.1)(aptos@1.21.0)(react@18.3.1)': + dependencies: + '@aptos-labs/wallet-adapter-core': 7.4.0(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@telegram-apps/bridge@1.9.2)(@wallet-standard/core@1.1.1)(aptos@1.21.0) + '@radix-ui/react-slot': 1.2.3(@types/react@18.3.24)(react@18.3.1) + react: 18.3.1 + transitivePeerDependencies: + - '@aptos-labs/ts-sdk' + - '@telegram-apps/bridge' + - '@types/react' + - '@wallet-standard/core' + - aptos + - debug + + '@aptos-labs/wallet-standard@0.5.2(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1)': + dependencies: + '@aptos-labs/ts-sdk': 5.1.0(got@11.8.6) + '@wallet-standard/core': 1.1.1 + + '@babel/runtime@7.28.4': {} + + '@biomejs/biome@2.0.6': + optionalDependencies: + '@biomejs/cli-darwin-arm64': 2.0.6 + '@biomejs/cli-darwin-x64': 2.0.6 + '@biomejs/cli-linux-arm64': 2.0.6 + '@biomejs/cli-linux-arm64-musl': 2.0.6 + '@biomejs/cli-linux-x64': 2.0.6 + '@biomejs/cli-linux-x64-musl': 2.0.6 + '@biomejs/cli-win32-arm64': 2.0.6 + '@biomejs/cli-win32-x64': 2.0.6 + + '@biomejs/cli-darwin-arm64@2.0.6': + optional: true + + '@biomejs/cli-darwin-x64@2.0.6': + optional: true + + '@biomejs/cli-linux-arm64-musl@2.0.6': + optional: true + + '@biomejs/cli-linux-arm64@2.0.6': + optional: true + + '@biomejs/cli-linux-x64-musl@2.0.6': + optional: true + + '@biomejs/cli-linux-x64@2.0.6': + optional: true + + '@biomejs/cli-win32-arm64@2.0.6': + optional: true + + '@biomejs/cli-win32-x64@2.0.6': + optional: true + + '@emnapi/runtime@1.4.5': + dependencies: + tslib: 2.8.1 + optional: true + + '@esbuild/aix-ppc64@0.25.10': + optional: true + + '@esbuild/android-arm64@0.25.10': + optional: true + + '@esbuild/android-arm@0.25.10': + optional: true + + '@esbuild/android-x64@0.25.10': + optional: true + + '@esbuild/darwin-arm64@0.25.10': + optional: true + + '@esbuild/darwin-x64@0.25.10': + optional: true + + '@esbuild/freebsd-arm64@0.25.10': + optional: true + + '@esbuild/freebsd-x64@0.25.10': + optional: true + + '@esbuild/linux-arm64@0.25.10': + optional: true + + '@esbuild/linux-arm@0.25.10': + optional: true + + '@esbuild/linux-ia32@0.25.10': + optional: true + + '@esbuild/linux-loong64@0.25.10': + optional: true + + '@esbuild/linux-mips64el@0.25.10': + optional: true + + '@esbuild/linux-ppc64@0.25.10': + optional: true + + '@esbuild/linux-riscv64@0.25.10': + optional: true + + '@esbuild/linux-s390x@0.25.10': + optional: true + + '@esbuild/linux-x64@0.25.10': + optional: true + + '@esbuild/netbsd-arm64@0.25.10': + optional: true + + '@esbuild/netbsd-x64@0.25.10': + optional: true + + '@esbuild/openbsd-arm64@0.25.10': + optional: true + + '@esbuild/openbsd-x64@0.25.10': + optional: true + + '@esbuild/openharmony-arm64@0.25.10': + optional: true + + '@esbuild/sunos-x64@0.25.10': + optional: true + + '@esbuild/win32-arm64@0.25.10': + optional: true + + '@esbuild/win32-ia32@0.25.10': + optional: true + + '@esbuild/win32-x64@0.25.10': + optional: true + + '@floating-ui/core@1.7.3': + dependencies: + '@floating-ui/utils': 0.2.10 + + '@floating-ui/dom@1.7.4': + dependencies: + '@floating-ui/core': 1.7.3 + '@floating-ui/utils': 0.2.10 + + '@floating-ui/react-dom@2.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@floating-ui/dom': 1.7.4 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@floating-ui/utils@0.2.10': {} + + '@identity-connect/api@0.7.0': {} + + '@identity-connect/crypto@0.2.9(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1)(aptos@1.21.0)': + dependencies: + '@aptos-connect/wallet-api': 0.3.2(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1)(aptos@1.21.0) + '@aptos-labs/ts-sdk': 5.1.0(got@11.8.6) + '@noble/hashes': 1.8.0 + ed2curve: 0.3.0 + tweetnacl: 1.0.3 + transitivePeerDependencies: + - '@wallet-standard/core' + - aptos + + '@identity-connect/dapp-sdk@0.11.2(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@aptos-labs/wallet-standard@0.5.2(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1))(@telegram-apps/bridge@1.9.2)(@wallet-standard/core@1.1.1)(aptos@1.21.0)': + dependencies: + '@aptos-connect/wallet-api': 0.3.2(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1)(aptos@1.21.0) + '@aptos-connect/web-transport': 0.3.2(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@aptos-labs/wallet-standard@0.5.2(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1))(@telegram-apps/bridge@1.9.2)(@wallet-standard/core@1.1.1)(aptos@1.21.0) + '@aptos-labs/ts-sdk': 5.1.0(got@11.8.6) + '@aptos-labs/wallet-standard': 0.5.2(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1) + '@identity-connect/api': 0.7.0 + '@identity-connect/crypto': 0.2.9(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(@wallet-standard/core@1.1.1)(aptos@1.21.0) + '@identity-connect/wallet-api': 0.1.4(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(aptos@1.21.0) + axios: 1.12.2 + uuid: 9.0.1 + transitivePeerDependencies: + - '@telegram-apps/bridge' + - '@wallet-standard/core' + - aptos + - debug + + '@identity-connect/wallet-api@0.1.4(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))(aptos@1.21.0)': + dependencies: + '@aptos-labs/ts-sdk': 5.1.0(got@11.8.6) + aptos: 1.21.0 + + '@img/sharp-darwin-arm64@0.34.3': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.0 + optional: true + + '@img/sharp-darwin-x64@0.34.3': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.0 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.2.0': + optional: true + + '@img/sharp-libvips-darwin-x64@1.2.0': + optional: true + + '@img/sharp-libvips-linux-arm64@1.2.0': + optional: true + + '@img/sharp-libvips-linux-arm@1.2.0': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.2.0': + optional: true + + '@img/sharp-libvips-linux-s390x@1.2.0': + optional: true + + '@img/sharp-libvips-linux-x64@1.2.0': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.2.0': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.2.0': + optional: true + + '@img/sharp-linux-arm64@0.34.3': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.0 + optional: true + + '@img/sharp-linux-arm@0.34.3': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.0 + optional: true + + '@img/sharp-linux-ppc64@0.34.3': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.2.0 + optional: true + + '@img/sharp-linux-s390x@0.34.3': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.2.0 + optional: true + + '@img/sharp-linux-x64@0.34.3': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.2.0 + optional: true + + '@img/sharp-linuxmusl-arm64@0.34.3': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.2.0 + optional: true + + '@img/sharp-linuxmusl-x64@0.34.3': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.0 + optional: true + + '@img/sharp-wasm32@0.34.3': + dependencies: + '@emnapi/runtime': 1.4.5 + optional: true + + '@img/sharp-win32-arm64@0.34.3': + optional: true + + '@img/sharp-win32-ia32@0.34.3': + optional: true + + '@img/sharp-win32-x64@0.34.3': + optional: true + + '@intentui/icons@1.11.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.28.4 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@isaacs/fs-minipass@4.0.1': + dependencies: + minipass: 7.1.2 + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@keyvhq/core@1.6.26': + dependencies: + json-buffer: 3.0.1 + + '@next/env@15.5.0': {} + + '@next/swc-darwin-arm64@15.5.0': + optional: true + + '@next/swc-darwin-x64@15.5.0': + optional: true + + '@next/swc-linux-arm64-gnu@15.5.0': + optional: true + + '@next/swc-linux-arm64-musl@15.5.0': + optional: true + + '@next/swc-linux-x64-gnu@15.5.0': + optional: true + + '@next/swc-linux-x64-musl@15.5.0': + optional: true + + '@next/swc-win32-arm64-msvc@15.5.0': + optional: true + + '@next/swc-win32-x64-msvc@15.5.0': + optional: true + + '@noble/ciphers@1.3.0': {} + + '@noble/curves@1.2.0': + dependencies: + '@noble/hashes': 1.3.2 + + '@noble/curves@1.9.1': + dependencies: + '@noble/hashes': 1.8.0 + + '@noble/curves@1.9.7': + dependencies: + '@noble/hashes': 1.8.0 + + '@noble/hashes@1.3.2': {} + + '@noble/hashes@1.3.3': {} + + '@noble/hashes@1.8.0': {} + + '@radix-ui/primitive@1.1.3': {} + + '@radix-ui/react-arrow@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) + + '@radix-ui/react-collapsible@1.1.12(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.24)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) + + '@radix-ui/react-collection@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@18.3.24)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) + + '@radix-ui/react-compose-refs@1.1.2(@types/react@18.3.24)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.24 + + '@radix-ui/react-context@1.1.2(@types/react@18.3.24)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.24 + + '@radix-ui/react-dialog@1.1.15(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.24)(react@18.3.1) + aria-hidden: 1.2.6 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.7.1(@types/react@18.3.24)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) + + '@radix-ui/react-direction@1.1.1(@types/react@18.3.24)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.24 + + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@18.3.24)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) + + '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.24)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) + + '@radix-ui/react-focus-guards@1.1.3(@types/react@18.3.24)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.24 + + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.24)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) + + '@radix-ui/react-id@1.1.1(@types/react@18.3.24)(react@18.3.1)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.24)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.24 + + '@radix-ui/react-menu@2.1.16(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.2.3(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.24)(react@18.3.1) + aria-hidden: 1.2.6 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.7.1(@types/react@18.3.24)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) + + '@radix-ui/react-popper@1.2.8(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@floating-ui/react-dom': 2.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-use-rect': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/rect': 1.1.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) + + '@radix-ui/react-portal@1.1.9(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.24)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) + + '@radix-ui/react-presence@1.1.5(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.24)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) + + '@radix-ui/react-primitive@2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-slot': 1.2.3(@types/react@18.3.24)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) + + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-collection': 1.1.7(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.24)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) + + '@radix-ui/react-slot@1.2.3(@types/react@18.3.24)(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.24)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.24 + + '@radix-ui/react-tabs@1.1.13(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-context': 1.1.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-direction': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-id': 1.1.1(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@18.3.7(@types/react@18.3.24))(@types/react@18.3.24)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.24)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.24 + '@types/react-dom': 18.3.7(@types/react@18.3.24) + + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@18.3.24)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.24 + + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@18.3.24)(react@18.3.1)': + dependencies: + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@18.3.24)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.24)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.24 + + '@radix-ui/react-use-effect-event@0.0.2(@types/react@18.3.24)(react@18.3.1)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.24)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.24 + + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@18.3.24)(react@18.3.1)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.24)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.24 + + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@18.3.24)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.24 + + '@radix-ui/react-use-rect@1.1.1(@types/react@18.3.24)(react@18.3.1)': + dependencies: + '@radix-ui/rect': 1.1.1 + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.24 + + '@radix-ui/react-use-size@1.1.1(@types/react@18.3.24)(react@18.3.1)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.24)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.24 - turbo-linux-64@2.5.7: - resolution: {integrity: sha512-4mHvDIzcIibmP/6mUz//dsocUB5kKRKRoiEblwPho9CmDAdygDC4wIXH+G8AGTM2eagrBRYiuQhHGlvoqmkFqA==} - cpu: [x64] - os: [linux] + '@radix-ui/rect@1.1.1': {} - turbo-linux-arm64@2.5.7: - resolution: {integrity: sha512-tIwIeiGk4vZkGVambP++teCBChGdhKyZ5wErfSRacYcBHMo2dqT2qFXUlhY7ENzgBUxZX6mO6OHptTb59xrmOw==} - cpu: [arm64] - os: [linux] + '@scure/base@1.1.9': {} - turbo-windows-64@2.5.7: - resolution: {integrity: sha512-N8hmV/1YyBCTuPSP+ymquWQM+JXsPbBDcNTzbVkgtLGqskAubon/07lw6w6InJe+2XpW7cLkCkiOlzOzrXYODg==} - cpu: [x64] - os: [win32] + '@scure/base@1.2.6': {} - turbo-windows-arm64@2.5.7: - resolution: {integrity: sha512-Sp2RjE6NiJESSyml+skPU6Dn8U4Gc+DPQzOCyYSuIp/XflWV13xRCrhefH+Gf/KA3qi+m9IDRAT3VAKhXQtAWg==} - cpu: [arm64] - os: [win32] + '@scure/bip32@1.7.0': + dependencies: + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + '@scure/base': 1.2.6 - turbo@2.5.7: - resolution: {integrity: sha512-13o+6FDe8yDUL7TpocHWw6jQBKmmVOvi5cMemkmjYsuu5tG8hylYudsfOzPsybz4VGzPDoyyr4+nNS82HgqxBw==} - hasBin: true + '@scure/bip39@1.2.1': + dependencies: + '@noble/hashes': 1.3.3 + '@scure/base': 1.1.9 - typescript@5.8.2: - resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} - engines: {node: '>=14.17'} - hasBin: true + '@scure/bip39@1.6.0': + dependencies: + '@noble/hashes': 1.8.0 + '@scure/base': 1.2.6 - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + '@shelby-protocol/reed-solomon@0.0.1-experimental.1': {} -snapshots: + '@shelby-protocol/sdk@0.0.1-experimental.4(@aptos-labs/ts-sdk@5.1.0(got@11.8.6))': + dependencies: + '@aptos-labs/ts-sdk': 5.1.0(got@11.8.6) + '@shelby-protocol/reed-solomon': 0.0.1-experimental.1 + zod: 3.25.76 - '@biomejs/biome@2.0.6': - optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.0.6 - '@biomejs/cli-darwin-x64': 2.0.6 - '@biomejs/cli-linux-arm64': 2.0.6 - '@biomejs/cli-linux-arm64-musl': 2.0.6 - '@biomejs/cli-linux-x64': 2.0.6 - '@biomejs/cli-linux-x64-musl': 2.0.6 - '@biomejs/cli-win32-arm64': 2.0.6 - '@biomejs/cli-win32-x64': 2.0.6 + '@sindresorhus/is@4.6.0': {} - '@biomejs/cli-darwin-arm64@2.0.6': - optional: true + '@solana/buffer-layout@4.0.1': + dependencies: + buffer: 6.0.3 - '@biomejs/cli-darwin-x64@2.0.6': - optional: true + '@solana/codecs-core@2.3.0(typescript@5.8.2)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.8.2) + typescript: 5.8.2 - '@biomejs/cli-linux-arm64-musl@2.0.6': - optional: true + '@solana/codecs-numbers@2.3.0(typescript@5.8.2)': + dependencies: + '@solana/codecs-core': 2.3.0(typescript@5.8.2) + '@solana/errors': 2.3.0(typescript@5.8.2) + typescript: 5.8.2 - '@biomejs/cli-linux-arm64@2.0.6': - optional: true + '@solana/errors@2.3.0(typescript@5.8.2)': + dependencies: + chalk: 5.6.2 + commander: 14.0.1 + typescript: 5.8.2 - '@biomejs/cli-linux-x64-musl@2.0.6': - optional: true + '@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10))': + dependencies: + '@solana/wallet-standard-features': 1.3.0 + '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@wallet-standard/base': 1.1.0 + '@wallet-standard/features': 1.1.0 + eventemitter3: 5.0.1 - '@biomejs/cli-linux-x64@2.0.6': - optional: true + '@solana/wallet-standard-chains@1.1.1': + dependencies: + '@wallet-standard/base': 1.1.0 - '@biomejs/cli-win32-arm64@2.0.6': - optional: true + '@solana/wallet-standard-features@1.3.0': + dependencies: + '@wallet-standard/base': 1.1.0 + '@wallet-standard/features': 1.1.0 - '@biomejs/cli-win32-x64@2.0.6': - optional: true + '@solana/wallet-standard-util@1.1.2': + dependencies: + '@noble/curves': 1.9.7 + '@solana/wallet-standard-chains': 1.1.1 + '@solana/wallet-standard-features': 1.3.0 - '@emnapi/runtime@1.4.5': + '@solana/wallet-standard-wallet-adapter-base@1.1.4(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10))(bs58@4.0.1)': dependencies: - tslib: 2.8.1 - optional: true + '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)) + '@solana/wallet-standard-chains': 1.1.1 + '@solana/wallet-standard-features': 1.3.0 + '@solana/wallet-standard-util': 1.1.2 + '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10) + '@wallet-standard/app': 1.1.0 + '@wallet-standard/base': 1.1.0 + '@wallet-standard/features': 1.1.0 + '@wallet-standard/wallet': 1.1.0 + bs58: 4.0.1 + + '@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)': + dependencies: + '@babel/runtime': 7.28.4 + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + '@solana/buffer-layout': 4.0.1 + '@solana/codecs-numbers': 2.3.0(typescript@5.8.2) + agentkeepalive: 4.6.0 + bn.js: 5.2.2 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + node-fetch: 2.7.0 + rpc-websockets: 9.1.3 + superstruct: 2.0.2 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate - '@esbuild/aix-ppc64@0.25.10': - optional: true + '@swc/helpers@0.5.15': + dependencies: + tslib: 2.8.1 - '@esbuild/android-arm64@0.25.10': - optional: true + '@szmarczak/http-timer@4.0.6': + dependencies: + defer-to-connect: 2.0.1 - '@esbuild/android-arm@0.25.10': - optional: true + '@tailwindcss/node@4.1.13': + dependencies: + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.18.3 + jiti: 2.6.0 + lightningcss: 1.30.1 + magic-string: 0.30.19 + source-map-js: 1.2.1 + tailwindcss: 4.1.13 - '@esbuild/android-x64@0.25.10': + '@tailwindcss/oxide-android-arm64@4.1.13': optional: true - '@esbuild/darwin-arm64@0.25.10': + '@tailwindcss/oxide-darwin-arm64@4.1.13': optional: true - '@esbuild/darwin-x64@0.25.10': + '@tailwindcss/oxide-darwin-x64@4.1.13': optional: true - '@esbuild/freebsd-arm64@0.25.10': + '@tailwindcss/oxide-freebsd-x64@4.1.13': optional: true - '@esbuild/freebsd-x64@0.25.10': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.13': optional: true - '@esbuild/linux-arm64@0.25.10': + '@tailwindcss/oxide-linux-arm64-gnu@4.1.13': optional: true - '@esbuild/linux-arm@0.25.10': + '@tailwindcss/oxide-linux-arm64-musl@4.1.13': optional: true - '@esbuild/linux-ia32@0.25.10': + '@tailwindcss/oxide-linux-x64-gnu@4.1.13': optional: true - '@esbuild/linux-loong64@0.25.10': + '@tailwindcss/oxide-linux-x64-musl@4.1.13': optional: true - '@esbuild/linux-mips64el@0.25.10': + '@tailwindcss/oxide-wasm32-wasi@4.1.13': optional: true - '@esbuild/linux-ppc64@0.25.10': + '@tailwindcss/oxide-win32-arm64-msvc@4.1.13': optional: true - '@esbuild/linux-riscv64@0.25.10': + '@tailwindcss/oxide-win32-x64-msvc@4.1.13': optional: true - '@esbuild/linux-s390x@0.25.10': - optional: true + '@tailwindcss/oxide@4.1.13': + dependencies: + detect-libc: 2.0.4 + tar: 7.5.1 + optionalDependencies: + '@tailwindcss/oxide-android-arm64': 4.1.13 + '@tailwindcss/oxide-darwin-arm64': 4.1.13 + '@tailwindcss/oxide-darwin-x64': 4.1.13 + '@tailwindcss/oxide-freebsd-x64': 4.1.13 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.13 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.13 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.13 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.13 + '@tailwindcss/oxide-linux-x64-musl': 4.1.13 + '@tailwindcss/oxide-wasm32-wasi': 4.1.13 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.13 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.13 + + '@tailwindcss/postcss@4.1.13': + dependencies: + '@alloc/quick-lru': 5.2.0 + '@tailwindcss/node': 4.1.13 + '@tailwindcss/oxide': 4.1.13 + postcss: 8.5.6 + tailwindcss: 4.1.13 - '@esbuild/linux-x64@0.25.10': - optional: true + '@telegram-apps/bridge@1.9.2': + dependencies: + '@telegram-apps/signals': 1.1.2 + '@telegram-apps/toolkit': 1.1.1 + '@telegram-apps/transformers': 1.2.2 + '@telegram-apps/types': 1.2.1 - '@esbuild/netbsd-arm64@0.25.10': - optional: true + '@telegram-apps/signals@1.1.2': {} - '@esbuild/netbsd-x64@0.25.10': - optional: true + '@telegram-apps/toolkit@1.1.1': {} - '@esbuild/openbsd-arm64@0.25.10': - optional: true + '@telegram-apps/transformers@1.2.2': + dependencies: + '@telegram-apps/toolkit': 1.1.1 + '@telegram-apps/types': 1.2.1 - '@esbuild/openbsd-x64@0.25.10': - optional: true + '@telegram-apps/types@1.2.1': {} - '@esbuild/openharmony-arm64@0.25.10': - optional: true + '@types/cacheable-request@6.0.3': + dependencies: + '@types/http-cache-semantics': 4.0.4 + '@types/keyv': 3.1.4 + '@types/node': 22.18.6 + '@types/responselike': 1.0.3 - '@esbuild/sunos-x64@0.25.10': - optional: true + '@types/connect@3.4.38': + dependencies: + '@types/node': 22.18.6 - '@esbuild/win32-arm64@0.25.10': - optional: true + '@types/http-cache-semantics@4.0.4': {} - '@esbuild/win32-ia32@0.25.10': - optional: true + '@types/keyv@3.1.4': + dependencies: + '@types/node': 22.18.6 - '@esbuild/win32-x64@0.25.10': - optional: true + '@types/node@12.20.55': {} - '@img/sharp-darwin-arm64@0.34.3': - optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.2.0 - optional: true + '@types/node@22.18.6': + dependencies: + undici-types: 6.21.0 - '@img/sharp-darwin-x64@0.34.3': - optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.2.0 - optional: true + '@types/node@22.7.5': + dependencies: + undici-types: 6.19.8 - '@img/sharp-libvips-darwin-arm64@1.2.0': - optional: true + '@types/prop-types@15.7.15': {} - '@img/sharp-libvips-darwin-x64@1.2.0': - optional: true + '@types/react-dom@18.3.7(@types/react@18.3.24)': + dependencies: + '@types/react': 18.3.24 - '@img/sharp-libvips-linux-arm64@1.2.0': - optional: true + '@types/react@18.3.24': + dependencies: + '@types/prop-types': 15.7.15 + csstype: 3.1.3 - '@img/sharp-libvips-linux-arm@1.2.0': - optional: true + '@types/responselike@1.0.3': + dependencies: + '@types/node': 22.18.6 - '@img/sharp-libvips-linux-ppc64@1.2.0': - optional: true + '@types/uuid@8.3.4': {} - '@img/sharp-libvips-linux-s390x@1.2.0': - optional: true + '@types/ws@7.4.7': + dependencies: + '@types/node': 22.18.6 - '@img/sharp-libvips-linux-x64@1.2.0': - optional: true + '@types/ws@8.18.1': + dependencies: + '@types/node': 22.18.6 - '@img/sharp-libvips-linuxmusl-arm64@1.2.0': - optional: true + '@wallet-standard/app@1.1.0': + dependencies: + '@wallet-standard/base': 1.1.0 - '@img/sharp-libvips-linuxmusl-x64@1.2.0': - optional: true + '@wallet-standard/base@1.1.0': {} - '@img/sharp-linux-arm64@0.34.3': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.2.0 - optional: true + '@wallet-standard/core@1.1.1': + dependencies: + '@wallet-standard/app': 1.1.0 + '@wallet-standard/base': 1.1.0 + '@wallet-standard/errors': 0.1.1 + '@wallet-standard/features': 1.1.0 + '@wallet-standard/wallet': 1.1.0 - '@img/sharp-linux-arm@0.34.3': - optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.2.0 - optional: true + '@wallet-standard/errors@0.1.1': + dependencies: + chalk: 5.6.2 + commander: 13.1.0 - '@img/sharp-linux-ppc64@0.34.3': - optionalDependencies: - '@img/sharp-libvips-linux-ppc64': 1.2.0 - optional: true + '@wallet-standard/features@1.1.0': + dependencies: + '@wallet-standard/base': 1.1.0 - '@img/sharp-linux-s390x@0.34.3': - optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.2.0 - optional: true + '@wallet-standard/wallet@1.1.0': + dependencies: + '@wallet-standard/base': 1.1.0 - '@img/sharp-linux-x64@0.34.3': + abitype@1.1.0(typescript@5.8.2): optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.2.0 - optional: true + typescript: 5.8.2 - '@img/sharp-linuxmusl-arm64@0.34.3': + abitype@1.1.0(typescript@5.8.2)(zod@3.25.76): optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.2.0 - optional: true + typescript: 5.8.2 + zod: 3.25.76 - '@img/sharp-linuxmusl-x64@0.34.3': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.2.0 - optional: true + aes-js@4.0.0-beta.5: {} - '@img/sharp-wasm32@0.34.3': + agentkeepalive@4.6.0: dependencies: - '@emnapi/runtime': 1.4.5 - optional: true + humanize-ms: 1.2.1 - '@img/sharp-win32-arm64@0.34.3': - optional: true + aptos@1.21.0: + dependencies: + '@aptos-labs/aptos-client': 0.1.1 + '@noble/hashes': 1.3.3 + '@scure/bip39': 1.2.1 + eventemitter3: 5.0.1 + form-data: 4.0.0 + tweetnacl: 1.0.3 + transitivePeerDependencies: + - debug - '@img/sharp-win32-ia32@0.34.3': - optional: true + aria-hidden@1.2.6: + dependencies: + tslib: 2.8.1 - '@img/sharp-win32-x64@0.34.3': - optional: true + asynckit@0.4.0: {} - '@next/env@15.5.0': {} + autoprefixer@10.4.21(postcss@8.5.6): + dependencies: + browserslist: 4.26.2 + caniuse-lite: 1.0.30001743 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 - '@next/swc-darwin-arm64@15.5.0': - optional: true + axios@1.12.2: + dependencies: + follow-redirects: 1.15.11 + form-data: 4.0.4 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug - '@next/swc-darwin-x64@15.5.0': - optional: true + axios@1.7.4: + dependencies: + follow-redirects: 1.15.11 + form-data: 4.0.4 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug - '@next/swc-linux-arm64-gnu@15.5.0': - optional: true + base-x@3.0.11: + dependencies: + safe-buffer: 5.2.1 - '@next/swc-linux-arm64-musl@15.5.0': - optional: true + base64-js@1.5.1: {} - '@next/swc-linux-x64-gnu@15.5.0': - optional: true + baseline-browser-mapping@2.8.6: {} - '@next/swc-linux-x64-musl@15.5.0': - optional: true + bn.js@5.2.2: {} - '@next/swc-win32-arm64-msvc@15.5.0': - optional: true + borsh@0.7.0: + dependencies: + bn.js: 5.2.2 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 - '@next/swc-win32-x64-msvc@15.5.0': - optional: true + browserslist@4.26.2: + dependencies: + baseline-browser-mapping: 2.8.6 + caniuse-lite: 1.0.30001743 + electron-to-chromium: 1.5.222 + node-releases: 2.0.21 + update-browserslist-db: 1.1.3(browserslist@4.26.2) - '@swc/helpers@0.5.15': + bs58@4.0.1: dependencies: - tslib: 2.8.1 + base-x: 3.0.11 - '@types/node@22.15.3': + buffer@6.0.3: dependencies: - undici-types: 6.21.0 + base64-js: 1.5.1 + ieee754: 1.2.1 - '@types/node@22.18.6': + bufferutil@4.0.9: dependencies: - undici-types: 6.21.0 + node-gyp-build: 4.8.4 + optional: true - '@types/prop-types@15.7.15': {} + cacheable-lookup@5.0.4: {} - '@types/react-dom@18.3.7(@types/react@18.3.24)': + cacheable-request@7.0.4: dependencies: - '@types/react': 18.3.24 - - '@types/react@18.3.24': + clone-response: 1.0.3 + get-stream: 5.2.0 + http-cache-semantics: 4.2.0 + keyv: '@keyvhq/core@1.6.26' + lowercase-keys: 2.0.0 + normalize-url: 6.1.0 + responselike: 2.0.1 + + call-bind-apply-helpers@1.0.2: dependencies: - '@types/prop-types': 15.7.15 - csstype: 3.1.3 + es-errors: 1.3.0 + function-bind: 1.1.2 + + caniuse-lite@1.0.30001743: {} + + chalk@5.6.2: {} + + chownr@3.0.0: {} - caniuse-lite@1.0.30001736: {} + class-variance-authority@0.7.1: + dependencies: + clsx: 2.1.1 client-only@0.0.1: {} + clone-response@1.0.3: + dependencies: + mimic-response: 1.0.1 + + clsx@2.1.1: {} + color-convert@2.0.1: dependencies: color-name: 1.1.4 @@ -950,10 +3463,75 @@ snapshots: color-string: 1.9.1 optional: true + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@12.1.0: {} + + commander@13.1.0: {} + + commander@14.0.1: {} + + commander@2.20.3: {} + csstype@3.1.3: {} - detect-libc@2.0.4: - optional: true + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + + defer-to-connect@2.0.1: {} + + delay@5.0.0: {} + + delayed-stream@1.0.0: {} + + detect-libc@2.0.4: {} + + detect-node-es@1.1.0: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + ed2curve@0.3.0: + dependencies: + tweetnacl: 1.0.3 + + electron-to-chromium@1.5.222: {} + + end-of-stream@1.4.5: + dependencies: + once: 1.4.0 + + enhanced-resolve@5.18.3: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.3 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es6-promise@4.2.8: {} + + es6-promisify@5.0.0: + dependencies: + es6-promise: 4.2.8 esbuild@0.25.10: optionalDependencies: @@ -984,29 +3562,280 @@ snapshots: '@esbuild/win32-ia32': 0.25.10 '@esbuild/win32-x64': 0.25.10 + escalade@3.2.0: {} + + ethers@6.15.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): + dependencies: + '@adraffy/ens-normalize': 1.10.1 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@types/node': 22.7.5 + aes-js: 4.0.0-beta.5 + tslib: 2.7.0 + ws: 8.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + eventemitter3@4.0.7: {} + + eventemitter3@5.0.1: {} + + eyes@0.1.8: {} + + fast-stable-stringify@1.0.0: {} + + follow-redirects@1.15.11: {} + + form-data@4.0.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + form-data@4.0.4: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + + fraction.js@4.3.7: {} + + framer-motion@12.23.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + motion-dom: 12.23.19 + motion-utils: 12.23.6 + tslib: 2.8.1 + optionalDependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + fsevents@2.3.3: optional: true + function-bind@1.1.2: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-nonce@1.0.1: {} + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + get-stream@5.2.0: + dependencies: + pump: 3.0.3 + get-tsconfig@4.10.1: dependencies: resolve-pkg-maps: 1.0.0 + gopd@1.2.0: {} + + got@11.8.6: + dependencies: + '@sindresorhus/is': 4.6.0 + '@szmarczak/http-timer': 4.0.6 + '@types/cacheable-request': 6.0.3 + '@types/responselike': 1.0.3 + cacheable-lookup: 5.0.4 + cacheable-request: 7.0.4 + decompress-response: 6.0.0 + http2-wrapper: 1.0.3 + lowercase-keys: 2.0.0 + p-cancelable: 2.1.1 + responselike: 2.0.1 + + graceful-fs@4.2.11: {} + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + http-cache-semantics@4.2.0: {} + + http2-wrapper@1.0.3: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + + ieee754@1.2.1: {} + is-arrayish@0.3.2: optional: true + isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + + isows@1.0.7(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + + jayson@4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): + dependencies: + '@types/connect': 3.4.38 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + commander: 2.20.3 + delay: 5.0.0 + es6-promisify: 5.0.0 + eyes: 0.1.8 + isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + json-stringify-safe: 5.0.1 + stream-json: 1.9.1 + uuid: 8.3.2 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + jiti@2.6.0: {} + + js-base64@3.7.8: {} + js-tokens@4.0.0: {} + json-buffer@3.0.1: {} + + json-stringify-safe@5.0.1: {} + + jwt-decode@4.0.0: {} + + lightningcss-darwin-arm64@1.30.1: + optional: true + + lightningcss-darwin-x64@1.30.1: + optional: true + + lightningcss-freebsd-x64@1.30.1: + optional: true + + lightningcss-linux-arm-gnueabihf@1.30.1: + optional: true + + lightningcss-linux-arm64-gnu@1.30.1: + optional: true + + lightningcss-linux-arm64-musl@1.30.1: + optional: true + + lightningcss-linux-x64-gnu@1.30.1: + optional: true + + lightningcss-linux-x64-musl@1.30.1: + optional: true + + lightningcss-win32-arm64-msvc@1.30.1: + optional: true + + lightningcss-win32-x64-msvc@1.30.1: + optional: true + + lightningcss@1.30.1: + dependencies: + detect-libc: 2.0.4 + optionalDependencies: + lightningcss-darwin-arm64: 1.30.1 + lightningcss-darwin-x64: 1.30.1 + lightningcss-freebsd-x64: 1.30.1 + lightningcss-linux-arm-gnueabihf: 1.30.1 + lightningcss-linux-arm64-gnu: 1.30.1 + lightningcss-linux-arm64-musl: 1.30.1 + lightningcss-linux-x64-gnu: 1.30.1 + lightningcss-linux-x64-musl: 1.30.1 + lightningcss-win32-arm64-msvc: 1.30.1 + lightningcss-win32-x64-msvc: 1.30.1 + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 + lowercase-keys@2.0.0: {} + + lucide-react@0.544.0(react@18.3.1): + dependencies: + react: 18.3.1 + + magic-string@0.30.19: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + math-intrinsics@1.1.0: {} + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mimic-response@1.0.1: {} + + mimic-response@3.1.0: {} + + minipass@7.1.2: {} + + minizlib@3.1.0: + dependencies: + minipass: 7.1.2 + + mipd@0.0.7(typescript@5.8.2): + optionalDependencies: + typescript: 5.8.2 + + motion-dom@12.23.19: + dependencies: + motion-utils: 12.23.6 + + motion-utils@12.23.6: {} + + motion@12.23.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + framer-motion: 12.23.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + tslib: 2.8.1 + optionalDependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + ms@2.1.3: {} + nanoid@3.3.11: {} + next-themes@0.4.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + next@15.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@next/env': 15.5.0 '@swc/helpers': 0.5.15 - caniuse-lite: 1.0.30001736 + caniuse-lite: 1.0.30001743 postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -1025,26 +3854,148 @@ snapshots: - '@babel/core' - babel-plugin-macros + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-gyp-build@4.8.4: + optional: true + + node-releases@2.0.21: {} + + normalize-range@0.1.2: {} + + normalize-url@6.1.0: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + ox@0.9.6(typescript@5.8.2): + dependencies: + '@adraffy/ens-normalize': 1.11.1 + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.1.0(typescript@5.8.2) + eventemitter3: 5.0.1 + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - zod + + ox@0.9.6(typescript@5.8.2)(zod@3.25.76): + dependencies: + '@adraffy/ens-normalize': 1.11.1 + '@noble/ciphers': 1.3.0 + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.1.0(typescript@5.8.2)(zod@3.25.76) + eventemitter3: 5.0.1 + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - zod + + p-cancelable@2.1.1: {} + picocolors@1.1.1: {} + poseidon-lite@0.2.1: {} + + postcss-value-parser@4.2.0: {} + postcss@8.4.31: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + proxy-from-env@1.1.0: {} + + pump@3.0.3: + dependencies: + end-of-stream: 1.4.5 + once: 1.4.0 + + quick-lru@5.1.1: {} + react-dom@18.3.1(react@18.3.1): dependencies: loose-envify: 1.4.0 react: 18.3.1 scheduler: 0.23.2 + react-remove-scroll-bar@2.3.8(@types/react@18.3.24)(react@18.3.1): + dependencies: + react: 18.3.1 + react-style-singleton: 2.2.3(@types/react@18.3.24)(react@18.3.1) + tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.3.24 + + react-remove-scroll@2.7.1(@types/react@18.3.24)(react@18.3.1): + dependencies: + react: 18.3.1 + react-remove-scroll-bar: 2.3.8(@types/react@18.3.24)(react@18.3.1) + react-style-singleton: 2.2.3(@types/react@18.3.24)(react@18.3.1) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@18.3.24)(react@18.3.1) + use-sidecar: 1.1.3(@types/react@18.3.24)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.24 + + react-style-singleton@2.2.3(@types/react@18.3.24)(react@18.3.1): + dependencies: + get-nonce: 1.0.1 + react: 18.3.1 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.3.24 + + react-use-measure@2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + react: 18.3.1 + optionalDependencies: + react-dom: 18.3.1(react@18.3.1) + react@18.3.1: dependencies: loose-envify: 1.4.0 + resolve-alpn@1.2.1: {} + resolve-pkg-maps@1.0.0: {} + responselike@2.0.1: + dependencies: + lowercase-keys: 2.0.0 + + rpc-websockets@9.1.3: + dependencies: + '@swc/helpers': 0.5.15 + '@types/uuid': 8.3.4 + '@types/ws': 8.18.1 + buffer: 6.0.3 + eventemitter3: 5.0.1 + uuid: 8.3.2 + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + safe-buffer@5.2.1: {} + scheduler@0.23.2: dependencies: loose-envify: 1.4.0 @@ -1087,13 +4038,46 @@ snapshots: is-arrayish: 0.3.2 optional: true + sonner@2.0.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + source-map-js@1.2.1: {} + stream-chain@2.2.5: {} + + stream-json@1.9.1: + dependencies: + stream-chain: 2.2.5 + styled-jsx@5.1.6(react@18.3.1): dependencies: client-only: 0.0.1 react: 18.3.1 + superstruct@2.0.2: {} + + tailwind-merge@3.3.1: {} + + tailwindcss@4.1.13: {} + + tapable@2.2.3: {} + + tar@7.5.1: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.2 + minizlib: 3.1.0 + yallist: 5.0.0 + + text-encoding-utf-8@1.0.2: {} + + tr46@0.0.3: {} + + tslib@2.7.0: {} + tslib@2.8.1: {} tsx@4.20.5: @@ -1130,6 +4114,104 @@ snapshots: turbo-windows-64: 2.5.7 turbo-windows-arm64: 2.5.7 + tw-animate-css@1.3.8: {} + + tweetnacl@1.0.3: {} + typescript@5.8.2: {} + undici-types@6.19.8: {} + undici-types@6.21.0: {} + + update-browserslist-db@1.1.3(browserslist@4.26.2): + dependencies: + browserslist: 4.26.2 + escalade: 3.2.0 + picocolors: 1.1.1 + + use-callback-ref@1.3.3(@types/react@18.3.24)(react@18.3.1): + dependencies: + react: 18.3.1 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.3.24 + + use-sidecar@1.1.3(@types/react@18.3.24)(react@18.3.1): + dependencies: + detect-node-es: 1.1.0 + react: 18.3.1 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 18.3.24 + + utf-8-validate@5.0.10: + dependencies: + node-gyp-build: 4.8.4 + optional: true + + uuid@8.3.2: {} + + uuid@9.0.1: {} + + viem@2.37.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10): + dependencies: + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.1.0(typescript@5.8.2) + isows: 1.0.7(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + ox: 0.9.6(typescript@5.8.2) + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + + viem@2.37.8(bufferutil@4.0.9)(typescript@5.8.2)(utf-8-validate@5.0.10)(zod@3.25.76): + dependencies: + '@noble/curves': 1.9.1 + '@noble/hashes': 1.8.0 + '@scure/bip32': 1.7.0 + '@scure/bip39': 1.6.0 + abitype: 1.1.0(typescript@5.8.2)(zod@3.25.76) + isows: 1.0.7(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + ox: 0.9.6(typescript@5.8.2)(zod@3.25.76) + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + optionalDependencies: + typescript: 5.8.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + wrappy@1.0.2: {} + + ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + ws@8.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + yallist@5.0.0: {} + + zod@3.25.76: {} From 1f81b184c8dc397a5cb7ebba1e29ec46c52fa1eb Mon Sep 17 00:00:00 2001 From: maayan Date: Thu, 25 Sep 2025 13:18:42 -0400 Subject: [PATCH 2/6] run update-table --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bdd3365..12b90bf 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ This Turborepo includes the following example applications: | Name | Description | Path & Links | | --- | --- | --- | -| `@shelby-protocol/web` | A Next.js application showcasing Shelby integrations | [`apps/web`](./apps/web) | +| `@shelby-protocol/cross-chain-accounts` | Shelby cross chain accounts example | [`apps/cross-chain-accounts`](./apps/cross-chain-accounts) | From c7e61afe6856bb124f95c92cd0f74d05277ce5f4 Mon Sep 17 00:00:00 2001 From: maayan Date: Thu, 25 Sep 2025 13:24:25 -0400 Subject: [PATCH 3/6] run lint --- apps/cross-chain-accounts/app/layout.tsx | 2 +- apps/cross-chain-accounts/app/page.tsx | 4 +-- .../components/AccountBlobs.tsx | 12 ++++--- .../components/FileUpload.tsx | 2 +- .../components/WalletProvider.tsx | 8 ++--- .../hooks/useSubmitFileToChain.tsx | 31 +++++++++---------- .../hooks/useUploadFile.tsx | 2 +- apps/cross-chain-accounts/utils/client.ts | 2 +- apps/cross-chain-accounts/utils/encodeFile.ts | 2 +- .../components/x-chain-wallet-selector.tsx | 10 +++--- 10 files changed, 38 insertions(+), 37 deletions(-) diff --git a/apps/cross-chain-accounts/app/layout.tsx b/apps/cross-chain-accounts/app/layout.tsx index 917fe00..492bd0e 100644 --- a/apps/cross-chain-accounts/app/layout.tsx +++ b/apps/cross-chain-accounts/app/layout.tsx @@ -1,5 +1,5 @@ -import localFont from "next/font/local"; import { Toaster } from "@shelby-protocol/ui/components"; +import localFont from "next/font/local"; import { WalletProvider } from "@/components/WalletProvider"; import "./globals.css"; diff --git a/apps/cross-chain-accounts/app/page.tsx b/apps/cross-chain-accounts/app/page.tsx index 70e4f52..251fde2 100644 --- a/apps/cross-chain-accounts/app/page.tsx +++ b/apps/cross-chain-accounts/app/page.tsx @@ -1,9 +1,9 @@ "use client"; import { useState } from "react"; -import { Header } from "@/components/Header"; -import { FileUpload } from "@/components/FileUpload"; import { AccountBlobs } from "@/components/AccountBlobs"; +import { FileUpload } from "@/components/FileUpload"; +import { Header } from "@/components/Header"; export default function Home() { const [refreshTrigger, setRefreshTrigger] = useState(0); diff --git a/apps/cross-chain-accounts/components/AccountBlobs.tsx b/apps/cross-chain-accounts/components/AccountBlobs.tsx index 971b73a..bcf3848 100644 --- a/apps/cross-chain-accounts/components/AccountBlobs.tsx +++ b/apps/cross-chain-accounts/components/AccountBlobs.tsx @@ -1,8 +1,7 @@ -import Link from "next/link"; -import { useState } from "react"; -import { useEffect } from "react"; import { useWallet } from "@aptos-labs/wallet-adapter-react"; -import { BlobMetadata } from "@shelby-protocol/sdk/browser"; +import type { BlobMetadata } from "@shelby-protocol/sdk/browser"; +import Link from "next/link"; +import { useEffect, useState } from "react"; import { getShelbyClient } from "@/utils/client"; interface AccountBlobsProps { @@ -25,7 +24,10 @@ export const AccountBlobs = ({ refreshTrigger }: AccountBlobsProps) => { return blobs; }; - getBlobs().then((blobs) => setBlobs(blobs)); + getBlobs().then((blobs) => { + setBlobs(blobs); + refreshTrigger; + }); }, [account, refreshTrigger]); return ( diff --git a/apps/cross-chain-accounts/components/FileUpload.tsx b/apps/cross-chain-accounts/components/FileUpload.tsx index ab122b3..2a6a7bd 100644 --- a/apps/cross-chain-accounts/components/FileUpload.tsx +++ b/apps/cross-chain-accounts/components/FileUpload.tsx @@ -1,6 +1,6 @@ -import { useState } from "react"; import { useWallet } from "@aptos-labs/wallet-adapter-react"; import { Button } from "@shelby-protocol/ui/components/button"; +import { useState } from "react"; import { useSubmitFileToChain } from "@/hooks/useSubmitFileToChain"; import { useUploadFile } from "@/hooks/useUploadFile"; import { encodeFile } from "@/utils/encodeFile"; diff --git a/apps/cross-chain-accounts/components/WalletProvider.tsx b/apps/cross-chain-accounts/components/WalletProvider.tsx index 930c4ca..c2029ab 100644 --- a/apps/cross-chain-accounts/components/WalletProvider.tsx +++ b/apps/cross-chain-accounts/components/WalletProvider.tsx @@ -1,10 +1,10 @@ "use client"; -import { AptosWalletAdapterProvider } from "@aptos-labs/wallet-adapter-react"; -import { PropsWithChildren } from "react"; -import { Network } from "@aptos-labs/ts-sdk"; -import { setupAutomaticSolanaWalletDerivation } from "@aptos-labs/derived-wallet-solana"; import { setupAutomaticEthereumWalletDerivation } from "@aptos-labs/derived-wallet-ethereum"; +import { setupAutomaticSolanaWalletDerivation } from "@aptos-labs/derived-wallet-solana"; +import { Network } from "@aptos-labs/ts-sdk"; +import { AptosWalletAdapterProvider } from "@aptos-labs/wallet-adapter-react"; +import type { PropsWithChildren } from "react"; setupAutomaticSolanaWalletDerivation({ defaultNetwork: Network.DEVNET }); setupAutomaticEthereumWalletDerivation({ defaultNetwork: Network.DEVNET }); diff --git a/apps/cross-chain-accounts/hooks/useSubmitFileToChain.tsx b/apps/cross-chain-accounts/hooks/useSubmitFileToChain.tsx index 2f479b9..51d3f1d 100644 --- a/apps/cross-chain-accounts/hooks/useSubmitFileToChain.tsx +++ b/apps/cross-chain-accounts/hooks/useSubmitFileToChain.tsx @@ -1,18 +1,18 @@ -import { useState, useCallback } from "react"; -import { - InputTransactionData, - useWallet, -} from "@aptos-labs/wallet-adapter-react"; -import { - BlobCommitments, - ShelbyBlobClient, -} from "@shelby-protocol/sdk/browser"; import { Account, Ed25519PrivateKey, PrivateKey, PrivateKeyVariants, } from "@aptos-labs/ts-sdk"; +import { + type InputTransactionData, + useWallet, +} from "@aptos-labs/wallet-adapter-react"; +import { + type BlobCommitments, + ShelbyBlobClient, +} from "@shelby-protocol/sdk/browser"; +import { useCallback, useState } from "react"; import { getShelbyClient } from "@/utils/client"; interface UseSubmitFileToChainReturn { @@ -42,7 +42,7 @@ export const useSubmitFileToChain = (): UseSubmitFileToChainReturn => { blobName: file.name, blobMerkleRoot: commitment.blob_merkle_root, chunksetChunkCommitments: commitment.chunkset_commitments.map( - (chunkset) => chunkset.chunk_commitments + (chunkset) => chunkset.chunk_commitments, ), expirationMicros: (1000 * 60 * 60 * 24 * 30 + Date.now()) * 1000, // 30 days from now in microseconds size: commitment.raw_data_size, @@ -52,9 +52,8 @@ export const useSubmitFileToChain = (): UseSubmitFileToChainReturn => { const transaction: InputTransactionData = { data: payload, }; - const transactionSubmitted = await signAndSubmitTransaction( - transaction - ); + const transactionSubmitted = + await signAndSubmitTransaction(transaction); await getShelbyClient().aptos.waitForTransaction({ transactionHash: transactionSubmitted.hash, @@ -64,8 +63,8 @@ export const useSubmitFileToChain = (): UseSubmitFileToChainReturn => { const privateKey = new Ed25519PrivateKey( PrivateKey.formatPrivateKey( process.env.NEXT_PUBLIC_SPONSOR_PRIVATE_KEY as string, - PrivateKeyVariants.Ed25519 - ) + PrivateKeyVariants.Ed25519, + ), ); const sponsorAccount = Account.fromPrivateKey({ privateKey }); @@ -106,7 +105,7 @@ export const useSubmitFileToChain = (): UseSubmitFileToChainReturn => { setIsSubmitting(false); } }, - [account, wallet, signAndSubmitTransaction, signTransaction] + [account, wallet, signAndSubmitTransaction, signTransaction], ); return { diff --git a/apps/cross-chain-accounts/hooks/useUploadFile.tsx b/apps/cross-chain-accounts/hooks/useUploadFile.tsx index 21c589f..6db7989 100644 --- a/apps/cross-chain-accounts/hooks/useUploadFile.tsx +++ b/apps/cross-chain-accounts/hooks/useUploadFile.tsx @@ -1,5 +1,5 @@ -import { useState } from "react"; import { useWallet } from "@aptos-labs/wallet-adapter-react"; +import { useState } from "react"; import { getShelbyClient } from "@/utils/client"; interface UseUploadFileReturn { diff --git a/apps/cross-chain-accounts/utils/client.ts b/apps/cross-chain-accounts/utils/client.ts index 8ef943d..bbf0d4a 100644 --- a/apps/cross-chain-accounts/utils/client.ts +++ b/apps/cross-chain-accounts/utils/client.ts @@ -7,7 +7,7 @@ export const aptosClient = new Aptos( clientConfig: { API_KEY: process.env.NEXT_PUBLIC_APTOS_API_KEY, }, - }) + }), ); export const getAptosClient = () => { diff --git a/apps/cross-chain-accounts/utils/encodeFile.ts b/apps/cross-chain-accounts/utils/encodeFile.ts index 3920674..1a1adda 100644 --- a/apps/cross-chain-accounts/utils/encodeFile.ts +++ b/apps/cross-chain-accounts/utils/encodeFile.ts @@ -1,5 +1,5 @@ import { - BlobCommitments, + type BlobCommitments, generateCommitments, } from "@shelby-protocol/sdk/node"; diff --git a/packages/ui/src/components/x-chain-wallet-selector.tsx b/packages/ui/src/components/x-chain-wallet-selector.tsx index e17339c..07fab0d 100644 --- a/packages/ui/src/components/x-chain-wallet-selector.tsx +++ b/packages/ui/src/components/x-chain-wallet-selector.tsx @@ -22,7 +22,9 @@ import { IconLogout, IconPerson, } from "@intentui/icons"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@radix-ui/react-tabs"; import { cn } from "@shelby-protocol/ui/lib/utils"; +import { ChevronDown } from "lucide-react"; import { useCallback, useState } from "react"; import { toast } from "sonner"; import { Button } from "./button"; @@ -47,8 +49,6 @@ import { DropdownMenuTrigger, } from "./dropdown-menu"; import { ExpandingContainer } from "./expanding-container"; -import { Tabs, TabsContent, TabsList, TabsTrigger } from "@radix-ui/react-tabs"; -import { ChevronDown } from "lucide-react"; export interface XChainWalletSelectorProps { walletSortingOptions?: WalletSortingOptions; @@ -142,7 +142,7 @@ function ConnectWalletDialog({ const { aptosConnectWallets, availableWallets, installableWallets } = groupAndSortWallets( [...wallets, ...notDetectedWallets], - walletSortingOptions + walletSortingOptions, ); const hasAptosConnectWallets = !!aptosConnectWallets.length; @@ -162,7 +162,7 @@ function ConnectWalletDialog({ } return acc; }, - { evmWallets: [], solanaWallets: [], aptosWallets: [] } + { evmWallets: [], solanaWallets: [], aptosWallets: [] }, ); const { @@ -188,7 +188,7 @@ function ConnectWalletDialog({ evmInstallableWallets: [], solanaInstallableWallets: [], aptosInstallableWallets: [], - } + }, ); return ( From 10fc9f39472106d12abfc5ac8147126420747187 Mon Sep 17 00:00:00 2001 From: maayan Date: Thu, 25 Sep 2025 15:56:39 -0400 Subject: [PATCH 4/6] address comments --- apps/cross-chain-accounts/README.md | 10 +++++++++- apps/cross-chain-accounts/app/layout.tsx | 6 ++++++ apps/cross-chain-accounts/components/AccountBlobs.tsx | 6 +++--- .../cross-chain-accounts/components/WalletProvider.tsx | 2 +- apps/cross-chain-accounts/next.config.ts | 2 +- apps/cross-chain-accounts/utils/client.ts | 6 ++++-- 6 files changed, 24 insertions(+), 8 deletions(-) diff --git a/apps/cross-chain-accounts/README.md b/apps/cross-chain-accounts/README.md index 48d266c..39964aa 100644 --- a/apps/cross-chain-accounts/README.md +++ b/apps/cross-chain-accounts/README.md @@ -2,6 +2,12 @@ This example demonstrates how one can upload and view files using cross-chain (non-Aptos) wallets on the Shelby network. +### Prerequisites + +- `node` and `pnpm` +- Shelby API key. For best performance, you are encouraged to generate an API Key so your app will not hit the rate limit. + - Head to [Geomi](https://geomi.dev/) to generate an API key for `shelbydevnet` and add it to the `.env` file as `NEXT_PUBLIC_SHELBY_API_KEY=` + ### Starting the Demo dApp ```bash @@ -41,6 +47,8 @@ export const encodeFile = async (file: File): Promise => { #### Register the file on chain (transaction submission) +> Note: To upload a file to the Shelby network, the account should hold PROTO tokens (1 PROTO for 1 upload). Make sure to fund your account by going to https://docs.shelby.xyz/docs/faucet + After we have the commitment hashes of the file, we can register the file on chain by submitting a transaction. ```ts @@ -137,7 +145,7 @@ await getShelbyClient().rpc.putBlob({ ### View the account's uploaded files -To view the files uploaded by an account, we can simply query for the blobs +To view the files uploaded by an account, we can simply query for the blobs. ```ts const getBlobs = async (): Promise => { diff --git a/apps/cross-chain-accounts/app/layout.tsx b/apps/cross-chain-accounts/app/layout.tsx index 492bd0e..9d23948 100644 --- a/apps/cross-chain-accounts/app/layout.tsx +++ b/apps/cross-chain-accounts/app/layout.tsx @@ -2,6 +2,7 @@ import { Toaster } from "@shelby-protocol/ui/components"; import localFont from "next/font/local"; import { WalletProvider } from "@/components/WalletProvider"; import "./globals.css"; +import type { Metadata } from "next"; const geistSans = localFont({ src: "./fonts/GeistVF.woff", @@ -12,6 +13,11 @@ const geistMono = localFont({ variable: "--font-geist-mono", }); +export const metadata: Metadata = { + title: "Shelby Theater", + description: "A streaming platform served by Shelby", +}; + export default function RootLayout({ children, }: Readonly<{ diff --git a/apps/cross-chain-accounts/components/AccountBlobs.tsx b/apps/cross-chain-accounts/components/AccountBlobs.tsx index bcf3848..20e357a 100644 --- a/apps/cross-chain-accounts/components/AccountBlobs.tsx +++ b/apps/cross-chain-accounts/components/AccountBlobs.tsx @@ -2,7 +2,7 @@ import { useWallet } from "@aptos-labs/wallet-adapter-react"; import type { BlobMetadata } from "@shelby-protocol/sdk/browser"; import Link from "next/link"; import { useEffect, useState } from "react"; -import { getShelbyClient } from "@/utils/client"; +import { getShelbyClient, SHELBY_API_URL } from "@/utils/client"; interface AccountBlobsProps { refreshTrigger?: number; @@ -56,7 +56,7 @@ export const AccountBlobs = ({ refreshTrigger }: AccountBlobsProps) => {
{blob.name} { Download: { dappConfig={{ network: Network.DEVNET, aptosApiKeys: { - devnet: process.env.APTOS_API_KEY_DEVNET, + devnet: process.env.NEXT_PUBLIC_SHELBY_API_KEY, }, }} onError={(error) => { diff --git a/apps/cross-chain-accounts/next.config.ts b/apps/cross-chain-accounts/next.config.ts index 53eea2d..e5c7714 100644 --- a/apps/cross-chain-accounts/next.config.ts +++ b/apps/cross-chain-accounts/next.config.ts @@ -4,7 +4,7 @@ const nextConfig: NextConfig = { transpilePackages: ["@shelby-protocol/ui"], typedRoutes: true, images: { - remotePatterns: [new URL("https://api.devnet.shelby.xyz/shelby/**")], + remotePatterns: [new URL("https://api.devnet.shelby.xyz/shelby")], }, }; diff --git a/apps/cross-chain-accounts/utils/client.ts b/apps/cross-chain-accounts/utils/client.ts index bbf0d4a..c153d67 100644 --- a/apps/cross-chain-accounts/utils/client.ts +++ b/apps/cross-chain-accounts/utils/client.ts @@ -1,11 +1,13 @@ import { Aptos, AptosConfig, Network } from "@aptos-labs/ts-sdk"; import { ShelbyClient } from "@shelby-protocol/sdk/browser"; +export const SHELBY_API_URL = "https://api.devnet.shelby.xyz/shelby"; + export const aptosClient = new Aptos( new AptosConfig({ network: Network.DEVNET, clientConfig: { - API_KEY: process.env.NEXT_PUBLIC_APTOS_API_KEY, + API_KEY: process.env.NEXT_PUBLIC_SHELBY_API_KEY, }, }), ); @@ -16,7 +18,7 @@ export const getAptosClient = () => { const shelbyClient = new ShelbyClient({ aptos: getAptosClient(), - shelby: { baseUrl: "https://api.devnet.shelby.xyz/shelby" }, + shelby: { baseUrl: SHELBY_API_URL }, }); export const getShelbyClient = () => { From ff2c1dfca1b2c1468e8aa23e5fc6b5763d557ffa Mon Sep 17 00:00:00 2001 From: maayan Date: Tue, 30 Sep 2025 12:51:06 -0400 Subject: [PATCH 5/6] improvements --- apps/cross-chain-accounts/README.md | 26 ++++++++++++++----- apps/cross-chain-accounts/app/layout.tsx | 4 +-- .../components/Header.tsx | 17 ++++++++++++ apps/cross-chain-accounts/utils/client.ts | 7 ++--- 4 files changed, 43 insertions(+), 11 deletions(-) diff --git a/apps/cross-chain-accounts/README.md b/apps/cross-chain-accounts/README.md index 39964aa..18d6bd1 100644 --- a/apps/cross-chain-accounts/README.md +++ b/apps/cross-chain-accounts/README.md @@ -5,11 +5,19 @@ This example demonstrates how one can upload and view files using cross-chain (n ### Prerequisites - `node` and `pnpm` -- Shelby API key. For best performance, you are encouraged to generate an API Key so your app will not hit the rate limit. +- Shelby API key. For best performance, you are encouraged to generate an API key so your app will not hit the rate limit. - Head to [Geomi](https://geomi.dev/) to generate an API key for `shelbydevnet` and add it to the `.env` file as `NEXT_PUBLIC_SHELBY_API_KEY=` ### Starting the Demo dApp +Create an `.env` file by copying the `.env.example` file and fill out the required variables. + +```bash +cp .env.example .env +``` + +Then install dependencies and run the dapp locally + ```bash pnpm install pnpm run dev @@ -29,7 +37,7 @@ At a high level, uploading a file to Shelby includes 3 steps: #### Encode File -Encoding a file means we split the file into chunks, where each chunk has a `commitment hash` and these are combined to make the `blob merkle root hash`. +Encoding a file means we split the file into chunks, where each chunk has a `commitment hash`, and these are combined to make the `blob merkle root hash`. We then send all these hashes to the blockchain so they can be verified with the storage providers. @@ -65,17 +73,23 @@ const payload = ShelbyBlobClient.createWriteBlobCommitmentsPayload({ }); ``` -Once we have the transaction payload, we can submit it to chain. As mentioned before, in this example we support both Aptos native and cross-chain wallet transaction submissions. +Once we have the transaction payload, we can submit it to the chain. As mentioned before, in this example we support both Aptos native and cross-chain wallet transaction submissions. ##### Aptos native wallets +> Note: Make sure your wallet is configured to use the `shelbydevnet` network. Petra (and some other wallets) lets you create a custom network, use those values +> +> - Node URL: https://api.devnet.shelby.xyz/v1 +> - Faucet URL: https://faucet.devnet.shelby.xyz (APT faucet) +> - Indexer URL: https://api.devnet.shelby.xyz/v1/graphql + ```ts // Send the transaction to the connected wallet to sign and submit const transaction: InputTransactionData = { data: payload, }; const transactionSubmitted = await signAndSubmitTransaction(transaction); -// Wait for transaction to be submitted on chain +// Wait for transaction to be submitted on the chain await getShelbyClient().aptos.waitForTransaction({ transactionHash: transactionSubmitted.hash, }); @@ -123,7 +137,7 @@ const transactionSubmitted = feePayerAuthenticator: sponsorAuthenticator, }); -// Wait for transaction to be submitted on chain +// Wait for transaction to be submitted on the chain await getShelbyClient().aptos.waitForTransaction({ transactionHash: transactionSubmitted.hash, }); @@ -131,7 +145,7 @@ await getShelbyClient().aptos.waitForTransaction({ #### Upload the file to Shelby RPC -After we submit the transaction and register the commitment hashes on chain, we can upload the file to the Shelby RPC so it can be verified with the storage providers to ensure that the uploaded data matches the one on the blockchain by comparing the hashes. +After we submit the transaction and register the commitment hashes on the chain, we can upload the file to the Shelby RPC so it can be verified with the storage providers to ensure that the uploaded data matches the one on the blockchain by comparing the hashes. > Note: The RPC will make checks on-chain to ensure the file is there first, which is why registration can't happen in parallel with an upload to the RPC. diff --git a/apps/cross-chain-accounts/app/layout.tsx b/apps/cross-chain-accounts/app/layout.tsx index 9d23948..34e1f13 100644 --- a/apps/cross-chain-accounts/app/layout.tsx +++ b/apps/cross-chain-accounts/app/layout.tsx @@ -14,8 +14,8 @@ const geistMono = localFont({ }); export const metadata: Metadata = { - title: "Shelby Theater", - description: "A streaming platform served by Shelby", + title: "Shelby Cross Chain Accounts Example", + description: "A cross-chain accounts example", }; export default function RootLayout({ diff --git a/apps/cross-chain-accounts/components/Header.tsx b/apps/cross-chain-accounts/components/Header.tsx index 105f4aa..8a035be 100644 --- a/apps/cross-chain-accounts/components/Header.tsx +++ b/apps/cross-chain-accounts/components/Header.tsx @@ -1,6 +1,20 @@ import { XChainWalletSelector } from "@shelby-protocol/ui/components/x-chain-wallet-selector"; +import { Button } from "@shelby-protocol/ui/components/button"; +import { useWallet } from "@aptos-labs/wallet-adapter-react"; export const Header = () => { + const { connected, account } = useWallet(); + + const onMintProto = () => { + if (!account) { + return; + } + window.open( + `https://docs.shelby.xyz/docs/faucet?address=${account.address}`, + "_blank" + ); + }; + return (
@@ -9,6 +23,9 @@ export const Header = () => {
+ { From e75793f686ec53714e14cea9bdd26e725cde8f77 Mon Sep 17 00:00:00 2001 From: maayan Date: Tue, 30 Sep 2025 12:52:53 -0400 Subject: [PATCH 6/6] fmt --- apps/cross-chain-accounts/components/AccountBlobs.tsx | 6 +++--- apps/cross-chain-accounts/components/Header.tsx | 6 +++--- apps/cross-chain-accounts/utils/client.ts | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/apps/cross-chain-accounts/components/AccountBlobs.tsx b/apps/cross-chain-accounts/components/AccountBlobs.tsx index 20e357a..aadbe5d 100644 --- a/apps/cross-chain-accounts/components/AccountBlobs.tsx +++ b/apps/cross-chain-accounts/components/AccountBlobs.tsx @@ -1,6 +1,5 @@ import { useWallet } from "@aptos-labs/wallet-adapter-react"; import type { BlobMetadata } from "@shelby-protocol/sdk/browser"; -import Link from "next/link"; import { useEffect, useState } from "react"; import { getShelbyClient, SHELBY_API_URL } from "@/utils/client"; @@ -94,15 +93,16 @@ export const AccountBlobs = ({ refreshTrigger }: AccountBlobsProps) => { Download: - View Image - +
diff --git a/apps/cross-chain-accounts/components/Header.tsx b/apps/cross-chain-accounts/components/Header.tsx index 8a035be..31f9290 100644 --- a/apps/cross-chain-accounts/components/Header.tsx +++ b/apps/cross-chain-accounts/components/Header.tsx @@ -1,6 +1,6 @@ -import { XChainWalletSelector } from "@shelby-protocol/ui/components/x-chain-wallet-selector"; -import { Button } from "@shelby-protocol/ui/components/button"; import { useWallet } from "@aptos-labs/wallet-adapter-react"; +import { Button } from "@shelby-protocol/ui/components/button"; +import { XChainWalletSelector } from "@shelby-protocol/ui/components/x-chain-wallet-selector"; export const Header = () => { const { connected, account } = useWallet(); @@ -11,7 +11,7 @@ export const Header = () => { } window.open( `https://docs.shelby.xyz/docs/faucet?address=${account.address}`, - "_blank" + "_blank", ); }; diff --git a/apps/cross-chain-accounts/utils/client.ts b/apps/cross-chain-accounts/utils/client.ts index 5f042f1..b6dc1b5 100644 --- a/apps/cross-chain-accounts/utils/client.ts +++ b/apps/cross-chain-accounts/utils/client.ts @@ -10,7 +10,7 @@ export const aptosClient = new Aptos( clientConfig: { API_KEY: process.env.NEXT_PUBLIC_SHELBY_API_KEY, }, - }) + }), ); export const getAptosClient = () => {