@spicenet-io/spiceflow-ui 3.2.2 → 3.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- "use strict";const o=require("viem"),c=require("./Button-B--Fjq1m.js"),a=e=>{if(!e)return!1;const t=e.connector;if(!t)return!1;if(t.isEmbeddedWallet===!0)return!0;const r=(t.key||t.connectorKey||"").toLowerCase();if(r.includes("embedded")||r.includes("turnkey"))return!0;const n=(t.name||e.walletName||"").toLowerCase();return!!(n.includes("embedded")||n.includes("turnkey"))},s=e=>(e?.connectedWallets||[]).find(t=>a(t))||(a(e?.primaryWallet)?e.primaryWallet:null),u=e=>(e?.connectedWallets||[]).find(t=>t?.address&&t?.connector&&!a(t))||null,l=async(e,t)=>{if(!e?.address)throw new Error("Wallet not available");if(typeof e.getWalletClient=="function"){const r=t===void 0?[void 0]:[String(t),t,void 0];let n=null;for(const d of r)try{const i=await e.getWalletClient(d);if(i)return i}catch(i){n=i}if(n)throw n}if(typeof e.getEthereumProvider=="function"){const r=await e.getEthereumProvider(),n=t?c.getChainConfig(t)?.viemChain:void 0;return o.createWalletClient({account:e.address,chain:n,transport:o.custom(r)})}throw new Error("Wallet client not available")},m=async(e,t)=>{if(!e?.address)throw new Error("Wallet not available");if(typeof e.getEthereumProvider=="function")return e.getEthereumProvider();const r=await l(e,t);return{request:n=>r.request(n)}},f=(e,t)=>({address:e?.address||t.address,chainId:Number(e?.chainId??t.chainId),contractAddress:e?.contractAddress||e?.delegate||t.contractAddress,nonce:BigInt(e?.nonce??t.nonce),r:e?.r,s:e?.s,yParity:(()=>{if(typeof e?.yParity=="number")return e.yParity;const r=Number(e?.v??27);return Number.isFinite(r)?r>=27?r-27:r:0})()});exports.getDynamicEmbeddedWallet=s,exports.getDynamicExternalWallet=u,exports.getProviderEthereumProvider=m,exports.getProviderWalletClient=l,exports.normalizeAuthorization=f;
2
+ "use strict";const o=require("viem"),c=require("./Button-Hm-OAnzQ.js"),a=e=>{if(!e)return!1;const t=e.connector;if(!t)return!1;if(t.isEmbeddedWallet===!0)return!0;const r=(t.key||t.connectorKey||"").toLowerCase();if(r.includes("embedded")||r.includes("turnkey"))return!0;const n=(t.name||e.walletName||"").toLowerCase();return!!(n.includes("embedded")||n.includes("turnkey"))},s=e=>(e?.connectedWallets||[]).find(t=>a(t))||(a(e?.primaryWallet)?e.primaryWallet:null),u=e=>(e?.connectedWallets||[]).find(t=>t?.address&&t?.connector&&!a(t))||null,l=async(e,t)=>{if(!e?.address)throw new Error("Wallet not available");if(typeof e.getWalletClient=="function"){const r=t===void 0?[void 0]:[String(t),t,void 0];let n=null;for(const d of r)try{const i=await e.getWalletClient(d);if(i)return i}catch(i){n=i}if(n)throw n}if(typeof e.getEthereumProvider=="function"){const r=await e.getEthereumProvider(),n=t?c.getChainConfig(t)?.viemChain:void 0;return o.createWalletClient({account:e.address,chain:n,transport:o.custom(r)})}throw new Error("Wallet client not available")},m=async(e,t)=>{if(!e?.address)throw new Error("Wallet not available");if(typeof e.getEthereumProvider=="function")return e.getEthereumProvider();const r=await l(e,t);return{request:n=>r.request(n)}},f=(e,t)=>({address:e?.address||t.address,chainId:Number(e?.chainId??t.chainId),contractAddress:e?.contractAddress||e?.delegate||t.contractAddress,nonce:BigInt(e?.nonce??t.nonce),r:e?.r,s:e?.s,yParity:(()=>{if(typeof e?.yParity=="number")return e.yParity;const r=Number(e?.v??27);return Number.isFinite(r)?r>=27?r-27:r:0})()});exports.getDynamicEmbeddedWallet=s,exports.getDynamicExternalWallet=u,exports.getProviderEthereumProvider=m,exports.getProviderWalletClient=l,exports.normalizeAuthorization=f;
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{createWalletClient as l,custom as d}from"viem";import{g as c}from"./Button-dU4UsC56.js";const o=t=>{if(!t)return!1;const e=t.connector;if(!e)return!1;if(e.isEmbeddedWallet===!0)return!0;const r=(e.key||e.connectorKey||"").toLowerCase();if(r.includes("embedded")||r.includes("turnkey"))return!0;const n=(e.name||t.walletName||"").toLowerCase();return!!(n.includes("embedded")||n.includes("turnkey"))},u=t=>(t?.connectedWallets||[]).find(e=>o(e))||(o(t?.primaryWallet)?t.primaryWallet:null),f=t=>(t?.connectedWallets||[]).find(e=>e?.address&&e?.connector&&!o(e))||null,i=async(t,e)=>{if(!t?.address)throw new Error("Wallet not available");if(typeof t.getWalletClient=="function"){const r=e===void 0?[void 0]:[String(e),e,void 0];let n=null;for(const s of r)try{const a=await t.getWalletClient(s);if(a)return a}catch(a){n=a}if(n)throw n}if(typeof t.getEthereumProvider=="function"){const r=await t.getEthereumProvider(),n=e?c(e)?.viemChain:void 0;return l({account:t.address,chain:n,transport:d(r)})}throw new Error("Wallet client not available")},m=async(t,e)=>{if(!t?.address)throw new Error("Wallet not available");if(typeof t.getEthereumProvider=="function")return t.getEthereumProvider();const r=await i(t,e);return{request:n=>r.request(n)}},y=(t,e)=>({address:t?.address||e.address,chainId:Number(t?.chainId??e.chainId),contractAddress:t?.contractAddress||t?.delegate||e.contractAddress,nonce:BigInt(t?.nonce??e.nonce),r:t?.r,s:t?.s,yParity:(()=>{if(typeof t?.yParity=="number")return t.yParity;const r=Number(t?.v??27);return Number.isFinite(r)?r>=27?r-27:r:0})()});export{m as a,f as b,i as c,u as g,y as n};
2
+ import{createWalletClient as l,custom as d}from"viem";import{g as c}from"./Button-B1aDv3aK.js";const o=t=>{if(!t)return!1;const e=t.connector;if(!e)return!1;if(e.isEmbeddedWallet===!0)return!0;const r=(e.key||e.connectorKey||"").toLowerCase();if(r.includes("embedded")||r.includes("turnkey"))return!0;const n=(e.name||t.walletName||"").toLowerCase();return!!(n.includes("embedded")||n.includes("turnkey"))},u=t=>(t?.connectedWallets||[]).find(e=>o(e))||(o(t?.primaryWallet)?t.primaryWallet:null),f=t=>(t?.connectedWallets||[]).find(e=>e?.address&&e?.connector&&!o(e))||null,i=async(t,e)=>{if(!t?.address)throw new Error("Wallet not available");if(typeof t.getWalletClient=="function"){const r=e===void 0?[void 0]:[String(e),e,void 0];let n=null;for(const s of r)try{const a=await t.getWalletClient(s);if(a)return a}catch(a){n=a}if(n)throw n}if(typeof t.getEthereumProvider=="function"){const r=await t.getEthereumProvider(),n=e?c(e)?.viemChain:void 0;return l({account:t.address,chain:n,transport:d(r)})}throw new Error("Wallet client not available")},m=async(t,e)=>{if(!t?.address)throw new Error("Wallet not available");if(typeof t.getEthereumProvider=="function")return t.getEthereumProvider();const r=await i(t,e);return{request:n=>r.request(n)}},y=(t,e)=>({address:t?.address||e.address,chainId:Number(t?.chainId??e.chainId),contractAddress:t?.contractAddress||t?.delegate||e.contractAddress,nonce:BigInt(t?.nonce??e.nonce),r:t?.r,s:t?.s,yParity:(()=>{if(typeof t?.yParity=="number")return t.yParity;const r=Number(t?.v??27);return Number.isFinite(r)?r>=27?r-27:r:0})()});export{m as a,f as b,i as c,u as g,y as n};
@@ -38,7 +38,8 @@ export interface SpiceSupplyProps {
38
38
  deliveryToken: Address;
39
39
  deliveryAmount: bigint;
40
40
  deliveryRecipient: Address;
41
- }) => ChainBatch | null;
41
+ sourceAsset?: Asset;
42
+ }) => ChainBatch | null | Promise<ChainBatch | null>;
42
43
  onPayExecute?: (ctx: PayExecuteContext) => Promise<string | void>;
43
44
  actionLabel: string;
44
45
  amountDirection?: "input" | "output";
@@ -1,4 +1,23 @@
1
1
  export declare const spicenetAbi: readonly [{
2
+ readonly type: "function";
3
+ readonly name: "closeRebalancingRequest";
4
+ readonly inputs: readonly [{
5
+ readonly name: "args";
6
+ readonly type: "tuple";
7
+ readonly internalType: "struct Spicenet.CloseRebalancingRequestArgs";
8
+ readonly components: readonly [{
9
+ readonly name: "idempotenceKey";
10
+ readonly type: "bytes32";
11
+ readonly internalType: "bytes32";
12
+ }, {
13
+ readonly name: "repaymentChainTokenAmount";
14
+ readonly type: "uint256";
15
+ readonly internalType: "uint256";
16
+ }];
17
+ }];
18
+ readonly outputs: readonly [];
19
+ readonly stateMutability: "nonpayable";
20
+ }, {
2
21
  readonly type: "function";
3
22
  readonly name: "createWithdrawalRequest";
4
23
  readonly inputs: readonly [{
@@ -46,4 +65,51 @@ export declare const spicenetAbi: readonly [{
46
65
  }];
47
66
  readonly outputs: readonly [];
48
67
  readonly stateMutability: "nonpayable";
68
+ }, {
69
+ readonly type: "function";
70
+ readonly name: "createRebalancingRequest";
71
+ readonly inputs: readonly [{
72
+ readonly name: "request";
73
+ readonly type: "tuple";
74
+ readonly internalType: "struct Spicenet.CreateRebalancingRequestArgs";
75
+ readonly components: readonly [{
76
+ readonly name: "idempotenceKey";
77
+ readonly type: "bytes32";
78
+ readonly internalType: "bytes32";
79
+ }, {
80
+ readonly name: "nbf";
81
+ readonly type: "uint256";
82
+ readonly internalType: "uint256";
83
+ }, {
84
+ readonly name: "exp";
85
+ readonly type: "uint256";
86
+ readonly internalType: "uint256";
87
+ }, {
88
+ readonly name: "metadata";
89
+ readonly type: "string";
90
+ readonly internalType: "string";
91
+ }, {
92
+ readonly name: "recipient";
93
+ readonly type: "string";
94
+ readonly internalType: "string";
95
+ }, {
96
+ readonly name: "fromChainToken";
97
+ readonly type: "string";
98
+ readonly internalType: "string";
99
+ }, {
100
+ readonly name: "fromChainTokenAmount";
101
+ readonly type: "uint256";
102
+ readonly internalType: "uint256";
103
+ }, {
104
+ readonly name: "toChainToken";
105
+ readonly type: "string";
106
+ readonly internalType: "string";
107
+ }, {
108
+ readonly name: "toChainTokenAmountMin";
109
+ readonly type: "uint256";
110
+ readonly internalType: "uint256";
111
+ }];
112
+ }];
113
+ readonly outputs: readonly [];
114
+ readonly stateMutability: "nonpayable";
49
115
  }];
@@ -0,0 +1,70 @@
1
+ import { type Address } from "viem";
2
+ import type { ChainBatch } from "../../types/authorization";
3
+ import type { Asset } from "../../types/assets";
4
+ export declare const DEFAULT_BRIDGE_FEE_BUFFER_BPS = 1500;
5
+ export declare const DEFAULT_SQUID_INTEGRATOR_ID = "spiceflow-75f053db-70ab-4f37-83cc-abf68cb5b70d";
6
+ export type BridgeProvider = "cctp" | "squid";
7
+ export type CctpTransferMode = "fast" | "standard";
8
+ export interface BridgeFeeQuote {
9
+ provider: BridgeProvider;
10
+ sourceChainId: number;
11
+ destinationChainId: number;
12
+ tokenIn: Address;
13
+ tokenOut: Address;
14
+ amountIn: bigint;
15
+ estimatedAmountOut: bigint;
16
+ quotedBridgeFee: bigint;
17
+ bufferedBridgeFee: bigint;
18
+ bufferBps: number;
19
+ quoteId?: string;
20
+ route?: string;
21
+ minFinalityThreshold?: 1000 | 2000;
22
+ metadata?: Record<string, unknown>;
23
+ }
24
+ export interface SquidQuoteParams {
25
+ sourceChainId: number;
26
+ destinationChainId: number;
27
+ tokenIn: Address;
28
+ tokenOut: Address;
29
+ amountIn: bigint;
30
+ fromAddress: Address;
31
+ toAddress: Address;
32
+ integratorId?: string;
33
+ slippage?: number;
34
+ bufferBps?: number;
35
+ quoteOnly?: boolean;
36
+ baseUrl?: string;
37
+ fetchImpl?: typeof fetch;
38
+ }
39
+ export interface RebalancingRequestParams {
40
+ spicenetChainId: number;
41
+ recipient: Address;
42
+ fromChainId: number;
43
+ fromToken: Address;
44
+ fromAmount: bigint;
45
+ toChainId: number;
46
+ toToken: Address;
47
+ toAmountMin: bigint;
48
+ metadata?: Record<string, unknown>;
49
+ nbf?: bigint;
50
+ exp?: bigint;
51
+ idempotenceKey?: `0x${string}`;
52
+ }
53
+ export declare function quoteCctpFee(params: {
54
+ sourceChainId: number;
55
+ destinationChainId: number;
56
+ tokenIn: Address;
57
+ tokenOut: Address;
58
+ amountIn: bigint;
59
+ transferMode?: CctpTransferMode;
60
+ bufferBps?: number;
61
+ fetchImpl?: typeof fetch;
62
+ }): Promise<BridgeFeeQuote>;
63
+ export declare function quoteSquidFee(params: SquidQuoteParams): Promise<BridgeFeeQuote>;
64
+ export declare function buildRebalancingMetadata(params: {
65
+ bridgeQuote: BridgeFeeQuote;
66
+ sourceAsset?: Pick<Asset, "symbol" | "chainId" | "address" | "decimals">;
67
+ reason?: string;
68
+ extra?: Record<string, unknown>;
69
+ }): Record<string, unknown>;
70
+ export declare function buildRebalancingBatch(params: RebalancingRequestParams): ChainBatch;
@@ -49,4 +49,9 @@ export declare class RelayerService {
49
49
  getRollupTimestamp(): Promise<RollupTimestamp>;
50
50
  }
51
51
  export declare const relayerService: RelayerService;
52
+ type SmartWalletSigner = (message: string) => Promise<string | {
53
+ signature?: string;
54
+ }>;
55
+ export declare function ensureSmartWallet(address: string, signMessage: SmartWalletSigner): Promise<void>;
52
56
  export declare const createInitialSteps: (chainBatches: ChainBatch[], customGetChainName?: (chainId: number) => string) => SwapStep[];
57
+ export {};
@@ -1,4 +1,4 @@
1
- import type { Address } from "viem";
1
+ import { type Address } from "viem";
2
2
  import type { Asset } from "../types/assets";
3
3
  import type { ChainToken } from "@spicenet-io/spiceflow-core";
4
4
  type AssetTokenInput = Pick<Asset, "address" | "symbol" | "name" | "decimals" | "chainId" | "displaySymbol" | "displayName" | "receiptTokenName" | "chainTokens" | "isUniversal">;
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "@spicenet-io/spiceflow-ui",
3
- "version": "3.2.2",
3
+ "version": "3.2.3",
4
4
  "description": "Spiceflow UI SDK",
5
5
  "type": "module",
6
+ "packageManager": "bun@1.3.13",
6
7
  "main": "dist/index.cjs.js",
7
8
  "module": "dist/index.js",
8
9
  "types": "dist/index.d.ts",
@@ -34,15 +35,14 @@
34
35
  "./dist/providers/custom.css"
35
36
  ],
36
37
  "files": [
37
- "dist",
38
- ".npmrc"
38
+ "dist"
39
39
  ],
40
40
  "scripts": {
41
41
  "build": "rm -rf dist && tsc -p tsconfig.build.json --emitDeclarationOnly && rollup -c rollup.config.mjs",
42
42
  "dev": "rollup -c rollup.config.mjs --watch",
43
- "dev:link": "npm run build && npm link && echo 'SDK linked globally. Run: npm link @spicenet-io/spiceflow-ui in your project'",
43
+ "dev:link": "bun run build && bun link && echo 'SDK linked globally. Run: bun link @spicenet-io/spiceflow-ui in your project'",
44
44
  "clean": "rm -rf dist",
45
- "prepublishOnly": "npm run build"
45
+ "prepublishOnly": "PATH=$HOME/.bun/bin:$PATH bun run build"
46
46
  },
47
47
  "keywords": [
48
48
  "react",
@@ -58,9 +58,9 @@
58
58
  "author": "",
59
59
  "license": "MIT",
60
60
  "dependencies": {
61
- "@spicenet-io/spiceflow-core": "^0.3.10",
62
- "lucide-react": "^0.562.0",
63
- "tslib": "^2.8.1"
61
+ "@spicenet-io/spiceflow-core": "0.3.10",
62
+ "lucide-react": "0.562.0",
63
+ "tslib": "2.8.1"
64
64
  },
65
65
  "peerDependencies": {
66
66
  "@dynamic-labs/ethereum": ">=4.15.0 <5.0.0",
@@ -89,46 +89,46 @@
89
89
  }
90
90
  },
91
91
  "devDependencies": {
92
- "@dynamic-labs/ethereum": "^4.70.0",
93
- "@dynamic-labs/sdk-react-core": "^4.70.0",
94
- "@dynamic-labs/wallet-connector-core": "^4.70.0",
95
- "@privy-io/react-auth": "^2.24.0",
96
- "@rollup/plugin-commonjs": "^28.0.6",
97
- "@rollup/plugin-image": "^3.0.3",
98
- "@rollup/plugin-json": "^6.1.0",
99
- "@rollup/plugin-node-resolve": "^16.0.1",
100
- "@rollup/plugin-replace": "^6.0.2",
101
- "@rollup/plugin-typescript": "^12.1.4",
102
- "@tanstack/react-query": "^5.90.5",
103
- "@types/node": "^24.3.0",
104
- "@types/react": "^18.3.3",
105
- "@types/react-dom": "^18.3.0",
106
- "@typescript-eslint/eslint-plugin": "^6.0.0",
107
- "@typescript-eslint/parser": "^6.0.0",
108
- "axios": "^1.11.0",
109
- "esbuild": "^0.24.0",
110
- "eslint": "^8.45.0",
111
- "eslint-config-prettier": "^10.1.8",
112
- "eslint-plugin-react": "^7.33.0",
113
- "eslint-plugin-react-hooks": "^4.6.0",
114
- "husky": "^9.1.7",
115
- "jest": "^29.6.0",
116
- "lint-staged": "^16.2.5",
117
- "postcss": "^8.5.6",
118
- "postcss-import": "^16.1.1",
92
+ "@dynamic-labs/ethereum": "4.70.0",
93
+ "@dynamic-labs/sdk-react-core": "4.70.0",
94
+ "@dynamic-labs/wallet-connector-core": "4.70.0",
95
+ "@privy-io/react-auth": "2.25.0",
96
+ "@rollup/plugin-commonjs": "28.0.9",
97
+ "@rollup/plugin-image": "3.0.3",
98
+ "@rollup/plugin-json": "6.1.0",
99
+ "@rollup/plugin-node-resolve": "16.0.3",
100
+ "@rollup/plugin-replace": "6.0.3",
101
+ "@rollup/plugin-typescript": "12.3.0",
102
+ "@tanstack/react-query": "5.90.10",
103
+ "@types/node": "24.10.1",
104
+ "@types/react": "18.3.27",
105
+ "@types/react-dom": "18.3.7",
106
+ "@typescript-eslint/eslint-plugin": "6.21.0",
107
+ "@typescript-eslint/parser": "6.21.0",
108
+ "axios": "1.13.5",
109
+ "esbuild": "0.24.2",
110
+ "eslint": "8.57.1",
111
+ "eslint-config-prettier": "10.1.8",
112
+ "eslint-plugin-react": "7.37.5",
113
+ "eslint-plugin-react-hooks": "4.6.2",
114
+ "husky": "9.1.7",
115
+ "jest": "29.7.0",
116
+ "lint-staged": "16.2.6",
117
+ "postcss": "8.5.6",
118
+ "postcss-import": "16.1.1",
119
119
  "prettier": "3.6.2",
120
- "react": "^18.3.1",
121
- "react-dom": "^18.3.1",
122
- "rollup": "^4.50.0",
123
- "rollup-plugin-copy": "^3.5.0",
124
- "rollup-plugin-esbuild": "^6.1.1",
125
- "rollup-plugin-peer-deps-external": "^2.2.4",
126
- "rollup-plugin-postcss": "^4.0.2",
127
- "sharp": "^0.34.5",
128
- "ts-node": "^10.9.2",
129
- "typescript": "^5.9.2",
120
+ "react": "18.3.1",
121
+ "react-dom": "18.3.1",
122
+ "rollup": "4.53.2",
123
+ "rollup-plugin-copy": "3.5.0",
124
+ "rollup-plugin-esbuild": "6.2.1",
125
+ "rollup-plugin-peer-deps-external": "2.2.4",
126
+ "rollup-plugin-postcss": "4.0.2",
127
+ "sharp": "0.34.5",
128
+ "ts-node": "10.9.2",
129
+ "typescript": "5.9.3",
130
130
  "viem": "2.33.1",
131
- "wagmi": "^2.18.2"
131
+ "wagmi": "2.19.5"
132
132
  },
133
133
  "lint-staged": {
134
134
  "*.{ts,tsx,js,jsx,json,md}": "prettier --write"
@@ -1,2 +0,0 @@
1
- "use client";
2
- "use strict";const v=require("react/jsx-runtime"),h=require("react"),y=require("@spicenet-io/spiceflow-core"),b=require("viem"),se=require("viem/actions");class p extends Error{constructor(e,o,r={}){super(o),this.code=e,this.context=r,this.name="SpiceflowError",Error.captureStackTrace&&Error.captureStackTrace(this,p)}}function ie(t){return t instanceof p}const L=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"owner",type:"address"},{indexed:!0,name:"spender",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"from",type:"address"},{indexed:!0,name:"to",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Transfer",type:"event"}],ce="0xcA11bde05977b3631167028862bE2a173976CA11",de={4114:"0x860aFc632a6D625B95d8B96f39ECC48E988c6962"},le=new Set([5115]);function ue(t){const e=de[t.id]??(le.has(t.id)?void 0:ce);return b.defineChain({id:t.id,name:t.name,nativeCurrency:t.nativeCurrency,rpcUrls:{default:{http:[t.rpcUrl]}},blockExplorers:{default:{name:t.displayName,url:t.blockExplorer}},testnet:t.network==="testnet",...e?{contracts:{multicall3:{address:e}}}:{}})}const pe=[1,8453,42161,4114,11155111,421614,84532,5115,123420001114,688688,688689],T=Object.fromEntries(pe.map(t=>y.getChainMeta(t)).filter(t=>t!=null).map(t=>[t.id,{...t,viemChain:ue(t),supportedTokens:y.getTokensForChain(t.id)}])),fe=T;let j={};const F=new Map,D=t=>{j={...t||{}},F.clear()},M=t=>{const e=j[t];return e&&typeof e=="string"&&e.length>0?e:T[t]?.rpcUrl},S=t=>T[t],k=t=>{const e=y.getChainMeta(t);return e?.displayName||e?.name||`Chain ${t}`},me=t=>{const e=y.getDelegateContract(t);if(!e)throw new Error(`Unsupported chain ID: ${t}`);return e},he=(t,e,o)=>{const r=S(t);return r?.blockExplorer?`${r.blockExplorer}/tx/${e}`:"#"},Y=t=>{const e=S(t);if(!e)throw new Error(`Unsupported chain ID: ${t}`);const o=M(t);if(!o)throw new Error(`No RPC URL configured for chain ID: ${t}`);const r=`${t}:${o}`,n=F.get(r);if(n)return n;const a=b.createPublicClient({chain:e.viemChain,transport:b.http(o,{timeout:15e3,retryCount:2,retryDelay:300}),batch:{multicall:{wait:16}}});return F.set(r,a),a},ge=()=>{const t={};return Object.values(T).forEach(e=>{t[e.id]={name:e.name,moralisName:e.moralisId||"",chain:e.viemChain,rpcUrl:M(e.id)||e.rpcUrl}}),t},ye=(t,e=[])=>{const o=S(t);if(!o)return[];const r=[];if(![11155111,421614,84532,688689].includes(t)){const a=e.find(i=>i.chainId===t&&i.isNative);a?r.push(a):r.push({address:y.ZERO_ADDRESS,name:o.nativeCurrency.name,symbol:o.nativeCurrency.symbol,decimals:o.nativeCurrency.decimals,balance:BigInt(0),balanceFormatted:0,balanceUsd:0,logoURI:void 0,isNative:!0,chainId:t})}if(!o.supportedTokens)return r;const n=r.some(a=>a.isNative);return o.supportedTokens.forEach(a=>{if(n&&y.isNativeToken(a.address))return;const i=e.find(d=>d.chainId===t&&d.address.toLowerCase()===a.address.toLowerCase());i?r.push(i):r.push({address:a.address,name:a.name,symbol:a.symbol,decimals:a.decimals,balance:BigInt(0),balanceFormatted:0,balanceUsd:0,logoURI:a.logo,isNative:!1,chainId:t})}),r},be=async(t,e)=>{const o=S(t);if(!o)throw new Error(`Unsupported chain ID: ${t}`);const r=e.toLowerCase();if(y.isNativeToken(r)){if(!o.nativeCurrency?.decimals)throw new Error(`Native currency decimals not configured for chain ${t}`);return o.nativeCurrency.decimals}if(o.supportedTokens){const n=o.supportedTokens.find(a=>a.address.toLowerCase()===r);if(n)return n.decimals}try{if(!b.isAddress(e,{strict:!1}))throw new Error(`Invalid token address: ${e}`);const n=b.getAddress(e),a=Y(t),i=await se.readContract(a,{address:n,abi:L,functionName:"decimals"});return Number(i)}catch{throw new Error(`Could not determine decimals for token ${e} on chain ${t}`)}},z=typeof process<"u"&&process.env?.NEXT_PUBLIC_RELAYER_API_URL||"https://tx-api-devserver.spicenet.io",H="__SPICEFLOW_RELAYER_API_URL__";function we(t,e){const o=e.match(/Output amount (\d+) is insufficient after fees (\d+) on chain (\d+)/);if(!o)return e;const[,r,n,a]=o,i=Number(a),d=BigInt(r),l=BigInt(n);let c;for(const u of t.intents){const B=u.chainBatches.find(R=>R.chainId===i);if(B){c=B;break}}const g=c?.tokenTransfers.find(u=>u.from==="escrow"&&u.to.toLowerCase()===t.user.toLowerCase()&&!y.isNativeToken(u.token));if(!g)return`Amount is too small to cover the estimated fee on ${k(i)}.`;const f=y.getTokenByAddress(g.token,i),w=f?.decimals??18,x=f?.symbol??"tokens",E=b.formatUnits(d,w),s=b.formatUnits(l,w);return`Amount is too small to cover the estimated fee on ${k(i)}. Amount: ${E} ${x}. Estimated fee: ${s} ${x}.`}function xe(){if(typeof globalThis>"u")return;const t=globalThis[H];return typeof t=="string"&&t.length>0?t:void 0}class Be{constructor(){this.baseUrl=z}setBaseUrl(e){this.baseUrl=e,typeof globalThis<"u"&&(globalThis[H]=e)}getBaseUrl(){return this.getEffectiveBaseUrl()}getEffectiveBaseUrl(){return xe()||this.baseUrl}async createAction(e){const o=await fetch(`${this.getEffectiveBaseUrl()}/actions`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e,(r,n)=>typeof n=="bigint"?n.toString():n)});if(!o.ok){const r=await o.text();throw new p("RELAYER_ERROR",`Relayer API error: ${o.status} - ${r}`,{httpStatus:o.status,responseBody:r,endpoint:"/actions"})}return await o.json()}async estimateActionFees(e){const o=await fetch(`${this.getEffectiveBaseUrl()}/actions/fees/estimate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e,(n,a)=>typeof a=="bigint"?a.toString():a)}),r=await o.json();if(!o.ok||!r.success||!r.data?.feeEstimate){const n=r.error?.message||`Relayer fee estimate error: ${o.status}`,a=we(e,n);throw new p("RELAYER_ERROR",a,{httpStatus:o.status,responseBody:JSON.stringify(r),endpoint:"/actions/fees/estimate"})}return r.data.feeEstimate}async estimateBatchGas(e){const o=await fetch(`${this.getEffectiveBaseUrl()}/actions/gas/estimate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e,(n,a)=>typeof a=="bigint"?a.toString():a)}),r=await o.json();if(!o.ok||!r.success||!r.data?.gasFee){const n=r.error?.message||`Relayer gas estimate error: ${o.status}`;throw new p("RELAYER_ERROR",n,{httpStatus:o.status,responseBody:JSON.stringify(r),endpoint:"/actions/gas/estimate"})}return{gasFee:BigInt(r.data.gasFee),gasQuoteSource:r.data.gasQuoteSource}}async executeStep(e,o,r,n){const a=`${this.getEffectiveBaseUrl()}/actions/${e}/intents/${o}/steps/${r}`,i=fetch(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});let d;try{d=await Promise.race([i,new Promise((l,c)=>setTimeout(()=>c(new p("RELAYER_EXECUTE_ERROR",`Execute step request timed out after ${1e4/1e3}s`,{actionId:e,intentIndex:o,stepIndex:r,endpoint:`/actions/${e}/intents/${o}/steps/${r}`})),1e4))])}catch(l){throw l}if(!d.ok){const l=await d.text();throw new p("RELAYER_EXECUTE_ERROR",`Execute step error: ${d.status} - ${l}`,{httpStatus:d.status,responseBody:l,endpoint:`/actions/${e}/intents/${o}/steps/${r}`,actionId:e})}return{success:!0,transactionHash:(await d.json()).transactionHash}}async checkStepStatus(e,o){const r=e.split("/");let n="";if(r.length>=2){const d=r[0],l=r[1];n=`${this.getEffectiveBaseUrl()}/actions/${d}/intents/${l}/steps/${o}`}else n=`${this.getEffectiveBaseUrl()}/actions/${e}/intents/0/steps/${o}`;const a=await fetch(n);if(!a.ok)throw new p("RELAYER_STATUS_ERROR",`Intent step status check failed: ${a.status}`,{httpStatus:a.status,endpoint:n,intentId:e});const i=await a.json();return{success:!0,data:{status:i.status==="error"?"reverted":i.status,transactionHash:i.txid}}}async createWallet(e,o){const r=await fetch(`${this.getEffectiveBaseUrl()}/wallets/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)});if(!r.ok){const n=await r.text();throw new p("RELAYER_ERROR",`Create wallet error: ${r.status} - ${n}`,{httpStatus:r.status,endpoint:`/wallets/${e}`})}return r.json()}async getWallet(e){const o=await fetch(`${this.getEffectiveBaseUrl()}/wallets/${e}`);if(!o.ok){const r=await o.text();throw new p("RELAYER_ERROR",`Get wallet error: ${o.status} - ${r}`,{httpStatus:o.status,endpoint:`/wallets/${e}`})}return o.json()}async createWithdrawal(e){const o=await fetch(`${this.getEffectiveBaseUrl()}/withdrawals`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e,(r,n)=>typeof n=="bigint"?n.toString():n)});if(!o.ok){const r=await o.text();throw new p("RELAYER_ERROR",`Create withdrawal error: ${o.status} - ${r}`,{httpStatus:o.status,endpoint:"/withdrawals"})}return o.json()}async getWithdrawal(e){const o=await fetch(`${this.getEffectiveBaseUrl()}/withdrawals/${e}`);if(!o.ok){const r=await o.text();throw new p("RELAYER_ERROR",`Get withdrawal error: ${o.status} - ${r}`,{httpStatus:o.status,endpoint:`/withdrawals/${e}`})}return o.json()}async getRollupTimestamp(){const e=await fetch(`${this.getEffectiveBaseUrl()}/time`);if(!e.ok)throw new p("RELAYER_ERROR",`Get rollup timestamp error: ${e.status}`,{httpStatus:e.status,endpoint:"/time"});return e.json()}}const I=new Be,Ee=(t,e)=>{const o=n=>e?e(n):k(n),r=[];return t.forEach((n,a)=>{const i=n.calls&&n.calls.length>0,d=n.tokenTransfers&&n.tokenTransfers.length>0;if(i||d){const l={stepId:a,status:a===0?"processing":"pending",chainId:n.chainId,chainName:o(n.chainId),description:"Processing transaction"};r.push(l)}}),r},W="spiceflow-mode",J=()=>{if(typeof window>"u")return null;try{const t=window.localStorage.getItem(W);return t==="embedded"?"7702":t==="external"?"ondemand":null}catch{return null}},$e=t=>{if(!(typeof window>"u"))try{window.localStorage.setItem(W,t==="7702"?"embedded":"external")}catch{}},Ce=()=>J()!==null,G=h.createContext(null),q=h.createContext(null),ve=({children:t,provider:e,supportedChainIds:o,network:r="testnet",mode:n="7702",skipFlow:a=[],nativeChainId:i,appName:d="Spicenet",apiUrl:l,theme:c,rpcOverrides:g})=>{h.useEffect(()=>{if(!l)return;const u=I.getBaseUrl();return I.setBaseUrl(l),()=>I.setBaseUrl(u)},[l]),h.useEffect(()=>(D(g),()=>D(void 0)),[g]);const f=o??y.getChainIdsByNetwork(r),w=c??null,[x,E]=h.useState(()=>J()??n),s=h.useCallback(u=>{E(u),$e(u)},[]);return v.jsx(G.Provider,{value:w,children:v.jsx(q.Provider,{value:{provider:e,supportedChainIds:f,skipFlow:a,mode:x,setMode:s,network:r,nativeChainId:i,appName:d,apiUrl:l,rpcOverrides:g},children:t})})},Se={spacing:{xs:"0.25rem",sm:"0.5rem",md:"1rem",lg:"1.5rem",xl:"2rem"},borderRadius:{sm:"0.25rem",md:"0.5rem",lg:"0.75rem",full:"9999px"},typography:{fontFamily:'"Helvetica Neue", sans-serif',fontSize:{xs:"0.75rem",sm:"0.875rem",base:"1rem",lg:"1.125rem",xl:"1.25rem","2xl":"1.5rem","3xl":"1.75rem"},fontWeight:{normal:400,medium:500,semibold:600,bold:700}},shadows:{sm:"0 1px 2px 0 rgb(0 0 0 / 0.05)",md:"0 4px 6px -1px rgb(0 0 0 / 0.1)",lg:"0 10px 15px -3px rgb(0 0 0 / 0.1)"},animation:{fast:"150ms ease-in-out",normal:"200ms ease-in-out",slow:"300ms ease-in-out"}},Re={primary:"#EA4B4B",primaryHover:"#E43838",secondary:"#f3f4f6",background:"#ffffff",surface:"#f9fafb",surfaceHover:"#f3f4f6",border:"#e5e7eb",borderHover:"#d1d5db",text:"#111827",textSecondary:"#374151",textMuted:"#6b7280",success:"#10b981",error:"#ef4444",warning:"#f59e0b",info:"#3b82f6"},Te={primary:"#EA4B4B",primaryHover:"#E43838",secondary:"#171717",background:"#141414",surface:"#1e1e1e",surfaceHover:"#2a2a2a",border:"#2d2d2d",borderHover:"#3a3a3a",text:"#ffffff",textSecondary:"#888888",textMuted:"#666666",success:"#10b981",error:"#ef4444",warning:"#f59e0b",info:"#3b82f6"},X=(t="light")=>({mode:t,...Se,colors:t==="light"?Re:Te});function U(t,e){const o=t.replace("#",""),r=Math.max(0,Math.round(parseInt(o.substring(0,2),16)*(1-e))),n=Math.max(0,Math.round(parseInt(o.substring(2,4),16)*(1-e))),a=Math.max(0,Math.round(parseInt(o.substring(4,6),16)*(1-e)));return`#${r.toString(16).padStart(2,"0")}${n.toString(16).padStart(2,"0")}${a.toString(16).padStart(2,"0")}`}function ke(t,e){return{shell:e?.shell??"#141414",shellBorder:e?.shellBorder??U(e?.shell??"#141414",.35),shellInnerBorder:e?.shellInnerBorder??U(e?.shell??"#141414",.55),cardBg:e?.cardBg??"#1e1e1e",inputBg:e?.inputBg??"#171717",hoverBg:e?.hoverBg??"#2a2a2a",textPrimary:e?.textPrimary??"#ffffff",textSecondary:e?.textSecondary??"#888888",inputText:e?.inputText??"#e0e0e0",inputPlaceholder:e?.inputPlaceholder??"#555555",cardBorder:e?.cardBorder??"rgba(255,255,255,0.08)",inputBorder:e?.inputBorder??"rgba(255,255,255,0.10)",buttonBorder:e?.buttonBorder??"rgba(255,255,255,0.12)",successBg:e?.successBg??"#0a1f18",successBorder:e?.successBorder??"#1a4a3a",successText:e?.successText??"#6ee7b7",warningBg:e?.warningBg??"#1f1a0d",warningBorder:e?.warningBorder??"#4a3820",warningText:e?.warningText??"#fbbf24",errorBg:e?.errorBg??"#1f0d0d",errorBorder:e?.errorBorder??"#4a2020",errorText:e?.errorText??"#f87171",infoBg:e?.infoBg??"#0d1325",infoBorder:e?.infoBorder??"#2a3a5a",infoText:e?.infoText??"#60a5fa"}}function Ie(t){return{shell:"#ffffff",shellBorder:"#E9E9E9",shellInnerBorder:"#D5D5D5",cardBg:"#f9fafb",inputBg:"#ffffff",hoverBg:"#f3f4f6",textPrimary:"#111827",textSecondary:"#6b7280",inputText:"#111827",inputPlaceholder:"#9ca3af",cardBorder:"#e5e7eb",inputBorder:"#d1d5db",buttonBorder:"#0e0d0b",successBg:"#d1fae5",successBorder:"#6ee7b7",successText:"#065f46",warningBg:"#fef3c7",warningBorder:"#fde68a",warningText:"#92400e",errorBg:"#fef2f2",errorBorder:"#fecaca",errorText:"#dc2626",infoBg:"#dbeafe",infoBorder:"#93c5fd",infoText:"#1e40af"}}function Q(t,e){const o=e?{...t,...e}:t,r=o.dark??!1,n=o.primaryColor,a=o.shell??(r?"#141414":"#ffffff");return{primaryColor:n,dark:r,fontFamily:o.fontFamily??'"Helvetica Neue", sans-serif',appName:o.appName??"Spicenet",logo:o.logo,borderRadius:o.borderRadius??"8px",shell:a,shellBorder:U(a,r?.35:.085),shellInnerBorder:U(a,r?.55:.165),card:o.card??(r?"#1e1e1e":"#f9fafb"),input:r?"#171717":"#ffffff",hover:r?"#2a2a2a":"#f3f4f6",text:o.text??(r?"#ffffff":"#111827"),textMuted:o.textMuted??(r?"#888888":"#6b7280"),inputText:r?"#e0e0e0":"#111827",inputPlaceholder:r?"#555555":"#9ca3af",border:o.border??(r?"rgba(255,255,255,0.08)":"#e5e7eb"),inputBorder:r?"rgba(255,255,255,0.10)":"#d1d5db",buttonBorder:r?"rgba(255,255,255,0.12)":"#0e0d0b",successBg:r?"#0a1f18":"#d1fae5",successBorder:r?"#1a4a3a":"#6ee7b7",successText:r?"#6ee7b7":"#065f46",warningBg:r?"#1f1a0d":"#fef3c7",warningBorder:r?"#4a3820":"#fde68a",warningText:r?"#fbbf24":"#92400e",errorBg:r?"#1f0d0d":"#fef2f2",errorBorder:r?"#4a2020":"#fecaca",errorText:r?"#f87171":"#dc2626",infoBg:r?"#0d1325":"#dbeafe",infoBorder:r?"#2a3a5a":"#93c5fd",infoText:r?"#60a5fa":"#1e40af"}}function Z(t,e){const o=h.useContext(G)??void 0;return h.useMemo(()=>{const r=o??{primaryColor:"#EA4B4B"},n={...t?.primaryColor?{primaryColor:t.primaryColor}:{},...t?.fontFamily?{fontFamily:t.fontFamily}:{},...e!==void 0?{dark:e}:{}},a=Q(r,n),{dark:i,primaryColor:d,appName:l}=a,c=X(i?"dark":"light"),g={...c,colors:{...c.colors,primary:d,primaryHover:`${d}dd`},typography:{...c.typography,fontFamily:a.fontFamily}},f={shell:a.shell,shellBorder:a.shellBorder,shellInnerBorder:a.shellInnerBorder,cardBg:a.card,inputBg:a.input,hoverBg:a.hover,textPrimary:a.text,textSecondary:a.textMuted,inputText:a.inputText,inputPlaceholder:a.inputPlaceholder,cardBorder:a.border,inputBorder:a.inputBorder,buttonBorder:a.buttonBorder,successBg:a.successBg,successBorder:a.successBorder,successText:a.successText,warningBg:a.warningBg,warningBorder:a.warningBorder,warningText:a.warningText,errorBg:a.errorBg,errorBorder:a.errorBorder,errorText:a.errorText,infoBg:a.infoBg,infoBorder:a.infoBorder,infoText:a.infoText};return{brand:o,theme:g,dark:i,appName:l,primaryColor:d,dk:f,palette:f}},[o,t,e])}const K="spiceflow-spinner-keyframes";function Ue(){if(typeof document>"u"||document.getElementById(K))return;const t=document.createElement("style");t.id=K,t.textContent="@keyframes spiceflow-spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}",document.head.appendChild(t)}const V=({size:t=16,borderWidth:e=2,color:o="currentColor",style:r})=>{const n=h.useRef(!1);return h.useEffect(()=>{n.current||(Ue(),n.current=!0)},[]),v.jsx("div",{role:"status","aria-label":"Loading",style:{width:`${t}px`,height:`${t}px`,border:`${e}px solid ${o}`,borderTop:`${e}px solid transparent`,borderRadius:"50%",animation:"spiceflow-spin 1s linear infinite",flexShrink:0,...r}})},Ae=({variant:t="primary",size:e="md",loading:o=!1,fullWidth:r=!1,disabled:n,children:a,className:i="",style:d,theme:l,styles:c,dark:g,...f})=>{const{theme:w,dark:x,palette:E}=Z(c,g),s=l||w,u=g??x,[B,R]=h.useState(!1),[A,N]=h.useState(!1),_=u?E.shell:"white",ee=()=>{switch(t){case"primary":return{backgroundColor:c?.button?.backgroundColor||s.colors.primary,color:c?.button?.color||"#ffffff",border:`1px solid ${c?.button?.backgroundColor||s.colors.primary}`};case"secondary":return{backgroundColor:s.colors.secondary,color:s.colors.text,border:`1px solid ${s.colors.border}`};case"success":return{backgroundColor:s.colors.success,color:s.colors.text,border:`1px solid ${s.colors.success}`};case"error":return{backgroundColor:s.colors.error,color:s.colors.text,border:`1px solid ${s.colors.error}`};case"ghost":return{backgroundColor:"transparent",color:s.colors.textSecondary,border:`1px solid ${s.colors.border}`};case"outline":{const m=c?.button?.backgroundColor||s.colors.primary,O=c?.button?.color||(u?"#ffffff":"#0e0d0b"),$=c?.button?.borderColor||(u?`${s.colors.primary}88`:"#0e0d0b"),C=n||o,oe=u?"1px":"1.5px",ae=c?.button?.disabledBackgroundColor||`${m}88`,ne=c?.button?.disabledColor||O;return{height:"56px",backgroundColor:C?ae:A?`${m}cc`:B?`${m}ee`:m,color:C?ne:O,border:`${oe} solid ${$}`,borderRadius:c?.button?.borderRadius||"12px",fontSize:"22px",fontWeight:500,fontFamily:'"IBM Plex Mono", monospace',opacity:C?.78:1,transform:C?"none":A?"scale(0.98)":B?"translateY(-2px)":"none",boxShadow:C?`3px 3px 0px ${_}, 4px 4px 0px ${$}`:A?`2px 2px 0px ${$}`:B?`5px 5px 0px ${_}, 6px 6px 0px ${$}`:`3px 3px 0px ${_}, 4px 4px 0px ${$}`,transition:"transform 150ms ease, box-shadow 150ms ease, background-color 150ms ease, border-color 150ms ease, color 150ms ease"}}default:return{}}},te=()=>{if(t==="outline")return{};switch(e){case"sm":return{padding:`${s.spacing.sm} ${s.spacing.md}`,fontSize:s.typography.fontSize.sm};case"md":return{padding:`${s.spacing.md} ${s.spacing.lg}`,fontSize:s.typography.fontSize.base};case"lg":return{padding:`${s.spacing.lg} ${s.spacing.xl}`,fontSize:s.typography.fontSize.lg};default:return{}}},re={borderRadius:c?.button?.borderRadius||s.borderRadius.md,fontWeight:c?.button?.fontWeight||s.typography.fontWeight.medium,fontFamily:c?.button?.fontFamily||s.typography.fontFamily,fontSize:c?.button?.fontSize||void 0,transition:"background-color 150ms ease, border-color 150ms ease, color 150ms ease, opacity 150ms ease",cursor:n||o?"not-allowed":"pointer",opacity:(n||o)&&t!=="outline"?.6:1,width:r?"100%":"auto",display:"flex",alignItems:"center",justifyContent:"center",gap:s.spacing.sm,...ee(),...te(),...c?.button?.fontSize&&{fontSize:c.button.fontSize}},P=n||o;return v.jsxs("button",{type:f.type??"button","data-spiceflow-focus":!0,"aria-busy":o||void 0,"aria-disabled":P||void 0,style:{...re,...d},className:i,disabled:P,onMouseEnter:m=>{R(!0),f.onMouseEnter?.(m)},onMouseLeave:m=>{R(!1),N(!1),f.onMouseLeave?.(m)},onMouseDown:m=>{N(!0),f.onMouseDown?.(m)},onMouseUp:m=>{N(!1),f.onMouseUp?.(m)},...f,children:[o&&v.jsx(V,{size:16}),a]})};exports.Button=Ae,exports.CHAIN_CONFIGS=fe,exports.RELAYER_API_URL=z,exports.SpiceFlowProvider=ve,exports.SpiceFlowProviderContext=q,exports.SpiceflowError=p,exports.Spinner=V,exports.buildDarkPalette=ke,exports.buildLightPalette=Ie,exports.createInitialSteps=Ee,exports.createTheme=X,exports.getAllAssetsForChain=ye,exports.getChainConfig=S,exports.getChainName=k,exports.getChainsForAssets=ge,exports.getClientForChain=Y,exports.getDelegateContractAddress=me,exports.getExplorerUrl=he,exports.getRpcUrlForChain=M,exports.getTokenDecimals=be,exports.hasStoredSpiceFlowMode=Ce,exports.isSpiceflowError=ie,exports.j=L,exports.relayerService=I,exports.resolveTheme=Q,exports.useSpiceBrand=Z;
@@ -1,2 +0,0 @@
1
- "use client";
2
- import{jsx as v,jsxs as de}from"react/jsx-runtime";import{createContext as L,useEffect as A,useState as _,useCallback as le,useContext as ue,useMemo as fe,useRef as pe}from"react";import{getChainMeta as j,getTokensForChain as me,getDelegateContract as he,ZERO_ADDRESS as ge,isNativeToken as N,getTokenByAddress as ye,getChainIdsByNetwork as be}from"@spicenet-io/spiceflow-core";import{defineChain as we,createPublicClient as xe,http as Be,isAddress as $e,getAddress as Ee,formatUnits as D}from"viem";import{readContract as ve}from"viem/actions";class f extends Error{constructor(e,a,r={}){super(a),this.code=e,this.context=r,this.name="SpiceflowError",Error.captureStackTrace&&Error.captureStackTrace(this,f)}}function Ce(t){return t instanceof f}const z=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"owner",type:"address"},{indexed:!0,name:"spender",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"from",type:"address"},{indexed:!0,name:"to",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Transfer",type:"event"}],Re="0xcA11bde05977b3631167028862bE2a173976CA11",Se={4114:"0x860aFc632a6D625B95d8B96f39ECC48E988c6962"},ke=new Set([5115]);function Te(t){const e=Se[t.id]??(ke.has(t.id)?void 0:Re);return we({id:t.id,name:t.name,nativeCurrency:t.nativeCurrency,rpcUrls:{default:{http:[t.rpcUrl]}},blockExplorers:{default:{name:t.displayName,url:t.blockExplorer}},testnet:t.network==="testnet",...e?{contracts:{multicall3:{address:e}}}:{}})}const Ie=[1,8453,42161,4114,11155111,421614,84532,5115,123420001114,688688,688689],C=Object.fromEntries(Ie.map(t=>j(t)).filter(t=>t!=null).map(t=>[t.id,{...t,viemChain:Te(t),supportedTokens:me(t.id)}])),Ue=C;let Y={};const M=new Map,H=t=>{Y={...t||{}},M.clear()},O=t=>{const e=Y[t];return e&&typeof e=="string"&&e.length>0?e:C[t]?.rpcUrl},$=t=>C[t],R=t=>{const e=j(t);return e?.displayName||e?.name||`Chain ${t}`},Ae=t=>{const e=he(t);if(!e)throw new Error(`Unsupported chain ID: ${t}`);return e},_e=(t,e,a)=>{const r=$(t);return r?.blockExplorer?`${r.blockExplorer}/tx/${e}`:"#"},W=t=>{const e=$(t);if(!e)throw new Error(`Unsupported chain ID: ${t}`);const a=O(t);if(!a)throw new Error(`No RPC URL configured for chain ID: ${t}`);const r=`${t}:${a}`,s=M.get(r);if(s)return s;const o=xe({chain:e.viemChain,transport:Be(a,{timeout:15e3,retryCount:2,retryDelay:300}),batch:{multicall:{wait:16}}});return M.set(r,o),o},Ne=()=>{const t={};return Object.values(C).forEach(e=>{t[e.id]={name:e.name,moralisName:e.moralisId||"",chain:e.viemChain,rpcUrl:O(e.id)||e.rpcUrl}}),t},Me=(t,e=[])=>{const a=$(t);if(!a)return[];const r=[];if(![11155111,421614,84532,688689].includes(t)){const o=e.find(i=>i.chainId===t&&i.isNative);o?r.push(o):r.push({address:ge,name:a.nativeCurrency.name,symbol:a.nativeCurrency.symbol,decimals:a.nativeCurrency.decimals,balance:BigInt(0),balanceFormatted:0,balanceUsd:0,logoURI:void 0,isNative:!0,chainId:t})}if(!a.supportedTokens)return r;const s=r.some(o=>o.isNative);return a.supportedTokens.forEach(o=>{if(s&&N(o.address))return;const i=e.find(d=>d.chainId===t&&d.address.toLowerCase()===o.address.toLowerCase());i?r.push(i):r.push({address:o.address,name:o.name,symbol:o.symbol,decimals:o.decimals,balance:BigInt(0),balanceFormatted:0,balanceUsd:0,logoURI:o.logo,isNative:!1,chainId:t})}),r},Oe=async(t,e)=>{const a=$(t);if(!a)throw new Error(`Unsupported chain ID: ${t}`);const r=e.toLowerCase();if(N(r)){if(!a.nativeCurrency?.decimals)throw new Error(`Native currency decimals not configured for chain ${t}`);return a.nativeCurrency.decimals}if(a.supportedTokens){const s=a.supportedTokens.find(o=>o.address.toLowerCase()===r);if(s)return s.decimals}try{if(!$e(e,{strict:!1}))throw new Error(`Invalid token address: ${e}`);const s=Ee(e),o=W(t),i=await ve(o,{address:s,abi:z,functionName:"decimals"});return Number(i)}catch{throw new Error(`Could not determine decimals for token ${e} on chain ${t}`)}},J=typeof process<"u"&&process.env?.NEXT_PUBLIC_RELAYER_API_URL||"https://tx-api-devserver.spicenet.io",G="__SPICEFLOW_RELAYER_API_URL__";function Pe(t,e){const a=e.match(/Output amount (\d+) is insufficient after fees (\d+) on chain (\d+)/);if(!a)return e;const[,r,s,o]=a,i=Number(o),d=BigInt(r),l=BigInt(s);let c;for(const u of t.intents){const b=u.chainBatches.find(E=>E.chainId===i);if(b){c=b;break}}const h=c?.tokenTransfers.find(u=>u.from==="escrow"&&u.to.toLowerCase()===t.user.toLowerCase()&&!N(u.token));if(!h)return`Amount is too small to cover the estimated fee on ${R(i)}.`;const p=ye(h.token,i),g=p?.decimals??18,y=p?.symbol??"tokens",w=D(d,g),n=D(l,g);return`Amount is too small to cover the estimated fee on ${R(i)}. Amount: ${w} ${y}. Estimated fee: ${n} ${y}.`}function Fe(){if(typeof globalThis>"u")return;const t=globalThis[G];return typeof t=="string"&&t.length>0?t:void 0}class Le{constructor(){this.baseUrl=J}setBaseUrl(e){this.baseUrl=e,typeof globalThis<"u"&&(globalThis[G]=e)}getBaseUrl(){return this.getEffectiveBaseUrl()}getEffectiveBaseUrl(){return Fe()||this.baseUrl}async createAction(e){const a=await fetch(`${this.getEffectiveBaseUrl()}/actions`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e,(r,s)=>typeof s=="bigint"?s.toString():s)});if(!a.ok){const r=await a.text();throw new f("RELAYER_ERROR",`Relayer API error: ${a.status} - ${r}`,{httpStatus:a.status,responseBody:r,endpoint:"/actions"})}return await a.json()}async estimateActionFees(e){const a=await fetch(`${this.getEffectiveBaseUrl()}/actions/fees/estimate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e,(s,o)=>typeof o=="bigint"?o.toString():o)}),r=await a.json();if(!a.ok||!r.success||!r.data?.feeEstimate){const s=r.error?.message||`Relayer fee estimate error: ${a.status}`,o=Pe(e,s);throw new f("RELAYER_ERROR",o,{httpStatus:a.status,responseBody:JSON.stringify(r),endpoint:"/actions/fees/estimate"})}return r.data.feeEstimate}async estimateBatchGas(e){const a=await fetch(`${this.getEffectiveBaseUrl()}/actions/gas/estimate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e,(s,o)=>typeof o=="bigint"?o.toString():o)}),r=await a.json();if(!a.ok||!r.success||!r.data?.gasFee){const s=r.error?.message||`Relayer gas estimate error: ${a.status}`;throw new f("RELAYER_ERROR",s,{httpStatus:a.status,responseBody:JSON.stringify(r),endpoint:"/actions/gas/estimate"})}return{gasFee:BigInt(r.data.gasFee),gasQuoteSource:r.data.gasQuoteSource}}async executeStep(e,a,r,s){const o=`${this.getEffectiveBaseUrl()}/actions/${e}/intents/${a}/steps/${r}`,i=fetch(o,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)});let d;try{d=await Promise.race([i,new Promise((l,c)=>setTimeout(()=>c(new f("RELAYER_EXECUTE_ERROR",`Execute step request timed out after ${1e4/1e3}s`,{actionId:e,intentIndex:a,stepIndex:r,endpoint:`/actions/${e}/intents/${a}/steps/${r}`})),1e4))])}catch(l){throw l}if(!d.ok){const l=await d.text();throw new f("RELAYER_EXECUTE_ERROR",`Execute step error: ${d.status} - ${l}`,{httpStatus:d.status,responseBody:l,endpoint:`/actions/${e}/intents/${a}/steps/${r}`,actionId:e})}return{success:!0,transactionHash:(await d.json()).transactionHash}}async checkStepStatus(e,a){const r=e.split("/");let s="";if(r.length>=2){const d=r[0],l=r[1];s=`${this.getEffectiveBaseUrl()}/actions/${d}/intents/${l}/steps/${a}`}else s=`${this.getEffectiveBaseUrl()}/actions/${e}/intents/0/steps/${a}`;const o=await fetch(s);if(!o.ok)throw new f("RELAYER_STATUS_ERROR",`Intent step status check failed: ${o.status}`,{httpStatus:o.status,endpoint:s,intentId:e});const i=await o.json();return{success:!0,data:{status:i.status==="error"?"reverted":i.status,transactionHash:i.txid}}}async createWallet(e,a){const r=await fetch(`${this.getEffectiveBaseUrl()}/wallets/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(!r.ok){const s=await r.text();throw new f("RELAYER_ERROR",`Create wallet error: ${r.status} - ${s}`,{httpStatus:r.status,endpoint:`/wallets/${e}`})}return r.json()}async getWallet(e){const a=await fetch(`${this.getEffectiveBaseUrl()}/wallets/${e}`);if(!a.ok){const r=await a.text();throw new f("RELAYER_ERROR",`Get wallet error: ${a.status} - ${r}`,{httpStatus:a.status,endpoint:`/wallets/${e}`})}return a.json()}async createWithdrawal(e){const a=await fetch(`${this.getEffectiveBaseUrl()}/withdrawals`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e,(r,s)=>typeof s=="bigint"?s.toString():s)});if(!a.ok){const r=await a.text();throw new f("RELAYER_ERROR",`Create withdrawal error: ${a.status} - ${r}`,{httpStatus:a.status,endpoint:"/withdrawals"})}return a.json()}async getWithdrawal(e){const a=await fetch(`${this.getEffectiveBaseUrl()}/withdrawals/${e}`);if(!a.ok){const r=await a.text();throw new f("RELAYER_ERROR",`Get withdrawal error: ${a.status} - ${r}`,{httpStatus:a.status,endpoint:`/withdrawals/${e}`})}return a.json()}async getRollupTimestamp(){const e=await fetch(`${this.getEffectiveBaseUrl()}/time`);if(!e.ok)throw new f("RELAYER_ERROR",`Get rollup timestamp error: ${e.status}`,{httpStatus:e.status,endpoint:"/time"});return e.json()}}const S=new Le,je=(t,e)=>{const a=s=>e?e(s):R(s),r=[];return t.forEach((s,o)=>{const i=s.calls&&s.calls.length>0,d=s.tokenTransfers&&s.tokenTransfers.length>0;if(i||d){const l={stepId:o,status:o===0?"processing":"pending",chainId:s.chainId,chainName:a(s.chainId),description:"Processing transaction"};r.push(l)}}),r},X="spiceflow-mode",q=()=>{if(typeof window>"u")return null;try{const t=window.localStorage.getItem(X);return t==="embedded"?"7702":t==="external"?"ondemand":null}catch{return null}},De=t=>{if(!(typeof window>"u"))try{window.localStorage.setItem(X,t==="7702"?"embedded":"external")}catch{}},ze=()=>q()!==null,Q=L(null),Z=L(null),Ye=({children:t,provider:e,supportedChainIds:a,network:r="testnet",mode:s="7702",skipFlow:o=[],nativeChainId:i,appName:d="Spicenet",apiUrl:l,theme:c,rpcOverrides:h})=>{A(()=>{if(!l)return;const u=S.getBaseUrl();return S.setBaseUrl(l),()=>S.setBaseUrl(u)},[l]),A(()=>(H(h),()=>H(void 0)),[h]);const p=a??be(r),g=c??null,[y,w]=_(()=>q()??s),n=le(u=>{w(u),De(u)},[]);return v(Q.Provider,{value:g,children:v(Z.Provider,{value:{provider:e,supportedChainIds:p,skipFlow:o,mode:y,setMode:n,network:r,nativeChainId:i,appName:d,apiUrl:l,rpcOverrides:h},children:t})})},He={spacing:{xs:"0.25rem",sm:"0.5rem",md:"1rem",lg:"1.5rem",xl:"2rem"},borderRadius:{sm:"0.25rem",md:"0.5rem",lg:"0.75rem",full:"9999px"},typography:{fontFamily:'"Helvetica Neue", sans-serif',fontSize:{xs:"0.75rem",sm:"0.875rem",base:"1rem",lg:"1.125rem",xl:"1.25rem","2xl":"1.5rem","3xl":"1.75rem"},fontWeight:{normal:400,medium:500,semibold:600,bold:700}},shadows:{sm:"0 1px 2px 0 rgb(0 0 0 / 0.05)",md:"0 4px 6px -1px rgb(0 0 0 / 0.1)",lg:"0 10px 15px -3px rgb(0 0 0 / 0.1)"},animation:{fast:"150ms ease-in-out",normal:"200ms ease-in-out",slow:"300ms ease-in-out"}},We={primary:"#EA4B4B",primaryHover:"#E43838",secondary:"#f3f4f6",background:"#ffffff",surface:"#f9fafb",surfaceHover:"#f3f4f6",border:"#e5e7eb",borderHover:"#d1d5db",text:"#111827",textSecondary:"#374151",textMuted:"#6b7280",success:"#10b981",error:"#ef4444",warning:"#f59e0b",info:"#3b82f6"},Je={primary:"#EA4B4B",primaryHover:"#E43838",secondary:"#171717",background:"#141414",surface:"#1e1e1e",surfaceHover:"#2a2a2a",border:"#2d2d2d",borderHover:"#3a3a3a",text:"#ffffff",textSecondary:"#888888",textMuted:"#666666",success:"#10b981",error:"#ef4444",warning:"#f59e0b",info:"#3b82f6"},K=(t="light")=>({mode:t,...He,colors:t==="light"?We:Je});function k(t,e){const a=t.replace("#",""),r=Math.max(0,Math.round(parseInt(a.substring(0,2),16)*(1-e))),s=Math.max(0,Math.round(parseInt(a.substring(2,4),16)*(1-e))),o=Math.max(0,Math.round(parseInt(a.substring(4,6),16)*(1-e)));return`#${r.toString(16).padStart(2,"0")}${s.toString(16).padStart(2,"0")}${o.toString(16).padStart(2,"0")}`}function Ge(t,e){return{shell:e?.shell??"#141414",shellBorder:e?.shellBorder??k(e?.shell??"#141414",.35),shellInnerBorder:e?.shellInnerBorder??k(e?.shell??"#141414",.55),cardBg:e?.cardBg??"#1e1e1e",inputBg:e?.inputBg??"#171717",hoverBg:e?.hoverBg??"#2a2a2a",textPrimary:e?.textPrimary??"#ffffff",textSecondary:e?.textSecondary??"#888888",inputText:e?.inputText??"#e0e0e0",inputPlaceholder:e?.inputPlaceholder??"#555555",cardBorder:e?.cardBorder??"rgba(255,255,255,0.08)",inputBorder:e?.inputBorder??"rgba(255,255,255,0.10)",buttonBorder:e?.buttonBorder??"rgba(255,255,255,0.12)",successBg:e?.successBg??"#0a1f18",successBorder:e?.successBorder??"#1a4a3a",successText:e?.successText??"#6ee7b7",warningBg:e?.warningBg??"#1f1a0d",warningBorder:e?.warningBorder??"#4a3820",warningText:e?.warningText??"#fbbf24",errorBg:e?.errorBg??"#1f0d0d",errorBorder:e?.errorBorder??"#4a2020",errorText:e?.errorText??"#f87171",infoBg:e?.infoBg??"#0d1325",infoBorder:e?.infoBorder??"#2a3a5a",infoText:e?.infoText??"#60a5fa"}}function Xe(t){return{shell:"#ffffff",shellBorder:"#E9E9E9",shellInnerBorder:"#D5D5D5",cardBg:"#f9fafb",inputBg:"#ffffff",hoverBg:"#f3f4f6",textPrimary:"#111827",textSecondary:"#6b7280",inputText:"#111827",inputPlaceholder:"#9ca3af",cardBorder:"#e5e7eb",inputBorder:"#d1d5db",buttonBorder:"#0e0d0b",successBg:"#d1fae5",successBorder:"#6ee7b7",successText:"#065f46",warningBg:"#fef3c7",warningBorder:"#fde68a",warningText:"#92400e",errorBg:"#fef2f2",errorBorder:"#fecaca",errorText:"#dc2626",infoBg:"#dbeafe",infoBorder:"#93c5fd",infoText:"#1e40af"}}function V(t,e){const a=e?{...t,...e}:t,r=a.dark??!1,s=a.primaryColor,o=a.shell??(r?"#141414":"#ffffff");return{primaryColor:s,dark:r,fontFamily:a.fontFamily??'"Helvetica Neue", sans-serif',appName:a.appName??"Spicenet",logo:a.logo,borderRadius:a.borderRadius??"8px",shell:o,shellBorder:k(o,r?.35:.085),shellInnerBorder:k(o,r?.55:.165),card:a.card??(r?"#1e1e1e":"#f9fafb"),input:r?"#171717":"#ffffff",hover:r?"#2a2a2a":"#f3f4f6",text:a.text??(r?"#ffffff":"#111827"),textMuted:a.textMuted??(r?"#888888":"#6b7280"),inputText:r?"#e0e0e0":"#111827",inputPlaceholder:r?"#555555":"#9ca3af",border:a.border??(r?"rgba(255,255,255,0.08)":"#e5e7eb"),inputBorder:r?"rgba(255,255,255,0.10)":"#d1d5db",buttonBorder:r?"rgba(255,255,255,0.12)":"#0e0d0b",successBg:r?"#0a1f18":"#d1fae5",successBorder:r?"#1a4a3a":"#6ee7b7",successText:r?"#6ee7b7":"#065f46",warningBg:r?"#1f1a0d":"#fef3c7",warningBorder:r?"#4a3820":"#fde68a",warningText:r?"#fbbf24":"#92400e",errorBg:r?"#1f0d0d":"#fef2f2",errorBorder:r?"#4a2020":"#fecaca",errorText:r?"#f87171":"#dc2626",infoBg:r?"#0d1325":"#dbeafe",infoBorder:r?"#2a3a5a":"#93c5fd",infoText:r?"#60a5fa":"#1e40af"}}function ee(t,e){const a=ue(Q)??void 0;return fe(()=>{const r=a??{primaryColor:"#EA4B4B"},s={...t?.primaryColor?{primaryColor:t.primaryColor}:{},...t?.fontFamily?{fontFamily:t.fontFamily}:{},...e!==void 0?{dark:e}:{}},o=V(r,s),{dark:i,primaryColor:d,appName:l}=o,c=K(i?"dark":"light"),h={...c,colors:{...c.colors,primary:d,primaryHover:`${d}dd`},typography:{...c.typography,fontFamily:o.fontFamily}},p={shell:o.shell,shellBorder:o.shellBorder,shellInnerBorder:o.shellInnerBorder,cardBg:o.card,inputBg:o.input,hoverBg:o.hover,textPrimary:o.text,textSecondary:o.textMuted,inputText:o.inputText,inputPlaceholder:o.inputPlaceholder,cardBorder:o.border,inputBorder:o.inputBorder,buttonBorder:o.buttonBorder,successBg:o.successBg,successBorder:o.successBorder,successText:o.successText,warningBg:o.warningBg,warningBorder:o.warningBorder,warningText:o.warningText,errorBg:o.errorBg,errorBorder:o.errorBorder,errorText:o.errorText,infoBg:o.infoBg,infoBorder:o.infoBorder,infoText:o.infoText};return{brand:a,theme:h,dark:i,appName:l,primaryColor:d,dk:p,palette:p}},[a,t,e])}const te="spiceflow-spinner-keyframes";function qe(){if(typeof document>"u"||document.getElementById(te))return;const t=document.createElement("style");t.id=te,t.textContent="@keyframes spiceflow-spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}",document.head.appendChild(t)}const re=({size:t=16,borderWidth:e=2,color:a="currentColor",style:r})=>{const s=pe(!1);return A(()=>{s.current||(qe(),s.current=!0)},[]),v("div",{role:"status","aria-label":"Loading",style:{width:`${t}px`,height:`${t}px`,border:`${e}px solid ${a}`,borderTop:`${e}px solid transparent`,borderRadius:"50%",animation:"spiceflow-spin 1s linear infinite",flexShrink:0,...r}})},Qe=({variant:t="primary",size:e="md",loading:a=!1,fullWidth:r=!1,disabled:s,children:o,className:i="",style:d,theme:l,styles:c,dark:h,...p})=>{const{theme:g,dark:y,palette:w}=ee(c,h),n=l||g,u=h??y,[b,E]=_(!1),[T,I]=_(!1),U=u?w.shell:"white",ae=()=>{switch(t){case"primary":return{backgroundColor:c?.button?.backgroundColor||n.colors.primary,color:c?.button?.color||"#ffffff",border:`1px solid ${c?.button?.backgroundColor||n.colors.primary}`};case"secondary":return{backgroundColor:n.colors.secondary,color:n.colors.text,border:`1px solid ${n.colors.border}`};case"success":return{backgroundColor:n.colors.success,color:n.colors.text,border:`1px solid ${n.colors.success}`};case"error":return{backgroundColor:n.colors.error,color:n.colors.text,border:`1px solid ${n.colors.error}`};case"ghost":return{backgroundColor:"transparent",color:n.colors.textSecondary,border:`1px solid ${n.colors.border}`};case"outline":{const m=c?.button?.backgroundColor||n.colors.primary,F=c?.button?.color||(u?"#ffffff":"#0e0d0b"),x=c?.button?.borderColor||(u?`${n.colors.primary}88`:"#0e0d0b"),B=s||a,ne=u?"1px":"1.5px",ie=c?.button?.disabledBackgroundColor||`${m}88`,ce=c?.button?.disabledColor||F;return{height:"56px",backgroundColor:B?ie:T?`${m}cc`:b?`${m}ee`:m,color:B?ce:F,border:`${ne} solid ${x}`,borderRadius:c?.button?.borderRadius||"12px",fontSize:"22px",fontWeight:500,fontFamily:'"IBM Plex Mono", monospace',opacity:B?.78:1,transform:B?"none":T?"scale(0.98)":b?"translateY(-2px)":"none",boxShadow:B?`3px 3px 0px ${U}, 4px 4px 0px ${x}`:T?`2px 2px 0px ${x}`:b?`5px 5px 0px ${U}, 6px 6px 0px ${x}`:`3px 3px 0px ${U}, 4px 4px 0px ${x}`,transition:"transform 150ms ease, box-shadow 150ms ease, background-color 150ms ease, border-color 150ms ease, color 150ms ease"}}default:return{}}},oe=()=>{if(t==="outline")return{};switch(e){case"sm":return{padding:`${n.spacing.sm} ${n.spacing.md}`,fontSize:n.typography.fontSize.sm};case"md":return{padding:`${n.spacing.md} ${n.spacing.lg}`,fontSize:n.typography.fontSize.base};case"lg":return{padding:`${n.spacing.lg} ${n.spacing.xl}`,fontSize:n.typography.fontSize.lg};default:return{}}},se={borderRadius:c?.button?.borderRadius||n.borderRadius.md,fontWeight:c?.button?.fontWeight||n.typography.fontWeight.medium,fontFamily:c?.button?.fontFamily||n.typography.fontFamily,fontSize:c?.button?.fontSize||void 0,transition:"background-color 150ms ease, border-color 150ms ease, color 150ms ease, opacity 150ms ease",cursor:s||a?"not-allowed":"pointer",opacity:(s||a)&&t!=="outline"?.6:1,width:r?"100%":"auto",display:"flex",alignItems:"center",justifyContent:"center",gap:n.spacing.sm,...ae(),...oe(),...c?.button?.fontSize&&{fontSize:c.button.fontSize}},P=s||a;return de("button",{type:p.type??"button","data-spiceflow-focus":!0,"aria-busy":a||void 0,"aria-disabled":P||void 0,style:{...se,...d},className:i,disabled:P,onMouseEnter:m=>{E(!0),p.onMouseEnter?.(m)},onMouseLeave:m=>{E(!1),I(!1),p.onMouseLeave?.(m)},onMouseDown:m=>{I(!0),p.onMouseDown?.(m)},onMouseUp:m=>{I(!1),p.onMouseUp?.(m)},...p,children:[a&&v(re,{size:16}),o]})};export{Qe as B,Ue as C,J as R,re as S,Ne as a,W as b,K as c,Z as d,R as e,_e as f,$ as g,Me as h,Ce as i,z as j,O as k,Ae as l,Oe as m,je as n,f as o,ze as p,Ye as q,S as r,V as s,Ge as t,ee as u,Xe as v};