@algobright/solana-connector-kit 1.0.0

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.
Files changed (35) hide show
  1. package/dist/Avatar.module-P7KEBP7R.module.css +42 -0
  2. package/dist/Button.module-7TPMDOJN.module.css +145 -0
  3. package/dist/Collapsible.module-NXSN3MGI.module.css +24 -0
  4. package/dist/ConnectButton.d.mts +14 -0
  5. package/dist/ConnectButton.d.ts +14 -0
  6. package/dist/ConnectButton.js +1248 -0
  7. package/dist/ConnectButton.js.map +1 -0
  8. package/dist/ConnectButton.mjs +1216 -0
  9. package/dist/ConnectButton.mjs.map +1 -0
  10. package/dist/ConnectButton.module-UWQKSVTP.module.css +8 -0
  11. package/dist/CustomQRCode.module-FOXENMZG.module.css +176 -0
  12. package/dist/Dialog.module-HCRT743N.module.css +136 -0
  13. package/dist/Menu.module-GV627ZLI.module.css +79 -0
  14. package/dist/Spinner.module-G7GUQJZJ.module.css +16 -0
  15. package/dist/WalletDropdown.d.mts +14 -0
  16. package/dist/WalletDropdown.d.ts +14 -0
  17. package/dist/WalletDropdown.js +346 -0
  18. package/dist/WalletDropdown.js.map +1 -0
  19. package/dist/WalletDropdown.mjs +314 -0
  20. package/dist/WalletDropdown.mjs.map +1 -0
  21. package/dist/WalletDropdown.module-342MM7XM.module.css +220 -0
  22. package/dist/WalletModal.d.mts +13 -0
  23. package/dist/WalletModal.d.ts +13 -0
  24. package/dist/WalletModal.js +838 -0
  25. package/dist/WalletModal.js.map +1 -0
  26. package/dist/WalletModal.mjs +806 -0
  27. package/dist/WalletModal.mjs.map +1 -0
  28. package/dist/WalletModal.module-PVV5PRXU.module.css +341 -0
  29. package/dist/index.d.mts +70 -0
  30. package/dist/index.d.ts +70 -0
  31. package/dist/index.js +242 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/index.mjs +222 -0
  34. package/dist/index.mjs.map +1 -0
  35. package/package.json +70 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ConnectButton/index.ts","../src/components/ConnectButton/ConnectButton.tsx","../src/components/shared/Button/Button.tsx","../src/components/shared/Button/index.ts","../src/components/shared/Spinner/Spinner.tsx","../src/components/shared/Spinner/index.ts","../src/components/WalletModal/WalletModal.tsx","../src/components/shared/Dialog/Dialog.tsx","../src/components/shared/CustomQRCode/CustomQRCode.tsx","../src/components/shared/CustomQRCode/index.ts","../src/components/shared/Collapsible/Collapsible.tsx","../src/components/shared/Avatar/Avatar.tsx","../src/components/shared/Avatar/index.ts","../src/components/WalletModal/index.ts","../src/components/shared/Menu/Menu.tsx","../src/components/WalletDropdown/WalletDropdown.tsx","../src/components/WalletDropdown/index.ts"],"sourcesContent":["import ConnectButton from \"./ConnectButton\"\r\nexport default ConnectButton;","\"use client\";\r\n\r\nimport { useState } from 'react';\r\nimport styles from './ConnectButton.module.css';\r\nimport { useConnector } from '@solana/connector';\r\nimport Button from '@shared/Button';\r\nimport Spinner from '@shared/Spinner';\r\nimport WalletModal from '@WalletModal';\r\nimport clsx from 'clsx';\r\nimport { Menu, MenuPopup, MenuPortal, MenuPositioner, MenuTrigger } from '@shared/Menu';\r\nimport Avatar from '@shared/Avatar';\r\nimport { ChevronDown } from 'lucide-react';\r\nimport WalletDropdown from '@WalletDropdown';\r\n\r\ninterface ConnectButtonProps {\r\n theme?: 'light' | 'dark';\r\n\r\n CN_ConnectButton?: string;\r\n CN_DropdownMenu?: string;\r\n CN_Modal?: string;\r\n\r\n connectText?: string;\r\n connectingText?: string;\r\n showSolBalance?: boolean;\r\n}\r\n\r\nexport function ConnectButton(props: ConnectButtonProps) {\r\n const {\r\n CN_DropdownMenu,\r\n theme = 'light',\r\n CN_ConnectButton,\r\n connectText = \"Connect Wallet\",\r\n connectingText = \"Connecting...\",\r\n showSolBalance = false\r\n } = props;\r\n const [isModalOpen, setIsModalOpen] = useState(false);\r\n const { isConnected, isConnecting, account, connector, walletConnectUri, clearWalletConnectUri } = useConnector();\r\n\r\n\r\n if (isConnected && account && connector) {\r\n const shortAddress = `${account.slice(0, 4)}...${account.slice(-4)}`;\r\n const walletIcon = connector.icon || undefined;\r\n\r\n return (\r\n <Menu >\r\n <MenuTrigger render={\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n data-theme={theme}\r\n className={clsx(styles.connectButton, CN_ConnectButton)}\r\n >\r\n <Avatar\r\n height={20}\r\n width={20}\r\n src={walletIcon}\r\n alt={connector.name}\r\n theme={theme}\r\n />\r\n <span >{shortAddress}</span>\r\n <ChevronDown size={16} />\r\n </Button>\r\n } />\r\n <MenuPortal>\r\n <MenuPositioner sideOffset={8} align=\"end\">\r\n <MenuPopup theme={theme}>\r\n <WalletDropdown\r\n CN_ConnectButton={CN_DropdownMenu}\r\n selectedAccount={account}\r\n walletIcon={walletIcon}\r\n walletName={connector.name}\r\n allowNetworkSwitch={true}\r\n theme={theme}\r\n showSolBalance={showSolBalance}\r\n />\r\n </MenuPopup>\r\n </MenuPositioner>\r\n </MenuPortal>\r\n </Menu>\r\n );\r\n }\r\n\r\n const onOpenChange = (open: boolean) => {\r\n setIsModalOpen(open);\r\n if (!open) {\r\n clearWalletConnectUri();\r\n }\r\n };\r\n\r\n return (\r\n <div>\r\n <Button\r\n variant='outline'\r\n size='sm'\r\n data-theme={theme}\r\n onClick={() => setIsModalOpen(true)}\r\n className={clsx(styles.connectButton, CN_ConnectButton)}\r\n >\r\n {isConnecting ? (\r\n <span><Spinner />{connectingText}</span>\r\n ) : (\r\n <span>{connectText}</span>\r\n )}\r\n </Button>\r\n\r\n <WalletModal\r\n theme={theme}\r\n open={isModalOpen}\r\n onOpenChange={onOpenChange}\r\n walletConnectUri={walletConnectUri}\r\n onClearWalletConnectUri={clearWalletConnectUri}\r\n />\r\n\r\n </div>\r\n )\r\n}\r\n\r\nexport default ConnectButton","'use client';\r\n\r\nimport * as React from 'react';\r\nimport { Button as BaseButton } from '@base-ui/react/button';\r\nimport styles from './Button.module.css';\r\n\r\n// 1. Define Types\r\ntype ButtonVariant = 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link';\r\ntype ButtonSize = 'default' | 'sm' | 'lg' | 'icon';\r\n\r\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\r\n variant?: ButtonVariant;\r\n size?: ButtonSize;\r\n}\r\n\r\n// 2. The Component\r\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\r\n ({ className, variant = 'default', size = 'default', ...props }, ref) => {\r\n return (\r\n <BaseButton\r\n ref={ref}\r\n\r\n className={`${styles.button} ${className || ''}`}\r\n data-variant={variant}\r\n data-size={size}\r\n\r\n {...props}\r\n />\r\n );\r\n }\r\n);\r\nButton.displayName = 'Button';\r\n\r\nexport default Button;","import Button from \"./Button\";\r\n\r\nexport default Button;","import classes from './Spinner.module.css'\nconst Spinner = () => {\n return (\n <div className={classes.spinner} />\n )\n}\n\nexport default Spinner","import Spinner from \"./Spinner\";\r\nexport default Spinner;","import { useConnector, WalletConnectorId, WalletConnectorMetadata } from \"@solana/connector\";\r\nimport { Check, ChevronLeft, Copy, ExternalLink, Wallet, X } from \"lucide-react\";\r\nimport { useEffect, useState, useSyncExternalStore } from \"react\";\r\nimport styles from './WalletModal.module.css';\r\nimport { Dialog, DialogClose, DialogContent, DialogTitle } from \"@shared/Dialog\";\r\nimport Button from \"@shared/Button\";\r\nimport CustomQRCode from \"@shared//CustomQRCode\";\r\nimport Spinner from \"@shared/Spinner\";\r\nimport { SiWalletconnect } from \"react-icons/si\";\r\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from \"@shared/Collapsible\";\r\nimport Avatar from \"@shared/Avatar\";\r\nimport { clsx } from \"clsx\";\r\n\r\ntype WalletModalProps = {\r\n CN_Modal?: string;\r\n theme?: 'light' | 'dark';\r\n open: boolean;\r\n onOpenChange: (open: boolean) => void;\r\n walletConnectUri: string | null;\r\n onClearWalletConnectUri: () => void;\r\n}\r\n\r\nexport function WalletModal(props: WalletModalProps) {\r\n const {\r\n CN_Modal,\r\n theme = 'light',\r\n open,\r\n onOpenChange,\r\n walletConnectUri,\r\n onClearWalletConnectUri\r\n } = props;\r\n\r\n const { walletStatus: { status }, isConnecting, connectorId, connectors, connectWallet, disconnectWallet } = useConnector();\r\n\r\n const [connectingConnectorId, setConnectingConnectorId] = useState<WalletConnectorId | null>(null);\r\n const [isOtherWalletsOpen, setIsOtherWalletsOpen] = useState(false);\r\n const [errorConnectorId, setErrorConnectorId] = useState<WalletConnectorId | null>(null);\r\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\r\n const [copied, setCopied] = useState(false);\r\n\r\n const isClient = useSyncExternalStore(\r\n () => () => { },\r\n () => true,\r\n () => false,\r\n );\r\n\r\n const recentlyConnectedConnectorId = useSyncExternalStore(\r\n () => () => { },\r\n () => localStorage.getItem('recentlyConnectedConnectorId') as WalletConnectorId | null,\r\n () => null\r\n );\r\n\r\n useEffect(() => {\r\n if (status === 'connected' && connectorId) {\r\n localStorage.setItem('recentlyConnectedConnectorId', connectorId);\r\n }\r\n }, [status, connectorId]);\r\n\r\n const walletConnectConnector = connectors.find(c => c.name === 'WalletConnect') ?? null;\r\n const isWalletConnectFlow =\r\n (!!walletConnectConnector &&\r\n (connectingConnectorId === walletConnectConnector.id ||\r\n (status === 'connecting' && connectorId === walletConnectConnector.id))) ||\r\n !!walletConnectUri;\r\n\r\n function cancelConnection() {\r\n onClearWalletConnectUri?.();\r\n setConnectingConnectorId(null);\r\n disconnectWallet().catch(() => { });\r\n }\r\n\r\n // Clear error state when modal closes or user tries another wallet\r\n const clearError = () => {\r\n setErrorConnectorId(null);\r\n setErrorMessage(null);\r\n };\r\n\r\n const handleSelectWallet = async (connector: WalletConnectorMetadata) => {\r\n clearError();\r\n setConnectingConnectorId(connector.id);\r\n try {\r\n if (connector.name === 'WalletConnect') {\r\n onClearWalletConnectUri?.();\r\n }\r\n await connectWallet(connector.id);\r\n localStorage.setItem('recentlyConnectedConnectorId', connector.id);\r\n // Don't close modal for WalletConnect - wait for connection\r\n if (connector.name !== 'WalletConnect') {\r\n onOpenChange(false);\r\n }\r\n } catch (error) {\r\n // Extract user-friendly error message\r\n const message = error instanceof Error ? error.message : 'An unexpected error occurred';\r\n if (message.includes('Connection cancelled')) return;\r\n\r\n // Set error state for UI feedback\r\n setErrorConnectorId(connector.id);\r\n setErrorMessage(message);\r\n\r\n // Log for telemetry/debugging (includes full error details)\r\n console.error('Failed to connect wallet:', {\r\n wallet: connector.name,\r\n connectorId: connector.id,\r\n error,\r\n message,\r\n timestamp: new Date().toISOString(),\r\n });\r\n } finally {\r\n setConnectingConnectorId(null);\r\n }\r\n };\r\n\r\n const handleCopyUri = async () => {\r\n if (!walletConnectUri) return;\r\n try {\r\n await navigator.clipboard.writeText(walletConnectUri);\r\n setCopied(true);\r\n setTimeout(() => setCopied(false), 2000);\r\n } catch (err) {\r\n console.error('Failed to copy URI:', err);\r\n }\r\n };\r\n\r\n const handleBackFromWalletConnect = () => {\r\n cancelConnection();\r\n };\r\n\r\n const readyConnectors = connectors.filter(c => c.ready);\r\n const notReadyConnectors = connectors.filter(c => !c.ready);\r\n\r\n const sortedReadyConnectors = [...readyConnectors].sort((a, b) => {\r\n const aIsRecent = recentlyConnectedConnectorId === a.id;\r\n const bIsRecent = recentlyConnectedConnectorId === b.id;\r\n if (aIsRecent && !bIsRecent) return -1;\r\n if (!aIsRecent && bIsRecent) return 1;\r\n return 0;\r\n });\r\n\r\n const primaryWallets = sortedReadyConnectors.slice(0, 3);\r\n const otherWallets = sortedReadyConnectors.slice(3);\r\n\r\n const primayOuterHr = otherWallets.length > 0 && primaryWallets.length > 0;\r\n\r\n const getInstallUrl = (walletName: string, walletUrl?: string): string | undefined => {\r\n if (walletUrl) return walletUrl;\r\n\r\n const name = walletName.toLowerCase();\r\n if (name.includes('phantom')) return 'https://phantom.app';\r\n if (name.includes('solflare')) return 'https://solflare.com';\r\n if (name.includes('backpack')) return 'https://backpack.app';\r\n if (name.includes('glow')) return 'https://glow.app';\r\n if (name.includes('coinbase')) return 'https://www.coinbase.com/wallet';\r\n if (name.includes('ledger')) return 'https://www.ledger.com';\r\n if (name.includes('trust')) return 'https://trustwallet.com';\r\n if (name.includes('exodus')) return 'https://www.exodus.com';\r\n return undefined;\r\n };\r\n\r\n const handleOpenChange = (isOpen: boolean) => {\r\n if (!isOpen) {\r\n clearError();\r\n if (isConnecting || connectingConnectorId || walletConnectUri) {\r\n cancelConnection();\r\n }\r\n }\r\n onOpenChange(isOpen);\r\n };\r\n\r\n const walletLinkOpen = (walletName: string) => {\r\n const installUrl = getInstallUrl(walletName);\r\n if (installUrl) {\r\n window.open(installUrl, '_blank');\r\n }\r\n }\r\n\r\n return (\r\n <Dialog open={open} onOpenChange={handleOpenChange} >\r\n <DialogContent\r\n showCloseButton={false}\r\n className={clsx(styles.dialogContent, CN_Modal)}\r\n theme={theme}\r\n >\r\n {/* Header */}\r\n <div className={styles.dialogHeader}>\r\n {isWalletConnectFlow ? (\r\n <button\r\n onClick={handleBackFromWalletConnect}\r\n className={styles.iconButton}\r\n >\r\n <ChevronLeft />\r\n </button>\r\n ) : null}\r\n <DialogTitle className={styles.dialogTitle}>\r\n {isWalletConnectFlow ? 'WalletConnect' : 'Connect your wallet'}\r\n </DialogTitle>\r\n <DialogClose className={styles.iconButton}>\r\n <X />\r\n </DialogClose>\r\n </div>\r\n\r\n {/* WalletConnect QR Code Display */}\r\n {isWalletConnectFlow && (\r\n <div className={styles.walletsContainer}>\r\n <div className={styles.tooltipBubble}>\r\n <span>Use a WalletConnect</span>\r\n <div className={styles.tooltipIconWrapper}>\r\n <SiWalletconnect className={styles.tooltipIcon} />\r\n <div className={styles.tooltipCaret} />\r\n </div>\r\n <span>supported wallet to scan</span>\r\n </div>\r\n\r\n {/* QR Code */}\r\n <div className={styles.qrWrapper}>\r\n <CustomQRCode\r\n value={walletConnectUri ?? ''}\r\n size={280}\r\n ecl=\"M\"\r\n loading={!walletConnectUri}\r\n scanning={!!walletConnectUri}\r\n />\r\n </div>\r\n\r\n {/* Copy URI button */}\r\n <Button\r\n variant=\"outline\"\r\n onClick={handleCopyUri}\r\n disabled={!walletConnectUri}\r\n className={styles.copyButton}\r\n data-theme={theme}\r\n >\r\n {copied ? (\r\n <>\r\n <Check className={`${styles.icon} ${styles.successIcon}`} />\r\n Copy to Clipboard\r\n </>\r\n ) : (\r\n <>\r\n <Copy className={styles.icon} />\r\n Copy to Clipboard\r\n </>\r\n )}\r\n </Button>\r\n\r\n </div>\r\n )}\r\n\r\n {!isWalletConnectFlow && (\r\n <div className={styles.walletsContainer}>\r\n {/* 1. Loading State (Detecting Wallets) */}\r\n {!isClient && (\r\n <div className={styles.detectingWallets}>\r\n <Spinner />\r\n <p >Detecting wallets...</p>\r\n </div>\r\n )}\r\n\r\n {/* 2. Empty State (No Wallets Detected) */}\r\n {connectors.length === 0 && (\r\n <div className={styles.emptyStateContainer}>\r\n <Wallet className={styles.emptyStateIcon} />\r\n\r\n <h3 className={styles.emptyStateTitle}>No Wallets Detected</h3>\r\n\r\n <p className={styles.emptyStateDesc}>\r\n Install a Solana wallet extension to get started\r\n </p>\r\n\r\n <div className={styles.emptyStateActions}>\r\n <Button\r\n variant=\"outline\"\r\n data-theme={theme}\r\n onClick={() => walletLinkOpen('Phantom')}\r\n >\r\n Get Phantom\r\n </Button>\r\n <Button\r\n data-theme={theme}\r\n variant=\"outline\"\r\n onClick={() => walletLinkOpen('Backpack')}\r\n >\r\n Get Backpack\r\n </Button>\r\n </div>\r\n\r\n\r\n </div>\r\n )}\r\n\r\n <div className={styles.allWallets}>\r\n {primaryWallets.map((connector) => (\r\n <WalletButton\r\n key={connector.id}\r\n theme={theme}\r\n connector={connector}\r\n isThisConnecting={isConnecting && connectingConnectorId === connector.id}\r\n hasError={errorConnectorId === connector.id}\r\n isRecent={recentlyConnectedConnectorId === connector.id}\r\n\r\n onSelect={() => handleSelectWallet(connector)}\r\n getInstallUrl={getInstallUrl}\r\n />\r\n ))}\r\n </div>\r\n\r\n {otherWallets.length > 0 && (\r\n <>\r\n {primayOuterHr && <div className={styles.seprator} />}\r\n <Collapsible\r\n open={isOtherWalletsOpen}\r\n onOpenChange={setIsOtherWalletsOpen}\r\n className={styles.Collapsible}\r\n >\r\n <CollapsibleTrigger className={styles.hiddenExpand}>\r\n <span className={styles.textContainer}>Other Wallets</span>\r\n <HiddenWalletIcons wallets={otherWallets} className=\"shrink-0\" />\r\n </CollapsibleTrigger>\r\n <CollapsibleContent className={styles.allWallets}>\r\n {otherWallets.map((connector) => (\r\n <WalletButton\r\n key={connector.id}\r\n theme={theme}\r\n connector={connector}\r\n isThisConnecting={isConnecting && connectingConnectorId === connector.id}\r\n hasError={errorConnectorId === connector.id}\r\n isRecent={recentlyConnectedConnectorId === connector.id}\r\n onSelect={() => handleSelectWallet(connector)}\r\n getInstallUrl={getInstallUrl}\r\n />\r\n ))}\r\n </CollapsibleContent>\r\n </Collapsible>\r\n </>\r\n )}\r\n\r\n {notReadyConnectors.length > 0 && (\r\n <>\r\n {(primaryWallets.length > 0 || otherWallets.length > 0) && (\r\n <div className={styles.seprator} />\r\n )}\r\n\r\n <div className=\"space-y-2\">\r\n <h3 className={styles.sectionHeader}>\r\n {readyConnectors.length > 0 ? 'Unavailable Wallets' : 'Wallets'}\r\n </h3>\r\n\r\n <div className={styles.grid}>\r\n {notReadyConnectors.slice(0, 3).map((connector) => {\r\n const installUrl = getInstallUrl(connector.name);\r\n\r\n return (\r\n <div key={connector.id} className={styles.unavailableRow}>\r\n {/* Left: Icon & Text */}\r\n <div className={styles.walletInfo}>\r\n <Avatar\r\n width={40}\r\n height={40}\r\n src={connector.icon}\r\n alt={connector.name}\r\n theme={theme}\r\n />\r\n <div className=\"text-left\">\r\n <div className={styles.walletName}>\r\n {connector.name}\r\n </div>\r\n <div className={styles.unavailableLabel}>\r\n Not available\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Right: Install Button */}\r\n {installUrl && (\r\n <Button\r\n data-theme={theme}\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n className={styles.installButton}\r\n onClick={() => window.open(installUrl, '_blank')}\r\n >\r\n <ExternalLink />\r\n </Button>\r\n )}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n </>\r\n )}\r\n\r\n\r\n </div>\r\n )}\r\n\r\n </DialogContent>\r\n </Dialog >\r\n )\r\n\r\n}\r\n\r\nexport default WalletModal\r\n\r\n\r\ninterface WalletItemProps {\r\n connector: WalletConnectorMetadata;\r\n isThisConnecting: boolean;\r\n\r\n hasError?: boolean;\r\n isRecent?: boolean;\r\n theme?: 'light' | 'dark';\r\n onSelect: () => void;\r\n getInstallUrl: (walletName: string, walletUrl?: string) => string | undefined;\r\n}\r\nfunction WalletButton(props: WalletItemProps) {\r\n const { connector, isThisConnecting, hasError, isRecent, theme, onSelect, getInstallUrl } = props;\r\n\r\n const handleSelectWallet = () => {\r\n onSelect();\r\n }\r\n return (\r\n <Button\r\n key={connector.id}\r\n variant=\"outline\"\r\n data-error={hasError}\r\n data-theme={theme}\r\n className={styles.walletButton}\r\n onClick={handleSelectWallet}\r\n disabled={isThisConnecting}\r\n\r\n >\r\n {/* Left Side: Text Info */}\r\n <div className={styles.textContainer}>\r\n <div className={styles.nameRow}>\r\n <span>{connector.name}</span>\r\n {isRecent && <span className={styles.recentBadge}>Recent</span>}\r\n </div>\r\n\r\n {/* Status Text */}\r\n {isThisConnecting && (\r\n <div className={styles.statusText}>Connecting...</div>\r\n )}\r\n {hasError && !isThisConnecting && (\r\n <div className={styles.statusText} data-type=\"error\">\r\n Click to retry\r\n </div>\r\n )}\r\n </div>\r\n\r\n <div className={styles.iconContainer}>\r\n {isThisConnecting && <Spinner />}\r\n <Avatar\r\n width={40}\r\n height={40}\r\n src={connector.icon}\r\n alt={connector.name}\r\n theme={theme}\r\n />\r\n </div>\r\n\r\n </Button>\r\n )\r\n}\r\n\r\ninterface WalletIconSource {\r\n id: string;\r\n name: string;\r\n icon?: string | null;\r\n}\r\ninterface HiddenWalletIconsProps {\r\n wallets: WalletIconSource[];\r\n maxIcons?: number;\r\n className?: string;\r\n}\r\nexport function HiddenWalletIcons({ wallets, maxIcons = 4, className }: HiddenWalletIconsProps) {\r\n const previewWallets = wallets.slice(0, maxIcons);\r\n const placeholderCount = Math.max(0, maxIcons - previewWallets.length);\r\n\r\n return (\r\n <div\r\n className={`${styles.hiddenWalletGrid} ${className || ''}`}\r\n aria-hidden=\"true\"\r\n >\r\n {/* Render Actual Wallets */}\r\n {previewWallets.map(wallet => (\r\n <div\r\n key={wallet.id}\r\n className={styles.hiddenWalletIconWrapper}\r\n >\r\n {wallet.icon && (\r\n <img\r\n height={10}\r\n width={10}\r\n src={wallet.icon}\r\n alt={wallet.name}\r\n draggable={false}\r\n onError={(e: any) => {\r\n e.currentTarget.style.display = 'none';\r\n }}\r\n />\r\n )}\r\n </div>\r\n ))}\r\n\r\n {Array.from({ length: placeholderCount }).map((_, index) => (\r\n <div\r\n key={`placeholder-${index}`}\r\n className={styles.hiddenWalletIconWrapper}\r\n />\r\n ))}\r\n </div>\r\n );\r\n}","'use client';\r\n\r\nimport * as React from 'react';\r\nimport { Dialog as BaseDialog } from '@base-ui/react/dialog';\r\nimport { X } from 'lucide-react';\r\nimport styles from './Dialog.module.css';\r\nimport clsx from 'clsx';\r\n\r\n// 1. Root Components\r\nconst Dialog = BaseDialog.Root;\r\nconst DialogTrigger = BaseDialog.Trigger;\r\nconst DialogPortal = BaseDialog.Portal;\r\nconst DialogClose = BaseDialog.Close;\r\n\r\n// 2. Backdrop\r\ntype DialogBackdropProps = React.ComponentPropsWithoutRef<typeof BaseDialog.Backdrop>;\r\nconst DialogBackdrop = React.forwardRef<HTMLDivElement, DialogBackdropProps>(\r\n ({ className, ...props }, ref) => (\r\n <BaseDialog.Backdrop\r\n ref={ref}\r\n className={`${styles.backdrop} ${className || ''}`}\r\n {...props}\r\n />\r\n ),\r\n);\r\nDialogBackdrop.displayName = 'DialogBackdrop';\r\n\r\n// 3. Content (The Modal Box)\r\ntype DialogContentProps = React.ComponentPropsWithoutRef<typeof BaseDialog.Popup> & {\r\n showCloseButton?: boolean;\r\n theme?: 'light' | 'dark';\r\n};\r\nconst DialogContent = React.forwardRef<HTMLDivElement, DialogContentProps>(\r\n ({ className, children, theme, showCloseButton = true, ...props }, ref) => (\r\n <DialogPortal>\r\n <DialogBackdrop data-theme={theme} />\r\n <BaseDialog.Popup\r\n ref={ref}\r\n data-theme={theme}\r\n className={clsx(styles.content, className)}\r\n {...props}\r\n >\r\n {children}\r\n {showCloseButton && (\r\n <DialogClose className={styles.closeButton}>\r\n <X />\r\n </DialogClose>\r\n )}\r\n </BaseDialog.Popup>\r\n </DialogPortal>\r\n )\r\n);\r\nDialogContent.displayName = 'DialogContent';\r\n\r\n// 4. Header\r\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\r\n <div className={`${styles.header} ${className || ''}`} {...props} />\r\n);\r\nDialogHeader.displayName = 'DialogHeader';\r\n\r\n// 5. Footer\r\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\r\n <div className={`${styles.footer} ${className || ''}`} {...props} />\r\n);\r\nDialogFooter.displayName = 'DialogFooter';\r\n\r\n// 6. Title\r\nconst DialogTitle = React.forwardRef<HTMLHeadingElement, React.ComponentPropsWithoutRef<typeof BaseDialog.Title>>(\r\n ({ className, ...props }, ref) => (\r\n <BaseDialog.Title\r\n ref={ref}\r\n className={`${styles.title} ${className || ''}`}\r\n {...props}\r\n />\r\n ),\r\n);\r\nDialogTitle.displayName = 'DialogTitle';\r\n\r\n// 7. Description\r\nconst DialogDescription = React.forwardRef<\r\n HTMLParagraphElement,\r\n React.ComponentPropsWithoutRef<typeof BaseDialog.Description>\r\n>(({ className, ...props }, ref) => (\r\n <BaseDialog.Description\r\n ref={ref}\r\n className={`${styles.description} ${className || ''}`}\r\n {...props}\r\n />\r\n));\r\nDialogDescription.displayName = 'DialogDescription';\r\n\r\nexport {\r\n Dialog,\r\n DialogPortal,\r\n DialogBackdrop,\r\n DialogClose,\r\n DialogTrigger,\r\n DialogContent,\r\n DialogHeader,\r\n DialogFooter,\r\n DialogTitle,\r\n DialogDescription,\r\n};","'use client';\r\n\r\nimport { useMemo, type ReactNode, type CSSProperties } from 'react';\r\nimport QRCodeUtil from 'qrcode';\r\nimport styles from './CustomQRCode.module.css';\r\n\r\n/**\r\n * Generate QR code matrix from value\r\n */\r\nfunction generateMatrix(value: string, errorCorrectionLevel: 'L' | 'M' | 'Q' | 'H') {\r\n const arr = Array.prototype.slice.call(QRCodeUtil.create(value, { errorCorrectionLevel }).modules.data, 0);\r\n const sqrt = Math.sqrt(arr.length);\r\n return arr.reduce(\r\n (rows: number[][], key: number, index: number) =>\r\n (index % sqrt === 0 ? rows.push([key]) : rows[rows.length - 1].push(key)) && rows,\r\n [] as number[][],\r\n );\r\n}\r\n\r\ninterface CustomQRCodeProps {\r\n value: string;\r\n size?: number;\r\n ecl?: 'L' | 'M' | 'Q' | 'H';\r\n clearArea?: boolean;\r\n image?: ReactNode;\r\n imageBackground?: string;\r\n dotColor?: string;\r\n backgroundColor?: string;\r\n}\r\n\r\n/**\r\n * QR Code SVG renderer\r\n */\r\nfunction QRCodeSVG({\r\n value,\r\n size: sizeProp = 200,\r\n ecl = 'M',\r\n clearArea = false,\r\n dotColor = 'currentColor',\r\n backgroundColor = '#ffffff',\r\n}: CustomQRCodeProps) {\r\n const logoSize = clearArea ? 76 : 0;\r\n const size = sizeProp - 10 * 2; // Account for padding\r\n\r\n const dots = useMemo(() => {\r\n const dots: ReactNode[] = [];\r\n const matrix = generateMatrix(value, ecl);\r\n const cellSize = size / matrix.length;\r\n\r\n // Finder pattern positions (3 corners)\r\n const qrList = [\r\n { x: 0, y: 0 },\r\n { x: 1, y: 0 },\r\n { x: 0, y: 1 },\r\n ];\r\n\r\n // Draw rounded finder patterns\r\n qrList.forEach(({ x, y }) => {\r\n const x1 = (matrix.length - 7) * cellSize * x;\r\n const y1 = (matrix.length - 7) * cellSize * y;\r\n for (let i = 0; i < 3; i++) {\r\n dots.push(\r\n <rect\r\n key={`finder-${i}-${x}-${y}`}\r\n fill={i % 2 !== 0 ? backgroundColor : dotColor}\r\n rx={(i - 2) * -5 + (i === 0 ? 2 : 3)}\r\n ry={(i - 2) * -5 + (i === 0 ? 2 : 3)}\r\n width={cellSize * (7 - i * 2)}\r\n height={cellSize * (7 - i * 2)}\r\n x={x1 + cellSize * i}\r\n y={y1 + cellSize * i}\r\n />,\r\n );\r\n }\r\n });\r\n\r\n // Calculate center clear area\r\n const clearArenaSize = Math.floor((logoSize + 25) / cellSize);\r\n const matrixMiddleStart = matrix.length / 2 - clearArenaSize / 2;\r\n const matrixMiddleEnd = matrix.length / 2 + clearArenaSize / 2 - 1;\r\n\r\n // Draw circular dots for data modules\r\n matrix.forEach((row: number[], i: number) => {\r\n row.forEach((_: number, j: number) => {\r\n if (matrix[i][j]) {\r\n // Skip dots under finder patterns\r\n if (!((i < 7 && j < 7) || (i > matrix.length - 8 && j < 7) || (i < 7 && j > matrix.length - 8))) {\r\n // Skip center area if clearArea is true\r\n if (\r\n !clearArea ||\r\n !(\r\n i > matrixMiddleStart &&\r\n i < matrixMiddleEnd &&\r\n j > matrixMiddleStart &&\r\n j < matrixMiddleEnd\r\n )\r\n ) {\r\n dots.push(\r\n <circle\r\n key={`dot-${i}-${j}`}\r\n cx={j * cellSize + cellSize / 2}\r\n cy={i * cellSize + cellSize / 2}\r\n fill={dotColor}\r\n r={cellSize / 3}\r\n />,\r\n );\r\n }\r\n }\r\n }\r\n });\r\n });\r\n\r\n return dots;\r\n }, [value, ecl, size, clearArea, logoSize, dotColor, backgroundColor]);\r\n\r\n return (\r\n <svg\r\n height={size}\r\n width={size}\r\n viewBox={`0 0 ${size} ${size}`}\r\n className={styles.svgFull}\r\n style={{ maxWidth: size, maxHeight: size }}\r\n >\r\n <rect fill=\"transparent\" height={size} width={size} />\r\n {dots}\r\n </svg>\r\n );\r\n}\r\n\r\n/**\r\n * Viewfinder corner brackets SVG\r\n */\r\nfunction ViewfinderFrame({\r\n size,\r\n color = '#2D2D2D',\r\n opacity = 0.01,\r\n}: {\r\n size: number;\r\n color?: string;\r\n opacity?: number;\r\n}) {\r\n return (\r\n <svg\r\n width={size}\r\n height={size}\r\n viewBox=\"0 0 283 283\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n className={styles.viewfinder}\r\n >\r\n <path\r\n d=\"M3.5 264.06C3.5 272.587 10.4127 279.5 18.9399 279.5H32.8799C33.7083 279.5 34.3799 280.172 34.3799 281V281C34.3799 281.828 33.7083 282.5 32.8799 282.5H17.4399C8.08427 282.5 0.5 274.916 0.5 265.56V250.12C0.5 249.292 1.17157 248.62 2 248.62V248.62C2.82843 248.62 3.5 249.292 3.5 250.12V264.06ZM282.5 266.058C282.5 275.139 275.139 282.5 266.058 282.5H251.116C250.288 282.5 249.616 281.828 249.616 281V281C249.616 280.172 250.288 279.5 251.116 279.5H264.558C272.81 279.5 279.5 272.81 279.5 264.558V250.12C279.5 249.292 280.172 248.62 281 248.62V248.62C281.828 248.62 282.5 249.292 282.5 250.12V266.058ZM34.3799 2C34.3799 2.82843 33.7083 3.5 32.8799 3.5H18.9399C10.4127 3.5 3.5 10.4127 3.5 18.9399V32.8799C3.5 33.7083 2.82843 34.3799 2 34.3799V34.3799C1.17157 34.3799 0.5 33.7083 0.5 32.8799V17.4399C0.5 8.08427 8.08427 0.5 17.4399 0.5H32.8799C33.7083 0.5 34.3799 1.17157 34.3799 2V2ZM282.5 32.8799C282.5 33.7083 281.828 34.3799 281 34.3799V34.3799C280.172 34.3799 279.5 33.7083 279.5 32.8799V18.4419C279.5 10.1897 272.81 3.5 264.558 3.5H251.116C250.288 3.5 249.616 2.82843 249.616 2V2C249.616 1.17157 250.288 0.5 251.116 0.5H266.058C275.139 0.5 282.5 7.86129 282.5 16.9419V32.8799Z\"\r\n fill={color}\r\n fillOpacity={opacity}\r\n />\r\n </svg>\r\n );\r\n}\r\n\r\ninterface CustomQRCodeContainerProps extends CustomQRCodeProps {\r\n image?: ReactNode;\r\n imageBackground?: string;\r\n className?: string;\r\n style?: CSSProperties;\r\n loading?: boolean;\r\n scanning?: boolean;\r\n error?: boolean;\r\n frameColor?: string;\r\n}\r\n\r\nexport function CustomQRCode({\r\n value,\r\n size = 280,\r\n ecl = 'M',\r\n clearArea = false,\r\n image,\r\n imageBackground = 'transparent',\r\n dotColor,\r\n backgroundColor,\r\n className,\r\n style,\r\n loading = false,\r\n scanning = true,\r\n error = false,\r\n frameColor,\r\n}: CustomQRCodeContainerProps) {\r\n const showPlaceholder = loading || !value;\r\n\r\n const resolvedBackground = backgroundColor || '#ffffff';\r\n const resolvedDotColor = dotColor || '#000000';\r\n const resolvedFrameColor = error ? '#FF0000' : frameColor || '#2D2D2D';\r\n const frameOpacity = error ? 0.56 : 0.01;\r\n\r\n return (\r\n <div\r\n className={`${styles.container} ${className || ''}`}\r\n style={{\r\n width: size,\r\n height: size,\r\n ...style,\r\n }}\r\n >\r\n {/* Viewfinder corner brackets */}\r\n <ViewfinderFrame size={size} color={resolvedFrameColor} opacity={frameOpacity} />\r\n\r\n {/* QR Content Area */}\r\n <div\r\n className={styles.contentArea}\r\n style={{ background: resolvedBackground }}\r\n data-error={error}\r\n >\r\n {/* Gradient glow background */}\r\n <div className={styles.glow} data-error={error} />\r\n\r\n {/* Shine scanning effect */}\r\n {scanning && !showPlaceholder && !error && (\r\n <div className={styles.shine} />\r\n )}\r\n\r\n {/* QR Code or placeholder */}\r\n <div className={styles.qrWrapper}>\r\n {showPlaceholder ? (\r\n <QRPlaceholder size={size} dotColor={resolvedDotColor} backgroundColor={resolvedBackground} />\r\n ) : (\r\n <>\r\n <QRCodeSVG\r\n value={value}\r\n size={size - 40}\r\n ecl={ecl}\r\n clearArea={clearArea || !!image}\r\n dotColor={resolvedDotColor}\r\n backgroundColor={resolvedBackground}\r\n />\r\n {image && (\r\n <div\r\n className={styles.logoWrapper}\r\n style={{\r\n width: '28%',\r\n height: '28%',\r\n background: imageBackground || resolvedBackground,\r\n }}\r\n >\r\n {image}\r\n </div>\r\n )}\r\n </>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nfunction QRPlaceholder({\r\n size,\r\n dotColor,\r\n backgroundColor,\r\n}: {\r\n size: number;\r\n dotColor: string;\r\n backgroundColor: string;\r\n}) {\r\n return (\r\n <div className={styles.placeholderContainer} style={{ width: size - 40, height: size - 40 }}>\r\n {/* Dot pattern background */}\r\n <div\r\n className={styles.placeholderPattern}\r\n style={{\r\n backgroundImage: `radial-gradient(${dotColor} 41%, transparent 41%)`,\r\n }}\r\n />\r\n\r\n {/* Corner finder pattern placeholders */}\r\n {[\r\n { top: 0, left: 0 },\r\n { top: 0, right: 0 },\r\n { bottom: 0, left: 0 },\r\n ].map((pos, i) => (\r\n <span\r\n key={i}\r\n className={styles.cornerSquare}\r\n style={{\r\n ...pos,\r\n background: dotColor,\r\n }}\r\n />\r\n ))}\r\n\r\n {/* Center area */}\r\n <div\r\n className={styles.centerArea}\r\n style={{\r\n background: backgroundColor,\r\n boxShadow: `0 0 0 7px ${backgroundColor}`,\r\n }}\r\n />\r\n\r\n {/* Loading spinner */}\r\n <div className={styles.loaderWrapper}>\r\n <div\r\n className={styles.spinner}\r\n style={{ color: `${dotColor}40` }}\r\n />\r\n <span className={styles.loadingText} style={{ color: `${dotColor}70` }}>\r\n Generating QR code...\r\n </span>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nCustomQRCode.displayName = 'CustomQRCode';","import { CustomQRCode } from \"./CustomQRCode\";\r\n\r\nexport default CustomQRCode;","'use client';\r\n\r\nimport * as React from 'react';\r\nimport { Collapsible as BaseCollapsible } from '@base-ui/react/collapsible';\r\nimport styles from './Collapsible.module.css';\r\n\r\nconst Collapsible = BaseCollapsible.Root;\r\nconst CollapsibleTrigger = React.forwardRef<\r\n HTMLButtonElement,\r\n React.ComponentPropsWithoutRef<typeof BaseCollapsible.Trigger>\r\n>(({ className, ...props }, ref) => (\r\n <BaseCollapsible.Trigger\r\n ref={ref}\r\n className={`${styles.trigger} ${className || ''}`}\r\n {...props}\r\n />\r\n));\r\nCollapsibleTrigger.displayName = 'CollapsibleTrigger';\r\n\r\nconst CollapsibleContent = React.forwardRef<\r\n HTMLDivElement,\r\n React.ComponentPropsWithoutRef<typeof BaseCollapsible.Panel>\r\n>(({ className, ...props }, ref) => (\r\n <BaseCollapsible.Panel\r\n ref={ref}\r\n className={`${styles.content} ${className || ''}`}\r\n {...props}\r\n />\r\n));\r\nCollapsibleContent.displayName = 'CollapsibleContent';\r\n\r\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent };","import { useState } from 'react';\r\nimport styles from './Avatar.module.css';\r\nimport { Wallet } from 'lucide-react';\r\ninterface AvatarProps {\r\n height?: number | string;\r\n width?: number | string;\r\n src?: string;\r\n alt?: string;\r\n theme?: 'light' | 'dark';\r\n}\r\nexport function Avatar({\r\n height,\r\n width,\r\n src,\r\n alt,\r\n theme = 'light',\r\n}: AvatarProps) {\r\n const [hasError, setHasError] = useState(false);\r\n return (\r\n <div className={styles.avatar} data-theme={theme}>\r\n {src && !hasError ? (\r\n <img\r\n height={height}\r\n width={width}\r\n src={src}\r\n alt={alt || \"Avatar\"}\r\n onError={() => setHasError(true)}\r\n />\r\n ) : (\r\n <div className={styles.fallback} style={{ height, width }}>\r\n <Wallet />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}\r\n","import { Avatar } from './Avatar';\r\n\r\nexport default Avatar;","import WalletModal from \"./WalletModal\"\r\nexport default WalletModal;","'use client';\r\n\r\nimport * as React from 'react';\r\nimport { Menu as BaseMenu } from '@base-ui/react/menu';\r\nimport styles from './Menu.module.css';\r\n\r\n\r\nconst Menu = BaseMenu.Root;\r\nconst MenuPortal = BaseMenu.Portal;\r\nconst MenuGroup = BaseMenu.Group;\r\n\r\n// Trigger \r\ntype MenuTriggerProps = React.ComponentPropsWithoutRef<typeof BaseMenu.Trigger> & {\r\n render: React.ReactElement;\r\n};\r\nconst MenuTrigger = React.forwardRef<HTMLButtonElement, MenuTriggerProps>(\r\n ({ className, ...props }, ref) => (\r\n <BaseMenu.Trigger\r\n ref={ref}\r\n className={`${className || ''}`}\r\n {...props}\r\n />\r\n )\r\n);\r\nMenuTrigger.displayName = 'MenuTrigger';\r\n\r\n// Position of the Popup\r\ntype MenuPositionerProps = React.ComponentPropsWithoutRef<typeof BaseMenu.Positioner>;\r\nconst MenuPositioner = React.forwardRef<HTMLDivElement, MenuPositionerProps>(\r\n ({ sideOffset = 8, ...props }, ref) => (\r\n <BaseMenu.Positioner ref={ref} sideOffset={sideOffset} {...props} />\r\n )\r\n);\r\nMenuPositioner.displayName = 'MenuPositioner';\r\n\r\n// Popup\r\ntype MenuPopupProps = React.ComponentPropsWithoutRef<typeof BaseMenu.Popup> & {\r\n theme?: 'light' | 'dark';\r\n};\r\nconst MenuPopup = React.forwardRef<HTMLDivElement, MenuPopupProps>(\r\n ({ className, theme, ...props }, ref) => (\r\n <BaseMenu.Popup\r\n ref={ref}\r\n data-theme={theme}\r\n className={`${styles.popup} ${className || ''}`}\r\n {...props}\r\n />\r\n )\r\n);\r\nMenuPopup.displayName = 'MenuPopup';\r\n\r\n// Item\r\ntype MenuItemProps = React.ComponentPropsWithoutRef<typeof BaseMenu.Item>;\r\nconst MenuItem = React.forwardRef<HTMLDivElement, MenuItemProps>(\r\n ({ className, ...props }, ref) => (\r\n <BaseMenu.Item\r\n ref={ref}\r\n className={`${styles.item} ${className || ''}`}\r\n {...props}\r\n />\r\n )\r\n);\r\nMenuItem.displayName = 'MenuItem';\r\n\r\n// Separator\r\ntype MenuSeparatorProps = React.ComponentPropsWithoutRef<typeof BaseMenu.Separator>;\r\nconst MenuSeparator = React.forwardRef<HTMLDivElement, MenuSeparatorProps>(\r\n ({ className, ...props }, ref) => (\r\n <BaseMenu.Separator ref={ref} className={`${styles.separator} ${className || ''}`} {...props} />\r\n )\r\n);\r\nMenuSeparator.displayName = 'MenuSeparator';\r\n\r\n// Group Label\r\ntype MenuGroupLabelProps = React.ComponentPropsWithoutRef<typeof BaseMenu.GroupLabel>;\r\nconst MenuGroupLabel = React.forwardRef<HTMLDivElement, MenuGroupLabelProps>(\r\n ({ className, ...props }, ref) => (\r\n <BaseMenu.GroupLabel ref={ref} className={`${styles.groupLabel} ${className || ''}`} {...props} />\r\n )\r\n);\r\nMenuGroupLabel.displayName = 'MenuGroupLabel';\r\n\r\nexport { Menu, MenuTrigger, MenuPortal, MenuPositioner, MenuPopup, MenuItem, MenuSeparator, MenuGroup, MenuGroupLabel };","import { useEffect, useRef, useState } from 'react'\r\nimport styles from './WalletDropdown.module.css'\r\nimport { motion } from 'motion/react';\r\nimport Avatar from '@shared/Avatar';\r\nimport { Check, ChevronLeft, Copy, Globe, LogOut, RefreshCw } from 'lucide-react';\r\nimport Button from '@shared/Button';\r\nimport { address, BalanceElement, ClusterElement, DisconnectElement, lamportsToSol, useCluster, useConnectorClient } from '@solana/connector';\r\nimport { createSolanaRpc } from '@solana/kit';\r\nimport { clsx } from 'clsx';\r\n\r\ninterface WalletDropdownProps {\r\n CN_ConnectButton?: string;\r\n selectedAccount: string;\r\n walletIcon?: string;\r\n walletName: string;\r\n theme?: 'light' | 'dark';\r\n\r\n allowNetworkSwitch?: boolean;\r\n showSolBalance?: boolean;\r\n}\r\n\r\ntype DropdownView = 'wallet' | 'network';\r\n\r\nconst networkColor: Record<string, string> = {\r\n 'solana:mainnet': '#00c950',\r\n 'solana:devnet': '#2b7fff',\r\n 'solana:testnet': '#f0b100',\r\n 'solana:localnet': '#ff3b3b',\r\n};\r\n\r\nexport function WalletDropdown(props: WalletDropdownProps) {\r\n const client = useConnectorClient();\r\n\r\n const { CN_ConnectButton, selectedAccount, walletIcon, walletName, theme, allowNetworkSwitch, showSolBalance } = props\r\n\r\n const [view, setView] = useState<DropdownView>('wallet');\r\n const [copied, setCopied] = useState(false);\r\n\r\n const fetching = useRef(false);\r\n const [isFetchingBalance, setIsFetchingBalance] = useState(false);\r\n const [solBalance, setSolBalance] = useState<number | null>(null);\r\n\r\n const shortAddress = `${selectedAccount.slice(0, 4)}...${selectedAccount.slice(-4)}`;\r\n\r\n async function handleCopy() {\r\n try {\r\n await navigator.clipboard.writeText(selectedAccount);\r\n setCopied(true);\r\n setTimeout(() => setCopied(false), 2000);\r\n } catch (error) {\r\n setCopied(false);\r\n console.error('Failed to copy to clipboard:', error);\r\n }\r\n }\r\n\r\n async function fetchSolBalance() {\r\n if (!client || fetching.current) return;\r\n setIsFetchingBalance(true);\r\n fetching.current = true;\r\n try {\r\n const rpcUrl = client.getRpcUrl();\r\n const pubkey = address(selectedAccount);\r\n if (!rpcUrl) throw new Error('No RPC endpoint configured');\r\n const rpc = createSolanaRpc(rpcUrl);\r\n const solLamports = (await rpc.getBalance(pubkey).send()).value || 0;\r\n const sol = lamportsToSol(solLamports);\r\n setSolBalance(sol);\r\n\r\n } catch (error) {\r\n setSolBalance(0);\r\n } finally {\r\n setIsFetchingBalance(false);\r\n fetching.current = false;\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (showSolBalance && selectedAccount && client) {\r\n fetchSolBalance();\r\n }\r\n }, [selectedAccount, client, showSolBalance]);\r\n\r\n if (view === 'wallet') {\r\n return (\r\n <motion.div\r\n initial={{ opacity: 0 }}\r\n animate={{ opacity: 1 }}\r\n exit={{ opacity: 0 }}\r\n transition={{ duration: 0.2 }}\r\n className={clsx(styles.WalletDropdown, CN_ConnectButton)}\r\n data-theme={theme}\r\n >\r\n {/* Header with Avatar and Address */}\r\n <div className={styles.Header}>\r\n <div className={styles.addressAndAvatar}>\r\n <Avatar\r\n width={48}\r\n height={48}\r\n src={walletIcon}\r\n alt={walletName}\r\n />\r\n <div className={styles.address}>\r\n <span className={styles.shortAddress}>{shortAddress}</span>\r\n <span className={styles.walletName}>{walletName}</span>\r\n </div>\r\n </div>\r\n\r\n <div className={styles.actions}>\r\n <Button\r\n type=\"button\"\r\n onClick={handleCopy}\r\n variant=\"outline\"\r\n size=\"icon\"\r\n className=\"rounded-full\"\r\n title={copied ? 'Copied!' : 'Copy address'}\r\n >\r\n {copied ?\r\n <Check className={styles.checkIcon} /> :\r\n <Copy />\r\n }\r\n </Button>\r\n\r\n {/* Network Selector Globe Button */}\r\n {allowNetworkSwitch && (\r\n <ClusterElement\r\n render={({ cluster }) => (\r\n <Button\r\n type=\"button\"\r\n variant=\"outline\"\r\n size=\"icon\"\r\n onClick={() => setView('network')}\r\n title={`Network: ${cluster?.label || 'Unknown'}`}\r\n >\r\n <Globe />\r\n <span\r\n className={styles.networkIndicator}\r\n style={{ background: networkColor[cluster?.id || 'solana:mainnet'] }}\r\n />\r\n </Button>\r\n )}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n\r\n {showSolBalance && (\r\n <div className={styles.balanceSection}>\r\n <div\r\n className={styles.balanceHeader}\r\n >\r\n <span className={styles.balanceLabel}>Balance</span>\r\n <button\r\n onClick={() => fetchSolBalance()}\r\n disabled={isFetchingBalance}\r\n title=\"Refresh balance\"\r\n className={styles.refreshButton}\r\n data-loading={isFetchingBalance}\r\n >\r\n <RefreshCw\r\n className={styles.refreshIcon}\r\n />\r\n </button>\r\n </div>\r\n <div className={styles.balanceValue}>\r\n {isFetchingBalance ? (\r\n <div className={styles.balanceLoading} />\r\n ) : solBalance !== null ? (\r\n `${solBalance.toFixed(4)} SOL`\r\n ) : (\r\n '-- SOL'\r\n )}\r\n </div>\r\n </div>\r\n )}\r\n\r\n <DisconnectElement\r\n render={({ disconnect, disconnecting }) => (\r\n <Button\r\n variant=\"default\"\r\n className={styles.disconnectButton}\r\n onClick={disconnect}\r\n disabled={disconnecting}\r\n >\r\n <LogOut className={styles.disconnectIcon} />\r\n {disconnecting ? 'Disconnecting...' : 'Disconnect'}\r\n </Button>\r\n )}\r\n />\r\n </motion.div>\r\n )\r\n }\r\n\r\n //network switch view\r\n if (view === 'network') {\r\n console.count('Network view rendered');\r\n return (\r\n <motion.div\r\n initial={{ opacity: 0 }}\r\n animate={{ opacity: 1 }}\r\n exit={{ opacity: 0 }}\r\n transition={{ duration: 0.2 }}\r\n className={clsx(styles.WalletDropdown, CN_ConnectButton)}\r\n data-theme={theme}\r\n >\r\n {/* Header */}\r\n <div className={styles.NetworkHeader}>\r\n <Button\r\n type=\"button\"\r\n variant=\"outline\"\r\n size=\"icon\"\r\n onClick={() => setView('wallet')}\r\n title={`Network: Back to Wallet`}\r\n className={styles.backButton}\r\n >\r\n <ChevronLeft />\r\n </Button>\r\n <span>Network Settings</span>\r\n </div>\r\n\r\n {/* Network Options */}\r\n <ClusterElement\r\n render={({ cluster, clusters, setCluster }) => {\r\n const currentClusterId = (cluster as { id?: string })?.id || 'solana:mainnet';\r\n return (\r\n <div className={styles.networkOptions}>\r\n {clusters.map((network, index) => {\r\n const isSelected = currentClusterId === network.id;\r\n return (\r\n <div\r\n key={network.id}\r\n role=\"button\"\r\n tabIndex={0}\r\n onClick={() => setCluster(network.id)}\r\n onKeyDown={e => {\r\n if (e.key === 'Enter' || e.key === ' ') {\r\n e.preventDefault();\r\n setCluster(network.id);\r\n }\r\n }}\r\n className={styles.networkButton}\r\n >\r\n <div className={styles.networkName}>\r\n <span\r\n className={styles.networkColor}\r\n style={{ background: networkColor[network.id] }}\r\n />\r\n <span className={styles.networkLabel}>{network.label}</span>\r\n </div>\r\n <div className={styles.checkMark} data-selected={isSelected}>\r\n {isSelected && <Check />}\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n );\r\n }}\r\n />\r\n </motion.div>\r\n )\r\n }\r\n}\r\n\r\nexport default WalletDropdown","import WalletDropdown from './WalletDropdown';\r\n\r\n\r\nexport default WalletDropdown"],"mappings":"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","names":["ConnectButton_default","import_react","import_connector","BaseButton","styles","Button_default","import_jsx_runtime","classes","Spinner_default","import_lucide_react","import_react","React","import_jsx_runtime","BaseDialog","styles","clsx","import_jsx_runtime","QRCodeUtil","dots","styles","React","import_jsx_runtime","BaseCollapsible","styles","import_react","import_lucide_react","import_jsx_runtime","styles","import_clsx","import_jsx_runtime","styles","Button_default","Spinner_default","WalletModal_default","import_clsx","React","import_jsx_runtime","BaseMenu","styles","import_lucide_react","import_react","import_lucide_react","import_connector","import_clsx","import_jsx_runtime","styles","Button_default","WalletDropdown_default","import_jsx_runtime","Button_default","clsx","styles","WalletDropdown_default","Spinner_default","WalletModal_default","ConnectButton_default"]}