@algobright/solana-connector 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{Button.module-HQNNX6IB.module.css → Button.module-QCTUNBHA.module.css} +1 -0
- package/dist/ConnectButton.d.mts +24 -0
- package/dist/ConnectButton.d.ts +24 -0
- package/dist/ConnectButton.js +68 -72
- package/dist/ConnectButton.js.map +1 -1
- package/dist/ConnectButton.mjs +43 -47
- package/dist/ConnectButton.mjs.map +1 -1
- package/dist/{ConnectButton.module-O3M32YJK.module.css → ConnectButton.module-AR6WQXQS.module.css} +0 -3
- package/dist/WalletDropdown.d.mts +20 -5
- package/dist/WalletDropdown.d.ts +20 -5
- package/dist/WalletDropdown.js +31 -28
- package/dist/WalletDropdown.js.map +1 -1
- package/dist/WalletDropdown.mjs +19 -16
- package/dist/WalletDropdown.mjs.map +1 -1
- package/dist/WalletModal.d.mts +13 -2
- package/dist/WalletModal.d.ts +13 -2
- package/dist/WalletModal.js +28 -30
- package/dist/WalletModal.js.map +1 -1
- package/dist/WalletModal.mjs +15 -17
- package/dist/WalletModal.mjs.map +1 -1
- package/package.json +6 -1
package/dist/WalletModal.js
CHANGED
|
@@ -38,21 +38,21 @@ module.exports = __toCommonJS(WalletModal_exports);
|
|
|
38
38
|
// src/components/WalletModal/WalletModal.tsx
|
|
39
39
|
var import_connector = require("@solana/connector");
|
|
40
40
|
var import_lucide_react3 = require("lucide-react");
|
|
41
|
-
var
|
|
41
|
+
var import_react6 = require("react");
|
|
42
42
|
var import_WalletModal = __toESM(require("./WalletModal.module-ZRTJGOQY.module.css"));
|
|
43
43
|
|
|
44
44
|
// src/components/shared/Dialog/Dialog.tsx
|
|
45
|
-
var React = __toESM(require("react"));
|
|
46
45
|
var import_dialog = require("@base-ui/react/dialog");
|
|
47
46
|
var import_lucide_react = require("lucide-react");
|
|
48
47
|
var import_Dialog = __toESM(require("./Dialog.module-AYJTMDAD.module.css"));
|
|
49
48
|
var import_clsx = __toESM(require("clsx"));
|
|
49
|
+
var import_react = require("react");
|
|
50
50
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
51
51
|
var Dialog = import_dialog.Dialog.Root;
|
|
52
52
|
var DialogTrigger = import_dialog.Dialog.Trigger;
|
|
53
53
|
var DialogPortal = import_dialog.Dialog.Portal;
|
|
54
54
|
var DialogClose = import_dialog.Dialog.Close;
|
|
55
|
-
var DialogBackdrop =
|
|
55
|
+
var DialogBackdrop = (0, import_react.forwardRef)(
|
|
56
56
|
({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
57
57
|
import_dialog.Dialog.Backdrop,
|
|
58
58
|
{
|
|
@@ -63,7 +63,7 @@ var DialogBackdrop = React.forwardRef(
|
|
|
63
63
|
)
|
|
64
64
|
);
|
|
65
65
|
DialogBackdrop.displayName = "DialogBackdrop";
|
|
66
|
-
var DialogContent =
|
|
66
|
+
var DialogContent = (0, import_react.forwardRef)(
|
|
67
67
|
({ className, children, theme, showCloseButton = true, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(DialogPortal, { children: [
|
|
68
68
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(DialogBackdrop, { "data-theme": theme }),
|
|
69
69
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
@@ -86,7 +86,7 @@ var DialogHeader = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_r
|
|
|
86
86
|
DialogHeader.displayName = "DialogHeader";
|
|
87
87
|
var DialogFooter = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: `${import_Dialog.default.footer} ${className || ""}`, ...props });
|
|
88
88
|
DialogFooter.displayName = "DialogFooter";
|
|
89
|
-
var DialogTitle =
|
|
89
|
+
var DialogTitle = (0, import_react.forwardRef)(
|
|
90
90
|
({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
91
91
|
import_dialog.Dialog.Title,
|
|
92
92
|
{
|
|
@@ -97,7 +97,7 @@ var DialogTitle = React.forwardRef(
|
|
|
97
97
|
)
|
|
98
98
|
);
|
|
99
99
|
DialogTitle.displayName = "DialogTitle";
|
|
100
|
-
var DialogDescription =
|
|
100
|
+
var DialogDescription = (0, import_react.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
101
101
|
import_dialog.Dialog.Description,
|
|
102
102
|
{
|
|
103
103
|
ref,
|
|
@@ -108,11 +108,11 @@ var DialogDescription = React.forwardRef(({ className, ...props }, ref) => /* @_
|
|
|
108
108
|
DialogDescription.displayName = "DialogDescription";
|
|
109
109
|
|
|
110
110
|
// src/components/shared/Button/Button.tsx
|
|
111
|
-
var
|
|
111
|
+
var import_react2 = require("react");
|
|
112
112
|
var import_button = require("@base-ui/react/button");
|
|
113
|
-
var import_Button = __toESM(require("./Button.module-
|
|
113
|
+
var import_Button = __toESM(require("./Button.module-QCTUNBHA.module.css"));
|
|
114
114
|
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
115
|
-
var Button =
|
|
115
|
+
var Button = (0, import_react2.forwardRef)(
|
|
116
116
|
({ className, variant = "default", size = "default", ...props }, ref) => {
|
|
117
117
|
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
118
118
|
import_button.Button,
|
|
@@ -133,7 +133,7 @@ var Button_default = Button;
|
|
|
133
133
|
var Button_default2 = Button_default;
|
|
134
134
|
|
|
135
135
|
// src/components/shared/CustomQRCode/CustomQRCode.tsx
|
|
136
|
-
var
|
|
136
|
+
var import_react3 = require("react");
|
|
137
137
|
var import_qrcode = __toESM(require("qrcode"));
|
|
138
138
|
var import_CustomQRCode = __toESM(require("./CustomQRCode.module-JW3JU3FX.module.css"));
|
|
139
139
|
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
@@ -155,7 +155,7 @@ function QRCodeSVG({
|
|
|
155
155
|
}) {
|
|
156
156
|
const logoSize = clearArea ? 76 : 0;
|
|
157
157
|
const size = sizeProp - 10 * 2;
|
|
158
|
-
const dots = (0,
|
|
158
|
+
const dots = (0, import_react3.useMemo)(() => {
|
|
159
159
|
const dots2 = [];
|
|
160
160
|
const matrix = generateMatrix(value, ecl);
|
|
161
161
|
const cellSize = size / matrix.length;
|
|
@@ -397,12 +397,12 @@ var Spinner_default2 = Spinner_default;
|
|
|
397
397
|
var import_si = require("react-icons/si");
|
|
398
398
|
|
|
399
399
|
// src/components/shared/Collapsible/Collapsible.tsx
|
|
400
|
-
var React3 = __toESM(require("react"));
|
|
401
400
|
var import_collapsible = require("@base-ui/react/collapsible");
|
|
402
401
|
var import_Collapsible = __toESM(require("./Collapsible.module-F4VIL5FH.module.css"));
|
|
402
|
+
var import_react4 = require("react");
|
|
403
403
|
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
404
404
|
var Collapsible = import_collapsible.Collapsible.Root;
|
|
405
|
-
var CollapsibleTrigger =
|
|
405
|
+
var CollapsibleTrigger = (0, import_react4.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
406
406
|
import_collapsible.Collapsible.Trigger,
|
|
407
407
|
{
|
|
408
408
|
ref,
|
|
@@ -411,7 +411,7 @@ var CollapsibleTrigger = React3.forwardRef(({ className, ...props }, ref) => /*
|
|
|
411
411
|
}
|
|
412
412
|
));
|
|
413
413
|
CollapsibleTrigger.displayName = "CollapsibleTrigger";
|
|
414
|
-
var CollapsibleContent =
|
|
414
|
+
var CollapsibleContent = (0, import_react4.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
415
415
|
import_collapsible.Collapsible.Panel,
|
|
416
416
|
{
|
|
417
417
|
ref,
|
|
@@ -422,7 +422,7 @@ var CollapsibleContent = React3.forwardRef(({ className, ...props }, ref) => /*
|
|
|
422
422
|
CollapsibleContent.displayName = "CollapsibleContent";
|
|
423
423
|
|
|
424
424
|
// src/components/shared/Avatar/Avatar.tsx
|
|
425
|
-
var
|
|
425
|
+
var import_react5 = require("react");
|
|
426
426
|
var import_Avatar = __toESM(require("./Avatar.module-AACAT34D.module.css"));
|
|
427
427
|
var import_lucide_react2 = require("lucide-react");
|
|
428
428
|
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
@@ -433,7 +433,7 @@ function Avatar({
|
|
|
433
433
|
alt,
|
|
434
434
|
theme = "light"
|
|
435
435
|
}) {
|
|
436
|
-
const [hasError, setHasError] = (0,
|
|
436
|
+
const [hasError, setHasError] = (0, import_react5.useState)(false);
|
|
437
437
|
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: import_Avatar.default.avatar, "data-theme": theme, children: src && !hasError ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
438
438
|
"img",
|
|
439
439
|
{
|
|
@@ -458,29 +458,27 @@ function WalletModal(props) {
|
|
|
458
458
|
CN_Modal,
|
|
459
459
|
theme = "light",
|
|
460
460
|
open,
|
|
461
|
-
onOpenChange
|
|
462
|
-
walletConnectUri,
|
|
463
|
-
onClearWalletConnectUri
|
|
461
|
+
onOpenChange
|
|
464
462
|
} = props;
|
|
465
|
-
const { walletStatus: { status }, isConnecting, connectorId, connectors, connectWallet, disconnectWallet } = (0, import_connector.useConnector)();
|
|
466
|
-
const [connectingConnectorId, setConnectingConnectorId] = (0,
|
|
467
|
-
const [isOtherWalletsOpen, setIsOtherWalletsOpen] = (0,
|
|
468
|
-
const [errorConnectorId, setErrorConnectorId] = (0,
|
|
469
|
-
const [errorMessage, setErrorMessage] = (0,
|
|
470
|
-
const [copied, setCopied] = (0,
|
|
471
|
-
const isClient = (0,
|
|
463
|
+
const { walletConnectUri, clearWalletConnectUri, walletStatus: { status }, isConnecting, connectorId, connectors, connectWallet, disconnectWallet } = (0, import_connector.useConnector)();
|
|
464
|
+
const [connectingConnectorId, setConnectingConnectorId] = (0, import_react6.useState)(null);
|
|
465
|
+
const [isOtherWalletsOpen, setIsOtherWalletsOpen] = (0, import_react6.useState)(false);
|
|
466
|
+
const [errorConnectorId, setErrorConnectorId] = (0, import_react6.useState)(null);
|
|
467
|
+
const [errorMessage, setErrorMessage] = (0, import_react6.useState)(null);
|
|
468
|
+
const [copied, setCopied] = (0, import_react6.useState)(false);
|
|
469
|
+
const isClient = (0, import_react6.useSyncExternalStore)(
|
|
472
470
|
() => () => {
|
|
473
471
|
},
|
|
474
472
|
() => true,
|
|
475
473
|
() => false
|
|
476
474
|
);
|
|
477
|
-
const recentlyConnectedConnectorId = (0,
|
|
475
|
+
const recentlyConnectedConnectorId = (0, import_react6.useSyncExternalStore)(
|
|
478
476
|
() => () => {
|
|
479
477
|
},
|
|
480
478
|
() => localStorage.getItem("recentlyConnectedConnectorId"),
|
|
481
479
|
() => null
|
|
482
480
|
);
|
|
483
|
-
(0,
|
|
481
|
+
(0, import_react6.useEffect)(() => {
|
|
484
482
|
if (status === "connected" && connectorId) {
|
|
485
483
|
localStorage.setItem("recentlyConnectedConnectorId", connectorId);
|
|
486
484
|
}
|
|
@@ -488,7 +486,7 @@ function WalletModal(props) {
|
|
|
488
486
|
const walletConnectConnector = (_a = connectors.find((c) => c.name === "WalletConnect")) != null ? _a : null;
|
|
489
487
|
const isWalletConnectFlow = !!walletConnectConnector && (connectingConnectorId === walletConnectConnector.id || status === "connecting" && connectorId === walletConnectConnector.id) || !!walletConnectUri;
|
|
490
488
|
function cancelConnection() {
|
|
491
|
-
|
|
489
|
+
clearWalletConnectUri == null ? void 0 : clearWalletConnectUri();
|
|
492
490
|
setConnectingConnectorId(null);
|
|
493
491
|
disconnectWallet().catch(() => {
|
|
494
492
|
});
|
|
@@ -502,7 +500,7 @@ function WalletModal(props) {
|
|
|
502
500
|
setConnectingConnectorId(connector.id);
|
|
503
501
|
try {
|
|
504
502
|
if (connector.name === "WalletConnect") {
|
|
505
|
-
|
|
503
|
+
clearWalletConnectUri == null ? void 0 : clearWalletConnectUri();
|
|
506
504
|
}
|
|
507
505
|
await connectWallet(connector.id);
|
|
508
506
|
localStorage.setItem("recentlyConnectedConnectorId", connector.id);
|
package/dist/WalletModal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/WalletModal/index.ts","../src/components/WalletModal/WalletModal.tsx","../src/components/shared/Dialog/Dialog.tsx","../src/components/shared/Button/Button.tsx","../src/components/shared/Button/index.ts","../src/components/shared/CustomQRCode/CustomQRCode.tsx","../src/components/shared/CustomQRCode/index.ts","../src/components/shared/Spinner/Spinner.tsx","../src/components/shared/Spinner/index.ts","../src/components/shared/Collapsible/Collapsible.tsx","../src/components/shared/Avatar/Avatar.tsx","../src/components/shared/Avatar/index.ts"],"sourcesContent":["import WalletModal from \"./WalletModal\"\nexport default WalletModal;","import { useConnector, WalletConnectorId, WalletConnectorMetadata } from \"@solana/connector\";\nimport { Check, ChevronLeft, Copy, ExternalLink, Wallet, X } from \"lucide-react\";\nimport { useEffect, useState, useSyncExternalStore } from \"react\";\nimport styles from './WalletModal.module.css';\nimport { Dialog, DialogClose, DialogContent, DialogTitle } from \"@shared/Dialog\";\nimport Button from \"@shared/Button\";\nimport CustomQRCode from \"@shared//CustomQRCode\";\nimport Spinner from \"@shared/Spinner\";\nimport { SiWalletconnect } from \"react-icons/si\";\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from \"@shared/Collapsible\";\nimport Avatar from \"@shared/Avatar\";\nimport { clsx } from \"clsx\";\n\ntype WalletModalProps = {\n CN_Modal?: string;\n theme?: 'light' | 'dark';\n open: boolean;\n onOpenChange: (open: boolean) => void;\n walletConnectUri: string | null;\n onClearWalletConnectUri: () => void;\n}\n\nexport function WalletModal(props: WalletModalProps) {\n const {\n CN_Modal,\n theme = 'light',\n open,\n onOpenChange,\n walletConnectUri,\n onClearWalletConnectUri\n } = props;\n\n const { walletStatus: { status }, isConnecting, connectorId, connectors, connectWallet, disconnectWallet } = useConnector();\n\n const [connectingConnectorId, setConnectingConnectorId] = useState<WalletConnectorId | null>(null);\n const [isOtherWalletsOpen, setIsOtherWalletsOpen] = useState(false);\n const [errorConnectorId, setErrorConnectorId] = useState<WalletConnectorId | null>(null);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n const [copied, setCopied] = useState(false);\n\n const isClient = useSyncExternalStore(\n () => () => { },\n () => true,\n () => false,\n );\n\n const recentlyConnectedConnectorId = useSyncExternalStore(\n () => () => { },\n () => localStorage.getItem('recentlyConnectedConnectorId') as WalletConnectorId | null,\n () => null\n );\n\n useEffect(() => {\n if (status === 'connected' && connectorId) {\n localStorage.setItem('recentlyConnectedConnectorId', connectorId);\n }\n }, [status, connectorId]);\n\n const walletConnectConnector = connectors.find(c => c.name === 'WalletConnect') ?? null;\n const isWalletConnectFlow =\n (!!walletConnectConnector &&\n (connectingConnectorId === walletConnectConnector.id ||\n (status === 'connecting' && connectorId === walletConnectConnector.id))) ||\n !!walletConnectUri;\n\n function cancelConnection() {\n onClearWalletConnectUri?.();\n setConnectingConnectorId(null);\n disconnectWallet().catch(() => { });\n }\n\n // Clear error state when modal closes or user tries another wallet\n const clearError = () => {\n setErrorConnectorId(null);\n setErrorMessage(null);\n };\n\n const handleSelectWallet = async (connector: WalletConnectorMetadata) => {\n clearError();\n setConnectingConnectorId(connector.id);\n try {\n if (connector.name === 'WalletConnect') {\n onClearWalletConnectUri?.();\n }\n await connectWallet(connector.id);\n localStorage.setItem('recentlyConnectedConnectorId', connector.id);\n // Don't close modal for WalletConnect - wait for connection\n if (connector.name !== 'WalletConnect') {\n onOpenChange(false);\n }\n } catch (error) {\n // Extract user-friendly error message\n const message = error instanceof Error ? error.message : 'An unexpected error occurred';\n if (message.includes('Connection cancelled')) return;\n\n // Set error state for UI feedback\n setErrorConnectorId(connector.id);\n setErrorMessage(message);\n\n // Log for telemetry/debugging (includes full error details)\n console.error('Failed to connect wallet:', {\n wallet: connector.name,\n connectorId: connector.id,\n error,\n message,\n timestamp: new Date().toISOString(),\n });\n } finally {\n setConnectingConnectorId(null);\n }\n };\n\n const handleCopyUri = async () => {\n if (!walletConnectUri) return;\n try {\n await navigator.clipboard.writeText(walletConnectUri);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error('Failed to copy URI:', err);\n }\n };\n\n const handleBackFromWalletConnect = () => {\n cancelConnection();\n };\n\n const readyConnectors = connectors.filter(c => c.ready);\n const notReadyConnectors = connectors.filter(c => !c.ready);\n\n const sortedReadyConnectors = [...readyConnectors].sort((a, b) => {\n const aIsRecent = recentlyConnectedConnectorId === a.id;\n const bIsRecent = recentlyConnectedConnectorId === b.id;\n if (aIsRecent && !bIsRecent) return -1;\n if (!aIsRecent && bIsRecent) return 1;\n return 0;\n });\n\n const primaryWallets = sortedReadyConnectors.slice(0, 3);\n const otherWallets = sortedReadyConnectors.slice(3);\n\n const primayOuterHr = otherWallets.length > 0 && primaryWallets.length > 0;\n\n const getInstallUrl = (walletName: string, walletUrl?: string): string | undefined => {\n if (walletUrl) return walletUrl;\n\n const name = walletName.toLowerCase();\n if (name.includes('phantom')) return 'https://phantom.app';\n if (name.includes('solflare')) return 'https://solflare.com';\n if (name.includes('backpack')) return 'https://backpack.app';\n if (name.includes('glow')) return 'https://glow.app';\n if (name.includes('coinbase')) return 'https://www.coinbase.com/wallet';\n if (name.includes('ledger')) return 'https://www.ledger.com';\n if (name.includes('trust')) return 'https://trustwallet.com';\n if (name.includes('exodus')) return 'https://www.exodus.com';\n return undefined;\n };\n\n const handleOpenChange = (isOpen: boolean) => {\n if (!isOpen) {\n clearError();\n if (isConnecting || connectingConnectorId || walletConnectUri) {\n cancelConnection();\n }\n }\n onOpenChange(isOpen);\n };\n\n const walletLinkOpen = (walletName: string) => {\n const installUrl = getInstallUrl(walletName);\n if (installUrl) {\n window.open(installUrl, '_blank');\n }\n }\n\n return (\n <Dialog open={open} onOpenChange={handleOpenChange} >\n <DialogContent\n showCloseButton={false}\n className={clsx(styles.dialogContent, CN_Modal)}\n theme={theme}\n >\n {/* Header */}\n <div className={styles.dialogHeader}>\n {isWalletConnectFlow ? (\n <button\n onClick={handleBackFromWalletConnect}\n className={styles.iconButton}\n >\n <ChevronLeft />\n </button>\n ) : null}\n <DialogTitle className={styles.dialogTitle}>\n {isWalletConnectFlow ? 'WalletConnect' : 'Connect your wallet'}\n </DialogTitle>\n <DialogClose className={styles.iconButton}>\n <X />\n </DialogClose>\n </div>\n\n {/* WalletConnect QR Code Display */}\n {isWalletConnectFlow && (\n <div className={styles.walletsContainer}>\n <div className={styles.tooltipBubble}>\n <span>Use a WalletConnect</span>\n <div className={styles.tooltipIconWrapper}>\n <SiWalletconnect className={styles.tooltipIcon} />\n <div className={styles.tooltipCaret} />\n </div>\n <span>supported wallet to scan</span>\n </div>\n\n {/* QR Code */}\n <div className={styles.qrWrapper}>\n <CustomQRCode\n value={walletConnectUri ?? ''}\n size={280}\n ecl=\"M\"\n loading={!walletConnectUri}\n scanning={!!walletConnectUri}\n />\n </div>\n\n {/* Copy URI button */}\n <Button\n variant=\"outline\"\n onClick={handleCopyUri}\n disabled={!walletConnectUri}\n className={styles.copyButton}\n data-theme={theme}\n >\n {copied ? (\n <>\n <Check className={`${styles.icon} ${styles.successIcon}`} />\n Copy to Clipboard\n </>\n ) : (\n <>\n <Copy className={styles.icon} />\n Copy to Clipboard\n </>\n )}\n </Button>\n\n </div>\n )}\n\n {!isWalletConnectFlow && (\n <div className={styles.walletsContainer}>\n {/* 1. Loading State (Detecting Wallets) */}\n {!isClient && (\n <div className={styles.detectingWallets}>\n <Spinner />\n <p >Detecting wallets...</p>\n </div>\n )}\n\n {/* 2. Empty State (No Wallets Detected) */}\n {connectors.length === 0 && (\n <div className={styles.emptyStateContainer}>\n <Wallet className={styles.emptyStateIcon} />\n\n <h3 className={styles.emptyStateTitle}>No Wallets Detected</h3>\n\n <p className={styles.emptyStateDesc}>\n Install a Solana wallet extension to get started\n </p>\n\n <div className={styles.emptyStateActions}>\n <Button\n variant=\"outline\"\n data-theme={theme}\n onClick={() => walletLinkOpen('Phantom')}\n >\n Get Phantom\n </Button>\n <Button\n data-theme={theme}\n variant=\"outline\"\n onClick={() => walletLinkOpen('Backpack')}\n >\n Get Backpack\n </Button>\n </div>\n\n\n </div>\n )}\n\n <div className={styles.allWallets}>\n {primaryWallets.map((connector) => (\n <WalletButton\n key={connector.id}\n theme={theme}\n connector={connector}\n isThisConnecting={isConnecting && connectingConnectorId === connector.id}\n hasError={errorConnectorId === connector.id}\n isRecent={recentlyConnectedConnectorId === connector.id}\n\n onSelect={() => handleSelectWallet(connector)}\n getInstallUrl={getInstallUrl}\n />\n ))}\n </div>\n\n {otherWallets.length > 0 && (\n <>\n {primayOuterHr && <div className={styles.seprator} />}\n <Collapsible\n open={isOtherWalletsOpen}\n onOpenChange={setIsOtherWalletsOpen}\n className={styles.Collapsible}\n >\n <CollapsibleTrigger className={styles.hiddenExpand}>\n <span className={styles.textContainer}>Other Wallets</span>\n <HiddenWalletIcons wallets={otherWallets} className=\"shrink-0\" />\n </CollapsibleTrigger>\n <CollapsibleContent className={styles.allWallets}>\n {otherWallets.map((connector) => (\n <WalletButton\n key={connector.id}\n theme={theme}\n connector={connector}\n isThisConnecting={isConnecting && connectingConnectorId === connector.id}\n hasError={errorConnectorId === connector.id}\n isRecent={recentlyConnectedConnectorId === connector.id}\n onSelect={() => handleSelectWallet(connector)}\n getInstallUrl={getInstallUrl}\n />\n ))}\n </CollapsibleContent>\n </Collapsible>\n </>\n )}\n\n {notReadyConnectors.length > 0 && (\n <>\n {(primaryWallets.length > 0 || otherWallets.length > 0) && (\n <div className={styles.seprator} />\n )}\n\n <div className=\"space-y-2\">\n <h3 className={styles.sectionHeader}>\n {readyConnectors.length > 0 ? 'Unavailable Wallets' : 'Wallets'}\n </h3>\n\n <div className={styles.grid}>\n {notReadyConnectors.slice(0, 3).map((connector) => {\n const installUrl = getInstallUrl(connector.name);\n\n return (\n <div key={connector.id} className={styles.unavailableRow}>\n {/* Left: Icon & Text */}\n <div className={styles.walletInfo}>\n <Avatar\n width={40}\n height={40}\n src={connector.icon}\n alt={connector.name}\n theme={theme}\n />\n <div className=\"text-left\">\n <div className={styles.walletName}>\n {connector.name}\n </div>\n <div className={styles.unavailableLabel}>\n Not available\n </div>\n </div>\n </div>\n\n {/* Right: Install Button */}\n {installUrl && (\n <Button\n data-theme={theme}\n variant=\"ghost\"\n size=\"sm\"\n className={styles.installButton}\n onClick={() => window.open(installUrl, '_blank')}\n >\n <ExternalLink />\n </Button>\n )}\n </div>\n );\n })}\n </div>\n </div>\n </>\n )}\n\n\n </div>\n )}\n\n </DialogContent>\n </Dialog >\n )\n\n}\n\nexport default WalletModal\n\n\ninterface WalletItemProps {\n connector: WalletConnectorMetadata;\n isThisConnecting: boolean;\n\n hasError?: boolean;\n isRecent?: boolean;\n theme?: 'light' | 'dark';\n onSelect: () => void;\n getInstallUrl: (walletName: string, walletUrl?: string) => string | undefined;\n}\nfunction WalletButton(props: WalletItemProps) {\n const { connector, isThisConnecting, hasError, isRecent, theme, onSelect, getInstallUrl } = props;\n\n const handleSelectWallet = () => {\n onSelect();\n }\n return (\n <Button\n key={connector.id}\n variant=\"outline\"\n data-error={hasError}\n data-theme={theme}\n className={styles.walletButton}\n onClick={handleSelectWallet}\n disabled={isThisConnecting}\n\n >\n {/* Left Side: Text Info */}\n <div className={styles.textContainer}>\n <div className={styles.nameRow}>\n <span>{connector.name}</span>\n {isRecent && <span className={styles.recentBadge}>Recent</span>}\n </div>\n\n {/* Status Text */}\n {isThisConnecting && (\n <div className={styles.statusText}>Connecting...</div>\n )}\n {hasError && !isThisConnecting && (\n <div className={styles.statusText} data-type=\"error\">\n Click to retry\n </div>\n )}\n </div>\n\n <div className={styles.iconContainer}>\n {isThisConnecting && <Spinner />}\n <Avatar\n width={40}\n height={40}\n src={connector.icon}\n alt={connector.name}\n theme={theme}\n />\n </div>\n\n </Button>\n )\n}\n\ninterface WalletIconSource {\n id: string;\n name: string;\n icon?: string | null;\n}\ninterface HiddenWalletIconsProps {\n wallets: WalletIconSource[];\n maxIcons?: number;\n className?: string;\n}\nexport function HiddenWalletIcons({ wallets, maxIcons = 4, className }: HiddenWalletIconsProps) {\n const previewWallets = wallets.slice(0, maxIcons);\n const placeholderCount = Math.max(0, maxIcons - previewWallets.length);\n\n return (\n <div\n className={`${styles.hiddenWalletGrid} ${className || ''}`}\n aria-hidden=\"true\"\n >\n {/* Render Actual Wallets */}\n {previewWallets.map(wallet => (\n <div\n key={wallet.id}\n className={styles.hiddenWalletIconWrapper}\n >\n {wallet.icon && (\n <img\n height={10}\n width={10}\n src={wallet.icon}\n alt={wallet.name}\n draggable={false}\n onError={(e: any) => {\n e.currentTarget.style.display = 'none';\n }}\n />\n )}\n </div>\n ))}\n\n {Array.from({ length: placeholderCount }).map((_, index) => (\n <div\n key={`placeholder-${index}`}\n className={styles.hiddenWalletIconWrapper}\n />\n ))}\n </div>\n );\n}","'use client';\n\nimport * as React from 'react';\nimport { Dialog as BaseDialog } from '@base-ui/react/dialog';\nimport { X } from 'lucide-react';\nimport styles from './Dialog.module.css';\nimport clsx from 'clsx';\n\n// 1. Root Components\nconst Dialog = BaseDialog.Root;\nconst DialogTrigger = BaseDialog.Trigger;\nconst DialogPortal = BaseDialog.Portal;\nconst DialogClose = BaseDialog.Close;\n\n// 2. Backdrop\ntype DialogBackdropProps = React.ComponentPropsWithoutRef<typeof BaseDialog.Backdrop>;\nconst DialogBackdrop = React.forwardRef<HTMLDivElement, DialogBackdropProps>(\n ({ className, ...props }, ref) => (\n <BaseDialog.Backdrop\n ref={ref}\n className={`${styles.backdrop} ${className || ''}`}\n {...props}\n />\n ),\n);\nDialogBackdrop.displayName = 'DialogBackdrop';\n\n// 3. Content (The Modal Box)\ntype DialogContentProps = React.ComponentPropsWithoutRef<typeof BaseDialog.Popup> & {\n showCloseButton?: boolean;\n theme?: 'light' | 'dark';\n};\nconst DialogContent = React.forwardRef<HTMLDivElement, DialogContentProps>(\n ({ className, children, theme, showCloseButton = true, ...props }, ref) => (\n <DialogPortal>\n <DialogBackdrop data-theme={theme} />\n <BaseDialog.Popup\n ref={ref}\n data-theme={theme}\n className={clsx(styles.content, className)}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogClose className={styles.closeButton}>\n <X />\n </DialogClose>\n )}\n </BaseDialog.Popup>\n </DialogPortal>\n )\n);\nDialogContent.displayName = 'DialogContent';\n\n// 4. Header\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={`${styles.header} ${className || ''}`} {...props} />\n);\nDialogHeader.displayName = 'DialogHeader';\n\n// 5. Footer\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={`${styles.footer} ${className || ''}`} {...props} />\n);\nDialogFooter.displayName = 'DialogFooter';\n\n// 6. Title\nconst DialogTitle = React.forwardRef<HTMLHeadingElement, React.ComponentPropsWithoutRef<typeof BaseDialog.Title>>(\n ({ className, ...props }, ref) => (\n <BaseDialog.Title\n ref={ref}\n className={`${styles.title} ${className || ''}`}\n {...props}\n />\n ),\n);\nDialogTitle.displayName = 'DialogTitle';\n\n// 7. Description\nconst DialogDescription = React.forwardRef<\n HTMLParagraphElement,\n React.ComponentPropsWithoutRef<typeof BaseDialog.Description>\n>(({ className, ...props }, ref) => (\n <BaseDialog.Description\n ref={ref}\n className={`${styles.description} ${className || ''}`}\n {...props}\n />\n));\nDialogDescription.displayName = 'DialogDescription';\n\nexport {\n Dialog,\n DialogPortal,\n DialogBackdrop,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n};","'use client';\n\nimport * as React from 'react';\nimport { Button as BaseButton } from '@base-ui/react/button';\nimport styles from './Button.module.css';\n\n// 1. Define Types\ntype ButtonVariant = 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link';\ntype ButtonSize = 'default' | 'sm' | 'lg' | 'icon';\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n}\n\n// 2. The Component\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant = 'default', size = 'default', ...props }, ref) => {\n return (\n <BaseButton\n ref={ref}\n\n className={`${styles.button} ${className || ''}`}\n data-variant={variant}\n data-size={size}\n\n {...props}\n />\n );\n }\n);\nButton.displayName = 'Button';\n\nexport default Button;","import Button from \"./Button\";\n\nexport default Button;","'use client';\n\nimport { useMemo, type ReactNode, type CSSProperties } from 'react';\nimport QRCodeUtil from 'qrcode';\nimport styles from './CustomQRCode.module.css';\n\n/**\n * Generate QR code matrix from value\n */\nfunction generateMatrix(value: string, errorCorrectionLevel: 'L' | 'M' | 'Q' | 'H') {\n const arr = Array.prototype.slice.call(QRCodeUtil.create(value, { errorCorrectionLevel }).modules.data, 0);\n const sqrt = Math.sqrt(arr.length);\n return arr.reduce(\n (rows: number[][], key: number, index: number) =>\n (index % sqrt === 0 ? rows.push([key]) : rows[rows.length - 1].push(key)) && rows,\n [] as number[][],\n );\n}\n\ninterface CustomQRCodeProps {\n value: string;\n size?: number;\n ecl?: 'L' | 'M' | 'Q' | 'H';\n clearArea?: boolean;\n image?: ReactNode;\n imageBackground?: string;\n dotColor?: string;\n backgroundColor?: string;\n}\n\n/**\n * QR Code SVG renderer\n */\nfunction QRCodeSVG({\n value,\n size: sizeProp = 200,\n ecl = 'M',\n clearArea = false,\n dotColor = 'currentColor',\n backgroundColor = '#ffffff',\n}: CustomQRCodeProps) {\n const logoSize = clearArea ? 76 : 0;\n const size = sizeProp - 10 * 2; // Account for padding\n\n const dots = useMemo(() => {\n const dots: ReactNode[] = [];\n const matrix = generateMatrix(value, ecl);\n const cellSize = size / matrix.length;\n\n // Finder pattern positions (3 corners)\n const qrList = [\n { x: 0, y: 0 },\n { x: 1, y: 0 },\n { x: 0, y: 1 },\n ];\n\n // Draw rounded finder patterns\n qrList.forEach(({ x, y }) => {\n const x1 = (matrix.length - 7) * cellSize * x;\n const y1 = (matrix.length - 7) * cellSize * y;\n for (let i = 0; i < 3; i++) {\n dots.push(\n <rect\n key={`finder-${i}-${x}-${y}`}\n fill={i % 2 !== 0 ? backgroundColor : dotColor}\n rx={(i - 2) * -5 + (i === 0 ? 2 : 3)}\n ry={(i - 2) * -5 + (i === 0 ? 2 : 3)}\n width={cellSize * (7 - i * 2)}\n height={cellSize * (7 - i * 2)}\n x={x1 + cellSize * i}\n y={y1 + cellSize * i}\n />,\n );\n }\n });\n\n // Calculate center clear area\n const clearArenaSize = Math.floor((logoSize + 25) / cellSize);\n const matrixMiddleStart = matrix.length / 2 - clearArenaSize / 2;\n const matrixMiddleEnd = matrix.length / 2 + clearArenaSize / 2 - 1;\n\n // Draw circular dots for data modules\n matrix.forEach((row: number[], i: number) => {\n row.forEach((_: number, j: number) => {\n if (matrix[i][j]) {\n // Skip dots under finder patterns\n if (!((i < 7 && j < 7) || (i > matrix.length - 8 && j < 7) || (i < 7 && j > matrix.length - 8))) {\n // Skip center area if clearArea is true\n if (\n !clearArea ||\n !(\n i > matrixMiddleStart &&\n i < matrixMiddleEnd &&\n j > matrixMiddleStart &&\n j < matrixMiddleEnd\n )\n ) {\n dots.push(\n <circle\n key={`dot-${i}-${j}`}\n cx={j * cellSize + cellSize / 2}\n cy={i * cellSize + cellSize / 2}\n fill={dotColor}\n r={cellSize / 3}\n />,\n );\n }\n }\n }\n });\n });\n\n return dots;\n }, [value, ecl, size, clearArea, logoSize, dotColor, backgroundColor]);\n\n return (\n <svg\n height={size}\n width={size}\n viewBox={`0 0 ${size} ${size}`}\n className={styles.svgFull}\n style={{ maxWidth: size, maxHeight: size }}\n >\n <rect fill=\"transparent\" height={size} width={size} />\n {dots}\n </svg>\n );\n}\n\n/**\n * Viewfinder corner brackets SVG\n */\nfunction ViewfinderFrame({\n size,\n color = '#2D2D2D',\n opacity = 0.01,\n}: {\n size: number;\n color?: string;\n opacity?: number;\n}) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 283 283\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={styles.viewfinder}\n >\n <path\n d=\"M3.5 264.06C3.5 272.587 10.4127 279.5 18.9399 279.5H32.8799C33.7083 279.5 34.3799 280.172 34.3799 281V281C34.3799 281.828 33.7083 282.5 32.8799 282.5H17.4399C8.08427 282.5 0.5 274.916 0.5 265.56V250.12C0.5 249.292 1.17157 248.62 2 248.62V248.62C2.82843 248.62 3.5 249.292 3.5 250.12V264.06ZM282.5 266.058C282.5 275.139 275.139 282.5 266.058 282.5H251.116C250.288 282.5 249.616 281.828 249.616 281V281C249.616 280.172 250.288 279.5 251.116 279.5H264.558C272.81 279.5 279.5 272.81 279.5 264.558V250.12C279.5 249.292 280.172 248.62 281 248.62V248.62C281.828 248.62 282.5 249.292 282.5 250.12V266.058ZM34.3799 2C34.3799 2.82843 33.7083 3.5 32.8799 3.5H18.9399C10.4127 3.5 3.5 10.4127 3.5 18.9399V32.8799C3.5 33.7083 2.82843 34.3799 2 34.3799V34.3799C1.17157 34.3799 0.5 33.7083 0.5 32.8799V17.4399C0.5 8.08427 8.08427 0.5 17.4399 0.5H32.8799C33.7083 0.5 34.3799 1.17157 34.3799 2V2ZM282.5 32.8799C282.5 33.7083 281.828 34.3799 281 34.3799V34.3799C280.172 34.3799 279.5 33.7083 279.5 32.8799V18.4419C279.5 10.1897 272.81 3.5 264.558 3.5H251.116C250.288 3.5 249.616 2.82843 249.616 2V2C249.616 1.17157 250.288 0.5 251.116 0.5H266.058C275.139 0.5 282.5 7.86129 282.5 16.9419V32.8799Z\"\n fill={color}\n fillOpacity={opacity}\n />\n </svg>\n );\n}\n\ninterface CustomQRCodeContainerProps extends CustomQRCodeProps {\n image?: ReactNode;\n imageBackground?: string;\n className?: string;\n style?: CSSProperties;\n loading?: boolean;\n scanning?: boolean;\n error?: boolean;\n frameColor?: string;\n}\n\nexport function CustomQRCode({\n value,\n size = 280,\n ecl = 'M',\n clearArea = false,\n image,\n imageBackground = 'transparent',\n dotColor,\n backgroundColor,\n className,\n style,\n loading = false,\n scanning = true,\n error = false,\n frameColor,\n}: CustomQRCodeContainerProps) {\n const showPlaceholder = loading || !value;\n\n const resolvedBackground = backgroundColor || '#ffffff';\n const resolvedDotColor = dotColor || '#000000';\n const resolvedFrameColor = error ? '#FF0000' : frameColor || '#2D2D2D';\n const frameOpacity = error ? 0.56 : 0.01;\n\n return (\n <div\n className={`${styles.container} ${className || ''}`}\n style={{\n width: size,\n height: size,\n ...style,\n }}\n >\n {/* Viewfinder corner brackets */}\n <ViewfinderFrame size={size} color={resolvedFrameColor} opacity={frameOpacity} />\n\n {/* QR Content Area */}\n <div\n className={styles.contentArea}\n style={{ background: resolvedBackground }}\n data-error={error}\n >\n {/* Gradient glow background */}\n <div className={styles.glow} data-error={error} />\n\n {/* Shine scanning effect */}\n {scanning && !showPlaceholder && !error && (\n <div className={styles.shine} />\n )}\n\n {/* QR Code or placeholder */}\n <div className={styles.qrWrapper}>\n {showPlaceholder ? (\n <QRPlaceholder size={size} dotColor={resolvedDotColor} backgroundColor={resolvedBackground} />\n ) : (\n <>\n <QRCodeSVG\n value={value}\n size={size - 40}\n ecl={ecl}\n clearArea={clearArea || !!image}\n dotColor={resolvedDotColor}\n backgroundColor={resolvedBackground}\n />\n {image && (\n <div\n className={styles.logoWrapper}\n style={{\n width: '28%',\n height: '28%',\n background: imageBackground || resolvedBackground,\n }}\n >\n {image}\n </div>\n )}\n </>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nfunction QRPlaceholder({\n size,\n dotColor,\n backgroundColor,\n}: {\n size: number;\n dotColor: string;\n backgroundColor: string;\n}) {\n return (\n <div className={styles.placeholderContainer} style={{ width: size - 40, height: size - 40 }}>\n {/* Dot pattern background */}\n <div\n className={styles.placeholderPattern}\n style={{\n backgroundImage: `radial-gradient(${dotColor} 41%, transparent 41%)`,\n }}\n />\n\n {/* Corner finder pattern placeholders */}\n {[\n { top: 0, left: 0 },\n { top: 0, right: 0 },\n { bottom: 0, left: 0 },\n ].map((pos, i) => (\n <span\n key={i}\n className={styles.cornerSquare}\n style={{\n ...pos,\n background: dotColor,\n }}\n />\n ))}\n\n {/* Center area */}\n <div\n className={styles.centerArea}\n style={{\n background: backgroundColor,\n boxShadow: `0 0 0 7px ${backgroundColor}`,\n }}\n />\n\n {/* Loading spinner */}\n <div className={styles.loaderWrapper}>\n <div\n className={styles.spinner}\n style={{ color: `${dotColor}40` }}\n />\n <span className={styles.loadingText} style={{ color: `${dotColor}70` }}>\n Generating QR code...\n </span>\n </div>\n </div>\n );\n}\n\nCustomQRCode.displayName = 'CustomQRCode';","import { CustomQRCode } from \"./CustomQRCode\";\n\nexport default CustomQRCode;","import classes from './Spinner.module.css'\nconst Spinner = () => {\n return (\n <div className={classes.spinner} />\n )\n}\n\nexport default Spinner","import Spinner from \"./Spinner\";\nexport default Spinner;","'use client';\n\nimport * as React from 'react';\nimport { Collapsible as BaseCollapsible } from '@base-ui/react/collapsible';\nimport styles from './Collapsible.module.css';\n\nconst Collapsible = BaseCollapsible.Root;\nconst CollapsibleTrigger = React.forwardRef<\n HTMLButtonElement,\n React.ComponentPropsWithoutRef<typeof BaseCollapsible.Trigger>\n>(({ className, ...props }, ref) => (\n <BaseCollapsible.Trigger\n ref={ref}\n className={`${styles.trigger} ${className || ''}`}\n {...props}\n />\n));\nCollapsibleTrigger.displayName = 'CollapsibleTrigger';\n\nconst CollapsibleContent = React.forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof BaseCollapsible.Panel>\n>(({ className, ...props }, ref) => (\n <BaseCollapsible.Panel\n ref={ref}\n className={`${styles.content} ${className || ''}`}\n {...props}\n />\n));\nCollapsibleContent.displayName = 'CollapsibleContent';\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent };","import { useState } from 'react';\nimport styles from './Avatar.module.css';\nimport { Wallet } from 'lucide-react';\ninterface AvatarProps {\n height?: number | string;\n width?: number | string;\n src?: string;\n alt?: string;\n theme?: 'light' | 'dark';\n}\nexport function Avatar({\n height,\n width,\n src,\n alt,\n theme = 'light',\n}: AvatarProps) {\n const [hasError, setHasError] = useState(false);\n return (\n <div className={styles.avatar} data-theme={theme}>\n {src && !hasError ? (\n <img\n height={height}\n width={width}\n src={src}\n alt={alt || \"Avatar\"}\n onError={() => setHasError(true)}\n />\n ) : (\n <div className={styles.fallback} style={{ height, width }}>\n <Wallet />\n </div>\n )}\n </div>\n );\n}\n","import { Avatar } from './Avatar';\n\nexport default Avatar;"],"mappings":"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","names":["WalletModal_default","import_lucide_react","import_react","BaseDialog","styles","clsx","React","import_jsx_runtime","BaseButton","styles","Button_default","import_jsx_runtime","QRCodeUtil","dots","styles","import_jsx_runtime","classes","Spinner_default","React","import_jsx_runtime","BaseCollapsible","styles","import_react","import_lucide_react","import_jsx_runtime","styles","import_clsx","import_jsx_runtime","styles","Button_default","Spinner_default","WalletModal_default"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/WalletModal/index.ts","../src/components/WalletModal/WalletModal.tsx","../src/components/shared/Dialog/Dialog.tsx","../src/components/shared/Button/Button.tsx","../src/components/shared/Button/index.ts","../src/components/shared/CustomQRCode/CustomQRCode.tsx","../src/components/shared/CustomQRCode/index.ts","../src/components/shared/Spinner/Spinner.tsx","../src/components/shared/Spinner/index.ts","../src/components/shared/Collapsible/Collapsible.tsx","../src/components/shared/Avatar/Avatar.tsx","../src/components/shared/Avatar/index.ts"],"sourcesContent":["import WalletModal from \"./WalletModal\"\nexport default WalletModal;","import { useConnector, WalletConnectorId, WalletConnectorMetadata } from \"@solana/connector\";\nimport { Check, ChevronLeft, Copy, ExternalLink, Wallet, X } from \"lucide-react\";\nimport { useEffect, useState, useSyncExternalStore } from \"react\";\nimport styles from './WalletModal.module.css';\nimport { Dialog, DialogClose, DialogContent, DialogTitle } from \"@shared/Dialog\";\nimport Button from \"@shared/Button\";\nimport CustomQRCode from \"@shared//CustomQRCode\";\nimport Spinner from \"@shared/Spinner\";\nimport { SiWalletconnect } from \"react-icons/si\";\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from \"@shared/Collapsible\";\nimport Avatar from \"@shared/Avatar\";\nimport { clsx } from \"clsx\";\n\n/**\n * Props for the WalletModal component.\n * This modal acts as the primary interface for users to select a wallet \n * or scan a QR code for mobile connection.\n */\ntype WalletModalProps = {\n /** * Custom CSS class for the modal overlay and container. \n * If not provided, the component uses the kit's default modal styling.\n */\n CN_Modal?: string;\n\n /** * The visual theme for the modal content. \n * @default 'light'\n */\n theme?: 'light' | 'dark';\n\n /** Controlled state: whether the modal is currently visible. */\n open: boolean;\n\n /** Callback function to handle opening and closing the modal. */\n onOpenChange: (open: boolean) => void;\n}\n\nexport function WalletModal(props: WalletModalProps) {\n const {\n CN_Modal,\n theme = 'light',\n open,\n onOpenChange,\n } = props;\n\n const { walletConnectUri, clearWalletConnectUri, walletStatus: { status }, isConnecting, connectorId, connectors, connectWallet, disconnectWallet } = useConnector();\n\n const [connectingConnectorId, setConnectingConnectorId] = useState<WalletConnectorId | null>(null);\n const [isOtherWalletsOpen, setIsOtherWalletsOpen] = useState(false);\n const [errorConnectorId, setErrorConnectorId] = useState<WalletConnectorId | null>(null);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n const [copied, setCopied] = useState(false);\n\n const isClient = useSyncExternalStore(\n () => () => { },\n () => true,\n () => false,\n );\n\n const recentlyConnectedConnectorId = useSyncExternalStore(\n () => () => { },\n () => localStorage.getItem('recentlyConnectedConnectorId') as WalletConnectorId | null,\n () => null\n );\n\n useEffect(() => {\n if (status === 'connected' && connectorId) {\n localStorage.setItem('recentlyConnectedConnectorId', connectorId);\n }\n }, [status, connectorId]);\n\n const walletConnectConnector = connectors.find(c => c.name === 'WalletConnect') ?? null;\n const isWalletConnectFlow =\n (!!walletConnectConnector &&\n (connectingConnectorId === walletConnectConnector.id ||\n (status === 'connecting' && connectorId === walletConnectConnector.id))) ||\n !!walletConnectUri;\n\n function cancelConnection() {\n clearWalletConnectUri?.();\n setConnectingConnectorId(null);\n disconnectWallet().catch(() => { });\n }\n\n // Clear error state when modal closes or user tries another wallet\n const clearError = () => {\n setErrorConnectorId(null);\n setErrorMessage(null);\n };\n\n const handleSelectWallet = async (connector: WalletConnectorMetadata) => {\n clearError();\n setConnectingConnectorId(connector.id);\n try {\n if (connector.name === 'WalletConnect') {\n clearWalletConnectUri?.();\n }\n await connectWallet(connector.id);\n localStorage.setItem('recentlyConnectedConnectorId', connector.id);\n // Don't close modal for WalletConnect - wait for connection\n if (connector.name !== 'WalletConnect') {\n onOpenChange(false);\n }\n } catch (error) {\n // Extract user-friendly error message\n const message = error instanceof Error ? error.message : 'An unexpected error occurred';\n if (message.includes('Connection cancelled')) return;\n\n // Set error state for UI feedback\n setErrorConnectorId(connector.id);\n setErrorMessage(message);\n\n // Log for telemetry/debugging (includes full error details)\n console.error('Failed to connect wallet:', {\n wallet: connector.name,\n connectorId: connector.id,\n error,\n message,\n timestamp: new Date().toISOString(),\n });\n } finally {\n setConnectingConnectorId(null);\n }\n };\n\n const handleCopyUri = async () => {\n if (!walletConnectUri) return;\n try {\n await navigator.clipboard.writeText(walletConnectUri);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error('Failed to copy URI:', err);\n }\n };\n\n const handleBackFromWalletConnect = () => {\n cancelConnection();\n };\n\n const readyConnectors = connectors.filter(c => c.ready);\n const notReadyConnectors = connectors.filter(c => !c.ready);\n\n const sortedReadyConnectors = [...readyConnectors].sort((a, b) => {\n const aIsRecent = recentlyConnectedConnectorId === a.id;\n const bIsRecent = recentlyConnectedConnectorId === b.id;\n if (aIsRecent && !bIsRecent) return -1;\n if (!aIsRecent && bIsRecent) return 1;\n return 0;\n });\n\n const primaryWallets = sortedReadyConnectors.slice(0, 3);\n const otherWallets = sortedReadyConnectors.slice(3);\n\n const primayOuterHr = otherWallets.length > 0 && primaryWallets.length > 0;\n\n const getInstallUrl = (walletName: string, walletUrl?: string): string | undefined => {\n if (walletUrl) return walletUrl;\n\n const name = walletName.toLowerCase();\n if (name.includes('phantom')) return 'https://phantom.app';\n if (name.includes('solflare')) return 'https://solflare.com';\n if (name.includes('backpack')) return 'https://backpack.app';\n if (name.includes('glow')) return 'https://glow.app';\n if (name.includes('coinbase')) return 'https://www.coinbase.com/wallet';\n if (name.includes('ledger')) return 'https://www.ledger.com';\n if (name.includes('trust')) return 'https://trustwallet.com';\n if (name.includes('exodus')) return 'https://www.exodus.com';\n return undefined;\n };\n\n const handleOpenChange = (isOpen: boolean) => {\n if (!isOpen) {\n clearError();\n if (isConnecting || connectingConnectorId || walletConnectUri) {\n cancelConnection();\n }\n }\n onOpenChange(isOpen);\n };\n\n const walletLinkOpen = (walletName: string) => {\n const installUrl = getInstallUrl(walletName);\n if (installUrl) {\n window.open(installUrl, '_blank');\n }\n }\n\n return (\n <Dialog open={open} onOpenChange={handleOpenChange} >\n <DialogContent\n showCloseButton={false}\n className={clsx(styles.dialogContent, CN_Modal)}\n theme={theme}\n >\n {/* Header */}\n <div className={styles.dialogHeader}>\n {isWalletConnectFlow ? (\n <button\n onClick={handleBackFromWalletConnect}\n className={styles.iconButton}\n >\n <ChevronLeft />\n </button>\n ) : null}\n <DialogTitle className={styles.dialogTitle}>\n {isWalletConnectFlow ? 'WalletConnect' : 'Connect your wallet'}\n </DialogTitle>\n <DialogClose className={styles.iconButton}>\n <X />\n </DialogClose>\n </div>\n\n {/* WalletConnect QR Code Display */}\n {isWalletConnectFlow && (\n <div className={styles.walletsContainer}>\n <div className={styles.tooltipBubble}>\n <span>Use a WalletConnect</span>\n <div className={styles.tooltipIconWrapper}>\n <SiWalletconnect className={styles.tooltipIcon} />\n <div className={styles.tooltipCaret} />\n </div>\n <span>supported wallet to scan</span>\n </div>\n\n {/* QR Code */}\n <div className={styles.qrWrapper}>\n <CustomQRCode\n value={walletConnectUri ?? ''}\n size={280}\n ecl=\"M\"\n loading={!walletConnectUri}\n scanning={!!walletConnectUri}\n />\n </div>\n\n {/* Copy URI button */}\n <Button\n variant=\"outline\"\n onClick={handleCopyUri}\n disabled={!walletConnectUri}\n className={styles.copyButton}\n data-theme={theme}\n >\n {copied ? (\n <>\n <Check className={`${styles.icon} ${styles.successIcon}`} />\n Copy to Clipboard\n </>\n ) : (\n <>\n <Copy className={styles.icon} />\n Copy to Clipboard\n </>\n )}\n </Button>\n\n </div>\n )}\n\n {!isWalletConnectFlow && (\n <div className={styles.walletsContainer}>\n {/* 1. Loading State (Detecting Wallets) */}\n {!isClient && (\n <div className={styles.detectingWallets}>\n <Spinner />\n <p >Detecting wallets...</p>\n </div>\n )}\n\n {/* 2. Empty State (No Wallets Detected) */}\n {connectors.length === 0 && (\n <div className={styles.emptyStateContainer}>\n <Wallet className={styles.emptyStateIcon} />\n\n <h3 className={styles.emptyStateTitle}>No Wallets Detected</h3>\n\n <p className={styles.emptyStateDesc}>\n Install a Solana wallet extension to get started\n </p>\n\n <div className={styles.emptyStateActions}>\n <Button\n variant=\"outline\"\n data-theme={theme}\n onClick={() => walletLinkOpen('Phantom')}\n >\n Get Phantom\n </Button>\n <Button\n data-theme={theme}\n variant=\"outline\"\n onClick={() => walletLinkOpen('Backpack')}\n >\n Get Backpack\n </Button>\n </div>\n\n\n </div>\n )}\n\n <div className={styles.allWallets}>\n {primaryWallets.map((connector) => (\n <WalletButton\n key={connector.id}\n theme={theme}\n connector={connector}\n isThisConnecting={isConnecting && connectingConnectorId === connector.id}\n hasError={errorConnectorId === connector.id}\n isRecent={recentlyConnectedConnectorId === connector.id}\n\n onSelect={() => handleSelectWallet(connector)}\n getInstallUrl={getInstallUrl}\n />\n ))}\n </div>\n\n {otherWallets.length > 0 && (\n <>\n {primayOuterHr && <div className={styles.seprator} />}\n <Collapsible\n open={isOtherWalletsOpen}\n onOpenChange={setIsOtherWalletsOpen}\n className={styles.Collapsible}\n >\n <CollapsibleTrigger className={styles.hiddenExpand}>\n <span className={styles.textContainer}>Other Wallets</span>\n <HiddenWalletIcons wallets={otherWallets} className=\"shrink-0\" />\n </CollapsibleTrigger>\n <CollapsibleContent className={styles.allWallets}>\n {otherWallets.map((connector) => (\n <WalletButton\n key={connector.id}\n theme={theme}\n connector={connector}\n isThisConnecting={isConnecting && connectingConnectorId === connector.id}\n hasError={errorConnectorId === connector.id}\n isRecent={recentlyConnectedConnectorId === connector.id}\n onSelect={() => handleSelectWallet(connector)}\n getInstallUrl={getInstallUrl}\n />\n ))}\n </CollapsibleContent>\n </Collapsible>\n </>\n )}\n\n {notReadyConnectors.length > 0 && (\n <>\n {(primaryWallets.length > 0 || otherWallets.length > 0) && (\n <div className={styles.seprator} />\n )}\n\n <div className=\"space-y-2\">\n <h3 className={styles.sectionHeader}>\n {readyConnectors.length > 0 ? 'Unavailable Wallets' : 'Wallets'}\n </h3>\n\n <div className={styles.grid}>\n {notReadyConnectors.slice(0, 3).map((connector) => {\n const installUrl = getInstallUrl(connector.name);\n\n return (\n <div key={connector.id} className={styles.unavailableRow}>\n {/* Left: Icon & Text */}\n <div className={styles.walletInfo}>\n <Avatar\n width={40}\n height={40}\n src={connector.icon}\n alt={connector.name}\n theme={theme}\n />\n <div className=\"text-left\">\n <div className={styles.walletName}>\n {connector.name}\n </div>\n <div className={styles.unavailableLabel}>\n Not available\n </div>\n </div>\n </div>\n\n {/* Right: Install Button */}\n {installUrl && (\n <Button\n data-theme={theme}\n variant=\"ghost\"\n size=\"sm\"\n className={styles.installButton}\n onClick={() => window.open(installUrl, '_blank')}\n >\n <ExternalLink />\n </Button>\n )}\n </div>\n );\n })}\n </div>\n </div>\n </>\n )}\n\n\n </div>\n )}\n\n </DialogContent>\n </Dialog >\n )\n\n}\n\nexport default WalletModal\n\n\ninterface WalletItemProps {\n connector: WalletConnectorMetadata;\n isThisConnecting: boolean;\n\n hasError?: boolean;\n isRecent?: boolean;\n theme?: 'light' | 'dark';\n onSelect: () => void;\n getInstallUrl: (walletName: string, walletUrl?: string) => string | undefined;\n}\nfunction WalletButton(props: WalletItemProps) {\n const { connector, isThisConnecting, hasError, isRecent, theme, onSelect, getInstallUrl } = props;\n\n const handleSelectWallet = () => {\n onSelect();\n }\n return (\n <Button\n key={connector.id}\n variant=\"outline\"\n data-error={hasError}\n data-theme={theme}\n className={styles.walletButton}\n onClick={handleSelectWallet}\n disabled={isThisConnecting}\n\n >\n {/* Left Side: Text Info */}\n <div className={styles.textContainer}>\n <div className={styles.nameRow}>\n <span>{connector.name}</span>\n {isRecent && <span className={styles.recentBadge}>Recent</span>}\n </div>\n\n {/* Status Text */}\n {isThisConnecting && (\n <div className={styles.statusText}>Connecting...</div>\n )}\n {hasError && !isThisConnecting && (\n <div className={styles.statusText} data-type=\"error\">\n Click to retry\n </div>\n )}\n </div>\n\n <div className={styles.iconContainer}>\n {isThisConnecting && <Spinner />}\n <Avatar\n width={40}\n height={40}\n src={connector.icon}\n alt={connector.name}\n theme={theme}\n />\n </div>\n\n </Button>\n )\n}\n\ninterface WalletIconSource {\n id: string;\n name: string;\n icon?: string | null;\n}\ninterface HiddenWalletIconsProps {\n wallets: WalletIconSource[];\n maxIcons?: number;\n className?: string;\n}\nexport function HiddenWalletIcons({ wallets, maxIcons = 4, className }: HiddenWalletIconsProps) {\n const previewWallets = wallets.slice(0, maxIcons);\n const placeholderCount = Math.max(0, maxIcons - previewWallets.length);\n\n return (\n <div\n className={`${styles.hiddenWalletGrid} ${className || ''}`}\n aria-hidden=\"true\"\n >\n {/* Render Actual Wallets */}\n {previewWallets.map(wallet => (\n <div\n key={wallet.id}\n className={styles.hiddenWalletIconWrapper}\n >\n {wallet.icon && (\n <img\n height={10}\n width={10}\n src={wallet.icon}\n alt={wallet.name}\n draggable={false}\n onError={(e: any) => {\n e.currentTarget.style.display = 'none';\n }}\n />\n )}\n </div>\n ))}\n\n {Array.from({ length: placeholderCount }).map((_, index) => (\n <div\n key={`placeholder-${index}`}\n className={styles.hiddenWalletIconWrapper}\n />\n ))}\n </div>\n );\n}","'use client';\n\nimport { Dialog as BaseDialog } from '@base-ui/react/dialog';\nimport { X } from 'lucide-react';\nimport styles from './Dialog.module.css';\nimport clsx from 'clsx';\nimport { forwardRef } from 'react';\n\n// 1. Root Components\nconst Dialog = BaseDialog.Root;\nconst DialogTrigger = BaseDialog.Trigger;\nconst DialogPortal = BaseDialog.Portal;\nconst DialogClose = BaseDialog.Close;\n\n// 2. Backdrop\ntype DialogBackdropProps = React.ComponentPropsWithoutRef<typeof BaseDialog.Backdrop>;\nconst DialogBackdrop = forwardRef<HTMLDivElement, DialogBackdropProps>(\n ({ className, ...props }, ref) => (\n <BaseDialog.Backdrop\n ref={ref}\n className={`${styles.backdrop} ${className || ''}`}\n {...props}\n />\n ),\n);\nDialogBackdrop.displayName = 'DialogBackdrop';\n\n// 3. Content (The Modal Box)\ntype DialogContentProps = React.ComponentPropsWithoutRef<typeof BaseDialog.Popup> & {\n showCloseButton?: boolean;\n theme?: 'light' | 'dark';\n};\nconst DialogContent = forwardRef<HTMLDivElement, DialogContentProps>(\n ({ className, children, theme, showCloseButton = true, ...props }, ref) => (\n <DialogPortal>\n <DialogBackdrop data-theme={theme} />\n <BaseDialog.Popup\n ref={ref}\n data-theme={theme}\n className={clsx(styles.content, className)}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogClose className={styles.closeButton}>\n <X />\n </DialogClose>\n )}\n </BaseDialog.Popup>\n </DialogPortal>\n )\n);\nDialogContent.displayName = 'DialogContent';\n\n// 4. Header\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={`${styles.header} ${className || ''}`} {...props} />\n);\nDialogHeader.displayName = 'DialogHeader';\n\n// 5. Footer\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={`${styles.footer} ${className || ''}`} {...props} />\n);\nDialogFooter.displayName = 'DialogFooter';\n\n// 6. Title\nconst DialogTitle = forwardRef<HTMLHeadingElement, React.ComponentPropsWithoutRef<typeof BaseDialog.Title>>(\n ({ className, ...props }, ref) => (\n <BaseDialog.Title\n ref={ref}\n className={`${styles.title} ${className || ''}`}\n {...props}\n />\n ),\n);\nDialogTitle.displayName = 'DialogTitle';\n\n// 7. Description\nconst DialogDescription = forwardRef<\n HTMLParagraphElement,\n React.ComponentPropsWithoutRef<typeof BaseDialog.Description>\n>(({ className, ...props }, ref) => (\n <BaseDialog.Description\n ref={ref}\n className={`${styles.description} ${className || ''}`}\n {...props}\n />\n));\nDialogDescription.displayName = 'DialogDescription';\n\nexport {\n Dialog,\n DialogPortal,\n DialogBackdrop,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n};","'use client';\n\nimport { forwardRef } from 'react';\nimport { Button as BaseButton } from '@base-ui/react/button';\nimport styles from './Button.module.css';\n\n// 1. Define Types\ntype ButtonVariant = 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link';\ntype ButtonSize = 'default' | 'sm' | 'lg' | 'icon';\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n}\n\n// 2. The Component\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant = 'default', size = 'default', ...props }, ref) => {\n return (\n <BaseButton\n ref={ref}\n\n className={`${styles.button} ${className || ''}`}\n data-variant={variant}\n data-size={size}\n\n {...props}\n />\n );\n }\n);\nButton.displayName = 'Button';\n\nexport default Button;","import Button from \"./Button\";\n\nexport default Button;","'use client';\n\nimport { useMemo, type ReactNode, type CSSProperties } from 'react';\nimport QRCodeUtil from 'qrcode';\nimport styles from './CustomQRCode.module.css';\n\n/**\n * Generate QR code matrix from value\n */\nfunction generateMatrix(value: string, errorCorrectionLevel: 'L' | 'M' | 'Q' | 'H') {\n const arr = Array.prototype.slice.call(QRCodeUtil.create(value, { errorCorrectionLevel }).modules.data, 0);\n const sqrt = Math.sqrt(arr.length);\n return arr.reduce(\n (rows: number[][], key: number, index: number) =>\n (index % sqrt === 0 ? rows.push([key]) : rows[rows.length - 1].push(key)) && rows,\n [] as number[][],\n );\n}\n\ninterface CustomQRCodeProps {\n value: string;\n size?: number;\n ecl?: 'L' | 'M' | 'Q' | 'H';\n clearArea?: boolean;\n image?: ReactNode;\n imageBackground?: string;\n dotColor?: string;\n backgroundColor?: string;\n}\n\n/**\n * QR Code SVG renderer\n */\nfunction QRCodeSVG({\n value,\n size: sizeProp = 200,\n ecl = 'M',\n clearArea = false,\n dotColor = 'currentColor',\n backgroundColor = '#ffffff',\n}: CustomQRCodeProps) {\n const logoSize = clearArea ? 76 : 0;\n const size = sizeProp - 10 * 2; // Account for padding\n\n const dots = useMemo(() => {\n const dots: ReactNode[] = [];\n const matrix = generateMatrix(value, ecl);\n const cellSize = size / matrix.length;\n\n // Finder pattern positions (3 corners)\n const qrList = [\n { x: 0, y: 0 },\n { x: 1, y: 0 },\n { x: 0, y: 1 },\n ];\n\n // Draw rounded finder patterns\n qrList.forEach(({ x, y }) => {\n const x1 = (matrix.length - 7) * cellSize * x;\n const y1 = (matrix.length - 7) * cellSize * y;\n for (let i = 0; i < 3; i++) {\n dots.push(\n <rect\n key={`finder-${i}-${x}-${y}`}\n fill={i % 2 !== 0 ? backgroundColor : dotColor}\n rx={(i - 2) * -5 + (i === 0 ? 2 : 3)}\n ry={(i - 2) * -5 + (i === 0 ? 2 : 3)}\n width={cellSize * (7 - i * 2)}\n height={cellSize * (7 - i * 2)}\n x={x1 + cellSize * i}\n y={y1 + cellSize * i}\n />,\n );\n }\n });\n\n // Calculate center clear area\n const clearArenaSize = Math.floor((logoSize + 25) / cellSize);\n const matrixMiddleStart = matrix.length / 2 - clearArenaSize / 2;\n const matrixMiddleEnd = matrix.length / 2 + clearArenaSize / 2 - 1;\n\n // Draw circular dots for data modules\n matrix.forEach((row: number[], i: number) => {\n row.forEach((_: number, j: number) => {\n if (matrix[i][j]) {\n // Skip dots under finder patterns\n if (!((i < 7 && j < 7) || (i > matrix.length - 8 && j < 7) || (i < 7 && j > matrix.length - 8))) {\n // Skip center area if clearArea is true\n if (\n !clearArea ||\n !(\n i > matrixMiddleStart &&\n i < matrixMiddleEnd &&\n j > matrixMiddleStart &&\n j < matrixMiddleEnd\n )\n ) {\n dots.push(\n <circle\n key={`dot-${i}-${j}`}\n cx={j * cellSize + cellSize / 2}\n cy={i * cellSize + cellSize / 2}\n fill={dotColor}\n r={cellSize / 3}\n />,\n );\n }\n }\n }\n });\n });\n\n return dots;\n }, [value, ecl, size, clearArea, logoSize, dotColor, backgroundColor]);\n\n return (\n <svg\n height={size}\n width={size}\n viewBox={`0 0 ${size} ${size}`}\n className={styles.svgFull}\n style={{ maxWidth: size, maxHeight: size }}\n >\n <rect fill=\"transparent\" height={size} width={size} />\n {dots}\n </svg>\n );\n}\n\n/**\n * Viewfinder corner brackets SVG\n */\nfunction ViewfinderFrame({\n size,\n color = '#2D2D2D',\n opacity = 0.01,\n}: {\n size: number;\n color?: string;\n opacity?: number;\n}) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 283 283\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={styles.viewfinder}\n >\n <path\n d=\"M3.5 264.06C3.5 272.587 10.4127 279.5 18.9399 279.5H32.8799C33.7083 279.5 34.3799 280.172 34.3799 281V281C34.3799 281.828 33.7083 282.5 32.8799 282.5H17.4399C8.08427 282.5 0.5 274.916 0.5 265.56V250.12C0.5 249.292 1.17157 248.62 2 248.62V248.62C2.82843 248.62 3.5 249.292 3.5 250.12V264.06ZM282.5 266.058C282.5 275.139 275.139 282.5 266.058 282.5H251.116C250.288 282.5 249.616 281.828 249.616 281V281C249.616 280.172 250.288 279.5 251.116 279.5H264.558C272.81 279.5 279.5 272.81 279.5 264.558V250.12C279.5 249.292 280.172 248.62 281 248.62V248.62C281.828 248.62 282.5 249.292 282.5 250.12V266.058ZM34.3799 2C34.3799 2.82843 33.7083 3.5 32.8799 3.5H18.9399C10.4127 3.5 3.5 10.4127 3.5 18.9399V32.8799C3.5 33.7083 2.82843 34.3799 2 34.3799V34.3799C1.17157 34.3799 0.5 33.7083 0.5 32.8799V17.4399C0.5 8.08427 8.08427 0.5 17.4399 0.5H32.8799C33.7083 0.5 34.3799 1.17157 34.3799 2V2ZM282.5 32.8799C282.5 33.7083 281.828 34.3799 281 34.3799V34.3799C280.172 34.3799 279.5 33.7083 279.5 32.8799V18.4419C279.5 10.1897 272.81 3.5 264.558 3.5H251.116C250.288 3.5 249.616 2.82843 249.616 2V2C249.616 1.17157 250.288 0.5 251.116 0.5H266.058C275.139 0.5 282.5 7.86129 282.5 16.9419V32.8799Z\"\n fill={color}\n fillOpacity={opacity}\n />\n </svg>\n );\n}\n\ninterface CustomQRCodeContainerProps extends CustomQRCodeProps {\n image?: ReactNode;\n imageBackground?: string;\n className?: string;\n style?: CSSProperties;\n loading?: boolean;\n scanning?: boolean;\n error?: boolean;\n frameColor?: string;\n}\n\nexport function CustomQRCode({\n value,\n size = 280,\n ecl = 'M',\n clearArea = false,\n image,\n imageBackground = 'transparent',\n dotColor,\n backgroundColor,\n className,\n style,\n loading = false,\n scanning = true,\n error = false,\n frameColor,\n}: CustomQRCodeContainerProps) {\n const showPlaceholder = loading || !value;\n\n const resolvedBackground = backgroundColor || '#ffffff';\n const resolvedDotColor = dotColor || '#000000';\n const resolvedFrameColor = error ? '#FF0000' : frameColor || '#2D2D2D';\n const frameOpacity = error ? 0.56 : 0.01;\n\n return (\n <div\n className={`${styles.container} ${className || ''}`}\n style={{\n width: size,\n height: size,\n ...style,\n }}\n >\n {/* Viewfinder corner brackets */}\n <ViewfinderFrame size={size} color={resolvedFrameColor} opacity={frameOpacity} />\n\n {/* QR Content Area */}\n <div\n className={styles.contentArea}\n style={{ background: resolvedBackground }}\n data-error={error}\n >\n {/* Gradient glow background */}\n <div className={styles.glow} data-error={error} />\n\n {/* Shine scanning effect */}\n {scanning && !showPlaceholder && !error && (\n <div className={styles.shine} />\n )}\n\n {/* QR Code or placeholder */}\n <div className={styles.qrWrapper}>\n {showPlaceholder ? (\n <QRPlaceholder size={size} dotColor={resolvedDotColor} backgroundColor={resolvedBackground} />\n ) : (\n <>\n <QRCodeSVG\n value={value}\n size={size - 40}\n ecl={ecl}\n clearArea={clearArea || !!image}\n dotColor={resolvedDotColor}\n backgroundColor={resolvedBackground}\n />\n {image && (\n <div\n className={styles.logoWrapper}\n style={{\n width: '28%',\n height: '28%',\n background: imageBackground || resolvedBackground,\n }}\n >\n {image}\n </div>\n )}\n </>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nfunction QRPlaceholder({\n size,\n dotColor,\n backgroundColor,\n}: {\n size: number;\n dotColor: string;\n backgroundColor: string;\n}) {\n return (\n <div className={styles.placeholderContainer} style={{ width: size - 40, height: size - 40 }}>\n {/* Dot pattern background */}\n <div\n className={styles.placeholderPattern}\n style={{\n backgroundImage: `radial-gradient(${dotColor} 41%, transparent 41%)`,\n }}\n />\n\n {/* Corner finder pattern placeholders */}\n {[\n { top: 0, left: 0 },\n { top: 0, right: 0 },\n { bottom: 0, left: 0 },\n ].map((pos, i) => (\n <span\n key={i}\n className={styles.cornerSquare}\n style={{\n ...pos,\n background: dotColor,\n }}\n />\n ))}\n\n {/* Center area */}\n <div\n className={styles.centerArea}\n style={{\n background: backgroundColor,\n boxShadow: `0 0 0 7px ${backgroundColor}`,\n }}\n />\n\n {/* Loading spinner */}\n <div className={styles.loaderWrapper}>\n <div\n className={styles.spinner}\n style={{ color: `${dotColor}40` }}\n />\n <span className={styles.loadingText} style={{ color: `${dotColor}70` }}>\n Generating QR code...\n </span>\n </div>\n </div>\n );\n}\n\nCustomQRCode.displayName = 'CustomQRCode';","import { CustomQRCode } from \"./CustomQRCode\";\n\nexport default CustomQRCode;","import classes from './Spinner.module.css'\nconst Spinner = () => {\n return (\n <div className={classes.spinner} />\n )\n}\n\nexport default Spinner","import Spinner from \"./Spinner\";\nexport default Spinner;","'use client';\n\nimport { Collapsible as BaseCollapsible } from '@base-ui/react/collapsible';\nimport styles from './Collapsible.module.css';\nimport { forwardRef } from 'react';\n\nconst Collapsible = BaseCollapsible.Root;\nconst CollapsibleTrigger = forwardRef<\n HTMLButtonElement,\n React.ComponentPropsWithoutRef<typeof BaseCollapsible.Trigger>\n>(({ className, ...props }, ref) => (\n <BaseCollapsible.Trigger\n ref={ref}\n className={`${styles.trigger} ${className || ''}`}\n {...props}\n />\n));\nCollapsibleTrigger.displayName = 'CollapsibleTrigger';\n\nconst CollapsibleContent = forwardRef<\n HTMLDivElement,\n React.ComponentPropsWithoutRef<typeof BaseCollapsible.Panel>\n>(({ className, ...props }, ref) => (\n <BaseCollapsible.Panel\n ref={ref}\n className={`${styles.content} ${className || ''}`}\n {...props}\n />\n));\nCollapsibleContent.displayName = 'CollapsibleContent';\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent };","import { useState } from 'react';\nimport styles from './Avatar.module.css';\nimport { Wallet } from 'lucide-react';\ninterface AvatarProps {\n height?: number | string;\n width?: number | string;\n src?: string;\n alt?: string;\n theme?: 'light' | 'dark';\n}\nexport function Avatar({\n height,\n width,\n src,\n alt,\n theme = 'light',\n}: AvatarProps) {\n const [hasError, setHasError] = useState(false);\n return (\n <div className={styles.avatar} data-theme={theme}>\n {src && !hasError ? (\n <img\n height={height}\n width={width}\n src={src}\n alt={alt || \"Avatar\"}\n onError={() => setHasError(true)}\n />\n ) : (\n <div className={styles.fallback} style={{ height, width }}>\n <Wallet />\n </div>\n )}\n </div>\n );\n}\n","import { Avatar } from './Avatar';\n\nexport default Avatar;"],"mappings":"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","names":["WalletModal_default","import_lucide_react","import_react","BaseDialog","styles","clsx","import_react","import_jsx_runtime","BaseButton","styles","Button_default","import_react","import_jsx_runtime","QRCodeUtil","dots","styles","import_jsx_runtime","classes","Spinner_default","import_react","import_jsx_runtime","BaseCollapsible","styles","import_react","import_lucide_react","import_jsx_runtime","styles","import_clsx","import_jsx_runtime","styles","Button_default","Spinner_default","WalletModal_default"]}
|
package/dist/WalletModal.mjs
CHANGED
|
@@ -7,17 +7,17 @@ import { useEffect, useState as useState2, useSyncExternalStore } from "react";
|
|
|
7
7
|
import styles6 from "./WalletModal.module-ZRTJGOQY.module.css";
|
|
8
8
|
|
|
9
9
|
// src/components/shared/Dialog/Dialog.tsx
|
|
10
|
-
import * as React from "react";
|
|
11
10
|
import { Dialog as BaseDialog } from "@base-ui/react/dialog";
|
|
12
11
|
import { X } from "lucide-react";
|
|
13
12
|
import styles from "./Dialog.module-AYJTMDAD.module.css";
|
|
14
13
|
import clsx from "clsx";
|
|
14
|
+
import { forwardRef } from "react";
|
|
15
15
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
16
16
|
var Dialog = BaseDialog.Root;
|
|
17
17
|
var DialogTrigger = BaseDialog.Trigger;
|
|
18
18
|
var DialogPortal = BaseDialog.Portal;
|
|
19
19
|
var DialogClose = BaseDialog.Close;
|
|
20
|
-
var DialogBackdrop =
|
|
20
|
+
var DialogBackdrop = forwardRef(
|
|
21
21
|
({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
22
22
|
BaseDialog.Backdrop,
|
|
23
23
|
{
|
|
@@ -28,7 +28,7 @@ var DialogBackdrop = React.forwardRef(
|
|
|
28
28
|
)
|
|
29
29
|
);
|
|
30
30
|
DialogBackdrop.displayName = "DialogBackdrop";
|
|
31
|
-
var DialogContent =
|
|
31
|
+
var DialogContent = forwardRef(
|
|
32
32
|
({ className, children, theme, showCloseButton = true, ...props }, ref) => /* @__PURE__ */ jsxs(DialogPortal, { children: [
|
|
33
33
|
/* @__PURE__ */ jsx(DialogBackdrop, { "data-theme": theme }),
|
|
34
34
|
/* @__PURE__ */ jsxs(
|
|
@@ -51,7 +51,7 @@ var DialogHeader = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { cla
|
|
|
51
51
|
DialogHeader.displayName = "DialogHeader";
|
|
52
52
|
var DialogFooter = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: `${styles.footer} ${className || ""}`, ...props });
|
|
53
53
|
DialogFooter.displayName = "DialogFooter";
|
|
54
|
-
var DialogTitle =
|
|
54
|
+
var DialogTitle = forwardRef(
|
|
55
55
|
({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
56
56
|
BaseDialog.Title,
|
|
57
57
|
{
|
|
@@ -62,7 +62,7 @@ var DialogTitle = React.forwardRef(
|
|
|
62
62
|
)
|
|
63
63
|
);
|
|
64
64
|
DialogTitle.displayName = "DialogTitle";
|
|
65
|
-
var DialogDescription =
|
|
65
|
+
var DialogDescription = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
66
66
|
BaseDialog.Description,
|
|
67
67
|
{
|
|
68
68
|
ref,
|
|
@@ -73,11 +73,11 @@ var DialogDescription = React.forwardRef(({ className, ...props }, ref) => /* @_
|
|
|
73
73
|
DialogDescription.displayName = "DialogDescription";
|
|
74
74
|
|
|
75
75
|
// src/components/shared/Button/Button.tsx
|
|
76
|
-
import
|
|
76
|
+
import { forwardRef as forwardRef2 } from "react";
|
|
77
77
|
import { Button as BaseButton } from "@base-ui/react/button";
|
|
78
|
-
import styles2 from "./Button.module-
|
|
78
|
+
import styles2 from "./Button.module-QCTUNBHA.module.css";
|
|
79
79
|
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
80
|
-
var Button =
|
|
80
|
+
var Button = forwardRef2(
|
|
81
81
|
({ className, variant = "default", size = "default", ...props }, ref) => {
|
|
82
82
|
return /* @__PURE__ */ jsx2(
|
|
83
83
|
BaseButton,
|
|
@@ -362,12 +362,12 @@ var Spinner_default2 = Spinner_default;
|
|
|
362
362
|
import { SiWalletconnect } from "react-icons/si";
|
|
363
363
|
|
|
364
364
|
// src/components/shared/Collapsible/Collapsible.tsx
|
|
365
|
-
import * as React3 from "react";
|
|
366
365
|
import { Collapsible as BaseCollapsible } from "@base-ui/react/collapsible";
|
|
367
366
|
import styles4 from "./Collapsible.module-F4VIL5FH.module.css";
|
|
367
|
+
import { forwardRef as forwardRef3 } from "react";
|
|
368
368
|
import { jsx as jsx5 } from "react/jsx-runtime";
|
|
369
369
|
var Collapsible = BaseCollapsible.Root;
|
|
370
|
-
var CollapsibleTrigger =
|
|
370
|
+
var CollapsibleTrigger = forwardRef3(({ className, ...props }, ref) => /* @__PURE__ */ jsx5(
|
|
371
371
|
BaseCollapsible.Trigger,
|
|
372
372
|
{
|
|
373
373
|
ref,
|
|
@@ -376,7 +376,7 @@ var CollapsibleTrigger = React3.forwardRef(({ className, ...props }, ref) => /*
|
|
|
376
376
|
}
|
|
377
377
|
));
|
|
378
378
|
CollapsibleTrigger.displayName = "CollapsibleTrigger";
|
|
379
|
-
var CollapsibleContent =
|
|
379
|
+
var CollapsibleContent = forwardRef3(({ className, ...props }, ref) => /* @__PURE__ */ jsx5(
|
|
380
380
|
BaseCollapsible.Panel,
|
|
381
381
|
{
|
|
382
382
|
ref,
|
|
@@ -423,11 +423,9 @@ function WalletModal(props) {
|
|
|
423
423
|
CN_Modal,
|
|
424
424
|
theme = "light",
|
|
425
425
|
open,
|
|
426
|
-
onOpenChange
|
|
427
|
-
walletConnectUri,
|
|
428
|
-
onClearWalletConnectUri
|
|
426
|
+
onOpenChange
|
|
429
427
|
} = props;
|
|
430
|
-
const { walletStatus: { status }, isConnecting, connectorId, connectors, connectWallet, disconnectWallet } = useConnector();
|
|
428
|
+
const { walletConnectUri, clearWalletConnectUri, walletStatus: { status }, isConnecting, connectorId, connectors, connectWallet, disconnectWallet } = useConnector();
|
|
431
429
|
const [connectingConnectorId, setConnectingConnectorId] = useState2(null);
|
|
432
430
|
const [isOtherWalletsOpen, setIsOtherWalletsOpen] = useState2(false);
|
|
433
431
|
const [errorConnectorId, setErrorConnectorId] = useState2(null);
|
|
@@ -453,7 +451,7 @@ function WalletModal(props) {
|
|
|
453
451
|
const walletConnectConnector = (_a = connectors.find((c) => c.name === "WalletConnect")) != null ? _a : null;
|
|
454
452
|
const isWalletConnectFlow = !!walletConnectConnector && (connectingConnectorId === walletConnectConnector.id || status === "connecting" && connectorId === walletConnectConnector.id) || !!walletConnectUri;
|
|
455
453
|
function cancelConnection() {
|
|
456
|
-
|
|
454
|
+
clearWalletConnectUri == null ? void 0 : clearWalletConnectUri();
|
|
457
455
|
setConnectingConnectorId(null);
|
|
458
456
|
disconnectWallet().catch(() => {
|
|
459
457
|
});
|
|
@@ -467,7 +465,7 @@ function WalletModal(props) {
|
|
|
467
465
|
setConnectingConnectorId(connector.id);
|
|
468
466
|
try {
|
|
469
467
|
if (connector.name === "WalletConnect") {
|
|
470
|
-
|
|
468
|
+
clearWalletConnectUri == null ? void 0 : clearWalletConnectUri();
|
|
471
469
|
}
|
|
472
470
|
await connectWallet(connector.id);
|
|
473
471
|
localStorage.setItem("recentlyConnectedConnectorId", connector.id);
|