@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.
@@ -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 import_react3 = require("react");
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 = React.forwardRef(
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 = React.forwardRef(
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 = React.forwardRef(
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 = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
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 React2 = __toESM(require("react"));
111
+ var import_react2 = require("react");
112
112
  var import_button = require("@base-ui/react/button");
113
- var import_Button = __toESM(require("./Button.module-HQNNX6IB.module.css"));
113
+ var import_Button = __toESM(require("./Button.module-QCTUNBHA.module.css"));
114
114
  var import_jsx_runtime2 = require("react/jsx-runtime");
115
- var Button = React2.forwardRef(
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 import_react = require("react");
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, import_react.useMemo)(() => {
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 = React3.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
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 = React3.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
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 import_react2 = require("react");
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, import_react2.useState)(false);
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, import_react3.useState)(null);
467
- const [isOtherWalletsOpen, setIsOtherWalletsOpen] = (0, import_react3.useState)(false);
468
- const [errorConnectorId, setErrorConnectorId] = (0, import_react3.useState)(null);
469
- const [errorMessage, setErrorMessage] = (0, import_react3.useState)(null);
470
- const [copied, setCopied] = (0, import_react3.useState)(false);
471
- const isClient = (0, import_react3.useSyncExternalStore)(
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, import_react3.useSyncExternalStore)(
475
+ const recentlyConnectedConnectorId = (0, import_react6.useSyncExternalStore)(
478
476
  () => () => {
479
477
  },
480
478
  () => localStorage.getItem("recentlyConnectedConnectorId"),
481
479
  () => null
482
480
  );
483
- (0, import_react3.useEffect)(() => {
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
- onClearWalletConnectUri == null ? void 0 : onClearWalletConnectUri();
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
- onClearWalletConnectUri == null ? void 0 : onClearWalletConnectUri();
503
+ clearWalletConnectUri == null ? void 0 : clearWalletConnectUri();
506
504
  }
507
505
  await connectWallet(connector.id);
508
506
  localStorage.setItem("recentlyConnectedConnectorId", connector.id);
@@ -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"]}
@@ -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 = React.forwardRef(
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 = React.forwardRef(
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 = React.forwardRef(
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 = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
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 * as React2 from "react";
76
+ import { forwardRef as forwardRef2 } from "react";
77
77
  import { Button as BaseButton } from "@base-ui/react/button";
78
- import styles2 from "./Button.module-HQNNX6IB.module.css";
78
+ import styles2 from "./Button.module-QCTUNBHA.module.css";
79
79
  import { jsx as jsx2 } from "react/jsx-runtime";
80
- var Button = React2.forwardRef(
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 = React3.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx5(
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 = React3.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx5(
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
- onClearWalletConnectUri == null ? void 0 : onClearWalletConnectUri();
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
- onClearWalletConnectUri == null ? void 0 : onClearWalletConnectUri();
468
+ clearWalletConnectUri == null ? void 0 : clearWalletConnectUri();
471
469
  }
472
470
  await connectWallet(connector.id);
473
471
  localStorage.setItem("recentlyConnectedConnectorId", connector.id);