@voyage_ai/v402-web-ts 0.3.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +5 -3
- package/dist/index.d.ts +5 -3
- package/dist/index.js +183 -5
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +183 -5
- package/dist/index.mjs.map +1 -1
- package/dist/react/index.d.mts +102 -3
- package/dist/react/index.d.ts +102 -3
- package/dist/react/index.js +966 -133
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.mjs +963 -135
- package/dist/react/index.mjs.map +1 -1
- package/dist/react/styles.css +1 -1
- package/package.json +1 -1
package/dist/react/index.js
CHANGED
|
@@ -103,17 +103,21 @@ __export(wallet_exports, {
|
|
|
103
103
|
clearAllWalletAddresses: () => clearAllWalletAddresses,
|
|
104
104
|
clearWalletDisconnection: () => clearWalletDisconnection,
|
|
105
105
|
formatAddress: () => formatAddress,
|
|
106
|
+
getAllConnectedWalletIds: () => getAllConnectedWalletIds,
|
|
106
107
|
getAllWalletAddresses: () => getAllWalletAddresses,
|
|
107
108
|
getCachedWalletAddress: () => getCachedWalletAddress,
|
|
108
109
|
getConnectedNetworkType: () => getConnectedNetworkType,
|
|
110
|
+
getConnectedWalletId: () => getConnectedWalletId,
|
|
109
111
|
getWalletDisplayName: () => getWalletDisplayName,
|
|
110
112
|
getWalletInstallUrl: () => getWalletInstallUrl,
|
|
111
113
|
getWalletProvider: () => getWalletProvider,
|
|
112
114
|
isWalletInstalled: () => isWalletInstalled,
|
|
113
115
|
isWalletManuallyDisconnected: () => isWalletManuallyDisconnected,
|
|
114
116
|
markWalletDisconnected: () => markWalletDisconnected,
|
|
117
|
+
removeConnectedWalletId: () => removeConnectedWalletId,
|
|
115
118
|
removeWalletAddress: () => removeWalletAddress,
|
|
116
119
|
saveConnectedNetworkType: () => saveConnectedNetworkType,
|
|
120
|
+
saveConnectedWalletId: () => saveConnectedWalletId,
|
|
117
121
|
saveWalletAddress: () => saveWalletAddress
|
|
118
122
|
});
|
|
119
123
|
function isWalletInstalled(networkType) {
|
|
@@ -266,7 +270,39 @@ function clearAllWalletAddresses() {
|
|
|
266
270
|
localStorage.removeItem(WALLET_ADDRESSES_KEY);
|
|
267
271
|
}
|
|
268
272
|
}
|
|
269
|
-
|
|
273
|
+
function getAllConnectedWalletIds() {
|
|
274
|
+
if (typeof window === "undefined") {
|
|
275
|
+
return {};
|
|
276
|
+
}
|
|
277
|
+
try {
|
|
278
|
+
const cached = localStorage.getItem(CONNECTED_WALLET_IDS_KEY);
|
|
279
|
+
return cached ? JSON.parse(cached) : {};
|
|
280
|
+
} catch (error) {
|
|
281
|
+
console.error("Failed to parse connected wallet IDs:", error);
|
|
282
|
+
return {};
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
function saveConnectedWalletId(networkType, walletId) {
|
|
286
|
+
if (typeof window === "undefined") {
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
const walletIds = getAllConnectedWalletIds();
|
|
290
|
+
walletIds[networkType] = walletId;
|
|
291
|
+
localStorage.setItem(CONNECTED_WALLET_IDS_KEY, JSON.stringify(walletIds));
|
|
292
|
+
}
|
|
293
|
+
function getConnectedWalletId(networkType) {
|
|
294
|
+
const walletIds = getAllConnectedWalletIds();
|
|
295
|
+
return walletIds[networkType] || null;
|
|
296
|
+
}
|
|
297
|
+
function removeConnectedWalletId(networkType) {
|
|
298
|
+
if (typeof window === "undefined") {
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
const walletIds = getAllConnectedWalletIds();
|
|
302
|
+
delete walletIds[networkType];
|
|
303
|
+
localStorage.setItem(CONNECTED_WALLET_IDS_KEY, JSON.stringify(walletIds));
|
|
304
|
+
}
|
|
305
|
+
var WALLET_DISCONNECTED_KEY, WALLET_DISCONNECTED_NETWORKS_KEY, CONNECTED_NETWORK_TYPE_KEY, WALLET_ADDRESSES_KEY, CONNECTED_WALLET_IDS_KEY;
|
|
270
306
|
var init_wallet = __esm({
|
|
271
307
|
"src/utils/wallet.ts"() {
|
|
272
308
|
"use strict";
|
|
@@ -274,18 +310,24 @@ var init_wallet = __esm({
|
|
|
274
310
|
WALLET_DISCONNECTED_NETWORKS_KEY = "wallet_disconnected_networks";
|
|
275
311
|
CONNECTED_NETWORK_TYPE_KEY = "connected_network_type";
|
|
276
312
|
WALLET_ADDRESSES_KEY = "wallet_addresses_cache";
|
|
313
|
+
CONNECTED_WALLET_IDS_KEY = "connected_wallet_ids";
|
|
277
314
|
}
|
|
278
315
|
});
|
|
279
316
|
|
|
280
317
|
// src/react/index.ts
|
|
281
318
|
var index_exports = {};
|
|
282
319
|
__export(index_exports, {
|
|
320
|
+
AnimationStyles: () => AnimationStyles,
|
|
321
|
+
Toast: () => Toast,
|
|
283
322
|
V402Checkout: () => V402Checkout,
|
|
323
|
+
V402CheckoutV2: () => V402CheckoutV2,
|
|
284
324
|
WalletConnect: () => WalletConnect,
|
|
285
325
|
WalletSelectModal: () => WalletSelectModal,
|
|
326
|
+
checkoutAnimations: () => checkoutAnimations,
|
|
286
327
|
usePageNetwork: () => usePageNetwork,
|
|
287
328
|
usePayment: () => usePayment,
|
|
288
329
|
usePaymentInfo: () => usePaymentInfo,
|
|
330
|
+
useToast: () => useToast,
|
|
289
331
|
useWallet: () => useWallet
|
|
290
332
|
});
|
|
291
333
|
module.exports = __toCommonJS(index_exports);
|
|
@@ -301,13 +343,13 @@ init_wallet();
|
|
|
301
343
|
init_wallet();
|
|
302
344
|
async function connectWallet(networkType, forceSelect = false) {
|
|
303
345
|
if (typeof window === "undefined") {
|
|
304
|
-
throw new Error("
|
|
346
|
+
throw new Error("Please use in browser environment");
|
|
305
347
|
}
|
|
306
348
|
let address;
|
|
307
349
|
switch (networkType) {
|
|
308
350
|
case "evm" /* EVM */: {
|
|
309
351
|
if (!window.ethereum) {
|
|
310
|
-
throw new Error("
|
|
352
|
+
throw new Error("Please install MetaMask or another Ethereum wallet");
|
|
311
353
|
}
|
|
312
354
|
const ethereum = window.ethereum;
|
|
313
355
|
if (forceSelect) {
|
|
@@ -325,7 +367,7 @@ async function connectWallet(networkType, forceSelect = false) {
|
|
|
325
367
|
}
|
|
326
368
|
} catch (err) {
|
|
327
369
|
if (err.code === 4001) {
|
|
328
|
-
throw new Error("
|
|
370
|
+
throw new Error("User cancelled wallet connection");
|
|
329
371
|
}
|
|
330
372
|
console.warn("wallet_requestPermissions failed, falling back to eth_requestAccounts");
|
|
331
373
|
}
|
|
@@ -335,7 +377,7 @@ async function connectWallet(networkType, forceSelect = false) {
|
|
|
335
377
|
params: []
|
|
336
378
|
});
|
|
337
379
|
if (!accounts || accounts.length === 0) {
|
|
338
|
-
throw new Error("
|
|
380
|
+
throw new Error("Failed to get wallet address");
|
|
339
381
|
}
|
|
340
382
|
address = accounts[0];
|
|
341
383
|
break;
|
|
@@ -349,7 +391,7 @@ async function connectWallet(networkType, forceSelect = false) {
|
|
|
349
391
|
solana = solflare;
|
|
350
392
|
}
|
|
351
393
|
if (!solana) {
|
|
352
|
-
throw new Error("
|
|
394
|
+
throw new Error("Please install Phantom or another Solana wallet");
|
|
353
395
|
}
|
|
354
396
|
if (forceSelect) {
|
|
355
397
|
try {
|
|
@@ -375,7 +417,7 @@ async function connectWallet(networkType, forceSelect = false) {
|
|
|
375
417
|
break;
|
|
376
418
|
}
|
|
377
419
|
default:
|
|
378
|
-
throw new Error("
|
|
420
|
+
throw new Error("Unsupported network type");
|
|
379
421
|
}
|
|
380
422
|
clearWalletDisconnection(networkType);
|
|
381
423
|
saveConnectedNetworkType(networkType);
|
|
@@ -413,8 +455,8 @@ async function disconnectWallet(networkType, clearAll = false) {
|
|
|
413
455
|
await disconnectAllSolanaWallets();
|
|
414
456
|
break;
|
|
415
457
|
}
|
|
416
|
-
// EVM
|
|
417
|
-
//
|
|
458
|
+
// EVM wallets (like MetaMask) don't have a real disconnect API
|
|
459
|
+
// Only clear local state, will request permissions again on next connection
|
|
418
460
|
case "evm" /* EVM */:
|
|
419
461
|
default:
|
|
420
462
|
break;
|
|
@@ -445,36 +487,32 @@ async function getCurrentWallet(networkType) {
|
|
|
445
487
|
return null;
|
|
446
488
|
}
|
|
447
489
|
const cachedAddress = getCachedWalletAddress(type);
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
490
|
+
if (type === "evm" /* EVM */) {
|
|
491
|
+
if (cachedAddress) {
|
|
492
|
+
return cachedAddress;
|
|
493
|
+
}
|
|
494
|
+
if (window.ethereum) {
|
|
495
|
+
try {
|
|
453
496
|
const accounts = await window.ethereum.request({
|
|
454
497
|
method: "eth_accounts",
|
|
455
498
|
params: []
|
|
456
499
|
});
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
case "svm" /* SVM */: {
|
|
462
|
-
const solana = window.solana;
|
|
463
|
-
if (!solana || !solana.isConnected) return cachedAddress;
|
|
464
|
-
currentAddress = solana.publicKey?.toString() || null;
|
|
465
|
-
break;
|
|
500
|
+
return accounts && accounts.length > 0 ? accounts[0] : null;
|
|
501
|
+
} catch (error) {
|
|
502
|
+
console.error("Failed to get EVM accounts:", error);
|
|
503
|
+
return null;
|
|
466
504
|
}
|
|
467
|
-
default:
|
|
468
|
-
return cachedAddress;
|
|
469
505
|
}
|
|
470
|
-
|
|
471
|
-
|
|
506
|
+
return null;
|
|
507
|
+
}
|
|
508
|
+
if (type === "solana" /* SOLANA */ || type === "svm" /* SVM */) {
|
|
509
|
+
const solana = window.solana;
|
|
510
|
+
if (!solana || !solana.isConnected) {
|
|
511
|
+
return cachedAddress;
|
|
472
512
|
}
|
|
473
|
-
return
|
|
474
|
-
} catch (error) {
|
|
475
|
-
console.error("Failed to get current wallet:", error);
|
|
476
|
-
return cachedAddress;
|
|
513
|
+
return solana.publicKey?.toString() || cachedAddress;
|
|
477
514
|
}
|
|
515
|
+
return cachedAddress;
|
|
478
516
|
}
|
|
479
517
|
function onAccountsChanged(callback) {
|
|
480
518
|
if (typeof window === "undefined" || !window.ethereum) {
|
|
@@ -538,6 +576,7 @@ async function switchNetwork(networkType) {
|
|
|
538
576
|
}
|
|
539
577
|
|
|
540
578
|
// src/utils/wallet-discovery.ts
|
|
579
|
+
init_wallet();
|
|
541
580
|
var SOLANA_WALLETS = [
|
|
542
581
|
{
|
|
543
582
|
id: "phantom",
|
|
@@ -683,22 +722,26 @@ function getWalletsForNetwork(networkType) {
|
|
|
683
722
|
return [];
|
|
684
723
|
}
|
|
685
724
|
}
|
|
725
|
+
function getWalletByName(name, networkType) {
|
|
726
|
+
const wallets = getWalletsForNetwork(networkType);
|
|
727
|
+
return wallets.find((w) => w.name === name) || null;
|
|
728
|
+
}
|
|
686
729
|
async function connectEVMWallet(wallet) {
|
|
687
730
|
if (!wallet.provider) {
|
|
688
|
-
throw new Error(
|
|
731
|
+
throw new Error(`Wallet ${wallet.name} is not available`);
|
|
689
732
|
}
|
|
690
733
|
const accounts = await wallet.provider.request({
|
|
691
734
|
method: "eth_requestAccounts",
|
|
692
735
|
params: []
|
|
693
736
|
});
|
|
694
737
|
if (!accounts || accounts.length === 0) {
|
|
695
|
-
throw new Error("
|
|
738
|
+
throw new Error("Failed to get wallet address");
|
|
696
739
|
}
|
|
697
740
|
return accounts[0];
|
|
698
741
|
}
|
|
699
742
|
async function connectSolanaWallet(wallet) {
|
|
700
743
|
if (!wallet.provider) {
|
|
701
|
-
throw new Error(
|
|
744
|
+
throw new Error(`Wallet ${wallet.name} is not available`);
|
|
702
745
|
}
|
|
703
746
|
if (wallet.provider.isConnected) {
|
|
704
747
|
try {
|
|
@@ -721,21 +764,41 @@ async function connectToWallet(wallet) {
|
|
|
721
764
|
address = await connectSolanaWallet(wallet);
|
|
722
765
|
break;
|
|
723
766
|
default:
|
|
724
|
-
throw new Error("
|
|
767
|
+
throw new Error("Unsupported network type");
|
|
725
768
|
}
|
|
726
769
|
currentConnectedWallet = wallet;
|
|
770
|
+
saveConnectedWalletId(wallet.networkType, wallet.name);
|
|
727
771
|
return address;
|
|
728
772
|
}
|
|
729
773
|
function setCurrentConnectedWallet(wallet) {
|
|
730
774
|
currentConnectedWallet = wallet;
|
|
731
775
|
}
|
|
732
|
-
function clearConnectedWallet() {
|
|
776
|
+
function clearConnectedWallet(networkType) {
|
|
777
|
+
if (networkType) {
|
|
778
|
+
removeConnectedWalletId(networkType);
|
|
779
|
+
}
|
|
733
780
|
currentConnectedWallet = null;
|
|
734
781
|
}
|
|
782
|
+
function restoreConnectedWallet(networkType) {
|
|
783
|
+
const savedWalletName = getConnectedWalletId(networkType);
|
|
784
|
+
if (!savedWalletName) return null;
|
|
785
|
+
const wallet = getWalletByName(savedWalletName, networkType);
|
|
786
|
+
if (wallet) {
|
|
787
|
+
currentConnectedWallet = wallet;
|
|
788
|
+
console.log(`\u2705 Restored wallet provider: ${wallet.name}`);
|
|
789
|
+
return wallet;
|
|
790
|
+
}
|
|
791
|
+
console.warn(`\u26A0\uFE0F Could not find wallet with name: ${savedWalletName}`);
|
|
792
|
+
return null;
|
|
793
|
+
}
|
|
735
794
|
function getWalletProviderForPayment(networkType) {
|
|
736
795
|
if (currentConnectedWallet && currentConnectedWallet.networkType === networkType) {
|
|
737
796
|
return currentConnectedWallet.provider;
|
|
738
797
|
}
|
|
798
|
+
const restoredWallet = restoreConnectedWallet(networkType);
|
|
799
|
+
if (restoredWallet) {
|
|
800
|
+
return restoredWallet.provider;
|
|
801
|
+
}
|
|
739
802
|
if (typeof window === "undefined") return null;
|
|
740
803
|
switch (networkType) {
|
|
741
804
|
case "evm" /* EVM */:
|
|
@@ -1229,7 +1292,7 @@ function getSupportedNetworkTypes(paymentRequirements) {
|
|
|
1229
1292
|
});
|
|
1230
1293
|
return Array.from(networkTypes);
|
|
1231
1294
|
}
|
|
1232
|
-
async function makePayment(networkType, merchantId, endpoint = PROD_BACK_URL, additionalParams) {
|
|
1295
|
+
async function makePayment(networkType, merchantId, endpoint = PROD_BACK_URL, additionalParams, expectedAddress) {
|
|
1233
1296
|
const fullEndpoint = `${endpoint}/${merchantId}`;
|
|
1234
1297
|
let response;
|
|
1235
1298
|
const requestInit = additionalParams && Object.keys(additionalParams).length > 0 ? {
|
|
@@ -1241,11 +1304,19 @@ async function makePayment(networkType, merchantId, endpoint = PROD_BACK_URL, ad
|
|
|
1241
1304
|
if (networkType === "solana" /* SOLANA */ || networkType === "svm" /* SVM */) {
|
|
1242
1305
|
const solana = getWalletProviderForPayment(networkType);
|
|
1243
1306
|
if (!solana) {
|
|
1244
|
-
throw new Error("
|
|
1307
|
+
throw new Error("Please connect your Solana wallet first.");
|
|
1245
1308
|
}
|
|
1246
1309
|
if (!solana.isConnected) {
|
|
1247
1310
|
await solana.connect();
|
|
1248
1311
|
}
|
|
1312
|
+
if (expectedAddress && solana.publicKey) {
|
|
1313
|
+
const currentAddress = solana.publicKey.toString();
|
|
1314
|
+
if (currentAddress !== expectedAddress) {
|
|
1315
|
+
throw new Error(
|
|
1316
|
+
`Wallet account mismatch: the current wallet account is ${currentAddress.slice(0, 8)}...\uFF0CBut the desired account is ${expectedAddress.slice(0, 8)}.... Please switch to the correct account in your wallet.`
|
|
1317
|
+
);
|
|
1318
|
+
}
|
|
1319
|
+
}
|
|
1249
1320
|
response = await handleSvmPayment(fullEndpoint, {
|
|
1250
1321
|
wallet: solana,
|
|
1251
1322
|
network: "solana"
|
|
@@ -1254,12 +1325,18 @@ async function makePayment(networkType, merchantId, endpoint = PROD_BACK_URL, ad
|
|
|
1254
1325
|
} else if (networkType === "evm" /* EVM */) {
|
|
1255
1326
|
const ethereum = getWalletProviderForPayment(networkType);
|
|
1256
1327
|
if (!ethereum) {
|
|
1257
|
-
throw new Error("
|
|
1328
|
+
throw new Error("Please connect the EVM wallet first");
|
|
1258
1329
|
}
|
|
1259
1330
|
const provider = new import_ethers2.ethers.BrowserProvider(ethereum);
|
|
1260
1331
|
const signer = await provider.getSigner();
|
|
1332
|
+
const currentAddress = await signer.getAddress();
|
|
1333
|
+
if (expectedAddress && currentAddress.toLowerCase() !== expectedAddress.toLowerCase()) {
|
|
1334
|
+
throw new Error(
|
|
1335
|
+
`Wallet account mismatch: the current wallet account is ${currentAddress.slice(0, 8)}...\uFF0CBut the desired account is ${expectedAddress.slice(0, 8)}.... Please switch to the correct account in your wallet.`
|
|
1336
|
+
);
|
|
1337
|
+
}
|
|
1261
1338
|
const wallet = {
|
|
1262
|
-
address:
|
|
1339
|
+
address: currentAddress,
|
|
1263
1340
|
signTypedData: async (domain, types, message2) => {
|
|
1264
1341
|
return await signer.signTypedData(domain, types, message2);
|
|
1265
1342
|
},
|
|
@@ -1282,7 +1359,7 @@ async function makePayment(networkType, merchantId, endpoint = PROD_BACK_URL, ad
|
|
|
1282
1359
|
// Will use backend's network configuration
|
|
1283
1360
|
}, requestInit);
|
|
1284
1361
|
} else {
|
|
1285
|
-
throw new Error(
|
|
1362
|
+
throw new Error(`Unsupported network types: ${networkType}`);
|
|
1286
1363
|
}
|
|
1287
1364
|
return response;
|
|
1288
1365
|
}
|
|
@@ -1625,7 +1702,7 @@ var WalletStore = class {
|
|
|
1625
1702
|
// Disconnect wallet
|
|
1626
1703
|
async disconnect() {
|
|
1627
1704
|
const currentNetwork = this.state.networkType;
|
|
1628
|
-
clearConnectedWallet();
|
|
1705
|
+
clearConnectedWallet(currentNetwork || void 0);
|
|
1629
1706
|
if (currentNetwork) {
|
|
1630
1707
|
try {
|
|
1631
1708
|
await disconnectWallet(currentNetwork);
|
|
@@ -1784,12 +1861,83 @@ function usePaymentInfo(merchantId, endpoint = PROD_BACK_URL, additionalParams)
|
|
|
1784
1861
|
};
|
|
1785
1862
|
}
|
|
1786
1863
|
|
|
1787
|
-
// src/react/
|
|
1864
|
+
// src/react/hooks/useToast.tsx
|
|
1788
1865
|
var import_react6 = __toESM(require("react"));
|
|
1789
1866
|
|
|
1790
|
-
// src/react/components/
|
|
1867
|
+
// src/react/components/ui/Toast.tsx
|
|
1791
1868
|
var import_react5 = __toESM(require("react"));
|
|
1792
1869
|
var import_react_dom = require("react-dom");
|
|
1870
|
+
var Toast = ({ message: message2, type, onClose }) => {
|
|
1871
|
+
(0, import_react5.useEffect)(() => {
|
|
1872
|
+
const timer = setTimeout(onClose, 3e3);
|
|
1873
|
+
return () => clearTimeout(timer);
|
|
1874
|
+
}, [onClose]);
|
|
1875
|
+
const bgColor = type === "success" ? "#22c55e" : type === "error" ? "#ef4444" : "#3b82f6";
|
|
1876
|
+
const icon = type === "success" ? "\u2713" : type === "error" ? "\u2717" : "\u2139";
|
|
1877
|
+
return (0, import_react_dom.createPortal)(
|
|
1878
|
+
/* @__PURE__ */ import_react5.default.createElement(
|
|
1879
|
+
"div",
|
|
1880
|
+
{
|
|
1881
|
+
className: "fixed top-4 right-4 z-[99999] animate-slide-in-right",
|
|
1882
|
+
style: {
|
|
1883
|
+
animation: "slideInRight 0.3s ease-out"
|
|
1884
|
+
}
|
|
1885
|
+
},
|
|
1886
|
+
/* @__PURE__ */ import_react5.default.createElement(
|
|
1887
|
+
"div",
|
|
1888
|
+
{
|
|
1889
|
+
className: "flex items-center gap-3 px-4 py-3 rounded-lg shadow-lg text-white font-mono text-sm",
|
|
1890
|
+
style: { backgroundColor: bgColor, minWidth: "280px" }
|
|
1891
|
+
},
|
|
1892
|
+
/* @__PURE__ */ import_react5.default.createElement("span", { className: "text-lg" }, icon),
|
|
1893
|
+
/* @__PURE__ */ import_react5.default.createElement("span", { className: "flex-1" }, message2),
|
|
1894
|
+
/* @__PURE__ */ import_react5.default.createElement(
|
|
1895
|
+
"button",
|
|
1896
|
+
{
|
|
1897
|
+
onClick: onClose,
|
|
1898
|
+
className: "text-white/80 hover:text-white transition-colors"
|
|
1899
|
+
},
|
|
1900
|
+
"\xD7"
|
|
1901
|
+
)
|
|
1902
|
+
)
|
|
1903
|
+
),
|
|
1904
|
+
document.body
|
|
1905
|
+
);
|
|
1906
|
+
};
|
|
1907
|
+
|
|
1908
|
+
// src/react/hooks/useToast.tsx
|
|
1909
|
+
var useToast = () => {
|
|
1910
|
+
const [toasts, setToasts] = (0, import_react6.useState)([]);
|
|
1911
|
+
const toastIdRef = (0, import_react6.useRef)(0);
|
|
1912
|
+
const showToast = (0, import_react6.useCallback)((message2, type) => {
|
|
1913
|
+
const id = ++toastIdRef.current;
|
|
1914
|
+
setToasts((prev) => [...prev, { id, message: message2, type }]);
|
|
1915
|
+
}, []);
|
|
1916
|
+
const removeToast = (0, import_react6.useCallback)((id) => {
|
|
1917
|
+
setToasts((prev) => prev.filter((t) => t.id !== id));
|
|
1918
|
+
}, []);
|
|
1919
|
+
const ToastContainer = () => /* @__PURE__ */ import_react6.default.createElement(import_react6.default.Fragment, null, toasts.map((toast, index) => /* @__PURE__ */ import_react6.default.createElement(
|
|
1920
|
+
"div",
|
|
1921
|
+
{
|
|
1922
|
+
key: toast.id,
|
|
1923
|
+
style: { top: `${16 + index * 60}px` },
|
|
1924
|
+
className: "fixed right-4 z-[99999]"
|
|
1925
|
+
},
|
|
1926
|
+
import_react6.default.createElement(Toast, {
|
|
1927
|
+
message: toast.message,
|
|
1928
|
+
type: toast.type,
|
|
1929
|
+
onClose: () => removeToast(toast.id)
|
|
1930
|
+
})
|
|
1931
|
+
)));
|
|
1932
|
+
return { showToast, ToastContainer };
|
|
1933
|
+
};
|
|
1934
|
+
|
|
1935
|
+
// src/react/components/wallet/WalletConnect.tsx
|
|
1936
|
+
var import_react8 = __toESM(require("react"));
|
|
1937
|
+
|
|
1938
|
+
// src/react/components/wallet/WalletSelectModal.tsx
|
|
1939
|
+
var import_react7 = __toESM(require("react"));
|
|
1940
|
+
var import_react_dom2 = require("react-dom");
|
|
1793
1941
|
var overlayStyle = {
|
|
1794
1942
|
position: "fixed",
|
|
1795
1943
|
top: 0,
|
|
@@ -1927,8 +2075,8 @@ function WalletItem({
|
|
|
1927
2075
|
onSelect,
|
|
1928
2076
|
onHover
|
|
1929
2077
|
}) {
|
|
1930
|
-
const [iconError, setIconError] = (0,
|
|
1931
|
-
return /* @__PURE__ */
|
|
2078
|
+
const [iconError, setIconError] = (0, import_react7.useState)(false);
|
|
2079
|
+
return /* @__PURE__ */ import_react7.default.createElement(
|
|
1932
2080
|
"div",
|
|
1933
2081
|
{
|
|
1934
2082
|
style: getWalletItemStyle(isHovered),
|
|
@@ -1936,7 +2084,7 @@ function WalletItem({
|
|
|
1936
2084
|
onMouseEnter: () => onHover(true),
|
|
1937
2085
|
onMouseLeave: () => onHover(false)
|
|
1938
2086
|
},
|
|
1939
|
-
wallet.icon && !iconError ? /* @__PURE__ */
|
|
2087
|
+
wallet.icon && !iconError ? /* @__PURE__ */ import_react7.default.createElement(
|
|
1940
2088
|
"img",
|
|
1941
2089
|
{
|
|
1942
2090
|
src: wallet.icon,
|
|
@@ -1944,8 +2092,8 @@ function WalletItem({
|
|
|
1944
2092
|
style: walletIconStyle,
|
|
1945
2093
|
onError: () => setIconError(true)
|
|
1946
2094
|
}
|
|
1947
|
-
) : /* @__PURE__ */
|
|
1948
|
-
/* @__PURE__ */
|
|
2095
|
+
) : /* @__PURE__ */ import_react7.default.createElement("div", { style: getWalletIconPlaceholderStyle(wallet.name) }, wallet.name.charAt(0).toUpperCase()),
|
|
2096
|
+
/* @__PURE__ */ import_react7.default.createElement("span", { style: walletNameStyle }, wallet.name)
|
|
1949
2097
|
);
|
|
1950
2098
|
}
|
|
1951
2099
|
function WalletSelectModal({
|
|
@@ -1954,14 +2102,14 @@ function WalletSelectModal({
|
|
|
1954
2102
|
onSelect,
|
|
1955
2103
|
onClose
|
|
1956
2104
|
}) {
|
|
1957
|
-
const [wallets, setWallets] = (0,
|
|
1958
|
-
const [hoveredWallet, setHoveredWallet] = (0,
|
|
1959
|
-
const [mounted, setMounted] = (0,
|
|
1960
|
-
(0,
|
|
2105
|
+
const [wallets, setWallets] = (0, import_react7.useState)([]);
|
|
2106
|
+
const [hoveredWallet, setHoveredWallet] = (0, import_react7.useState)(null);
|
|
2107
|
+
const [mounted, setMounted] = (0, import_react7.useState)(false);
|
|
2108
|
+
(0, import_react7.useEffect)(() => {
|
|
1961
2109
|
setMounted(true);
|
|
1962
2110
|
return () => setMounted(false);
|
|
1963
2111
|
}, []);
|
|
1964
|
-
(0,
|
|
2112
|
+
(0, import_react7.useEffect)(() => {
|
|
1965
2113
|
if (!isOpen) return;
|
|
1966
2114
|
initEVMWalletDiscovery();
|
|
1967
2115
|
const updateWallets = () => {
|
|
@@ -1982,7 +2130,7 @@ function WalletSelectModal({
|
|
|
1982
2130
|
}
|
|
1983
2131
|
};
|
|
1984
2132
|
const networkName = getNetworkDisplayName(networkType);
|
|
1985
|
-
const modalContent = /* @__PURE__ */
|
|
2133
|
+
const modalContent = /* @__PURE__ */ import_react7.default.createElement("div", { style: overlayStyle, onClick: handleOverlayClick }, /* @__PURE__ */ import_react7.default.createElement("div", { style: modalStyle }, /* @__PURE__ */ import_react7.default.createElement("div", { style: headerStyle }, /* @__PURE__ */ import_react7.default.createElement("h3", { style: titleStyle }, "Select Wallet"), /* @__PURE__ */ import_react7.default.createElement("button", { style: closeButtonStyle, onClick: onClose }, "\xD7")), /* @__PURE__ */ import_react7.default.createElement("p", { style: subtitleStyle }, "Connect a ", networkName, " wallet"), wallets.length > 0 ? /* @__PURE__ */ import_react7.default.createElement("div", { style: walletListStyle }, wallets.map((wallet) => /* @__PURE__ */ import_react7.default.createElement(
|
|
1986
2134
|
WalletItem,
|
|
1987
2135
|
{
|
|
1988
2136
|
key: wallet.id,
|
|
@@ -1991,9 +2139,9 @@ function WalletSelectModal({
|
|
|
1991
2139
|
onSelect: () => onSelect(wallet),
|
|
1992
2140
|
onHover: (hovered) => setHoveredWallet(hovered ? wallet.id : null)
|
|
1993
2141
|
}
|
|
1994
|
-
))) : /* @__PURE__ */
|
|
2142
|
+
))) : /* @__PURE__ */ import_react7.default.createElement("div", { style: emptyStateStyle }, /* @__PURE__ */ import_react7.default.createElement("p", { style: emptyTitleStyle }, "No wallets found"), /* @__PURE__ */ import_react7.default.createElement("p", { style: emptyDescStyle }, "Please install a ", networkName, " wallet extension."))));
|
|
1995
2143
|
if (typeof document !== "undefined") {
|
|
1996
|
-
return (0,
|
|
2144
|
+
return (0, import_react_dom2.createPortal)(modalContent, document.body);
|
|
1997
2145
|
}
|
|
1998
2146
|
return modalContent;
|
|
1999
2147
|
}
|
|
@@ -2165,7 +2313,7 @@ var getErrorStyle = () => {
|
|
|
2165
2313
|
};
|
|
2166
2314
|
};
|
|
2167
2315
|
|
|
2168
|
-
// src/react/components/WalletConnect.tsx
|
|
2316
|
+
// src/react/components/wallet/WalletConnect.tsx
|
|
2169
2317
|
function WalletConnect({
|
|
2170
2318
|
supportedNetworks = ["solana" /* SOLANA */, "evm" /* EVM */],
|
|
2171
2319
|
className = "",
|
|
@@ -2174,9 +2322,9 @@ function WalletConnect({
|
|
|
2174
2322
|
showSwitchWallet = true
|
|
2175
2323
|
}) {
|
|
2176
2324
|
const { address, networkType, isConnecting, error, connectWithWallet, disconnect } = useWallet();
|
|
2177
|
-
const [hoveredButton, setHoveredButton] = (0,
|
|
2178
|
-
const [walletSelectOpen, setWalletSelectOpen] = (0,
|
|
2179
|
-
const [selectedNetworkType, setSelectedNetworkType] = (0,
|
|
2325
|
+
const [hoveredButton, setHoveredButton] = (0, import_react8.useState)(null);
|
|
2326
|
+
const [walletSelectOpen, setWalletSelectOpen] = (0, import_react8.useState)(false);
|
|
2327
|
+
const [selectedNetworkType, setSelectedNetworkType] = (0, import_react8.useState)(null);
|
|
2180
2328
|
const handleOpenWalletSelect = (network) => {
|
|
2181
2329
|
setSelectedNetworkType(network);
|
|
2182
2330
|
setWalletSelectOpen(true);
|
|
@@ -2198,7 +2346,7 @@ function WalletConnect({
|
|
|
2198
2346
|
setWalletSelectOpen(true);
|
|
2199
2347
|
}
|
|
2200
2348
|
};
|
|
2201
|
-
return /* @__PURE__ */
|
|
2349
|
+
return /* @__PURE__ */ import_react8.default.createElement(import_react8.default.Fragment, null, /* @__PURE__ */ import_react8.default.createElement("div", { style: { ...containerStyle, ...className ? {} : {} }, className }, !address ? /* @__PURE__ */ import_react8.default.createElement("div", { style: getSectionStyle() }, /* @__PURE__ */ import_react8.default.createElement("h3", { style: getTitleStyle() }, "Connect Wallet"), supportedNetworks.length === 0 ? /* @__PURE__ */ import_react8.default.createElement("p", { style: getHintStyle() }, "Please install a supported wallet extension") : /* @__PURE__ */ import_react8.default.createElement("div", { style: buttonsContainerStyle }, supportedNetworks.map((network) => /* @__PURE__ */ import_react8.default.createElement("div", { key: network, style: walletOptionStyle }, /* @__PURE__ */ import_react8.default.createElement(
|
|
2202
2350
|
"button",
|
|
2203
2351
|
{
|
|
2204
2352
|
style: getConnectButtonStyle(isConnecting, hoveredButton === network),
|
|
@@ -2208,7 +2356,7 @@ function WalletConnect({
|
|
|
2208
2356
|
onMouseLeave: () => setHoveredButton(null)
|
|
2209
2357
|
},
|
|
2210
2358
|
isConnecting ? "Connecting..." : getNetworkDisplayName(network)
|
|
2211
|
-
)))), error && /* @__PURE__ */
|
|
2359
|
+
)))), error && /* @__PURE__ */ import_react8.default.createElement("p", { style: getErrorStyle() }, error), /* @__PURE__ */ import_react8.default.createElement("p", { style: getHintStyle() }, "Select a network to see available wallets")) : /* @__PURE__ */ import_react8.default.createElement("div", { style: getSectionStyle() }, /* @__PURE__ */ import_react8.default.createElement("div", { style: walletAddressStyle }, /* @__PURE__ */ import_react8.default.createElement("span", { style: getLabelStyle() }, "Connected ", networkType && `(${getNetworkDisplayName(networkType)})`), /* @__PURE__ */ import_react8.default.createElement("span", { style: getAddressStyle() }, formatAddress(address))), /* @__PURE__ */ import_react8.default.createElement("div", { style: walletActionsStyle }, showSwitchWallet && /* @__PURE__ */ import_react8.default.createElement(
|
|
2212
2360
|
"button",
|
|
2213
2361
|
{
|
|
2214
2362
|
style: getConnectButtonStyle(isConnecting, hoveredButton === "switch"),
|
|
@@ -2218,7 +2366,7 @@ function WalletConnect({
|
|
|
2218
2366
|
onMouseLeave: () => setHoveredButton(null)
|
|
2219
2367
|
},
|
|
2220
2368
|
isConnecting ? "Switching..." : "Switch Wallet"
|
|
2221
|
-
), /* @__PURE__ */
|
|
2369
|
+
), /* @__PURE__ */ import_react8.default.createElement(
|
|
2222
2370
|
"button",
|
|
2223
2371
|
{
|
|
2224
2372
|
style: getDisconnectButtonStyle(hoveredButton === "disconnect"),
|
|
@@ -2227,7 +2375,7 @@ function WalletConnect({
|
|
|
2227
2375
|
onMouseLeave: () => setHoveredButton(null)
|
|
2228
2376
|
},
|
|
2229
2377
|
"Disconnect"
|
|
2230
|
-
)), /* @__PURE__ */
|
|
2378
|
+
)), /* @__PURE__ */ import_react8.default.createElement("p", { style: getHintStyle() }, 'Click "Switch Wallet" to change wallet or account'))), selectedNetworkType && /* @__PURE__ */ import_react8.default.createElement(
|
|
2231
2379
|
WalletSelectModal,
|
|
2232
2380
|
{
|
|
2233
2381
|
isOpen: walletSelectOpen,
|
|
@@ -2238,16 +2386,16 @@ function WalletConnect({
|
|
|
2238
2386
|
));
|
|
2239
2387
|
}
|
|
2240
2388
|
|
|
2241
|
-
// src/react/components/V402Checkout.tsx
|
|
2242
|
-
var
|
|
2389
|
+
// src/react/components/checkout/V402Checkout.tsx
|
|
2390
|
+
var import_react10 = __toESM(require("react"));
|
|
2243
2391
|
var import_antd = require("antd");
|
|
2244
2392
|
var import_icons = require("@ant-design/icons");
|
|
2245
2393
|
init_common();
|
|
2246
2394
|
|
|
2247
2395
|
// src/react/utils/CryptoIcons.tsx
|
|
2248
|
-
var
|
|
2396
|
+
var import_react9 = __toESM(require("react"));
|
|
2249
2397
|
var SolanaIcon = ({ width = 16, height = 16, className, style }) => {
|
|
2250
|
-
return /* @__PURE__ */
|
|
2398
|
+
return /* @__PURE__ */ import_react9.default.createElement(
|
|
2251
2399
|
"svg",
|
|
2252
2400
|
{
|
|
2253
2401
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -2257,14 +2405,14 @@ var SolanaIcon = ({ width = 16, height = 16, className, style }) => {
|
|
|
2257
2405
|
className,
|
|
2258
2406
|
style
|
|
2259
2407
|
},
|
|
2260
|
-
/* @__PURE__ */
|
|
2261
|
-
/* @__PURE__ */
|
|
2408
|
+
/* @__PURE__ */ import_react9.default.createElement("desc", null, "Solana SOL Fill Streamline Icon: https://streamlinehq.com"),
|
|
2409
|
+
/* @__PURE__ */ import_react9.default.createElement("g", { fill: "none", fillRule: "evenodd" }, /* @__PURE__ */ import_react9.default.createElement(
|
|
2262
2410
|
"path",
|
|
2263
2411
|
{
|
|
2264
2412
|
d: "M16 0v16H0V0h16ZM8.395333333333333 15.505333333333333l-0.007333333333333332 0.0013333333333333333 -0.047333333333333324 0.023333333333333334 -0.013333333333333332 0.0026666666666666666 -0.009333333333333332 -0.0026666666666666666 -0.047333333333333324 -0.023333333333333334c-0.006666666666666666 -0.0026666666666666666 -0.012666666666666666 -0.0006666666666666666 -0.016 0.003333333333333333l-0.0026666666666666666 0.006666666666666666 -0.011333333333333334 0.2853333333333333 0.003333333333333333 0.013333333333333332 0.006666666666666666 0.008666666666666666 0.06933333333333333 0.049333333333333326 0.009999999999999998 0.0026666666666666666 0.008 -0.0026666666666666666 0.06933333333333333 -0.049333333333333326 0.008 -0.010666666666666666 0.0026666666666666666 -0.011333333333333334 -0.011333333333333334 -0.2846666666666666c-0.0013333333333333333 -0.006666666666666666 -0.005999999999999999 -0.011333333333333334 -0.011333333333333334 -0.011999999999999999Zm0.17666666666666667 -0.07533333333333334 -0.008666666666666666 0.0013333333333333333 -0.12333333333333332 0.062 -0.006666666666666666 0.006666666666666666 -0.002 0.007333333333333332 0.011999999999999999 0.2866666666666666 0.003333333333333333 0.008 0.005333333333333333 0.004666666666666666 0.134 0.062c0.008 0.0026666666666666666 0.015333333333333332 0 0.019333333333333334 -0.005333333333333333l0.0026666666666666666 -0.009333333333333332 -0.02266666666666667 -0.4093333333333333c-0.002 -0.008 -0.006666666666666666 -0.013333333333333332 -0.013333333333333332 -0.014666666666666665Zm-0.4766666666666666 0.0013333333333333333a0.015333333333333332 0.015333333333333332 0 0 0 -0.018 0.004l-0.004 0.009333333333333332 -0.02266666666666667 0.4093333333333333c0 0.008 0.004666666666666666 0.013333333333333332 0.011333333333333334 0.016l0.009999999999999998 -0.0013333333333333333 0.134 -0.062 0.006666666666666666 -0.005333333333333333 0.0026666666666666666 -0.007333333333333332 0.011333333333333334 -0.2866666666666666 -0.002 -0.008 -0.006666666666666666 -0.006666666666666666 -0.12266666666666666 -0.06133333333333333Z",
|
|
2265
2413
|
strokeWidth: "0.6667"
|
|
2266
2414
|
}
|
|
2267
|
-
), /* @__PURE__ */
|
|
2415
|
+
), /* @__PURE__ */ import_react9.default.createElement(
|
|
2268
2416
|
"path",
|
|
2269
2417
|
{
|
|
2270
2418
|
fill: "#000000",
|
|
@@ -2275,7 +2423,7 @@ var SolanaIcon = ({ width = 16, height = 16, className, style }) => {
|
|
|
2275
2423
|
);
|
|
2276
2424
|
};
|
|
2277
2425
|
var BaseIcon = ({ width = 24, height = 24, className, style }) => {
|
|
2278
|
-
return /* @__PURE__ */
|
|
2426
|
+
return /* @__PURE__ */ import_react9.default.createElement(
|
|
2279
2427
|
"svg",
|
|
2280
2428
|
{
|
|
2281
2429
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -2289,8 +2437,8 @@ var BaseIcon = ({ width = 24, height = 24, className, style }) => {
|
|
|
2289
2437
|
className,
|
|
2290
2438
|
style
|
|
2291
2439
|
},
|
|
2292
|
-
/* @__PURE__ */
|
|
2293
|
-
/* @__PURE__ */
|
|
2440
|
+
/* @__PURE__ */ import_react9.default.createElement("desc", null, "Brand Coinbase Streamline Icon: https://streamlinehq.com"),
|
|
2441
|
+
/* @__PURE__ */ import_react9.default.createElement(
|
|
2294
2442
|
"path",
|
|
2295
2443
|
{
|
|
2296
2444
|
d: "M12.95 22c-4.503 0 -8.445 -3.04 -9.61 -7.413 -1.165 -4.373 0.737 -8.988 4.638 -11.25a9.906 9.906 0 0 1 12.008 1.598l-3.335 3.367a5.185 5.185 0 0 0 -7.354 0.013 5.252 5.252 0 0 0 0 7.393 5.185 5.185 0 0 0 7.354 0.013L20 19.088A9.887 9.887 0 0 1 12.95 22z",
|
|
@@ -2310,7 +2458,7 @@ var getNetworkIcon = (network) => {
|
|
|
2310
2458
|
return BaseIcon;
|
|
2311
2459
|
};
|
|
2312
2460
|
|
|
2313
|
-
// src/react/components/V402Checkout.tsx
|
|
2461
|
+
// src/react/components/checkout/V402Checkout.tsx
|
|
2314
2462
|
var { Title, Text } = import_antd.Typography;
|
|
2315
2463
|
var notify = {
|
|
2316
2464
|
success: (title, msg) => {
|
|
@@ -2348,14 +2496,14 @@ function V402Checkout({
|
|
|
2348
2496
|
{ autoSwitch: !!targetNetwork, switchOnMount: true }
|
|
2349
2497
|
);
|
|
2350
2498
|
const { isProcessing, setIsProcessing, result, setResult, error, setError } = usePayment();
|
|
2351
|
-
const [paymentDetails, setPaymentDetails] = (0,
|
|
2499
|
+
const [paymentDetails, setPaymentDetails] = (0, import_react10.useState)(null);
|
|
2352
2500
|
const handleDisconnect = () => {
|
|
2353
2501
|
disconnect();
|
|
2354
2502
|
setResult(null);
|
|
2355
2503
|
setError(null);
|
|
2356
2504
|
notify.info("Wallet Disconnected", "Your wallet has been disconnected successfully.");
|
|
2357
2505
|
};
|
|
2358
|
-
(0,
|
|
2506
|
+
(0, import_react10.useEffect)(() => {
|
|
2359
2507
|
if (paymentInfo && paymentInfo.length > 0) {
|
|
2360
2508
|
const firstPayment = paymentInfo[0];
|
|
2361
2509
|
const rawAmount = firstPayment.maxAmountRequired?.toString() || "0";
|
|
@@ -2370,7 +2518,7 @@ function V402Checkout({
|
|
|
2370
2518
|
});
|
|
2371
2519
|
}
|
|
2372
2520
|
}, [paymentInfo]);
|
|
2373
|
-
(0,
|
|
2521
|
+
(0, import_react10.useEffect)(() => {
|
|
2374
2522
|
if (targetNetwork && !fetchingPaymentInfo && ensureNetwork) {
|
|
2375
2523
|
ensureNetwork(targetNetwork).catch((err) => {
|
|
2376
2524
|
console.error("Failed to ensure network:", err);
|
|
@@ -2386,7 +2534,7 @@ function V402Checkout({
|
|
|
2386
2534
|
setError(null);
|
|
2387
2535
|
setIsProcessing(true);
|
|
2388
2536
|
try {
|
|
2389
|
-
const response = await makePayment(networkType, checkoutId, endpoint, additionalParams);
|
|
2537
|
+
const response = await makePayment(networkType, checkoutId, endpoint, additionalParams, address || void 0);
|
|
2390
2538
|
const data = await response.json();
|
|
2391
2539
|
setResult(data);
|
|
2392
2540
|
notify.success("Payment Successful!", "Your payment has been processed successfully.");
|
|
@@ -2410,12 +2558,12 @@ function V402Checkout({
|
|
|
2410
2558
|
const networkColor = paymentDetails ? getNetworkColor(paymentDetails.network) : "#8c8c8c";
|
|
2411
2559
|
const loadingColor = "#8c8c8c";
|
|
2412
2560
|
const hasInvalidCheckoutId = !fetchingPaymentInfo && (!paymentInfo || paymentInfo.length === 0);
|
|
2413
|
-
return /* @__PURE__ */
|
|
2561
|
+
return /* @__PURE__ */ import_react10.default.createElement(
|
|
2414
2562
|
"div",
|
|
2415
2563
|
{
|
|
2416
2564
|
className: isModal ? "bg-white" : "h-screen bg-white flex items-center justify-center p-4 overflow-hidden"
|
|
2417
2565
|
},
|
|
2418
|
-
/* @__PURE__ */
|
|
2566
|
+
/* @__PURE__ */ import_react10.default.createElement(
|
|
2419
2567
|
"div",
|
|
2420
2568
|
{
|
|
2421
2569
|
className: "flex gap-4 items-center justify-center",
|
|
@@ -2425,7 +2573,7 @@ function V402Checkout({
|
|
|
2425
2573
|
width: "100%"
|
|
2426
2574
|
}
|
|
2427
2575
|
},
|
|
2428
|
-
/* @__PURE__ */
|
|
2576
|
+
/* @__PURE__ */ import_react10.default.createElement(
|
|
2429
2577
|
import_antd.Card,
|
|
2430
2578
|
{
|
|
2431
2579
|
className: "flex-shrink-0",
|
|
@@ -2441,7 +2589,7 @@ function V402Checkout({
|
|
|
2441
2589
|
},
|
|
2442
2590
|
styles: { body: { padding: isModal ? "0px" : "32px 24px" } }
|
|
2443
2591
|
},
|
|
2444
|
-
/* @__PURE__ */
|
|
2592
|
+
/* @__PURE__ */ import_react10.default.createElement("div", { className: "flex items-center gap-3 mb-4" }, /* @__PURE__ */ import_react10.default.createElement(
|
|
2445
2593
|
"div",
|
|
2446
2594
|
{
|
|
2447
2595
|
className: "w-12 h-12 rounded-xl flex items-center justify-center",
|
|
@@ -2450,22 +2598,22 @@ function V402Checkout({
|
|
|
2450
2598
|
transition: "background 0.3s ease"
|
|
2451
2599
|
}
|
|
2452
2600
|
},
|
|
2453
|
-
hasInvalidCheckoutId ? /* @__PURE__ */
|
|
2454
|
-
), /* @__PURE__ */
|
|
2601
|
+
hasInvalidCheckoutId ? /* @__PURE__ */ import_react10.default.createElement("span", { style: { fontSize: "20px", color: "white", fontWeight: "bold" } }, "\u2717") : paymentDetails && NetworkIcon ? /* @__PURE__ */ import_react10.default.createElement(NetworkIcon, { width: 24, height: 24 }) : /* @__PURE__ */ import_react10.default.createElement(import_icons.LoadingOutlined, { style: { fontSize: "20px", color: "white" }, spin: true })
|
|
2602
|
+
), /* @__PURE__ */ import_react10.default.createElement("div", { className: "flex-1" }, /* @__PURE__ */ import_react10.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react10.default.createElement(Title, { level: 4, style: { margin: 0, fontSize: "18px", fontWeight: 600 } }, title || "Echo Payment OnVoyage"), !hasInvalidCheckoutId && /* @__PURE__ */ import_react10.default.createElement(
|
|
2455
2603
|
import_antd.Tooltip,
|
|
2456
2604
|
{
|
|
2457
2605
|
title: tooltipText,
|
|
2458
2606
|
placement: "top"
|
|
2459
2607
|
},
|
|
2460
|
-
/* @__PURE__ */
|
|
2608
|
+
/* @__PURE__ */ import_react10.default.createElement(
|
|
2461
2609
|
import_icons.InfoCircleOutlined,
|
|
2462
2610
|
{
|
|
2463
2611
|
style: { fontSize: "14px", color: "#8c8c8c", cursor: "help" }
|
|
2464
2612
|
}
|
|
2465
2613
|
)
|
|
2466
|
-
)), /* @__PURE__ */
|
|
2467
|
-
/* @__PURE__ */
|
|
2468
|
-
hasInvalidCheckoutId && /* @__PURE__ */
|
|
2614
|
+
)), /* @__PURE__ */ import_react10.default.createElement(Text, { style: { fontSize: "13px", color: "#8c8c8c" } }, subtitle))),
|
|
2615
|
+
/* @__PURE__ */ import_react10.default.createElement("div", { className: "text-center mb-5" }, /* @__PURE__ */ import_react10.default.createElement("div", { className: "inline-flex items-center justify-center w-12 h-12 rounded-full bg-gray-50 mb-3" }, /* @__PURE__ */ import_react10.default.createElement(import_icons.LockOutlined, { style: { fontSize: "20px", color: "#595959" } })), /* @__PURE__ */ import_react10.default.createElement(Title, { level: 3, style: { margin: "0 0 6px 0", fontSize: "20px", fontWeight: 600 } }, "Payment Required"), /* @__PURE__ */ import_react10.default.createElement(Text, { style: { fontSize: "13px", color: "#8c8c8c" } }, "Pay ", paymentDetails ? `$${paymentDetails.amount} ${paymentDetails.currency}` : "the required amount", " to access")),
|
|
2616
|
+
hasInvalidCheckoutId && /* @__PURE__ */ import_react10.default.createElement("div", { className: "text-center py-6" }, /* @__PURE__ */ import_react10.default.createElement(
|
|
2469
2617
|
"div",
|
|
2470
2618
|
{
|
|
2471
2619
|
className: "inline-flex items-center justify-center w-16 h-16 rounded-full mb-4",
|
|
@@ -2474,15 +2622,15 @@ function V402Checkout({
|
|
|
2474
2622
|
boxShadow: "0 4px 20px rgba(239, 68, 68, 0.3)"
|
|
2475
2623
|
}
|
|
2476
2624
|
},
|
|
2477
|
-
/* @__PURE__ */
|
|
2478
|
-
), /* @__PURE__ */
|
|
2625
|
+
/* @__PURE__ */ import_react10.default.createElement("span", { style: { fontSize: "32px", color: "white" } }, "!")
|
|
2626
|
+
), /* @__PURE__ */ import_react10.default.createElement(
|
|
2479
2627
|
Title,
|
|
2480
2628
|
{
|
|
2481
2629
|
level: 4,
|
|
2482
2630
|
style: { margin: "0 0 12px 0", fontSize: "18px", fontWeight: 600, color: "#262626" }
|
|
2483
2631
|
},
|
|
2484
2632
|
"Invalid Checkout ID"
|
|
2485
|
-
), /* @__PURE__ */
|
|
2633
|
+
), /* @__PURE__ */ import_react10.default.createElement(Text, { style: { fontSize: "14px", color: "#8c8c8c", display: "block", marginBottom: "16px" } }, "The checkout ID you provided is invalid or has expired."), /* @__PURE__ */ import_react10.default.createElement(
|
|
2486
2634
|
"div",
|
|
2487
2635
|
{
|
|
2488
2636
|
style: {
|
|
@@ -2493,33 +2641,33 @@ function V402Checkout({
|
|
|
2493
2641
|
marginTop: "16px"
|
|
2494
2642
|
}
|
|
2495
2643
|
},
|
|
2496
|
-
/* @__PURE__ */
|
|
2644
|
+
/* @__PURE__ */ import_react10.default.createElement(Text, { style: {
|
|
2497
2645
|
fontSize: "13px",
|
|
2498
2646
|
color: "#dc2626",
|
|
2499
2647
|
lineHeight: "1.6",
|
|
2500
2648
|
fontWeight: 500
|
|
2501
2649
|
} }, "Failed to load payment information. Please check your checkout ID.")
|
|
2502
2650
|
)),
|
|
2503
|
-
!hasInvalidCheckoutId && fetchingPaymentInfo && /* @__PURE__ */
|
|
2504
|
-
!hasInvalidCheckoutId && !fetchingPaymentInfo && !address && /* @__PURE__ */
|
|
2505
|
-
!hasInvalidCheckoutId && address && /* @__PURE__ */
|
|
2651
|
+
!hasInvalidCheckoutId && fetchingPaymentInfo && /* @__PURE__ */ import_react10.default.createElement("div", { className: "text-center py-6" }, /* @__PURE__ */ import_react10.default.createElement(Text, { style: { color: "#8c8c8c" } }, "Loading payment information...")),
|
|
2652
|
+
!hasInvalidCheckoutId && !fetchingPaymentInfo && !address && /* @__PURE__ */ import_react10.default.createElement("div", null, /* @__PURE__ */ import_react10.default.createElement(WalletConnect, { supportedNetworks })),
|
|
2653
|
+
!hasInvalidCheckoutId && address && /* @__PURE__ */ import_react10.default.createElement(import_react10.default.Fragment, null, /* @__PURE__ */ import_react10.default.createElement(
|
|
2506
2654
|
"div",
|
|
2507
2655
|
{
|
|
2508
2656
|
className: "bg-gray-50 rounded-lg p-3 mb-4",
|
|
2509
2657
|
style: { border: "1px solid #f0f0f0" }
|
|
2510
2658
|
},
|
|
2511
|
-
/* @__PURE__ */
|
|
2659
|
+
/* @__PURE__ */ import_react10.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ import_react10.default.createElement("div", { className: "flex items-center gap-3 flex-1" }, /* @__PURE__ */ import_react10.default.createElement(
|
|
2512
2660
|
"div",
|
|
2513
2661
|
{
|
|
2514
2662
|
className: "w-10 h-10 rounded-full bg-black flex items-center justify-center text-white text-sm font-semibold"
|
|
2515
2663
|
},
|
|
2516
2664
|
address.slice(0, 2).toUpperCase()
|
|
2517
|
-
), /* @__PURE__ */
|
|
2665
|
+
), /* @__PURE__ */ import_react10.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ import_react10.default.createElement(Text, { style: {
|
|
2518
2666
|
display: "block",
|
|
2519
2667
|
fontSize: "12px",
|
|
2520
2668
|
color: "#8c8c8c",
|
|
2521
2669
|
marginBottom: "2px"
|
|
2522
|
-
} }, "Connected Wallet"), /* @__PURE__ */
|
|
2670
|
+
} }, "Connected Wallet"), /* @__PURE__ */ import_react10.default.createElement(
|
|
2523
2671
|
Text,
|
|
2524
2672
|
{
|
|
2525
2673
|
style: {
|
|
@@ -2529,17 +2677,17 @@ function V402Checkout({
|
|
|
2529
2677
|
}
|
|
2530
2678
|
},
|
|
2531
2679
|
formatAddress(address)
|
|
2532
|
-
))), /* @__PURE__ */
|
|
2680
|
+
))), /* @__PURE__ */ import_react10.default.createElement(
|
|
2533
2681
|
import_antd.Button,
|
|
2534
2682
|
{
|
|
2535
2683
|
type: "text",
|
|
2536
2684
|
size: "small",
|
|
2537
|
-
icon: /* @__PURE__ */
|
|
2685
|
+
icon: /* @__PURE__ */ import_react10.default.createElement(import_icons.DisconnectOutlined, null),
|
|
2538
2686
|
onClick: handleDisconnect,
|
|
2539
2687
|
style: { color: "#ff4d4f" }
|
|
2540
2688
|
}
|
|
2541
2689
|
))
|
|
2542
|
-
), paymentDetails && /* @__PURE__ */
|
|
2690
|
+
), paymentDetails && /* @__PURE__ */ import_react10.default.createElement("div", { className: "bg-gray-50 rounded-lg p-3 mb-4", style: { border: "1px solid #f0f0f0" } }, /* @__PURE__ */ import_react10.default.createElement("div", { className: "flex justify-between items-center mb-2" }, /* @__PURE__ */ import_react10.default.createElement(Text, { style: { fontSize: "13px", color: "#8c8c8c" } }, "Payment Amount"), /* @__PURE__ */ import_react10.default.createElement(Text, { style: { fontSize: "18px", fontWeight: 600 } }, "$", paymentDetails.amount)), /* @__PURE__ */ import_react10.default.createElement(import_antd.Divider, { style: { margin: "6px 0" } }), /* @__PURE__ */ import_react10.default.createElement("div", { className: "flex justify-between items-center mb-2" }, /* @__PURE__ */ import_react10.default.createElement(Text, { style: { fontSize: "13px", color: "#8c8c8c" } }, "Currency"), /* @__PURE__ */ import_react10.default.createElement(Text, { style: { fontSize: "14px", fontWeight: 500 } }, paymentDetails.currency)), /* @__PURE__ */ import_react10.default.createElement(import_antd.Divider, { style: { margin: "6px 0" } }), /* @__PURE__ */ import_react10.default.createElement("div", { className: "flex justify-between items-center mb-2" }, /* @__PURE__ */ import_react10.default.createElement(Text, { style: { fontSize: "13px", color: "#8c8c8c" } }, "Network"), /* @__PURE__ */ import_react10.default.createElement(Text, { style: { fontSize: "14px", fontWeight: 500 } }, paymentDetails.network)), /* @__PURE__ */ import_react10.default.createElement(import_antd.Divider, { style: { margin: "6px 0" } }), /* @__PURE__ */ import_react10.default.createElement("div", { className: "flex justify-between items-start" }, /* @__PURE__ */ import_react10.default.createElement(Text, { style: { fontSize: "13px", color: "#8c8c8c" } }, "Wallet Address"), /* @__PURE__ */ import_react10.default.createElement(Text, { style: {
|
|
2543
2691
|
fontSize: "11px",
|
|
2544
2692
|
fontWeight: 500,
|
|
2545
2693
|
fontFamily: "Monaco, monospace",
|
|
@@ -2547,15 +2695,15 @@ function V402Checkout({
|
|
|
2547
2695
|
textAlign: "right",
|
|
2548
2696
|
maxWidth: "60%",
|
|
2549
2697
|
lineHeight: 1.4
|
|
2550
|
-
} }, address))), /* @__PURE__ */
|
|
2698
|
+
} }, address))), /* @__PURE__ */ import_react10.default.createElement(
|
|
2551
2699
|
"div",
|
|
2552
2700
|
{
|
|
2553
2701
|
className: "flex items-center justify-center gap-2 mb-3 p-2 rounded-lg",
|
|
2554
2702
|
style: { background: "#f6ffed", border: "1px solid #d9f7be" }
|
|
2555
2703
|
},
|
|
2556
|
-
/* @__PURE__ */
|
|
2557
|
-
/* @__PURE__ */
|
|
2558
|
-
), /* @__PURE__ */
|
|
2704
|
+
/* @__PURE__ */ import_react10.default.createElement(import_icons.SafetyOutlined, { style: { color: "#52c41a", fontSize: "13px" } }),
|
|
2705
|
+
/* @__PURE__ */ import_react10.default.createElement(Text, { style: { fontSize: "12px", color: "#52c41a", fontWeight: 500 } }, "Secure payment powered by v402pay")
|
|
2706
|
+
), /* @__PURE__ */ import_react10.default.createElement(
|
|
2559
2707
|
import_antd.Button,
|
|
2560
2708
|
{
|
|
2561
2709
|
type: "primary",
|
|
@@ -2577,7 +2725,7 @@ function V402Checkout({
|
|
|
2577
2725
|
}
|
|
2578
2726
|
},
|
|
2579
2727
|
isProcessing ? "Processing..." : !paymentDetails ? "Loading..." : `Pay $${paymentDetails.amount} ${paymentDetails.currency}`
|
|
2580
|
-
), /* @__PURE__ */
|
|
2728
|
+
), /* @__PURE__ */ import_react10.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ import_react10.default.createElement(Text, { style: { fontSize: "13px", color: "#8c8c8c" } }, "Don't have USDC?", " "), /* @__PURE__ */ import_react10.default.createElement(
|
|
2581
2729
|
"a",
|
|
2582
2730
|
{
|
|
2583
2731
|
href: "https://faucet.circle.com/",
|
|
@@ -2586,26 +2734,26 @@ function V402Checkout({
|
|
|
2586
2734
|
className: "text-blue-600 hover:text-blue-700 text-sm font-medium inline-flex items-center gap-1"
|
|
2587
2735
|
},
|
|
2588
2736
|
"Get it here ",
|
|
2589
|
-
/* @__PURE__ */
|
|
2590
|
-
)), isModal && result && /* @__PURE__ */
|
|
2737
|
+
/* @__PURE__ */ import_react10.default.createElement(import_icons.LinkOutlined, { style: { fontSize: "12px" } })
|
|
2738
|
+
)), isModal && result && /* @__PURE__ */ import_react10.default.createElement(
|
|
2591
2739
|
"div",
|
|
2592
2740
|
{
|
|
2593
2741
|
className: "mt-4 p-4 rounded-lg",
|
|
2594
2742
|
style: { background: "#f6ffed", border: "1px solid #b7eb8f" }
|
|
2595
2743
|
},
|
|
2596
|
-
/* @__PURE__ */
|
|
2744
|
+
/* @__PURE__ */ import_react10.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ import_react10.default.createElement("span", { style: { fontSize: "20px" } }, "\u2713"), /* @__PURE__ */ import_react10.default.createElement(Text, { style: {
|
|
2597
2745
|
fontSize: "14px",
|
|
2598
2746
|
color: "#52c41a",
|
|
2599
2747
|
fontWeight: 600,
|
|
2600
2748
|
marginLeft: "8px"
|
|
2601
2749
|
} }, "Payment Successful!"))
|
|
2602
|
-
), isModal && error && /* @__PURE__ */
|
|
2750
|
+
), isModal && error && /* @__PURE__ */ import_react10.default.createElement(
|
|
2603
2751
|
"div",
|
|
2604
2752
|
{
|
|
2605
2753
|
className: "mt-4 p-4 rounded-lg",
|
|
2606
2754
|
style: { background: "#fff2f0", border: "1px solid #ffccc7" }
|
|
2607
2755
|
},
|
|
2608
|
-
/* @__PURE__ */
|
|
2756
|
+
/* @__PURE__ */ import_react10.default.createElement("div", { className: "text-center mb-3" }, /* @__PURE__ */ import_react10.default.createElement("span", { style: { fontSize: "20px" } }, "\u2717"), /* @__PURE__ */ import_react10.default.createElement(Text, { style: {
|
|
2609
2757
|
fontSize: "14px",
|
|
2610
2758
|
color: "#ff4d4f",
|
|
2611
2759
|
fontWeight: 600,
|
|
@@ -2613,7 +2761,7 @@ function V402Checkout({
|
|
|
2613
2761
|
display: "block",
|
|
2614
2762
|
marginTop: "4px"
|
|
2615
2763
|
} }, "Payment Failed")),
|
|
2616
|
-
/* @__PURE__ */
|
|
2764
|
+
/* @__PURE__ */ import_react10.default.createElement(Text, { style: {
|
|
2617
2765
|
fontSize: "13px",
|
|
2618
2766
|
color: "#ff4d4f",
|
|
2619
2767
|
display: "block",
|
|
@@ -2621,11 +2769,11 @@ function V402Checkout({
|
|
|
2621
2769
|
} }, error)
|
|
2622
2770
|
))
|
|
2623
2771
|
),
|
|
2624
|
-
!isModal && (isProcessing || result || error) && /* @__PURE__ */
|
|
2772
|
+
!isModal && (isProcessing || result || error) && /* @__PURE__ */ import_react10.default.createElement(
|
|
2625
2773
|
import_antd.Card,
|
|
2626
2774
|
{
|
|
2627
|
-
title: /* @__PURE__ */
|
|
2628
|
-
extra: !isProcessing && /* @__PURE__ */
|
|
2775
|
+
title: /* @__PURE__ */ import_react10.default.createElement("div", { className: "flex items-center gap-2" }, isProcessing && !result && !error ? /* @__PURE__ */ import_react10.default.createElement(import_react10.default.Fragment, null, /* @__PURE__ */ import_react10.default.createElement(import_icons.LoadingOutlined, { style: { color: "#14b8a6", fontSize: "16px" } }), /* @__PURE__ */ import_react10.default.createElement(Text, { strong: true, style: { fontSize: "16px", color: "#262626" } }, "Processing Payment")) : result ? /* @__PURE__ */ import_react10.default.createElement(import_react10.default.Fragment, null, /* @__PURE__ */ import_react10.default.createElement("span", { style: { color: "#52c41a", fontSize: "18px" } }, "\u2713"), /* @__PURE__ */ import_react10.default.createElement(Text, { strong: true, style: { fontSize: "16px", color: "#262626" } }, "Payment Successful")) : /* @__PURE__ */ import_react10.default.createElement(import_react10.default.Fragment, null, /* @__PURE__ */ import_react10.default.createElement("span", { style: { color: "#ff4d4f", fontSize: "18px" } }, "\u2717"), /* @__PURE__ */ import_react10.default.createElement(Text, { strong: true, style: { fontSize: "16px", color: "#262626" } }, "Payment Failed"))),
|
|
2776
|
+
extra: !isProcessing && /* @__PURE__ */ import_react10.default.createElement(
|
|
2629
2777
|
import_antd.Button,
|
|
2630
2778
|
{
|
|
2631
2779
|
type: "text",
|
|
@@ -2653,7 +2801,7 @@ function V402Checkout({
|
|
|
2653
2801
|
}
|
|
2654
2802
|
}
|
|
2655
2803
|
},
|
|
2656
|
-
isProcessing && !result && !error && /* @__PURE__ */
|
|
2804
|
+
isProcessing && !result && !error && /* @__PURE__ */ import_react10.default.createElement("div", { className: "text-center py-10" }, /* @__PURE__ */ import_react10.default.createElement("div", { className: "relative inline-block" }, /* @__PURE__ */ import_react10.default.createElement(
|
|
2657
2805
|
"div",
|
|
2658
2806
|
{
|
|
2659
2807
|
className: "absolute inset-0 rounded-full blur-xl opacity-40",
|
|
@@ -2662,12 +2810,12 @@ function V402Checkout({
|
|
|
2662
2810
|
animation: "pulse 2s ease-in-out infinite"
|
|
2663
2811
|
}
|
|
2664
2812
|
}
|
|
2665
|
-
), /* @__PURE__ */
|
|
2813
|
+
), /* @__PURE__ */ import_react10.default.createElement(
|
|
2666
2814
|
import_antd.Spin,
|
|
2667
2815
|
{
|
|
2668
|
-
indicator: /* @__PURE__ */
|
|
2816
|
+
indicator: /* @__PURE__ */ import_react10.default.createElement(import_icons.LoadingOutlined, { style: { fontSize: 56, color: "#14b8a6" } })
|
|
2669
2817
|
}
|
|
2670
|
-
)), /* @__PURE__ */
|
|
2818
|
+
)), /* @__PURE__ */ import_react10.default.createElement("div", { className: "mt-6" }, /* @__PURE__ */ import_react10.default.createElement(Text, { strong: true, style: { fontSize: "18px", color: "#262626", letterSpacing: "-0.02em" } }, "Verifying Payment")), /* @__PURE__ */ import_react10.default.createElement("div", { className: "mt-2 mb-6" }, /* @__PURE__ */ import_react10.default.createElement(Text, { style: { fontSize: "14px", color: "#8c8c8c", lineHeight: "1.6" } }, "Please wait while we confirm your transaction")), /* @__PURE__ */ import_react10.default.createElement(
|
|
2671
2819
|
"div",
|
|
2672
2820
|
{
|
|
2673
2821
|
className: "mt-4 p-4 rounded-xl",
|
|
@@ -2676,9 +2824,9 @@ function V402Checkout({
|
|
|
2676
2824
|
border: "1px solid #ccfbf1"
|
|
2677
2825
|
}
|
|
2678
2826
|
},
|
|
2679
|
-
/* @__PURE__ */
|
|
2827
|
+
/* @__PURE__ */ import_react10.default.createElement("div", { className: "flex items-center justify-center gap-2" }, /* @__PURE__ */ import_react10.default.createElement("span", { style: { fontSize: "16px" } }, "\u23F1\uFE0F"), /* @__PURE__ */ import_react10.default.createElement(Text, { style: { fontSize: "13px", color: "#0f766e", fontWeight: 500 } }, "This may take a few moments"))
|
|
2680
2828
|
)),
|
|
2681
|
-
result && /* @__PURE__ */
|
|
2829
|
+
result && /* @__PURE__ */ import_react10.default.createElement("div", null, /* @__PURE__ */ import_react10.default.createElement("div", { className: "text-center mb-6" }, /* @__PURE__ */ import_react10.default.createElement(
|
|
2682
2830
|
"div",
|
|
2683
2831
|
{
|
|
2684
2832
|
className: "inline-flex items-center justify-center w-16 h-16 rounded-full mb-4",
|
|
@@ -2687,13 +2835,13 @@ function V402Checkout({
|
|
|
2687
2835
|
boxShadow: "0 4px 20px rgba(16, 185, 129, 0.3)"
|
|
2688
2836
|
}
|
|
2689
2837
|
},
|
|
2690
|
-
/* @__PURE__ */
|
|
2691
|
-
), /* @__PURE__ */
|
|
2838
|
+
/* @__PURE__ */ import_react10.default.createElement("span", { style: { fontSize: "32px", color: "white" } }, "\u2713")
|
|
2839
|
+
), /* @__PURE__ */ import_react10.default.createElement("div", null, /* @__PURE__ */ import_react10.default.createElement(Text, { strong: true, style: {
|
|
2692
2840
|
fontSize: "20px",
|
|
2693
2841
|
color: "#262626",
|
|
2694
2842
|
display: "block",
|
|
2695
2843
|
marginBottom: "8px"
|
|
2696
|
-
} }, "Payment Successful!"), /* @__PURE__ */
|
|
2844
|
+
} }, "Payment Successful!"), /* @__PURE__ */ import_react10.default.createElement(Text, { style: { fontSize: "14px", color: "#8c8c8c" } }, "Your transaction has been confirmed"))), /* @__PURE__ */ import_react10.default.createElement(import_antd.Divider, { style: { margin: "20px 0", borderColor: "#f0f0f0" } }, /* @__PURE__ */ import_react10.default.createElement(Text, { style: { fontSize: "12px", color: "#8c8c8c", fontWeight: 500 } }, "RESPONSE DATA")), /* @__PURE__ */ import_react10.default.createElement(
|
|
2697
2845
|
"pre",
|
|
2698
2846
|
{
|
|
2699
2847
|
style: {
|
|
@@ -2713,7 +2861,7 @@ function V402Checkout({
|
|
|
2713
2861
|
},
|
|
2714
2862
|
JSON.stringify(result, null, 2)
|
|
2715
2863
|
)),
|
|
2716
|
-
error && /* @__PURE__ */
|
|
2864
|
+
error && /* @__PURE__ */ import_react10.default.createElement("div", null, /* @__PURE__ */ import_react10.default.createElement("div", { className: "text-center mb-6" }, /* @__PURE__ */ import_react10.default.createElement(
|
|
2717
2865
|
"div",
|
|
2718
2866
|
{
|
|
2719
2867
|
className: "inline-flex items-center justify-center w-16 h-16 rounded-full mb-4",
|
|
@@ -2722,13 +2870,13 @@ function V402Checkout({
|
|
|
2722
2870
|
boxShadow: "0 4px 20px rgba(239, 68, 68, 0.3)"
|
|
2723
2871
|
}
|
|
2724
2872
|
},
|
|
2725
|
-
/* @__PURE__ */
|
|
2726
|
-
), /* @__PURE__ */
|
|
2873
|
+
/* @__PURE__ */ import_react10.default.createElement("span", { style: { fontSize: "32px", color: "white" } }, "\u2717")
|
|
2874
|
+
), /* @__PURE__ */ import_react10.default.createElement("div", null, /* @__PURE__ */ import_react10.default.createElement(Text, { strong: true, style: {
|
|
2727
2875
|
fontSize: "20px",
|
|
2728
2876
|
color: "#262626",
|
|
2729
2877
|
display: "block",
|
|
2730
2878
|
marginBottom: "8px"
|
|
2731
|
-
} }, "Payment Failed"), /* @__PURE__ */
|
|
2879
|
+
} }, "Payment Failed"), /* @__PURE__ */ import_react10.default.createElement(Text, { style: { fontSize: "14px", color: "#8c8c8c" } }, "Something went wrong with your transaction"))), /* @__PURE__ */ import_react10.default.createElement(import_antd.Divider, { style: { margin: "20px 0", borderColor: "#f0f0f0" } }, /* @__PURE__ */ import_react10.default.createElement(Text, { style: { fontSize: "12px", color: "#8c8c8c", fontWeight: 500 } }, "ERROR DETAILS")), /* @__PURE__ */ import_react10.default.createElement(
|
|
2732
2880
|
"div",
|
|
2733
2881
|
{
|
|
2734
2882
|
style: {
|
|
@@ -2738,13 +2886,13 @@ function V402Checkout({
|
|
|
2738
2886
|
border: "1px solid #fee2e2"
|
|
2739
2887
|
}
|
|
2740
2888
|
},
|
|
2741
|
-
/* @__PURE__ */
|
|
2889
|
+
/* @__PURE__ */ import_react10.default.createElement(Text, { style: {
|
|
2742
2890
|
fontSize: "14px",
|
|
2743
2891
|
color: "#dc2626",
|
|
2744
2892
|
lineHeight: "1.6",
|
|
2745
2893
|
fontWeight: 500
|
|
2746
2894
|
} }, error)
|
|
2747
|
-
), /* @__PURE__ */
|
|
2895
|
+
), /* @__PURE__ */ import_react10.default.createElement("div", { className: "mt-4 text-center" }, /* @__PURE__ */ import_react10.default.createElement(
|
|
2748
2896
|
import_antd.Button,
|
|
2749
2897
|
{
|
|
2750
2898
|
size: "large",
|
|
@@ -2765,7 +2913,7 @@ function V402Checkout({
|
|
|
2765
2913
|
)))
|
|
2766
2914
|
)
|
|
2767
2915
|
),
|
|
2768
|
-
/* @__PURE__ */
|
|
2916
|
+
/* @__PURE__ */ import_react10.default.createElement("style", { dangerouslySetInnerHTML: {
|
|
2769
2917
|
__html: `
|
|
2770
2918
|
@keyframes slideInRight {
|
|
2771
2919
|
from {
|
|
@@ -2792,14 +2940,699 @@ function V402Checkout({
|
|
|
2792
2940
|
} })
|
|
2793
2941
|
);
|
|
2794
2942
|
}
|
|
2943
|
+
|
|
2944
|
+
// src/react/components/checkout/V402CheckoutV2.tsx
|
|
2945
|
+
var import_react15 = __toESM(require("react"));
|
|
2946
|
+
init_common();
|
|
2947
|
+
|
|
2948
|
+
// src/react/styles/animations.tsx
|
|
2949
|
+
var import_react11 = __toESM(require("react"));
|
|
2950
|
+
var checkoutAnimations = `
|
|
2951
|
+
@keyframes spin {
|
|
2952
|
+
from { transform: rotate(0deg); }
|
|
2953
|
+
to { transform: rotate(360deg); }
|
|
2954
|
+
}
|
|
2955
|
+
|
|
2956
|
+
@keyframes receiptShake {
|
|
2957
|
+
0%, 100% { transform: rotate(-0.3deg); }
|
|
2958
|
+
50% { transform: rotate(0.3deg); }
|
|
2959
|
+
}
|
|
2960
|
+
|
|
2961
|
+
@keyframes slideInRight {
|
|
2962
|
+
from {
|
|
2963
|
+
opacity: 0;
|
|
2964
|
+
transform: translateX(100px);
|
|
2965
|
+
}
|
|
2966
|
+
to {
|
|
2967
|
+
opacity: 1;
|
|
2968
|
+
transform: translateX(0);
|
|
2969
|
+
}
|
|
2970
|
+
}
|
|
2971
|
+
|
|
2972
|
+
@keyframes pulse {
|
|
2973
|
+
0%, 100% { opacity: 1; }
|
|
2974
|
+
50% { opacity: 0.4; }
|
|
2975
|
+
}
|
|
2976
|
+
`;
|
|
2977
|
+
var AnimationStyles = () => /* @__PURE__ */ import_react11.default.createElement("style", { dangerouslySetInnerHTML: { __html: checkoutAnimations } });
|
|
2978
|
+
|
|
2979
|
+
// src/react/components/checkout/Receipt.tsx
|
|
2980
|
+
var import_react12 = __toESM(require("react"));
|
|
2981
|
+
var Receipt = ({
|
|
2982
|
+
isLoading,
|
|
2983
|
+
isVisible,
|
|
2984
|
+
result,
|
|
2985
|
+
error,
|
|
2986
|
+
paymentDetails,
|
|
2987
|
+
address,
|
|
2988
|
+
onClose,
|
|
2989
|
+
primaryColor,
|
|
2990
|
+
receiptTitle,
|
|
2991
|
+
tempReceiptId
|
|
2992
|
+
}) => {
|
|
2993
|
+
const [animationState, setAnimationState] = (0, import_react12.useState)("hidden");
|
|
2994
|
+
(0, import_react12.useEffect)(() => {
|
|
2995
|
+
if (isLoading) {
|
|
2996
|
+
setAnimationState("printing");
|
|
2997
|
+
} else if (isVisible && (result || error)) {
|
|
2998
|
+
setAnimationState("visible");
|
|
2999
|
+
const timer = setTimeout(() => setAnimationState("bounce"), 50);
|
|
3000
|
+
return () => clearTimeout(timer);
|
|
3001
|
+
} else if (!isVisible) {
|
|
3002
|
+
setAnimationState("hidden");
|
|
3003
|
+
}
|
|
3004
|
+
}, [isLoading, isVisible, result, error]);
|
|
3005
|
+
(0, import_react12.useEffect)(() => {
|
|
3006
|
+
if (animationState === "bounce") {
|
|
3007
|
+
const timer = setTimeout(() => setAnimationState("visible"), 150);
|
|
3008
|
+
return () => clearTimeout(timer);
|
|
3009
|
+
}
|
|
3010
|
+
}, [animationState]);
|
|
3011
|
+
const now = /* @__PURE__ */ new Date();
|
|
3012
|
+
const dateStr = `${String(now.getMonth() + 1).padStart(2, "0")}/${String(now.getDate()).padStart(2, "0")}/${String(now.getFullYear()).slice(-2)}`;
|
|
3013
|
+
const timeStr = `${String(now.getHours()).padStart(2, "0")}:${String(now.getMinutes()).padStart(2, "0")}`;
|
|
3014
|
+
const receiptId = result?.transactionHash ? result.transactionHash.slice(-8).toUpperCase() : tempReceiptId;
|
|
3015
|
+
const getAnimationStyles = () => {
|
|
3016
|
+
const baseTransition = animationState === "bounce" ? "all 0.15s cubic-bezier(0.34, 1.56, 0.64, 1)" : "all 0.5s cubic-bezier(0.34, 1.56, 0.64, 1)";
|
|
3017
|
+
switch (animationState) {
|
|
3018
|
+
case "hidden":
|
|
3019
|
+
return {
|
|
3020
|
+
opacity: 0,
|
|
3021
|
+
transform: "translateY(50px)",
|
|
3022
|
+
marginBottom: 0,
|
|
3023
|
+
transition: baseTransition
|
|
3024
|
+
};
|
|
3025
|
+
case "printing":
|
|
3026
|
+
return {
|
|
3027
|
+
opacity: 1,
|
|
3028
|
+
transform: "translateY(0)",
|
|
3029
|
+
marginBottom: "-4px",
|
|
3030
|
+
// 负边距让小票贴着机器,还没撕开的感觉
|
|
3031
|
+
animation: "receiptShake 0.12s ease-in-out infinite",
|
|
3032
|
+
transition: baseTransition
|
|
3033
|
+
};
|
|
3034
|
+
case "visible":
|
|
3035
|
+
return {
|
|
3036
|
+
opacity: 1,
|
|
3037
|
+
transform: "translateY(0)",
|
|
3038
|
+
marginBottom: "8px",
|
|
3039
|
+
transition: baseTransition
|
|
3040
|
+
};
|
|
3041
|
+
case "bounce":
|
|
3042
|
+
return {
|
|
3043
|
+
opacity: 1,
|
|
3044
|
+
transform: "translateY(-8px)",
|
|
3045
|
+
marginBottom: "8px",
|
|
3046
|
+
transition: baseTransition
|
|
3047
|
+
};
|
|
3048
|
+
default:
|
|
3049
|
+
return {};
|
|
3050
|
+
}
|
|
3051
|
+
};
|
|
3052
|
+
const getContentStyles = () => {
|
|
3053
|
+
const baseTransition = "all 0.5s cubic-bezier(0.34, 1.56, 0.64, 1)";
|
|
3054
|
+
switch (animationState) {
|
|
3055
|
+
case "hidden":
|
|
3056
|
+
return {
|
|
3057
|
+
maxHeight: 0,
|
|
3058
|
+
overflow: "hidden",
|
|
3059
|
+
transition: baseTransition
|
|
3060
|
+
};
|
|
3061
|
+
case "printing":
|
|
3062
|
+
return {
|
|
3063
|
+
maxHeight: "80px",
|
|
3064
|
+
overflow: "hidden",
|
|
3065
|
+
transition: baseTransition
|
|
3066
|
+
};
|
|
3067
|
+
case "visible":
|
|
3068
|
+
case "bounce":
|
|
3069
|
+
return {
|
|
3070
|
+
maxHeight: "600px",
|
|
3071
|
+
overflow: "visible",
|
|
3072
|
+
transition: baseTransition
|
|
3073
|
+
};
|
|
3074
|
+
default:
|
|
3075
|
+
return {};
|
|
3076
|
+
}
|
|
3077
|
+
};
|
|
3078
|
+
if (animationState === "hidden" && !isLoading) return null;
|
|
3079
|
+
return /* @__PURE__ */ import_react12.default.createElement(
|
|
3080
|
+
"div",
|
|
3081
|
+
{
|
|
3082
|
+
className: "w-full flex justify-center",
|
|
3083
|
+
style: getAnimationStyles()
|
|
3084
|
+
},
|
|
3085
|
+
/* @__PURE__ */ import_react12.default.createElement(
|
|
3086
|
+
"div",
|
|
3087
|
+
{
|
|
3088
|
+
className: "relative bg-white shadow-2xl",
|
|
3089
|
+
style: {
|
|
3090
|
+
width: "75%",
|
|
3091
|
+
maxWidth: "280px",
|
|
3092
|
+
backgroundImage: `
|
|
3093
|
+
repeating-linear-gradient(
|
|
3094
|
+
0deg,
|
|
3095
|
+
transparent,
|
|
3096
|
+
transparent 1px,
|
|
3097
|
+
rgba(0,0,0,0.02) 1px,
|
|
3098
|
+
rgba(0,0,0,0.02) 2px
|
|
3099
|
+
)
|
|
3100
|
+
`
|
|
3101
|
+
}
|
|
3102
|
+
},
|
|
3103
|
+
/* @__PURE__ */ import_react12.default.createElement(
|
|
3104
|
+
"div",
|
|
3105
|
+
{
|
|
3106
|
+
className: "absolute top-0 left-0 right-0",
|
|
3107
|
+
style: {
|
|
3108
|
+
height: "8px",
|
|
3109
|
+
transform: "translateY(-100%)",
|
|
3110
|
+
background: `radial-gradient(circle at 50% 100%, white 5px, transparent 5px)`,
|
|
3111
|
+
backgroundSize: "12px 8px",
|
|
3112
|
+
backgroundPosition: "6px 0",
|
|
3113
|
+
backgroundRepeat: "repeat-x"
|
|
3114
|
+
}
|
|
3115
|
+
}
|
|
3116
|
+
),
|
|
3117
|
+
/* @__PURE__ */ import_react12.default.createElement(
|
|
3118
|
+
"div",
|
|
3119
|
+
{
|
|
3120
|
+
className: "absolute left-0 right-0 bg-white",
|
|
3121
|
+
style: {
|
|
3122
|
+
height: "4px",
|
|
3123
|
+
top: "-4px"
|
|
3124
|
+
}
|
|
3125
|
+
}
|
|
3126
|
+
),
|
|
3127
|
+
!isLoading && /* @__PURE__ */ import_react12.default.createElement(import_react12.default.Fragment, null, /* @__PURE__ */ import_react12.default.createElement(
|
|
3128
|
+
"div",
|
|
3129
|
+
{
|
|
3130
|
+
className: "absolute bottom-0 left-0 right-0",
|
|
3131
|
+
style: {
|
|
3132
|
+
height: "8px",
|
|
3133
|
+
transform: "translateY(100%)",
|
|
3134
|
+
background: `radial-gradient(circle at 50% 0%, white 5px, transparent 5px)`,
|
|
3135
|
+
backgroundSize: "12px 8px",
|
|
3136
|
+
backgroundPosition: "6px 0",
|
|
3137
|
+
backgroundRepeat: "repeat-x"
|
|
3138
|
+
}
|
|
3139
|
+
}
|
|
3140
|
+
), /* @__PURE__ */ import_react12.default.createElement(
|
|
3141
|
+
"div",
|
|
3142
|
+
{
|
|
3143
|
+
className: "absolute left-0 right-0 bg-white",
|
|
3144
|
+
style: {
|
|
3145
|
+
height: "4px",
|
|
3146
|
+
bottom: "-4px"
|
|
3147
|
+
}
|
|
3148
|
+
}
|
|
3149
|
+
)),
|
|
3150
|
+
!isLoading && (result || error) && /* @__PURE__ */ import_react12.default.createElement(
|
|
3151
|
+
"button",
|
|
3152
|
+
{
|
|
3153
|
+
onClick: onClose,
|
|
3154
|
+
className: "absolute top-3 right-3 text-gray-300 hover:text-gray-500 transition-colors bg-transparent border-none outline-none p-0 cursor-pointer",
|
|
3155
|
+
style: { background: "none", border: "none" }
|
|
3156
|
+
},
|
|
3157
|
+
/* @__PURE__ */ import_react12.default.createElement("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round" }, /* @__PURE__ */ import_react12.default.createElement("path", { d: "M18 6L6 18M6 6l12 12" }))
|
|
3158
|
+
),
|
|
3159
|
+
/* @__PURE__ */ import_react12.default.createElement("div", { className: "p-4 font-mono text-sm", style: getContentStyles() }, /* @__PURE__ */ import_react12.default.createElement("div", { className: "text-center mb-3" }, /* @__PURE__ */ import_react12.default.createElement("div", { className: "text-base font-bold tracking-wider text-gray-800" }, receiptTitle), /* @__PURE__ */ import_react12.default.createElement("div", { className: "flex justify-between text-xs text-gray-500 mt-1" }, /* @__PURE__ */ import_react12.default.createElement("span", null, "ID: ", receiptId), /* @__PURE__ */ import_react12.default.createElement("span", null, dateStr, " ", timeStr))), /* @__PURE__ */ import_react12.default.createElement("div", { className: "border-t border-dashed border-gray-300 my-2" }), /* @__PURE__ */ import_react12.default.createElement(
|
|
3160
|
+
"div",
|
|
3161
|
+
{
|
|
3162
|
+
className: "max-h-64 overflow-y-auto pr-1",
|
|
3163
|
+
style: {
|
|
3164
|
+
scrollbarWidth: "thin",
|
|
3165
|
+
scrollbarColor: "#d1d5db transparent"
|
|
3166
|
+
}
|
|
3167
|
+
},
|
|
3168
|
+
isLoading ? /* @__PURE__ */ import_react12.default.createElement(LoadingContent, { primaryColor }) : error ? /* @__PURE__ */ import_react12.default.createElement(ErrorContent, { error }) : result ? /* @__PURE__ */ import_react12.default.createElement(
|
|
3169
|
+
SuccessContent,
|
|
3170
|
+
{
|
|
3171
|
+
result,
|
|
3172
|
+
paymentDetails,
|
|
3173
|
+
address,
|
|
3174
|
+
primaryColor
|
|
3175
|
+
}
|
|
3176
|
+
) : null
|
|
3177
|
+
), /* @__PURE__ */ import_react12.default.createElement("div", { className: "border-t border-dashed border-gray-300 my-2" }), /* @__PURE__ */ import_react12.default.createElement(Barcode, null), /* @__PURE__ */ import_react12.default.createElement("div", { className: "text-center text-xs text-gray-400 mt-1 tracking-widest" }, "POWERED BY", " ", /* @__PURE__ */ import_react12.default.createElement(
|
|
3178
|
+
"a",
|
|
3179
|
+
{
|
|
3180
|
+
href: "https://v402pay.onvoyage.ai",
|
|
3181
|
+
target: "_blank",
|
|
3182
|
+
rel: "noopener noreferrer",
|
|
3183
|
+
className: "text-gray-500 hover:text-gray-700 underline transition-colors"
|
|
3184
|
+
},
|
|
3185
|
+
"V402PAY"
|
|
3186
|
+
)))
|
|
3187
|
+
)
|
|
3188
|
+
);
|
|
3189
|
+
};
|
|
3190
|
+
var LoadingContent = ({ primaryColor }) => /* @__PURE__ */ import_react12.default.createElement("div", { className: "text-center py-4" }, /* @__PURE__ */ import_react12.default.createElement(
|
|
3191
|
+
"div",
|
|
3192
|
+
{
|
|
3193
|
+
className: "inline-block w-8 h-8 border-2 border-gray-200 rounded-full mb-2",
|
|
3194
|
+
style: {
|
|
3195
|
+
borderTopColor: primaryColor,
|
|
3196
|
+
animation: "spin 0.8s linear infinite"
|
|
3197
|
+
}
|
|
3198
|
+
}
|
|
3199
|
+
), /* @__PURE__ */ import_react12.default.createElement("div", { className: "text-gray-700 font-semibold text-sm" }, "Processing..."), /* @__PURE__ */ import_react12.default.createElement("div", { className: "text-gray-400 text-xs mt-1" }, "Please wait"));
|
|
3200
|
+
var ErrorContent = ({ error }) => /* @__PURE__ */ import_react12.default.createElement("div", { className: "text-center py-3" }, /* @__PURE__ */ import_react12.default.createElement("div", { className: "text-red-500 text-2xl mb-2" }, "\u2717"), /* @__PURE__ */ import_react12.default.createElement("div", { className: "text-red-600 font-semibold mb-1 text-sm" }, "FAILED"), /* @__PURE__ */ import_react12.default.createElement("div", { className: "text-red-500 text-xs break-words px-2" }, error));
|
|
3201
|
+
var SuccessContent = ({
|
|
3202
|
+
result,
|
|
3203
|
+
paymentDetails,
|
|
3204
|
+
address,
|
|
3205
|
+
primaryColor
|
|
3206
|
+
}) => {
|
|
3207
|
+
const [copied, setCopied] = (0, import_react12.useState)(false);
|
|
3208
|
+
const handleCopy = async () => {
|
|
3209
|
+
try {
|
|
3210
|
+
await navigator.clipboard.writeText(JSON.stringify(result, null, 2));
|
|
3211
|
+
setCopied(true);
|
|
3212
|
+
setTimeout(() => setCopied(false), 2e3);
|
|
3213
|
+
} catch (err) {
|
|
3214
|
+
console.error("Failed to copy:", err);
|
|
3215
|
+
}
|
|
3216
|
+
};
|
|
3217
|
+
return /* @__PURE__ */ import_react12.default.createElement("div", null, /* @__PURE__ */ import_react12.default.createElement("div", { className: "text-center mb-2" }, /* @__PURE__ */ import_react12.default.createElement("div", { className: "text-2xl mb-1", style: { color: primaryColor } }, "\u2713"), /* @__PURE__ */ import_react12.default.createElement("div", { className: "font-semibold text-sm", style: { color: primaryColor } }, "SUCCESS")), /* @__PURE__ */ import_react12.default.createElement("div", { className: "space-y-1 text-xs" }, paymentDetails && /* @__PURE__ */ import_react12.default.createElement(import_react12.default.Fragment, null, /* @__PURE__ */ import_react12.default.createElement("div", { className: "flex justify-between" }, /* @__PURE__ */ import_react12.default.createElement("span", { className: "text-gray-500" }, "Amount:"), /* @__PURE__ */ import_react12.default.createElement("span", { className: "font-semibold" }, "$", paymentDetails.amount, " ", paymentDetails.currency)), /* @__PURE__ */ import_react12.default.createElement("div", { className: "flex justify-between" }, /* @__PURE__ */ import_react12.default.createElement("span", { className: "text-gray-500" }, "Network:"), /* @__PURE__ */ import_react12.default.createElement("span", { className: "font-semibold" }, paymentDetails.network))), address && /* @__PURE__ */ import_react12.default.createElement("div", { className: "flex justify-between" }, /* @__PURE__ */ import_react12.default.createElement("span", { className: "text-gray-500" }, "From:"), /* @__PURE__ */ import_react12.default.createElement("span", { className: "font-semibold" }, formatAddress(address))), result.transactionHash && /* @__PURE__ */ import_react12.default.createElement("div", { className: "flex justify-between" }, /* @__PURE__ */ import_react12.default.createElement("span", { className: "text-gray-500" }, "TX:"), /* @__PURE__ */ import_react12.default.createElement("span", { className: "font-semibold" }, formatAddress(result.transactionHash)))), /* @__PURE__ */ import_react12.default.createElement("div", { className: "border-t border-dashed border-gray-300 my-2" }), /* @__PURE__ */ import_react12.default.createElement("div", { className: "text-xs" }, /* @__PURE__ */ import_react12.default.createElement("div", { className: "flex justify-between items-center mb-1" }, /* @__PURE__ */ import_react12.default.createElement("span", { className: "text-gray-500" }, "Response:"), /* @__PURE__ */ import_react12.default.createElement(
|
|
3218
|
+
"button",
|
|
3219
|
+
{
|
|
3220
|
+
onClick: handleCopy,
|
|
3221
|
+
className: "text-gray-300 hover:text-gray-500 transition-colors flex items-center gap-1 bg-transparent border-none outline-none p-0 cursor-pointer",
|
|
3222
|
+
style: { background: "none", border: "none" }
|
|
3223
|
+
},
|
|
3224
|
+
copied ? /* @__PURE__ */ import_react12.default.createElement("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round" }, /* @__PURE__ */ import_react12.default.createElement("path", { d: "M20 6L9 17l-5-5" })) : /* @__PURE__ */ import_react12.default.createElement("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }, /* @__PURE__ */ import_react12.default.createElement("rect", { x: "9", y: "9", width: "13", height: "13", rx: "2" }), /* @__PURE__ */ import_react12.default.createElement("path", { d: "M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1" }))
|
|
3225
|
+
)), /* @__PURE__ */ import_react12.default.createElement(
|
|
3226
|
+
"pre",
|
|
3227
|
+
{
|
|
3228
|
+
className: "bg-gray-50 p-2 rounded text-xs overflow-auto whitespace-pre-wrap break-words",
|
|
3229
|
+
style: { maxHeight: "80px", fontSize: "10px" }
|
|
3230
|
+
},
|
|
3231
|
+
JSON.stringify(result, null, 2)
|
|
3232
|
+
)));
|
|
3233
|
+
};
|
|
3234
|
+
var Barcode = () => {
|
|
3235
|
+
const pattern = [2, 1, 2, 1, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 1];
|
|
3236
|
+
const heights = [10, 12, 11, 13, 10, 14, 11, 12, 13, 10, 11, 14, 12, 10, 13, 11, 12, 14, 10, 11];
|
|
3237
|
+
return /* @__PURE__ */ import_react12.default.createElement("div", { className: "flex items-center justify-center gap-0.5 h-4 opacity-60" }, pattern.map((width, i) => /* @__PURE__ */ import_react12.default.createElement(
|
|
3238
|
+
"div",
|
|
3239
|
+
{
|
|
3240
|
+
key: i,
|
|
3241
|
+
className: "bg-gray-800",
|
|
3242
|
+
style: {
|
|
3243
|
+
width: `${width}px`,
|
|
3244
|
+
height: `${heights[i]}px`
|
|
3245
|
+
}
|
|
3246
|
+
}
|
|
3247
|
+
)));
|
|
3248
|
+
};
|
|
3249
|
+
|
|
3250
|
+
// src/react/components/checkout/TerminalScreen.tsx
|
|
3251
|
+
var import_react13 = __toESM(require("react"));
|
|
3252
|
+
var TerminalScreen = ({
|
|
3253
|
+
title,
|
|
3254
|
+
tooltipText,
|
|
3255
|
+
hasInvalidCheckoutId,
|
|
3256
|
+
fetchingPaymentInfo,
|
|
3257
|
+
address,
|
|
3258
|
+
paymentDetails,
|
|
3259
|
+
screenText,
|
|
3260
|
+
supportedNetworks
|
|
3261
|
+
}) => {
|
|
3262
|
+
return /* @__PURE__ */ import_react13.default.createElement(
|
|
3263
|
+
"div",
|
|
3264
|
+
{
|
|
3265
|
+
className: "rounded-xl p-3 mb-3",
|
|
3266
|
+
style: {
|
|
3267
|
+
backgroundColor: "#0a1a0a",
|
|
3268
|
+
boxShadow: "inset 0 3px 16px rgba(0,0,0,0.5)",
|
|
3269
|
+
border: "3px solid rgba(0,0,0,0.3)"
|
|
3270
|
+
}
|
|
3271
|
+
},
|
|
3272
|
+
/* @__PURE__ */ import_react13.default.createElement("div", { className: "flex justify-between items-center mb-2" }, /* @__PURE__ */ import_react13.default.createElement("div", { className: "flex items-center gap-1.5 flex-1 min-w-0" }, /* @__PURE__ */ import_react13.default.createElement("div", { className: "w-2.5 h-2.5 rounded border border-green-700 flex-shrink-0" }), title ? /* @__PURE__ */ import_react13.default.createElement(
|
|
3273
|
+
"span",
|
|
3274
|
+
{
|
|
3275
|
+
className: "text-xs font-mono",
|
|
3276
|
+
style: { color: "#22c55e80" },
|
|
3277
|
+
title
|
|
3278
|
+
},
|
|
3279
|
+
title.length > 26 ? `${title.slice(0, 13)}...${title.slice(-13)}` : title
|
|
3280
|
+
) : /* @__PURE__ */ import_react13.default.createElement("span", { className: "text-xs font-mono", style: { color: "#22c55e80" } }, "CHECKOUT")), /* @__PURE__ */ import_react13.default.createElement(
|
|
3281
|
+
"div",
|
|
3282
|
+
{
|
|
3283
|
+
className: "flex gap-0.5 flex-shrink-0 cursor-help",
|
|
3284
|
+
title: tooltipText
|
|
3285
|
+
},
|
|
3286
|
+
/* @__PURE__ */ import_react13.default.createElement(
|
|
3287
|
+
"div",
|
|
3288
|
+
{
|
|
3289
|
+
className: "w-1 h-1.5 rounded-sm",
|
|
3290
|
+
style: { backgroundColor: address ? "#22c55e80" : "#22c55e30" }
|
|
3291
|
+
}
|
|
3292
|
+
),
|
|
3293
|
+
/* @__PURE__ */ import_react13.default.createElement(
|
|
3294
|
+
"div",
|
|
3295
|
+
{
|
|
3296
|
+
className: "w-1 h-1.5 rounded-sm",
|
|
3297
|
+
style: { backgroundColor: address ? "#22c55e80" : "#22c55e30" }
|
|
3298
|
+
}
|
|
3299
|
+
),
|
|
3300
|
+
/* @__PURE__ */ import_react13.default.createElement("div", { className: "w-1 h-1.5 rounded-sm", style: { backgroundColor: "#22c55e80" } })
|
|
3301
|
+
)),
|
|
3302
|
+
/* @__PURE__ */ import_react13.default.createElement("div", { className: "min-h-[120px]" }, hasInvalidCheckoutId ? /* @__PURE__ */ import_react13.default.createElement(InvalidIdContent, null) : fetchingPaymentInfo ? /* @__PURE__ */ import_react13.default.createElement(LoadingContent2, null) : !address ? /* @__PURE__ */ import_react13.default.createElement(ConnectWalletContent, { supportedNetworks }) : /* @__PURE__ */ import_react13.default.createElement(
|
|
3303
|
+
PaymentInfoContent,
|
|
3304
|
+
{
|
|
3305
|
+
screenText,
|
|
3306
|
+
paymentDetails,
|
|
3307
|
+
address
|
|
3308
|
+
}
|
|
3309
|
+
))
|
|
3310
|
+
);
|
|
3311
|
+
};
|
|
3312
|
+
var InvalidIdContent = () => /* @__PURE__ */ import_react13.default.createElement("div", { className: "text-center py-3" }, /* @__PURE__ */ import_react13.default.createElement("div", { className: "text-red-500 text-xl mb-1" }, "\u2717"), /* @__PURE__ */ import_react13.default.createElement("div", { className: "text-red-500 font-mono text-sm mb-1" }, "INVALID ID"), /* @__PURE__ */ import_react13.default.createElement("div", { className: "text-red-400 font-mono text-xs" }, "Check your checkout ID"));
|
|
3313
|
+
var LoadingContent2 = () => /* @__PURE__ */ import_react13.default.createElement("div", { className: "text-center py-4" }, /* @__PURE__ */ import_react13.default.createElement(
|
|
3314
|
+
"div",
|
|
3315
|
+
{
|
|
3316
|
+
className: "inline-block w-5 h-5 border-2 rounded-full mb-2",
|
|
3317
|
+
style: {
|
|
3318
|
+
borderColor: "#22c55e40",
|
|
3319
|
+
borderTopColor: "#22c55e",
|
|
3320
|
+
animation: "spin 1s linear infinite"
|
|
3321
|
+
}
|
|
3322
|
+
}
|
|
3323
|
+
), /* @__PURE__ */ import_react13.default.createElement("div", { className: "font-mono text-sm", style: { color: "#22c55e" } }, "LOADING..."));
|
|
3324
|
+
var ConnectWalletContent = ({ supportedNetworks }) => /* @__PURE__ */ import_react13.default.createElement("div", null, /* @__PURE__ */ import_react13.default.createElement(
|
|
3325
|
+
"div",
|
|
3326
|
+
{
|
|
3327
|
+
className: "font-mono text-base mb-3 tracking-wider",
|
|
3328
|
+
style: { color: "#f97316", textShadow: "0 0 10px #f9731640" }
|
|
3329
|
+
},
|
|
3330
|
+
"CONNECT WALLET..."
|
|
3331
|
+
), /* @__PURE__ */ import_react13.default.createElement(WalletConnect, { supportedNetworks, showSwitchWallet: false }));
|
|
3332
|
+
var PaymentInfoContent = ({
|
|
3333
|
+
screenText,
|
|
3334
|
+
paymentDetails,
|
|
3335
|
+
address
|
|
3336
|
+
}) => /* @__PURE__ */ import_react13.default.createElement("div", null, /* @__PURE__ */ import_react13.default.createElement(
|
|
3337
|
+
"div",
|
|
3338
|
+
{
|
|
3339
|
+
className: "font-mono text-base mb-3 tracking-wider",
|
|
3340
|
+
style: { color: "#f97316", textShadow: "0 0 10px #f9731640" }
|
|
3341
|
+
},
|
|
3342
|
+
screenText
|
|
3343
|
+
), paymentDetails && /* @__PURE__ */ import_react13.default.createElement("div", { className: "text-xs font-mono" }, /* @__PURE__ */ import_react13.default.createElement("div", { className: "grid grid-cols-2 gap-1.5 mb-1.5" }, /* @__PURE__ */ import_react13.default.createElement("div", null, /* @__PURE__ */ import_react13.default.createElement("div", { style: { color: "#22c55e60" } }, "AMOUNT"), /* @__PURE__ */ import_react13.default.createElement("div", { style: { color: "#22c55e" } }, "$", paymentDetails.amount)), /* @__PURE__ */ import_react13.default.createElement("div", null, /* @__PURE__ */ import_react13.default.createElement("div", { style: { color: "#22c55e60" } }, "CURRENCY"), /* @__PURE__ */ import_react13.default.createElement("div", { style: { color: "#22c55e" } }, paymentDetails.currency))), /* @__PURE__ */ import_react13.default.createElement("div", null, /* @__PURE__ */ import_react13.default.createElement("div", { style: { color: "#22c55e60" } }, "WALLET"), /* @__PURE__ */ import_react13.default.createElement("div", { style: { color: "#22c55e", wordBreak: "break-all" } }, address))));
|
|
3344
|
+
|
|
3345
|
+
// src/react/components/checkout/TerminalButtons.tsx
|
|
3346
|
+
var import_react14 = __toESM(require("react"));
|
|
3347
|
+
var TerminalButtons = ({
|
|
3348
|
+
address,
|
|
3349
|
+
showReceipt,
|
|
3350
|
+
isProcessing,
|
|
3351
|
+
paymentDetails,
|
|
3352
|
+
hasInvalidCheckoutId,
|
|
3353
|
+
onDisconnect,
|
|
3354
|
+
onClearReceipt,
|
|
3355
|
+
onPayment
|
|
3356
|
+
}) => {
|
|
3357
|
+
const isPayDisabled = isProcessing || !paymentDetails || !address || hasInvalidCheckoutId;
|
|
3358
|
+
return /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex items-center justify-between px-1" }, /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex gap-2" }, /* @__PURE__ */ import_react14.default.createElement(
|
|
3359
|
+
CircleButton,
|
|
3360
|
+
{
|
|
3361
|
+
onClick: () => address && onDisconnect(),
|
|
3362
|
+
disabled: !address,
|
|
3363
|
+
title: "Disconnect",
|
|
3364
|
+
size: "small"
|
|
3365
|
+
},
|
|
3366
|
+
/* @__PURE__ */ import_react14.default.createElement("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "white", strokeWidth: "2" }, /* @__PURE__ */ import_react14.default.createElement("path", { d: "M18 6L6 18M6 6l12 12" }))
|
|
3367
|
+
), /* @__PURE__ */ import_react14.default.createElement(
|
|
3368
|
+
CircleButton,
|
|
3369
|
+
{
|
|
3370
|
+
onClick: onClearReceipt,
|
|
3371
|
+
disabled: !showReceipt || isProcessing,
|
|
3372
|
+
title: "Clear",
|
|
3373
|
+
size: "small"
|
|
3374
|
+
},
|
|
3375
|
+
/* @__PURE__ */ import_react14.default.createElement("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "white", strokeWidth: "2" }, /* @__PURE__ */ import_react14.default.createElement("path", { d: "M3 6h18M8 6V4a2 2 0 012-2h4a2 2 0 012 2v2m3 0v14a2 2 0 01-2 2H7a2 2 0 01-2-2V6h14z" }))
|
|
3376
|
+
)), /* @__PURE__ */ import_react14.default.createElement("div", { className: "flex flex-col gap-0.5 opacity-40" }, /* @__PURE__ */ import_react14.default.createElement("div", { className: "w-6 h-0.5 rounded", style: { backgroundColor: "rgba(0,0,0,0.3)" } }), /* @__PURE__ */ import_react14.default.createElement("div", { className: "w-6 h-0.5 rounded", style: { backgroundColor: "rgba(0,0,0,0.3)" } }), /* @__PURE__ */ import_react14.default.createElement("div", { className: "w-6 h-0.5 rounded", style: { backgroundColor: "rgba(0,0,0,0.3)" } })), /* @__PURE__ */ import_react14.default.createElement(
|
|
3377
|
+
"button",
|
|
3378
|
+
{
|
|
3379
|
+
onClick: onPayment,
|
|
3380
|
+
disabled: isPayDisabled,
|
|
3381
|
+
className: "px-5 py-2.5 rounded-xl font-bold text-white flex items-center gap-2 transition-all active:scale-95",
|
|
3382
|
+
style: {
|
|
3383
|
+
backgroundColor: isPayDisabled ? "#9ca3af" : "#ea580c",
|
|
3384
|
+
boxShadow: isPayDisabled ? "none" : "0 4px 12px rgba(234,88,12,0.4), inset 0 -2px 4px rgba(0,0,0,0.2)",
|
|
3385
|
+
cursor: isPayDisabled ? "not-allowed" : "pointer"
|
|
3386
|
+
}
|
|
3387
|
+
},
|
|
3388
|
+
isProcessing ? /* @__PURE__ */ import_react14.default.createElement(import_react14.default.Fragment, null, /* @__PURE__ */ import_react14.default.createElement(
|
|
3389
|
+
"div",
|
|
3390
|
+
{
|
|
3391
|
+
className: "w-4 h-4 border-2 border-white/30 border-t-white rounded-full",
|
|
3392
|
+
style: { animation: "spin 0.8s linear infinite" }
|
|
3393
|
+
}
|
|
3394
|
+
), /* @__PURE__ */ import_react14.default.createElement("span", { className: "font-mono tracking-wider text-sm" }, "PAYING...")) : /* @__PURE__ */ import_react14.default.createElement(import_react14.default.Fragment, null, /* @__PURE__ */ import_react14.default.createElement("span", { className: "font-mono tracking-wider text-sm" }, "PAY"), /* @__PURE__ */ import_react14.default.createElement(
|
|
3395
|
+
"svg",
|
|
3396
|
+
{
|
|
3397
|
+
width: "18",
|
|
3398
|
+
height: "18",
|
|
3399
|
+
viewBox: "0 0 24 24",
|
|
3400
|
+
fill: "none",
|
|
3401
|
+
stroke: "currentColor",
|
|
3402
|
+
strokeWidth: "2"
|
|
3403
|
+
},
|
|
3404
|
+
/* @__PURE__ */ import_react14.default.createElement("path", { d: "M12 2v20M17 5H9.5a3.5 3.5 0 000 7h5a3.5 3.5 0 010 7H6" })
|
|
3405
|
+
))
|
|
3406
|
+
));
|
|
3407
|
+
};
|
|
3408
|
+
var CircleButton = ({ onClick, disabled, title, size = "normal", children }) => {
|
|
3409
|
+
const sizeClass = size === "small" ? "w-10 h-10" : "w-12 h-12";
|
|
3410
|
+
return /* @__PURE__ */ import_react14.default.createElement(
|
|
3411
|
+
"button",
|
|
3412
|
+
{
|
|
3413
|
+
onClick,
|
|
3414
|
+
disabled,
|
|
3415
|
+
className: `${sizeClass} rounded-full flex items-center justify-center transition-transform active:scale-95`,
|
|
3416
|
+
style: {
|
|
3417
|
+
backgroundColor: "#374151",
|
|
3418
|
+
boxShadow: "inset 0 -2px 4px rgba(0,0,0,0.3), 0 2px 4px rgba(0,0,0,0.2)",
|
|
3419
|
+
opacity: disabled ? 0.5 : 1
|
|
3420
|
+
},
|
|
3421
|
+
title
|
|
3422
|
+
},
|
|
3423
|
+
children
|
|
3424
|
+
);
|
|
3425
|
+
};
|
|
3426
|
+
|
|
3427
|
+
// src/react/components/checkout/V402CheckoutV2.tsx
|
|
3428
|
+
var generateRandomId = () => {
|
|
3429
|
+
const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
|
3430
|
+
return Array.from({ length: 8 }, () => chars[Math.floor(Math.random() * chars.length)]).join("");
|
|
3431
|
+
};
|
|
3432
|
+
function V402CheckoutV2({
|
|
3433
|
+
checkoutId,
|
|
3434
|
+
headerInfo = {},
|
|
3435
|
+
primaryColor = "#84cc16",
|
|
3436
|
+
isModal = false,
|
|
3437
|
+
onPaymentComplete,
|
|
3438
|
+
additionalParams = {},
|
|
3439
|
+
expectedNetwork
|
|
3440
|
+
}) {
|
|
3441
|
+
const {
|
|
3442
|
+
title = "V402Pay Checkout",
|
|
3443
|
+
brandName = "V402PAY",
|
|
3444
|
+
receiptTitle = "V402 PAYMENT",
|
|
3445
|
+
tooltipText = "V402Pay - Accept Crypto Payments Easier"
|
|
3446
|
+
} = headerInfo;
|
|
3447
|
+
const endpoint = PROD_BACK_URL;
|
|
3448
|
+
const {
|
|
3449
|
+
supportedNetworks,
|
|
3450
|
+
isLoading: fetchingPaymentInfo,
|
|
3451
|
+
paymentInfo
|
|
3452
|
+
} = usePaymentInfo(checkoutId, endpoint, additionalParams);
|
|
3453
|
+
const targetNetwork = expectedNetwork || supportedNetworks[0];
|
|
3454
|
+
const { address, networkType, disconnect, ensureNetwork } = usePageNetwork(
|
|
3455
|
+
targetNetwork,
|
|
3456
|
+
{ autoSwitch: !!targetNetwork, switchOnMount: true }
|
|
3457
|
+
);
|
|
3458
|
+
const { isProcessing, setIsProcessing, result, setResult, error, setError } = usePayment();
|
|
3459
|
+
const [paymentDetails, setPaymentDetails] = (0, import_react15.useState)(null);
|
|
3460
|
+
const [showReceipt, setShowReceipt] = (0, import_react15.useState)(false);
|
|
3461
|
+
const [tempReceiptId, setTempReceiptId] = (0, import_react15.useState)(() => generateRandomId());
|
|
3462
|
+
const handleDisconnect = () => {
|
|
3463
|
+
disconnect();
|
|
3464
|
+
setResult(null);
|
|
3465
|
+
setError(null);
|
|
3466
|
+
setShowReceipt(false);
|
|
3467
|
+
};
|
|
3468
|
+
const handlePayment = async () => {
|
|
3469
|
+
if (!networkType) return;
|
|
3470
|
+
setTempReceiptId(generateRandomId());
|
|
3471
|
+
setResult(null);
|
|
3472
|
+
setError(null);
|
|
3473
|
+
setIsProcessing(true);
|
|
3474
|
+
setShowReceipt(true);
|
|
3475
|
+
try {
|
|
3476
|
+
const response = await makePayment(networkType, checkoutId, endpoint, additionalParams, address || void 0);
|
|
3477
|
+
const data = await response.json();
|
|
3478
|
+
setResult(data);
|
|
3479
|
+
if (onPaymentComplete) {
|
|
3480
|
+
onPaymentComplete(data);
|
|
3481
|
+
}
|
|
3482
|
+
} catch (err) {
|
|
3483
|
+
setError(err.message || "Payment failed");
|
|
3484
|
+
} finally {
|
|
3485
|
+
setIsProcessing(false);
|
|
3486
|
+
}
|
|
3487
|
+
};
|
|
3488
|
+
const handleCloseReceipt = () => {
|
|
3489
|
+
setShowReceipt(false);
|
|
3490
|
+
setResult(null);
|
|
3491
|
+
setError(null);
|
|
3492
|
+
};
|
|
3493
|
+
(0, import_react15.useEffect)(() => {
|
|
3494
|
+
if (paymentInfo && paymentInfo.length > 0) {
|
|
3495
|
+
const firstPayment = paymentInfo[0];
|
|
3496
|
+
const rawAmount = firstPayment.maxAmountRequired?.toString() || "0";
|
|
3497
|
+
const decimals = 6;
|
|
3498
|
+
const humanReadableAmount = (Number(rawAmount) / Math.pow(10, decimals)).toFixed(2);
|
|
3499
|
+
const network = firstPayment.network || "Unknown";
|
|
3500
|
+
const currency = "USDC";
|
|
3501
|
+
setPaymentDetails({ amount: humanReadableAmount, currency, network });
|
|
3502
|
+
}
|
|
3503
|
+
}, [paymentInfo]);
|
|
3504
|
+
(0, import_react15.useEffect)(() => {
|
|
3505
|
+
if (targetNetwork && !fetchingPaymentInfo && ensureNetwork) {
|
|
3506
|
+
ensureNetwork(targetNetwork).catch((err) => {
|
|
3507
|
+
console.error("Failed to ensure network:", err);
|
|
3508
|
+
});
|
|
3509
|
+
}
|
|
3510
|
+
}, [targetNetwork, fetchingPaymentInfo]);
|
|
3511
|
+
(0, import_react15.useEffect)(() => {
|
|
3512
|
+
if (isProcessing || result || error) {
|
|
3513
|
+
setShowReceipt(true);
|
|
3514
|
+
}
|
|
3515
|
+
}, [isProcessing, result, error]);
|
|
3516
|
+
const hasInvalidCheckoutId = !fetchingPaymentInfo && (!paymentInfo || paymentInfo.length === 0);
|
|
3517
|
+
const NetworkIcon = paymentDetails ? getNetworkIcon(paymentDetails.network) : null;
|
|
3518
|
+
const screenText = paymentDetails ? `PAY $${paymentDetails.amount} ${paymentDetails.currency}` : "AWAITING...";
|
|
3519
|
+
const getStatusText = () => {
|
|
3520
|
+
if (hasInvalidCheckoutId) return "ERROR";
|
|
3521
|
+
if (fetchingPaymentInfo) return "LOADING";
|
|
3522
|
+
if (!address) return "CONNECT";
|
|
3523
|
+
if (isProcessing) return "PAYING";
|
|
3524
|
+
return "READY";
|
|
3525
|
+
};
|
|
3526
|
+
return /* @__PURE__ */ import_react15.default.createElement("div", { className: isModal ? "bg-transparent" : "min-h-screen bg-gray-100 flex items-center justify-center p-4" }, /* @__PURE__ */ import_react15.default.createElement(
|
|
3527
|
+
"div",
|
|
3528
|
+
{
|
|
3529
|
+
className: "flex flex-col items-center",
|
|
3530
|
+
style: { width: isModal ? "100%" : "380px", maxWidth: "100%" }
|
|
3531
|
+
},
|
|
3532
|
+
/* @__PURE__ */ import_react15.default.createElement(
|
|
3533
|
+
Receipt,
|
|
3534
|
+
{
|
|
3535
|
+
isLoading: isProcessing,
|
|
3536
|
+
isVisible: showReceipt,
|
|
3537
|
+
result,
|
|
3538
|
+
error,
|
|
3539
|
+
paymentDetails,
|
|
3540
|
+
address,
|
|
3541
|
+
onClose: handleCloseReceipt,
|
|
3542
|
+
primaryColor,
|
|
3543
|
+
receiptTitle,
|
|
3544
|
+
tempReceiptId
|
|
3545
|
+
}
|
|
3546
|
+
),
|
|
3547
|
+
/* @__PURE__ */ import_react15.default.createElement(
|
|
3548
|
+
"div",
|
|
3549
|
+
{
|
|
3550
|
+
className: "relative rounded-2xl p-3 shadow-2xl w-full",
|
|
3551
|
+
style: {
|
|
3552
|
+
backgroundColor: primaryColor,
|
|
3553
|
+
boxShadow: `0 16px 48px -8px ${primaryColor}66, 0 8px 24px -4px rgba(0,0,0,0.3);padding-bottom: 0px`
|
|
3554
|
+
}
|
|
3555
|
+
},
|
|
3556
|
+
/* @__PURE__ */ import_react15.default.createElement(
|
|
3557
|
+
"div",
|
|
3558
|
+
{
|
|
3559
|
+
className: "absolute top-0 left-1/2 -translate-x-1/2 w-1/3 h-2.5 rounded-b-lg",
|
|
3560
|
+
style: { backgroundColor: "rgba(0,0,0,0.4)" }
|
|
3561
|
+
}
|
|
3562
|
+
),
|
|
3563
|
+
/* @__PURE__ */ import_react15.default.createElement("div", { className: "flex justify-between items-center mb-2 mt-1 px-1" }, /* @__PURE__ */ import_react15.default.createElement("div", { className: "flex items-center gap-1.5" }, /* @__PURE__ */ import_react15.default.createElement(
|
|
3564
|
+
"div",
|
|
3565
|
+
{
|
|
3566
|
+
className: "w-2 h-2 rounded-full",
|
|
3567
|
+
style: {
|
|
3568
|
+
backgroundColor: address ? "#22c55e" : "#ef4444",
|
|
3569
|
+
animation: "pulse 2s ease-in-out infinite"
|
|
3570
|
+
}
|
|
3571
|
+
}
|
|
3572
|
+
), /* @__PURE__ */ import_react15.default.createElement(
|
|
3573
|
+
"span",
|
|
3574
|
+
{
|
|
3575
|
+
className: "text-xs font-mono font-bold tracking-wider",
|
|
3576
|
+
style: { color: "rgba(0,0,0,0.7)" }
|
|
3577
|
+
},
|
|
3578
|
+
getStatusText()
|
|
3579
|
+
)), /* @__PURE__ */ import_react15.default.createElement("div", { className: "flex items-center gap-1.5" }, paymentDetails && NetworkIcon && /* @__PURE__ */ import_react15.default.createElement("div", { className: "flex items-center gap-1" }, /* @__PURE__ */ import_react15.default.createElement(NetworkIcon, { width: 12, height: 12, style: { color: "rgba(0,0,0,0.7)" } }), /* @__PURE__ */ import_react15.default.createElement("span", { className: "text-xs font-mono font-bold", style: { color: "rgba(0,0,0,0.7)" } }, paymentDetails.network)))),
|
|
3580
|
+
/* @__PURE__ */ import_react15.default.createElement(
|
|
3581
|
+
TerminalScreen,
|
|
3582
|
+
{
|
|
3583
|
+
title,
|
|
3584
|
+
tooltipText,
|
|
3585
|
+
hasInvalidCheckoutId,
|
|
3586
|
+
fetchingPaymentInfo,
|
|
3587
|
+
address,
|
|
3588
|
+
paymentDetails,
|
|
3589
|
+
screenText,
|
|
3590
|
+
supportedNetworks
|
|
3591
|
+
}
|
|
3592
|
+
),
|
|
3593
|
+
/* @__PURE__ */ import_react15.default.createElement(
|
|
3594
|
+
TerminalButtons,
|
|
3595
|
+
{
|
|
3596
|
+
address,
|
|
3597
|
+
showReceipt,
|
|
3598
|
+
isProcessing,
|
|
3599
|
+
paymentDetails,
|
|
3600
|
+
hasInvalidCheckoutId,
|
|
3601
|
+
onDisconnect: handleDisconnect,
|
|
3602
|
+
onClearReceipt: handleCloseReceipt,
|
|
3603
|
+
onPayment: handlePayment
|
|
3604
|
+
}
|
|
3605
|
+
),
|
|
3606
|
+
brandName && /* @__PURE__ */ import_react15.default.createElement("div", { className: "text-center mt-0 mb-0" }, /* @__PURE__ */ import_react15.default.createElement(
|
|
3607
|
+
"div",
|
|
3608
|
+
{
|
|
3609
|
+
className: "inline-block px-2 py-0.5 rounded text-[10px] font-mono font-bold tracking-[0.2em]",
|
|
3610
|
+
style: {
|
|
3611
|
+
backgroundColor: "#1a1a1a",
|
|
3612
|
+
color: "#9acd32",
|
|
3613
|
+
boxShadow: "inset 0 1px 3px rgba(0,0,0,0.8), 0 1px 0 rgba(255,255,255,0.1)",
|
|
3614
|
+
border: "1px solid rgba(0,0,0,0.5)",
|
|
3615
|
+
textShadow: "0 0 4px #9acd3280"
|
|
3616
|
+
}
|
|
3617
|
+
},
|
|
3618
|
+
brandName
|
|
3619
|
+
))
|
|
3620
|
+
)
|
|
3621
|
+
), /* @__PURE__ */ import_react15.default.createElement(AnimationStyles, null));
|
|
3622
|
+
}
|
|
2795
3623
|
// Annotate the CommonJS export names for ESM import in node:
|
|
2796
3624
|
0 && (module.exports = {
|
|
3625
|
+
AnimationStyles,
|
|
3626
|
+
Toast,
|
|
2797
3627
|
V402Checkout,
|
|
3628
|
+
V402CheckoutV2,
|
|
2798
3629
|
WalletConnect,
|
|
2799
3630
|
WalletSelectModal,
|
|
3631
|
+
checkoutAnimations,
|
|
2800
3632
|
usePageNetwork,
|
|
2801
3633
|
usePayment,
|
|
2802
3634
|
usePaymentInfo,
|
|
3635
|
+
useToast,
|
|
2803
3636
|
useWallet
|
|
2804
3637
|
});
|
|
2805
3638
|
//# sourceMappingURL=index.js.map
|