@algobright/solana-connector 0.1.1 → 0.1.3
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/{Button.module-HQNNX6IB.module.css → Button.module-QCTUNBHA.module.css} +1 -0
- package/dist/ConnectButton.d.mts +28 -0
- package/dist/ConnectButton.d.ts +28 -0
- package/dist/ConnectButton.js +191 -89
- package/dist/ConnectButton.js.map +1 -1
- package/dist/ConnectButton.mjs +164 -62
- package/dist/ConnectButton.mjs.map +1 -1
- package/dist/{ConnectButton.module-O3M32YJK.module.css → ConnectButton.module-AR6WQXQS.module.css} +0 -3
- package/dist/WalletDropdown.d.mts +23 -4
- package/dist/WalletDropdown.d.ts +23 -4
- package/dist/WalletDropdown.js +148 -41
- package/dist/WalletDropdown.js.map +1 -1
- package/dist/WalletDropdown.mjs +136 -29
- package/dist/WalletDropdown.mjs.map +1 -1
- package/dist/{WalletDropdown.module-A6KHWKGK.module.css → WalletDropdown.module-DOK7CUOQ.module.css} +1 -0
- package/dist/WalletModal.d.mts +13 -2
- package/dist/WalletModal.d.ts +13 -2
- package/dist/WalletModal.js +28 -30
- package/dist/WalletModal.js.map +1 -1
- package/dist/WalletModal.mjs +15 -17
- package/dist/WalletModal.mjs.map +1 -1
- package/package.json +8 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/WalletDropdown/WalletDropdown.tsx","../src/components/shared/Avatar/Avatar.tsx","../src/components/shared/Avatar/index.ts","../src/components/shared/Button/Button.tsx","../src/components/shared/Button/index.ts","../src/components/WalletDropdown/index.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react'\nimport styles from './WalletDropdown.module.css'\nimport { motion } from 'motion/react';\nimport Avatar from '@shared/Avatar';\nimport { Check, ChevronLeft, Copy, Globe, LogOut, RefreshCw } from 'lucide-react';\nimport Button from '@shared/Button';\nimport { address, BalanceElement, ClusterElement, DisconnectElement, lamportsToSol, useCluster, useConnectorClient } from '@solana/connector';\nimport { createSolanaRpc } from '@solana/kit';\nimport { clsx } from 'clsx';\n\ninterface WalletDropdownProps {\n CN_ConnectButton?: string;\n selectedAccount: string;\n walletIcon?: string;\n walletName: string;\n theme?: 'light' | 'dark';\n\n allowNetworkSwitch?: boolean;\n showSolBalance?: boolean;\n}\n\ntype DropdownView = 'wallet' | 'network';\n\nconst networkColor: Record<string, string> = {\n 'solana:mainnet': '#00c950',\n 'solana:devnet': '#2b7fff',\n 'solana:testnet': '#f0b100',\n 'solana:localnet': '#ff3b3b',\n};\n\nexport function WalletDropdown(props: WalletDropdownProps) {\n const client = useConnectorClient();\n\n const { CN_ConnectButton, selectedAccount, walletIcon, walletName, theme, allowNetworkSwitch, showSolBalance } = props\n\n const [view, setView] = useState<DropdownView>('wallet');\n const [copied, setCopied] = useState(false);\n\n const fetching = useRef(false);\n const [isFetchingBalance, setIsFetchingBalance] = useState(false);\n const [solBalance, setSolBalance] = useState<number | null>(null);\n\n const shortAddress = `${selectedAccount.slice(0, 4)}...${selectedAccount.slice(-4)}`;\n\n async function handleCopy() {\n try {\n await navigator.clipboard.writeText(selectedAccount);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (error) {\n setCopied(false);\n console.error('Failed to copy to clipboard:', error);\n }\n }\n\n async function fetchSolBalance() {\n if (!client || fetching.current) return;\n setIsFetchingBalance(true);\n fetching.current = true;\n try {\n const rpcUrl = client.getRpcUrl();\n const pubkey = address(selectedAccount);\n if (!rpcUrl) throw new Error('No RPC endpoint configured');\n const rpc = createSolanaRpc(rpcUrl);\n const solLamports = (await rpc.getBalance(pubkey).send()).value || 0;\n const sol = lamportsToSol(solLamports);\n setSolBalance(sol);\n\n } catch (error) {\n setSolBalance(0);\n } finally {\n setIsFetchingBalance(false);\n fetching.current = false;\n }\n }\n\n useEffect(() => {\n if (showSolBalance && selectedAccount && client) {\n fetchSolBalance();\n }\n }, [selectedAccount, client, showSolBalance]);\n\n if (view === 'wallet') {\n return (\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.2 }}\n className={clsx(styles.WalletDropdown, CN_ConnectButton)}\n data-theme={theme}\n >\n {/* Header with Avatar and Address */}\n <div className={styles.Header}>\n <div className={styles.addressAndAvatar}>\n <Avatar\n width={48}\n height={48}\n src={walletIcon}\n alt={walletName}\n />\n <div className={styles.address}>\n <span className={styles.shortAddress}>{shortAddress}</span>\n <span className={styles.walletName}>{walletName}</span>\n </div>\n </div>\n\n <div className={styles.actions}>\n <Button\n type=\"button\"\n onClick={handleCopy}\n variant=\"outline\"\n size=\"icon\"\n className=\"rounded-full\"\n title={copied ? 'Copied!' : 'Copy address'}\n >\n {copied ?\n <Check className={styles.checkIcon} /> :\n <Copy />\n }\n </Button>\n\n {/* Network Selector Globe Button */}\n {allowNetworkSwitch && (\n <ClusterElement\n render={({ cluster }) => (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n onClick={() => setView('network')}\n title={`Network: ${cluster?.label || 'Unknown'}`}\n >\n <Globe />\n <span\n className={styles.networkIndicator}\n style={{ background: networkColor[cluster?.id || 'solana:mainnet'] }}\n />\n </Button>\n )}\n />\n )}\n </div>\n </div>\n\n {showSolBalance && (\n <div className={styles.balanceSection}>\n <div\n className={styles.balanceHeader}\n >\n <span className={styles.balanceLabel}>Balance</span>\n <button\n onClick={() => fetchSolBalance()}\n disabled={isFetchingBalance}\n title=\"Refresh balance\"\n className={styles.refreshButton}\n data-loading={isFetchingBalance}\n >\n <RefreshCw\n className={styles.refreshIcon}\n />\n </button>\n </div>\n <div className={styles.balanceValue}>\n {isFetchingBalance ? (\n <div className={styles.balanceLoading} />\n ) : solBalance !== null ? (\n `${solBalance.toFixed(4)} SOL`\n ) : (\n '-- SOL'\n )}\n </div>\n </div>\n )}\n\n <DisconnectElement\n render={({ disconnect, disconnecting }) => (\n <Button\n variant=\"default\"\n className={styles.disconnectButton}\n onClick={disconnect}\n disabled={disconnecting}\n >\n <LogOut className={styles.disconnectIcon} />\n {disconnecting ? 'Disconnecting...' : 'Disconnect'}\n </Button>\n )}\n />\n </motion.div>\n )\n }\n\n //network switch view\n if (view === 'network') {\n console.count('Network view rendered');\n return (\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.2 }}\n className={clsx(styles.WalletDropdown, CN_ConnectButton)}\n data-theme={theme}\n >\n {/* Header */}\n <div className={styles.NetworkHeader}>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n onClick={() => setView('wallet')}\n title={`Network: Back to Wallet`}\n className={styles.backButton}\n >\n <ChevronLeft />\n </Button>\n <span>Network Settings</span>\n </div>\n\n {/* Network Options */}\n <ClusterElement\n render={({ cluster, clusters, setCluster }) => {\n const currentClusterId = (cluster as { id?: string })?.id || 'solana:mainnet';\n return (\n <div className={styles.networkOptions}>\n {clusters.map((network, index) => {\n const isSelected = currentClusterId === network.id;\n return (\n <div\n key={network.id}\n role=\"button\"\n tabIndex={0}\n onClick={() => setCluster(network.id)}\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n setCluster(network.id);\n }\n }}\n className={styles.networkButton}\n >\n <div className={styles.networkName}>\n <span\n className={styles.networkColor}\n style={{ background: networkColor[network.id] }}\n />\n <span className={styles.networkLabel}>{network.label}</span>\n </div>\n <div className={styles.checkMark} data-selected={isSelected}>\n {isSelected && <Check />}\n </div>\n </div>\n );\n })}\n </div>\n );\n }}\n />\n </motion.div>\n )\n }\n}\n\nexport default WalletDropdown","import { useState } from 'react';\nimport styles from './Avatar.module.css';\nimport { Wallet } from 'lucide-react';\ninterface AvatarProps {\n height?: number | string;\n width?: number | string;\n src?: string;\n alt?: string;\n theme?: 'light' | 'dark';\n}\nexport function Avatar({\n height,\n width,\n src,\n alt,\n theme = 'light',\n}: AvatarProps) {\n const [hasError, setHasError] = useState(false);\n return (\n <div className={styles.avatar} data-theme={theme}>\n {src && !hasError ? (\n <img\n height={height}\n width={width}\n src={src}\n alt={alt || \"Avatar\"}\n onError={() => setHasError(true)}\n />\n ) : (\n <div className={styles.fallback} style={{ height, width }}>\n <Wallet />\n </div>\n )}\n </div>\n );\n}\n","import { Avatar } from './Avatar';\n\nexport default Avatar;","'use client';\n\nimport * as React from 'react';\nimport { Button as BaseButton } from '@base-ui/react/button';\nimport styles from './Button.module.css';\n\n// 1. Define Types\ntype ButtonVariant = 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link';\ntype ButtonSize = 'default' | 'sm' | 'lg' | 'icon';\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n}\n\n// 2. The Component\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant = 'default', size = 'default', ...props }, ref) => {\n return (\n <BaseButton\n ref={ref}\n\n className={`${styles.button} ${className || ''}`}\n data-variant={variant}\n data-size={size}\n\n {...props}\n />\n );\n }\n);\nButton.displayName = 'Button';\n\nexport default Button;","import Button from \"./Button\";\n\nexport default Button;","import WalletDropdown from './WalletDropdown';\n\n\nexport default WalletDropdown"],"mappings":"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","names":["useState","styles","styles","jsx","Button_default","jsx","useState","styles","Button_default","WalletDropdown_default"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/WalletDropdown/WalletDropdown.tsx","../src/components/shared/Avatar/Avatar.tsx","../src/components/shared/Avatar/index.ts","../src/components/shared/Button/Button.tsx","../src/components/shared/Button/index.ts","../src/utils/fetchBalance.tsx","../src/components/WalletDropdown/index.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react'\nimport { isAddress } from '@solana/kit';\nimport styles from './WalletDropdown.module.css'\nimport { motion } from 'motion/react';\nimport Avatar from '@shared/Avatar';\nimport { Check, ChevronLeft, Copy, Globe, LogOut, RefreshCw } from 'lucide-react';\nimport Button from '@shared/Button';\nimport { ClusterElement, DisconnectElement, useConnector, useConnectorClient } from '@solana/connector';\nimport { clsx } from 'clsx';\nimport { getSolBalance, getTokenBalance } from 'src/utils/fetchBalance';\n\n/**\n * Props for the WalletDropdown component.\n */\ninterface WalletDropdownProps {\n /** * Custom CSS class for the dropdown menu container. \n * If not passed, the component uses default absolute positioning.\n */\n CN_DropdownMenu?: string;\n\n /** * Visual theme for the dropdown items. \n * @default 'light'\n */\n theme?: 'light' | 'dark';\n\n /** * Enables the option to switch between Solana clusters. \n * @default true\n */\n allowNetworkSwitch?: boolean;\n\n /** * Displays the user's SOL balance inside the dropdown header. \n * @default true\n */\n showSolBalance?: boolean;\n\n /** * Configuration to display a specific SPL token balance. \n * If not provided, this defaults to false (hidden).\n */\n showDefaultToken?: {\n address: string;\n symbol: string;\n } | undefined;\n}\n\ntype DropdownView = 'wallet' | 'network';\n\nconst networkColor: Record<string, string> = {\n 'solana:mainnet': '#00c950',\n 'solana:devnet': '#2b7fff',\n 'solana:testnet': '#f0b100',\n 'solana:localnet': '#ff3b3b',\n};\n\nexport function WalletDropdown(props: WalletDropdownProps) {\n const client = useConnectorClient();\n\n const { CN_DropdownMenu,\n theme = 'light',\n allowNetworkSwitch = true,\n showSolBalance = true,\n showDefaultToken\n } = props\n\n const [view, setView] = useState<DropdownView>('wallet');\n const [copied, setCopied] = useState(false);\n\n const { account, connector } = useConnector();\n const fetchingSolBalance = useRef(false);\n const [isFetchingBalance, setIsFetchingBalance] = useState(false);\n\n const fetchingDefaultToken = useRef(false);\n const [isFetchingDefaultTokenBalance, setIsFetchingDefaultTokenBalance] = useState(false);\n\n const [solBalance, setSolBalance] = useState<number | null>(null);\n const [defaultTokenBalance, setDefaultTokenBalance] = useState<number | null>(null);\n\n const selectedAccount = account || '';\n const walletName = connector?.name || 'Unknown Wallet';\n const walletIcon = connector?.icon || undefined;\n const shortAddress = `${selectedAccount.slice(0, 4)}...${selectedAccount.slice(-4)}`;\n\n async function handleCopy() {\n try {\n await navigator.clipboard.writeText(selectedAccount);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (error) {\n setCopied(false);\n console.error('Failed to copy to clipboard:', error);\n }\n }\n\n async function fetchSolBalance() {\n if (!client || fetchingSolBalance.current) return;\n setIsFetchingBalance(true);\n fetchingSolBalance.current = true;\n\n const solBalance = await getSolBalance(client, selectedAccount);\n setSolBalance(solBalance);\n\n setIsFetchingBalance(false);\n fetchingSolBalance.current = false;\n }\n\n async function fetchDefaultTokenBalance() {\n if (!showDefaultToken || !showDefaultToken.address || !client || fetchingDefaultToken.current) return;\n\n const isValidAddress = isAddress(showDefaultToken.address);\n if (!isValidAddress) {\n console.error('Invalid default token address:', showDefaultToken);\n return\n }\n\n setIsFetchingDefaultTokenBalance(true);\n fetchingDefaultToken.current = true;\n\n const tokenBalance = await getTokenBalance(client, selectedAccount, showDefaultToken.address);\n setDefaultTokenBalance(tokenBalance);\n\n setIsFetchingDefaultTokenBalance(false);\n fetchingDefaultToken.current = false;\n }\n\n useEffect(() => {\n if (showSolBalance && selectedAccount && client) {\n fetchSolBalance();\n }\n if (showDefaultToken && selectedAccount && client) {\n fetchDefaultTokenBalance();\n }\n }, [selectedAccount, client, showSolBalance, showDefaultToken]);\n\n if (view === 'wallet') {\n return (\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.2 }}\n className={clsx(styles.WalletDropdown, CN_DropdownMenu)}\n data-theme={theme}\n >\n {/* Header with Avatar and Address */}\n <div className={styles.Header}>\n <div className={styles.addressAndAvatar}>\n <Avatar\n width={48}\n height={48}\n src={walletIcon}\n alt={walletName}\n />\n <div className={styles.address}>\n <span className={styles.shortAddress}>{shortAddress}</span>\n <span className={styles.walletName}>{walletName}</span>\n </div>\n </div>\n\n <div className={styles.actions}>\n <Button\n type=\"button\"\n onClick={handleCopy}\n variant=\"outline\"\n size=\"icon\"\n className=\"rounded-full\"\n title={copied ? 'Copied!' : 'Copy address'}\n >\n {copied ?\n <Check className={styles.checkIcon} /> :\n <Copy />\n }\n </Button>\n\n {/* Network Selector Globe Button */}\n {allowNetworkSwitch && (\n <ClusterElement\n render={({ cluster }) => (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n onClick={() => setView('network')}\n title={`Network: ${cluster?.label || 'Unknown'}`}\n >\n <Globe />\n <span\n className={styles.networkIndicator}\n style={{ background: networkColor[cluster?.id || 'solana:mainnet'] }}\n />\n </Button>\n )}\n />\n )}\n </div>\n </div>\n\n {showSolBalance && (\n <div className={styles.balanceSection}>\n <div\n className={styles.balanceHeader}\n >\n <span className={styles.balanceLabel}>Balance</span>\n <button\n onClick={() => fetchSolBalance()}\n disabled={isFetchingBalance}\n title=\"Refresh balance\"\n className={styles.refreshButton}\n data-loading={isFetchingBalance}\n >\n <RefreshCw\n className={styles.refreshIcon}\n />\n </button>\n </div>\n <div className={styles.balanceValue} title={String(solBalance) || \"0\"}>\n {isFetchingBalance ? (\n <div className={styles.balanceLoading} />\n ) : solBalance !== null ? (\n `${solBalance.toFixed(4)} SOL`\n ) : (\n '-- SOL'\n )}\n </div>\n </div>\n )}\n\n {showDefaultToken && (\n <div className={styles.balanceSection}>\n <div\n className={styles.balanceHeader}\n >\n <span className={styles.balanceLabel}>Balance</span>\n <button\n onClick={() => fetchDefaultTokenBalance()}\n disabled={isFetchingDefaultTokenBalance}\n title=\"Refresh balance\"\n className={styles.refreshButton}\n data-loading={isFetchingDefaultTokenBalance}\n >\n <RefreshCw\n className={styles.refreshIcon}\n />\n </button>\n </div>\n <div className={styles.balanceValue} title={String(defaultTokenBalance) || \"0\"}>\n {isFetchingDefaultTokenBalance ? (\n <div className={styles.balanceLoading} />\n ) : defaultTokenBalance !== null ? (\n `${defaultTokenBalance.toFixed(4)} ${showDefaultToken?.symbol || ''}`\n ) : (\n `-- ${showDefaultToken?.symbol || ''}`\n )}\n </div>\n </div>\n )}\n\n <DisconnectElement\n render={({ disconnect, disconnecting }) => (\n <Button\n variant=\"default\"\n className={styles.disconnectButton}\n onClick={disconnect}\n disabled={disconnecting}\n >\n <LogOut className={styles.disconnectIcon} />\n {disconnecting ? 'Disconnecting...' : 'Disconnect'}\n </Button>\n )}\n />\n </motion.div>\n )\n }\n\n //network switch view\n if (view === 'network') {\n return (\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.2 }}\n className={clsx(styles.WalletDropdown, CN_DropdownMenu)}\n data-theme={theme}\n >\n {/* Header */}\n <div className={styles.NetworkHeader}>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n onClick={() => setView('wallet')}\n title={`Network: Back to Wallet`}\n className={styles.backButton}\n >\n <ChevronLeft />\n </Button>\n <span>Network Settings</span>\n </div>\n\n {/* Network Options */}\n <ClusterElement\n render={({ cluster, clusters, setCluster }) => {\n const currentClusterId = (cluster as { id?: string })?.id || 'solana:mainnet';\n return (\n <div className={styles.networkOptions}>\n {clusters.map((network) => {\n const isSelected = currentClusterId === network.id;\n return (\n <div\n key={network.id}\n role=\"button\"\n tabIndex={0}\n onClick={() => setCluster(network.id)}\n onKeyDown={e => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n setCluster(network.id);\n }\n }}\n className={styles.networkButton}\n >\n <div className={styles.networkName}>\n <span\n className={styles.networkColor}\n style={{ background: networkColor[network.id] }}\n />\n <span className={styles.networkLabel}>{network.label}</span>\n </div>\n <div className={styles.checkMark} data-selected={isSelected}>\n {isSelected && <Check />}\n </div>\n </div>\n );\n })}\n </div>\n );\n }}\n />\n </motion.div>\n )\n }\n}\n\nexport default WalletDropdown","import { useState } from 'react';\nimport styles from './Avatar.module.css';\nimport { Wallet } from 'lucide-react';\ninterface AvatarProps {\n height?: number | string;\n width?: number | string;\n src?: string;\n alt?: string;\n theme?: 'light' | 'dark';\n}\nexport function Avatar({\n height,\n width,\n src,\n alt,\n theme = 'light',\n}: AvatarProps) {\n const [hasError, setHasError] = useState(false);\n return (\n <div className={styles.avatar} data-theme={theme}>\n {src && !hasError ? (\n <img\n height={height}\n width={width}\n src={src}\n alt={alt || \"Avatar\"}\n onError={() => setHasError(true)}\n />\n ) : (\n <div className={styles.fallback} style={{ height, width }}>\n <Wallet />\n </div>\n )}\n </div>\n );\n}\n","import { Avatar } from './Avatar';\n\nexport default Avatar;","'use client';\n\nimport { forwardRef } from 'react';\nimport { Button as BaseButton } from '@base-ui/react/button';\nimport styles from './Button.module.css';\n\n// 1. Define Types\ntype ButtonVariant = 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link';\ntype ButtonSize = 'default' | 'sm' | 'lg' | 'icon';\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n}\n\n// 2. The Component\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant = 'default', size = 'default', ...props }, ref) => {\n return (\n <BaseButton\n ref={ref}\n\n className={`${styles.button} ${className || ''}`}\n data-variant={variant}\n data-size={size}\n\n {...props}\n />\n );\n }\n);\nButton.displayName = 'Button';\n\nexport default Button;","import Button from \"./Button\";\n\nexport default Button;","import { findAssociatedTokenPda } from \"@solana-program/token\";\nimport { address, ConnectorClient, lamportsToSol } from \"@solana/connector\";\nimport { createSolanaRpc } from \"@solana/kit\";\n\nexport async function getSolBalance(\n client: ConnectorClient,\n pubkey: string\n): Promise<number> {\n let balance = 0;\n try {\n const rpcUrl = client.getRpcUrl();\n if (!rpcUrl) {\n console.error(\"RPC URL is not available from the ConnectorClient.\");\n return 0;\n }\n const pubkeyAddress = address(pubkey);\n const rpc = createSolanaRpc(rpcUrl);\n const balanceResponse = await rpc.getBalance(pubkeyAddress).send();\n balance = lamportsToSol(balanceResponse.value);\n } catch (error) {\n console.error(\"Error fetching SOL balance:\", error);\n } finally {\n return balance;\n }\n}\n\nexport async function getTokenBalance(\n client: ConnectorClient,\n pubkey: string,\n mintAddress: string\n): Promise<number> {\n let balance = 0;\n try {\n const rpcUrl = client.getRpcUrl();\n if (!rpcUrl) {\n console.error(\"RPC URL is not available from the ConnectorClient.\");\n return 0;\n }\n const pubkeyAddress = address(pubkey);\n const mintPubkey = address(mintAddress);\n const rpc = createSolanaRpc(rpcUrl);\n\n const mintInfo = await rpc.getAccountInfo(\n mintPubkey,\n { encoding: \"base64\" }\n ).send();\n\n const ownerProgram = mintInfo.value?.owner;\n if (!ownerProgram) {\n throw new Error('Failed to fetch mint account info');\n }\n const tokenProgram = address(ownerProgram)\n const [tokenPDA] = await findAssociatedTokenPda({\n mint: mintPubkey,\n owner: pubkeyAddress,\n tokenProgram: tokenProgram\n });\n const tokenBalance = await rpc.getTokenAccountBalance(tokenPDA).send();\n if (tokenBalance.value) {\n balance = parseFloat(tokenBalance.value.uiAmountString);\n }\n } catch (error) {\n // console.error(\"Error fetching token balance:\", error);\n } finally {\n return balance;\n }\n}","import WalletDropdown from './WalletDropdown';\n\n\nexport default WalletDropdown"],"mappings":"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","names":["useState","styles","styles","jsx","Button_default","jsx","useState","solBalance","styles","Button_default","WalletDropdown_default"]}
|
package/dist/WalletModal.d.mts
CHANGED
|
@@ -1,12 +1,23 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Props for the WalletModal component.
|
|
5
|
+
* This modal acts as the primary interface for users to select a wallet
|
|
6
|
+
* or scan a QR code for mobile connection.
|
|
7
|
+
*/
|
|
3
8
|
type WalletModalProps = {
|
|
9
|
+
/** * Custom CSS class for the modal overlay and container.
|
|
10
|
+
* If not provided, the component uses the kit's default modal styling.
|
|
11
|
+
*/
|
|
4
12
|
CN_Modal?: string;
|
|
13
|
+
/** * The visual theme for the modal content.
|
|
14
|
+
* @default 'light'
|
|
15
|
+
*/
|
|
5
16
|
theme?: 'light' | 'dark';
|
|
17
|
+
/** Controlled state: whether the modal is currently visible. */
|
|
6
18
|
open: boolean;
|
|
19
|
+
/** Callback function to handle opening and closing the modal. */
|
|
7
20
|
onOpenChange: (open: boolean) => void;
|
|
8
|
-
walletConnectUri: string | null;
|
|
9
|
-
onClearWalletConnectUri: () => void;
|
|
10
21
|
};
|
|
11
22
|
declare function WalletModal(props: WalletModalProps): react_jsx_runtime.JSX.Element;
|
|
12
23
|
|
package/dist/WalletModal.d.ts
CHANGED
|
@@ -1,12 +1,23 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Props for the WalletModal component.
|
|
5
|
+
* This modal acts as the primary interface for users to select a wallet
|
|
6
|
+
* or scan a QR code for mobile connection.
|
|
7
|
+
*/
|
|
3
8
|
type WalletModalProps = {
|
|
9
|
+
/** * Custom CSS class for the modal overlay and container.
|
|
10
|
+
* If not provided, the component uses the kit's default modal styling.
|
|
11
|
+
*/
|
|
4
12
|
CN_Modal?: string;
|
|
13
|
+
/** * The visual theme for the modal content.
|
|
14
|
+
* @default 'light'
|
|
15
|
+
*/
|
|
5
16
|
theme?: 'light' | 'dark';
|
|
17
|
+
/** Controlled state: whether the modal is currently visible. */
|
|
6
18
|
open: boolean;
|
|
19
|
+
/** Callback function to handle opening and closing the modal. */
|
|
7
20
|
onOpenChange: (open: boolean) => void;
|
|
8
|
-
walletConnectUri: string | null;
|
|
9
|
-
onClearWalletConnectUri: () => void;
|
|
10
21
|
};
|
|
11
22
|
declare function WalletModal(props: WalletModalProps): react_jsx_runtime.JSX.Element;
|
|
12
23
|
|
package/dist/WalletModal.js
CHANGED
|
@@ -38,21 +38,21 @@ module.exports = __toCommonJS(WalletModal_exports);
|
|
|
38
38
|
// src/components/WalletModal/WalletModal.tsx
|
|
39
39
|
var import_connector = require("@solana/connector");
|
|
40
40
|
var import_lucide_react3 = require("lucide-react");
|
|
41
|
-
var
|
|
41
|
+
var import_react6 = require("react");
|
|
42
42
|
var import_WalletModal = __toESM(require("./WalletModal.module-ZRTJGOQY.module.css"));
|
|
43
43
|
|
|
44
44
|
// src/components/shared/Dialog/Dialog.tsx
|
|
45
|
-
var React = __toESM(require("react"));
|
|
46
45
|
var import_dialog = require("@base-ui/react/dialog");
|
|
47
46
|
var import_lucide_react = require("lucide-react");
|
|
48
47
|
var import_Dialog = __toESM(require("./Dialog.module-AYJTMDAD.module.css"));
|
|
49
48
|
var import_clsx = __toESM(require("clsx"));
|
|
49
|
+
var import_react = require("react");
|
|
50
50
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
51
51
|
var Dialog = import_dialog.Dialog.Root;
|
|
52
52
|
var DialogTrigger = import_dialog.Dialog.Trigger;
|
|
53
53
|
var DialogPortal = import_dialog.Dialog.Portal;
|
|
54
54
|
var DialogClose = import_dialog.Dialog.Close;
|
|
55
|
-
var DialogBackdrop =
|
|
55
|
+
var DialogBackdrop = (0, import_react.forwardRef)(
|
|
56
56
|
({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
57
57
|
import_dialog.Dialog.Backdrop,
|
|
58
58
|
{
|
|
@@ -63,7 +63,7 @@ var DialogBackdrop = React.forwardRef(
|
|
|
63
63
|
)
|
|
64
64
|
);
|
|
65
65
|
DialogBackdrop.displayName = "DialogBackdrop";
|
|
66
|
-
var DialogContent =
|
|
66
|
+
var DialogContent = (0, import_react.forwardRef)(
|
|
67
67
|
({ className, children, theme, showCloseButton = true, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(DialogPortal, { children: [
|
|
68
68
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(DialogBackdrop, { "data-theme": theme }),
|
|
69
69
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
@@ -86,7 +86,7 @@ var DialogHeader = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_r
|
|
|
86
86
|
DialogHeader.displayName = "DialogHeader";
|
|
87
87
|
var DialogFooter = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: `${import_Dialog.default.footer} ${className || ""}`, ...props });
|
|
88
88
|
DialogFooter.displayName = "DialogFooter";
|
|
89
|
-
var DialogTitle =
|
|
89
|
+
var DialogTitle = (0, import_react.forwardRef)(
|
|
90
90
|
({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
91
91
|
import_dialog.Dialog.Title,
|
|
92
92
|
{
|
|
@@ -97,7 +97,7 @@ var DialogTitle = React.forwardRef(
|
|
|
97
97
|
)
|
|
98
98
|
);
|
|
99
99
|
DialogTitle.displayName = "DialogTitle";
|
|
100
|
-
var DialogDescription =
|
|
100
|
+
var DialogDescription = (0, import_react.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
101
101
|
import_dialog.Dialog.Description,
|
|
102
102
|
{
|
|
103
103
|
ref,
|
|
@@ -108,11 +108,11 @@ var DialogDescription = React.forwardRef(({ className, ...props }, ref) => /* @_
|
|
|
108
108
|
DialogDescription.displayName = "DialogDescription";
|
|
109
109
|
|
|
110
110
|
// src/components/shared/Button/Button.tsx
|
|
111
|
-
var
|
|
111
|
+
var import_react2 = require("react");
|
|
112
112
|
var import_button = require("@base-ui/react/button");
|
|
113
|
-
var import_Button = __toESM(require("./Button.module-
|
|
113
|
+
var import_Button = __toESM(require("./Button.module-QCTUNBHA.module.css"));
|
|
114
114
|
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
115
|
-
var Button =
|
|
115
|
+
var Button = (0, import_react2.forwardRef)(
|
|
116
116
|
({ className, variant = "default", size = "default", ...props }, ref) => {
|
|
117
117
|
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
118
118
|
import_button.Button,
|
|
@@ -133,7 +133,7 @@ var Button_default = Button;
|
|
|
133
133
|
var Button_default2 = Button_default;
|
|
134
134
|
|
|
135
135
|
// src/components/shared/CustomQRCode/CustomQRCode.tsx
|
|
136
|
-
var
|
|
136
|
+
var import_react3 = require("react");
|
|
137
137
|
var import_qrcode = __toESM(require("qrcode"));
|
|
138
138
|
var import_CustomQRCode = __toESM(require("./CustomQRCode.module-JW3JU3FX.module.css"));
|
|
139
139
|
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
@@ -155,7 +155,7 @@ function QRCodeSVG({
|
|
|
155
155
|
}) {
|
|
156
156
|
const logoSize = clearArea ? 76 : 0;
|
|
157
157
|
const size = sizeProp - 10 * 2;
|
|
158
|
-
const dots = (0,
|
|
158
|
+
const dots = (0, import_react3.useMemo)(() => {
|
|
159
159
|
const dots2 = [];
|
|
160
160
|
const matrix = generateMatrix(value, ecl);
|
|
161
161
|
const cellSize = size / matrix.length;
|
|
@@ -397,12 +397,12 @@ var Spinner_default2 = Spinner_default;
|
|
|
397
397
|
var import_si = require("react-icons/si");
|
|
398
398
|
|
|
399
399
|
// src/components/shared/Collapsible/Collapsible.tsx
|
|
400
|
-
var React3 = __toESM(require("react"));
|
|
401
400
|
var import_collapsible = require("@base-ui/react/collapsible");
|
|
402
401
|
var import_Collapsible = __toESM(require("./Collapsible.module-F4VIL5FH.module.css"));
|
|
402
|
+
var import_react4 = require("react");
|
|
403
403
|
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
404
404
|
var Collapsible = import_collapsible.Collapsible.Root;
|
|
405
|
-
var CollapsibleTrigger =
|
|
405
|
+
var CollapsibleTrigger = (0, import_react4.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
406
406
|
import_collapsible.Collapsible.Trigger,
|
|
407
407
|
{
|
|
408
408
|
ref,
|
|
@@ -411,7 +411,7 @@ var CollapsibleTrigger = React3.forwardRef(({ className, ...props }, ref) => /*
|
|
|
411
411
|
}
|
|
412
412
|
));
|
|
413
413
|
CollapsibleTrigger.displayName = "CollapsibleTrigger";
|
|
414
|
-
var CollapsibleContent =
|
|
414
|
+
var CollapsibleContent = (0, import_react4.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
415
415
|
import_collapsible.Collapsible.Panel,
|
|
416
416
|
{
|
|
417
417
|
ref,
|
|
@@ -422,7 +422,7 @@ var CollapsibleContent = React3.forwardRef(({ className, ...props }, ref) => /*
|
|
|
422
422
|
CollapsibleContent.displayName = "CollapsibleContent";
|
|
423
423
|
|
|
424
424
|
// src/components/shared/Avatar/Avatar.tsx
|
|
425
|
-
var
|
|
425
|
+
var import_react5 = require("react");
|
|
426
426
|
var import_Avatar = __toESM(require("./Avatar.module-AACAT34D.module.css"));
|
|
427
427
|
var import_lucide_react2 = require("lucide-react");
|
|
428
428
|
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
@@ -433,7 +433,7 @@ function Avatar({
|
|
|
433
433
|
alt,
|
|
434
434
|
theme = "light"
|
|
435
435
|
}) {
|
|
436
|
-
const [hasError, setHasError] = (0,
|
|
436
|
+
const [hasError, setHasError] = (0, import_react5.useState)(false);
|
|
437
437
|
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: import_Avatar.default.avatar, "data-theme": theme, children: src && !hasError ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
438
438
|
"img",
|
|
439
439
|
{
|
|
@@ -458,29 +458,27 @@ function WalletModal(props) {
|
|
|
458
458
|
CN_Modal,
|
|
459
459
|
theme = "light",
|
|
460
460
|
open,
|
|
461
|
-
onOpenChange
|
|
462
|
-
walletConnectUri,
|
|
463
|
-
onClearWalletConnectUri
|
|
461
|
+
onOpenChange
|
|
464
462
|
} = props;
|
|
465
|
-
const { walletStatus: { status }, isConnecting, connectorId, connectors, connectWallet, disconnectWallet } = (0, import_connector.useConnector)();
|
|
466
|
-
const [connectingConnectorId, setConnectingConnectorId] = (0,
|
|
467
|
-
const [isOtherWalletsOpen, setIsOtherWalletsOpen] = (0,
|
|
468
|
-
const [errorConnectorId, setErrorConnectorId] = (0,
|
|
469
|
-
const [errorMessage, setErrorMessage] = (0,
|
|
470
|
-
const [copied, setCopied] = (0,
|
|
471
|
-
const isClient = (0,
|
|
463
|
+
const { walletConnectUri, clearWalletConnectUri, walletStatus: { status }, isConnecting, connectorId, connectors, connectWallet, disconnectWallet } = (0, import_connector.useConnector)();
|
|
464
|
+
const [connectingConnectorId, setConnectingConnectorId] = (0, import_react6.useState)(null);
|
|
465
|
+
const [isOtherWalletsOpen, setIsOtherWalletsOpen] = (0, import_react6.useState)(false);
|
|
466
|
+
const [errorConnectorId, setErrorConnectorId] = (0, import_react6.useState)(null);
|
|
467
|
+
const [errorMessage, setErrorMessage] = (0, import_react6.useState)(null);
|
|
468
|
+
const [copied, setCopied] = (0, import_react6.useState)(false);
|
|
469
|
+
const isClient = (0, import_react6.useSyncExternalStore)(
|
|
472
470
|
() => () => {
|
|
473
471
|
},
|
|
474
472
|
() => true,
|
|
475
473
|
() => false
|
|
476
474
|
);
|
|
477
|
-
const recentlyConnectedConnectorId = (0,
|
|
475
|
+
const recentlyConnectedConnectorId = (0, import_react6.useSyncExternalStore)(
|
|
478
476
|
() => () => {
|
|
479
477
|
},
|
|
480
478
|
() => localStorage.getItem("recentlyConnectedConnectorId"),
|
|
481
479
|
() => null
|
|
482
480
|
);
|
|
483
|
-
(0,
|
|
481
|
+
(0, import_react6.useEffect)(() => {
|
|
484
482
|
if (status === "connected" && connectorId) {
|
|
485
483
|
localStorage.setItem("recentlyConnectedConnectorId", connectorId);
|
|
486
484
|
}
|
|
@@ -488,7 +486,7 @@ function WalletModal(props) {
|
|
|
488
486
|
const walletConnectConnector = (_a = connectors.find((c) => c.name === "WalletConnect")) != null ? _a : null;
|
|
489
487
|
const isWalletConnectFlow = !!walletConnectConnector && (connectingConnectorId === walletConnectConnector.id || status === "connecting" && connectorId === walletConnectConnector.id) || !!walletConnectUri;
|
|
490
488
|
function cancelConnection() {
|
|
491
|
-
|
|
489
|
+
clearWalletConnectUri == null ? void 0 : clearWalletConnectUri();
|
|
492
490
|
setConnectingConnectorId(null);
|
|
493
491
|
disconnectWallet().catch(() => {
|
|
494
492
|
});
|
|
@@ -502,7 +500,7 @@ function WalletModal(props) {
|
|
|
502
500
|
setConnectingConnectorId(connector.id);
|
|
503
501
|
try {
|
|
504
502
|
if (connector.name === "WalletConnect") {
|
|
505
|
-
|
|
503
|
+
clearWalletConnectUri == null ? void 0 : clearWalletConnectUri();
|
|
506
504
|
}
|
|
507
505
|
await connectWallet(connector.id);
|
|
508
506
|
localStorage.setItem("recentlyConnectedConnectorId", connector.id);
|