@stableops/wallet-ui 0.1.6 → 0.3.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.js CHANGED
@@ -23,19 +23,15 @@ __export(index_exports, {
23
23
  WALLET_LOGOS: () => WALLET_LOGOS,
24
24
  WalletConnectDialog: () => WalletConnectDialog,
25
25
  WalletIcon: () => WalletIcon,
26
+ createWalletConnectDialogCopy: () => createWalletConnectDialogCopy,
26
27
  walletConnectDialogClassNames: () => walletConnectDialogClassNames,
27
28
  walletLink: () => walletLink
28
29
  });
29
30
  module.exports = __toCommonJS(index_exports);
30
31
 
31
32
  // src/walletconnect-dialog.tsx
32
- var import_react = require("react");
33
- var import_react_dom = require("react-dom");
34
33
  var import_lucide_react = require("lucide-react");
35
34
 
36
- // src/walletconnect-dialog-css.ts
37
- var WALLETCONNECT_DIALOG_CSS = "/* \u8BED\u4E49\u8272 token\uFF1A\u4F18\u5148\u8BFB\u53D6 dashboard/shadcn \u7684 CSS \u53D8\u91CF\uFF1B\u672A\u63A5\u5165\u8FD9\u4E9B\u53D8\u91CF\u7684\u5BBF\u4E3B\u4F7F\u7528\n dashboard \u5F53\u524D light/dark \u9ED8\u8BA4\u503C\u4F5C\u4E3A fallback\u3002\u4E3B\u9898\u8272\u53EA\u6709 --stableops-wc-brand\n \u4E00\u4E2A\uFF0C\u53EF\u88AB themeColor prop \u5185\u8054\u8986\u76D6\u3002 */\n:root {\n --stableops-wc-backdrop: rgb(0 0 0 / 80%);\n --stableops-wc-surface: var(--background, oklch(1 0 0));\n --stableops-wc-text: var(--foreground, oklch(0.141 0.005 285.823));\n --stableops-wc-muted: var(--muted-foreground, oklch(0.552 0.016 285.938));\n --stableops-wc-border: var(--border, oklch(0.92 0.004 286.32));\n --stableops-wc-strong-border: var(--input, oklch(0.92 0.004 286.32));\n --stableops-wc-subtle: var(--muted, oklch(0.967 0.001 286.375));\n --stableops-wc-hover: var(--accent, #e8faf7);\n --stableops-wc-hover-text: var(--accent-foreground, #0f766e);\n --stableops-wc-shade: #000000;\n --stableops-wc-brand: var(--primary, #12233a);\n --stableops-wc-brand-text: var(--primary-foreground, oklch(0.985 0 0));\n --stableops-wc-copy-done-bg: var(--accent, #e8faf7);\n --stableops-wc-danger: var(--destructive, oklch(0.577 0.245 27.325));\n --stableops-wc-danger-text: var(--destructive-foreground, oklch(0.985 0 0));\n --stableops-wc-danger-border: color-mix(in oklab, var(--stableops-wc-danger) 25%, transparent);\n --stableops-wc-danger-bg: color-mix(\n in oklab,\n var(--stableops-wc-danger) 8%,\n var(--stableops-wc-surface)\n );\n}\n\n@media (prefers-color-scheme: dark) {\n :root {\n --stableops-wc-surface: var(--background, oklch(0.141 0.005 285.823));\n --stableops-wc-text: var(--foreground, oklch(0.985 0 0));\n --stableops-wc-muted: var(--muted-foreground, oklch(0.705 0.015 286.067));\n --stableops-wc-border: var(--border, oklch(1 0 0 / 10%));\n --stableops-wc-strong-border: var(--input, oklch(1 0 0 / 15%));\n --stableops-wc-subtle: var(--muted, oklch(0.274 0.006 286.033));\n --stableops-wc-hover: var(--accent, oklch(0.274 0.006 286.033));\n --stableops-wc-hover-text: var(--accent-foreground, oklch(0.985 0 0));\n --stableops-wc-shade: #ffffff;\n --stableops-wc-brand: var(--primary, oklch(0.92 0.004 286.32));\n --stableops-wc-brand-text: var(--primary-foreground, oklch(0.21 0.006 285.885));\n --stableops-wc-copy-done-bg: var(--accent, oklch(0.274 0.006 286.033));\n --stableops-wc-danger: var(--destructive, oklch(0.704 0.191 22.216));\n --stableops-wc-danger-text: var(--destructive-foreground, oklch(0.985 0 0));\n }\n}\n\n@keyframes stableops-walletconnect-backdrop-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes stableops-walletconnect-sheet-in {\n from {\n opacity: 0;\n transform: translateY(1.25rem);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@media (min-width: 640px) {\n @keyframes stableops-walletconnect-sheet-in {\n from {\n opacity: 0;\n transform: translateY(0.375rem) scale(0.98);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n }\n}\n\n.stableops-wc-backdrop {\n position: fixed;\n inset: 0;\n z-index: 50;\n display: flex;\n align-items: flex-end;\n justify-content: center;\n margin: 0;\n padding: 0;\n background: var(--stableops-wc-backdrop);\n animation: stableops-walletconnect-backdrop-in 160ms ease-out both;\n}\n\n.stableops-wc-sheet {\n position: relative;\n width: 100%;\n max-width: 28rem;\n max-height: min(90dvh, calc(100vh - 1rem));\n overflow: hidden;\n border: 1px solid var(--stableops-wc-border);\n border-radius: 1rem 1rem 0 0;\n padding-bottom: max(0.75rem, env(safe-area-inset-bottom));\n background: var(--stableops-wc-surface);\n color: var(--stableops-wc-text);\n box-shadow:\n 0 10px 15px -3px rgb(0 0 0 / 10%),\n 0 4px 6px -4px rgb(0 0 0 / 10%);\n animation: stableops-walletconnect-sheet-in 220ms cubic-bezier(0.2, 0, 0, 1) both;\n}\n\n.stableops-wc-sheet,\n.stableops-wc-sheet * {\n box-sizing: border-box;\n}\n\n.stableops-wc-sheet :where(button, a, p, img) {\n margin: 0;\n font: inherit;\n color: inherit;\n text-decoration: none;\n}\n\n.stableops-wc-sheet :where(img) {\n display: block;\n max-width: 100%;\n height: auto;\n}\n\n.stableops-wc-header {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1.5rem 1.5rem 0;\n}\n\n.stableops-wc-title {\n min-width: 0;\n flex: 1;\n overflow: hidden;\n text-align: center;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 0.875rem;\n font-weight: 600;\n}\n\n.stableops-wc-icon-button {\n position: absolute;\n display: flex;\n width: 2rem;\n height: 2rem;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n border: 0;\n border-radius: 0.375rem;\n background: transparent;\n color: var(--stableops-wc-muted);\n}\n\n.stableops-wc-icon-button:hover {\n background: var(--stableops-wc-hover);\n color: var(--stableops-wc-text);\n}\n\n.stableops-wc-back-button {\n left: 1.25rem;\n}\n\n.stableops-wc-close-button {\n right: 1.25rem;\n}\n\n.stableops-wc-icon,\n.stableops-wc-action-icon {\n width: 1rem;\n height: 1rem;\n}\n\n.stableops-wc-body {\n padding: 1.5rem;\n}\n\n.stableops-wc-qr-frame {\n position: relative;\n width: 100%;\n max-width: 12rem;\n aspect-ratio: 1 / 1;\n margin: 0 auto;\n border: 1px solid rgb(15 28 46 / 8%);\n border-radius: 1rem;\n padding: 1rem;\n background: #ffffff;\n overflow: hidden;\n}\n\n.stableops-wc-qr-image {\n width: 100%;\n height: 100%;\n object-fit: contain;\n}\n\n.stableops-wc-qr-placeholder {\n opacity: 0.9;\n}\n\n.stableops-wc-centered-overlay,\n.stableops-wc-loading-overlay {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.stableops-wc-loading-overlay {\n inset: 0.5rem;\n border-radius: 0.5rem;\n background: rgb(255 255 255 / 60%);\n backdrop-filter: blur(4px);\n}\n\n.stableops-wc-wallet-chip {\n border-radius: 0.75rem;\n padding: 0.25rem;\n background: #ffffff;\n box-shadow:\n 0 4px 6px -1px rgb(0 0 0 / 10%),\n 0 2px 4px -2px rgb(0 0 0 / 10%);\n outline: 1px solid rgb(0 0 0 / 5%);\n}\n\n.stableops-wc-refresh-button {\n display: inline-flex;\n min-width: 6.5rem;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n gap: 0.375rem;\n border: 1px solid rgb(0 0 0 / 8%);\n border-radius: 0.75rem;\n padding: 0.625rem 0.75rem;\n background: #ffffff;\n color: var(--stableops-wc-text);\n box-shadow:\n 0 4px 6px -1px rgb(0 0 0 / 10%),\n 0 2px 4px -2px rgb(0 0 0 / 10%);\n font-size: 0.8125rem;\n font-weight: 600;\n}\n\n.stableops-wc-refresh-button:hover {\n background: var(--stableops-wc-hover);\n}\n\n.stableops-wc-refresh-icon {\n width: 1rem;\n height: 1rem;\n color: var(--stableops-wc-brand);\n}\n\n.stableops-wc-wallet-logo,\n.stableops-wc-wallet-fallback {\n display: flex;\n width: 3rem;\n height: 3rem;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n border-radius: 0.5rem;\n box-shadow: 0 1px 2px 0 rgb(0 0 0 / 5%);\n outline: 1px solid rgb(0 0 0 / 5%);\n}\n\n.stableops-wc-wallet-logo {\n object-fit: cover;\n}\n\n.stableops-wc-wallet-chip .stableops-wc-wallet-logo,\n.stableops-wc-wallet-chip .stableops-wc-wallet-fallback {\n width: 2.25rem;\n height: 2.25rem;\n border-radius: 0.375rem;\n}\n\n.stableops-wc-wallet-fallback {\n color: #ffffff;\n font-size: 0.75rem;\n font-weight: 600;\n}\n\n.stableops-wc-empty-qr {\n display: flex;\n width: 100%;\n height: 100%;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n padding: 0 0.75rem;\n text-align: center;\n font-size: 0.75rem;\n color: var(--stableops-wc-muted);\n}\n\n.stableops-wc-spinner {\n width: 1.5rem;\n height: 1.5rem;\n animation: stableops-wc-spin 1s linear infinite;\n}\n\n@keyframes stableops-wc-spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n.stableops-wc-muted-spinner {\n color: #9ca3af;\n}\n\n.stableops-wc-error-icon {\n width: 1.75rem;\n height: 1.75rem;\n color: var(--stableops-wc-danger);\n}\n\n.stableops-wc-help-text {\n margin: 1.25rem 0 0;\n text-align: center;\n font-size: 0.875rem;\n font-weight: 500;\n}\n\n.stableops-wc-separator {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n margin: 1rem 0;\n font-size: 0.75rem;\n color: var(--stableops-wc-muted);\n}\n\n.stableops-wc-line {\n height: 1px;\n flex: 1;\n background: var(--stableops-wc-border);\n}\n\n.stableops-wc-spacer {\n height: 1rem;\n}\n\n.stableops-wc-actions {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.stableops-wc-primary-action,\n.stableops-wc-secondary-action {\n display: inline-flex;\n min-height: 2.5rem;\n flex: 1;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n border-radius: 0.5rem;\n padding: 0.5rem 1rem;\n text-align: center;\n font-size: 0.875rem;\n font-weight: 500;\n text-decoration: none;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.stableops-wc-primary-action {\n border: 1px solid transparent;\n background: var(--stableops-wc-brand);\n color: var(--stableops-wc-brand-text);\n box-shadow:\n 0 1px 3px 0 rgb(0 0 0 / 10%),\n 0 1px 2px -1px rgb(0 0 0 / 10%);\n}\n\n.stableops-wc-button-action {\n font: inherit;\n}\n\n.stableops-wc-primary-action:hover {\n background: color-mix(in srgb, var(--stableops-wc-brand) 82%, var(--stableops-wc-shade));\n}\n\n.stableops-wc-secondary-action {\n border: 1px solid var(--stableops-wc-strong-border);\n background: var(--stableops-wc-surface);\n color: var(--stableops-wc-text);\n}\n\n.stableops-wc-secondary-action:hover {\n background: var(--stableops-wc-hover);\n color: var(--stableops-wc-hover-text);\n}\n\n.stableops-wc-secondary-action:disabled,\n.stableops-wc-disabled-link {\n cursor: not-allowed;\n opacity: 0.5;\n pointer-events: none;\n}\n\n.stableops-wc-check-icon {\n color: color-mix(in srgb, var(--stableops-wc-brand) 82%, var(--stableops-wc-shade));\n}\n\n.stableops-wc-copy-done {\n border-color: color-mix(in srgb, var(--stableops-wc-brand) 35%, transparent);\n background: var(--stableops-wc-copy-done-bg);\n color: color-mix(in srgb, var(--stableops-wc-brand) 82%, var(--stableops-wc-shade));\n}\n\n.stableops-wc-wallet-grid {\n display: grid;\n grid-template-columns: repeat(3, minmax(0, 1fr));\n gap: 0.5rem 1rem;\n overflow-y: auto;\n padding: 1rem;\n}\n\n.stableops-wc-wallet-button {\n display: flex;\n cursor: pointer;\n flex-direction: column;\n align-items: center;\n gap: 0.5rem;\n border: 1px solid transparent;\n border-radius: 0.75rem;\n background: transparent;\n padding: 1rem 0.5rem;\n text-align: center;\n color: var(--stableops-wc-text);\n}\n\n.stableops-wc-wallet-button:hover {\n border-color: color-mix(in srgb, var(--stableops-wc-brand) 40%, transparent);\n background: var(--stableops-wc-hover);\n color: var(--stableops-wc-hover-text);\n}\n\n.stableops-wc-wallet-button:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n.stableops-wc-wallet-button span {\n width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 0.75rem;\n font-weight: 500;\n}\n\n.stableops-wc-error-box {\n margin: 0 1.25rem 1.25rem;\n border: 1px solid var(--stableops-wc-danger-border);\n border-radius: 0.5rem;\n background: var(--stableops-wc-danger-bg);\n padding: 0.625rem;\n text-align: center;\n font-size: 0.75rem;\n color: var(--stableops-wc-danger);\n}\n\n@media (min-width: 640px) {\n .stableops-wc-backdrop {\n align-items: center;\n padding: 1rem;\n }\n\n .stableops-wc-sheet {\n max-height: calc(100vh - 2rem);\n border-radius: 1rem;\n padding-bottom: 0;\n }\n\n .stableops-wc-actions {\n flex-direction: row;\n }\n}\n";
38
-
39
35
  // src/wallet-icon.tsx
40
36
  var import_jsx_runtime = require("react/jsx-runtime");
41
37
  function WalletIcon({ wallet }) {
@@ -53,6 +49,126 @@ function WalletIcon({ wallet }) {
53
49
  );
54
50
  }
55
51
 
52
+ // src/walletconnect-dialog-copy.ts
53
+ var copy = {
54
+ zh: {
55
+ heading: "\u7528\u624B\u673A\u94B1\u5305\u652F\u4ED8",
56
+ back: "\u8FD4\u56DE",
57
+ close: "\u5173\u95ED",
58
+ qrAlt: "\u652F\u4ED8\u4E8C\u7EF4\u7801",
59
+ payWith: "\u7528 {wallet} \u652F\u4ED8",
60
+ scanWithWallet: "\u7528\u624B\u673A\u4E0A\u7684 {wallet} \u626B\u7801",
61
+ scanAnyWallet: "\u7528\u4EFB\u610F\u624B\u673A\u94B1\u5305\u626B\u7801",
62
+ openWallet: "\u6253\u5F00 {wallet}",
63
+ paymentPrompt: "\u5DF2\u8FDE\u63A5 {wallet}\uFF0C\u8BF7\u5728\u94B1\u5305 App \u5185\u786E\u8BA4\u4EA4\u6613\uFF1B\u5982\u679C\u6CA1\u6709\u5F39\u51FA\u652F\u4ED8\u754C\u9762\uFF0C\u53EF\u518D\u6B21\u89E6\u53D1\u652F\u4ED8\u3002",
64
+ retryPayment: "\u518D\u6B21\u6253\u5F00 {wallet} \u652F\u4ED8",
65
+ retryingPayment: "\u6B63\u5728\u6253\u5F00\u652F\u4ED8\u2026",
66
+ refreshConnection: "\u5237\u65B0\u4E8C\u7EF4\u7801",
67
+ copyUri: "\u590D\u5236\u94FE\u63A5",
68
+ copied: "\u5DF2\u590D\u5236",
69
+ or: "\u6216",
70
+ connectFailed: "\u8FDE\u63A5\u5931\u8D25",
71
+ errors: {
72
+ dependencyMissing: "\u5F53\u524D\u73AF\u5883\u672A\u52A0\u8F7D WalletConnect \u4F9D\u8D56\uFF0C\u8BF7\u5237\u65B0\u540E\u91CD\u8BD5\u3002",
73
+ projectIdMissing: "\u672A\u914D\u7F6E WalletConnect projectId\uFF0C\u65E0\u6CD5\u6253\u5F00\u624B\u673A\u94B1\u5305\u652F\u4ED8\u3002",
74
+ initFailed: "WalletConnect \u521D\u59CB\u5316\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u540E\u91CD\u8BD5\u3002",
75
+ connectFailed: "WalletConnect \u8FDE\u63A5\u5931\u8D25\uFF0C\u8BF7\u8FD4\u56DE\u94B1\u5305\u5217\u8868\u540E\u91CD\u8BD5\u3002",
76
+ noAuthorizedChains: "\u94B1\u5305\u6CA1\u6709\u6388\u6743\u8BA2\u5355\u9700\u8981\u7684\u7F51\u7EDC\uFF0C\u8BF7\u8FD4\u56DE\u91CD\u8FDE\u5E76\u52FE\u9009\u5BF9\u5E94\u7F51\u7EDC\u3002",
77
+ tronUnsupported: "WalletConnect \u6682\u4E0D\u652F\u6301 TRON \u652F\u4ED8\uFF0C\u8BF7\u6539\u7528\u652F\u6301\u7684\u624B\u673A\u94B1\u5305 App \u6216\u624B\u52A8\u8F6C\u8D26\u3002",
78
+ providerMismatch: "\u94B1\u5305\u8FD4\u56DE\u7684\u7F51\u7EDC\u548C\u8BA2\u5355\u7F51\u7EDC\u4E0D\u4E00\u81F4\uFF0C\u8BF7\u5207\u6362\u5230\u6B63\u786E\u7F51\u7EDC\u540E\u91CD\u8BD5\u3002",
79
+ providerNotFound: "\u672A\u627E\u5230\u53EF\u7528\u4E8E\u672C\u8BA2\u5355\u7F51\u7EDC\u7684\u94B1\u5305\u6388\u6743\uFF0C\u8BF7\u8FD4\u56DE\u91CD\u8FDE\u5E76\u6388\u6743\u7F51\u7EDC\u3002",
80
+ txReverted: "\u94FE\u4E0A\u4EA4\u6613\u53D1\u751F\u56DE\u6EDA\uFF0C\u8BF7\u91CD\u65B0\u4ED8\u6B3E\u6216\u8054\u7CFB\u5546\u6237\u3002",
81
+ tokenContractNotFound: "\u5F53\u524D\u7F51\u7EDC\u7F3A\u5C11\u9ED8\u8BA4\u4EE3\u5E01\u5408\u7EA6\u914D\u7F6E\uFF0C\u8BF7\u68C0\u67E5\u6D4B\u8BD5\u7F51\u914D\u7F6E\u3002",
82
+ paymentInstructionNotFound: "\u5F53\u524D\u8BA2\u5355\u6CA1\u6709\u53EF\u7528\u7684\u94FE\u4E0A\u652F\u4ED8\u6307\u4EE4\u3002",
83
+ unsupportedChain: "\u94B1\u5305 SDK \u6682\u4E0D\u652F\u6301\u5F53\u524D\u652F\u4ED8\u7F51\u7EDC\u3002"
84
+ }
85
+ },
86
+ en: {
87
+ heading: "Pay with mobile wallet",
88
+ back: "Back",
89
+ close: "Close",
90
+ qrAlt: "Payment QR code",
91
+ payWith: "Pay with {wallet}",
92
+ scanWithWallet: "Scan with {wallet} on your phone",
93
+ scanAnyWallet: "Scan with any mobile wallet",
94
+ openWallet: "Open {wallet}",
95
+ paymentPrompt: "{wallet} is connected. Confirm the transaction in your wallet app; if no payment screen appears, trigger payment again.",
96
+ retryPayment: "Trigger {wallet} payment again",
97
+ retryingPayment: "Opening payment\u2026",
98
+ refreshConnection: "Refresh QR",
99
+ copyUri: "Copy link",
100
+ copied: "Copied",
101
+ or: "or",
102
+ connectFailed: "Connection failed",
103
+ errors: {
104
+ dependencyMissing: "WalletConnect is not loaded in this environment. Refresh the page and try again.",
105
+ projectIdMissing: "WalletConnect projectId is not configured, so mobile wallet pay cannot open.",
106
+ initFailed: "WalletConnect failed to initialize. Check your connection and retry.",
107
+ connectFailed: "WalletConnect failed to connect. Go back to the wallet list and retry.",
108
+ noAuthorizedChains: "Your wallet did not authorize the required networks. Reconnect and select the requested network.",
109
+ tronUnsupported: "WalletConnect does not support TRON payments yet. Use a supported mobile wallet app or manual transfer.",
110
+ providerMismatch: "The wallet returned a different network than the order requires. Switch networks and retry.",
111
+ providerNotFound: "No wallet authorization was found for this order network. Go back, reconnect, and authorize it.",
112
+ txReverted: "The on-chain transaction was reverted. Pay again or contact the merchant.",
113
+ tokenContractNotFound: "The default token contract is not configured for this network. Check the testnet config.",
114
+ paymentInstructionNotFound: "This order does not have an available on-chain payment instruction.",
115
+ unsupportedChain: "The wallet SDK does not support this payment network."
116
+ }
117
+ }
118
+ };
119
+ function createWalletConnectDialogCopy(locale, copiedLabel) {
120
+ const t = copy[locale];
121
+ const errors = t.errors;
122
+ return {
123
+ heading: t.heading,
124
+ back: t.back,
125
+ close: t.close,
126
+ qrAlt: t.qrAlt,
127
+ payWith: (wallet) => t.payWith.replace("{wallet}", wallet),
128
+ scanWithWallet: (wallet) => t.scanWithWallet.replace("{wallet}", wallet),
129
+ scanAnyWallet: t.scanAnyWallet,
130
+ openWallet: (wallet) => t.openWallet.replace("{wallet}", wallet),
131
+ paymentPrompt: (wallet) => t.paymentPrompt.replace("{wallet}", wallet),
132
+ retryPayment: (wallet) => t.retryPayment.replace("{wallet}", wallet),
133
+ retryingPayment: t.retryingPayment,
134
+ refreshConnection: t.refreshConnection,
135
+ copyUri: t.copyUri,
136
+ copied: copiedLabel ?? t.copied,
137
+ or: t.or,
138
+ connectFailed: t.connectFailed,
139
+ errorMessage: (code) => {
140
+ switch (code) {
141
+ case "walletconnect_dependency_missing":
142
+ return errors.dependencyMissing;
143
+ case "walletconnect_project_id_missing":
144
+ return errors.projectIdMissing;
145
+ case "walletconnect_init_failed":
146
+ return errors.initFailed;
147
+ case "walletconnect_connect_failed":
148
+ return errors.connectFailed;
149
+ case "walletconnect_no_authorized_chains":
150
+ return errors.noAuthorizedChains;
151
+ case "walletconnect_tron_unsupported":
152
+ return errors.tronUnsupported;
153
+ case "wallet_provider_mismatch":
154
+ return errors.providerMismatch;
155
+ case "wallet_provider_not_found":
156
+ return errors.providerNotFound;
157
+ case "wallet_tx_reverted":
158
+ return errors.txReverted;
159
+ case "token_contract_not_found":
160
+ return errors.tokenContractNotFound;
161
+ case "payment_instruction_not_found":
162
+ return errors.paymentInstructionNotFound;
163
+ case "unsupported_chain":
164
+ return errors.unsupportedChain;
165
+ default:
166
+ return null;
167
+ }
168
+ }
169
+ };
170
+ }
171
+
56
172
  // src/walletconnect-dialog.tsx
57
173
  var import_jsx_runtime2 = require("react/jsx-runtime");
58
174
  var PLACEHOLDER_QR_CODE = "data:image/png;base64,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";
@@ -64,37 +180,15 @@ var walletConnectDialogClassNames = {
64
180
  function walletLink(prefix, uri) {
65
181
  return `${prefix}${encodeURIComponent(uri)}`;
66
182
  }
67
- function formatWalletConnectDialogError(error, copy) {
183
+ function formatWalletConnectDialogError(error, copy2) {
68
184
  if (typeof error === "string") return error;
69
- if (error.code) return copy.errorMessage(error.code) ?? error.message;
185
+ if (error.code) return copy2.errorMessage(error.code) ?? error.message;
70
186
  return error.message;
71
187
  }
72
188
  function WalletConnectDialog({
73
- useShadowRoot = false,
74
- ...props
75
- }) {
76
- if (useShadowRoot) return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(ShadowRootWalletConnectDialog, { ...props });
77
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(WalletConnectDialogContent, { ...props });
78
- }
79
- function ShadowRootWalletConnectDialog(props) {
80
- const hostRef = (0, import_react.useRef)(null);
81
- const [shadowRoot, setShadowRoot] = (0, import_react.useState)(null);
82
- (0, import_react.useEffect)(() => {
83
- const host = hostRef.current;
84
- if (!host) return;
85
- setShadowRoot(host.shadowRoot ?? host.attachShadow({ mode: "open" }));
86
- }, []);
87
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { ref: hostRef, children: shadowRoot ? (0, import_react_dom.createPortal)(
88
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
89
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("style", { children: WALLETCONNECT_DIALOG_CSS }),
90
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(WalletConnectDialogContent, { ...props })
91
- ] }),
92
- shadowRoot
93
- ) : null });
94
- }
95
- function WalletConnectDialogContent({
96
189
  open,
97
- copy,
190
+ copy: copyProp,
191
+ locale = "en",
98
192
  projectId,
99
193
  available,
100
194
  wallets,
@@ -116,6 +210,7 @@ function WalletConnectDialogContent({
116
210
  onCopyUri
117
211
  }) {
118
212
  if (!open) return null;
213
+ const copy2 = copyProp ?? createWalletConnectDialogCopy(locale);
119
214
  const appLink = selectedWallet?.links?.native ?? selectedWallet?.links?.universal ?? null;
120
215
  const appLinkIsUniversal = !selectedWallet?.links?.native && Boolean(selectedWallet?.links?.universal);
121
216
  const readyUri = state.status === "uri_ready" ? state.uri : null;
@@ -127,7 +222,7 @@ function WalletConnectDialogContent({
127
222
  const disabledList = !walletLinkMode && !projectId || !available;
128
223
  const renderIcon = renderWalletIcon ?? ((wallet) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(WalletIcon, { wallet }));
129
224
  const themeStyle = themeColor ? { "--stableops-wc-brand": themeColor } : void 0;
130
- const visibleError = error !== null ? formatWalletConnectDialogError(error, copy) : state.status === "failed" ? formatWalletConnectDialogError(state.error, copy) : null;
225
+ const visibleError = error !== null ? formatWalletConnectDialogError(error, copy2) : state.status === "failed" ? formatWalletConnectDialogError(state.error, copy2) : null;
131
226
  return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: walletConnectDialogClassNames.backdrop, style: themeStyle, onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
132
227
  "div",
133
228
  {
@@ -142,19 +237,19 @@ function WalletConnectDialogContent({
142
237
  "button",
143
238
  {
144
239
  type: "button",
145
- "aria-label": copy.back,
240
+ "aria-label": copy2.back,
146
241
  onClick: onBack,
147
242
  className: "stableops-wc-icon-button stableops-wc-back-button",
148
243
  children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_lucide_react.ArrowLeft, { className: "stableops-wc-icon" })
149
244
  }
150
245
  ),
151
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "stableops-wc-title", children: copy.payWith(selectedWallet.name) })
152
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "stableops-wc-title", children: copy.heading }),
246
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "stableops-wc-title", children: copy2.payWith(selectedWallet.name) })
247
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "stableops-wc-title", children: copy2.heading }),
153
248
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
154
249
  "button",
155
250
  {
156
251
  type: "button",
157
- "aria-label": copy.close,
252
+ "aria-label": copy2.close,
158
253
  onClick: onClose,
159
254
  className: "stableops-wc-icon-button stableops-wc-close-button",
160
255
  children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_lucide_react.X, { className: "stableops-wc-icon" })
@@ -163,7 +258,7 @@ function WalletConnectDialogContent({
163
258
  ] }),
164
259
  selectedWallet ? /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "stableops-wc-body", children: [
165
260
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: walletConnectDialogClassNames.qrFrame, children: visibleQrCode ? /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
166
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("img", { src: visibleQrCode, alt: copy.qrAlt, className: "stableops-wc-qr-image" }),
261
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("img", { src: visibleQrCode, alt: copy2.qrAlt, className: "stableops-wc-qr-image" }),
167
262
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "stableops-wc-centered-overlay", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "stableops-wc-wallet-chip", children: renderIcon(selectedWallet) }) })
168
263
  ] }) : qrLoading ? /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
169
264
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
@@ -197,16 +292,16 @@ function WalletConnectDialogContent({
197
292
  },
198
293
  children: [
199
294
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_lucide_react.RotateCw, { className: "stableops-wc-refresh-icon" }),
200
- copy.refreshConnection
295
+ copy2.refreshConnection
201
296
  ]
202
297
  }
203
298
  ) : /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "stableops-wc-wallet-chip", children: renderIcon(selectedWallet) }) }),
204
299
  state.status === "failed" && !showRefreshControl ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "stableops-wc-loading-overlay", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_lucide_react.CircleAlert, { className: "stableops-wc-error-icon", "aria-hidden": "true" }) }) : null
205
300
  ] }) }),
206
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { className: "stableops-wc-help-text", children: paymentReady ? copy.paymentPrompt(selectedWallet.name) : walletLinkMode || selectedWallet.links ? copy.scanWithWallet(selectedWallet.name) : copy.scanAnyWallet }),
301
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { className: "stableops-wc-help-text", children: paymentReady ? copy2.paymentPrompt(selectedWallet.name) : walletLinkMode || selectedWallet.links ? copy2.scanWithWallet(selectedWallet.name) : copy2.scanAnyWallet }),
207
302
  walletLinkMode || appLink ? /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "stableops-wc-separator", children: [
208
303
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "stableops-wc-line" }),
209
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { children: copy.or }),
304
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { children: copy2.or }),
210
305
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "stableops-wc-line" })
211
306
  ] }) : /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "stableops-wc-spacer" }),
212
307
  /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "stableops-wc-actions", children: [
@@ -220,7 +315,7 @@ function WalletConnectDialogContent({
220
315
  },
221
316
  children: [
222
317
  paymentPending ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_lucide_react.Loader2, { className: "stableops-wc-action-icon stableops-wc-spinner" }) : /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_lucide_react.ExternalLink, { className: "stableops-wc-action-icon" }),
223
- paymentPending ? copy.retryingPayment : copy.retryPayment(selectedWallet.name)
318
+ paymentPending ? copy2.retryingPayment : copy2.retryPayment(selectedWallet.name)
224
319
  ]
225
320
  }
226
321
  ) : null,
@@ -233,7 +328,7 @@ function WalletConnectDialogContent({
233
328
  ...(walletLinkMode || appLinkIsUniversal) && walletHref ? { target: "_blank", rel: "noreferrer" } : {},
234
329
  children: [
235
330
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_lucide_react.ExternalLink, { className: "stableops-wc-action-icon" }),
236
- copy.openWallet(selectedWallet.name)
331
+ copy2.openWallet(selectedWallet.name)
237
332
  ]
238
333
  }
239
334
  ) : null,
@@ -254,10 +349,10 @@ function WalletConnectDialogContent({
254
349
  strokeWidth: 3
255
350
  }
256
351
  ),
257
- copy.copied
352
+ copy2.copied
258
353
  ] }) : /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
259
354
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_lucide_react.Copy, { className: "stableops-wc-action-icon" }),
260
- copy.copyUri
355
+ copy2.copyUri
261
356
  ] })
262
357
  }
263
358
  )
@@ -301,6 +396,7 @@ var WALLET_LOGOS = {
301
396
  WALLET_LOGOS,
302
397
  WalletConnectDialog,
303
398
  WalletIcon,
399
+ createWalletConnectDialogCopy,
304
400
  walletConnectDialogClassNames,
305
401
  walletLink
306
402
  });