@moneymq/react 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +42 -8
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +42 -8
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/provider.tsx","../src/wallet-modal-provider.tsx","../src/wallet-modal.tsx","../src/checkout-button.tsx","../src/checkout-modal.tsx","../src/assets/logo-animation.json","../src/use-payment.ts"],"sourcesContent":["'use client';\n\nimport React, { createContext, useContext, useEffect, useMemo, useState } from 'react';\nimport { ConnectionProvider, WalletProvider } from '@solana/wallet-adapter-react';\nimport { PhantomWalletAdapter, SolflareWalletAdapter } from '@solana/wallet-adapter-wallets';\nimport { CustomWalletModalProvider, type Branding } from './wallet-modal-provider';\n\n// MoneyMQ client interface (matches @moneymq/sdk)\nexport interface MoneyMQClient {\n config: {\n endpoint: string;\n };\n}\n\nexport interface MoneyMQProviderProps {\n children: React.ReactNode;\n client: MoneyMQClient;\n branding?: Branding;\n}\n\n// Sandbox account interface\nexport interface SandboxAccount {\n id: string;\n name: string;\n address: string;\n secretKeyHex?: string;\n stablecoins?: {\n usdc?: string;\n };\n usdcBalance?: number;\n}\n\n// Sandbox context state\ninterface SandboxContextState {\n isSandboxMode: boolean;\n sandboxAccounts: SandboxAccount[];\n}\n\nexport const MoneyMQContext = createContext<MoneyMQClient | null>(null);\nexport const SandboxContext = createContext<SandboxContextState>({\n isSandboxMode: false,\n sandboxAccounts: [],\n});\n\nconst DEFAULT_RPC_URL = 'https://api.devnet.solana.com';\nconst SANDBOX_HASH_PREFIX = 'SURFNETxSAFEHASH';\n\ninterface ServerConfigResponse {\n x402?: {\n validator?: {\n rpcUrl?: string;\n };\n };\n}\n\ninterface SandboxAccountsResponse {\n solana?: {\n userAccounts?: Array<{\n address: string;\n label: string;\n secretKeyHex?: string;\n stablecoins?: {\n usdc?: string;\n };\n }>;\n };\n}\n\n/**\n * Normalize RPC URL for browser access (0.0.0.0 doesn't work in browsers)\n */\nfunction normalizeRpcUrl(url: string): string {\n return url.replace('0.0.0.0', 'localhost').replace('127.0.0.1', 'localhost');\n}\n\n/**\n * Get RPC URL from MoneyMQ server config\n */\nasync function getRpcUrl(apiUrl: string): Promise<string> {\n try {\n console.log('[MoneyMQ] Fetching config from:', `${apiUrl}/config`);\n const response = await fetch(`${apiUrl}/config`);\n const config = (await response.json()) as ServerConfigResponse;\n const rawRpcUrl = config.x402?.validator?.rpcUrl || DEFAULT_RPC_URL;\n console.log('[MoneyMQ] Raw RPC URL from config:', rawRpcUrl);\n const normalizedUrl = normalizeRpcUrl(rawRpcUrl);\n console.log('[MoneyMQ] Normalized RPC URL:', normalizedUrl);\n return normalizedUrl;\n } catch (err) {\n console.error('[MoneyMQ] Error fetching config:', err);\n return DEFAULT_RPC_URL;\n }\n}\n\n/**\n * Check if we're in sandbox mode by calling getLatestBlockhash RPC\n */\nasync function checkSandboxMode(rpcUrl: string): Promise<boolean> {\n try {\n console.log('[MoneyMQ] Checking sandbox mode with RPC:', rpcUrl);\n const response = await fetch(rpcUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: 1,\n method: 'getLatestBlockhash',\n params: [{ commitment: 'finalized' }],\n }),\n });\n const data = await response.json();\n const blockhash = data?.result?.value?.blockhash || '';\n const isSandbox = blockhash.startsWith(SANDBOX_HASH_PREFIX);\n console.log('[MoneyMQ] Blockhash:', blockhash, '| Sandbox:', isSandbox);\n return isSandbox;\n } catch (err) {\n console.error('[MoneyMQ] Error checking sandbox mode:', err);\n return false;\n }\n}\n\n/**\n * Fetch token balance for a token account address\n */\nasync function fetchTokenBalance(rpcUrl: string, tokenAccountAddress: string): Promise<number> {\n try {\n const response = await fetch(rpcUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: 1,\n method: 'getAccountInfo',\n params: [tokenAccountAddress, { encoding: 'jsonParsed' }],\n }),\n });\n const data = await response.json();\n if (data.result?.value?.data?.parsed?.info?.tokenAmount) {\n return parseFloat(data.result.value.data.parsed.info.tokenAmount.uiAmountString || '0');\n }\n return 0;\n } catch {\n return 0;\n }\n}\n\n/**\n * Fetch sandbox accounts from the MoneyMQ server\n */\nasync function fetchSandboxAccounts(apiUrl: string, rpcUrl: string): Promise<SandboxAccount[]> {\n try {\n console.log('[MoneyMQ] Fetching sandbox accounts from:', `${apiUrl}/sandbox/accounts`);\n const response = await fetch(`${apiUrl}/sandbox/accounts`);\n if (!response.ok) {\n console.log('[MoneyMQ] Sandbox accounts fetch failed:', response.status);\n return [];\n }\n\n const data = (await response.json()) as SandboxAccountsResponse;\n if (data.solana?.userAccounts) {\n // Fetch balances for each account in parallel\n const accounts = await Promise.all(\n data.solana.userAccounts.map(async (acc) => {\n let usdcBalance = 0;\n if (acc.stablecoins?.usdc) {\n usdcBalance = await fetchTokenBalance(rpcUrl, acc.stablecoins.usdc);\n }\n return {\n id: acc.address,\n name: acc.label,\n address: acc.address,\n secretKeyHex: acc.secretKeyHex,\n stablecoins: acc.stablecoins,\n usdcBalance,\n };\n })\n );\n console.log('[MoneyMQ] Sandbox accounts loaded:', accounts.length);\n return accounts;\n }\n return [];\n } catch (err) {\n console.error('[MoneyMQ] Error fetching sandbox accounts:', err);\n return [];\n }\n}\n\nexport function useMoneyMQ(): MoneyMQClient {\n const client = useContext(MoneyMQContext);\n if (!client) {\n throw new Error('useMoneyMQ must be used within a MoneyMQProvider');\n }\n return client;\n}\n\nexport function useSandbox(): SandboxContextState {\n return useContext(SandboxContext);\n}\n\nexport function MoneyMQProvider({\n children,\n client,\n branding,\n}: MoneyMQProviderProps) {\n const [rpcEndpoint, setRpcEndpoint] = useState<string | null>(null);\n const [isSandboxMode, setIsSandboxMode] = useState(false);\n const [sandboxAccounts, setSandboxAccounts] = useState<SandboxAccount[]>([]);\n\n useEffect(() => {\n async function initialize() {\n const rpcUrl = await getRpcUrl(client.config.endpoint);\n setRpcEndpoint(rpcUrl);\n\n // Check if we're in sandbox mode\n const isSandbox = await checkSandboxMode(rpcUrl);\n setIsSandboxMode(isSandbox);\n\n // If in sandbox mode, fetch sandbox accounts\n if (isSandbox) {\n const accounts = await fetchSandboxAccounts(client.config.endpoint, rpcUrl);\n setSandboxAccounts(accounts);\n }\n }\n initialize();\n }, [client.config.endpoint]);\n\n const wallets = useMemo(\n () => [\n new PhantomWalletAdapter(),\n new SolflareWalletAdapter(),\n ],\n []\n );\n\n const sandboxContextValue = useMemo(\n () => ({ isSandboxMode, sandboxAccounts }),\n [isSandboxMode, sandboxAccounts]\n );\n\n // Don't render until we have the RPC endpoint\n if (!rpcEndpoint) {\n return null;\n }\n\n return (\n <MoneyMQContext.Provider value={client}>\n <SandboxContext.Provider value={sandboxContextValue}>\n <ConnectionProvider endpoint={rpcEndpoint}>\n <WalletProvider wallets={wallets} autoConnect>\n <CustomWalletModalProvider branding={branding}>\n {children}\n </CustomWalletModalProvider>\n </WalletProvider>\n </ConnectionProvider>\n </SandboxContext.Provider>\n </MoneyMQContext.Provider>\n );\n}\n","'use client';\n\nimport React, { createContext, useContext, useState, useCallback, useMemo } from 'react';\nimport { WalletModal } from './wallet-modal';\n\nexport interface Branding {\n logo?: string;\n title?: string;\n description?: string;\n accentColor?: string;\n}\n\ninterface WalletModalContextState {\n visible: boolean;\n setVisible: (visible: boolean) => void;\n}\n\nconst WalletModalContext = createContext<WalletModalContextState>({\n visible: false,\n setVisible: () => {},\n});\n\nconst BrandingContext = createContext<Branding | undefined>(undefined);\n\nexport function useWalletModal() {\n return useContext(WalletModalContext);\n}\n\nexport function useBranding() {\n return useContext(BrandingContext);\n}\n\nexport interface CustomWalletModalProviderProps {\n children: React.ReactNode;\n branding?: Branding;\n}\n\nexport function CustomWalletModalProvider({ children, branding }: CustomWalletModalProviderProps) {\n const [visible, setVisible] = useState(false);\n\n const handleClose = useCallback(() => setVisible(false), []);\n\n const contextValue = useMemo(\n () => ({ visible, setVisible }),\n [visible]\n );\n\n return (\n <BrandingContext.Provider value={branding}>\n <WalletModalContext.Provider value={contextValue}>\n {children}\n <WalletModal visible={visible} onClose={handleClose} branding={branding} />\n </WalletModalContext.Provider>\n </BrandingContext.Provider>\n );\n}\n","'use client';\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useWallet } from '@solana/wallet-adapter-react';\nimport type { Wallet } from '@solana/wallet-adapter-react';\n\nexport interface WalletModalProps {\n visible: boolean;\n onClose: () => void;\n branding?: {\n logo?: string;\n title?: string;\n description?: string;\n accentColor?: string;\n };\n}\n\nconst overlayStyle: React.CSSProperties = {\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.6)',\n backdropFilter: 'blur(4px)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 9999,\n animation: 'fadeIn 150ms ease-out',\n};\n\nconst modalStyle: React.CSSProperties = {\n backgroundColor: '#18181b',\n borderRadius: '1rem',\n padding: '1.5rem',\n width: '100%',\n maxWidth: '400px',\n maxHeight: '90vh',\n overflow: 'auto',\n border: '1px solid #27272a',\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.5)',\n animation: 'slideUp 150ms ease-out',\n};\n\nconst headerStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: '0.75rem',\n marginBottom: '0.5rem',\n};\n\nconst logoStyle: React.CSSProperties = {\n width: '2.5rem',\n height: '2.5rem',\n borderRadius: '0.5rem',\n objectFit: 'contain',\n};\n\nconst titleStyle: React.CSSProperties = {\n fontSize: '1.25rem',\n fontWeight: 600,\n color: '#fafafa',\n margin: 0,\n};\n\nconst descriptionStyle: React.CSSProperties = {\n fontSize: '0.875rem',\n color: '#a1a1aa',\n marginBottom: '1.5rem',\n};\n\nconst walletListStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: '0.5rem',\n};\n\nconst walletButtonStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: '0.75rem',\n width: '100%',\n padding: '0.875rem 1rem',\n backgroundColor: '#27272a',\n border: '1px solid #3f3f46',\n borderRadius: '0.75rem',\n cursor: 'pointer',\n transition: 'all 150ms',\n textAlign: 'left',\n};\n\nconst walletIconStyle: React.CSSProperties = {\n width: '2rem',\n height: '2rem',\n borderRadius: '0.375rem',\n};\n\nconst walletNameStyle: React.CSSProperties = {\n flex: 1,\n fontSize: '0.9375rem',\n fontWeight: 500,\n color: '#fafafa',\n};\n\nconst walletTagStyle: React.CSSProperties = {\n fontSize: '0.75rem',\n padding: '0.25rem 0.5rem',\n borderRadius: '9999px',\n backgroundColor: '#3f3f46',\n color: '#a1a1aa',\n};\n\nconst closeButtonStyle: React.CSSProperties = {\n position: 'absolute',\n top: '1rem',\n right: '1rem',\n padding: '0.5rem',\n backgroundColor: 'transparent',\n border: 'none',\n borderRadius: '0.375rem',\n cursor: 'pointer',\n color: '#71717a',\n transition: 'color 150ms',\n};\n\nconst noWalletsStyle: React.CSSProperties = {\n textAlign: 'center',\n padding: '2rem 1rem',\n color: '#a1a1aa',\n fontSize: '0.875rem',\n};\n\nexport function WalletModal({ visible, onClose, branding }: WalletModalProps) {\n const { wallets, select, connecting } = useWallet();\n const [hoveredWallet, setHoveredWallet] = useState<string | null>(null);\n\n const accentColor = branding?.accentColor || '#ec4899';\n\n // Filter and sort wallets\n const sortedWallets = useMemo(() => {\n const installed: Wallet[] = [];\n const notInstalled: Wallet[] = [];\n\n for (const wallet of wallets) {\n if (wallet.readyState === 'Installed') {\n installed.push(wallet);\n } else if (wallet.readyState === 'Loadable' || wallet.readyState === 'NotDetected') {\n notInstalled.push(wallet);\n }\n }\n\n return [...installed, ...notInstalled];\n }, [wallets]);\n\n const handleSelect = useCallback((wallet: Wallet) => {\n select(wallet.adapter.name);\n onClose();\n }, [select, onClose]);\n\n // Close on escape key\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n };\n if (visible) {\n document.addEventListener('keydown', handleEscape);\n document.body.style.overflow = 'hidden';\n }\n return () => {\n document.removeEventListener('keydown', handleEscape);\n document.body.style.overflow = '';\n };\n }, [visible, onClose]);\n\n if (!visible) return null;\n\n return (\n <>\n <style>{`\n @keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n @keyframes slideUp {\n from { opacity: 0; transform: translateY(10px); }\n to { opacity: 1; transform: translateY(0); }\n }\n `}</style>\n <div style={overlayStyle} onClick={onClose}>\n <div\n style={{ ...modalStyle, position: 'relative' }}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Close button */}\n <button\n style={closeButtonStyle}\n onClick={onClose}\n onMouseEnter={(e) => (e.currentTarget.style.color = '#fafafa')}\n onMouseLeave={(e) => (e.currentTarget.style.color = '#71717a')}\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n\n {/* Header */}\n <div style={headerStyle}>\n {branding?.logo && (\n <img src={branding.logo} alt=\"\" style={logoStyle} />\n )}\n <h2 style={titleStyle}>\n {branding?.title || 'Connect Wallet'}\n </h2>\n </div>\n\n {/* Description */}\n <p style={descriptionStyle}>\n {branding?.description || 'Select a wallet to connect and pay securely.'}\n </p>\n\n {/* Wallet list */}\n <div style={walletListStyle}>\n {sortedWallets.length === 0 ? (\n <div style={noWalletsStyle}>\n No wallets found. Please install a Solana wallet extension.\n </div>\n ) : (\n sortedWallets.map((wallet) => {\n const isInstalled = wallet.readyState === 'Installed';\n const isHovered = hoveredWallet === wallet.adapter.name;\n\n return (\n <button\n key={wallet.adapter.name}\n style={{\n ...walletButtonStyle,\n backgroundColor: isHovered ? '#3f3f46' : '#27272a',\n borderColor: isHovered ? accentColor : '#3f3f46',\n }}\n onClick={() => handleSelect(wallet)}\n onMouseEnter={() => setHoveredWallet(wallet.adapter.name)}\n onMouseLeave={() => setHoveredWallet(null)}\n disabled={connecting}\n >\n <img\n src={wallet.adapter.icon}\n alt={wallet.adapter.name}\n style={walletIconStyle}\n />\n <span style={walletNameStyle}>{wallet.adapter.name}</span>\n {isInstalled ? (\n <span style={{ ...walletTagStyle, backgroundColor: accentColor + '20', color: accentColor }}>\n Detected\n </span>\n ) : (\n <span style={walletTagStyle}>Install</span>\n )}\n </button>\n );\n })\n )}\n </div>\n </div>\n </div>\n </>\n );\n}\n","'use client';\n\nimport React, { forwardRef, useEffect, useState } from 'react';\nimport { CheckoutModal } from './checkout-modal';\nimport { useMoneyMQ } from './provider';\n\n/**\n * Represents a completed payment transaction.\n *\n * @example\n * ```tsx\n * const handleSuccess = (payment: Payment) => {\n * console.log(`Payment ${payment.id} completed for ${payment.amount} ${payment.currency}`);\n * console.log(`Transaction signature: ${payment.signature}`);\n * };\n * ```\n */\nexport interface Payment {\n /** Unique payment identifier (e.g., \"pay_1234567890\") */\n id: string;\n /** Payment amount in the currency's standard unit (e.g., 9.99 for $9.99) */\n amount: number;\n /** Currency code (e.g., \"USDC\") */\n currency: string;\n /** Current status of the payment */\n status: 'pending' | 'completed' | 'failed';\n /** Blockchain transaction signature (available after completion) */\n signature?: string;\n}\n\ninterface ServerConfig {\n x402?: {\n payoutAccount?: {\n address?: string;\n currency?: string;\n };\n };\n}\n\n/**\n * Represents a price for a product.\n *\n * @example\n * ```tsx\n * const price: Price = {\n * id: 'price_abc123',\n * unit_amount: 999, // $9.99 in cents\n * currency: 'USDC',\n * product: 'prod_xyz789',\n * };\n * ```\n */\nexport interface Price {\n /** Unique price identifier from your catalog */\n id: string;\n /** Price amount in cents (e.g., 999 for $9.99) */\n unit_amount: number;\n /** Currency code (e.g., \"USDC\") */\n currency: string;\n /** Associated product ID */\n product?: string;\n}\n\n/**\n * Represents a product in your catalog.\n *\n * @example\n * ```tsx\n * const product: Product = {\n * id: 'prod_xyz789',\n * name: 'Pro Subscription',\n * description: 'Monthly access to premium features',\n * };\n * ```\n */\nexport interface Product {\n /** Unique product identifier from your catalog */\n id: string;\n /** Display name shown to the customer */\n name: string;\n /** Optional description for additional context */\n description?: string;\n}\n\n/**\n * Represents an item in the checkout basket.\n *\n * @example\n * ```tsx\n * const item: BasketItem = {\n * product: { id: 'prod_123', name: 'Pro Plan' },\n * price: { id: 'price_456', unit_amount: 999, currency: 'USDC' },\n * quantity: 1,\n * };\n * ```\n */\nexport interface BasketItem {\n /** Product details including id and name */\n product: Product;\n /** Price details including amount and currency */\n price: Price;\n /** Number of items (defaults to 1) */\n quantity?: number;\n}\n\n/**\n * Props for the CheckoutButton component.\n *\n * @example\n * ```tsx\n * <CheckoutButton\n * basket={[{ product, price }]}\n * onSuccess={(payment) => console.log('Paid!', payment.id)}\n * onError={(error) => console.error('Failed:', error)}\n * variant=\"solid\"\n * >\n * Pay Now\n * </CheckoutButton>\n * ```\n */\nexport interface CheckoutButtonProps {\n /** Array of items to purchase. Each item includes product, price, and optional quantity. */\n basket: BasketItem[];\n /** Callback fired when payment completes successfully. Receives the Payment object with transaction details. */\n onSuccess?: (payment: Payment) => void;\n /** Callback fired when payment fails. Receives the Error with failure details. */\n onError?: (error: Error) => void;\n /** Button style variant. \"solid\" has a filled background, \"outline\" has a border only. @default \"solid\" */\n variant?: 'solid' | 'outline';\n /** Custom button content. If not provided, displays \"Pay\". */\n children?: React.ReactNode;\n /** Disable the button, preventing clicks. */\n disabled?: boolean;\n /** Enable debug mode to show a debug panel with account balance in the checkout modal. @default false */\n debug?: boolean;\n}\n\nconst baseStyle: React.CSSProperties = {\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '0.5rem',\n borderRadius: '0.5rem',\n fontSize: '0.875rem',\n fontWeight: 600,\n padding: '0.625rem 1rem',\n cursor: 'pointer',\n transition: 'all 200ms',\n border: 'none',\n};\n\nconst solidStyle: React.CSSProperties = {\n ...baseStyle,\n backgroundColor: '#ec4899',\n color: 'white',\n boxShadow: '0 1px 2px 0 rgb(0 0 0 / 0.05)',\n};\n\nconst outlineStyle: React.CSSProperties = {\n ...baseStyle,\n backgroundColor: 'transparent',\n color: '#ec4899',\n border: '1px solid #ec4899',\n};\n\n/**\n * A button component that opens a checkout modal for processing payments.\n *\n * Must be used within a `MoneyMQProvider`. When clicked, displays a modal where\n * users can select their wallet and complete the payment.\n *\n * @example\n * ```tsx\n * import { MoneyMQProvider, CheckoutButton } from '@moneymq/react';\n *\n * function App() {\n * const product = { id: 'prod_123', name: 'Pro Plan' };\n * const price = { id: 'price_456', unit_amount: 999, currency: 'USDC' };\n *\n * return (\n * <MoneyMQProvider client={client}>\n * <CheckoutButton\n * basket={[{ product, price }]}\n * onSuccess={(payment) => {\n * console.log('Payment completed:', payment.signature);\n * }}\n * >\n * Subscribe - $9.99\n * </CheckoutButton>\n * </MoneyMQProvider>\n * );\n * }\n * ```\n *\n * @see {@link CheckoutButtonProps} for available props\n * @see {@link CheckoutModal} for the modal component used internally\n */\nexport const CheckoutButton = forwardRef<HTMLButtonElement, CheckoutButtonProps>(\n function CheckoutButton(\n {\n basket,\n onSuccess,\n onError,\n variant = 'solid',\n children,\n disabled,\n debug = false,\n },\n ref\n ) {\n const client = useMoneyMQ();\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [isHovered, setIsHovered] = useState(false);\n\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n // Payment data computed from basket\n const [recipient, setRecipient] = useState<string>('');\n\n // Compute totals from basket\n const { totalAmount, currency, lineItems } = React.useMemo(() => {\n if (!basket || basket.length === 0) {\n return { totalAmount: 0, currency: 'USDC', lineItems: [] };\n }\n\n // Use the currency from the first item (assuming all items have same currency)\n const baseCurrency = basket[0].price.currency.toUpperCase();\n\n const items = basket.map((item) => ({\n product: item.product,\n price: item.price,\n quantity: item.quantity ?? 1,\n subtotal: (item.price.unit_amount / 100) * (item.quantity ?? 1),\n }));\n\n const total = items.reduce((sum, item) => sum + item.subtotal, 0);\n\n return {\n totalAmount: total,\n currency: baseCurrency,\n lineItems: items,\n };\n }, [basket]);\n\n useEffect(() => {\n async function fetchPaymentDetails() {\n setIsLoading(true);\n setError(null);\n\n try {\n if (!basket || basket.length === 0) {\n throw new Error('Basket is empty');\n }\n\n const apiUrl = client.config.endpoint;\n\n // Fetch server config to get recipient\n const configResponse = await fetch(`${apiUrl}/config`);\n if (!configResponse.ok) {\n throw new Error(`Failed to fetch config: ${configResponse.status}`);\n }\n const config = (await configResponse.json()) as ServerConfig;\n if (config.x402?.payoutAccount?.address) {\n setRecipient(config.x402.payoutAccount.address);\n }\n } catch (err) {\n console.error('[CheckoutButton] Error fetching payment details:', err);\n const errorMessage = err instanceof Error ? err.message : 'Failed to load payment details';\n setError(errorMessage);\n onError?.(new Error(errorMessage));\n } finally {\n setIsLoading(false);\n }\n }\n\n fetchPaymentDetails();\n }, [basket, client.config.endpoint, onError]);\n\n const handleClick = () => {\n if (!isLoading && !error) {\n setIsModalOpen(true);\n }\n };\n\n const handlePaymentSuccess = (signature: string) => {\n const payment: Payment = {\n id: `pay_${Date.now()}`,\n amount: totalAmount,\n currency,\n status: 'completed',\n signature,\n };\n onSuccess?.(payment);\n };\n\n const handlePaymentError = (error: Error) => {\n onError?.(error);\n };\n\n const isDisabled = disabled || isLoading || !!error;\n\n const buttonStyle: React.CSSProperties = {\n ...(variant === 'outline' ? outlineStyle : solidStyle),\n backgroundColor: variant === 'solid'\n ? (isHovered && !isDisabled ? '#db2777' : '#ec4899')\n : (isHovered && !isDisabled ? 'rgba(236, 72, 153, 0.1)' : 'transparent'),\n opacity: isDisabled ? 0.5 : 1,\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n };\n\n return (\n <>\n <button\n ref={ref}\n onClick={handleClick}\n disabled={isDisabled}\n style={buttonStyle}\n title={error || undefined}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {isLoading ? (\n <span>Loading...</span>\n ) : error ? (\n <span>Error</span>\n ) : (\n children || <span>Pay</span>\n )}\n </button>\n\n <CheckoutModal\n visible={isModalOpen}\n onClose={() => setIsModalOpen(false)}\n amount={totalAmount}\n currency={currency}\n recipient={recipient}\n lineItems={lineItems}\n onSuccess={handlePaymentSuccess}\n onError={handlePaymentError}\n debug={debug}\n />\n </>\n );\n }\n);\n","'use client';\n\nimport React, { useCallback, useState, useEffect, useRef } from 'react';\nimport { useWallet } from '@solana/wallet-adapter-react';\nimport type { Wallet } from '@solana/wallet-adapter-react';\nimport { Menu, MenuButton, MenuItem, MenuItems } from '@headlessui/react';\nimport Lottie, { type LottieRefCurrentProps } from 'lottie-react';\nimport { useBranding } from './wallet-modal-provider';\nimport { useMoneyMQ, useSandbox, type SandboxAccount } from './provider';\nimport logoAnimation from './assets/logo-animation.json';\n\n// Helper to convert object to form-encoded data\nfunction encodeFormData(data: Record<string, unknown>): string {\n const params = new URLSearchParams();\n\n const addParams = (obj: Record<string, unknown>, prefix = '') => {\n for (const [key, value] of Object.entries(obj)) {\n const paramKey = prefix ? `${prefix}[${key}]` : key;\n\n if (value === null || value === undefined) {\n continue;\n } else if (typeof value === 'object' && !Array.isArray(value)) {\n addParams(value as Record<string, unknown>, paramKey);\n } else {\n params.append(paramKey, String(value));\n }\n }\n };\n\n addParams(data);\n return params.toString();\n}\n\n// Normalize RPC URL for browser access\nfunction normalizeRpcUrl(url: string): string {\n return url.replace('0.0.0.0', 'localhost').replace('127.0.0.1', 'localhost');\n}\n\n// Handle 402 Payment Required responses\nasync function makeRequestWith402Handling(\n url: string,\n method: 'POST' | 'GET',\n body: Record<string, unknown> | undefined,\n secretKeyHex: string,\n rpcUrl: string,\n headers: Record<string, string> = {}\n): Promise<unknown> {\n console.log(`[MoneyMQ] Making ${method} request to ${url}`);\n const formData = body ? encodeFormData(body) : undefined;\n\n let response = await fetch(url, {\n method,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n ...headers,\n },\n body: formData,\n });\n\n let data = await response.json();\n console.log(`[MoneyMQ] Response status: ${response.status}`, data);\n\n // Handle 402 Payment Required\n if (response.status === 402) {\n console.log('[MoneyMQ] 💳 402 Payment Required - processing payment...');\n\n const paymentRequirements = data?.payment_requirements || data?.error?.payment_requirements || [];\n\n if (paymentRequirements.length === 0) {\n console.warn('[MoneyMQ] ⚠️ No payment requirements found in 402 response');\n throw new Error('Payment required but no payment requirements provided');\n }\n\n console.log('[MoneyMQ] Payment requirements:', paymentRequirements);\n\n // Dynamic import x402 libraries\n const { createPaymentHeader, selectPaymentRequirements } = await import('x402/client');\n const { createSigner } = await import('x402-fetch');\n\n // Create signer from secret key\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const signer = await createSigner('solana', secretKeyHex, {\n svmConfig: rpcUrl,\n });\n\n // Select appropriate payment requirement\n const selectedPaymentRequirement = selectPaymentRequirements(paymentRequirements, 'solana', 'exact');\n\n console.log(`[MoneyMQ] 💰 Creating payment for ${selectedPaymentRequirement.network}...`);\n\n // Create payment header\n const paymentHeaderValue = await createPaymentHeader(\n signer,\n 1, // x402Version\n selectedPaymentRequirement,\n {\n svmConfig: {\n rpcUrl,\n },\n }\n );\n\n console.log('[MoneyMQ] ✅ Payment header created, retrying request...');\n\n // Retry with X-Payment header\n response = await fetch(url, {\n method,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'X-Payment': paymentHeaderValue,\n ...headers,\n },\n body: formData,\n });\n\n data = await response.json();\n console.log(`[MoneyMQ] Retry response status: ${response.status}`, data);\n\n if (!response.ok) {\n throw new Error(data.error?.message || 'Request failed after payment');\n }\n } else if (!response.ok) {\n throw new Error(data.error?.message || 'Request failed');\n }\n\n return data;\n}\n\n// Create and confirm payment intent for sandbox accounts\nasync function createSandboxPayment(\n apiUrl: string,\n rpcUrl: string,\n amount: number,\n currency: string,\n recipient: string,\n senderAddress: string,\n secretKeyHex: string,\n lineItems?: LineItem[]\n): Promise<string> {\n console.log('[MoneyMQ] Creating sandbox payment...', { amount, currency, recipient, senderAddress });\n\n // Build description from line items\n const description = lineItems && lineItems.length > 0\n ? `Purchase - ${lineItems.map(item => item.product.name).join(', ')}`\n : 'Payment';\n\n // Step 1: Create payment intent\n const paymentIntent = await makeRequestWith402Handling(\n `${apiUrl}/catalog/v1/payment_intents`,\n 'POST',\n {\n amount: Math.round(amount * 100), // Convert to cents (Stripe-style)\n currency: currency.toLowerCase(),\n customer: senderAddress,\n description,\n metadata: {\n sender_address: senderAddress,\n recipient_address: recipient,\n },\n },\n secretKeyHex,\n rpcUrl\n ) as { id: string };\n\n console.log('[MoneyMQ] Payment intent created:', paymentIntent);\n\n // Step 2: Confirm payment intent\n console.log('[MoneyMQ] Confirming payment intent:', paymentIntent.id);\n const confirmedIntent = await makeRequestWith402Handling(\n `${apiUrl}/catalog/v1/payment_intents/${paymentIntent.id}/confirm`,\n 'POST',\n {},\n secretKeyHex,\n rpcUrl\n ) as { id: string; status: string };\n\n console.log('[MoneyMQ] Payment intent confirmed:', confirmedIntent);\n\n return confirmedIntent.id;\n}\n\n// Payment method types\ntype PaymentMethodType = 'browser_extension' | 'sandbox_account';\n\ninterface SelectedPaymentMethod {\n type: PaymentMethodType;\n wallet?: Wallet;\n sandboxAccount?: SandboxAccount;\n}\n\n/**\n * Represents a line item in the checkout, including product, price, quantity, and calculated subtotal.\n *\n * @example\n * ```tsx\n * const lineItem: LineItem = {\n * product: { id: 'prod_123', name: 'Pro Plan' },\n * price: { id: 'price_456', unit_amount: 999, currency: 'USDC' },\n * quantity: 2,\n * subtotal: 19.98,\n * };\n * ```\n */\nexport interface LineItem {\n /** Product information */\n product: {\n /** Unique product identifier */\n id: string;\n /** Display name shown to the customer */\n name: string;\n /** Optional description */\n description?: string;\n };\n /** Price information */\n price: {\n /** Unique price identifier */\n id: string;\n /** Price amount in cents (e.g., 999 for $9.99) */\n unit_amount: number;\n /** Currency code (e.g., \"USDC\") */\n currency: string;\n };\n /** Quantity of this item */\n quantity: number;\n /** Calculated subtotal (unit_amount / 100 * quantity) */\n subtotal: number;\n}\n\n/**\n * Props for the CheckoutModal component.\n *\n * @example\n * ```tsx\n * <CheckoutModal\n * visible={isOpen}\n * onClose={() => setIsOpen(false)}\n * amount={9.99}\n * currency=\"USDC\"\n * recipient=\"7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU\"\n * onSuccess={(signature) => console.log('Paid:', signature)}\n * />\n * ```\n */\nexport interface CheckoutModalProps {\n /** Whether the modal is visible */\n visible: boolean;\n /** Callback to close the modal */\n onClose: () => void;\n /** Total payment amount (e.g., 9.99 for $9.99) */\n amount: number;\n /** Currency code (e.g., \"USDC\") */\n currency: string;\n /** Recipient wallet address */\n recipient: string;\n /** Optional line items to display in the checkout summary */\n lineItems?: LineItem[];\n /** Callback fired when payment completes. Receives the transaction signature. */\n onSuccess?: (signature: string) => void;\n /** Callback fired when payment fails. Receives the Error with failure details. */\n onError?: (error: Error) => void;\n /** Accent color for UI elements. @default \"#ec4899\" */\n accentColor?: string;\n /** Enable debug mode to show account balance panel. @default false */\n debug?: boolean;\n}\n\nconst truncateAddress = (address: string) => {\n if (address.length <= 12) return address;\n return `${address.slice(0, 4)}...${address.slice(-4)}`;\n};\n\n/**\n * A modal component for completing payments.\n *\n * Displays a payment interface where users can:\n * - View the total amount and line items\n * - Select a payment method (browser wallet or sandbox account)\n * - Complete the payment transaction\n *\n * Must be used within a `MoneyMQProvider`. Usually used internally by `CheckoutButton`,\n * but can be rendered directly for custom checkout flows.\n *\n * @example\n * ```tsx\n * import { MoneyMQProvider, CheckoutModal } from '@moneymq/react';\n *\n * function CustomCheckout() {\n * const [isOpen, setIsOpen] = useState(false);\n *\n * return (\n * <MoneyMQProvider client={client}>\n * <button onClick={() => setIsOpen(true)}>Pay</button>\n * <CheckoutModal\n * visible={isOpen}\n * onClose={() => setIsOpen(false)}\n * amount={9.99}\n * currency=\"USDC\"\n * recipient=\"7xKXtg...\"\n * lineItems={[\n * {\n * product: { id: 'prod_1', name: 'Pro Plan' },\n * price: { id: 'price_1', unit_amount: 999, currency: 'USDC' },\n * quantity: 1,\n * subtotal: 9.99,\n * },\n * ]}\n * onSuccess={(signature) => {\n * console.log('Payment successful:', signature);\n * setIsOpen(false);\n * }}\n * />\n * </MoneyMQProvider>\n * );\n * }\n * ```\n *\n * @see {@link CheckoutModalProps} for available props\n * @see {@link CheckoutButton} for a simpler button-based checkout\n */\nexport function CheckoutModal({\n visible,\n onClose,\n amount,\n currency,\n recipient,\n lineItems,\n onSuccess,\n onError,\n accentColor = '#ec4899',\n debug = false,\n}: CheckoutModalProps) {\n const [isSending, setIsSending] = useState(false);\n const [copiedSender, setCopiedSender] = useState(false);\n const [copiedRecipient, setCopiedRecipient] = useState(false);\n const [showDetails, setShowDetails] = useState(false);\n const [showDebug, setShowDebug] = useState(false);\n const [accountBalance, setAccountBalance] = useState<number | null>(null);\n const [selectedWallet, setSelectedWallet] = useState<Wallet | null>(null);\n const [selectedPaymentMethod, setSelectedPaymentMethod] = useState<SelectedPaymentMethod | null>(null);\n const { publicKey, connected, disconnect, wallets, select, wallet: connectedWallet } = useWallet();\n const branding = useBranding();\n const { isSandboxMode, sandboxAccounts } = useSandbox();\n const client = useMoneyMQ();\n const lottieRef = useRef<LottieRefCurrentProps | null>(null);\n\n const copyToClipboard = (text: string, type: 'sender' | 'recipient') => {\n navigator.clipboard.writeText(text);\n if (type === 'sender') {\n setCopiedSender(true);\n setTimeout(() => setCopiedSender(false), 2000);\n } else {\n setCopiedRecipient(true);\n setTimeout(() => setCopiedRecipient(false), 2000);\n }\n };\n\n const handleSelectWallet = (wallet: Wallet) => {\n setSelectedWallet(wallet);\n setSelectedPaymentMethod({ type: 'browser_extension', wallet });\n select(wallet.adapter.name);\n };\n\n const handleSelectSandboxAccount = (account: SandboxAccount) => {\n setSelectedPaymentMethod({ type: 'sandbox_account', sandboxAccount: account });\n setSelectedWallet(null);\n };\n\n const handleDisconnect = async () => {\n await disconnect();\n setSelectedWallet(null);\n setSelectedPaymentMethod(null);\n };\n\n // Filter to only show installed/detected wallets\n const availableWallets = wallets.filter(\n (wallet) => wallet.readyState === 'Installed' || wallet.readyState === 'Loadable'\n );\n\n // Limit sandbox accounts to first 3\n const displayedSandboxAccounts = sandboxAccounts.slice(0, 3);\n\n // Get the current wallet icon (connected wallet, selected wallet, or default)\n const currentWalletIcon = connectedWallet?.adapter.icon || selectedWallet?.adapter.icon;\n const currentWalletName = connectedWallet?.adapter.name || selectedWallet?.adapter.name;\n\n // Get current selection display info\n const getCurrentSelectionDisplay = () => {\n if (connected && publicKey) {\n return {\n icon: currentWalletIcon,\n name: currentWalletName,\n address: publicKey.toBase58(),\n type: 'browser_extension' as const,\n };\n }\n if (selectedPaymentMethod?.type === 'sandbox_account' && selectedPaymentMethod.sandboxAccount) {\n const name = selectedPaymentMethod.sandboxAccount.name;\n return {\n icon: null,\n name: name.charAt(0).toUpperCase() + name.slice(1),\n address: selectedPaymentMethod.sandboxAccount.address,\n type: 'sandbox_account' as const,\n };\n }\n return null;\n };\n\n const currentSelection = getCurrentSelectionDisplay();\n\n // Fetch account balance when debug is enabled and an account is selected\n React.useEffect(() => {\n if (!debug || !currentSelection) {\n setAccountBalance(null);\n return;\n }\n\n async function fetchBalance() {\n try {\n // For sandbox accounts, use the stored balance\n if (currentSelection?.type === 'sandbox_account' && selectedPaymentMethod?.sandboxAccount) {\n setAccountBalance(selectedPaymentMethod.sandboxAccount.usdcBalance ?? null);\n return;\n }\n\n // For browser extension wallets, fetch from RPC\n if (currentSelection?.type === 'browser_extension' && publicKey) {\n const apiUrl = normalizeRpcUrl(client.config.endpoint);\n try {\n const configResponse = await fetch(`${apiUrl}/config`);\n const config = await configResponse.json();\n const rpcUrl = normalizeRpcUrl(config.x402?.validator?.rpcUrl || 'http://localhost:8899');\n\n // Fetch USDC token account balance\n const response = await fetch(rpcUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: 1,\n method: 'getTokenAccountsByOwner',\n params: [\n publicKey.toBase58(),\n { programId: 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' },\n { encoding: 'jsonParsed' },\n ],\n }),\n });\n const data = await response.json();\n const usdcAccount = data.result?.value?.find(\n (acc: { account: { data: { parsed: { info: { mint: string; tokenAmount: { uiAmount: number } } } } } }) =>\n acc.account.data.parsed.info.mint === 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v' // USDC mint\n );\n if (usdcAccount) {\n setAccountBalance(usdcAccount.account.data.parsed.info.tokenAmount.uiAmount);\n } else {\n setAccountBalance(0);\n }\n } catch {\n console.log('[MoneyMQ] Could not fetch balance');\n setAccountBalance(null);\n }\n }\n } catch {\n setAccountBalance(null);\n }\n }\n\n fetchBalance();\n }, [debug, currentSelection, selectedPaymentMethod, publicKey, client.config.endpoint]);\n\n const handlePay = useCallback(async () => {\n if (!recipient) return;\n\n // Determine the sender based on payment method\n let senderAddress: string;\n let secretKeyHex: string | undefined;\n\n if (selectedPaymentMethod?.type === 'sandbox_account' && selectedPaymentMethod.sandboxAccount) {\n senderAddress = selectedPaymentMethod.sandboxAccount.address;\n secretKeyHex = selectedPaymentMethod.sandboxAccount.secretKeyHex;\n } else if (publicKey) {\n senderAddress = publicKey.toBase58();\n } else {\n return;\n }\n\n setIsSending(true);\n\n try {\n // For sandbox accounts, handle payment directly\n if (selectedPaymentMethod?.type === 'sandbox_account' && secretKeyHex) {\n const apiUrl = normalizeRpcUrl(client.config.endpoint);\n\n // Fetch RPC URL from config\n let rpcUrl = 'http://localhost:8899';\n try {\n const configResponse = await fetch(`${apiUrl}/config`);\n const config = await configResponse.json();\n rpcUrl = normalizeRpcUrl(config.x402?.validator?.rpcUrl || rpcUrl);\n } catch {\n console.log('[MoneyMQ] Using default RPC URL');\n }\n\n const paymentId = await createSandboxPayment(\n apiUrl,\n rpcUrl,\n amount,\n currency,\n recipient,\n senderAddress,\n secretKeyHex,\n lineItems\n );\n\n setIsSending(false);\n onSuccess?.(paymentId);\n onClose();\n return;\n }\n\n // For browser extension wallets, dispatch event for external handling\n const event = new CustomEvent('moneymq:payment-initiated', {\n detail: {\n amount,\n currency,\n recipient,\n sender: senderAddress,\n paymentMethod: selectedPaymentMethod?.type || 'browser_extension',\n },\n bubbles: true,\n });\n window.dispatchEvent(event);\n\n const signature = await new Promise<string>((resolve, reject) => {\n const handleSuccess = (e: Event) => {\n const customEvent = e as CustomEvent<{ signature: string }>;\n cleanup();\n resolve(customEvent.detail.signature);\n };\n\n const handleError = (e: Event) => {\n const customEvent = e as CustomEvent<Error>;\n cleanup();\n reject(customEvent.detail);\n };\n\n const cleanup = () => {\n window.removeEventListener('moneymq:payment-success', handleSuccess);\n window.removeEventListener('moneymq:payment-error', handleError);\n };\n\n window.addEventListener('moneymq:payment-success', handleSuccess);\n window.addEventListener('moneymq:payment-error', handleError);\n\n setTimeout(() => {\n cleanup();\n reject(new Error('Payment timeout'));\n }, 60000);\n });\n\n setIsSending(false);\n onSuccess?.(signature);\n onClose();\n } catch (err) {\n console.error('Payment failed:', err);\n setIsSending(false);\n onError?.(err instanceof Error ? err : new Error(String(err)));\n }\n }, [publicKey, recipient, amount, currency, onSuccess, onError, onClose, selectedPaymentMethod, client.config.endpoint, lineItems]);\n\n // Can pay with either browser extension (connected) or sandbox account\n const canPay = (\n ((connected && publicKey) || selectedPaymentMethod?.type === 'sandbox_account') &&\n recipient &&\n !isSending\n );\n\n // Play Lottie animation every 3 seconds when canPay is true\n useEffect(() => {\n if (!canPay || !visible) return;\n\n // Play immediately when canPay becomes true\n lottieRef.current?.goToAndPlay(0, true);\n\n const interval = setInterval(() => {\n lottieRef.current?.goToAndPlay(0, true);\n }, 3000);\n\n return () => clearInterval(interval);\n }, [canPay, visible]);\n\n if (!visible) return null;\n\n // Wallet icon SVG\n const WalletIcon = () => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <path d=\"M21 12V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2h14a2 2 0 002-2v-5z\" />\n <path d=\"M16 12h.01\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n );\n\n // Sandbox account icon SVG (beaker/test tube)\n const SandboxIcon = () => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <path d=\"M9.75 3.104v5.714a2.25 2.25 0 0 1-.659 1.591L5 14.5M9.75 3.104c-.251.023-.501.05-.75.082m.75-.082a24.301 24.301 0 0 1 4.5 0m0 0v5.714c0 .597.237 1.17.659 1.591L19.8 15.3M14.25 3.104c.251.023.501.05.75.082M19.8 15.3l-1.57.393A9.065 9.065 0 0 1 12 15a9.065 9.065 0 0 1-6.23.693L5 15.5m14.8-.2a2.25 2.25 0 0 1 .775 2.646l-.972 2.916a2.25 2.25 0 0 1-2.134 1.538H6.532a2.25 2.25 0 0 1-2.135-1.538l-.971-2.916A2.25 2.25 0 0 1 4.2 15.3\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n\n // Wrench/Screwdriver icon for debug mode\n const WrenchIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <path d=\"M11.42 15.17L17.25 21A2.652 2.652 0 0 0 21 17.25l-5.877-5.877M11.42 15.17l2.496-3.03c.317-.384.74-.626 1.208-.766M11.42 15.17l-4.655 5.653a2.548 2.548 0 1 1-3.586-3.586l6.837-5.63m5.108-.233c.55-.164 1.163-.188 1.743-.14a4.5 4.5 0 0 0 4.486-6.336l-3.276 3.277a3.004 3.004 0 0 1-2.25-2.25l3.276-3.276a4.5 4.5 0 0 0-6.336 4.486c.091 1.076-.071 2.264-.904 2.95l-.102.085m-1.745 1.437L5.909 7.5H4.5L2.25 3.75l1.5-1.5L7.5 4.5v1.409l4.26 4.26m-1.745 1.437 1.745-1.437m6.615 8.206L15.75 15.75M4.867 19.125h.008v.008h-.008v-.008Z\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n\n // MoneyMQ Logo\n const MoneyMQLogo = () => (\n <svg width=\"80\" height=\"17\" viewBox=\"0 0 471 99\" fill=\"none\">\n <g clipPath=\"url(#clip0_524_7)\">\n <path d=\"M12.8892 77.1417H0V0.637573H14.3415L40.0291 60.1104L65.8075 0.637573H80.149V77.1417H67.169V25.5014L44.9306 77.2327H35.0368L12.8892 25.5014V77.2327V77.1417Z\" fill=\"white\"/>\n <path d=\"M113.28 77.9614C108.015 77.9614 103.295 76.7774 99.2104 74.5005C95.1257 72.2235 91.8581 68.9448 89.5888 64.7553C87.2289 60.5658 86.1396 55.6476 86.1396 49.9098C86.1396 44.172 87.3196 39.1628 89.7704 34.9733C92.2211 30.7838 95.4888 27.5051 99.6642 25.2281C103.84 22.9512 108.56 21.7673 113.733 21.7673C118.907 21.7673 123.627 22.9512 127.803 25.2281C131.978 27.5051 135.336 30.7838 137.787 34.9733C140.238 39.1628 141.509 44.081 141.509 49.8188C141.509 55.5566 140.238 60.5658 137.787 64.7553C135.246 68.9448 131.887 72.2235 127.621 74.5005C123.355 76.7774 118.635 77.9614 113.37 77.9614H113.28ZM113.189 66.9411C115.73 66.9411 118.181 66.3036 120.45 65.1196C122.72 63.8445 124.626 62.023 126.078 59.4729C127.53 56.9227 128.257 53.735 128.257 49.8188C128.257 45.9025 127.53 42.897 126.169 40.3468C124.807 37.7967 122.992 35.9752 120.723 34.7001C118.453 33.425 116.003 32.8786 113.461 32.8786C110.92 32.8786 108.56 33.5161 106.381 34.7001C104.203 35.9752 102.478 37.7967 101.207 40.3468C99.9365 42.897 99.3011 46.0846 99.3011 50.0009C99.3011 53.9172 99.9365 56.9227 101.117 59.4729C102.387 62.023 104.021 63.8445 106.2 65.1196C108.378 66.3947 110.647 66.9411 113.189 66.9411Z\" fill=\"white\"/>\n <path d=\"M146.41 22.4959H157.484L158.392 27.8694C160.207 25.9568 162.386 24.4995 164.927 23.4066C167.469 22.3137 170.192 21.7673 173.096 21.7673C177.272 21.7673 180.993 22.678 184.079 24.4085C187.166 26.23 189.526 28.7801 191.25 32.241C192.884 35.7019 193.792 39.9825 193.792 45.1739V77.0506H181.356V46.9043C181.356 42.2594 180.449 38.7075 178.633 36.4305C176.818 34.1536 174.095 32.9696 170.373 32.9696C166.652 32.9696 163.747 34.1536 161.75 36.5216C159.753 38.8896 158.846 42.4416 158.846 47.0865V77.1417H146.501V22.4959H146.41Z\" fill=\"white\"/>\n <path d=\"M225.107 77.9614C219.661 77.9614 214.85 76.7774 210.765 74.3183C206.681 71.8592 203.504 68.5805 201.144 64.2999C198.875 60.0193 197.695 55.0101 197.695 49.4545C197.695 44.172 198.784 39.4361 201.053 35.2466C203.322 31.057 206.409 27.7783 210.402 25.4103C214.396 23.0423 218.935 21.7673 223.927 21.7673C228.919 21.7673 233.73 22.8602 237.633 25.1371C241.536 27.414 244.622 30.5106 246.892 34.609C249.161 38.6164 250.25 43.3523 250.25 48.6348C250.25 49.5455 250.25 50.4563 250.068 51.4581C249.978 52.46 249.796 53.4618 249.705 54.5547H211.038C211.31 57.1959 212.127 59.3818 213.398 61.2033C214.669 63.0248 216.302 64.4821 218.209 65.4839C220.205 66.4857 222.475 67.0322 225.107 67.0322C228.102 67.0322 230.825 66.3947 233.185 65.1196C235.636 63.8445 237.27 62.2051 238.268 60.2925L249.07 63.9356C246.892 68.3073 243.715 71.7682 239.448 74.2272C235.182 76.6863 230.372 77.9614 225.016 77.9614H225.107ZM236.816 44.5363C236.816 42.2594 236.272 40.2557 235.092 38.4342C233.912 36.6127 232.368 35.1555 230.553 34.1536C228.647 33.0607 226.559 32.6053 224.199 32.6053C222.112 32.6053 220.115 33.1518 218.39 34.1536C216.575 35.1555 215.122 36.6127 213.852 38.3431C212.581 40.1647 211.764 42.2594 211.31 44.6274H236.816V44.5363Z\" fill=\"white\"/>\n <path d=\"M291.368 22.4958H304.439L272.398 99H260.235L270.038 75.5022L248.707 22.4958H262.413L276.754 61.2033L291.368 22.4958Z\" fill=\"white\"/>\n <path d=\"M320.687 77.1417H307.797V0.637573H322.139L347.827 60.1104L373.605 0.637573H387.946V77.1417H374.966V25.5014L352.728 77.2327H342.834L320.596 25.5014V77.2327L320.687 77.1417Z\" fill=\"white\"/>\n <path d=\"M432.332 77.9614C426.977 77.9614 421.894 77.0506 417.174 75.138C412.454 73.2254 408.369 70.5842 404.829 67.1233C401.289 63.6624 398.566 59.5639 396.569 54.7369C394.573 50.0009 393.574 44.7185 393.574 38.9807C393.574 33.2429 394.573 28.0515 396.569 23.3155C398.566 18.5796 401.289 14.3901 404.829 10.9292C408.369 7.46826 412.454 4.73597 417.174 2.82337C421.894 0.910764 426.886 0 432.332 0C437.779 0 442.771 0.910764 447.4 2.82337C452.029 4.73597 456.205 7.37719 459.745 10.9292C463.285 14.3901 466.008 18.5796 468.005 23.3155C470.002 28.0515 471 33.3339 471 38.9807C471 44.6274 470.002 50.0009 468.095 54.7369C466.098 59.4729 463.375 63.6624 459.835 67.1233C456.295 70.5842 452.12 73.2254 447.491 75.138C442.862 77.0506 437.779 77.9614 432.423 77.9614H432.332ZM432.242 66.9411C437.143 66.9411 441.591 65.7571 445.403 63.4802C449.215 61.2033 452.302 57.9246 454.571 53.735C456.84 49.5455 457.929 44.6274 457.929 38.8896C457.929 33.1518 456.84 28.1426 454.571 24.0442C452.302 19.9457 449.306 16.667 445.403 14.3901C441.591 12.1132 437.143 10.9292 432.242 10.9292C427.34 10.9292 422.892 12.1132 419.08 14.3901C415.268 16.667 412.182 19.9457 410.003 24.0442C407.825 28.1426 406.736 33.1518 406.736 38.8896C406.736 44.6274 407.825 49.5455 410.094 53.735C412.273 57.9246 415.359 61.2033 419.171 63.4802C422.983 65.7571 427.34 66.9411 432.332 66.9411H432.242ZM426.251 55.0101H438.868V87.9798H426.251V55.0101Z\" fill=\"white\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_524_7\">\n <rect width=\"471\" height=\"99\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n );\n\n\n return (\n <>\n <style>{`\n @keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n `}</style>\n\n {/* Backdrop */}\n <div\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 9998,\n backgroundColor: 'rgba(0, 0, 0, 0.6)',\n backdropFilter: 'blur(8px)',\n }}\n onClick={onClose}\n />\n\n {/* Modal */}\n <div\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 9999,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '1rem',\n }}\n onClick={onClose}\n >\n <div\n style={{\n width: '100%',\n maxWidth: '380px',\n backgroundColor: '#2c2c2e',\n borderRadius: '1rem',\n overflow: 'hidden',\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.5)',\n }}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Header */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '1rem 1.25rem',\n borderBottom: '1px solid #3a3a3c',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n {branding?.logo ? (\n <img\n src={branding.logo}\n alt=\"Logo\"\n style={{ height: '24px', width: 'auto', filter: 'invert(1)' }}\n />\n ) : (\n <MoneyMQLogo />\n )}\n {isSandboxMode && (\n <span style={{ fontSize: '0.75rem', fontWeight: 600, color: '#ff9f0a', position: 'relative', top: '-1px' }}>\n {'{ sandbox }'}\n </span>\n )}\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n {debug && (\n <button\n onClick={() => setShowDebug(!showDebug)}\n style={{\n width: '28px',\n height: '28px',\n borderRadius: '9999px',\n border: 'none',\n backgroundColor: showDebug ? 'rgba(255, 159, 10, 0.2)' : '#3a3a3c',\n color: showDebug ? '#ff9f0a' : '#8e8e93',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 0,\n transition: 'all 150ms',\n }}\n title=\"Debug info\"\n >\n <WrenchIcon />\n </button>\n )}\n <button\n onClick={onClose}\n style={{\n padding: '0.375rem 0.75rem',\n fontSize: '0.8125rem',\n fontWeight: 500,\n color: '#8e8e93',\n backgroundColor: '#3a3a3c',\n borderRadius: '9999px',\n border: 'none',\n cursor: 'pointer',\n }}\n >\n cancel\n </button>\n </div>\n </div>\n\n {/* Content */}\n <div style={{ padding: '0.75rem' }}>\n {/* From (Wallet/Sandbox) Card */}\n {currentSelection ? (\n <div\n style={{\n backgroundColor: '#3a3a3c',\n borderRadius: '0.75rem',\n padding: '0.875rem 1rem',\n marginBottom: '0.5rem',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.75rem' }}>\n <div\n style={{\n width: '40px',\n height: '40px',\n borderRadius: '0.5rem',\n backgroundColor: currentSelection.icon ? 'transparent' : '#636366',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: '#fff',\n overflow: 'hidden',\n }}\n >\n {currentSelection.icon ? (\n <img\n src={currentSelection.icon}\n alt={currentSelection.name || 'Wallet'}\n style={{ width: '40px', height: '40px', borderRadius: '0.5rem' }}\n />\n ) : currentSelection.type === 'sandbox_account' ? (\n <SandboxIcon />\n ) : (\n <WalletIcon />\n )}\n </div>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.375rem', marginBottom: '0.125rem' }}>\n <span style={{ fontSize: '0.75rem', color: '#8e8e93' }}>\n From {truncateAddress(currentSelection.address)}\n </span>\n <button\n onClick={() => copyToClipboard(currentSelection.address, 'sender')}\n style={{\n padding: 0,\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n color: copiedSender ? '#30d158' : '#8e8e93',\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1\" />\n </svg>\n </button>\n </div>\n <span\n style={{\n fontSize: '0.9375rem',\n fontWeight: 500,\n color: '#fff',\n }}\n >\n {currentSelection.name}\n </span>\n </div>\n <button\n onClick={handleDisconnect}\n style={{\n fontSize: '0.75rem',\n fontWeight: 500,\n color: '#ff453a',\n backgroundColor: 'rgba(255, 69, 58, 0.15)',\n borderRadius: '9999px',\n border: 'none',\n cursor: 'pointer',\n padding: '0.25rem 0.625rem',\n }}\n >\n unlink\n </button>\n </div>\n </div>\n ) : (\n <Menu as=\"div\" style={{ position: 'relative', marginBottom: '0.5rem' }}>\n <MenuButton\n style={{\n width: '100%',\n backgroundColor: '#3a3a3c',\n borderRadius: '0.75rem',\n padding: '0.875rem 1rem',\n border: 'none',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n gap: '0.75rem',\n textAlign: 'left',\n }}\n >\n <div\n style={{\n width: '40px',\n height: '40px',\n borderRadius: '0.5rem',\n backgroundColor: currentWalletIcon ? 'transparent' : '#636366',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: '#fff',\n overflow: 'hidden',\n flexShrink: 0,\n }}\n >\n {currentWalletIcon ? (\n <img\n src={currentWalletIcon}\n alt={currentWalletName || 'Wallet'}\n style={{ width: '40px', height: '40px', borderRadius: '0.5rem' }}\n />\n ) : (\n <WalletIcon />\n )}\n </div>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ fontSize: '0.75rem', color: '#8e8e93', marginBottom: '0.125rem' }}>\n From\n </div>\n <span\n style={{\n fontSize: '0.9375rem',\n fontWeight: 500,\n color: '#0a84ff',\n }}\n >\n {selectedWallet ? selectedWallet.adapter.name : 'Connect Wallet'}\n </span>\n </div>\n {/* ChevronUpDownIcon */}\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"#8e8e93\"\n style={{ flexShrink: 0 }}\n >\n <path fillRule=\"evenodd\" d=\"M5.22 10.22a.75.75 0 0 1 1.06 0L8 11.94l1.72-1.72a.75.75 0 1 1 1.06 1.06l-2.25 2.25a.75.75 0 0 1-1.06 0l-2.25-2.25a.75.75 0 0 1 0-1.06ZM10.78 5.78a.75.75 0 0 1-1.06 0L8 4.06 6.28 5.78a.75.75 0 0 1-1.06-1.06l2.25-2.25a.75.75 0 0 1 1.06 0l2.25 2.25a.75.75 0 0 1 0 1.06Z\" clipRule=\"evenodd\" />\n </svg>\n </MenuButton>\n <MenuItems\n anchor=\"bottom start\"\n style={{\n backgroundColor: '#2c2c2e',\n borderRadius: '0.75rem',\n padding: '0.25rem',\n boxShadow: '0 10px 25px rgba(0, 0, 0, 0.4)',\n zIndex: 10000,\n outline: 'none',\n border: '1px solid #48484a',\n maxHeight: '300px',\n overflowY: 'auto',\n width: 'var(--button-width)',\n marginTop: '0.25rem',\n }}\n >\n {/* Sandbox Accounts Section */}\n {isSandboxMode && displayedSandboxAccounts.length > 0 && (\n <>\n {displayedSandboxAccounts.map((account) => (\n <MenuItem key={account.id}>\n {({ focus }) => (\n <button\n onClick={() => handleSelectSandboxAccount(account)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '0.75rem',\n padding: '0.875rem 1rem',\n backgroundColor: focus ? '#3a3a3c' : 'transparent',\n borderRadius: '0.5rem',\n border: 'none',\n cursor: 'pointer',\n width: '100%',\n textAlign: 'left',\n transition: 'background-color 150ms',\n }}\n >\n <div\n style={{\n width: '40px',\n height: '40px',\n borderRadius: '0.5rem',\n backgroundColor: '#636366',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n flexShrink: 0,\n color: '#fff',\n }}\n >\n <SandboxIcon />\n </div>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.375rem', marginBottom: '0.125rem' }}>\n <span style={{ fontSize: '0.75rem', color: '#8e8e93' }}>\n From {truncateAddress(account.address)}\n </span>\n <span\n role=\"button\"\n tabIndex={0}\n onClick={(e) => {\n e.stopPropagation();\n navigator.clipboard.writeText(account.address);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.stopPropagation();\n navigator.clipboard.writeText(account.address);\n }\n }}\n style={{\n padding: 0,\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n color: '#8e8e93',\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1\" />\n </svg>\n </span>\n </div>\n <span\n style={{\n fontSize: '0.9375rem',\n fontWeight: 500,\n color: '#fff',\n }}\n >\n {account.name.charAt(0).toUpperCase() + account.name.slice(1)}\n </span>\n </div>\n {account.usdcBalance !== undefined && (\n <span\n style={{\n fontSize: '0.6875rem',\n color: '#ff9f0a',\n backgroundColor: 'rgba(255, 159, 10, 0.15)',\n padding: '0.25rem 0.5rem',\n borderRadius: '0.25rem',\n flexShrink: 0,\n }}\n >\n {account.usdcBalance.toLocaleString()} USDC\n </span>\n )}\n </button>\n )}\n </MenuItem>\n ))}\n {/* Divider between sandbox and browser extensions */}\n {availableWallets.length > 0 && (\n <div style={{ height: '1px', backgroundColor: '#48484a', margin: '0.25rem 0' }} />\n )}\n </>\n )}\n\n {/* Browser Extension Wallets Section */}\n {availableWallets.length > 0 ? (\n availableWallets.map((wallet) => (\n <MenuItem key={wallet.adapter.name}>\n {({ focus }) => (\n <button\n onClick={() => handleSelectWallet(wallet)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '0.75rem',\n padding: '0.875rem 1rem',\n backgroundColor: focus ? '#3a3a3c' : 'transparent',\n borderRadius: '0.5rem',\n border: 'none',\n cursor: 'pointer',\n width: '100%',\n textAlign: 'left',\n transition: 'background-color 150ms',\n }}\n >\n <div\n style={{\n width: '40px',\n height: '40px',\n borderRadius: '0.5rem',\n backgroundColor: '#636366',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n flexShrink: 0,\n }}\n >\n {wallet.adapter.icon ? (\n <img\n src={wallet.adapter.icon}\n alt={wallet.adapter.name}\n style={{\n width: '40px',\n height: '40px',\n borderRadius: '0.5rem',\n }}\n />\n ) : (\n <WalletIcon />\n )}\n </div>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ fontSize: '0.75rem', color: '#8e8e93', marginBottom: '0.125rem' }}>\n Browser Extension\n </div>\n <span\n style={{\n fontSize: '0.9375rem',\n fontWeight: 500,\n color: '#fff',\n }}\n >\n {wallet.adapter.name}\n </span>\n </div>\n {wallet.readyState === 'Installed' && (\n <span\n style={{\n fontSize: '0.6875rem',\n color: '#30d158',\n backgroundColor: 'rgba(48, 209, 88, 0.15)',\n padding: '0.25rem 0.5rem',\n borderRadius: '0.25rem',\n flexShrink: 0,\n }}\n >\n Detected\n </span>\n )}\n </button>\n )}\n </MenuItem>\n ))\n ) : !isSandboxMode || displayedSandboxAccounts.length === 0 ? (\n <div\n style={{\n textAlign: 'center',\n padding: '1.5rem',\n color: '#8e8e93',\n fontSize: '0.875rem',\n }}\n >\n No wallets detected\n </div>\n ) : null}\n </MenuItems>\n </Menu>\n )}\n\n </div>\n\n {/* Footer with amount and pay button */}\n <div\n style={{\n padding: '1rem 1.25rem 1.25rem',\n borderTop: '1px solid #3a3a3c',\n }}\n >\n {/* Line items and amount */}\n <div style={{ marginBottom: '1rem' }}>\n {/* Line items list */}\n {lineItems && lineItems.length > 0 && (\n <div style={{ marginBottom: '0.75rem' }}>\n {lineItems.map((item, index) => (\n <div\n key={item.product.id + '-' + index}\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: '0.5rem 0',\n borderBottom: index < lineItems.length - 1 ? '1px solid #3a3a3c' : 'none',\n }}\n >\n <div style={{ flex: 1 }}>\n <div style={{ fontSize: '0.875rem', color: '#fff', fontWeight: 500 }}>\n {item.product.name}\n </div>\n {item.quantity > 1 && (\n <div style={{ fontSize: '0.75rem', color: '#8e8e93' }}>\n Qty: {item.quantity} × {(item.price.unit_amount / 100).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} {item.price.currency.toUpperCase()}\n </div>\n )}\n </div>\n <div style={{ fontSize: '0.875rem', color: '#fff', fontWeight: 500 }}>\n {item.subtotal.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} {item.price.currency.toUpperCase()}\n </div>\n </div>\n ))}\n </div>\n )}\n\n <div style={{ fontSize: '0.875rem', color: '#8e8e93', marginBottom: '0.25rem' }}>\n Total\n </div>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <div style={{ display: 'flex', alignItems: 'baseline', gap: '0.375rem' }}>\n <span style={{ fontSize: '2rem', fontWeight: 600, color: '#fff' }}>\n {amount.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}\n </span>\n <span style={{ fontSize: '1rem', fontWeight: 500, color: '#8e8e93' }}>\n {currency}\n </span>\n </div>\n <button\n onClick={() => setShowDetails(!showDetails)}\n style={{\n width: '22px',\n height: '22px',\n borderRadius: '50%',\n border: '1.5px solid #8e8e93',\n background: 'none',\n color: '#8e8e93',\n fontSize: '0.8125rem',\n fontWeight: 600,\n fontStyle: 'italic',\n fontFamily: 'Georgia, serif',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 0,\n transition: 'all 150ms',\n }}\n title=\"Show payment details\"\n >\n i\n </button>\n </div>\n\n {/* Recipient details (shown when info button is clicked) */}\n {showDetails && (\n <div\n style={{\n marginTop: '0.75rem',\n padding: '0.625rem 0.75rem',\n backgroundColor: '#3a3a3c',\n borderRadius: '0.5rem',\n fontSize: '0.8125rem',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <span style={{ color: '#8e8e93' }}>Recipient</span>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.375rem' }}>\n <span\n style={{\n color: '#fff',\n fontFamily: 'ui-monospace, monospace',\n fontSize: '0.75rem',\n }}\n >\n {truncateAddress(recipient)}\n </span>\n <button\n onClick={() => copyToClipboard(recipient, 'recipient')}\n style={{\n padding: 0,\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n color: copiedRecipient ? '#30d158' : '#8e8e93',\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1\" />\n </svg>\n </button>\n </div>\n </div>\n </div>\n )}\n\n {/* Debug section (shown when wrench button is clicked) */}\n {showDebug && (\n <div\n style={{\n marginTop: '0.75rem',\n padding: '0.75rem',\n backgroundColor: '#1c1c1e',\n borderRadius: '0.5rem',\n fontSize: '0.75rem',\n fontFamily: 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace',\n }}\n >\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n marginBottom: '0.5rem',\n paddingBottom: '0.5rem',\n borderBottom: '1px solid #2c2c2e',\n }}>\n <span style={{ color: '#8e8e93' }}>DEBUG</span>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <span style={{ color: '#8e8e93' }}>balance</span>\n <span style={{ color: '#30d158' }}>\n {accountBalance !== null\n ? `${accountBalance.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} ${currency}`\n : currentSelection ? '...' : 'null'}\n </span>\n </div>\n </div>\n )}\n </div>\n\n {/* Pay Button */}\n <button\n onClick={handlePay}\n disabled={!canPay}\n style={{\n width: '100%',\n padding: '0.5rem 1rem',\n borderRadius: '0.75rem',\n border: 'none',\n fontSize: '1.0625rem',\n fontWeight: 600,\n cursor: canPay ? 'pointer' : 'not-allowed',\n backgroundColor: canPay ? '#000' : '#48484a',\n color: canPay ? '#fff' : '#8e8e93',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '0.25rem',\n transition: 'opacity 150ms',\n }}\n >\n {isSending ? (\n <>\n <div\n style={{\n width: '1.25rem',\n height: '1.25rem',\n border: '2px solid currentColor',\n borderTopColor: 'transparent',\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n }}\n />\n <span>Processing...</span>\n </>\n ) : (\n <>\n <Lottie\n lottieRef={lottieRef}\n animationData={logoAnimation}\n loop={false}\n autoplay={false}\n style={{\n width: 48,\n height: 48,\n marginTop: '-8px',\n marginBottom: '-8px',\n marginLeft: '-8px',\n marginRight: '4px',\n opacity: canPay ? 1 : 0.55,\n transition: 'opacity 150ms',\n }}\n />\n <span>Pay {amount.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} {currency}</span>\n </>\n )}\n </button>\n </div>\n </div>\n </div>\n </>\n );\n}\n","{\"assets\":[{\"id\":\"4\",\"layers\":[{\"ind\":3,\"ty\":4,\"ks\":{},\"ip\":0,\"op\":58,\"st\":0,\"shapes\":[{\"ty\":\"rc\",\"p\":{\"a\":0,\"k\":[40,40]},\"r\":{\"a\":0,\"k\":0},\"s\":{\"a\":0,\"k\":[80,80]}},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0,0,0]},\"o\":{\"a\":0,\"k\":0}}]},{\"ind\":0,\"ty\":4,\"ks\":{\"s\":{\"a\":0,\"k\":[133.33,133.33]}},\"ip\":0,\"op\":58,\"st\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ty\":\"gr\",\"it\":[{\"ty\":\"sh\",\"ks\":{\"a\":0,\"k\":{\"c\":true,\"i\":[[0,0],[0,20.55],[20.55,0],[0,-20.55],[-20.55,0]],\"o\":[[20.55,0],[0,-20.55],[-20.55,0],[0,20.55],[0,0]],\"v\":[[39.65,76.85],[76.85,39.65],[39.65,2.43],[2.44,39.65],[39.65,76.85]]}}},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0,0,0,1]},\"lc\":1,\"lj\":1,\"ml\":10,\"o\":{\"a\":0,\"k\":100},\"w\":{\"a\":0,\"k\":4.87}},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1]},\"o\":{\"a\":0,\"k\":100}},{\"ty\":\"tr\",\"o\":{\"a\":0,\"k\":100},\"s\":{\"a\":0,\"k\":[75,75]}}]},{\"ty\":\"tr\",\"o\":{\"a\":0,\"k\":100}}]}]}]},{\"id\":\"7\",\"layers\":[{\"ind\":6,\"ty\":0,\"ks\":{},\"w\":80,\"h\":80,\"ip\":0,\"op\":58,\"st\":0,\"refId\":\"4\"}]},{\"id\":\"12\",\"layers\":[{\"ind\":11,\"ty\":4,\"ks\":{},\"ip\":0,\"op\":58,\"st\":0,\"shapes\":[{\"ty\":\"rc\",\"p\":{\"a\":0,\"k\":[40,40]},\"r\":{\"a\":0,\"k\":0},\"s\":{\"a\":0,\"k\":[80,80]}},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0,0,0]},\"o\":{\"a\":0,\"k\":0}}]},{\"ind\":0,\"ty\":4,\"ks\":{\"s\":{\"a\":0,\"k\":[133.33,133.33]}},\"ip\":0,\"op\":58,\"st\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ty\":\"gr\",\"it\":[{\"ty\":\"sh\",\"ks\":{\"a\":0,\"k\":{\"c\":true,\"i\":[[0,0],[0,20.55],[20.55,0],[0,-20.55],[-20.55,0]],\"o\":[[20.55,0],[0,-20.55],[-20.55,0],[0,20.55],[0,0]],\"v\":[[39.65,76.85],[76.85,39.65],[39.65,2.43],[2.44,39.65],[39.65,76.85]]}}},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0,0,0,1]},\"lc\":1,\"lj\":1,\"ml\":10,\"o\":{\"a\":0,\"k\":100},\"w\":{\"a\":0,\"k\":4.87}},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1]},\"o\":{\"a\":0,\"k\":100}},{\"ty\":\"tr\",\"o\":{\"a\":0,\"k\":100},\"s\":{\"a\":0,\"k\":[75,75]}}]},{\"ty\":\"tr\",\"o\":{\"a\":0,\"k\":100}}]}]}]},{\"id\":\"17\",\"layers\":[{\"ind\":16,\"ty\":4,\"ks\":{},\"ip\":0,\"op\":58,\"st\":0,\"shapes\":[{\"ty\":\"rc\",\"p\":{\"a\":0,\"k\":[40,40]},\"r\":{\"a\":0,\"k\":0},\"s\":{\"a\":0,\"k\":[80,80]}},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0,0,0]},\"o\":{\"a\":0,\"k\":0}}]},{\"ind\":0,\"ty\":4,\"ks\":{\"s\":{\"a\":0,\"k\":[133.33,133.33]}},\"ip\":0,\"op\":58,\"st\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ty\":\"gr\",\"it\":[{\"ty\":\"sh\",\"ks\":{\"a\":0,\"k\":{\"c\":true,\"i\":[[0,0],[0,20.55],[20.55,0],[0,-20.55],[-20.55,0]],\"o\":[[20.55,0],[0,-20.55],[-20.55,0],[0,20.55],[0,0]],\"v\":[[39.65,76.85],[76.85,39.65],[39.65,2.43],[2.44,39.65],[39.65,76.85]]}}},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0,0,0,1]},\"lc\":1,\"lj\":1,\"ml\":10,\"o\":{\"a\":0,\"k\":100},\"w\":{\"a\":0,\"k\":4.87}},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1]},\"o\":{\"a\":0,\"k\":100}},{\"ty\":\"tr\",\"o\":{\"a\":0,\"k\":100},\"s\":{\"a\":0,\"k\":[75,75]}}]},{\"ty\":\"tr\",\"o\":{\"a\":0,\"k\":100}}]}]}]},{\"id\":\"22\",\"layers\":[{\"ind\":21,\"ty\":4,\"ks\":{},\"ip\":0,\"op\":58,\"st\":0,\"shapes\":[{\"ty\":\"rc\",\"p\":{\"a\":0,\"k\":[40,40]},\"r\":{\"a\":0,\"k\":0},\"s\":{\"a\":0,\"k\":[80,80]}},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0,0,0]},\"o\":{\"a\":0,\"k\":0}}]},{\"ind\":0,\"ty\":4,\"ks\":{\"s\":{\"a\":0,\"k\":[133.33,133.33]}},\"ip\":0,\"op\":58,\"st\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ty\":\"gr\",\"it\":[{\"ty\":\"sh\",\"ks\":{\"a\":0,\"k\":{\"c\":true,\"i\":[[0,0],[0,20.55],[20.55,0],[0,-20.55],[-20.55,0]],\"o\":[[20.55,0],[0,-20.55],[-20.55,0],[0,20.55],[0,0]],\"v\":[[39.65,76.85],[76.85,39.65],[39.65,2.43],[2.44,39.65],[39.65,76.85]]}}},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0,0,0,1]},\"lc\":1,\"lj\":1,\"ml\":10,\"o\":{\"a\":0,\"k\":100},\"w\":{\"a\":0,\"k\":4.87}},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1]},\"o\":{\"a\":0,\"k\":100}},{\"ty\":\"tr\",\"o\":{\"a\":0,\"k\":100},\"s\":{\"a\":0,\"k\":[75,75]}}]},{\"ty\":\"tr\",\"o\":{\"a\":0,\"k\":100}}]}]}]}],\"fr\":60,\"h\":200,\"ip\":0,\"layers\":[{\"ind\":9,\"ty\":0,\"parent\":2,\"ks\":{\"a\":{\"a\":0,\"k\":[40,40]},\"o\":{\"a\":1,\"k\":[{\"t\":0,\"s\":[100],\"h\":1},{\"t\":7.2,\"s\":[100],\"h\":1},{\"t\":7.2,\"s\":[0],\"h\":1},{\"t\":57,\"s\":[0],\"h\":1}]},\"p\":{\"a\":1,\"k\":[{\"t\":0,\"s\":[119,40],\"i\":{\"x\":[0,1],\"y\":[1,1]},\"o\":{\"x\":[0.384,0],\"y\":[0,0]}},{\"t\":48,\"s\":[219,40],\"i\":{\"x\":[1,1],\"y\":[1,1]},\"o\":{\"x\":[0,0],\"y\":[0,0]}},{\"t\":57,\"s\":[219,40],\"h\":1}]},\"s\":{\"a\":1,\"k\":[{\"t\":0,\"s\":[100,100],\"i\":{\"x\":[1,1],\"y\":[1,1]},\"o\":{\"x\":[0,0],\"y\":[0,0]}},{\"t\":5.4,\"s\":[100,100],\"i\":{\"x\":[0,0],\"y\":[1,1]},\"o\":{\"x\":[0.5,0.5],\"y\":[0,0]}},{\"t\":7.2,\"s\":[103,103],\"i\":{\"x\":[1,1],\"y\":[1,1]},\"o\":{\"x\":[0,0],\"y\":[0,0]}},{\"t\":57,\"s\":[103,103],\"h\":1}]}},\"w\":80,\"h\":80,\"ip\":0,\"op\":58,\"st\":0,\"refId\":\"7\"},{\"ind\":14,\"ty\":0,\"parent\":10,\"ks\":{},\"w\":80,\"h\":80,\"ip\":0,\"op\":58,\"st\":0,\"refId\":\"12\"},{\"ind\":10,\"ty\":3,\"parent\":2,\"ks\":{\"p\":{\"a\":1,\"k\":[{\"t\":0,\"s\":[39,0],\"i\":{\"x\":[0,1],\"y\":[1,1]},\"o\":{\"x\":[0.384,0],\"y\":[0,0]}},{\"t\":48,\"s\":[79,0],\"i\":{\"x\":[1,1],\"y\":[1,1]},\"o\":{\"x\":[0,0],\"y\":[0,0]}},{\"t\":57,\"s\":[79,0],\"h\":1}]}},\"ip\":0,\"op\":58,\"st\":0},{\"ind\":19,\"ty\":0,\"parent\":15,\"ks\":{},\"w\":80,\"h\":80,\"ip\":0,\"op\":58,\"st\":0,\"refId\":\"17\"},{\"ind\":15,\"ty\":3,\"parent\":2,\"ks\":{\"p\":{\"a\":1,\"k\":[{\"t\":0,\"s\":[0,0],\"i\":{\"x\":[1,1],\"y\":[1,1]},\"o\":{\"x\":[0,0],\"y\":[0,0]}},{\"t\":7.2,\"s\":[0,0],\"i\":{\"x\":[0,1],\"y\":[1,1]},\"o\":{\"x\":[0.384,0],\"y\":[0,0]}},{\"t\":55.2,\"s\":[39,0],\"i\":{\"x\":[1,1],\"y\":[1,1]},\"o\":{\"x\":[0,0],\"y\":[0,0]}},{\"t\":57,\"s\":[39,0],\"h\":1}]}},\"ip\":0,\"op\":58,\"st\":0},{\"ind\":24,\"ty\":0,\"parent\":20,\"ks\":{},\"w\":80,\"h\":80,\"ip\":0,\"op\":58,\"st\":0,\"refId\":\"22\"},{\"ind\":20,\"ty\":3,\"parent\":2,\"ks\":{\"a\":{\"a\":0,\"k\":[40,40]},\"p\":{\"a\":0,\"k\":[40,40]},\"s\":{\"a\":1,\"k\":[{\"t\":0,\"s\":[70,70],\"i\":{\"x\":[1,1],\"y\":[1,1]},\"o\":{\"x\":[0,0],\"y\":[0,0]}},{\"t\":13.8,\"s\":[70,70],\"i\":{\"x\":[0,0],\"y\":[1,1]},\"o\":{\"x\":[0.5,0.5],\"y\":[0,0]}},{\"t\":37.2,\"s\":[100,100],\"i\":{\"x\":[1,1],\"y\":[1,1]},\"o\":{\"x\":[0,0],\"y\":[0,0]}},{\"t\":57,\"s\":[100,100],\"h\":1}]}},\"ip\":0,\"op\":58,\"st\":0},{\"ind\":2,\"ty\":3,\"parent\":1,\"ks\":{\"p\":{\"a\":0,\"k\":[21,61]}},\"ip\":0,\"op\":58,\"st\":0},{\"ind\":1,\"ty\":3,\"parent\":0,\"ks\":{},\"ip\":0,\"op\":58,\"st\":0},{\"ind\":0,\"ty\":3,\"ks\":{},\"ip\":0,\"op\":58,\"st\":0}],\"meta\":{\"g\":\"https://jitter.video\"},\"op\":57,\"v\":\"5.7.4\",\"w\":200}\n","'use client';\n\nimport { useCallback, useState } from 'react';\nimport { useWallet } from '@solana/wallet-adapter-react';\nimport { useWalletModal } from './wallet-modal-provider';\n\nexport interface Payment {\n id: string;\n amount: number;\n currency: string;\n status: 'pending' | 'completed' | 'failed';\n signature?: string;\n}\n\nexport interface UsePaymentReturn {\n pay: (priceId: string) => Promise<Payment | null>;\n isPending: boolean;\n lastPayment: Payment | null;\n}\n\nexport function usePayment(): UsePaymentReturn {\n const [isPending, setIsPending] = useState(false);\n const [lastPayment, setLastPayment] = useState<Payment | null>(null);\n const { publicKey, connected } = useWallet();\n const { setVisible } = useWalletModal();\n\n const pay = useCallback(async (priceId: string): Promise<Payment | null> => {\n // If not connected, open wallet modal\n if (!connected || !publicKey) {\n setVisible(true);\n return null;\n }\n\n setIsPending(true);\n\n try {\n const event = new CustomEvent('moneymq:pay', {\n detail: { priceId, publicKey: publicKey.toBase58() },\n bubbles: true,\n });\n window.dispatchEvent(event);\n\n const result = await new Promise<Payment>((resolve, reject) => {\n const handleSuccess = (e: Event) => {\n const customEvent = e as CustomEvent<Payment>;\n cleanup();\n resolve(customEvent.detail);\n };\n\n const handleError = (e: Event) => {\n const customEvent = e as CustomEvent<Error>;\n cleanup();\n reject(customEvent.detail);\n };\n\n const cleanup = () => {\n window.removeEventListener('moneymq:payment-success', handleSuccess);\n window.removeEventListener('moneymq:payment-error', handleError);\n };\n\n window.addEventListener('moneymq:payment-success', handleSuccess);\n window.addEventListener('moneymq:payment-error', handleError);\n\n setTimeout(() => {\n cleanup();\n reject(new Error('Payment timeout'));\n }, 60000);\n });\n\n setLastPayment(result);\n return result;\n } catch {\n return null;\n } finally {\n setIsPending(false);\n }\n }, [connected, publicKey, setVisible]);\n\n return { pay, isPending, lastPayment };\n}\n"],"mappings":"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EAAC,GAAI,EAAC,GAAI,GAAE,GAAI,CAAC,IAAG,EAAE,EAAC,GAAE,GAAI,EAAC,GAAI,GAAE,GAAI,CAAC,EAAC,GAAI,GAAE,GAAI,CAAC,GAAG,GAAE,GAAI,EAAC,GAAE,EAAC,GAAI,KAAI,GAAI,CAAC,GAAG,GAAE,GAAI,EAAC,GAAE,EAAC,GAAI,KAAI,GAAI,CAAC,CAAC,GAAE,GAAI,EAAC,GAAE,EAAC,GAAI,IAAG,GAAI,CAAC,CAAC,GAAE,GAAI,EAAC,CAAC,EAAC,GAAE,GAAI,EAAC,GAAI,GAAE,GAAI,CAAC,EAAC,GAAI,GAAE,GAAI,CAAC,KAAI,EAAE,GAAE,GAAI,EAAC,GAAI,CAAC,GAAE,CAAC,GAAE,GAAI,CAAC,GAAE,CAAC,EAAC,GAAE,GAAI,EAAC,GAAI,CAAC,OAAM,CAAC,GAAE,GAAI,CAAC,GAAE,CAAC,EAAC,EAAC,GAAE,EAAC,GAAI,IAAG,GAAI,CAAC,KAAI,EAAE,GAAE,GAAI,EAAC,GAAI,CAAC,GAAE,CAAC,GAAE,GAAI,CAAC,GAAE,CAAC,EAAC,GAAE,GAAI,EAAC,GAAI,CAAC,GAAE,CAAC,GAAE,GAAI,CAAC,GAAE,CAAC,EAAC,EAAC,GAAE,EAAC,GAAI,IAAG,GAAI,CAAC,KAAI,EAAE,GAAE,GAAI,EAAC,CAAC,EAAC,GAAE,GAAI,EAAC,GAAI,GAAE,GAAI,CAAC,EAAC,GAAI,GAAE,GAAI,CAAC,KAAI,GAAG,GAAE,GAAI,EAAC,GAAI,CAAC,GAAE,CAAC,GAAE,GAAI,CAAC,GAAE,CAAC,EAAC,GAAE,GAAI,EAAC,GAAI,CAAC,GAAE,CAAC,GAAE,GAAI,CAAC,GAAE,CAAC,EAAC,EAAC,GAAE,EAAC,GAAI,KAAI,GAAI,CAAC,KAAI,GAAG,GAAE,GAAI,EAAC,GAAI,CAAC,GAAE,CAAC,GAAE,GAAI,CAAC,GAAE,CAAC,EAAC,GAAE,GAAI,EAAC,GAAI,CAAC,KAAI,GAAG,GAAE,GAAI,CAAC,GAAE,CAAC,EAAC,EAAC,GAAE,EAAC,GAAI,KAAI,GAAI,CAAC,KAAI,GAAG,GAAE,GAAI,EAAC,GAAI,CAAC,GAAE,CAAC,GAAE,GAAI,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","names":["createContext","useContext","useEffect","useMemo","useState","useState","useCallback","useMemo","jsx","jsxs","useState","useCallback","useMemo","jsx","createContext","useContext","useState","useEffect","useMemo","React","useEffect","useState","React","useCallback","useState","useEffect","useWallet","Fragment","jsx","jsxs","normalizeRpcUrl","useState","useWallet","React","useCallback","useEffect","Fragment","jsx","jsxs","CheckoutButton","useState","React","useEffect","error","useCallback","useState","useWallet","useState","useWallet","useCallback"]}
|
|
1
|
+
{"version":3,"sources":["../src/provider.tsx","../src/wallet-modal-provider.tsx","../src/wallet-modal.tsx","../src/checkout-button.tsx","../src/checkout-modal.tsx","../src/assets/logo-animation.json","../src/use-payment.ts"],"sourcesContent":["'use client';\n\nimport React, { createContext, useContext, useEffect, useMemo, useState } from 'react';\nimport { ConnectionProvider, WalletProvider } from '@solana/wallet-adapter-react';\nimport { PhantomWalletAdapter, SolflareWalletAdapter } from '@solana/wallet-adapter-wallets';\nimport { CustomWalletModalProvider, type Branding } from './wallet-modal-provider';\n\n// MoneyMQ client interface (matches @moneymq/sdk)\nexport interface MoneyMQClient {\n config: {\n endpoint: string;\n };\n}\n\nexport interface MoneyMQProviderProps {\n children: React.ReactNode;\n client: MoneyMQClient;\n branding?: Branding;\n}\n\n// Sandbox account interface\nexport interface SandboxAccount {\n id: string;\n name: string;\n address: string;\n secretKeyHex?: string;\n stablecoins?: {\n usdc?: string;\n };\n usdcBalance?: number;\n}\n\n// Sandbox context state\ninterface SandboxContextState {\n isSandboxMode: boolean;\n sandboxAccounts: SandboxAccount[];\n}\n\nexport const MoneyMQContext = createContext<MoneyMQClient | null>(null);\nexport const SandboxContext = createContext<SandboxContextState>({\n isSandboxMode: false,\n sandboxAccounts: [],\n});\n\nconst DEFAULT_RPC_URL = 'https://api.devnet.solana.com';\nconst SANDBOX_HASH_PREFIX = 'SURFNETxSAFEHASH';\n\ninterface ServerConfigResponse {\n x402?: {\n validator?: {\n rpcUrl?: string;\n };\n };\n}\n\ninterface SandboxAccountsResponse {\n solana?: {\n userAccounts?: Array<{\n address: string;\n label: string;\n secretKeyHex?: string;\n stablecoins?: {\n usdc?: string;\n };\n }>;\n };\n}\n\n/**\n * Normalize RPC URL for browser access (0.0.0.0 doesn't work in browsers)\n */\nfunction normalizeRpcUrl(url: string): string {\n return url.replace('0.0.0.0', 'localhost').replace('127.0.0.1', 'localhost');\n}\n\n/**\n * Get RPC URL from MoneyMQ server config\n */\nasync function getRpcUrl(apiUrl: string): Promise<string> {\n try {\n console.log('[MoneyMQ] Fetching config from:', `${apiUrl}/config`);\n const response = await fetch(`${apiUrl}/config`);\n const config = (await response.json()) as ServerConfigResponse;\n const rawRpcUrl = config.x402?.validator?.rpcUrl || DEFAULT_RPC_URL;\n console.log('[MoneyMQ] Raw RPC URL from config:', rawRpcUrl);\n const normalizedUrl = normalizeRpcUrl(rawRpcUrl);\n console.log('[MoneyMQ] Normalized RPC URL:', normalizedUrl);\n return normalizedUrl;\n } catch (err) {\n console.error('[MoneyMQ] Error fetching config:', err);\n return DEFAULT_RPC_URL;\n }\n}\n\n/**\n * Check if we're in sandbox mode by calling getLatestBlockhash RPC\n */\nasync function checkSandboxMode(rpcUrl: string): Promise<boolean> {\n try {\n console.log('[MoneyMQ] Checking sandbox mode with RPC:', rpcUrl);\n const response = await fetch(rpcUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: 1,\n method: 'getLatestBlockhash',\n params: [{ commitment: 'finalized' }],\n }),\n });\n const data = await response.json();\n const blockhash = data?.result?.value?.blockhash || '';\n const isSandbox = blockhash.startsWith(SANDBOX_HASH_PREFIX);\n console.log('[MoneyMQ] Blockhash:', blockhash, '| Sandbox:', isSandbox);\n return isSandbox;\n } catch (err) {\n console.error('[MoneyMQ] Error checking sandbox mode:', err);\n return false;\n }\n}\n\n/**\n * Fetch token balance for a token account address\n */\nasync function fetchTokenBalance(rpcUrl: string, tokenAccountAddress: string): Promise<number> {\n try {\n const response = await fetch(rpcUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: 1,\n method: 'getAccountInfo',\n params: [tokenAccountAddress, { encoding: 'jsonParsed' }],\n }),\n });\n const data = await response.json();\n if (data.result?.value?.data?.parsed?.info?.tokenAmount) {\n return parseFloat(data.result.value.data.parsed.info.tokenAmount.uiAmountString || '0');\n }\n return 0;\n } catch {\n return 0;\n }\n}\n\n/**\n * Fetch sandbox accounts from the MoneyMQ server\n */\nasync function fetchSandboxAccounts(apiUrl: string, rpcUrl: string): Promise<SandboxAccount[]> {\n try {\n console.log('[MoneyMQ] Fetching sandbox accounts from:', `${apiUrl}/sandbox/accounts`);\n const response = await fetch(`${apiUrl}/sandbox/accounts`);\n if (!response.ok) {\n console.log('[MoneyMQ] Sandbox accounts fetch failed:', response.status);\n return [];\n }\n\n const data = (await response.json()) as SandboxAccountsResponse;\n if (data.solana?.userAccounts) {\n // Fetch balances for each account in parallel\n const accounts = await Promise.all(\n data.solana.userAccounts.map(async (acc) => {\n let usdcBalance = 0;\n if (acc.stablecoins?.usdc) {\n usdcBalance = await fetchTokenBalance(rpcUrl, acc.stablecoins.usdc);\n }\n return {\n id: acc.address,\n name: acc.label,\n address: acc.address,\n secretKeyHex: acc.secretKeyHex,\n stablecoins: acc.stablecoins,\n usdcBalance,\n };\n })\n );\n console.log('[MoneyMQ] Sandbox accounts loaded:', accounts.length);\n return accounts;\n }\n return [];\n } catch (err) {\n console.error('[MoneyMQ] Error fetching sandbox accounts:', err);\n return [];\n }\n}\n\nexport function useMoneyMQ(): MoneyMQClient {\n const client = useContext(MoneyMQContext);\n if (!client) {\n throw new Error('useMoneyMQ must be used within a MoneyMQProvider');\n }\n return client;\n}\n\nexport function useSandbox(): SandboxContextState {\n return useContext(SandboxContext);\n}\n\nexport function MoneyMQProvider({\n children,\n client,\n branding,\n}: MoneyMQProviderProps) {\n const [rpcEndpoint, setRpcEndpoint] = useState<string | null>(null);\n const [isSandboxMode, setIsSandboxMode] = useState(false);\n const [sandboxAccounts, setSandboxAccounts] = useState<SandboxAccount[]>([]);\n\n useEffect(() => {\n async function initialize() {\n const rpcUrl = await getRpcUrl(client.config.endpoint);\n setRpcEndpoint(rpcUrl);\n\n // Check if we're in sandbox mode\n const isSandbox = await checkSandboxMode(rpcUrl);\n setIsSandboxMode(isSandbox);\n\n // If in sandbox mode, fetch sandbox accounts\n if (isSandbox) {\n const accounts = await fetchSandboxAccounts(client.config.endpoint, rpcUrl);\n setSandboxAccounts(accounts);\n }\n }\n initialize();\n }, [client.config.endpoint]);\n\n const wallets = useMemo(\n () => [\n new PhantomWalletAdapter(),\n new SolflareWalletAdapter(),\n ],\n []\n );\n\n const sandboxContextValue = useMemo(\n () => ({ isSandboxMode, sandboxAccounts }),\n [isSandboxMode, sandboxAccounts]\n );\n\n // Don't render until we have the RPC endpoint\n if (!rpcEndpoint) {\n return null;\n }\n\n return (\n <MoneyMQContext.Provider value={client}>\n <SandboxContext.Provider value={sandboxContextValue}>\n <ConnectionProvider endpoint={rpcEndpoint}>\n <WalletProvider wallets={wallets} autoConnect>\n <CustomWalletModalProvider branding={branding}>\n {children}\n </CustomWalletModalProvider>\n </WalletProvider>\n </ConnectionProvider>\n </SandboxContext.Provider>\n </MoneyMQContext.Provider>\n );\n}\n","'use client';\n\nimport React, { createContext, useContext, useState, useCallback, useMemo } from 'react';\nimport { WalletModal } from './wallet-modal';\n\nexport interface Branding {\n logo?: string;\n title?: string;\n description?: string;\n accentColor?: string;\n}\n\ninterface WalletModalContextState {\n visible: boolean;\n setVisible: (visible: boolean) => void;\n}\n\nconst WalletModalContext = createContext<WalletModalContextState>({\n visible: false,\n setVisible: () => {},\n});\n\nconst BrandingContext = createContext<Branding | undefined>(undefined);\n\nexport function useWalletModal() {\n return useContext(WalletModalContext);\n}\n\nexport function useBranding() {\n return useContext(BrandingContext);\n}\n\nexport interface CustomWalletModalProviderProps {\n children: React.ReactNode;\n branding?: Branding;\n}\n\nexport function CustomWalletModalProvider({ children, branding }: CustomWalletModalProviderProps) {\n const [visible, setVisible] = useState(false);\n\n const handleClose = useCallback(() => setVisible(false), []);\n\n const contextValue = useMemo(\n () => ({ visible, setVisible }),\n [visible]\n );\n\n return (\n <BrandingContext.Provider value={branding}>\n <WalletModalContext.Provider value={contextValue}>\n {children}\n <WalletModal visible={visible} onClose={handleClose} branding={branding} />\n </WalletModalContext.Provider>\n </BrandingContext.Provider>\n );\n}\n","'use client';\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useWallet } from '@solana/wallet-adapter-react';\nimport type { Wallet } from '@solana/wallet-adapter-react';\n\nexport interface WalletModalProps {\n visible: boolean;\n onClose: () => void;\n branding?: {\n logo?: string;\n title?: string;\n description?: string;\n accentColor?: string;\n };\n}\n\nconst overlayStyle: React.CSSProperties = {\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.6)',\n backdropFilter: 'blur(4px)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 9999,\n animation: 'fadeIn 150ms ease-out',\n};\n\nconst modalStyle: React.CSSProperties = {\n backgroundColor: '#18181b',\n borderRadius: '1rem',\n padding: '1.5rem',\n width: '100%',\n maxWidth: '400px',\n maxHeight: '90vh',\n overflow: 'auto',\n border: '1px solid #27272a',\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.5)',\n animation: 'slideUp 150ms ease-out',\n};\n\nconst headerStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: '0.75rem',\n marginBottom: '0.5rem',\n};\n\nconst logoStyle: React.CSSProperties = {\n width: '2.5rem',\n height: '2.5rem',\n borderRadius: '0.5rem',\n objectFit: 'contain',\n};\n\nconst titleStyle: React.CSSProperties = {\n fontSize: '1.25rem',\n fontWeight: 600,\n color: '#fafafa',\n margin: 0,\n};\n\nconst descriptionStyle: React.CSSProperties = {\n fontSize: '0.875rem',\n color: '#a1a1aa',\n marginBottom: '1.5rem',\n};\n\nconst walletListStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: '0.5rem',\n};\n\nconst walletButtonStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: '0.75rem',\n width: '100%',\n padding: '0.875rem 1rem',\n backgroundColor: '#27272a',\n border: '1px solid #3f3f46',\n borderRadius: '0.75rem',\n cursor: 'pointer',\n transition: 'all 150ms',\n textAlign: 'left',\n};\n\nconst walletIconStyle: React.CSSProperties = {\n width: '2rem',\n height: '2rem',\n borderRadius: '0.375rem',\n};\n\nconst walletNameStyle: React.CSSProperties = {\n flex: 1,\n fontSize: '0.9375rem',\n fontWeight: 500,\n color: '#fafafa',\n};\n\nconst walletTagStyle: React.CSSProperties = {\n fontSize: '0.75rem',\n padding: '0.25rem 0.5rem',\n borderRadius: '9999px',\n backgroundColor: '#3f3f46',\n color: '#a1a1aa',\n};\n\nconst closeButtonStyle: React.CSSProperties = {\n position: 'absolute',\n top: '1rem',\n right: '1rem',\n padding: '0.5rem',\n backgroundColor: 'transparent',\n border: 'none',\n borderRadius: '0.375rem',\n cursor: 'pointer',\n color: '#71717a',\n transition: 'color 150ms',\n};\n\nconst noWalletsStyle: React.CSSProperties = {\n textAlign: 'center',\n padding: '2rem 1rem',\n color: '#a1a1aa',\n fontSize: '0.875rem',\n};\n\nexport function WalletModal({ visible, onClose, branding }: WalletModalProps) {\n const { wallets, select, connecting } = useWallet();\n const [hoveredWallet, setHoveredWallet] = useState<string | null>(null);\n\n const accentColor = branding?.accentColor || '#ec4899';\n\n // Filter and sort wallets\n const sortedWallets = useMemo(() => {\n const installed: Wallet[] = [];\n const notInstalled: Wallet[] = [];\n\n for (const wallet of wallets) {\n if (wallet.readyState === 'Installed') {\n installed.push(wallet);\n } else if (wallet.readyState === 'Loadable' || wallet.readyState === 'NotDetected') {\n notInstalled.push(wallet);\n }\n }\n\n return [...installed, ...notInstalled];\n }, [wallets]);\n\n const handleSelect = useCallback((wallet: Wallet) => {\n select(wallet.adapter.name);\n onClose();\n }, [select, onClose]);\n\n // Close on escape key\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n };\n if (visible) {\n document.addEventListener('keydown', handleEscape);\n document.body.style.overflow = 'hidden';\n }\n return () => {\n document.removeEventListener('keydown', handleEscape);\n document.body.style.overflow = '';\n };\n }, [visible, onClose]);\n\n if (!visible) return null;\n\n return (\n <>\n <style>{`\n @keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n @keyframes slideUp {\n from { opacity: 0; transform: translateY(10px); }\n to { opacity: 1; transform: translateY(0); }\n }\n `}</style>\n <div style={overlayStyle} onClick={onClose}>\n <div\n style={{ ...modalStyle, position: 'relative' }}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Close button */}\n <button\n style={closeButtonStyle}\n onClick={onClose}\n onMouseEnter={(e) => (e.currentTarget.style.color = '#fafafa')}\n onMouseLeave={(e) => (e.currentTarget.style.color = '#71717a')}\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n\n {/* Header */}\n <div style={headerStyle}>\n {branding?.logo && (\n <img src={branding.logo} alt=\"\" style={logoStyle} />\n )}\n <h2 style={titleStyle}>\n {branding?.title || 'Connect Wallet'}\n </h2>\n </div>\n\n {/* Description */}\n <p style={descriptionStyle}>\n {branding?.description || 'Select a wallet to connect and pay securely.'}\n </p>\n\n {/* Wallet list */}\n <div style={walletListStyle}>\n {sortedWallets.length === 0 ? (\n <div style={noWalletsStyle}>\n No wallets found. Please install a Solana wallet extension.\n </div>\n ) : (\n sortedWallets.map((wallet) => {\n const isInstalled = wallet.readyState === 'Installed';\n const isHovered = hoveredWallet === wallet.adapter.name;\n\n return (\n <button\n key={wallet.adapter.name}\n style={{\n ...walletButtonStyle,\n backgroundColor: isHovered ? '#3f3f46' : '#27272a',\n borderColor: isHovered ? accentColor : '#3f3f46',\n }}\n onClick={() => handleSelect(wallet)}\n onMouseEnter={() => setHoveredWallet(wallet.adapter.name)}\n onMouseLeave={() => setHoveredWallet(null)}\n disabled={connecting}\n >\n <img\n src={wallet.adapter.icon}\n alt={wallet.adapter.name}\n style={walletIconStyle}\n />\n <span style={walletNameStyle}>{wallet.adapter.name}</span>\n {isInstalled ? (\n <span style={{ ...walletTagStyle, backgroundColor: accentColor + '20', color: accentColor }}>\n Detected\n </span>\n ) : (\n <span style={walletTagStyle}>Install</span>\n )}\n </button>\n );\n })\n )}\n </div>\n </div>\n </div>\n </>\n );\n}\n","'use client';\n\nimport React, { forwardRef, useEffect, useState } from 'react';\nimport { CheckoutModal } from './checkout-modal';\nimport { useMoneyMQ } from './provider';\n\n/**\n * Represents a completed payment transaction.\n *\n * @example\n * ```tsx\n * const handleSuccess = (payment: Payment) => {\n * console.log(`Payment ${payment.id} completed for ${payment.amount} ${payment.currency}`);\n * console.log(`Transaction signature: ${payment.signature}`);\n * };\n * ```\n */\nexport interface Payment {\n /** Unique payment identifier (e.g., \"pay_1234567890\") */\n id: string;\n /** Payment amount in the currency's standard unit (e.g., 9.99 for $9.99) */\n amount: number;\n /** Currency code (e.g., \"USDC\") */\n currency: string;\n /** Current status of the payment */\n status: 'pending' | 'completed' | 'failed';\n /** Blockchain transaction signature (available after completion) */\n signature?: string;\n}\n\ninterface ServerConfig {\n x402?: {\n payoutAccount?: {\n address?: string;\n currency?: string;\n };\n };\n}\n\n/**\n * Represents a price for a product.\n *\n * @example\n * ```tsx\n * const price: Price = {\n * id: 'price_abc123',\n * unit_amount: 999, // $9.99 in cents\n * currency: 'USDC',\n * product: 'prod_xyz789',\n * };\n * ```\n */\nexport interface Price {\n /** Unique price identifier from your catalog */\n id: string;\n /** Price amount in cents (e.g., 999 for $9.99) */\n unit_amount: number;\n /** Currency code (e.g., \"USDC\") */\n currency: string;\n /** Associated product ID */\n product?: string;\n}\n\n/**\n * Represents a product in your catalog.\n *\n * @example\n * ```tsx\n * const product: Product = {\n * id: 'prod_xyz789',\n * name: 'Pro Subscription',\n * description: 'Monthly access to premium features',\n * };\n * ```\n */\nexport interface Product {\n /** Unique product identifier from your catalog */\n id: string;\n /** Display name shown to the customer */\n name: string;\n /** Optional description for additional context */\n description?: string;\n}\n\n/**\n * Represents an item in the checkout basket.\n *\n * @example\n * ```tsx\n * const item: BasketItem = {\n * product: { id: 'prod_123', name: 'Pro Plan' },\n * price: { id: 'price_456', unit_amount: 999, currency: 'USDC' },\n * quantity: 1,\n * };\n * ```\n */\nexport interface BasketItem {\n /** Product details including id and name */\n product: Product;\n /** Price details including amount and currency */\n price: Price;\n /** Number of items (defaults to 1) */\n quantity?: number;\n}\n\n/**\n * Props for the CheckoutButton component.\n *\n * @example\n * ```tsx\n * <CheckoutButton\n * basket={[{ product, price }]}\n * onSuccess={(payment) => console.log('Paid!', payment.id)}\n * onError={(error) => console.error('Failed:', error)}\n * variant=\"solid\"\n * >\n * Pay Now\n * </CheckoutButton>\n * ```\n */\nexport interface CheckoutButtonProps {\n /** Array of items to purchase. Each item includes product, price, and optional quantity. */\n basket: BasketItem[];\n /** Callback fired when payment completes successfully. Receives the Payment object with transaction details. */\n onSuccess?: (payment: Payment) => void;\n /** Callback fired when payment fails. Receives the Error with failure details. */\n onError?: (error: Error) => void;\n /** Button style variant. \"solid\" has a filled background, \"outline\" has a border only. @default \"solid\" */\n variant?: 'solid' | 'outline';\n /** Custom button content. If not provided, displays \"Pay\". */\n children?: React.ReactNode;\n /** Disable the button, preventing clicks. */\n disabled?: boolean;\n /** Enable debug mode to show a debug panel with account balance in the checkout modal. @default false */\n debug?: boolean;\n}\n\nconst baseStyle: React.CSSProperties = {\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '0.5rem',\n borderRadius: '0.5rem',\n fontSize: '0.875rem',\n fontWeight: 600,\n padding: '0.625rem 1rem',\n cursor: 'pointer',\n transition: 'all 200ms',\n border: 'none',\n};\n\nconst solidStyle: React.CSSProperties = {\n ...baseStyle,\n backgroundColor: '#ec4899',\n color: 'white',\n boxShadow: '0 1px 2px 0 rgb(0 0 0 / 0.05)',\n};\n\nconst outlineStyle: React.CSSProperties = {\n ...baseStyle,\n backgroundColor: 'transparent',\n color: '#ec4899',\n border: '1px solid #ec4899',\n};\n\n/**\n * A button component that opens a checkout modal for processing payments.\n *\n * Must be used within a `MoneyMQProvider`. When clicked, displays a modal where\n * users can select their wallet and complete the payment.\n *\n * @example\n * ```tsx\n * import { MoneyMQProvider, CheckoutButton } from '@moneymq/react';\n *\n * function App() {\n * const product = { id: 'prod_123', name: 'Pro Plan' };\n * const price = { id: 'price_456', unit_amount: 999, currency: 'USDC' };\n *\n * return (\n * <MoneyMQProvider client={client}>\n * <CheckoutButton\n * basket={[{ product, price }]}\n * onSuccess={(payment) => {\n * console.log('Payment completed:', payment.signature);\n * }}\n * >\n * Subscribe - $9.99\n * </CheckoutButton>\n * </MoneyMQProvider>\n * );\n * }\n * ```\n *\n * @see {@link CheckoutButtonProps} for available props\n * @see {@link CheckoutModal} for the modal component used internally\n */\nexport const CheckoutButton = forwardRef<HTMLButtonElement, CheckoutButtonProps>(\n function CheckoutButton(\n {\n basket,\n onSuccess,\n onError,\n variant = 'solid',\n children,\n disabled,\n debug = false,\n },\n ref\n ) {\n const client = useMoneyMQ();\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [isHovered, setIsHovered] = useState(false);\n\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n // Payment data computed from basket\n const [recipient, setRecipient] = useState<string>('');\n\n // Compute totals from basket\n const { totalAmount, currency, lineItems } = React.useMemo(() => {\n if (!basket || basket.length === 0) {\n return { totalAmount: 0, currency: 'USDC', lineItems: [] };\n }\n\n // Use the currency from the first item (assuming all items have same currency)\n const baseCurrency = basket[0].price.currency.toUpperCase();\n\n const items = basket.map((item) => ({\n product: item.product,\n price: item.price,\n quantity: item.quantity ?? 1,\n subtotal: (item.price.unit_amount / 100) * (item.quantity ?? 1),\n }));\n\n const total = items.reduce((sum, item) => sum + item.subtotal, 0);\n\n return {\n totalAmount: total,\n currency: baseCurrency,\n lineItems: items,\n };\n }, [basket]);\n\n useEffect(() => {\n async function fetchPaymentDetails() {\n setIsLoading(true);\n setError(null);\n\n try {\n if (!basket || basket.length === 0) {\n throw new Error('Basket is empty');\n }\n\n const apiUrl = client.config.endpoint;\n\n // Fetch server config to get recipient\n const configResponse = await fetch(`${apiUrl}/config`);\n if (!configResponse.ok) {\n throw new Error(`Failed to fetch config: ${configResponse.status}`);\n }\n const config = (await configResponse.json()) as ServerConfig;\n if (config.x402?.payoutAccount?.address) {\n setRecipient(config.x402.payoutAccount.address);\n }\n } catch (err) {\n console.error('[CheckoutButton] Error fetching payment details:', err);\n const errorMessage = err instanceof Error ? err.message : 'Failed to load payment details';\n setError(errorMessage);\n onError?.(new Error(errorMessage));\n } finally {\n setIsLoading(false);\n }\n }\n\n fetchPaymentDetails();\n }, [basket, client.config.endpoint, onError]);\n\n const handleClick = () => {\n if (!isLoading && !error) {\n setIsModalOpen(true);\n }\n };\n\n const handlePaymentSuccess = (signature: string) => {\n const payment: Payment = {\n id: `pay_${Date.now()}`,\n amount: totalAmount,\n currency,\n status: 'completed',\n signature,\n };\n onSuccess?.(payment);\n };\n\n const handlePaymentError = (error: Error) => {\n onError?.(error);\n };\n\n const isDisabled = disabled || isLoading || !!error;\n\n const buttonStyle: React.CSSProperties = {\n ...(variant === 'outline' ? outlineStyle : solidStyle),\n backgroundColor: variant === 'solid'\n ? (isHovered && !isDisabled ? '#db2777' : '#ec4899')\n : (isHovered && !isDisabled ? 'rgba(236, 72, 153, 0.1)' : 'transparent'),\n opacity: isDisabled ? 0.5 : 1,\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n };\n\n return (\n <>\n <button\n ref={ref}\n onClick={handleClick}\n disabled={isDisabled}\n style={buttonStyle}\n title={error || undefined}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {isLoading ? (\n <span>Loading...</span>\n ) : error ? (\n <span>Error</span>\n ) : (\n children || <span>Pay</span>\n )}\n </button>\n\n <CheckoutModal\n visible={isModalOpen}\n onClose={() => setIsModalOpen(false)}\n amount={totalAmount}\n currency={currency}\n recipient={recipient}\n lineItems={lineItems}\n onSuccess={handlePaymentSuccess}\n onError={handlePaymentError}\n debug={debug}\n />\n </>\n );\n }\n);\n","'use client';\n\nimport React, { useCallback, useState, useEffect, useRef } from 'react';\nimport { useWallet } from '@solana/wallet-adapter-react';\nimport type { Wallet } from '@solana/wallet-adapter-react';\nimport { Menu, MenuButton, MenuItem, MenuItems } from '@headlessui/react';\nimport Lottie, { type LottieRefCurrentProps } from 'lottie-react';\nimport { useBranding } from './wallet-modal-provider';\nimport { useMoneyMQ, useSandbox, type SandboxAccount } from './provider';\nimport logoAnimation from './assets/logo-animation.json';\n\n// Helper to convert object to form-encoded data\nfunction encodeFormData(data: Record<string, unknown>): string {\n const params = new URLSearchParams();\n\n const addParams = (obj: Record<string, unknown>, prefix = '') => {\n for (const [key, value] of Object.entries(obj)) {\n const paramKey = prefix ? `${prefix}[${key}]` : key;\n\n if (value === null || value === undefined) {\n continue;\n } else if (typeof value === 'object' && !Array.isArray(value)) {\n addParams(value as Record<string, unknown>, paramKey);\n } else {\n params.append(paramKey, String(value));\n }\n }\n };\n\n addParams(data);\n return params.toString();\n}\n\n// Normalize RPC URL for browser access\nfunction normalizeRpcUrl(url: string): string {\n return url.replace('0.0.0.0', 'localhost').replace('127.0.0.1', 'localhost');\n}\n\n// Handle 402 Payment Required responses\nasync function makeRequestWith402Handling(\n url: string,\n method: 'POST' | 'GET',\n body: Record<string, unknown> | undefined,\n secretKeyHex: string,\n rpcUrl: string,\n headers: Record<string, string> = {}\n): Promise<unknown> {\n console.log(`[MoneyMQ] Making ${method} request to ${url}`);\n const formData = body ? encodeFormData(body) : undefined;\n\n let response = await fetch(url, {\n method,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n ...headers,\n },\n body: formData,\n });\n\n let data = await response.json();\n console.log(`[MoneyMQ] Response status: ${response.status}`, data);\n\n // Handle 402 Payment Required\n if (response.status === 402) {\n console.log('[MoneyMQ] 💳 402 Payment Required - processing payment...');\n\n const paymentRequirements = data?.payment_requirements || data?.error?.payment_requirements || [];\n\n if (paymentRequirements.length === 0) {\n console.warn('[MoneyMQ] ⚠️ No payment requirements found in 402 response');\n throw new Error('Payment required but no payment requirements provided');\n }\n\n console.log('[MoneyMQ] Payment requirements:', paymentRequirements);\n\n // Dynamic import x402 libraries\n const { createPaymentHeader, selectPaymentRequirements } = await import('x402/client');\n const { createSigner } = await import('x402-fetch');\n\n // Create signer from secret key\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const signer = await createSigner('solana', secretKeyHex, {\n svmConfig: rpcUrl,\n });\n\n // Select appropriate payment requirement\n const selectedPaymentRequirement = selectPaymentRequirements(paymentRequirements, 'solana', 'exact');\n\n console.log(`[MoneyMQ] 💰 Creating payment for ${selectedPaymentRequirement.network}...`);\n\n // Create payment header\n const paymentHeaderValue = await createPaymentHeader(\n signer,\n 1, // x402Version\n selectedPaymentRequirement,\n {\n svmConfig: {\n rpcUrl,\n },\n }\n );\n\n console.log('[MoneyMQ] ✅ Payment header created, retrying request...');\n\n // Retry with X-Payment header\n response = await fetch(url, {\n method,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'X-Payment': paymentHeaderValue,\n ...headers,\n },\n body: formData,\n });\n\n data = await response.json();\n console.log(`[MoneyMQ] Retry response status: ${response.status}`, data);\n\n if (!response.ok) {\n throw new Error(data.error?.message || 'Request failed after payment');\n }\n } else if (!response.ok) {\n throw new Error(data.error?.message || 'Request failed');\n }\n\n return data;\n}\n\n// Create and confirm payment intent for sandbox accounts\nasync function createSandboxPayment(\n apiUrl: string,\n rpcUrl: string,\n amount: number,\n currency: string,\n recipient: string,\n senderAddress: string,\n secretKeyHex: string,\n lineItems?: LineItem[]\n): Promise<string> {\n console.log('[MoneyMQ] Creating sandbox payment...', { amount, currency, recipient, senderAddress });\n\n // Build description from line items\n const description = lineItems && lineItems.length > 0\n ? `Purchase - ${lineItems.map(item => item.product.name).join(', ')}`\n : 'Payment';\n\n // Step 1: Create payment intent\n const paymentIntent = await makeRequestWith402Handling(\n `${apiUrl}/catalog/v1/payment_intents`,\n 'POST',\n {\n amount: Math.round(amount * 100), // Convert to cents (Stripe-style)\n currency: currency.toLowerCase(),\n customer: senderAddress,\n description,\n metadata: {\n sender_address: senderAddress,\n recipient_address: recipient,\n },\n },\n secretKeyHex,\n rpcUrl\n ) as { id: string };\n\n console.log('[MoneyMQ] Payment intent created:', paymentIntent);\n\n // Step 2: Confirm payment intent\n console.log('[MoneyMQ] Confirming payment intent:', paymentIntent.id);\n const confirmedIntent = await makeRequestWith402Handling(\n `${apiUrl}/catalog/v1/payment_intents/${paymentIntent.id}/confirm`,\n 'POST',\n {},\n secretKeyHex,\n rpcUrl\n ) as { id: string; status: string };\n\n console.log('[MoneyMQ] Payment intent confirmed:', confirmedIntent);\n\n return confirmedIntent.id;\n}\n\n// Payment method types\ntype PaymentMethodType = 'browser_extension' | 'sandbox_account';\n\ninterface SelectedPaymentMethod {\n type: PaymentMethodType;\n wallet?: Wallet;\n sandboxAccount?: SandboxAccount;\n}\n\n/**\n * Represents a line item in the checkout, including product, price, quantity, and calculated subtotal.\n *\n * @example\n * ```tsx\n * const lineItem: LineItem = {\n * product: { id: 'prod_123', name: 'Pro Plan' },\n * price: { id: 'price_456', unit_amount: 999, currency: 'USDC' },\n * quantity: 2,\n * subtotal: 19.98,\n * };\n * ```\n */\nexport interface LineItem {\n /** Product information */\n product: {\n /** Unique product identifier */\n id: string;\n /** Display name shown to the customer */\n name: string;\n /** Optional description */\n description?: string;\n };\n /** Price information */\n price: {\n /** Unique price identifier */\n id: string;\n /** Price amount in cents (e.g., 999 for $9.99) */\n unit_amount: number;\n /** Currency code (e.g., \"USDC\") */\n currency: string;\n };\n /** Quantity of this item */\n quantity: number;\n /** Calculated subtotal (unit_amount / 100 * quantity) */\n subtotal: number;\n}\n\n/**\n * Props for the CheckoutModal component.\n *\n * @example\n * ```tsx\n * <CheckoutModal\n * visible={isOpen}\n * onClose={() => setIsOpen(false)}\n * amount={9.99}\n * currency=\"USDC\"\n * recipient=\"7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU\"\n * onSuccess={(signature) => console.log('Paid:', signature)}\n * />\n * ```\n */\nexport interface CheckoutModalProps {\n /** Whether the modal is visible */\n visible: boolean;\n /** Callback to close the modal */\n onClose: () => void;\n /** Total payment amount (e.g., 9.99 for $9.99) */\n amount: number;\n /** Currency code (e.g., \"USDC\") */\n currency: string;\n /** Recipient wallet address */\n recipient: string;\n /** Optional line items to display in the checkout summary */\n lineItems?: LineItem[];\n /** Callback fired when payment completes. Receives the transaction signature. */\n onSuccess?: (signature: string) => void;\n /** Callback fired when payment fails. Receives the Error with failure details. */\n onError?: (error: Error) => void;\n /** Accent color for UI elements. @default \"#ec4899\" */\n accentColor?: string;\n /** Enable debug mode to show account balance panel. @default false */\n debug?: boolean;\n}\n\nconst truncateAddress = (address: string) => {\n if (address.length <= 12) return address;\n return `${address.slice(0, 4)}...${address.slice(-4)}`;\n};\n\n/**\n * A modal component for completing payments.\n *\n * Displays a payment interface where users can:\n * - View the total amount and line items\n * - Select a payment method (browser wallet or sandbox account)\n * - Complete the payment transaction\n *\n * Must be used within a `MoneyMQProvider`. Usually used internally by `CheckoutButton`,\n * but can be rendered directly for custom checkout flows.\n *\n * @example\n * ```tsx\n * import { MoneyMQProvider, CheckoutModal } from '@moneymq/react';\n *\n * function CustomCheckout() {\n * const [isOpen, setIsOpen] = useState(false);\n *\n * return (\n * <MoneyMQProvider client={client}>\n * <button onClick={() => setIsOpen(true)}>Pay</button>\n * <CheckoutModal\n * visible={isOpen}\n * onClose={() => setIsOpen(false)}\n * amount={9.99}\n * currency=\"USDC\"\n * recipient=\"7xKXtg...\"\n * lineItems={[\n * {\n * product: { id: 'prod_1', name: 'Pro Plan' },\n * price: { id: 'price_1', unit_amount: 999, currency: 'USDC' },\n * quantity: 1,\n * subtotal: 9.99,\n * },\n * ]}\n * onSuccess={(signature) => {\n * console.log('Payment successful:', signature);\n * setIsOpen(false);\n * }}\n * />\n * </MoneyMQProvider>\n * );\n * }\n * ```\n *\n * @see {@link CheckoutModalProps} for available props\n * @see {@link CheckoutButton} for a simpler button-based checkout\n */\nexport function CheckoutModal({\n visible,\n onClose,\n amount,\n currency,\n recipient,\n lineItems,\n onSuccess,\n onError,\n accentColor = '#ec4899',\n debug = false,\n}: CheckoutModalProps) {\n const [isSending, setIsSending] = useState(false);\n const [copiedSender, setCopiedSender] = useState(false);\n const [copiedRecipient, setCopiedRecipient] = useState(false);\n const [showDetails, setShowDetails] = useState(false);\n const [showDebug, setShowDebug] = useState(false);\n const [accountBalance, setAccountBalance] = useState<number | null>(null);\n const [selectedWallet, setSelectedWallet] = useState<Wallet | null>(null);\n const [selectedPaymentMethod, setSelectedPaymentMethod] = useState<SelectedPaymentMethod | null>(null);\n const { publicKey, connected, disconnect, wallets, select, wallet: connectedWallet } = useWallet();\n const branding = useBranding();\n const { isSandboxMode, sandboxAccounts } = useSandbox();\n const client = useMoneyMQ();\n const lottieRef = useRef<LottieRefCurrentProps | null>(null);\n\n // Animation states\n const [shouldRender, setShouldRender] = useState(false);\n const [animationPhase, setAnimationPhase] = useState<'closed' | 'backdrop' | 'open' | 'closing'>('closed');\n\n // Handle opening animation\n useEffect(() => {\n if (visible && !shouldRender) {\n setShouldRender(true);\n // Start with backdrop animation\n requestAnimationFrame(() => {\n setAnimationPhase('backdrop');\n // Then open modal after backdrop is ready\n setTimeout(() => {\n setAnimationPhase('open');\n }, 150);\n });\n } else if (!visible && shouldRender && animationPhase !== 'closing') {\n // Trigger close animation\n setAnimationPhase('closing');\n // Wait for animation to complete before unmounting\n setTimeout(() => {\n setShouldRender(false);\n setAnimationPhase('closed');\n }, 300);\n }\n }, [visible, shouldRender, animationPhase]);\n\n const handleAnimatedClose = useCallback(() => {\n if (animationPhase === 'closing') return;\n setAnimationPhase('closing');\n setTimeout(() => {\n onClose();\n }, 300);\n }, [onClose, animationPhase]);\n\n const copyToClipboard = (text: string, type: 'sender' | 'recipient') => {\n navigator.clipboard.writeText(text);\n if (type === 'sender') {\n setCopiedSender(true);\n setTimeout(() => setCopiedSender(false), 2000);\n } else {\n setCopiedRecipient(true);\n setTimeout(() => setCopiedRecipient(false), 2000);\n }\n };\n\n const handleSelectWallet = (wallet: Wallet) => {\n setSelectedWallet(wallet);\n setSelectedPaymentMethod({ type: 'browser_extension', wallet });\n select(wallet.adapter.name);\n };\n\n const handleSelectSandboxAccount = (account: SandboxAccount) => {\n setSelectedPaymentMethod({ type: 'sandbox_account', sandboxAccount: account });\n setSelectedWallet(null);\n };\n\n const handleDisconnect = async () => {\n await disconnect();\n setSelectedWallet(null);\n setSelectedPaymentMethod(null);\n };\n\n // Filter to only show installed/detected wallets\n const availableWallets = wallets.filter(\n (wallet) => wallet.readyState === 'Installed' || wallet.readyState === 'Loadable'\n );\n\n // Limit sandbox accounts to first 3\n const displayedSandboxAccounts = sandboxAccounts.slice(0, 3);\n\n // Get the current wallet icon (connected wallet, selected wallet, or default)\n const currentWalletIcon = connectedWallet?.adapter.icon || selectedWallet?.adapter.icon;\n const currentWalletName = connectedWallet?.adapter.name || selectedWallet?.adapter.name;\n\n // Get current selection display info\n const getCurrentSelectionDisplay = () => {\n if (connected && publicKey) {\n return {\n icon: currentWalletIcon,\n name: currentWalletName,\n address: publicKey.toBase58(),\n type: 'browser_extension' as const,\n };\n }\n if (selectedPaymentMethod?.type === 'sandbox_account' && selectedPaymentMethod.sandboxAccount) {\n const name = selectedPaymentMethod.sandboxAccount.name;\n return {\n icon: null,\n name: name.charAt(0).toUpperCase() + name.slice(1),\n address: selectedPaymentMethod.sandboxAccount.address,\n type: 'sandbox_account' as const,\n };\n }\n return null;\n };\n\n const currentSelection = getCurrentSelectionDisplay();\n\n // Fetch account balance when debug is enabled and an account is selected\n React.useEffect(() => {\n if (!debug || !currentSelection) {\n setAccountBalance(null);\n return;\n }\n\n async function fetchBalance() {\n try {\n // For sandbox accounts, use the stored balance\n if (currentSelection?.type === 'sandbox_account' && selectedPaymentMethod?.sandboxAccount) {\n setAccountBalance(selectedPaymentMethod.sandboxAccount.usdcBalance ?? null);\n return;\n }\n\n // For browser extension wallets, fetch from RPC\n if (currentSelection?.type === 'browser_extension' && publicKey) {\n const apiUrl = normalizeRpcUrl(client.config.endpoint);\n try {\n const configResponse = await fetch(`${apiUrl}/config`);\n const config = await configResponse.json();\n const rpcUrl = normalizeRpcUrl(config.x402?.validator?.rpcUrl || 'http://localhost:8899');\n\n // Fetch USDC token account balance\n const response = await fetch(rpcUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: 1,\n method: 'getTokenAccountsByOwner',\n params: [\n publicKey.toBase58(),\n { programId: 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' },\n { encoding: 'jsonParsed' },\n ],\n }),\n });\n const data = await response.json();\n const usdcAccount = data.result?.value?.find(\n (acc: { account: { data: { parsed: { info: { mint: string; tokenAmount: { uiAmount: number } } } } } }) =>\n acc.account.data.parsed.info.mint === 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v' // USDC mint\n );\n if (usdcAccount) {\n setAccountBalance(usdcAccount.account.data.parsed.info.tokenAmount.uiAmount);\n } else {\n setAccountBalance(0);\n }\n } catch {\n console.log('[MoneyMQ] Could not fetch balance');\n setAccountBalance(null);\n }\n }\n } catch {\n setAccountBalance(null);\n }\n }\n\n fetchBalance();\n }, [debug, currentSelection, selectedPaymentMethod, publicKey, client.config.endpoint]);\n\n const handlePay = useCallback(async () => {\n if (!recipient) return;\n\n // Determine the sender based on payment method\n let senderAddress: string;\n let secretKeyHex: string | undefined;\n\n if (selectedPaymentMethod?.type === 'sandbox_account' && selectedPaymentMethod.sandboxAccount) {\n senderAddress = selectedPaymentMethod.sandboxAccount.address;\n secretKeyHex = selectedPaymentMethod.sandboxAccount.secretKeyHex;\n } else if (publicKey) {\n senderAddress = publicKey.toBase58();\n } else {\n return;\n }\n\n setIsSending(true);\n\n try {\n // For sandbox accounts, handle payment directly\n if (selectedPaymentMethod?.type === 'sandbox_account' && secretKeyHex) {\n const apiUrl = normalizeRpcUrl(client.config.endpoint);\n\n // Fetch RPC URL from config\n let rpcUrl = 'http://localhost:8899';\n try {\n const configResponse = await fetch(`${apiUrl}/config`);\n const config = await configResponse.json();\n rpcUrl = normalizeRpcUrl(config.x402?.validator?.rpcUrl || rpcUrl);\n } catch {\n console.log('[MoneyMQ] Using default RPC URL');\n }\n\n const paymentId = await createSandboxPayment(\n apiUrl,\n rpcUrl,\n amount,\n currency,\n recipient,\n senderAddress,\n secretKeyHex,\n lineItems\n );\n\n setIsSending(false);\n onSuccess?.(paymentId);\n onClose();\n return;\n }\n\n // For browser extension wallets, dispatch event for external handling\n const event = new CustomEvent('moneymq:payment-initiated', {\n detail: {\n amount,\n currency,\n recipient,\n sender: senderAddress,\n paymentMethod: selectedPaymentMethod?.type || 'browser_extension',\n },\n bubbles: true,\n });\n window.dispatchEvent(event);\n\n const signature = await new Promise<string>((resolve, reject) => {\n const handleSuccess = (e: Event) => {\n const customEvent = e as CustomEvent<{ signature: string }>;\n cleanup();\n resolve(customEvent.detail.signature);\n };\n\n const handleError = (e: Event) => {\n const customEvent = e as CustomEvent<Error>;\n cleanup();\n reject(customEvent.detail);\n };\n\n const cleanup = () => {\n window.removeEventListener('moneymq:payment-success', handleSuccess);\n window.removeEventListener('moneymq:payment-error', handleError);\n };\n\n window.addEventListener('moneymq:payment-success', handleSuccess);\n window.addEventListener('moneymq:payment-error', handleError);\n\n setTimeout(() => {\n cleanup();\n reject(new Error('Payment timeout'));\n }, 60000);\n });\n\n setIsSending(false);\n onSuccess?.(signature);\n onClose();\n } catch (err) {\n console.error('Payment failed:', err);\n setIsSending(false);\n onError?.(err instanceof Error ? err : new Error(String(err)));\n }\n }, [publicKey, recipient, amount, currency, onSuccess, onError, onClose, selectedPaymentMethod, client.config.endpoint, lineItems]);\n\n // Can pay with either browser extension (connected) or sandbox account\n const canPay = (\n ((connected && publicKey) || selectedPaymentMethod?.type === 'sandbox_account') &&\n recipient &&\n !isSending\n );\n\n // Play Lottie animation every 3 seconds when canPay is true\n useEffect(() => {\n if (!canPay || !visible) return;\n\n // Play immediately when canPay becomes true\n lottieRef.current?.goToAndPlay(0, true);\n\n const interval = setInterval(() => {\n lottieRef.current?.goToAndPlay(0, true);\n }, 3000);\n\n return () => clearInterval(interval);\n }, [canPay, visible]);\n\n if (!shouldRender) return null;\n\n // Wallet icon SVG\n const WalletIcon = () => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <path d=\"M21 12V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2h14a2 2 0 002-2v-5z\" />\n <path d=\"M16 12h.01\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n );\n\n // Sandbox account icon SVG (beaker/test tube)\n const SandboxIcon = () => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <path d=\"M9.75 3.104v5.714a2.25 2.25 0 0 1-.659 1.591L5 14.5M9.75 3.104c-.251.023-.501.05-.75.082m.75-.082a24.301 24.301 0 0 1 4.5 0m0 0v5.714c0 .597.237 1.17.659 1.591L19.8 15.3M14.25 3.104c.251.023.501.05.75.082M19.8 15.3l-1.57.393A9.065 9.065 0 0 1 12 15a9.065 9.065 0 0 1-6.23.693L5 15.5m14.8-.2a2.25 2.25 0 0 1 .775 2.646l-.972 2.916a2.25 2.25 0 0 1-2.134 1.538H6.532a2.25 2.25 0 0 1-2.135-1.538l-.971-2.916A2.25 2.25 0 0 1 4.2 15.3\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n\n // Wrench/Screwdriver icon for debug mode\n const WrenchIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <path d=\"M11.42 15.17L17.25 21A2.652 2.652 0 0 0 21 17.25l-5.877-5.877M11.42 15.17l2.496-3.03c.317-.384.74-.626 1.208-.766M11.42 15.17l-4.655 5.653a2.548 2.548 0 1 1-3.586-3.586l6.837-5.63m5.108-.233c.55-.164 1.163-.188 1.743-.14a4.5 4.5 0 0 0 4.486-6.336l-3.276 3.277a3.004 3.004 0 0 1-2.25-2.25l3.276-3.276a4.5 4.5 0 0 0-6.336 4.486c.091 1.076-.071 2.264-.904 2.95l-.102.085m-1.745 1.437L5.909 7.5H4.5L2.25 3.75l1.5-1.5L7.5 4.5v1.409l4.26 4.26m-1.745 1.437 1.745-1.437m6.615 8.206L15.75 15.75M4.867 19.125h.008v.008h-.008v-.008Z\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n\n // MoneyMQ Logo\n const MoneyMQLogo = () => (\n <svg width=\"80\" height=\"17\" viewBox=\"0 0 471 99\" fill=\"none\">\n <g clipPath=\"url(#clip0_524_7)\">\n <path d=\"M12.8892 77.1417H0V0.637573H14.3415L40.0291 60.1104L65.8075 0.637573H80.149V77.1417H67.169V25.5014L44.9306 77.2327H35.0368L12.8892 25.5014V77.2327V77.1417Z\" fill=\"white\"/>\n <path d=\"M113.28 77.9614C108.015 77.9614 103.295 76.7774 99.2104 74.5005C95.1257 72.2235 91.8581 68.9448 89.5888 64.7553C87.2289 60.5658 86.1396 55.6476 86.1396 49.9098C86.1396 44.172 87.3196 39.1628 89.7704 34.9733C92.2211 30.7838 95.4888 27.5051 99.6642 25.2281C103.84 22.9512 108.56 21.7673 113.733 21.7673C118.907 21.7673 123.627 22.9512 127.803 25.2281C131.978 27.5051 135.336 30.7838 137.787 34.9733C140.238 39.1628 141.509 44.081 141.509 49.8188C141.509 55.5566 140.238 60.5658 137.787 64.7553C135.246 68.9448 131.887 72.2235 127.621 74.5005C123.355 76.7774 118.635 77.9614 113.37 77.9614H113.28ZM113.189 66.9411C115.73 66.9411 118.181 66.3036 120.45 65.1196C122.72 63.8445 124.626 62.023 126.078 59.4729C127.53 56.9227 128.257 53.735 128.257 49.8188C128.257 45.9025 127.53 42.897 126.169 40.3468C124.807 37.7967 122.992 35.9752 120.723 34.7001C118.453 33.425 116.003 32.8786 113.461 32.8786C110.92 32.8786 108.56 33.5161 106.381 34.7001C104.203 35.9752 102.478 37.7967 101.207 40.3468C99.9365 42.897 99.3011 46.0846 99.3011 50.0009C99.3011 53.9172 99.9365 56.9227 101.117 59.4729C102.387 62.023 104.021 63.8445 106.2 65.1196C108.378 66.3947 110.647 66.9411 113.189 66.9411Z\" fill=\"white\"/>\n <path d=\"M146.41 22.4959H157.484L158.392 27.8694C160.207 25.9568 162.386 24.4995 164.927 23.4066C167.469 22.3137 170.192 21.7673 173.096 21.7673C177.272 21.7673 180.993 22.678 184.079 24.4085C187.166 26.23 189.526 28.7801 191.25 32.241C192.884 35.7019 193.792 39.9825 193.792 45.1739V77.0506H181.356V46.9043C181.356 42.2594 180.449 38.7075 178.633 36.4305C176.818 34.1536 174.095 32.9696 170.373 32.9696C166.652 32.9696 163.747 34.1536 161.75 36.5216C159.753 38.8896 158.846 42.4416 158.846 47.0865V77.1417H146.501V22.4959H146.41Z\" fill=\"white\"/>\n <path d=\"M225.107 77.9614C219.661 77.9614 214.85 76.7774 210.765 74.3183C206.681 71.8592 203.504 68.5805 201.144 64.2999C198.875 60.0193 197.695 55.0101 197.695 49.4545C197.695 44.172 198.784 39.4361 201.053 35.2466C203.322 31.057 206.409 27.7783 210.402 25.4103C214.396 23.0423 218.935 21.7673 223.927 21.7673C228.919 21.7673 233.73 22.8602 237.633 25.1371C241.536 27.414 244.622 30.5106 246.892 34.609C249.161 38.6164 250.25 43.3523 250.25 48.6348C250.25 49.5455 250.25 50.4563 250.068 51.4581C249.978 52.46 249.796 53.4618 249.705 54.5547H211.038C211.31 57.1959 212.127 59.3818 213.398 61.2033C214.669 63.0248 216.302 64.4821 218.209 65.4839C220.205 66.4857 222.475 67.0322 225.107 67.0322C228.102 67.0322 230.825 66.3947 233.185 65.1196C235.636 63.8445 237.27 62.2051 238.268 60.2925L249.07 63.9356C246.892 68.3073 243.715 71.7682 239.448 74.2272C235.182 76.6863 230.372 77.9614 225.016 77.9614H225.107ZM236.816 44.5363C236.816 42.2594 236.272 40.2557 235.092 38.4342C233.912 36.6127 232.368 35.1555 230.553 34.1536C228.647 33.0607 226.559 32.6053 224.199 32.6053C222.112 32.6053 220.115 33.1518 218.39 34.1536C216.575 35.1555 215.122 36.6127 213.852 38.3431C212.581 40.1647 211.764 42.2594 211.31 44.6274H236.816V44.5363Z\" fill=\"white\"/>\n <path d=\"M291.368 22.4958H304.439L272.398 99H260.235L270.038 75.5022L248.707 22.4958H262.413L276.754 61.2033L291.368 22.4958Z\" fill=\"white\"/>\n <path d=\"M320.687 77.1417H307.797V0.637573H322.139L347.827 60.1104L373.605 0.637573H387.946V77.1417H374.966V25.5014L352.728 77.2327H342.834L320.596 25.5014V77.2327L320.687 77.1417Z\" fill=\"white\"/>\n <path d=\"M432.332 77.9614C426.977 77.9614 421.894 77.0506 417.174 75.138C412.454 73.2254 408.369 70.5842 404.829 67.1233C401.289 63.6624 398.566 59.5639 396.569 54.7369C394.573 50.0009 393.574 44.7185 393.574 38.9807C393.574 33.2429 394.573 28.0515 396.569 23.3155C398.566 18.5796 401.289 14.3901 404.829 10.9292C408.369 7.46826 412.454 4.73597 417.174 2.82337C421.894 0.910764 426.886 0 432.332 0C437.779 0 442.771 0.910764 447.4 2.82337C452.029 4.73597 456.205 7.37719 459.745 10.9292C463.285 14.3901 466.008 18.5796 468.005 23.3155C470.002 28.0515 471 33.3339 471 38.9807C471 44.6274 470.002 50.0009 468.095 54.7369C466.098 59.4729 463.375 63.6624 459.835 67.1233C456.295 70.5842 452.12 73.2254 447.491 75.138C442.862 77.0506 437.779 77.9614 432.423 77.9614H432.332ZM432.242 66.9411C437.143 66.9411 441.591 65.7571 445.403 63.4802C449.215 61.2033 452.302 57.9246 454.571 53.735C456.84 49.5455 457.929 44.6274 457.929 38.8896C457.929 33.1518 456.84 28.1426 454.571 24.0442C452.302 19.9457 449.306 16.667 445.403 14.3901C441.591 12.1132 437.143 10.9292 432.242 10.9292C427.34 10.9292 422.892 12.1132 419.08 14.3901C415.268 16.667 412.182 19.9457 410.003 24.0442C407.825 28.1426 406.736 33.1518 406.736 38.8896C406.736 44.6274 407.825 49.5455 410.094 53.735C412.273 57.9246 415.359 61.2033 419.171 63.4802C422.983 65.7571 427.34 66.9411 432.332 66.9411H432.242ZM426.251 55.0101H438.868V87.9798H426.251V55.0101Z\" fill=\"white\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_524_7\">\n <rect width=\"471\" height=\"99\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n );\n\n\n // Compute animation styles\n const isBackdropVisible = animationPhase === 'backdrop' || animationPhase === 'open';\n const isModalVisible = animationPhase === 'open';\n const isClosing = animationPhase === 'closing';\n\n return (\n <>\n <style>{`\n @keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n `}</style>\n\n {/* Backdrop */}\n <div\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 9998,\n backgroundColor: isBackdropVisible && !isClosing ? 'rgba(0, 0, 0, 0.6)' : 'rgba(0, 0, 0, 0)',\n backdropFilter: isBackdropVisible && !isClosing ? 'blur(8px)' : 'blur(0px)',\n transition: 'background-color 250ms cubic-bezier(0.4, 0, 0.2, 1), backdrop-filter 250ms cubic-bezier(0.4, 0, 0.2, 1)',\n }}\n onClick={handleAnimatedClose}\n />\n\n {/* Modal */}\n <div\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 9999,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '1rem',\n pointerEvents: isClosing ? 'none' : 'auto',\n }}\n onClick={handleAnimatedClose}\n >\n <div\n style={{\n width: '100%',\n maxWidth: '380px',\n backgroundColor: '#2c2c2e',\n borderRadius: '1rem',\n overflow: 'hidden',\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.5)',\n opacity: isModalVisible && !isClosing ? 1 : 0,\n transform: isModalVisible && !isClosing ? 'translateY(0) scale(1)' : 'translateY(-20px) scale(0.98)',\n transition: 'opacity 200ms cubic-bezier(0.4, 0, 0.2, 1), transform 250ms cubic-bezier(0.4, 0, 0.2, 1)',\n }}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Header */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '1rem 1.25rem',\n borderBottom: '1px solid #3a3a3c',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n {branding?.logo ? (\n <img\n src={branding.logo}\n alt=\"Logo\"\n style={{ height: '24px', width: 'auto', filter: 'invert(1)' }}\n />\n ) : (\n <MoneyMQLogo />\n )}\n {isSandboxMode && (\n <span style={{ fontSize: '0.75rem', fontWeight: 600, color: '#ff9f0a', position: 'relative', top: '-1px' }}>\n {'{ sandbox }'}\n </span>\n )}\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n {debug && (\n <button\n onClick={() => setShowDebug(!showDebug)}\n style={{\n width: '28px',\n height: '28px',\n borderRadius: '9999px',\n border: 'none',\n backgroundColor: showDebug ? 'rgba(255, 159, 10, 0.2)' : '#3a3a3c',\n color: showDebug ? '#ff9f0a' : '#8e8e93',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 0,\n transition: 'all 150ms',\n }}\n title=\"Debug info\"\n >\n <WrenchIcon />\n </button>\n )}\n <button\n onClick={handleAnimatedClose}\n style={{\n padding: '0.375rem 0.75rem',\n fontSize: '0.8125rem',\n fontWeight: 500,\n color: '#8e8e93',\n backgroundColor: '#3a3a3c',\n borderRadius: '9999px',\n border: 'none',\n cursor: 'pointer',\n }}\n >\n cancel\n </button>\n </div>\n </div>\n\n {/* Content */}\n <div style={{ padding: '0.75rem' }}>\n {/* From (Wallet/Sandbox) Card */}\n {currentSelection ? (\n <div\n style={{\n backgroundColor: '#3a3a3c',\n borderRadius: '0.75rem',\n padding: '0.875rem 1rem',\n marginBottom: '0.5rem',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.75rem' }}>\n <div\n style={{\n width: '40px',\n height: '40px',\n borderRadius: '0.5rem',\n backgroundColor: currentSelection.icon ? 'transparent' : '#636366',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: '#fff',\n overflow: 'hidden',\n }}\n >\n {currentSelection.icon ? (\n <img\n src={currentSelection.icon}\n alt={currentSelection.name || 'Wallet'}\n style={{ width: '40px', height: '40px', borderRadius: '0.5rem' }}\n />\n ) : currentSelection.type === 'sandbox_account' ? (\n <SandboxIcon />\n ) : (\n <WalletIcon />\n )}\n </div>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.375rem', marginBottom: '0.125rem' }}>\n <span style={{ fontSize: '0.75rem', color: '#8e8e93' }}>\n From {truncateAddress(currentSelection.address)}\n </span>\n <button\n onClick={() => copyToClipboard(currentSelection.address, 'sender')}\n style={{\n padding: 0,\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n color: copiedSender ? '#30d158' : '#8e8e93',\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1\" />\n </svg>\n </button>\n </div>\n <span\n style={{\n fontSize: '0.9375rem',\n fontWeight: 500,\n color: '#fff',\n }}\n >\n {currentSelection.name}\n </span>\n </div>\n <button\n onClick={handleDisconnect}\n style={{\n fontSize: '0.75rem',\n fontWeight: 500,\n color: '#ff453a',\n backgroundColor: 'rgba(255, 69, 58, 0.15)',\n borderRadius: '9999px',\n border: 'none',\n cursor: 'pointer',\n padding: '0.25rem 0.625rem',\n }}\n >\n unlink\n </button>\n </div>\n </div>\n ) : (\n <Menu as=\"div\" style={{ position: 'relative', marginBottom: '0.5rem' }}>\n <MenuButton\n style={{\n width: '100%',\n backgroundColor: '#3a3a3c',\n borderRadius: '0.75rem',\n padding: '0.875rem 1rem',\n border: 'none',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n gap: '0.75rem',\n textAlign: 'left',\n }}\n >\n <div\n style={{\n width: '40px',\n height: '40px',\n borderRadius: '0.5rem',\n backgroundColor: currentWalletIcon ? 'transparent' : '#636366',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: '#fff',\n overflow: 'hidden',\n flexShrink: 0,\n }}\n >\n {currentWalletIcon ? (\n <img\n src={currentWalletIcon}\n alt={currentWalletName || 'Wallet'}\n style={{ width: '40px', height: '40px', borderRadius: '0.5rem' }}\n />\n ) : (\n <WalletIcon />\n )}\n </div>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ fontSize: '0.75rem', color: '#8e8e93', marginBottom: '0.125rem' }}>\n From\n </div>\n <span\n style={{\n fontSize: '0.9375rem',\n fontWeight: 500,\n color: '#0a84ff',\n }}\n >\n {selectedWallet ? selectedWallet.adapter.name : 'Connect Wallet'}\n </span>\n </div>\n {/* ChevronUpDownIcon */}\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"#8e8e93\"\n style={{ flexShrink: 0 }}\n >\n <path fillRule=\"evenodd\" d=\"M5.22 10.22a.75.75 0 0 1 1.06 0L8 11.94l1.72-1.72a.75.75 0 1 1 1.06 1.06l-2.25 2.25a.75.75 0 0 1-1.06 0l-2.25-2.25a.75.75 0 0 1 0-1.06ZM10.78 5.78a.75.75 0 0 1-1.06 0L8 4.06 6.28 5.78a.75.75 0 0 1-1.06-1.06l2.25-2.25a.75.75 0 0 1 1.06 0l2.25 2.25a.75.75 0 0 1 0 1.06Z\" clipRule=\"evenodd\" />\n </svg>\n </MenuButton>\n <MenuItems\n anchor=\"bottom start\"\n style={{\n backgroundColor: '#2c2c2e',\n borderRadius: '0.75rem',\n padding: '0.25rem',\n boxShadow: '0 10px 25px rgba(0, 0, 0, 0.4)',\n zIndex: 10000,\n outline: 'none',\n border: '1px solid #48484a',\n maxHeight: '300px',\n overflowY: 'auto',\n width: 'var(--button-width)',\n marginTop: '0.25rem',\n }}\n >\n {/* Sandbox Accounts Section */}\n {isSandboxMode && displayedSandboxAccounts.length > 0 && (\n <>\n {displayedSandboxAccounts.map((account) => (\n <MenuItem key={account.id}>\n {({ focus }) => (\n <button\n onClick={() => handleSelectSandboxAccount(account)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '0.75rem',\n padding: '0.875rem 1rem',\n backgroundColor: focus ? '#3a3a3c' : 'transparent',\n borderRadius: '0.5rem',\n border: 'none',\n cursor: 'pointer',\n width: '100%',\n textAlign: 'left',\n transition: 'background-color 150ms',\n }}\n >\n <div\n style={{\n width: '40px',\n height: '40px',\n borderRadius: '0.5rem',\n backgroundColor: '#636366',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n flexShrink: 0,\n color: '#fff',\n }}\n >\n <SandboxIcon />\n </div>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.375rem', marginBottom: '0.125rem' }}>\n <span style={{ fontSize: '0.75rem', color: '#8e8e93' }}>\n From {truncateAddress(account.address)}\n </span>\n <span\n role=\"button\"\n tabIndex={0}\n onClick={(e) => {\n e.stopPropagation();\n navigator.clipboard.writeText(account.address);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.stopPropagation();\n navigator.clipboard.writeText(account.address);\n }\n }}\n style={{\n padding: 0,\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n color: '#8e8e93',\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1\" />\n </svg>\n </span>\n </div>\n <span\n style={{\n fontSize: '0.9375rem',\n fontWeight: 500,\n color: '#fff',\n }}\n >\n {account.name.charAt(0).toUpperCase() + account.name.slice(1)}\n </span>\n </div>\n {account.usdcBalance !== undefined && (\n <span\n style={{\n fontSize: '0.6875rem',\n color: '#ff9f0a',\n backgroundColor: 'rgba(255, 159, 10, 0.15)',\n padding: '0.25rem 0.5rem',\n borderRadius: '0.25rem',\n flexShrink: 0,\n }}\n >\n {account.usdcBalance.toLocaleString()} USDC\n </span>\n )}\n </button>\n )}\n </MenuItem>\n ))}\n {/* Divider between sandbox and browser extensions */}\n {availableWallets.length > 0 && (\n <div style={{ height: '1px', backgroundColor: '#48484a', margin: '0.25rem 0' }} />\n )}\n </>\n )}\n\n {/* Browser Extension Wallets Section */}\n {availableWallets.length > 0 ? (\n availableWallets.map((wallet) => (\n <MenuItem key={wallet.adapter.name}>\n {({ focus }) => (\n <button\n onClick={() => handleSelectWallet(wallet)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '0.75rem',\n padding: '0.875rem 1rem',\n backgroundColor: focus ? '#3a3a3c' : 'transparent',\n borderRadius: '0.5rem',\n border: 'none',\n cursor: 'pointer',\n width: '100%',\n textAlign: 'left',\n transition: 'background-color 150ms',\n }}\n >\n <div\n style={{\n width: '40px',\n height: '40px',\n borderRadius: '0.5rem',\n backgroundColor: '#636366',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n flexShrink: 0,\n }}\n >\n {wallet.adapter.icon ? (\n <img\n src={wallet.adapter.icon}\n alt={wallet.adapter.name}\n style={{\n width: '40px',\n height: '40px',\n borderRadius: '0.5rem',\n }}\n />\n ) : (\n <WalletIcon />\n )}\n </div>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ fontSize: '0.75rem', color: '#8e8e93', marginBottom: '0.125rem' }}>\n Browser Extension\n </div>\n <span\n style={{\n fontSize: '0.9375rem',\n fontWeight: 500,\n color: '#fff',\n }}\n >\n {wallet.adapter.name}\n </span>\n </div>\n {wallet.readyState === 'Installed' && (\n <span\n style={{\n fontSize: '0.6875rem',\n color: '#30d158',\n backgroundColor: 'rgba(48, 209, 88, 0.15)',\n padding: '0.25rem 0.5rem',\n borderRadius: '0.25rem',\n flexShrink: 0,\n }}\n >\n Detected\n </span>\n )}\n </button>\n )}\n </MenuItem>\n ))\n ) : !isSandboxMode || displayedSandboxAccounts.length === 0 ? (\n <div\n style={{\n textAlign: 'center',\n padding: '1.5rem',\n color: '#8e8e93',\n fontSize: '0.875rem',\n }}\n >\n No wallets detected\n </div>\n ) : null}\n </MenuItems>\n </Menu>\n )}\n\n </div>\n\n {/* Footer with amount and pay button */}\n <div\n style={{\n padding: '1rem 1.25rem 1.25rem',\n borderTop: '1px solid #3a3a3c',\n }}\n >\n {/* Line items and amount */}\n <div style={{ marginBottom: '1rem' }}>\n {/* Line items list */}\n {lineItems && lineItems.length > 0 && (\n <div style={{ marginBottom: '0.75rem' }}>\n {lineItems.map((item, index) => (\n <div\n key={item.product.id + '-' + index}\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: '0.5rem 0',\n borderBottom: index < lineItems.length - 1 ? '1px solid #3a3a3c' : 'none',\n }}\n >\n <div style={{ flex: 1 }}>\n <div style={{ fontSize: '0.875rem', color: '#fff', fontWeight: 500 }}>\n {item.product.name}\n </div>\n {item.quantity > 1 && (\n <div style={{ fontSize: '0.75rem', color: '#8e8e93' }}>\n Qty: {item.quantity} × {(item.price.unit_amount / 100).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} {item.price.currency.toUpperCase()}\n </div>\n )}\n </div>\n <div style={{ fontSize: '0.875rem', color: '#fff', fontWeight: 500 }}>\n {item.subtotal.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} {item.price.currency.toUpperCase()}\n </div>\n </div>\n ))}\n </div>\n )}\n\n <div style={{ fontSize: '0.875rem', color: '#8e8e93', marginBottom: '0.25rem' }}>\n Total\n </div>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <div style={{ display: 'flex', alignItems: 'baseline', gap: '0.375rem' }}>\n <span style={{ fontSize: '2rem', fontWeight: 600, color: '#fff' }}>\n {amount.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}\n </span>\n <span style={{ fontSize: '1rem', fontWeight: 500, color: '#8e8e93' }}>\n {currency}\n </span>\n </div>\n <button\n onClick={() => setShowDetails(!showDetails)}\n style={{\n width: '22px',\n height: '22px',\n borderRadius: '50%',\n border: '1.5px solid #8e8e93',\n background: 'none',\n color: '#8e8e93',\n fontSize: '0.8125rem',\n fontWeight: 600,\n fontStyle: 'italic',\n fontFamily: 'Georgia, serif',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 0,\n transition: 'all 150ms',\n }}\n title=\"Show payment details\"\n >\n i\n </button>\n </div>\n\n {/* Recipient details (shown when info button is clicked) */}\n {showDetails && (\n <div\n style={{\n marginTop: '0.75rem',\n padding: '0.625rem 0.75rem',\n backgroundColor: '#3a3a3c',\n borderRadius: '0.5rem',\n fontSize: '0.8125rem',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <span style={{ color: '#8e8e93' }}>Recipient</span>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.375rem' }}>\n <span\n style={{\n color: '#fff',\n fontFamily: 'ui-monospace, monospace',\n fontSize: '0.75rem',\n }}\n >\n {truncateAddress(recipient)}\n </span>\n <button\n onClick={() => copyToClipboard(recipient, 'recipient')}\n style={{\n padding: 0,\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n color: copiedRecipient ? '#30d158' : '#8e8e93',\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1\" />\n </svg>\n </button>\n </div>\n </div>\n </div>\n )}\n\n {/* Debug section (shown when wrench button is clicked) */}\n {showDebug && (\n <div\n style={{\n marginTop: '0.75rem',\n padding: '0.75rem',\n backgroundColor: '#1c1c1e',\n borderRadius: '0.5rem',\n fontSize: '0.75rem',\n fontFamily: 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace',\n }}\n >\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n marginBottom: '0.5rem',\n paddingBottom: '0.5rem',\n borderBottom: '1px solid #2c2c2e',\n }}>\n <span style={{ color: '#8e8e93' }}>DEBUG</span>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <span style={{ color: '#8e8e93' }}>balance</span>\n <span style={{ color: '#30d158' }}>\n {accountBalance !== null\n ? `${accountBalance.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} ${currency}`\n : currentSelection ? '...' : 'null'}\n </span>\n </div>\n </div>\n )}\n </div>\n\n {/* Pay Button */}\n <button\n onClick={handlePay}\n disabled={!canPay}\n style={{\n width: '100%',\n padding: '0.5rem 1rem',\n borderRadius: '0.75rem',\n border: 'none',\n fontSize: '1.0625rem',\n fontWeight: 600,\n cursor: canPay ? 'pointer' : 'not-allowed',\n backgroundColor: canPay ? '#000' : '#48484a',\n color: canPay ? '#fff' : '#8e8e93',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '0.25rem',\n transition: 'opacity 150ms',\n }}\n >\n {isSending ? (\n <>\n <div\n style={{\n width: '1.25rem',\n height: '1.25rem',\n border: '2px solid currentColor',\n borderTopColor: 'transparent',\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n }}\n />\n <span>Processing...</span>\n </>\n ) : (\n <>\n <Lottie\n lottieRef={lottieRef}\n animationData={logoAnimation}\n loop={false}\n autoplay={false}\n style={{\n width: 48,\n height: 48,\n marginTop: '-8px',\n marginBottom: '-8px',\n marginLeft: '-8px',\n marginRight: '4px',\n opacity: canPay ? 1 : 0.55,\n transition: 'opacity 150ms',\n }}\n />\n <span>Pay {amount.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })} {currency}</span>\n </>\n )}\n </button>\n </div>\n </div>\n </div>\n </>\n );\n}\n","{\"assets\":[{\"id\":\"4\",\"layers\":[{\"ind\":3,\"ty\":4,\"ks\":{},\"ip\":0,\"op\":58,\"st\":0,\"shapes\":[{\"ty\":\"rc\",\"p\":{\"a\":0,\"k\":[40,40]},\"r\":{\"a\":0,\"k\":0},\"s\":{\"a\":0,\"k\":[80,80]}},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0,0,0]},\"o\":{\"a\":0,\"k\":0}}]},{\"ind\":0,\"ty\":4,\"ks\":{\"s\":{\"a\":0,\"k\":[133.33,133.33]}},\"ip\":0,\"op\":58,\"st\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ty\":\"gr\",\"it\":[{\"ty\":\"sh\",\"ks\":{\"a\":0,\"k\":{\"c\":true,\"i\":[[0,0],[0,20.55],[20.55,0],[0,-20.55],[-20.55,0]],\"o\":[[20.55,0],[0,-20.55],[-20.55,0],[0,20.55],[0,0]],\"v\":[[39.65,76.85],[76.85,39.65],[39.65,2.43],[2.44,39.65],[39.65,76.85]]}}},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0,0,0,1]},\"lc\":1,\"lj\":1,\"ml\":10,\"o\":{\"a\":0,\"k\":100},\"w\":{\"a\":0,\"k\":4.87}},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1]},\"o\":{\"a\":0,\"k\":100}},{\"ty\":\"tr\",\"o\":{\"a\":0,\"k\":100},\"s\":{\"a\":0,\"k\":[75,75]}}]},{\"ty\":\"tr\",\"o\":{\"a\":0,\"k\":100}}]}]}]},{\"id\":\"7\",\"layers\":[{\"ind\":6,\"ty\":0,\"ks\":{},\"w\":80,\"h\":80,\"ip\":0,\"op\":58,\"st\":0,\"refId\":\"4\"}]},{\"id\":\"12\",\"layers\":[{\"ind\":11,\"ty\":4,\"ks\":{},\"ip\":0,\"op\":58,\"st\":0,\"shapes\":[{\"ty\":\"rc\",\"p\":{\"a\":0,\"k\":[40,40]},\"r\":{\"a\":0,\"k\":0},\"s\":{\"a\":0,\"k\":[80,80]}},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0,0,0]},\"o\":{\"a\":0,\"k\":0}}]},{\"ind\":0,\"ty\":4,\"ks\":{\"s\":{\"a\":0,\"k\":[133.33,133.33]}},\"ip\":0,\"op\":58,\"st\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ty\":\"gr\",\"it\":[{\"ty\":\"sh\",\"ks\":{\"a\":0,\"k\":{\"c\":true,\"i\":[[0,0],[0,20.55],[20.55,0],[0,-20.55],[-20.55,0]],\"o\":[[20.55,0],[0,-20.55],[-20.55,0],[0,20.55],[0,0]],\"v\":[[39.65,76.85],[76.85,39.65],[39.65,2.43],[2.44,39.65],[39.65,76.85]]}}},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0,0,0,1]},\"lc\":1,\"lj\":1,\"ml\":10,\"o\":{\"a\":0,\"k\":100},\"w\":{\"a\":0,\"k\":4.87}},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1]},\"o\":{\"a\":0,\"k\":100}},{\"ty\":\"tr\",\"o\":{\"a\":0,\"k\":100},\"s\":{\"a\":0,\"k\":[75,75]}}]},{\"ty\":\"tr\",\"o\":{\"a\":0,\"k\":100}}]}]}]},{\"id\":\"17\",\"layers\":[{\"ind\":16,\"ty\":4,\"ks\":{},\"ip\":0,\"op\":58,\"st\":0,\"shapes\":[{\"ty\":\"rc\",\"p\":{\"a\":0,\"k\":[40,40]},\"r\":{\"a\":0,\"k\":0},\"s\":{\"a\":0,\"k\":[80,80]}},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0,0,0]},\"o\":{\"a\":0,\"k\":0}}]},{\"ind\":0,\"ty\":4,\"ks\":{\"s\":{\"a\":0,\"k\":[133.33,133.33]}},\"ip\":0,\"op\":58,\"st\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ty\":\"gr\",\"it\":[{\"ty\":\"sh\",\"ks\":{\"a\":0,\"k\":{\"c\":true,\"i\":[[0,0],[0,20.55],[20.55,0],[0,-20.55],[-20.55,0]],\"o\":[[20.55,0],[0,-20.55],[-20.55,0],[0,20.55],[0,0]],\"v\":[[39.65,76.85],[76.85,39.65],[39.65,2.43],[2.44,39.65],[39.65,76.85]]}}},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0,0,0,1]},\"lc\":1,\"lj\":1,\"ml\":10,\"o\":{\"a\":0,\"k\":100},\"w\":{\"a\":0,\"k\":4.87}},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1]},\"o\":{\"a\":0,\"k\":100}},{\"ty\":\"tr\",\"o\":{\"a\":0,\"k\":100},\"s\":{\"a\":0,\"k\":[75,75]}}]},{\"ty\":\"tr\",\"o\":{\"a\":0,\"k\":100}}]}]}]},{\"id\":\"22\",\"layers\":[{\"ind\":21,\"ty\":4,\"ks\":{},\"ip\":0,\"op\":58,\"st\":0,\"shapes\":[{\"ty\":\"rc\",\"p\":{\"a\":0,\"k\":[40,40]},\"r\":{\"a\":0,\"k\":0},\"s\":{\"a\":0,\"k\":[80,80]}},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[0,0,0,0]},\"o\":{\"a\":0,\"k\":0}}]},{\"ind\":0,\"ty\":4,\"ks\":{\"s\":{\"a\":0,\"k\":[133.33,133.33]}},\"ip\":0,\"op\":58,\"st\":0,\"shapes\":[{\"ty\":\"gr\",\"it\":[{\"ty\":\"gr\",\"it\":[{\"ty\":\"sh\",\"ks\":{\"a\":0,\"k\":{\"c\":true,\"i\":[[0,0],[0,20.55],[20.55,0],[0,-20.55],[-20.55,0]],\"o\":[[20.55,0],[0,-20.55],[-20.55,0],[0,20.55],[0,0]],\"v\":[[39.65,76.85],[76.85,39.65],[39.65,2.43],[2.44,39.65],[39.65,76.85]]}}},{\"ty\":\"st\",\"c\":{\"a\":0,\"k\":[0,0,0,1]},\"lc\":1,\"lj\":1,\"ml\":10,\"o\":{\"a\":0,\"k\":100},\"w\":{\"a\":0,\"k\":4.87}},{\"ty\":\"fl\",\"c\":{\"a\":0,\"k\":[1,1,1,1]},\"o\":{\"a\":0,\"k\":100}},{\"ty\":\"tr\",\"o\":{\"a\":0,\"k\":100},\"s\":{\"a\":0,\"k\":[75,75]}}]},{\"ty\":\"tr\",\"o\":{\"a\":0,\"k\":100}}]}]}]}],\"fr\":60,\"h\":200,\"ip\":0,\"layers\":[{\"ind\":9,\"ty\":0,\"parent\":2,\"ks\":{\"a\":{\"a\":0,\"k\":[40,40]},\"o\":{\"a\":1,\"k\":[{\"t\":0,\"s\":[100],\"h\":1},{\"t\":7.2,\"s\":[100],\"h\":1},{\"t\":7.2,\"s\":[0],\"h\":1},{\"t\":57,\"s\":[0],\"h\":1}]},\"p\":{\"a\":1,\"k\":[{\"t\":0,\"s\":[119,40],\"i\":{\"x\":[0,1],\"y\":[1,1]},\"o\":{\"x\":[0.384,0],\"y\":[0,0]}},{\"t\":48,\"s\":[219,40],\"i\":{\"x\":[1,1],\"y\":[1,1]},\"o\":{\"x\":[0,0],\"y\":[0,0]}},{\"t\":57,\"s\":[219,40],\"h\":1}]},\"s\":{\"a\":1,\"k\":[{\"t\":0,\"s\":[100,100],\"i\":{\"x\":[1,1],\"y\":[1,1]},\"o\":{\"x\":[0,0],\"y\":[0,0]}},{\"t\":5.4,\"s\":[100,100],\"i\":{\"x\":[0,0],\"y\":[1,1]},\"o\":{\"x\":[0.5,0.5],\"y\":[0,0]}},{\"t\":7.2,\"s\":[103,103],\"i\":{\"x\":[1,1],\"y\":[1,1]},\"o\":{\"x\":[0,0],\"y\":[0,0]}},{\"t\":57,\"s\":[103,103],\"h\":1}]}},\"w\":80,\"h\":80,\"ip\":0,\"op\":58,\"st\":0,\"refId\":\"7\"},{\"ind\":14,\"ty\":0,\"parent\":10,\"ks\":{},\"w\":80,\"h\":80,\"ip\":0,\"op\":58,\"st\":0,\"refId\":\"12\"},{\"ind\":10,\"ty\":3,\"parent\":2,\"ks\":{\"p\":{\"a\":1,\"k\":[{\"t\":0,\"s\":[39,0],\"i\":{\"x\":[0,1],\"y\":[1,1]},\"o\":{\"x\":[0.384,0],\"y\":[0,0]}},{\"t\":48,\"s\":[79,0],\"i\":{\"x\":[1,1],\"y\":[1,1]},\"o\":{\"x\":[0,0],\"y\":[0,0]}},{\"t\":57,\"s\":[79,0],\"h\":1}]}},\"ip\":0,\"op\":58,\"st\":0},{\"ind\":19,\"ty\":0,\"parent\":15,\"ks\":{},\"w\":80,\"h\":80,\"ip\":0,\"op\":58,\"st\":0,\"refId\":\"17\"},{\"ind\":15,\"ty\":3,\"parent\":2,\"ks\":{\"p\":{\"a\":1,\"k\":[{\"t\":0,\"s\":[0,0],\"i\":{\"x\":[1,1],\"y\":[1,1]},\"o\":{\"x\":[0,0],\"y\":[0,0]}},{\"t\":7.2,\"s\":[0,0],\"i\":{\"x\":[0,1],\"y\":[1,1]},\"o\":{\"x\":[0.384,0],\"y\":[0,0]}},{\"t\":55.2,\"s\":[39,0],\"i\":{\"x\":[1,1],\"y\":[1,1]},\"o\":{\"x\":[0,0],\"y\":[0,0]}},{\"t\":57,\"s\":[39,0],\"h\":1}]}},\"ip\":0,\"op\":58,\"st\":0},{\"ind\":24,\"ty\":0,\"parent\":20,\"ks\":{},\"w\":80,\"h\":80,\"ip\":0,\"op\":58,\"st\":0,\"refId\":\"22\"},{\"ind\":20,\"ty\":3,\"parent\":2,\"ks\":{\"a\":{\"a\":0,\"k\":[40,40]},\"p\":{\"a\":0,\"k\":[40,40]},\"s\":{\"a\":1,\"k\":[{\"t\":0,\"s\":[70,70],\"i\":{\"x\":[1,1],\"y\":[1,1]},\"o\":{\"x\":[0,0],\"y\":[0,0]}},{\"t\":13.8,\"s\":[70,70],\"i\":{\"x\":[0,0],\"y\":[1,1]},\"o\":{\"x\":[0.5,0.5],\"y\":[0,0]}},{\"t\":37.2,\"s\":[100,100],\"i\":{\"x\":[1,1],\"y\":[1,1]},\"o\":{\"x\":[0,0],\"y\":[0,0]}},{\"t\":57,\"s\":[100,100],\"h\":1}]}},\"ip\":0,\"op\":58,\"st\":0},{\"ind\":2,\"ty\":3,\"parent\":1,\"ks\":{\"p\":{\"a\":0,\"k\":[21,61]}},\"ip\":0,\"op\":58,\"st\":0},{\"ind\":1,\"ty\":3,\"parent\":0,\"ks\":{},\"ip\":0,\"op\":58,\"st\":0},{\"ind\":0,\"ty\":3,\"ks\":{},\"ip\":0,\"op\":58,\"st\":0}],\"meta\":{\"g\":\"https://jitter.video\"},\"op\":57,\"v\":\"5.7.4\",\"w\":200}\n","'use client';\n\nimport { useCallback, useState } from 'react';\nimport { useWallet } from '@solana/wallet-adapter-react';\nimport { useWalletModal } from './wallet-modal-provider';\n\nexport interface Payment {\n id: string;\n amount: number;\n currency: string;\n status: 'pending' | 'completed' | 'failed';\n signature?: string;\n}\n\nexport interface UsePaymentReturn {\n pay: (priceId: string) => Promise<Payment | null>;\n isPending: boolean;\n lastPayment: Payment | null;\n}\n\nexport function usePayment(): UsePaymentReturn {\n const [isPending, setIsPending] = useState(false);\n const [lastPayment, setLastPayment] = useState<Payment | null>(null);\n const { publicKey, connected } = useWallet();\n const { setVisible } = useWalletModal();\n\n const pay = useCallback(async (priceId: string): Promise<Payment | null> => {\n // If not connected, open wallet modal\n if (!connected || !publicKey) {\n setVisible(true);\n return null;\n }\n\n setIsPending(true);\n\n try {\n const event = new CustomEvent('moneymq:pay', {\n detail: { priceId, publicKey: publicKey.toBase58() },\n bubbles: true,\n });\n window.dispatchEvent(event);\n\n const result = await new Promise<Payment>((resolve, reject) => {\n const handleSuccess = (e: Event) => {\n const customEvent = e as CustomEvent<Payment>;\n cleanup();\n resolve(customEvent.detail);\n };\n\n const handleError = (e: Event) => {\n const customEvent = e as CustomEvent<Error>;\n cleanup();\n reject(customEvent.detail);\n };\n\n const cleanup = () => {\n window.removeEventListener('moneymq:payment-success', handleSuccess);\n window.removeEventListener('moneymq:payment-error', handleError);\n };\n\n window.addEventListener('moneymq:payment-success', handleSuccess);\n window.addEventListener('moneymq:payment-error', handleError);\n\n setTimeout(() => {\n cleanup();\n reject(new Error('Payment timeout'));\n }, 60000);\n });\n\n setLastPayment(result);\n return result;\n } catch {\n return null;\n } finally {\n setIsPending(false);\n }\n }, [connected, publicKey, setVisible]);\n\n return { pay, isPending, lastPayment };\n}\n"],"mappings":"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EAAC,GAAI,EAAC,GAAI,GAAE,GAAI,CAAC,IAAG,EAAE,EAAC,GAAE,GAAI,EAAC,GAAI,GAAE,GAAI,CAAC,EAAC,GAAI,GAAE,GAAI,CAAC,GAAG,GAAE,GAAI,EAAC,GAAE,EAAC,GAAI,KAAI,GAAI,CAAC,GAAG,GAAE,GAAI,EAAC,GAAE,EAAC,GAAI,KAAI,GAAI,CAAC,CAAC,GAAE,GAAI,EAAC,GAAE,EAAC,GAAI,IAAG,GAAI,CAAC,CAAC,GAAE,GAAI,EAAC,CAAC,EAAC,GAAE,GAAI,EAAC,GAAI,GAAE,GAAI,CAAC,EAAC,GAAI,GAAE,GAAI,CAAC,KAAI,EAAE,GAAE,GAAI,EAAC,GAAI,CAAC,GAAE,CAAC,GAAE,GAAI,CAAC,GAAE,CAAC,EAAC,GAAE,GAAI,EAAC,GAAI,CAAC,OAAM,CAAC,GAAE,GAAI,CAAC,GAAE,CAAC,EAAC,EAAC,GAAE,EAAC,GAAI,IAAG,GAAI,CAAC,KAAI,EAAE,GAAE,GAAI,EAAC,GAAI,CAAC,GAAE,CAAC,GAAE,GAAI,CAAC,GAAE,CAAC,EAAC,GAAE,GAAI,EAAC,GAAI,CAAC,GAAE,CAAC,GAAE,GAAI,CAAC,GAAE,CAAC,EAAC,EAAC,GAAE,EAAC,GAAI,IAAG,GAAI,CAAC,KAAI,EAAE,GAAE,GAAI,EAAC,CAAC,EAAC,GAAE,GAAI,EAAC,GAAI,GAAE,GAAI,CAAC,EAAC,GAAI,GAAE,GAAI,CAAC,KAAI,GAAG,GAAE,GAAI,EAAC,GAAI,CAAC,GAAE,CAAC,GAAE,GAAI,CAAC,GAAE,CAAC,EAAC,GAAE,GAAI,EAAC,GAAI,CAAC,GAAE,CAAC,GAAE,GAAI,CAAC,GAAE,CAAC,EAAC,EAAC,GAAE,EAAC,GAAI,KAAI,GAAI,CAAC,KAAI,GAAG,GAAE,GAAI,EAAC,GAAI,CAAC,GAAE,CAAC,GAAE,GAAI,CAAC,GAAE,CAAC,EAAC,GAAE,GAAI,EAAC,GAAI,CAAC,KAAI,GAAG,GAAE,GAAI,CAAC,GAAE,CAAC,EAAC,EAAC,GAAE,EAAC,GAAI,KAAI,GAAI,CAAC,KAAI,GAAG,GAAE,GAAI,EAAC,GAAI,CAAC,GAAE,CAAC,GAAE,GAAI,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","names":["createContext","useContext","useEffect","useMemo","useState","useState","useCallback","useMemo","jsx","jsxs","useState","useCallback","useMemo","jsx","createContext","useContext","useState","useEffect","useMemo","React","useEffect","useState","React","useCallback","useState","useEffect","useWallet","Fragment","jsx","jsxs","normalizeRpcUrl","useState","useWallet","useEffect","useCallback","React","Fragment","jsx","jsxs","CheckoutButton","useState","React","useEffect","error","useCallback","useState","useWallet","useState","useWallet","useCallback"]}
|