@gerritsen/supra-connect 0.0.8 → 0.0.10
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.d.ts +1 -10
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -42,11 +42,6 @@ declare class StarkeyWalletUtils {
|
|
|
42
42
|
private static isErrorResponse;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
declare function saveWallet(address: string, chainId?: string | number, days?: number): void;
|
|
46
|
-
declare function getWallet(): string | null;
|
|
47
|
-
declare function getChainId(): string | number | null;
|
|
48
|
-
declare function clearWallet(): void;
|
|
49
|
-
|
|
50
45
|
interface RibbitWallet {
|
|
51
46
|
walletAddress: string;
|
|
52
47
|
connected: boolean;
|
|
@@ -103,10 +98,6 @@ declare class RibbitWalletUtils {
|
|
|
103
98
|
static signMessage(messageRequest: RibbitMessageRequest): Promise<any>;
|
|
104
99
|
static sendTransaction(transactionRequest: SupraTransactionRequest | RibbitTransactionRequest): Promise<TransactionResult>;
|
|
105
100
|
static transfer(transferRequest: SupraTransferRequest): Promise<TransactionResult>;
|
|
106
|
-
static onWalletChanged(handler: (...args: any[]) => void): void;
|
|
107
|
-
static onNetworkChanged(handler: (...args: any[]) => void): void;
|
|
108
|
-
static offWalletChanged(handler: (...args: any[]) => void): void;
|
|
109
|
-
static offNetworkChanged(handler: (...args: any[]) => void): void;
|
|
110
101
|
static getPublicKey(address?: string): Promise<string>;
|
|
111
102
|
static verifySignature(message: string, signature: string, publicKey: string, isHexMessage?: boolean): Promise<boolean>;
|
|
112
103
|
static getPublicKeyFromAddress(address: string): Promise<string>;
|
|
@@ -291,4 +282,4 @@ interface SupraConnectButtonProps extends SupraConnectConfig {
|
|
|
291
282
|
}
|
|
292
283
|
declare const SupraConnectButton: (props?: SupraConnectButtonProps) => react_jsx_runtime.JSX.Element;
|
|
293
284
|
|
|
294
|
-
export { type ConnectedWallet, ConnectionStore, DEFAULT_RPC_URL, type DappMetadata, type GasEstimation, type RibbitAccount, type RibbitBalanceRequest, type RibbitConnectResponse, type RibbitDappMetadata, type RibbitMessageRequest, type RibbitTransactionRequest, type RibbitWallet, RibbitWalletUtils, type SignMessageResult, type StarkeyAccountInfo, type StarkeyDappMetadata, type StarkeyWallet, StarkeyWalletUtils, SupraConnectButton, type SupraConnectConfig, type SupraConnectHookReturn, SupraConnectProvider, type SupraTransactionOptions, type SupraTransactionPayload, type SupraTransactionRequest, type SupraTransferRequest, type TransactionResult, type WalletInfo, type WalletType,
|
|
285
|
+
export { type ConnectedWallet, ConnectionStore, DEFAULT_RPC_URL, type DappMetadata, type GasEstimation, type RibbitAccount, type RibbitBalanceRequest, type RibbitConnectResponse, type RibbitDappMetadata, type RibbitMessageRequest, type RibbitTransactionRequest, type RibbitWallet, RibbitWalletUtils, type SignMessageResult, type StarkeyAccountInfo, type StarkeyDappMetadata, type StarkeyWallet, StarkeyWalletUtils, SupraConnectButton, type SupraConnectConfig, type SupraConnectHookReturn, SupraConnectProvider, type SupraTransactionOptions, type SupraTransactionPayload, type SupraTransactionRequest, type SupraTransferRequest, type TransactionResult, type WalletInfo, type WalletType, useSupraConnect };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import t,{createContext as e,useState as r,useEffect as n,useCallback as a,useContext as o,Component as i}from"react";import*as s from"@noble/ed25519";import{TxnBuilderTypes as l,HexString as c,BCS as d}from"supra-l1-sdk";import{jsx as u,jsxs as p}from"react/jsx-runtime";import{createPortal as g}from"react-dom";function h(t){return t instanceof Error?t.message:"Unknown error"}function f(t){if(t instanceof Error){const e=t.message.toLowerCase();return e.includes("user rejected")||e.includes("user denied")||e.includes("user cancelled")||e.includes("cancelled by user")}return!1}!function(t,{insertAt:e}={}){if("undefined"==typeof document)return;const r=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css","top"===e&&r.firstChild?r.insertBefore(n,r.firstChild):r.appendChild(n),n.styleSheet?n.styleSheet.cssText=t:n.appendChild(document.createTextNode(t))}("@layer reset, base, tokens, recipes, utilities;\n");function b(){return"undefined"==typeof window?"":window.location.origin||window.location.hostname}function w(){return`starkey_connected_wallet::${b()}`}function m(){return`starkey_chain_id::${b()}`}function y(t,e,r=10){try{const n=Date.now()+24*r*60*60*1e3,a=w(),o=JSON.stringify({address:t,expiry:n});if(localStorage.setItem(a,o),void 0!==e){const t=m(),r=JSON.stringify({chainId:e,expiry:n});localStorage.setItem(t,r)}}catch(t){}}function S(){try{const t=localStorage.getItem(w());if(t){const{address:e,expiry:r}=JSON.parse(t);return Date.now()<r?e:(v(),null)}return null}catch{return null}}function k(){try{const t=localStorage.getItem(m());if(t){const{chainId:e,expiry:r}=JSON.parse(t);return Date.now()<r?e:(v(),null)}return null}catch{return null}}function v(){try{localStorage.removeItem(w()),localStorage.removeItem(m())}catch{}}var x=null,_=class{static isInstalled(){return"undefined"!=typeof window&&!!window.starkey?.supra}static initializeFromStorage(){if("undefined"==typeof window)return null;const t=S();if(t){const e=k();return x={walletAddress:t,connected:!0,chainId:e||void 0}}return null}static getWalletInfo(){return x||this.initializeFromStorage()}static async connect(t){if(!this.isInstalled())throw new Error("Starkey wallet is not installed");try{const e=t?.chainId||8,r={chainId:e},n=await window.starkey.supra.connect(r);if(!n||0===n.length)throw new Error("No accounts found or connection rejected");const a=n[0];return y(a,e),x={walletAddress:a,connected:!0,chainId:e}}catch(t){throw new Error(`Failed to connect to Starkey wallet: ${t instanceof Error?t.message:"Unknown error"}`)}}static async disconnect(){if(this.isInstalled())try{await window.starkey.supra.disconnect()}catch(t){}finally{v(),x=null}}static async getAccounts(){if(!this.isInstalled())throw new Error("Starkey wallet is not installed");try{return await window.starkey.supra.account()}catch(t){throw new Error(`Failed to get accounts: ${t instanceof Error?t.message:"Unknown error"}`)}}static async getNetwork(){if(!this.isInstalled())throw new Error("Starkey wallet is not installed");return window.starkey.supra.network()}static async getChainId(){if(!this.isInstalled())throw new Error("Starkey wallet is not installed");try{return await window.starkey.supra.getChainId()}catch(t){throw new Error(`Failed to get chain ID: ${t instanceof Error?t.message:"Unknown error"}`)}}static async getAccountInfo(){if(!this.isInstalled())throw new Error("Starkey wallet is not installed");try{if("function"==typeof window.starkey.supra.getAccountInfo){const t=await window.starkey.supra.getAccountInfo();if(t&&Array.isArray(t))return t}return(await window.starkey.supra.account()).map(t=>({address:t,publicKey:t}))}catch(t){throw new Error(`Failed to get account info: ${t instanceof Error?t.message:"Unknown error"}`)}}static async getPublicKey(t){if(!this.isInstalled())throw new Error("Starkey wallet is not installed");try{if("function"==typeof window.starkey.supra.getPublicKey)return await window.starkey.supra.getPublicKey(t);const e=await this.getAccountInfo(),r=t||e[0]?.address,n=e.find(t=>t.address===r);if(n?.publicKey&&n.publicKey!==n.address)return n.publicKey;throw new Error("Public key not available from wallet - StarKey wallet needs to provide actual public keys for signature verification")}catch(t){throw new Error(`Failed to get public key: ${t instanceof Error?t.message:"Unknown error"}`)}}static async getBalance(){if(!this.isInstalled())throw new Error("Starkey wallet is not installed");try{return await window.starkey.supra.balance()}catch(t){throw new Error(`Failed to get balance: ${t instanceof Error?t.message:"Unknown error"}`)}}static async signMessage(t,e=!1){if(!this.isInstalled())throw new Error("Starkey wallet is not installed");try{const n=e?t:"0x"+Array.from((new TextEncoder).encode(t)).map(t=>t.toString(16).padStart(2,"0")).join(""),a=await window.starkey.supra.signMessage({message:n});if(this.isErrorResponse(a)){if(r=a.error,4001===r?.code||r?.message&&(r.message.toLowerCase().includes("reject")||r.message.toLowerCase().includes("cancel")||r.message.toLowerCase().includes("denied")))return null;throw new Error(`Signing failed: ${a.error.message}`)}return a.signature}catch(r){if(f(r))return null;throw new Error(`Failed to sign message: ${h(r)}`)}var r}static async verifySignature(t,e,r,n=!1){try{if(!e.startsWith("0x")||130!==e.length)return!1;if(!r)return!1;const a=new Uint8Array(e.slice(2).match(/.{2}/g)?.map(t=>parseInt(t,16))||[]);if(64!==a.length)return!1;const o=n?new Uint8Array(t.slice(2).match(/.{2}/g)?.map(t=>parseInt(t,16))||[]):(new TextEncoder).encode(t);let i;if(!r.startsWith("0x"))throw new Error("Cannot verify signature: actual public key required, got address");if(i=new Uint8Array(r.slice(2).match(/.{2}/g)?.map(t=>parseInt(t,16))||[]),32!==i.length)return!1;return await s.verifyAsync(a,o,i)}catch(t){return!1}}static async getPublicKeyFromAddress(t){try{return await this.getPublicKey(t)}catch(e){throw new Error(`Cannot get public key for address ${t}: ${e instanceof Error?e.message:"Unknown error"}`)}}static async sendTransaction(t){if(!this.isInstalled())throw new Error("Starkey wallet is not installed");try{const{payload:e,options:r={}}=t,n={txExpiryTime:r.txExpiryTime||Math.ceil(Date.now()/1e3)+30,...r.maxGasAmount&&{maxGasAmount:r.maxGasAmount},...r.gasUnitPrice&&{gasUnitPrice:r.gasUnitPrice}},a=await this.getAccounts();if(!a||0===a.length)throw new Error("No connected accounts found");const o=[a[0],0,e.moduleAddress,e.moduleName,e.functionName,e.typeArguments||[],e.arguments,n];try{const t=await window.starkey.supra.createRawTransactionData(o);if(!t)throw new Error("Failed to create raw transaction data");const e={data:t},r=await window.starkey.supra.sendTransaction(e);if(!r)throw new Error("Transaction failed - no hash returned from Supra provider");return{success:!0,txHash:r}}catch(t){}return{success:!1,reason:"All transaction approaches failed",error:"No valid transaction format accepted by wallet"}}catch(t){if(t instanceof Error){const e=t.message.toLowerCase();if(e.includes("user rejected")||e.includes("user denied")||e.includes("user cancelled")||e.includes("cancelled by user"))return{success:!1,reason:"User cancelled transaction"}}return{success:!1,error:t instanceof Error?t.message:"Unknown error",reason:"Transaction failed"}}}static async transfer(t){const{to:e,amount:r,options:n,type:a}=t,o={payload:{moduleAddress:"0000000000000000000000000000000000000000000000000000000000000001",moduleName:"supra_account",functionName:a?"transfer_coins":"transfer",typeArguments:a?[a]:[],arguments:[new c(e).toUint8Array(),d.bcsSerializeUint64(BigInt(r))]},options:n};return this.sendTransaction(o)}static isErrorResponse(t){return t&&"string"==typeof t.jsonrpc&&"object"==typeof t.error}},C="supra",E="CONNECT_REQUEST",A="DISCONNECT_REQUEST",I="SIGN_MESSAGE",W="SEND_TRANSACTION",M="GET_WALLET_BALANCE",T="WALLET_CHANGED",B="NETWORK_CHANGED",D=8,R=class{static isAvailable(){return"undefined"!=typeof window&&!!window.ribbit&&"app"===window.ribbit.type}listen(){}async sendMessage(t,e){if("undefined"==typeof window)throw new Error("SSR mode");if(!window.ribbit||"app"!==window.ribbit.type)throw new Error("AppTransport: ribbit app not detected");return await window.ribbit.postMessage(t,e)}registerHandler(t,e){"undefined"!=typeof window&&window.ribbit?.on?.(t,e)}on(t,e){"undefined"!=typeof window&&window.ribbit?.on?.(t,e)}off(t,e){"undefined"!=typeof window&&window.ribbit?.off?.(t,e)}},N=class{static isAvailable(){return"undefined"!=typeof window&&!!window.ribbit&&"extension"===window.ribbit.type}listen(){}async sendMessage(t,e){if("undefined"==typeof window)throw new Error("SSR mode");if(!window.ribbit||"extension"!==window.ribbit.type)throw new Error("ExtensionTransport: ribbit extension not detected");return await window.ribbit.postMessage(t,e)}registerHandler(t,e){"undefined"!=typeof window&&window.ribbit?.on?.(t,e)}on(t,e){"undefined"!=typeof window&&window.ribbit?.on?.(t,e)}off(t,e){"undefined"!=typeof window&&window.ribbit?.off?.(t,e)}};function P(){return"undefined"==typeof window?"":window.location.origin||window.location.hostname}function z(){return`ribbit_connected_wallet::${P()}`}function U(){try{localStorage.removeItem(z()),localStorage.removeItem(`ribbit_accounts::${P()}`)}catch{}}var L=null,O=class{static initializeClient(){if("undefined"==typeof window)return null;if(!window.ribbit?.type)return null;if(!L){if(L={transport:null,wallet:null},"app"===window.ribbit.type)L.transport=new R;else{if("extension"!==window.ribbit.type)throw new Error(`Unknown ribbit type: ${window.ribbit.type}`);L.transport=new N}L.transport.listen();const t=function(){try{const t=localStorage.getItem(z());if(t){const{address:e,expiry:r}=JSON.parse(t);return Date.now()<r?e:(U(),null)}return null}catch{return null}}();t&&(L.wallet={walletAddress:t,connected:!0})}return L}static isInstalled(){return"undefined"!=typeof window&&!!window.ribbit}static getWalletType(){return this.isInstalled()?window.ribbit.type:null}static setDefaultDappMetadata(t){this.defaultDappMetadata={...this.defaultDappMetadata,...t}}static getDefaultDappMetadata(){return{...this.defaultDappMetadata}}static async connect(t){if(!this.isInstalled())throw new Error("Ribbit wallet is not installed");const e={name:t?.name||this.defaultDappMetadata.name,url:t?.url||this.defaultDappMetadata.url,description:t?.description||this.defaultDappMetadata.description,logo:t?.logo||this.defaultDappMetadata.logo},r=this.initializeClient();if(!r||!r.transport)throw new Error("No transport available");const n=await r.transport.sendMessage(E,{dapp:e}),a="data"in n?n.data:n;if(!a?.approved||!("accounts"in a)||!a.accounts?.length)throw new Error(`Connection to wallet failed: ${a?.error||"Unknown error"}`);const o=a.accounts.filter(t=>t.chain===C)[0]?.walletAddress;if(void 0===o)throw new Error("No wallet address found");const i=D;return r.wallet={walletAddress:o,connected:!0,chainId:i,allAccounts:a.accounts},function(t,e,r=10){try{const e=Date.now()+24*r*60*60*1e3,n=z(),a=JSON.stringify({address:t,expiry:e});localStorage.setItem(n,a)}catch(t){}}(o),r.wallet}static async disconnect(){const t=this.initializeClient();t&&(t.wallet=null,U(),t.transport&&await t.transport.sendMessage(A,{}))}static getWalletInfo(){const t=this.initializeClient();return t?.wallet||null}static async getWalletBalance(t){const e=this.initializeClient();if(!e||!e.transport)throw new Error("No transport available");if(!e.wallet)throw new Error("Not connected");const{chainId:r,resourceType:n,decimals:a}=t;return e.transport.sendMessage(M,{chainId:r,resourceType:n,decimals:a})}static async signMessage(t){const e=this.initializeClient();if(!e||!e.transport)throw new Error("No transport available");if(!e.wallet)throw new Error("Not connected");try{const r=await e.transport.sendMessage(I,t);return r?.error&&(4001===r.error.code||r.error.message?.toLowerCase().includes("reject")||r.error.message?.toLowerCase().includes("cancel")||r.error.message?.toLowerCase().includes("denied"))?null:r}catch(t){if(f(t))return null;throw t}}static async sendTransaction(t){const e=this.initializeClient();if(!e||!e.transport)throw new Error("No transport available");if(!e.wallet)throw new Error("Wallet not connected");try{let r;if("payload"in t){const n=t,a=(n.payload.typeArguments||[]).map(t=>"string"==typeof t?new l.TypeTagParser(t).parseTypeTag():t),o=n.payload.arguments.map(t=>t instanceof Uint8Array?Array.from(t):t),i=l.EntryFunction.natural(`${n.payload.moduleAddress}::${n.payload.moduleName}`,n.payload.functionName,a,o),s=new l.TransactionPayloadEntryFunction(i),u="https://rpc-mainnet.supra.com/rpc/v3";let p=BigInt(0),g={max_gas_price:200,mean_gas_price:100};try{const t=await fetch(`${u}/accounts/${encodeURIComponent(e.wallet.walletAddress)}`);if(t.ok){const e=await t.json();p=BigInt(e.sequence_number||0)}}catch(t){}try{const t=await fetch(`${u}/transactions/estimate_gas_price`);t.ok&&(g=await t.json())}catch(t){}const h=BigInt(Math.floor(Date.now()/1e3)+300),f=new l.RawTransaction(l.AccountAddress.fromHex(new c(e.wallet.walletAddress)),p,s,BigInt(Math.floor(50*g.max_gas_price)),BigInt(g.mean_gas_price),h,new l.ChainId(e.wallet.chainId||D)),b=d.bcsToBytes(f);let w;if("undefined"!=typeof Buffer)w=Buffer.from(b).toString("base64");else{if("undefined"==typeof btoa)throw new Error("Cannot encode to base64: no Buffer or btoa available");w=btoa(String.fromCharCode(...Array.from(b)))}r={rawTxn:w,chainId:e.wallet.chainId||D,meta:{description:`${n.payload.functionName} on ${n.payload.moduleName}`}}}else r=t;const n=await e.transport.sendMessage(W,r);return n?.txHash||n?.transactionHash||n?.hash?{success:!0,txHash:n.txHash||n.transactionHash||n.hash}:n?.error?{success:!1,error:n.error,reason:"Transaction failed"}:"string"==typeof n?{success:!0,txHash:n}:{success:!1,error:"Unknown response format from wallet",reason:"Transaction failed"}}catch(t){return f(t)?{success:!1,reason:"User cancelled transaction"}:{success:!1,error:h(t),reason:"Transaction failed"}}}static async transfer(t){const{to:e,amount:r,options:n}=t,a={payload:{moduleAddress:"0000000000000000000000000000000000000000000000000000000000000001",moduleName:"supra_account",functionName:"transfer",typeArguments:[],arguments:[new c(e).toUint8Array(),d.bcsSerializeUint64(BigInt(r))]},options:n};return this.sendTransaction(a)}static onWalletChanged(t){const e=this.initializeClient();e?.transport?.on?.(T,t)}static onNetworkChanged(t){const e=this.initializeClient();e?.transport?.on?.(B,t)}static offWalletChanged(t){const e=this.initializeClient();e?.transport?.off?.(T,t)}static offNetworkChanged(t){const e=this.initializeClient();e?.transport?.off?.(B,t)}static async getPublicKey(t){const e=this.initializeClient();if(!e||!e.transport)throw new Error("No transport available");if(!e.wallet)throw new Error("Not connected");try{const r=await e.transport.sendMessage("GET_PUBLIC_KEY",{address:t||e.wallet.walletAddress});if(r?.publicKey)return r.publicKey;throw new Error("Public key not available from wallet")}catch(t){throw new Error(`Failed to get public key: ${t instanceof Error?t.message:"Unknown error"}`)}}static async verifySignature(t,e,r,n=!1){try{if(!e||!e.startsWith("0x")&&e.length<128)return!1;if(!r)return!1;let a;if(a=e.startsWith("0x")?new Uint8Array(e.slice(2).match(/.{2}/g)?.map(t=>parseInt(t,16))||[]):new Uint8Array(e.match(/.{2}/g)?.map(t=>parseInt(t,16))||[]),64!==a.length)return!1;const o=n?new Uint8Array(t.slice(2).match(/.{2}/g)?.map(t=>parseInt(t,16))||[]):(new TextEncoder).encode(t);let i;if(r.startsWith("0x"))i=new Uint8Array(r.slice(2).match(/.{2}/g)?.map(t=>parseInt(t,16))||[]);else{if(64!==r.length)throw new Error("Invalid public key format");i=new Uint8Array(r.match(/.{2}/g)?.map(t=>parseInt(t,16))||[])}if(32!==i.length)return!1;return await s.verifyAsync(a,o,i)}catch(t){return!1}}static async getPublicKeyFromAddress(t){try{return await this.getPublicKey(t)}catch(e){throw new Error(`Cannot get public key for address ${t}: ${e instanceof Error?e.message:"Unknown error"}`)}}};O.defaultDappMetadata={name:"Supra Connect",url:"undefined"!=typeof window?window.location.origin:"https://supra.com",description:"Connect to Supra blockchain wallets",logo:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEwIDJMMTcgNkwxNyAxNEwxMCAxOEwzIDE0TDMgNkwxMCAyWiIgZmlsbD0iI0REMTQzOCIvPgo8L3N2Zz4K"};var j="https://rpc-mainnet.supra.com",F=class{constructor(t=j){this.state={connectedWallet:null,allAccounts:[],isConnecting:!1,connectingWallet:null,connectionError:null,availableWallets:[]},this.listeners=new Set,this.globalMetadata={},this.storeId=Math.random().toString(36).substring(2,9),this.rpcUrl=t,"undefined"!=typeof window&&(this.updateAvailableWallets(),this.setupPeriodicWalletDetection(),setTimeout(()=>{this.checkExistingConnections().catch(()=>{})},100))}updateAvailableWallets(){const t=[];_.isInstalled()&&t.push("starkey"),O.isInstalled()&&t.push("ribbit");const e=this.state.availableWallets;t.length===e.length&&t.every(t=>e.includes(t))||this.setState({availableWallets:t})}setupPeriodicWalletDetection(){const t=setInterval(()=>{this.updateAvailableWallets()},1e3);setTimeout(()=>{clearInterval(t)},3e4),"loading"===document.readyState&&document.addEventListener("DOMContentLoaded",()=>{setTimeout(()=>this.updateAvailableWallets(),500)}),window.addEventListener("load",()=>{setTimeout(()=>this.updateAvailableWallets(),1e3)})}async checkExistingConnections(){const t=O.getWalletInfo();if(t)return void this.setState({connectedWallet:{...t,type:"ribbit"},allAccounts:t.allAccounts||[{walletAddress:t.walletAddress,chain:"supra"}]});const e=_.getWalletInfo();if(e)this.setState({connectedWallet:{...e,type:"starkey"},allAccounts:[{walletAddress:e.walletAddress,chain:"supra"}]});else if(_.isInstalled())try{const t=await _.getAccounts();if(t&&t.length>0)return void this.setState({connectedWallet:{walletAddress:t[0],connected:!0,type:"starkey"},allAccounts:[{walletAddress:t[0],chain:"supra"}]})}catch(t){}}setState(t){this.state={...this.state,...t},this.listeners.forEach(t=>t(this.state))}getState(){return{...this.state}}subscribe(t){return this.listeners.add(t),()=>{this.listeners.delete(t)}}async connectStarkey(t){if(!this.state.connectingWallet){this.setState({connectingWallet:"starkey",connectionError:null});try{const e=this.mergeMetadata(t?.dappMetadata),r=Object.keys(e).length>0?{name:e.name||"Supra Connect",url:e.url||("undefined"!=typeof window?window.location.origin:"https://supra.com"),chainId:e.chainId}:void 0,n=await _.connect(r);this.setState({connectedWallet:{...n,type:"starkey"},allAccounts:[{walletAddress:n.walletAddress,chain:"supra"}],connectingWallet:null,isConnecting:!1,connectionError:null})}catch(t){throw this.setState({connectionError:t instanceof Error?t.message:"Failed to connect to Starkey wallet",connectingWallet:null,isConnecting:!1}),t}}}async connectRibbit(t){if(!this.state.connectingWallet){this.setState({connectingWallet:"ribbit",connectionError:null});try{const e=this.mergeMetadata(t?.dappMetadata),r=Object.keys(e).length>0?{name:e.name,url:e.url,description:e.description,logo:e.logo}:void 0,n=await O.connect(r);this.setState({connectedWallet:{...n,type:"ribbit"},allAccounts:n.allAccounts||[{walletAddress:n.walletAddress,chain:"supra"}],connectingWallet:null,isConnecting:!1,connectionError:null})}catch(t){throw this.setState({connectionError:t instanceof Error?t.message:"Failed to connect to Ribbit wallet",connectingWallet:null,isConnecting:!1}),t}}}async disconnect(){if(this.state.connectedWallet)try{"starkey"===this.state.connectedWallet.type?await _.disconnect():"ribbit"===this.state.connectedWallet.type&&await O.disconnect(),this.setState({connectedWallet:null,allAccounts:[],connectionError:null})}catch(t){this.setState({connectedWallet:null,allAccounts:[],connectionError:null})}}getPublicAddress(t="supra"){if(!this.state.connectedWallet)return null;if(this.state.allAccounts.length>0){const e=this.state.allAccounts.find(e=>e.chain===t);return e?.walletAddress||null}return this.state.connectedWallet.walletAddress||null}getPublicAddresses(){return this.state.allAccounts.length>0?this.state.allAccounts.map(t=>t.walletAddress):this.state.connectedWallet?[this.state.connectedWallet.walletAddress]:[]}async signMessage(t){if(!this.state.connectedWallet)return{success:!1,reason:"No wallet connected"};try{let e=null;if("starkey"===this.state.connectedWallet.type)e=await _.signMessage(t);else{if("ribbit"!==this.state.connectedWallet.type)return{success:!1,reason:"Unsupported wallet type"};{const r=await O.signMessage({message:t});e=null===r?null:r.signature||r}}if(null===e)return{success:!1,reason:"User cancelled"};try{return await this.verifySignature(t,e)?{success:!0,signature:e}:{success:!1,reason:"Signature verification failed"}}catch(t){return{success:!0,signature:e,reason:"Signature obtained but verification failed"}}}catch(t){return{success:!1,reason:t instanceof Error?t.message:"Failed to sign message"}}}clearError(){this.setState({connectionError:null})}async refreshConnections(){await this.checkExistingConnections()}setDappMetadata(t){this.globalMetadata={...this.globalMetadata,...t}}getDappMetadata(){return{...this.globalMetadata}}clearDappMetadata(){this.globalMetadata={}}refreshWalletDetection(){this.updateAvailableWallets()}getRpcUrl(){return this.rpcUrl}mergeMetadata(t){return{...this.globalMetadata,...t}}async verifySignature(t,e){if(!this.state.connectedWallet)throw new Error("No wallet connected");try{if("starkey"===this.state.connectedWallet.type){const r=await _.getPublicKeyFromAddress(this.state.connectedWallet.walletAddress);return await _.verifySignature(t,e,r)}if("ribbit"===this.state.connectedWallet.type){const r=await O.getPublicKeyFromAddress(this.state.connectedWallet.walletAddress);return await O.verifySignature(t,e,r)}throw new Error("Unsupported wallet type")}catch(t){throw new Error(t instanceof Error?t.message:"Failed to verify signature")}}async sendTransaction(t){if(!this.state.connectedWallet)return{success:!1,reason:"No wallet connected"};try{return"starkey"===this.state.connectedWallet.type?await _.sendTransaction(t):"ribbit"===this.state.connectedWallet.type?await O.sendTransaction(t):{success:!1,reason:"Unsupported wallet type"}}catch(t){return{success:!1,error:t instanceof Error?t.message:"Failed to send transaction",reason:"Transaction failed"}}}async transfer(t){if(!this.state.connectedWallet)return{success:!1,reason:"No wallet connected"};try{return"starkey"===this.state.connectedWallet.type?await _.transfer(t):"ribbit"===this.state.connectedWallet.type?await O.transfer(t):{success:!1,reason:"Unsupported wallet type"}}catch(t){return{success:!1,error:t instanceof Error?t.message:"Failed to send transfer",reason:"Transfer failed"}}}static async estimateGasPrice(t="testnet"){const e="mainnet"===t?"https://rpc-mainnet.supra.com":"https://rpc-testnet.supra.com";try{const t=await fetch(`${e}/rpc/v2/transactions/estimate_gas_price`);if(t.ok)return await t.json();const r=await fetch(`${e}/rpc/v1/transactions/estimate_gas_price`);if(r.ok){const t=await r.json();return{mean_gas_price:t.gas_estimate||t.mean_gas_price||100,max_gas_price:t.max_gas_price||2*(t.gas_estimate||100),median_gas_price:t.median_gas_price||t.gas_estimate||100}}throw new Error("Both gas estimation endpoints failed")}catch(t){return{mean_gas_price:100,max_gas_price:200,median_gas_price:100}}}static async getRecommendedGasSettings(t="testnet"){try{const e=await this.estimateGasPrice(t),r=Math.max(1.2*e.mean_gas_price,100);return{gasUnitPrice:Math.ceil(r).toString(),maxGasAmount:"200000"}}catch(t){return{gasUnitPrice:"100",maxGasAmount:"200000"}}}};"undefined"!=typeof window?(window.__supraConnectStore||(window.__supraConnectStore=new F),window.__supraConnectStore):(global.__supraConnectStore||(global.__supraConnectStore=new F),global.__supraConnectStore);var $=e(void 0);function G({children:e,rpcUrl:r=j}){const n=t.useMemo(()=>new F(r),[r]);return u($.Provider,{value:n,children:e})}function Z(){const t=o($);if(!t)throw new Error("useSupraConnectStore must be used within a SupraConnectProvider. Make sure to wrap your app with <SupraConnectProvider>.</SupraConnectProvider>");return t}function H(){const t=Z(),[e,o]=r(()=>t.getState());n(()=>t.subscribe(o),[t]);const i=a(async()=>{await t.connectStarkey()},[t]),s=a(async()=>{await t.connectRibbit()},[t]),l=a(async()=>{await t.disconnect()},[t]),c=a(e=>t.getPublicAddress(e),[t]),d=a(()=>t.getPublicAddresses(),[t]),u=a(()=>e.allAccounts,[e.allAccounts]),p=a(async e=>t.signMessage(e),[t]),g=a(async e=>t.sendTransaction(e),[t]),h=a(async e=>t.transfer(e),[t]),f=a(()=>{t.clearError()},[t]),b=a(()=>{t.refreshWalletDetection()},[t]),w=a(()=>t.getRpcUrl(),[t]),m=a(e=>{t.setDappMetadata(e)},[t]),y=a(()=>t.getDappMetadata(),[t]),S=a(()=>{t.clearDappMetadata()},[t]);return{connectedWallet:e.connectedWallet,isConnected:!!e.connectedWallet,isConnecting:e.isConnecting,connectionError:e.connectionError,availableWallets:e.availableWallets,connectStarkey:i,connectRibbit:s,disconnect:l,getPublicAddress:c,getPublicAddresses:d,getAllAccounts:u,signMessage:p,sendTransaction:g,transfer:h,clearError:f,refreshWalletDetection:b,getRpcUrl:w,setDappMetadata:m,getDappMetadata:y,clearDappMetadata:S}}var K=({width:t=24,height:e=24})=>p("svg",{width:t,height:e,viewBox:"0 0 70 70",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[u("circle",{cx:"35",cy:"35",r:"35",fill:"#dd1438"}),u("path",{d:"M54.81,17.92A16.52,16.52,0,0,0,51,12.34a18.51,18.51,0,0,0-5.68-3.63,16.57,16.57,0,0,0-4.45-1.09,17.21,17.21,0,0,0-18.7,22.47v.05h0A17.12,17.12,0,0,0,18.69,33,17.92,17.92,0,0,0,15,38.76a18.45,18.45,0,0,0-1.21,6.71,16.48,16.48,0,0,0,1.4,6.61A16.66,16.66,0,0,0,19,57.66a18.67,18.67,0,0,0,5.69,3.63,17.23,17.23,0,0,0,6,1.2H31A17.26,17.26,0,0,0,47.58,40a17.34,17.34,0,0,0,3.69-3A17.9,17.9,0,0,0,55,31.25a18.34,18.34,0,0,0,1.22-6.72,16.49,16.49,0,0,0-1.41-6.61ZM39.73,19.16a6.61,6.61,0,0,1-.17-1.65,8.39,8.39,0,0,1,1.82.52,5.92,5.92,0,0,1,2.14,1.57,7.23,7.23,0,0,1,1.3,2.25,7.35,7.35,0,0,1,.38,2.52,6.49,6.49,0,0,1-1.91,4.23ZM43.8,29.94c.11-.1.22-.21.32-.32a7.47,7.47,0,0,0,1.57-2.52,7.82,7.82,0,0,0,.46-2.9,6.69,6.69,0,0,0-.65-2.79,8,8,0,0,0-1.68-2.24,6.548,6.548,0,0,0-4.27-1.77,7.29,7.29,0,0,1,.82-3.13,9.4,9.4,0,0,1,2.2.7,10.63,10.63,0,0,1,3.25,2.33,12.31,12.31,0,0,1,2.06,3.36,10.64,10.64,0,0,1,.65,3.81,8.21,8.21,0,0,1-.84,3.74,8.16,8.16,0,0,1-2.14,3.06,7.74,7.74,0,0,1-1,.75Zm1.27,3.35a11.84,11.84,0,0,0,1.37-1.18,11.43,11.43,0,0,0,3-7.82,10.28,10.28,0,0,0-.92-4.09,10.05,10.05,0,0,0-2.41-3.36,10.36,10.36,0,0,0-3.44-2.14,11.08,11.08,0,0,0-2.26-.53,6.86,6.86,0,0,1,1.22-1.64,6.76,6.76,0,0,1,1.24-1,9,9,0,0,1,1,.41,12.5,12.5,0,0,1,4.28,3A13.61,13.61,0,0,1,51,19.33a14.22,14.22,0,0,1,.92,5.12,14.86,14.86,0,0,1-1.11,5,13.56,13.56,0,0,1-2.9,4.08,11.72,11.72,0,0,1-2.08,1.67ZM26.88,58.37a7.38,7.38,0,0,1-.82-.33,12.5,12.5,0,0,1-4.28-3A13.61,13.61,0,0,1,19,50.67a14.22,14.22,0,0,1-.92-5.12,14.81,14.81,0,0,1,1.11-5,13.6,13.6,0,0,1,2.9-4.09A12.7,12.7,0,0,1,24,34.87l.76,2a12.48,12.48,0,0,0-1.23,1.06,11.12,11.12,0,0,0-2.24,3.63,11,11,0,0,0-.76,4.2,10.32,10.32,0,0,0,.92,4.09,10.53,10.53,0,0,0,5.85,5.49,11.07,11.07,0,0,0,2,.51,7.36,7.36,0,0,1-1.18,1.56,7,7,0,0,1-1.24.96ZM27.39,55a10.63,10.63,0,0,1-3.25-2.33,12.41,12.41,0,0,1-2.06-3.35,10.73,10.73,0,0,1-.65-3.82,8.21,8.21,0,0,1,.84-3.74,8.16,8.16,0,0,1,2.14-3.06,8.4,8.4,0,0,1,.8-.65L26,40.19l-.19.19a7.47,7.47,0,0,0-1.57,2.52,7.82,7.82,0,0,0-.46,2.9,6.69,6.69,0,0,0,.65,2.79,8,8,0,0,0,1.68,2.24,7,7,0,0,0,2.33,1.41,6.53,6.53,0,0,0,1.77.34,7.13,7.13,0,0,1-.86,3.11A9.3,9.3,0,0,1,27.39,55Zm2.71-4.22a7.76,7.76,0,0,1,.14,1.66,8.81,8.81,0,0,1-1.66-.5,5.92,5.92,0,0,1-2.14-1.57,7.23,7.23,0,0,1-1.3-2.25,7.35,7.35,0,0,1-.38-2.52,6.54,6.54,0,0,1,1.78-4.1Zm-14.28,1a18.45,18.45,0,0,1-1.11-6.33,18.18,18.18,0,0,1,1.41-6.23,16.76,16.76,0,0,1,3.63-5.23,15,15,0,0,1,3-2.31l.56,1.48a13.09,13.09,0,0,0-2.41,2A14.12,14.12,0,0,0,18,40a15.85,15.85,0,0,0-.92,5.5,15.34,15.34,0,0,0,1.22,5.39A14.16,14.16,0,0,0,26,58.23c.24.09.49.16.74.24a7.74,7.74,0,0,1-3.65,1.06,5.79,5.79,0,0,1-1.38-.16,15.94,15.94,0,0,1-2.32-2,16.25,16.25,0,0,1-3.57-5.51Zm38-21.16a16.76,16.76,0,0,1-3.63,5.23A15.07,15.07,0,0,1,47,38.35l-.56-1.48a12.48,12.48,0,0,0,2.6-2.1A14,14,0,0,0,52,30a15.85,15.85,0,0,0,.92-5.5,15.34,15.34,0,0,0-1.22-5.39A14.16,14.16,0,0,0,44,11.77c-.31-.12-.64-.21-1-.31a7.22,7.22,0,0,1,5.25-.83,16.57,16.57,0,0,1,2.32,2,16.25,16.25,0,0,1,3.55,5.5,18.49,18.49,0,0,1,1.11,6.33,18.18,18.18,0,0,1-1.39,6.24Z",fill:"#fff"})]});function X(t){return"object"==typeof t&&null!=t&&!Array.isArray(t)}function Y(t){return String.fromCharCode(t+(t>25?39:97))}function V(t){return function(t){let e,r="";for(e=Math.abs(t);e>52;e=e/52|0)r=Y(e%52)+r;return Y(e%52)+r}(function(t,e){let r=e.length;for(;r;)t=33*t^e.charCodeAt(--r);return t}(5381,t)>>>0)}var q=/\s*!(important)?/i;function J(t){return"string"==typeof t?t.replaceAll(" ","_"):t}var Q=t=>{const e=new Map;return(...r)=>{const n=JSON.stringify(r);if(e.has(n))return e.get(n);const a=t(...r);return e.set(n,a),a}},tt=new Set(["__proto__","constructor","prototype"]);function et(...t){return t.reduce((t,e)=>e?(Object.keys(e).forEach(r=>{if(tt.has(r))return;const n=t[r],a=e[r];X(n)&&X(a)?t[r]=et(n,a):t[r]=a}),t):t,{})}var rt=t=>null!=t;function nt(t,e,r={}){const{stop:n,getKey:a}=r;return function t(r,o=[]){if("object"==typeof(i=r)&&null!==i){const i={};for(const[s,l]of Object.entries(r)){const c=a?.(s,l)??s,d=[...o,c];if(n?.(r,d))return e(r,o);const u=t(l,d);rt(u)&&(i[c]=u)}return i}var i;return e(r,o)}(t)}function at(t,e,r=!0){const{utility:n,conditions:a}=e,{hasShorthand:o,resolveShorthand:i}=n;return nt(t,t=>{return Array.isArray(t)?(e=t,r=a.breakpoints.keys,e.reduce((t,e,n)=>{const a=r[n];return null!=e&&(t[a]=e),t},{})):t;var e,r},{stop:t=>Array.isArray(t),getKey:r?t=>o?i(t):t:void 0})}var ot={shift:t=>t,finalize:t=>t,breakpoints:{keys:[]}};function it(...t){return t.flat().filter(t=>{return X(t)&&Object.keys((e=t,Object.fromEntries(Object.entries(e??{}).filter(([t,e])=>void 0!==e)))).length>0;var e})}var st=/([A-Z])/g,lt=/^ms-/,ct=Q(t=>t.startsWith("--")?t:t.replace(st,"-$1").replace(lt,"-ms-").toLowerCase());"cm,mm,Q,in,pc,pt,px,em,ex,ch,rem,lh,rlh,vw,vh,vmin,vmax,vb,vi,svw,svh,lvw,lvh,dvw,dvh,cqw,cqh,cqi,cqb,cqmin,cqmax,%".split(",").join("|");var dt=new Set("_hover,_focus,_focusWithin,_focusVisible,_disabled,_active,_visited,_target,_readOnly,_readWrite,_empty,_checked,_enabled,_expanded,_highlighted,_complete,_incomplete,_dragging,_before,_after,_firstLetter,_firstLine,_marker,_selection,_file,_backdrop,_first,_last,_only,_even,_odd,_firstOfType,_lastOfType,_onlyOfType,_peerFocus,_peerHover,_peerActive,_peerFocusWithin,_peerFocusVisible,_peerDisabled,_peerChecked,_peerInvalid,_peerExpanded,_peerPlaceholderShown,_groupFocus,_groupHover,_groupActive,_groupFocusWithin,_groupFocusVisible,_groupDisabled,_groupChecked,_groupExpanded,_groupInvalid,_indeterminate,_required,_valid,_invalid,_autofill,_inRange,_outOfRange,_placeholder,_placeholderShown,_pressed,_selected,_grabbed,_underValue,_overValue,_atValue,_default,_optional,_open,_closed,_fullscreen,_loading,_hidden,_current,_currentPage,_currentStep,_today,_unavailable,_rangeStart,_rangeEnd,_now,_topmost,_motionReduce,_motionSafe,_print,_landscape,_portrait,_dark,_light,_osDark,_osLight,_highContrast,_lessContrast,_moreContrast,_ltr,_rtl,_scrollbar,_scrollbarThumb,_scrollbarTrack,_horizontal,_vertical,_icon,_starting,_noscript,_invertedColors,sm,smOnly,smDown,md,mdOnly,mdDown,lg,lgOnly,lgDown,xl,xlOnly,xlDown,2xl,2xlOnly,2xlDown,smToMd,smToLg,smToXl,smTo2xl,mdToLg,mdToXl,mdTo2xl,lgToXl,lgTo2xl,xlTo2xl,@/xs,@/sm,@/md,@/lg,@/xl,@/2xl,@/3xl,@/4xl,@/5xl,@/6xl,@/7xl,@/8xl,base".split(",")),ut=/^@|&|&$/;function pt(t){return dt.has(t)||ut.test(t)}var gt=/^_/,ht=/&|@/;var ft=new Map,bt=new Map;"aspectRatio:asp,boxDecorationBreak:bx-db,zIndex:z,boxSizing:bx-s,objectPosition:obj-p,objectFit:obj-f,overscrollBehavior:ovs-b,overscrollBehaviorX:ovs-bx,overscrollBehaviorY:ovs-by,position:pos/1,top:top,left:left,inset:inset,insetInline:inset-x/insetX,insetBlock:inset-y/insetY,insetBlockEnd:inset-be,insetBlockStart:inset-bs,insetInlineEnd:inset-e/insetEnd/end,insetInlineStart:inset-s/insetStart/start,right:right,bottom:bottom,float:float,visibility:vis,display:d,hideFrom:hide,hideBelow:show,flexBasis:flex-b,flex:flex,flexDirection:flex-d/flexDir,flexGrow:flex-g,flexShrink:flex-sh,gridTemplateColumns:grid-tc,gridTemplateRows:grid-tr,gridColumn:grid-c,gridRow:grid-r,gridColumnStart:grid-cs,gridColumnEnd:grid-ce,gridAutoFlow:grid-af,gridAutoColumns:grid-ac,gridAutoRows:grid-ar,gap:gap,gridGap:grid-g,gridRowGap:grid-rg,gridColumnGap:grid-cg,rowGap:rg,columnGap:cg,justifyContent:jc,alignContent:ac,alignItems:ai,alignSelf:as,padding:p/1,paddingLeft:pl/1,paddingRight:pr/1,paddingTop:pt/1,paddingBottom:pb/1,paddingBlock:py/1/paddingY,paddingBlockEnd:pbe,paddingBlockStart:pbs,paddingInline:px/paddingX/1,paddingInlineEnd:pe/1/paddingEnd,paddingInlineStart:ps/1/paddingStart,marginLeft:ml/1,marginRight:mr/1,marginTop:mt/1,marginBottom:mb/1,margin:m/1,marginBlock:my/1/marginY,marginBlockEnd:mbe,marginBlockStart:mbs,marginInline:mx/1/marginX,marginInlineEnd:me/1/marginEnd,marginInlineStart:ms/1/marginStart,spaceX:sx,spaceY:sy,outlineWidth:ring-w/ringWidth,outlineColor:ring-c/ringColor,outline:ring/1,outlineOffset:ring-o/ringOffset,focusRing:focus-ring,focusVisibleRing:focus-v-ring,focusRingColor:focus-ring-c,focusRingOffset:focus-ring-o,focusRingWidth:focus-ring-w,focusRingStyle:focus-ring-s,divideX:dvd-x,divideY:dvd-y,divideColor:dvd-c,divideStyle:dvd-s,width:w/1,inlineSize:w-is,minWidth:min-w/minW,minInlineSize:min-w-is,maxWidth:max-w/maxW,maxInlineSize:max-w-is,height:h/1,blockSize:h-bs,minHeight:min-h/minH,minBlockSize:min-h-bs,maxHeight:max-h/maxH,maxBlockSize:max-b,boxSize:size,color:c,fontFamily:ff,fontSize:fs,fontSizeAdjust:fs-a,fontPalette:fp,fontKerning:fk,fontFeatureSettings:ff-s,fontWeight:fw,fontSmoothing:fsmt,fontVariant:fv,fontVariantAlternates:fv-alt,fontVariantCaps:fv-caps,fontVariationSettings:fv-s,fontVariantNumeric:fv-num,letterSpacing:ls,lineHeight:lh,textAlign:ta,textDecoration:td,textDecorationColor:td-c,textEmphasisColor:te-c,textDecorationStyle:td-s,textDecorationThickness:td-t,textUnderlineOffset:tu-o,textTransform:tt,textIndent:ti,textShadow:tsh,textShadowColor:tsh-c/textShadowColor,textOverflow:tov,verticalAlign:va,wordBreak:wb,textWrap:tw,truncate:trunc,lineClamp:lc,listStyleType:li-t,listStylePosition:li-pos,listStyleImage:li-img,listStyle:li-s,backgroundPosition:bg-p/bgPosition,backgroundPositionX:bg-p-x/bgPositionX,backgroundPositionY:bg-p-y/bgPositionY,backgroundAttachment:bg-a/bgAttachment,backgroundClip:bg-cp/bgClip,background:bg/1,backgroundColor:bg-c/bgColor,backgroundOrigin:bg-o/bgOrigin,backgroundImage:bg-i/bgImage,backgroundRepeat:bg-r/bgRepeat,backgroundBlendMode:bg-bm/bgBlendMode,backgroundSize:bg-s/bgSize,backgroundGradient:bg-grad/bgGradient,backgroundLinear:bg-linear/bgLinear,backgroundRadial:bg-radial/bgRadial,backgroundConic:bg-conic/bgConic,textGradient:txt-grad,gradientFromPosition:grad-from-pos,gradientToPosition:grad-to-pos,gradientFrom:grad-from,gradientTo:grad-to,gradientVia:grad-via,gradientViaPosition:grad-via-pos,borderRadius:bdr/rounded,borderTopLeftRadius:bdr-tl/roundedTopLeft,borderTopRightRadius:bdr-tr/roundedTopRight,borderBottomRightRadius:bdr-br/roundedBottomRight,borderBottomLeftRadius:bdr-bl/roundedBottomLeft,borderTopRadius:bdr-t/roundedTop,borderRightRadius:bdr-r/roundedRight,borderBottomRadius:bdr-b/roundedBottom,borderLeftRadius:bdr-l/roundedLeft,borderStartStartRadius:bdr-ss/roundedStartStart,borderStartEndRadius:bdr-se/roundedStartEnd,borderStartRadius:bdr-s/roundedStart,borderEndStartRadius:bdr-es/roundedEndStart,borderEndEndRadius:bdr-ee/roundedEndEnd,borderEndRadius:bdr-e/roundedEnd,border:bd,borderWidth:bd-w,borderTopWidth:bd-t-w,borderLeftWidth:bd-l-w,borderRightWidth:bd-r-w,borderBottomWidth:bd-b-w,borderBlockStartWidth:bd-bs-w,borderBlockEndWidth:bd-be-w,borderColor:bd-c,borderInline:bd-x/borderX,borderInlineWidth:bd-x-w/borderXWidth,borderInlineColor:bd-x-c/borderXColor,borderBlock:bd-y/borderY,borderBlockWidth:bd-y-w/borderYWidth,borderBlockColor:bd-y-c/borderYColor,borderLeft:bd-l,borderLeftColor:bd-l-c,borderInlineStart:bd-s/borderStart,borderInlineStartWidth:bd-s-w/borderStartWidth,borderInlineStartColor:bd-s-c/borderStartColor,borderRight:bd-r,borderRightColor:bd-r-c,borderInlineEnd:bd-e/borderEnd,borderInlineEndWidth:bd-e-w/borderEndWidth,borderInlineEndColor:bd-e-c/borderEndColor,borderTop:bd-t,borderTopColor:bd-t-c,borderBottom:bd-b,borderBottomColor:bd-b-c,borderBlockEnd:bd-be,borderBlockEndColor:bd-be-c,borderBlockStart:bd-bs,borderBlockStartColor:bd-bs-c,opacity:op,boxShadow:bx-sh/shadow,boxShadowColor:bx-sh-c/shadowColor,mixBlendMode:mix-bm,filter:filter,brightness:brightness,contrast:contrast,grayscale:grayscale,hueRotate:hue-rotate,invert:invert,saturate:saturate,sepia:sepia,dropShadow:drop-shadow,blur:blur,backdropFilter:bkdp,backdropBlur:bkdp-blur,backdropBrightness:bkdp-brightness,backdropContrast:bkdp-contrast,backdropGrayscale:bkdp-grayscale,backdropHueRotate:bkdp-hue-rotate,backdropInvert:bkdp-invert,backdropOpacity:bkdp-opacity,backdropSaturate:bkdp-saturate,backdropSepia:bkdp-sepia,borderCollapse:bd-cl,borderSpacing:bd-sp,borderSpacingX:bd-sx,borderSpacingY:bd-sy,tableLayout:tbl,transitionTimingFunction:trs-tmf,transitionDelay:trs-dly,transitionDuration:trs-dur,transitionProperty:trs-prop,transition:trs,animation:anim,animationName:anim-n,animationTimingFunction:anim-tmf,animationDuration:anim-dur,animationDelay:anim-dly,animationPlayState:anim-ps,animationComposition:anim-comp,animationFillMode:anim-fm,animationDirection:anim-dir,animationIterationCount:anim-ic,animationRange:anim-r,animationState:anim-s,animationRangeStart:anim-rs,animationRangeEnd:anim-re,animationTimeline:anim-tl,transformOrigin:trf-o,transformBox:trf-b,transformStyle:trf-s,transform:trf,rotate:rotate,rotateX:rotate-x,rotateY:rotate-y,rotateZ:rotate-z,scale:scale,scaleX:scale-x,scaleY:scale-y,translate:translate,translateX:translate-x/x,translateY:translate-y/y,translateZ:translate-z/z,accentColor:ac-c,caretColor:ca-c,scrollBehavior:scr-bhv,scrollbar:scr-bar,scrollbarColor:scr-bar-c,scrollbarGutter:scr-bar-g,scrollbarWidth:scr-bar-w,scrollMargin:scr-m,scrollMarginLeft:scr-ml,scrollMarginRight:scr-mr,scrollMarginTop:scr-mt,scrollMarginBottom:scr-mb,scrollMarginBlock:scr-my/scrollMarginY,scrollMarginBlockEnd:scr-mbe,scrollMarginBlockStart:scr-mbt,scrollMarginInline:scr-mx/scrollMarginX,scrollMarginInlineEnd:scr-me,scrollMarginInlineStart:scr-ms,scrollPadding:scr-p,scrollPaddingBlock:scr-py/scrollPaddingY,scrollPaddingBlockStart:scr-pbs,scrollPaddingBlockEnd:scr-pbe,scrollPaddingInline:scr-px/scrollPaddingX,scrollPaddingInlineEnd:scr-pe,scrollPaddingInlineStart:scr-ps,scrollPaddingLeft:scr-pl,scrollPaddingRight:scr-pr,scrollPaddingTop:scr-pt,scrollPaddingBottom:scr-pb,scrollSnapAlign:scr-sa,scrollSnapStop:scrs-s,scrollSnapType:scrs-t,scrollSnapStrictness:scrs-strt,scrollSnapMargin:scrs-m,scrollSnapMarginTop:scrs-mt,scrollSnapMarginBottom:scrs-mb,scrollSnapMarginLeft:scrs-ml,scrollSnapMarginRight:scrs-mr,scrollSnapCoordinate:scrs-c,scrollSnapDestination:scrs-d,scrollSnapPointsX:scrs-px,scrollSnapPointsY:scrs-py,scrollSnapTypeX:scrs-tx,scrollSnapTypeY:scrs-ty,scrollTimeline:scrtl,scrollTimelineAxis:scrtl-a,scrollTimelineName:scrtl-n,touchAction:tch-a,userSelect:us,overflow:ov,overflowWrap:ov-wrap,overflowX:ov-x,overflowY:ov-y,overflowAnchor:ov-a,overflowBlock:ov-b,overflowInline:ov-i,overflowClipBox:ovcp-bx,overflowClipMargin:ovcp-m,overscrollBehaviorBlock:ovs-bb,overscrollBehaviorInline:ovs-bi,fill:fill,stroke:stk,strokeWidth:stk-w,strokeDasharray:stk-dsh,strokeDashoffset:stk-do,strokeLinecap:stk-lc,strokeLinejoin:stk-lj,strokeMiterlimit:stk-ml,strokeOpacity:stk-op,srOnly:sr,debug:debug,appearance:ap,backfaceVisibility:bfv,clipPath:cp-path,hyphens:hy,mask:msk,maskImage:msk-i,maskSize:msk-s,textSizeAdjust:txt-adj,container:cq,containerName:cq-n,containerType:cq-t,cursor:cursor,textStyle:textStyle".split(",").forEach(t=>{const[e,r]=t.split(":"),[n,...a]=r.split("/");ft.set(e,n),a.length&&a.forEach(t=>{bt.set("1"===t?n:t,e)})});var wt=t=>bt.get(t)||t,mt={conditions:{shift:function(t){return t.sort((t,e)=>{const r=pt(t),n=pt(e);return r&&!n?1:!r&&n?-1:0})},finalize:function(t){return t.map(t=>dt.has(t)?t.replace(gt,""):ht.test(t)?`[${J(t.trim())}]`:t)},breakpoints:{keys:["base","sm","md","lg","xl","2xl"]}},utility:{prefix:"sc",transform:(t,e)=>{const r=wt(t);return{className:`${ft.get(r)||ct(r)}_${J(e)}`}},hasShorthand:!0,toHash:(t,e)=>e(t.join(":")),resolveShorthand:wt}},yt=function(t){const{utility:e,hash:r,conditions:n=ot}=t,a=t=>[e.prefix,t].filter(Boolean).join("-");return Q(({base:o,...i}={})=>{const s=at(Object.assign(i,o),t),l=new Set;return nt(s,(t,o)=>{if(null==t)return;const i=function(t){return"string"==typeof t&&q.test(t)}(t),[s,...c]=n.shift(o),d=c.slice().filter(t=>!(t=>"base"===t)(t));const u=e.transform(s,function(t){return"string"==typeof t?t.replace(q,"").trim():t}((t=>"string"==typeof t?t.replaceAll(/[\n\s]+/g," "):t)(t)));let p=((t,o)=>{let i;if(r){const r=[...n.finalize(t),o];i=a(e.toHash(r,V))}else i=[...n.finalize(t),a(o)].join(":");return i})(d,u.className);i&&(p=`${p}!`),l.add(p)}),Array.from(l).join(" ")})}(mt),St=(...t)=>yt(kt(...t));St.raw=(...t)=>kt(...t);var{mergeCss:kt}=function(t){function e(e){const r=it(...e);return 1===r.length?r:r.map(e=>at(e,t))}return{mergeCss:Q(function(...t){return et(...e(t))}),assignCss:function(...t){return Object.assign({},...e(t))}}}(mt),vt=({width:t=24,height:e=24})=>p("svg",{width:t,height:e,viewBox:"0 0 51 49",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[u("path",{d:"M25.6912 0.895264C11.9301 0.895264 0.772217 12.1784 0.772217 26.0887C0.772217 36.1757 6.63365 44.869 15.0984 48.8953L19.3546 37.2704C15.5262 35.049 12.9439 30.8733 12.9439 26.0887C12.9439 18.9707 18.6522 13.2036 25.686 13.2036C32.7197 13.2036 38.428 18.976 38.428 26.0887C38.428 30.8733 35.8458 35.0437 32.0174 37.2704L36.2735 48.8953C44.7383 44.869 50.5997 36.1704 50.5997 26.0887C50.605 12.1784 39.4472 0.895264 25.6912 0.895264Z",fill:"url(#paint0_linear_1463_870)"}),u("path",{d:"M35.4972 26.0887C28.9599 27.915 27.4971 29.3941 25.6912 36.0048C23.8852 29.3941 22.4225 27.915 15.8851 26.0887C22.4225 24.2625 23.8852 22.7833 25.6912 16.1726C27.4971 22.7833 28.9599 24.2625 35.4972 26.0887Z",fill:"white"}),u("defs",{children:p("linearGradient",{id:"paint0_linear_1463_870",x1:"0",y1:"25.4765",x2:"50.2406",y2:"25.4765",gradientUnits:"userSpaceOnUse",children:[u("stop",{stopColor:"#FEBF4E"}),u("stop",{offset:"0.715",stopColor:"#FC4CD2"})]})})]}),xt=({width:t=24,height:e=24})=>p("svg",{id:"Logo",xmlns:"http://www.w3.org/2000/svg",version:"1.1",width:t,height:e,viewBox:"0 0 148.8 85.5",children:[u("path",{fill:"#a5ff71",d:"M144.6,39c-1.4-2.1-2-4.6-1.7-7s.4-4.6.2-7c-1.3-13.4-12.7-24.2-26.1-24.8-9.3-.4-17.7,3.8-22.9,10.6-2.2,2.8-5.7,4.1-9.2,3.9-3.4-.2-6.9-.4-10.5-.4s-8.1.2-12.1.5-5.9-1.1-7.7-3.6C48.5,3,38-1.7,26.6.7,17,2.7,9.1,10.1,6.3,19.5c-1.2,4.2-1.5,8.3-.9,12.1.4,2.9-.2,5.8-1.8,8.3-2.2,3.5-3.4,7.1-3.4,11,0,16.8,22.7,34,54.3,34.5,6.2,0,13.9-3.5,22.2-3.3,8.9.2,15.3,3.1,23,3.3,29,.9,49-18.6,49-34.5s-1.4-8.2-4.1-11.9ZM25.3,40.6c-9.9,0-17.9-8-17.9-17.9S15.5,4.9,25.3,4.9s17.9,8,17.9,17.9-8,17.9-17.9,17.9ZM69.1,48.1c-1,0-1.8-1-1.8-2.2s.8-2.2,1.8-2.2,1.8,1,1.8,2.2-.8,2.2-1.8,2.2ZM79.7,48.1c-1,0-1.8-1-1.8-2.2s.8-2.2,1.8-2.2,1.8,1,1.8,2.2-.8,2.2-1.8,2.2ZM123.3,40.6c-9.9,0-17.9-8-17.9-17.9s8-17.9,17.9-17.9,17.9,8,17.9,17.9-8,17.9-17.9,17.9Z"}),u("circle",{fill:"#a5ff71",cx:"30.6",cy:"22.7",r:"7.8"}),u("circle",{fill:"#a5ff71",cx:"118.5",cy:"22.7",r:"7.8"})]}),_t=class extends i{constructor(){super(...arguments),this.state={hasError:!1}}static getDerivedStateFromError(t){return{hasError:!0,error:t}}componentDidCatch(t,e){console.error("SupraConnect Error:",t,e),this.props.onError?.(t,e)}render(){return this.state.hasError?this.props.fallback?this.props.fallback:p("div",{className:St({backgroundColor:"#fee2e2",color:"#dc2626",padding:"1rem",borderRadius:"0.5rem",border:"1px solid #fecaca",textAlign:"center",maxWidth:"400px",margin:"0 auto"}),children:[u("h3",{className:St({fontSize:"1.1rem",fontWeight:"600",marginBottom:"0.5rem"}),children:"Wallet Connection Error"}),u("p",{className:St({fontSize:"0.9rem",marginBottom:"1rem"}),children:"Something went wrong while connecting to your wallet. Please try refreshing the page."}),u("button",{onClick:()=>this.setState({hasError:!1,error:void 0}),className:St({backgroundColor:"#dc2626",color:"white",padding:"0.5rem 1rem",borderRadius:"0.25rem",border:"none",cursor:"pointer",fontSize:"0.9rem",fontWeight:"500",_hover:{backgroundColor:"#b91c1c"}}),children:"Try Again"})]}):this.props.children}},Ct=(t={})=>{const e=Z(),[a,o]=r(!1),[i,s]=r(!1),[l,c]=r(()=>e.getState());n(()=>e.subscribe(c),[e]);const{connectedWallet:d,connectionError:h,availableWallets:f,connectingWallet:b}=l,w=f.includes("starkey"),m=f.includes("ribbit"),y=()=>{s(!0),setTimeout(()=>{o(!1),s(!1),e.clearError()},300)};return p(_t,{children:[p("button",{onClick:d?async()=>{try{await e.disconnect()}catch(t){}}:()=>o(!0),className:St({display:"flex",gap:"0.75rem",alignItems:"center",justifyContent:"center",color:"#DD1438",fontWeight:"600",fontSize:"0.95rem",backgroundColor:"white",borderRadius:"0.375rem",border:"2px solid #DD1438",padding:"0.75rem 1.25rem",cursor:"pointer",transition:"all 0.2s ease",width:t.width??"100%",_hover:{backgroundColor:"#DD1438",color:"white"},_active:{backgroundColor:"#C1122D",color:"white"}}),children:[u(K,{width:20,height:20}),d?`${d.walletAddress.slice(0,6)}...${d.walletAddress.slice(-4)}`:"Connect Wallet"]}),a&&g(u("div",{className:St({position:"fixed",top:0,left:0,right:0,bottom:0,backgroundColor:"rgba(0, 0, 0, 0.8)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:1e3,animation:i?"fadeOut 0.3s ease-in":"fadeIn 0.3s ease-out"}),onClick:y,children:p("div",{className:St({backgroundColor:"white",borderRadius:"0.75rem",padding:"2rem",maxWidth:"420px",border:"2px solid #DD1438",width:"90%",position:"relative",animation:i?"popOut 0.3s ease-in":"popUp 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55)",transformOrigin:"center"}),onClick:t=>t.stopPropagation(),children:[u("button",{onClick:y,className:St({position:"absolute",top:"1rem",right:"1rem",background:"none",border:"none",fontSize:"1.5rem",cursor:"pointer",color:"gray",_hover:{color:"black"}}),children:"×"}),p("div",{className:St({textAlign:"center",marginBottom:"2rem"}),children:[u("h2",{className:St({fontSize:"1.5rem",fontWeight:"700",color:"#DD1438",marginBottom:"0.5rem"}),children:"Connect Wallet"}),u("p",{className:St({color:"#6b7280",fontSize:"0.9rem"}),children:"Choose your preferred wallet to connect"})]}),p("div",{className:St({display:"flex",flexDirection:"column",gap:"1rem"}),children:[h&&u("div",{className:St({backgroundColor:"#fee2e2",color:"#dc2626",padding:"0.75rem",borderRadius:"0.5rem",marginBottom:"1rem",fontSize:"0.9rem",textAlign:"center"}),children:h}),w?p("button",{onClick:async()=>{try{const r={dappMetadata:{...t.dappMetadata,...t.metadata}};await e.connectStarkey(r),y()}catch(t){}},disabled:null!==b,className:St({display:"flex",alignItems:"center",gap:"1rem",padding:"1.25rem",border:"2px solid #e5e7eb",borderRadius:"0.5rem",backgroundColor:"#1e1b4b",cursor:null!==b?"not-allowed":"pointer",fontWeight:"600",fontSize:"1rem",color:"white",opacity:null!==b?.6:1,transition:"all 0.2s ease",_hover:{backgroundColor:null!==b?"#1e1b4b":"#312e81",color:"white"}}),children:[u(vt,{width:28,height:28}),u("span",{children:"starkey"===b?"Connecting...":"Starkey Wallet"})]}):p("a",{href:"https://starkey.app/",target:"_blank",rel:"noopener noreferrer",className:St({display:"flex",alignItems:"center",gap:"1rem",padding:"1.25rem",border:"2px solid #e5e7eb",borderRadius:"0.5rem",backgroundColor:"#1e1b4b",cursor:"pointer",fontWeight:"600",fontSize:"1rem",color:"white",textDecoration:"none",transition:"all 0.2s ease",_hover:{backgroundColor:"#312e81",color:"white"}}),children:[u(vt,{width:28,height:28}),u("span",{children:"Install Starkey Wallet"})]}),m?p("button",{onClick:async()=>{try{const r={dappMetadata:{...t.dappMetadata,...t.metadata}};await e.connectRibbit(r),y()}catch(t){}},disabled:null!==b,className:St({display:"flex",alignItems:"center",gap:"1rem",padding:"1.25rem",border:"2px solid #e5e7eb",borderRadius:"0.5rem",backgroundColor:"#1e1b4b",cursor:null!==b?"not-allowed":"pointer",fontWeight:"600",fontSize:"1rem",color:"white",opacity:null!==b?.6:1,transition:"all 0.2s ease",_hover:{backgroundColor:null!==b?"#1e1b4b":"#312e81",color:"white"}}),children:[u(xt,{width:28,height:28}),u("span",{children:"ribbit"===b?"Connecting...":"Ribbit Wallet"})]}):p("a",{href:"https://ribbitwallet.com/",target:"_blank",rel:"noopener noreferrer",className:St({display:"flex",alignItems:"center",gap:"1rem",padding:"1.25rem",border:"2px solid #e5e7eb",borderRadius:"0.5rem",backgroundColor:"#1e1b4b",cursor:"pointer",fontWeight:"600",fontSize:"1rem",color:"white",textDecoration:"none",transition:"all 0.2s ease",_hover:{backgroundColor:"#312e81",color:"white"}}),children:[u(xt,{width:28,height:28}),u("span",{children:"Install Ribbit Wallet"})]})]})]})}),document.body)]})};export{F as ConnectionStore,j as DEFAULT_RPC_URL,O as RibbitWalletUtils,_ as StarkeyWalletUtils,Ct as SupraConnectButton,G as SupraConnectProvider,v as clearWallet,k as getChainId,S as getWallet,y as saveWallet,H as useSupraConnect};
|
|
1
|
+
import t,{createContext as e,useState as r,useEffect as n,useCallback as a,useContext as o,Component as i}from"react";import{verifyAsync as s}from"@noble/ed25519";import{TxnBuilderTypes as l,HexString as c,BCS as d}from"supra-l1-sdk";import{jsx as u,jsxs as p}from"react/jsx-runtime";import{createPortal as g}from"react-dom";function h(t){return t instanceof Error?t.message:"Unknown error"}function b(t){if(t instanceof Error){const e=t.message.toLowerCase();return e.includes("user rejected")||e.includes("user denied")||e.includes("user cancelled")||e.includes("cancelled by user")}return!1}!function(t,{insertAt:e}={}){if("undefined"==typeof document)return;const r=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css","top"===e&&r.firstChild?r.insertBefore(n,r.firstChild):r.appendChild(n),n.styleSheet?n.styleSheet.cssText=t:n.appendChild(document.createTextNode(t))}("@layer reset, base, tokens, recipes, utilities;\n");var f=class{constructor(t){this.prefix=t.prefix,this.additionalKeys=t.additionalKeys||[]}getOriginKey(){return"undefined"==typeof window?"":window.location.origin||window.location.hostname}buildKey(t=""){const e=this.getOriginKey(),r=`${this.prefix}::${e}`;return t?`${r}::${t}`:r}saveWallet(t,e,r=10){try{const n=Date.now()+24*r*60*60*1e3,a=this.buildKey(),o=JSON.stringify({address:t,expiry:n});if(localStorage.setItem(a,o),e)for(const[t,r]of Object.entries(e))if(void 0!==r){const e=this.buildKey(t),a=JSON.stringify({[t]:r,expiry:n});localStorage.setItem(e,a)}}catch(t){}}getWallet(){try{const t=localStorage.getItem(this.buildKey());if(t){const{address:e,expiry:r}=JSON.parse(t);return Date.now()<r?e:(this.clearWallet(),null)}return null}catch{return null}}getAdditionalData(t){try{const e=localStorage.getItem(this.buildKey(t));if(e){const r=JSON.parse(e),{expiry:n}=r;return Date.now()<n?r[t]:(this.clearWallet(),null)}return null}catch{return null}}clearWallet(){try{localStorage.removeItem(this.buildKey());for(const t of this.additionalKeys)localStorage.removeItem(this.buildKey(t))}catch{}}hasStoredWallet(){return null!==this.getWallet()}},w={verifyAsync:s};function m(t){const e=t.startsWith("0x")?t.slice(2):t,r=e.match(/.{2}/g)?.map(t=>parseInt(t,16))||[];return new Uint8Array(r)}function y(t){return function(t){return"0x"+Array.from(t).map(t=>t.toString(16).padStart(2,"0")).join("")}((new TextEncoder).encode(t))}async function S(t,e,r,n=!1){try{const o=(a=e).startsWith("0x")?a.slice(2):a;if(!e||128!==o.length)return!1;if(!r)return!1;const i=m(e);if(64!==i.length)return!1;const s=n?m(t):(new TextEncoder).encode(t),l=m(r);if(32!==l.length)return!1;return await w.verifyAsync(i,s,l)}catch(t){return!1}var a}function k(t){const{to:e,amount:r,options:n,type:a}=t;return{payload:{moduleAddress:"0000000000000000000000000000000000000000000000000000000000000001",moduleName:"supra_account",functionName:a?"transfer_coins":"transfer",typeArguments:a?[a]:[],arguments:[new c(e).toUint8Array(),d.bcsSerializeUint64(BigInt(r))]},options:n}}var v=null,x=new f({prefix:"starkey_connected_wallet",additionalKeys:["chainId"]}),_=class{static isInstalled(){return"undefined"!=typeof window&&!!window.starkey?.supra}static initializeFromStorage(){if("undefined"==typeof window)return null;const t=x.getWallet();if(t){const e=x.getAdditionalData("chainId");return v={walletAddress:t,connected:!0,chainId:e||void 0}}return null}static getWalletInfo(){return v||this.initializeFromStorage()}static async connect(t){if(!this.isInstalled())throw new Error("Starkey wallet is not installed");try{const e=t?.chainId||8,r={chainId:e},n=await window.starkey.supra.connect(r);if(!n||0===n.length)throw new Error("No accounts found or connection rejected");const a=n[0];return x.saveWallet(a,{chainId:e}),v={walletAddress:a,connected:!0,chainId:e}}catch(t){throw new Error(`Failed to connect to Starkey wallet: ${t instanceof Error?t.message:"Unknown error"}`)}}static async disconnect(){if(this.isInstalled())try{await window.starkey.supra.disconnect()}catch(t){}finally{x.clearWallet(),v=null}}static async getAccounts(){if(!this.isInstalled())throw new Error("Starkey wallet is not installed");try{return await window.starkey.supra.account()}catch(t){throw new Error(`Failed to get accounts: ${t instanceof Error?t.message:"Unknown error"}`)}}static async getNetwork(){if(!this.isInstalled())throw new Error("Starkey wallet is not installed");return window.starkey.supra.network()}static async getChainId(){if(!this.isInstalled())throw new Error("Starkey wallet is not installed");try{return await window.starkey.supra.getChainId()}catch(t){throw new Error(`Failed to get chain ID: ${t instanceof Error?t.message:"Unknown error"}`)}}static async getAccountInfo(){if(!this.isInstalled())throw new Error("Starkey wallet is not installed");try{if("function"==typeof window.starkey.supra.getAccountInfo){const t=await window.starkey.supra.getAccountInfo();if(t&&Array.isArray(t))return t}return(await window.starkey.supra.account()).map(t=>({address:t,publicKey:t}))}catch(t){throw new Error(`Failed to get account info: ${t instanceof Error?t.message:"Unknown error"}`)}}static async getPublicKey(t){if(!this.isInstalled())throw new Error("Starkey wallet is not installed");try{if("function"==typeof window.starkey.supra.getPublicKey)return await window.starkey.supra.getPublicKey(t);const e=await this.getAccountInfo(),r=t||e[0]?.address,n=e.find(t=>t.address===r);if(n?.publicKey&&n.publicKey!==n.address)return n.publicKey;throw new Error("Public key not available from wallet - StarKey wallet needs to provide actual public keys for signature verification")}catch(t){throw new Error(`Failed to get public key: ${t instanceof Error?t.message:"Unknown error"}`)}}static async getBalance(){if(!this.isInstalled())throw new Error("Starkey wallet is not installed");try{return await window.starkey.supra.balance()}catch(t){throw new Error(`Failed to get balance: ${t instanceof Error?t.message:"Unknown error"}`)}}static async signMessage(t,e=!1){if(!this.isInstalled())throw new Error("Starkey wallet is not installed");try{const n=e?t:y(t),a=await window.starkey.supra.signMessage({message:n});if(this.isErrorResponse(a)){if(r=a.error,4001===r?.code||r?.message&&(r.message.toLowerCase().includes("reject")||r.message.toLowerCase().includes("cancel")||r.message.toLowerCase().includes("denied")))return null;throw new Error(`Signing failed: ${a.error.message}`)}return a.signature}catch(r){if(b(r))return null;throw new Error(`Failed to sign message: ${h(r)}`)}var r}static async verifySignature(t,e,r,n=!1){return S(t,e,r,n)}static async getPublicKeyFromAddress(t){try{return await this.getPublicKey(t)}catch(e){throw new Error(`Cannot get public key for address ${t}: ${e instanceof Error?e.message:"Unknown error"}`)}}static async sendTransaction(t){if(!this.isInstalled())throw new Error("Starkey wallet is not installed");try{const{payload:e,options:r={}}=t,n={txExpiryTime:r.txExpiryTime||Math.ceil(Date.now()/1e3)+30,...r.maxGasAmount&&{maxGasAmount:r.maxGasAmount},...r.gasUnitPrice&&{gasUnitPrice:r.gasUnitPrice}},a=await this.getAccounts();if(!a||0===a.length)throw new Error("No connected accounts found");const o=[a[0],0,e.moduleAddress,e.moduleName,e.functionName,e.typeArguments||[],e.arguments,n];try{const t=await window.starkey.supra.createRawTransactionData(o);if(!t)throw new Error("Failed to create raw transaction data");const e={data:t},r=await window.starkey.supra.sendTransaction(e);if(!r)throw new Error("Transaction failed - no hash returned from Supra provider");return{success:!0,txHash:r}}catch(t){}return{success:!1,reason:"All transaction approaches failed",error:"No valid transaction format accepted by wallet"}}catch(t){if(t instanceof Error){const e=t.message.toLowerCase();if(e.includes("user rejected")||e.includes("user denied")||e.includes("user cancelled")||e.includes("cancelled by user"))return{success:!1,reason:"User cancelled transaction"}}return{success:!1,error:t instanceof Error?t.message:"Unknown error",reason:"Transaction failed"}}}static async transfer(t){const e=k(t);return this.sendTransaction(e)}static isErrorResponse(t){return t&&"string"==typeof t.jsonrpc&&"object"==typeof t.error}},C="supra",E="CONNECT_REQUEST",A="DISCONNECT_REQUEST",W="SIGN_MESSAGE",I="SEND_TRANSACTION",M="GET_WALLET_BALANCE",T=8,B=class{listen(){}async sendMessage(t,e){if("undefined"==typeof window)throw new Error("SSR mode");if(!window.ribbit||"app"!==window.ribbit.type)throw new Error("AppTransport: ribbit app not detected");return await window.ribbit.postMessage(t,e)}registerHandler(t,e){"undefined"!=typeof window&&window.ribbit?.on?.(t,e)}on(t,e){"undefined"!=typeof window&&window.ribbit?.on?.(t,e)}off(t,e){"undefined"!=typeof window&&window.ribbit?.off?.(t,e)}},D=class{listen(){}async sendMessage(t,e){if("undefined"==typeof window)throw new Error("SSR mode");if(!window.ribbit||"extension"!==window.ribbit.type)throw new Error("ExtensionTransport: ribbit extension not detected");return await window.ribbit.postMessage(t,e)}registerHandler(t,e){"undefined"!=typeof window&&window.ribbit?.on?.(t,e)}on(t,e){"undefined"!=typeof window&&window.ribbit?.on?.(t,e)}off(t,e){"undefined"!=typeof window&&window.ribbit?.off?.(t,e)}},R=null,P=new f({prefix:"ribbit_connected_wallet",additionalKeys:["accounts"]}),N=class{static initializeClient(){if("undefined"==typeof window)return null;if(!window.ribbit?.type)return null;if(!R){if(R={transport:null,wallet:null},"app"===window.ribbit.type)R.transport=new B;else{if("extension"!==window.ribbit.type)throw new Error(`Unknown ribbit type: ${window.ribbit.type}`);R.transport=new D}R.transport.listen();const t=P.getWallet();if(t){const e=P.getAdditionalData("accounts");R.wallet={walletAddress:t,connected:!0,allAccounts:e||[{walletAddress:t,chain:"supra"}]}}}return R}static isInstalled(){return"undefined"!=typeof window&&!!window.ribbit}static getWalletType(){return this.isInstalled()?window.ribbit.type:null}static setDefaultDappMetadata(t){this.defaultDappMetadata={...this.defaultDappMetadata,...t}}static getDefaultDappMetadata(){return{...this.defaultDappMetadata}}static async connect(t){if(!this.isInstalled())throw new Error("Ribbit wallet is not installed");const e={name:t?.name||this.defaultDappMetadata.name,url:t?.url||this.defaultDappMetadata.url,description:t?.description||this.defaultDappMetadata.description,logo:t?.logo||this.defaultDappMetadata.logo},r=this.initializeClient();if(!r||!r.transport)throw new Error("No transport available");const n=await r.transport.sendMessage(E,{dapp:e}),a="data"in n?n.data:n;if(!a?.approved||!("accounts"in a)||!a.accounts?.length)throw new Error(`Connection to wallet failed: ${a?.error||"Unknown error"}`);const o=a.accounts.filter(t=>t.chain===C)[0]?.walletAddress;if(void 0===o)throw new Error("No wallet address found");const i=T;return r.wallet={walletAddress:o,connected:!0,chainId:i,allAccounts:a.accounts},P.saveWallet(o,{accounts:a.accounts}),r.wallet}static async disconnect(){const t=this.initializeClient();t&&(t.wallet=null,P.clearWallet(),t.transport&&await t.transport.sendMessage(A,{}))}static getWalletInfo(){const t=this.initializeClient();return t?.wallet||null}static async getWalletBalance(t){const e=this.initializeClient();if(!e||!e.transport)throw new Error("No transport available");if(!e.wallet)throw new Error("Not connected");const{chainId:r,resourceType:n,decimals:a}=t;return e.transport.sendMessage(M,{chainId:r,resourceType:n,decimals:a})}static async signMessage(t){const e=this.initializeClient();if(!e||!e.transport)throw new Error("No transport available");if(!e.wallet)throw new Error("Not connected");try{const r=await e.transport.sendMessage(W,t);return r?.error&&(4001===r.error.code||r.error.message?.toLowerCase().includes("reject")||r.error.message?.toLowerCase().includes("cancel")||r.error.message?.toLowerCase().includes("denied"))?null:r}catch(t){if(b(t))return null;throw t}}static async sendTransaction(t){const e=this.initializeClient();if(!e||!e.transport)throw new Error("No transport available");if(!e.wallet)throw new Error("Wallet not connected");try{let r;if("payload"in t){const n=t,a=(n.payload.typeArguments||[]).map(t=>"string"==typeof t?new l.TypeTagParser(t).parseTypeTag():t),o=n.payload.arguments.map(t=>t instanceof Uint8Array?Array.from(t):t),i=l.EntryFunction.natural(`${n.payload.moduleAddress}::${n.payload.moduleName}`,n.payload.functionName,a,o),s=new l.TransactionPayloadEntryFunction(i),u="https://rpc-mainnet.supra.com/rpc/v3";let p=BigInt(0),g={max_gas_price:200,mean_gas_price:100};try{const t=await fetch(`${u}/accounts/${encodeURIComponent(e.wallet.walletAddress)}`);if(t.ok){const e=await t.json();p=BigInt(e.sequence_number||0)}}catch(t){}try{const t=await fetch(`${u}/transactions/estimate_gas_price`);t.ok&&(g=await t.json())}catch(t){}const h=BigInt(Math.floor(Date.now()/1e3)+300),b=new l.RawTransaction(l.AccountAddress.fromHex(new c(e.wallet.walletAddress)),p,s,BigInt(Math.floor(50*g.max_gas_price)),BigInt(g.mean_gas_price),h,new l.ChainId(e.wallet.chainId||T)),f=d.bcsToBytes(b);let w;if("undefined"!=typeof Buffer)w=Buffer.from(f).toString("base64");else{if("undefined"==typeof btoa)throw new Error("Cannot encode to base64: no Buffer or btoa available");w=btoa(String.fromCharCode(...Array.from(f)))}r={rawTxn:w,chainId:e.wallet.chainId||T,meta:{description:`${n.payload.functionName} on ${n.payload.moduleName}`}}}else r=t;const n=await e.transport.sendMessage(I,r);return n?.txHash||n?.transactionHash||n?.hash?{success:!0,txHash:n.txHash||n.transactionHash||n.hash}:n?.error?{success:!1,error:n.error,reason:"Transaction failed"}:"string"==typeof n?{success:!0,txHash:n}:{success:!1,error:"Unknown response format from wallet",reason:"Transaction failed"}}catch(t){return b(t)?{success:!1,reason:"User cancelled transaction"}:{success:!1,error:h(t),reason:"Transaction failed"}}}static async transfer(t){const e=k(t);return this.sendTransaction(e)}static async getPublicKey(t){const e=this.initializeClient();if(!e||!e.transport)throw new Error("No transport available");if(!e.wallet)throw new Error("Not connected");try{const r=await e.transport.sendMessage("GET_PUBLIC_KEY",{address:t||e.wallet.walletAddress});if(r?.publicKey)return r.publicKey;throw new Error("Public key not available from wallet")}catch(t){throw new Error(`Failed to get public key: ${t instanceof Error?t.message:"Unknown error"}`)}}static async verifySignature(t,e,r,n=!1){return S(t,e,r,n)}static async getPublicKeyFromAddress(t){try{return await this.getPublicKey(t)}catch(e){throw new Error(`Cannot get public key for address ${t}: ${e instanceof Error?e.message:"Unknown error"}`)}}};N.defaultDappMetadata={name:"Supra Connect",url:"undefined"!=typeof window?window.location.origin:"https://supra.com",description:"Connect to Supra blockchain wallets",logo:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEwIDJMMTcgNkwxNyAxNEwxMCAxOEwzIDE0TDMgNkwxMCAyWiIgZmlsbD0iI0REMTQzOCIvPgo8L3N2Zz4K"};var z="https://rpc-mainnet.supra.com",O=class{constructor(t=z){this.state={connectedWallet:null,allAccounts:[],isConnecting:!1,connectingWallet:null,connectionError:null,availableWallets:[]},this.listeners=new Set,this.globalMetadata={},this.storeId=Math.random().toString(36).substring(2,9),this.rpcUrl=t,"undefined"!=typeof window&&(this.updateAvailableWallets(),this.setupPeriodicWalletDetection(),setTimeout(()=>{this.checkExistingConnections().catch(()=>{})},100))}updateAvailableWallets(){const t=[];_.isInstalled()&&t.push("starkey"),N.isInstalled()&&t.push("ribbit");const e=this.state.availableWallets;t.length===e.length&&t.every(t=>e.includes(t))||this.setState({availableWallets:t})}setupPeriodicWalletDetection(){const t=setInterval(()=>{this.updateAvailableWallets()},1e3);setTimeout(()=>{clearInterval(t)},3e4),"loading"===document.readyState&&document.addEventListener("DOMContentLoaded",()=>{setTimeout(()=>this.updateAvailableWallets(),500)}),window.addEventListener("load",()=>{setTimeout(()=>this.updateAvailableWallets(),1e3)})}async checkExistingConnections(){const t=N.getWalletInfo();if(t)return void this.setState({connectedWallet:{...t,type:"ribbit"},allAccounts:t.allAccounts||[{walletAddress:t.walletAddress,chain:"supra"}]});const e=_.getWalletInfo();if(e)this.setState({connectedWallet:{...e,type:"starkey"},allAccounts:[{walletAddress:e.walletAddress,chain:"supra"}]});else if(_.isInstalled())try{const t=await _.getAccounts();if(t&&t.length>0)return void this.setState({connectedWallet:{walletAddress:t[0],connected:!0,type:"starkey"},allAccounts:[{walletAddress:t[0],chain:"supra"}]})}catch(t){}}setState(t){this.state={...this.state,...t},this.listeners.forEach(t=>t(this.state))}getState(){return{...this.state}}subscribe(t){return this.listeners.add(t),()=>{this.listeners.delete(t)}}async connectStarkey(t){if(!this.state.connectingWallet){this.setState({connectingWallet:"starkey",connectionError:null});try{const e=this.mergeMetadata(t?.dappMetadata),r=Object.keys(e).length>0?{name:e.name||"Supra Connect",url:e.url||("undefined"!=typeof window?window.location.origin:"https://supra.com"),chainId:e.chainId}:void 0,n=await _.connect(r);this.setState({connectedWallet:{...n,type:"starkey"},allAccounts:[{walletAddress:n.walletAddress,chain:"supra"}],connectingWallet:null,isConnecting:!1,connectionError:null})}catch(t){throw this.setState({connectionError:t instanceof Error?t.message:"Failed to connect to Starkey wallet",connectingWallet:null,isConnecting:!1}),t}}}async connectRibbit(t){if(!this.state.connectingWallet){this.setState({connectingWallet:"ribbit",connectionError:null});try{const e=this.mergeMetadata(t?.dappMetadata),r=Object.keys(e).length>0?{name:e.name,url:e.url,description:e.description,logo:e.logo}:void 0,n=await N.connect(r);this.setState({connectedWallet:{...n,type:"ribbit"},allAccounts:n.allAccounts||[{walletAddress:n.walletAddress,chain:"supra"}],connectingWallet:null,isConnecting:!1,connectionError:null})}catch(t){throw this.setState({connectionError:t instanceof Error?t.message:"Failed to connect to Ribbit wallet",connectingWallet:null,isConnecting:!1}),t}}}async disconnect(){if(this.state.connectedWallet)try{"starkey"===this.state.connectedWallet.type?await _.disconnect():"ribbit"===this.state.connectedWallet.type&&await N.disconnect(),this.setState({connectedWallet:null,allAccounts:[],connectionError:null})}catch(t){this.setState({connectedWallet:null,allAccounts:[],connectionError:null})}}getPublicAddress(t="supra"){if(!this.state.connectedWallet)return null;if(this.state.allAccounts.length>0){const e=this.state.allAccounts.find(e=>e.chain===t);return e?.walletAddress||null}return this.state.connectedWallet.walletAddress||null}getPublicAddresses(){return this.state.allAccounts.length>0?this.state.allAccounts.map(t=>t.walletAddress):this.state.connectedWallet?[this.state.connectedWallet.walletAddress]:[]}async signMessage(t){if(!this.state.connectedWallet)return{success:!1,reason:"No wallet connected"};try{let e=null;if("starkey"===this.state.connectedWallet.type)e=await _.signMessage(t);else{if("ribbit"!==this.state.connectedWallet.type)return{success:!1,reason:"Unsupported wallet type"};{const r=await N.signMessage({message:t});e=null===r?null:r.signature||r}}if(null===e)return{success:!1,reason:"User cancelled"};try{return await this.verifySignature(t,e)?{success:!0,signature:e}:{success:!1,reason:"Signature verification failed"}}catch(t){return{success:!0,signature:e,reason:"Signature obtained but verification failed"}}}catch(t){return{success:!1,reason:t instanceof Error?t.message:"Failed to sign message"}}}clearError(){this.setState({connectionError:null})}async refreshConnections(){await this.checkExistingConnections()}setDappMetadata(t){this.globalMetadata={...this.globalMetadata,...t}}getDappMetadata(){return{...this.globalMetadata}}clearDappMetadata(){this.globalMetadata={}}refreshWalletDetection(){this.updateAvailableWallets()}getRpcUrl(){return this.rpcUrl}mergeMetadata(t){return{...this.globalMetadata,...t}}async verifySignature(t,e){if(!this.state.connectedWallet)throw new Error("No wallet connected");try{if("starkey"===this.state.connectedWallet.type){const r=await _.getPublicKeyFromAddress(this.state.connectedWallet.walletAddress);return await _.verifySignature(t,e,r)}if("ribbit"===this.state.connectedWallet.type){const r=await N.getPublicKeyFromAddress(this.state.connectedWallet.walletAddress);return await N.verifySignature(t,e,r)}throw new Error("Unsupported wallet type")}catch(t){throw new Error(t instanceof Error?t.message:"Failed to verify signature")}}async sendTransaction(t){if(!this.state.connectedWallet)return{success:!1,reason:"No wallet connected"};try{return"starkey"===this.state.connectedWallet.type?await _.sendTransaction(t):"ribbit"===this.state.connectedWallet.type?await N.sendTransaction(t):{success:!1,reason:"Unsupported wallet type"}}catch(t){return{success:!1,error:t instanceof Error?t.message:"Failed to send transaction",reason:"Transaction failed"}}}async transfer(t){if(!this.state.connectedWallet)return{success:!1,reason:"No wallet connected"};try{return"starkey"===this.state.connectedWallet.type?await _.transfer(t):"ribbit"===this.state.connectedWallet.type?await N.transfer(t):{success:!1,reason:"Unsupported wallet type"}}catch(t){return{success:!1,error:t instanceof Error?t.message:"Failed to send transfer",reason:"Transfer failed"}}}static async estimateGasPrice(t="testnet"){const e="mainnet"===t?"https://rpc-mainnet.supra.com":"https://rpc-testnet.supra.com";try{const t=await fetch(`${e}/rpc/v2/transactions/estimate_gas_price`);if(t.ok)return await t.json();const r=await fetch(`${e}/rpc/v1/transactions/estimate_gas_price`);if(r.ok){const t=await r.json();return{mean_gas_price:t.gas_estimate||t.mean_gas_price||100,max_gas_price:t.max_gas_price||2*(t.gas_estimate||100),median_gas_price:t.median_gas_price||t.gas_estimate||100}}throw new Error("Both gas estimation endpoints failed")}catch(t){return{mean_gas_price:100,max_gas_price:200,median_gas_price:100}}}static async getRecommendedGasSettings(t="testnet"){try{const e=await this.estimateGasPrice(t),r=Math.max(1.2*e.mean_gas_price,100);return{gasUnitPrice:Math.ceil(r).toString(),maxGasAmount:"200000"}}catch(t){return{gasUnitPrice:"100",maxGasAmount:"200000"}}}};"undefined"!=typeof window?(window.__supraConnectStore||(window.__supraConnectStore=new O),window.__supraConnectStore):(global.__supraConnectStore||(global.__supraConnectStore=new O),global.__supraConnectStore);var j=e(void 0);function L({children:e,rpcUrl:r=z}){const n=t.useMemo(()=>new O(r),[r]);return u(j.Provider,{value:n,children:e})}function F(){const t=o(j);if(!t)throw new Error("useSupraConnectStore must be used within a SupraConnectProvider. Make sure to wrap your app with <SupraConnectProvider>.</SupraConnectProvider>");return t}function U(){const t=F(),[e,o]=r(()=>t.getState());n(()=>t.subscribe(o),[t]);const i=a(async()=>{await t.connectStarkey()},[t]),s=a(async()=>{await t.connectRibbit()},[t]),l=a(async()=>{await t.disconnect()},[t]),c=a(e=>t.getPublicAddress(e),[t]),d=a(()=>t.getPublicAddresses(),[t]),u=a(()=>e.allAccounts,[e.allAccounts]),p=a(async e=>t.signMessage(e),[t]),g=a(async e=>t.sendTransaction(e),[t]),h=a(async e=>t.transfer(e),[t]),b=a(()=>{t.clearError()},[t]),f=a(()=>{t.refreshWalletDetection()},[t]),w=a(()=>t.getRpcUrl(),[t]),m=a(e=>{t.setDappMetadata(e)},[t]),y=a(()=>t.getDappMetadata(),[t]),S=a(()=>{t.clearDappMetadata()},[t]);return{connectedWallet:e.connectedWallet,isConnected:!!e.connectedWallet,isConnecting:e.isConnecting,connectionError:e.connectionError,availableWallets:e.availableWallets,connectStarkey:i,connectRibbit:s,disconnect:l,getPublicAddress:c,getPublicAddresses:d,getAllAccounts:u,signMessage:p,sendTransaction:g,transfer:h,clearError:b,refreshWalletDetection:f,getRpcUrl:w,setDappMetadata:m,getDappMetadata:y,clearDappMetadata:S}}var K=({width:t=24,height:e=24})=>p("svg",{width:t,height:e,viewBox:"0 0 70 70",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[u("circle",{cx:"35",cy:"35",r:"35",fill:"#dd1438"}),u("path",{d:"M54.81,17.92A16.52,16.52,0,0,0,51,12.34a18.51,18.51,0,0,0-5.68-3.63,16.57,16.57,0,0,0-4.45-1.09,17.21,17.21,0,0,0-18.7,22.47v.05h0A17.12,17.12,0,0,0,18.69,33,17.92,17.92,0,0,0,15,38.76a18.45,18.45,0,0,0-1.21,6.71,16.48,16.48,0,0,0,1.4,6.61A16.66,16.66,0,0,0,19,57.66a18.67,18.67,0,0,0,5.69,3.63,17.23,17.23,0,0,0,6,1.2H31A17.26,17.26,0,0,0,47.58,40a17.34,17.34,0,0,0,3.69-3A17.9,17.9,0,0,0,55,31.25a18.34,18.34,0,0,0,1.22-6.72,16.49,16.49,0,0,0-1.41-6.61ZM39.73,19.16a6.61,6.61,0,0,1-.17-1.65,8.39,8.39,0,0,1,1.82.52,5.92,5.92,0,0,1,2.14,1.57,7.23,7.23,0,0,1,1.3,2.25,7.35,7.35,0,0,1,.38,2.52,6.49,6.49,0,0,1-1.91,4.23ZM43.8,29.94c.11-.1.22-.21.32-.32a7.47,7.47,0,0,0,1.57-2.52,7.82,7.82,0,0,0,.46-2.9,6.69,6.69,0,0,0-.65-2.79,8,8,0,0,0-1.68-2.24,6.548,6.548,0,0,0-4.27-1.77,7.29,7.29,0,0,1,.82-3.13,9.4,9.4,0,0,1,2.2.7,10.63,10.63,0,0,1,3.25,2.33,12.31,12.31,0,0,1,2.06,3.36,10.64,10.64,0,0,1,.65,3.81,8.21,8.21,0,0,1-.84,3.74,8.16,8.16,0,0,1-2.14,3.06,7.74,7.74,0,0,1-1,.75Zm1.27,3.35a11.84,11.84,0,0,0,1.37-1.18,11.43,11.43,0,0,0,3-7.82,10.28,10.28,0,0,0-.92-4.09,10.05,10.05,0,0,0-2.41-3.36,10.36,10.36,0,0,0-3.44-2.14,11.08,11.08,0,0,0-2.26-.53,6.86,6.86,0,0,1,1.22-1.64,6.76,6.76,0,0,1,1.24-1,9,9,0,0,1,1,.41,12.5,12.5,0,0,1,4.28,3A13.61,13.61,0,0,1,51,19.33a14.22,14.22,0,0,1,.92,5.12,14.86,14.86,0,0,1-1.11,5,13.56,13.56,0,0,1-2.9,4.08,11.72,11.72,0,0,1-2.08,1.67ZM26.88,58.37a7.38,7.38,0,0,1-.82-.33,12.5,12.5,0,0,1-4.28-3A13.61,13.61,0,0,1,19,50.67a14.22,14.22,0,0,1-.92-5.12,14.81,14.81,0,0,1,1.11-5,13.6,13.6,0,0,1,2.9-4.09A12.7,12.7,0,0,1,24,34.87l.76,2a12.48,12.48,0,0,0-1.23,1.06,11.12,11.12,0,0,0-2.24,3.63,11,11,0,0,0-.76,4.2,10.32,10.32,0,0,0,.92,4.09,10.53,10.53,0,0,0,5.85,5.49,11.07,11.07,0,0,0,2,.51,7.36,7.36,0,0,1-1.18,1.56,7,7,0,0,1-1.24.96ZM27.39,55a10.63,10.63,0,0,1-3.25-2.33,12.41,12.41,0,0,1-2.06-3.35,10.73,10.73,0,0,1-.65-3.82,8.21,8.21,0,0,1,.84-3.74,8.16,8.16,0,0,1,2.14-3.06,8.4,8.4,0,0,1,.8-.65L26,40.19l-.19.19a7.47,7.47,0,0,0-1.57,2.52,7.82,7.82,0,0,0-.46,2.9,6.69,6.69,0,0,0,.65,2.79,8,8,0,0,0,1.68,2.24,7,7,0,0,0,2.33,1.41,6.53,6.53,0,0,0,1.77.34,7.13,7.13,0,0,1-.86,3.11A9.3,9.3,0,0,1,27.39,55Zm2.71-4.22a7.76,7.76,0,0,1,.14,1.66,8.81,8.81,0,0,1-1.66-.5,5.92,5.92,0,0,1-2.14-1.57,7.23,7.23,0,0,1-1.3-2.25,7.35,7.35,0,0,1-.38-2.52,6.54,6.54,0,0,1,1.78-4.1Zm-14.28,1a18.45,18.45,0,0,1-1.11-6.33,18.18,18.18,0,0,1,1.41-6.23,16.76,16.76,0,0,1,3.63-5.23,15,15,0,0,1,3-2.31l.56,1.48a13.09,13.09,0,0,0-2.41,2A14.12,14.12,0,0,0,18,40a15.85,15.85,0,0,0-.92,5.5,15.34,15.34,0,0,0,1.22,5.39A14.16,14.16,0,0,0,26,58.23c.24.09.49.16.74.24a7.74,7.74,0,0,1-3.65,1.06,5.79,5.79,0,0,1-1.38-.16,15.94,15.94,0,0,1-2.32-2,16.25,16.25,0,0,1-3.57-5.51Zm38-21.16a16.76,16.76,0,0,1-3.63,5.23A15.07,15.07,0,0,1,47,38.35l-.56-1.48a12.48,12.48,0,0,0,2.6-2.1A14,14,0,0,0,52,30a15.85,15.85,0,0,0,.92-5.5,15.34,15.34,0,0,0-1.22-5.39A14.16,14.16,0,0,0,44,11.77c-.31-.12-.64-.21-1-.31a7.22,7.22,0,0,1,5.25-.83,16.57,16.57,0,0,1,2.32,2,16.25,16.25,0,0,1,3.55,5.5,18.49,18.49,0,0,1,1.11,6.33,18.18,18.18,0,0,1-1.39,6.24Z",fill:"#fff"})]});function $(t){return"object"==typeof t&&null!=t&&!Array.isArray(t)}function Z(t){return String.fromCharCode(t+(t>25?39:97))}function G(t){return function(t){let e,r="";for(e=Math.abs(t);e>52;e=e/52|0)r=Z(e%52)+r;return Z(e%52)+r}(function(t,e){let r=e.length;for(;r;)t=33*t^e.charCodeAt(--r);return t}(5381,t)>>>0)}var H=/\s*!(important)?/i;function X(t){return"string"==typeof t?t.replaceAll(" ","_"):t}var Y=t=>{const e=new Map;return(...r)=>{const n=JSON.stringify(r);if(e.has(n))return e.get(n);const a=t(...r);return e.set(n,a),a}},V=new Set(["__proto__","constructor","prototype"]);function q(...t){return t.reduce((t,e)=>e?(Object.keys(e).forEach(r=>{if(V.has(r))return;const n=t[r],a=e[r];$(n)&&$(a)?t[r]=q(n,a):t[r]=a}),t):t,{})}var J=t=>null!=t;function Q(t,e,r={}){const{stop:n,getKey:a}=r;return function t(r,o=[]){if("object"==typeof(i=r)&&null!==i){const i={};for(const[s,l]of Object.entries(r)){const c=a?.(s,l)??s,d=[...o,c];if(n?.(r,d))return e(r,o);const u=t(l,d);J(u)&&(i[c]=u)}return i}var i;return e(r,o)}(t)}function tt(t,e,r=!0){const{utility:n,conditions:a}=e,{hasShorthand:o,resolveShorthand:i}=n;return Q(t,t=>{return Array.isArray(t)?(e=t,r=a.breakpoints.keys,e.reduce((t,e,n)=>{const a=r[n];return null!=e&&(t[a]=e),t},{})):t;var e,r},{stop:t=>Array.isArray(t),getKey:r?t=>o?i(t):t:void 0})}var et={shift:t=>t,finalize:t=>t,breakpoints:{keys:[]}};function rt(...t){return t.flat().filter(t=>{return $(t)&&Object.keys((e=t,Object.fromEntries(Object.entries(e??{}).filter(([t,e])=>void 0!==e)))).length>0;var e})}var nt=/([A-Z])/g,at=/^ms-/,ot=Y(t=>t.startsWith("--")?t:t.replace(nt,"-$1").replace(at,"-ms-").toLowerCase());"cm,mm,Q,in,pc,pt,px,em,ex,ch,rem,lh,rlh,vw,vh,vmin,vmax,vb,vi,svw,svh,lvw,lvh,dvw,dvh,cqw,cqh,cqi,cqb,cqmin,cqmax,%".split(",").join("|");var it=new Set("_hover,_focus,_focusWithin,_focusVisible,_disabled,_active,_visited,_target,_readOnly,_readWrite,_empty,_checked,_enabled,_expanded,_highlighted,_complete,_incomplete,_dragging,_before,_after,_firstLetter,_firstLine,_marker,_selection,_file,_backdrop,_first,_last,_only,_even,_odd,_firstOfType,_lastOfType,_onlyOfType,_peerFocus,_peerHover,_peerActive,_peerFocusWithin,_peerFocusVisible,_peerDisabled,_peerChecked,_peerInvalid,_peerExpanded,_peerPlaceholderShown,_groupFocus,_groupHover,_groupActive,_groupFocusWithin,_groupFocusVisible,_groupDisabled,_groupChecked,_groupExpanded,_groupInvalid,_indeterminate,_required,_valid,_invalid,_autofill,_inRange,_outOfRange,_placeholder,_placeholderShown,_pressed,_selected,_grabbed,_underValue,_overValue,_atValue,_default,_optional,_open,_closed,_fullscreen,_loading,_hidden,_current,_currentPage,_currentStep,_today,_unavailable,_rangeStart,_rangeEnd,_now,_topmost,_motionReduce,_motionSafe,_print,_landscape,_portrait,_dark,_light,_osDark,_osLight,_highContrast,_lessContrast,_moreContrast,_ltr,_rtl,_scrollbar,_scrollbarThumb,_scrollbarTrack,_horizontal,_vertical,_icon,_starting,_noscript,_invertedColors,sm,smOnly,smDown,md,mdOnly,mdDown,lg,lgOnly,lgDown,xl,xlOnly,xlDown,2xl,2xlOnly,2xlDown,smToMd,smToLg,smToXl,smTo2xl,mdToLg,mdToXl,mdTo2xl,lgToXl,lgTo2xl,xlTo2xl,@/xs,@/sm,@/md,@/lg,@/xl,@/2xl,@/3xl,@/4xl,@/5xl,@/6xl,@/7xl,@/8xl,base".split(",")),st=/^@|&|&$/;function lt(t){return it.has(t)||st.test(t)}var ct=/^_/,dt=/&|@/;var ut=new Map,pt=new Map;"aspectRatio:asp,boxDecorationBreak:bx-db,zIndex:z,boxSizing:bx-s,objectPosition:obj-p,objectFit:obj-f,overscrollBehavior:ovs-b,overscrollBehaviorX:ovs-bx,overscrollBehaviorY:ovs-by,position:pos/1,top:top,left:left,inset:inset,insetInline:inset-x/insetX,insetBlock:inset-y/insetY,insetBlockEnd:inset-be,insetBlockStart:inset-bs,insetInlineEnd:inset-e/insetEnd/end,insetInlineStart:inset-s/insetStart/start,right:right,bottom:bottom,float:float,visibility:vis,display:d,hideFrom:hide,hideBelow:show,flexBasis:flex-b,flex:flex,flexDirection:flex-d/flexDir,flexGrow:flex-g,flexShrink:flex-sh,gridTemplateColumns:grid-tc,gridTemplateRows:grid-tr,gridColumn:grid-c,gridRow:grid-r,gridColumnStart:grid-cs,gridColumnEnd:grid-ce,gridAutoFlow:grid-af,gridAutoColumns:grid-ac,gridAutoRows:grid-ar,gap:gap,gridGap:grid-g,gridRowGap:grid-rg,gridColumnGap:grid-cg,rowGap:rg,columnGap:cg,justifyContent:jc,alignContent:ac,alignItems:ai,alignSelf:as,padding:p/1,paddingLeft:pl/1,paddingRight:pr/1,paddingTop:pt/1,paddingBottom:pb/1,paddingBlock:py/1/paddingY,paddingBlockEnd:pbe,paddingBlockStart:pbs,paddingInline:px/paddingX/1,paddingInlineEnd:pe/1/paddingEnd,paddingInlineStart:ps/1/paddingStart,marginLeft:ml/1,marginRight:mr/1,marginTop:mt/1,marginBottom:mb/1,margin:m/1,marginBlock:my/1/marginY,marginBlockEnd:mbe,marginBlockStart:mbs,marginInline:mx/1/marginX,marginInlineEnd:me/1/marginEnd,marginInlineStart:ms/1/marginStart,spaceX:sx,spaceY:sy,outlineWidth:ring-w/ringWidth,outlineColor:ring-c/ringColor,outline:ring/1,outlineOffset:ring-o/ringOffset,focusRing:focus-ring,focusVisibleRing:focus-v-ring,focusRingColor:focus-ring-c,focusRingOffset:focus-ring-o,focusRingWidth:focus-ring-w,focusRingStyle:focus-ring-s,divideX:dvd-x,divideY:dvd-y,divideColor:dvd-c,divideStyle:dvd-s,width:w/1,inlineSize:w-is,minWidth:min-w/minW,minInlineSize:min-w-is,maxWidth:max-w/maxW,maxInlineSize:max-w-is,height:h/1,blockSize:h-bs,minHeight:min-h/minH,minBlockSize:min-h-bs,maxHeight:max-h/maxH,maxBlockSize:max-b,boxSize:size,color:c,fontFamily:ff,fontSize:fs,fontSizeAdjust:fs-a,fontPalette:fp,fontKerning:fk,fontFeatureSettings:ff-s,fontWeight:fw,fontSmoothing:fsmt,fontVariant:fv,fontVariantAlternates:fv-alt,fontVariantCaps:fv-caps,fontVariationSettings:fv-s,fontVariantNumeric:fv-num,letterSpacing:ls,lineHeight:lh,textAlign:ta,textDecoration:td,textDecorationColor:td-c,textEmphasisColor:te-c,textDecorationStyle:td-s,textDecorationThickness:td-t,textUnderlineOffset:tu-o,textTransform:tt,textIndent:ti,textShadow:tsh,textShadowColor:tsh-c/textShadowColor,textOverflow:tov,verticalAlign:va,wordBreak:wb,textWrap:tw,truncate:trunc,lineClamp:lc,listStyleType:li-t,listStylePosition:li-pos,listStyleImage:li-img,listStyle:li-s,backgroundPosition:bg-p/bgPosition,backgroundPositionX:bg-p-x/bgPositionX,backgroundPositionY:bg-p-y/bgPositionY,backgroundAttachment:bg-a/bgAttachment,backgroundClip:bg-cp/bgClip,background:bg/1,backgroundColor:bg-c/bgColor,backgroundOrigin:bg-o/bgOrigin,backgroundImage:bg-i/bgImage,backgroundRepeat:bg-r/bgRepeat,backgroundBlendMode:bg-bm/bgBlendMode,backgroundSize:bg-s/bgSize,backgroundGradient:bg-grad/bgGradient,backgroundLinear:bg-linear/bgLinear,backgroundRadial:bg-radial/bgRadial,backgroundConic:bg-conic/bgConic,textGradient:txt-grad,gradientFromPosition:grad-from-pos,gradientToPosition:grad-to-pos,gradientFrom:grad-from,gradientTo:grad-to,gradientVia:grad-via,gradientViaPosition:grad-via-pos,borderRadius:bdr/rounded,borderTopLeftRadius:bdr-tl/roundedTopLeft,borderTopRightRadius:bdr-tr/roundedTopRight,borderBottomRightRadius:bdr-br/roundedBottomRight,borderBottomLeftRadius:bdr-bl/roundedBottomLeft,borderTopRadius:bdr-t/roundedTop,borderRightRadius:bdr-r/roundedRight,borderBottomRadius:bdr-b/roundedBottom,borderLeftRadius:bdr-l/roundedLeft,borderStartStartRadius:bdr-ss/roundedStartStart,borderStartEndRadius:bdr-se/roundedStartEnd,borderStartRadius:bdr-s/roundedStart,borderEndStartRadius:bdr-es/roundedEndStart,borderEndEndRadius:bdr-ee/roundedEndEnd,borderEndRadius:bdr-e/roundedEnd,border:bd,borderWidth:bd-w,borderTopWidth:bd-t-w,borderLeftWidth:bd-l-w,borderRightWidth:bd-r-w,borderBottomWidth:bd-b-w,borderBlockStartWidth:bd-bs-w,borderBlockEndWidth:bd-be-w,borderColor:bd-c,borderInline:bd-x/borderX,borderInlineWidth:bd-x-w/borderXWidth,borderInlineColor:bd-x-c/borderXColor,borderBlock:bd-y/borderY,borderBlockWidth:bd-y-w/borderYWidth,borderBlockColor:bd-y-c/borderYColor,borderLeft:bd-l,borderLeftColor:bd-l-c,borderInlineStart:bd-s/borderStart,borderInlineStartWidth:bd-s-w/borderStartWidth,borderInlineStartColor:bd-s-c/borderStartColor,borderRight:bd-r,borderRightColor:bd-r-c,borderInlineEnd:bd-e/borderEnd,borderInlineEndWidth:bd-e-w/borderEndWidth,borderInlineEndColor:bd-e-c/borderEndColor,borderTop:bd-t,borderTopColor:bd-t-c,borderBottom:bd-b,borderBottomColor:bd-b-c,borderBlockEnd:bd-be,borderBlockEndColor:bd-be-c,borderBlockStart:bd-bs,borderBlockStartColor:bd-bs-c,opacity:op,boxShadow:bx-sh/shadow,boxShadowColor:bx-sh-c/shadowColor,mixBlendMode:mix-bm,filter:filter,brightness:brightness,contrast:contrast,grayscale:grayscale,hueRotate:hue-rotate,invert:invert,saturate:saturate,sepia:sepia,dropShadow:drop-shadow,blur:blur,backdropFilter:bkdp,backdropBlur:bkdp-blur,backdropBrightness:bkdp-brightness,backdropContrast:bkdp-contrast,backdropGrayscale:bkdp-grayscale,backdropHueRotate:bkdp-hue-rotate,backdropInvert:bkdp-invert,backdropOpacity:bkdp-opacity,backdropSaturate:bkdp-saturate,backdropSepia:bkdp-sepia,borderCollapse:bd-cl,borderSpacing:bd-sp,borderSpacingX:bd-sx,borderSpacingY:bd-sy,tableLayout:tbl,transitionTimingFunction:trs-tmf,transitionDelay:trs-dly,transitionDuration:trs-dur,transitionProperty:trs-prop,transition:trs,animation:anim,animationName:anim-n,animationTimingFunction:anim-tmf,animationDuration:anim-dur,animationDelay:anim-dly,animationPlayState:anim-ps,animationComposition:anim-comp,animationFillMode:anim-fm,animationDirection:anim-dir,animationIterationCount:anim-ic,animationRange:anim-r,animationState:anim-s,animationRangeStart:anim-rs,animationRangeEnd:anim-re,animationTimeline:anim-tl,transformOrigin:trf-o,transformBox:trf-b,transformStyle:trf-s,transform:trf,rotate:rotate,rotateX:rotate-x,rotateY:rotate-y,rotateZ:rotate-z,scale:scale,scaleX:scale-x,scaleY:scale-y,translate:translate,translateX:translate-x/x,translateY:translate-y/y,translateZ:translate-z/z,accentColor:ac-c,caretColor:ca-c,scrollBehavior:scr-bhv,scrollbar:scr-bar,scrollbarColor:scr-bar-c,scrollbarGutter:scr-bar-g,scrollbarWidth:scr-bar-w,scrollMargin:scr-m,scrollMarginLeft:scr-ml,scrollMarginRight:scr-mr,scrollMarginTop:scr-mt,scrollMarginBottom:scr-mb,scrollMarginBlock:scr-my/scrollMarginY,scrollMarginBlockEnd:scr-mbe,scrollMarginBlockStart:scr-mbt,scrollMarginInline:scr-mx/scrollMarginX,scrollMarginInlineEnd:scr-me,scrollMarginInlineStart:scr-ms,scrollPadding:scr-p,scrollPaddingBlock:scr-py/scrollPaddingY,scrollPaddingBlockStart:scr-pbs,scrollPaddingBlockEnd:scr-pbe,scrollPaddingInline:scr-px/scrollPaddingX,scrollPaddingInlineEnd:scr-pe,scrollPaddingInlineStart:scr-ps,scrollPaddingLeft:scr-pl,scrollPaddingRight:scr-pr,scrollPaddingTop:scr-pt,scrollPaddingBottom:scr-pb,scrollSnapAlign:scr-sa,scrollSnapStop:scrs-s,scrollSnapType:scrs-t,scrollSnapStrictness:scrs-strt,scrollSnapMargin:scrs-m,scrollSnapMarginTop:scrs-mt,scrollSnapMarginBottom:scrs-mb,scrollSnapMarginLeft:scrs-ml,scrollSnapMarginRight:scrs-mr,scrollSnapCoordinate:scrs-c,scrollSnapDestination:scrs-d,scrollSnapPointsX:scrs-px,scrollSnapPointsY:scrs-py,scrollSnapTypeX:scrs-tx,scrollSnapTypeY:scrs-ty,scrollTimeline:scrtl,scrollTimelineAxis:scrtl-a,scrollTimelineName:scrtl-n,touchAction:tch-a,userSelect:us,overflow:ov,overflowWrap:ov-wrap,overflowX:ov-x,overflowY:ov-y,overflowAnchor:ov-a,overflowBlock:ov-b,overflowInline:ov-i,overflowClipBox:ovcp-bx,overflowClipMargin:ovcp-m,overscrollBehaviorBlock:ovs-bb,overscrollBehaviorInline:ovs-bi,fill:fill,stroke:stk,strokeWidth:stk-w,strokeDasharray:stk-dsh,strokeDashoffset:stk-do,strokeLinecap:stk-lc,strokeLinejoin:stk-lj,strokeMiterlimit:stk-ml,strokeOpacity:stk-op,srOnly:sr,debug:debug,appearance:ap,backfaceVisibility:bfv,clipPath:cp-path,hyphens:hy,mask:msk,maskImage:msk-i,maskSize:msk-s,textSizeAdjust:txt-adj,container:cq,containerName:cq-n,containerType:cq-t,cursor:cursor,textStyle:textStyle".split(",").forEach(t=>{const[e,r]=t.split(":"),[n,...a]=r.split("/");ut.set(e,n),a.length&&a.forEach(t=>{pt.set("1"===t?n:t,e)})});var gt=t=>pt.get(t)||t,ht={conditions:{shift:function(t){return t.sort((t,e)=>{const r=lt(t),n=lt(e);return r&&!n?1:!r&&n?-1:0})},finalize:function(t){return t.map(t=>it.has(t)?t.replace(ct,""):dt.test(t)?`[${X(t.trim())}]`:t)},breakpoints:{keys:["base","sm","md","lg","xl","2xl"]}},utility:{prefix:"sc",transform:(t,e)=>{const r=gt(t);return{className:`${ut.get(r)||ot(r)}_${X(e)}`}},hasShorthand:!0,toHash:(t,e)=>e(t.join(":")),resolveShorthand:gt}},bt=function(t){const{utility:e,hash:r,conditions:n=et}=t,a=t=>[e.prefix,t].filter(Boolean).join("-");return Y(({base:o,...i}={})=>{const s=tt(Object.assign(i,o),t),l=new Set;return Q(s,(t,o)=>{if(null==t)return;const i=function(t){return"string"==typeof t&&H.test(t)}(t),[s,...c]=n.shift(o),d=c.slice().filter(t=>!(t=>"base"===t)(t));const u=e.transform(s,function(t){return"string"==typeof t?t.replace(H,"").trim():t}((t=>"string"==typeof t?t.replaceAll(/[\n\s]+/g," "):t)(t)));let p=((t,o)=>{let i;if(r){const r=[...n.finalize(t),o];i=a(e.toHash(r,G))}else i=[...n.finalize(t),a(o)].join(":");return i})(d,u.className);i&&(p=`${p}!`),l.add(p)}),Array.from(l).join(" ")})}(ht),ft=(...t)=>bt(wt(...t));ft.raw=(...t)=>wt(...t);var{mergeCss:wt}=function(t){function e(e){const r=rt(...e);return 1===r.length?r:r.map(e=>tt(e,t))}return{mergeCss:Y(function(...t){return q(...e(t))}),assignCss:function(...t){return Object.assign({},...e(t))}}}(ht),mt=({width:t=24,height:e=24})=>p("svg",{width:t,height:e,viewBox:"0 0 51 49",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[u("path",{d:"M25.6912 0.895264C11.9301 0.895264 0.772217 12.1784 0.772217 26.0887C0.772217 36.1757 6.63365 44.869 15.0984 48.8953L19.3546 37.2704C15.5262 35.049 12.9439 30.8733 12.9439 26.0887C12.9439 18.9707 18.6522 13.2036 25.686 13.2036C32.7197 13.2036 38.428 18.976 38.428 26.0887C38.428 30.8733 35.8458 35.0437 32.0174 37.2704L36.2735 48.8953C44.7383 44.869 50.5997 36.1704 50.5997 26.0887C50.605 12.1784 39.4472 0.895264 25.6912 0.895264Z",fill:"url(#paint0_linear_1463_870)"}),u("path",{d:"M35.4972 26.0887C28.9599 27.915 27.4971 29.3941 25.6912 36.0048C23.8852 29.3941 22.4225 27.915 15.8851 26.0887C22.4225 24.2625 23.8852 22.7833 25.6912 16.1726C27.4971 22.7833 28.9599 24.2625 35.4972 26.0887Z",fill:"white"}),u("defs",{children:p("linearGradient",{id:"paint0_linear_1463_870",x1:"0",y1:"25.4765",x2:"50.2406",y2:"25.4765",gradientUnits:"userSpaceOnUse",children:[u("stop",{stopColor:"#FEBF4E"}),u("stop",{offset:"0.715",stopColor:"#FC4CD2"})]})})]}),yt=({width:t=24,height:e=24})=>p("svg",{id:"Logo",xmlns:"http://www.w3.org/2000/svg",version:"1.1",width:t,height:e,viewBox:"0 0 148.8 85.5",children:[u("path",{fill:"#a5ff71",d:"M144.6,39c-1.4-2.1-2-4.6-1.7-7s.4-4.6.2-7c-1.3-13.4-12.7-24.2-26.1-24.8-9.3-.4-17.7,3.8-22.9,10.6-2.2,2.8-5.7,4.1-9.2,3.9-3.4-.2-6.9-.4-10.5-.4s-8.1.2-12.1.5-5.9-1.1-7.7-3.6C48.5,3,38-1.7,26.6.7,17,2.7,9.1,10.1,6.3,19.5c-1.2,4.2-1.5,8.3-.9,12.1.4,2.9-.2,5.8-1.8,8.3-2.2,3.5-3.4,7.1-3.4,11,0,16.8,22.7,34,54.3,34.5,6.2,0,13.9-3.5,22.2-3.3,8.9.2,15.3,3.1,23,3.3,29,.9,49-18.6,49-34.5s-1.4-8.2-4.1-11.9ZM25.3,40.6c-9.9,0-17.9-8-17.9-17.9S15.5,4.9,25.3,4.9s17.9,8,17.9,17.9-8,17.9-17.9,17.9ZM69.1,48.1c-1,0-1.8-1-1.8-2.2s.8-2.2,1.8-2.2,1.8,1,1.8,2.2-.8,2.2-1.8,2.2ZM79.7,48.1c-1,0-1.8-1-1.8-2.2s.8-2.2,1.8-2.2,1.8,1,1.8,2.2-.8,2.2-1.8,2.2ZM123.3,40.6c-9.9,0-17.9-8-17.9-17.9s8-17.9,17.9-17.9,17.9,8,17.9,17.9-8,17.9-17.9,17.9Z"}),u("circle",{fill:"#a5ff71",cx:"30.6",cy:"22.7",r:"7.8"}),u("circle",{fill:"#a5ff71",cx:"118.5",cy:"22.7",r:"7.8"})]}),St=class extends i{constructor(){super(...arguments),this.state={hasError:!1}}static getDerivedStateFromError(t){return{hasError:!0,error:t}}componentDidCatch(t,e){console.error("SupraConnect Error:",t,e),this.props.onError?.(t,e)}render(){return this.state.hasError?this.props.fallback?this.props.fallback:p("div",{className:ft({backgroundColor:"#fee2e2",color:"#dc2626",padding:"1rem",borderRadius:"0.5rem",border:"1px solid #fecaca",textAlign:"center",maxWidth:"400px",margin:"0 auto"}),children:[u("h3",{className:ft({fontSize:"1.1rem",fontWeight:"600",marginBottom:"0.5rem"}),children:"Wallet Connection Error"}),u("p",{className:ft({fontSize:"0.9rem",marginBottom:"1rem"}),children:"Something went wrong while connecting to your wallet. Please try refreshing the page."}),u("button",{onClick:()=>this.setState({hasError:!1,error:void 0}),className:ft({backgroundColor:"#dc2626",color:"white",padding:"0.5rem 1rem",borderRadius:"0.25rem",border:"none",cursor:"pointer",fontSize:"0.9rem",fontWeight:"500",_hover:{backgroundColor:"#b91c1c"}}),children:"Try Again"})]}):this.props.children}},kt=(t={})=>{const e=F(),[a,o]=r(!1),[i,s]=r(!1),[l,c]=r(()=>e.getState());n(()=>e.subscribe(c),[e]);const{connectedWallet:d,connectionError:h,availableWallets:b,connectingWallet:f}=l,w=b.includes("starkey"),m=b.includes("ribbit"),y=()=>{s(!0),setTimeout(()=>{o(!1),s(!1),e.clearError()},300)};return p(St,{children:[p("button",{onClick:d?async()=>{try{await e.disconnect()}catch(t){}}:()=>o(!0),className:ft({display:"flex",gap:"0.75rem",alignItems:"center",justifyContent:"center",color:"#DD1438",fontWeight:"600",fontSize:"0.95rem",backgroundColor:"white",borderRadius:"0.375rem",border:"2px solid #DD1438",padding:"0.75rem 1.25rem",cursor:"pointer",transition:"all 0.2s ease",width:t.width??"100%",_hover:{backgroundColor:"#DD1438",color:"white"},_active:{backgroundColor:"#C1122D",color:"white"}}),children:[u(K,{width:20,height:20}),d?`${d.walletAddress.slice(0,6)}...${d.walletAddress.slice(-4)}`:"Connect Wallet"]}),a&&g(u("div",{className:ft({position:"fixed",top:0,left:0,right:0,bottom:0,backgroundColor:"rgba(0, 0, 0, 0.8)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:1e3,animation:i?"fadeOut 0.3s ease-in":"fadeIn 0.3s ease-out"}),onClick:y,children:p("div",{className:ft({backgroundColor:"white",borderRadius:"0.75rem",padding:"2rem",maxWidth:"420px",border:"2px solid #DD1438",width:"90%",position:"relative",animation:i?"popOut 0.3s ease-in":"popUp 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55)",transformOrigin:"center"}),onClick:t=>t.stopPropagation(),children:[u("button",{onClick:y,className:ft({position:"absolute",top:"1rem",right:"1rem",background:"none",border:"none",fontSize:"1.5rem",cursor:"pointer",color:"gray",_hover:{color:"black"}}),children:"×"}),p("div",{className:ft({textAlign:"center",marginBottom:"2rem"}),children:[u("h2",{className:ft({fontSize:"1.5rem",fontWeight:"700",color:"#DD1438",marginBottom:"0.5rem"}),children:"Connect Wallet"}),u("p",{className:ft({color:"#6b7280",fontSize:"0.9rem"}),children:"Choose your preferred wallet to connect"})]}),p("div",{className:ft({display:"flex",flexDirection:"column",gap:"1rem"}),children:[h&&u("div",{className:ft({backgroundColor:"#fee2e2",color:"#dc2626",padding:"0.75rem",borderRadius:"0.5rem",marginBottom:"1rem",fontSize:"0.9rem",textAlign:"center"}),children:h}),w?p("button",{onClick:async()=>{try{const r={dappMetadata:{...t.dappMetadata,...t.metadata}};await e.connectStarkey(r),y()}catch(t){}},disabled:null!==f,className:ft({display:"flex",alignItems:"center",gap:"1rem",padding:"1.25rem",border:"2px solid #e5e7eb",borderRadius:"0.5rem",backgroundColor:"#1e1b4b",cursor:null!==f?"not-allowed":"pointer",fontWeight:"600",fontSize:"1rem",color:"white",opacity:null!==f?.6:1,transition:"all 0.2s ease",_hover:{backgroundColor:null!==f?"#1e1b4b":"#312e81",color:"white"}}),children:[u(mt,{width:28,height:28}),u("span",{children:"starkey"===f?"Connecting...":"Starkey Wallet"})]}):p("a",{href:"https://starkey.app/",target:"_blank",rel:"noopener noreferrer",className:ft({display:"flex",alignItems:"center",gap:"1rem",padding:"1.25rem",border:"2px solid #e5e7eb",borderRadius:"0.5rem",backgroundColor:"#1e1b4b",cursor:"pointer",fontWeight:"600",fontSize:"1rem",color:"white",textDecoration:"none",transition:"all 0.2s ease",_hover:{backgroundColor:"#312e81",color:"white"}}),children:[u(mt,{width:28,height:28}),u("span",{children:"Install Starkey Wallet"})]}),m?p("button",{onClick:async()=>{try{const r={dappMetadata:{...t.dappMetadata,...t.metadata}};await e.connectRibbit(r),y()}catch(t){}},disabled:null!==f,className:ft({display:"flex",alignItems:"center",gap:"1rem",padding:"1.25rem",border:"2px solid #e5e7eb",borderRadius:"0.5rem",backgroundColor:"#1e1b4b",cursor:null!==f?"not-allowed":"pointer",fontWeight:"600",fontSize:"1rem",color:"white",opacity:null!==f?.6:1,transition:"all 0.2s ease",_hover:{backgroundColor:null!==f?"#1e1b4b":"#312e81",color:"white"}}),children:[u(yt,{width:28,height:28}),u("span",{children:"ribbit"===f?"Connecting...":"Ribbit Wallet"})]}):p("a",{href:"https://ribbitwallet.com/",target:"_blank",rel:"noopener noreferrer",className:ft({display:"flex",alignItems:"center",gap:"1rem",padding:"1.25rem",border:"2px solid #e5e7eb",borderRadius:"0.5rem",backgroundColor:"#1e1b4b",cursor:"pointer",fontWeight:"600",fontSize:"1rem",color:"white",textDecoration:"none",transition:"all 0.2s ease",_hover:{backgroundColor:"#312e81",color:"white"}}),children:[u(yt,{width:28,height:28}),u("span",{children:"Install Ribbit Wallet"})]})]})]})}),document.body)]})};export{O as ConnectionStore,z as DEFAULT_RPC_URL,N as RibbitWalletUtils,_ as StarkeyWalletUtils,kt as SupraConnectButton,L as SupraConnectProvider,U as useSupraConnect};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gerritsen/supra-connect",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.10",
|
|
4
4
|
"description": "Custom React wallet connector for Supra L1 blockchain. Native support for Starkey and Ribbit wallets with a unified API. Built with care for the Supra ecosystem.",
|
|
5
5
|
"author": "Martin Gerritsen",
|
|
6
6
|
"license": "MIT",
|