@algobright/solana-connector 0.1.3 → 0.1.5

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.
@@ -100,8 +100,50 @@ var Button_default2 = Button_default;
100
100
  // src/components/shared/CustomQRCode/CustomQRCode.tsx
101
101
  import { useMemo } from "react";
102
102
  import QRCodeUtil from "qrcode";
103
- import styles3 from "./CustomQRCode.module-JW3JU3FX.module.css";
104
- import { Fragment, jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
103
+ import styles3 from "./CustomQRCode.module-WDQZB2O2.module.css";
104
+
105
+ // src/components/shared/Spinner/Spinner.tsx
106
+ import { jsx as jsx3 } from "react/jsx-runtime";
107
+ var Spinner = () => /* @__PURE__ */ jsx3(
108
+ "svg",
109
+ {
110
+ width: "1em",
111
+ height: "1em",
112
+ viewBox: "0 0 50 50",
113
+ style: { display: "inline-block", verticalAlign: "middle" },
114
+ children: /* @__PURE__ */ jsx3(
115
+ "circle",
116
+ {
117
+ cx: "25",
118
+ cy: "25",
119
+ r: "20",
120
+ fill: "none",
121
+ stroke: "currentColor",
122
+ strokeWidth: "5",
123
+ strokeDasharray: "90, 150",
124
+ strokeLinecap: "round",
125
+ children: /* @__PURE__ */ jsx3(
126
+ "animateTransform",
127
+ {
128
+ attributeName: "transform",
129
+ type: "rotate",
130
+ from: "0 25 25",
131
+ to: "360 25 25",
132
+ dur: "0.8s",
133
+ repeatCount: "indefinite"
134
+ }
135
+ )
136
+ }
137
+ )
138
+ }
139
+ );
140
+ var Spinner_default = Spinner;
141
+
142
+ // src/components/shared/Spinner/index.ts
143
+ var Spinner_default2 = Spinner_default;
144
+
145
+ // src/components/shared/CustomQRCode/CustomQRCode.tsx
146
+ import { Fragment, jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
105
147
  function generateMatrix(value, errorCorrectionLevel) {
106
148
  const arr = Array.prototype.slice.call(QRCodeUtil.create(value, { errorCorrectionLevel }).modules.data, 0);
107
149
  const sqrt = Math.sqrt(arr.length);
@@ -134,7 +176,7 @@ function QRCodeSVG({
134
176
  const y1 = (matrix.length - 7) * cellSize * y;
135
177
  for (let i = 0; i < 3; i++) {
136
178
  dots2.push(
137
- /* @__PURE__ */ jsx3(
179
+ /* @__PURE__ */ jsx4(
138
180
  "rect",
139
181
  {
140
182
  fill: i % 2 !== 0 ? backgroundColor : dotColor,
@@ -159,7 +201,7 @@ function QRCodeSVG({
159
201
  if (!(i < 7 && j < 7 || i > matrix.length - 8 && j < 7 || i < 7 && j > matrix.length - 8)) {
160
202
  if (!clearArea || !(i > matrixMiddleStart && i < matrixMiddleEnd && j > matrixMiddleStart && j < matrixMiddleEnd)) {
161
203
  dots2.push(
162
- /* @__PURE__ */ jsx3(
204
+ /* @__PURE__ */ jsx4(
163
205
  "circle",
164
206
  {
165
207
  cx: j * cellSize + cellSize / 2,
@@ -186,7 +228,7 @@ function QRCodeSVG({
186
228
  className: styles3.svgFull,
187
229
  style: { maxWidth: size, maxHeight: size },
188
230
  children: [
189
- /* @__PURE__ */ jsx3("rect", { fill: "transparent", height: size, width: size }),
231
+ /* @__PURE__ */ jsx4("rect", { fill: "transparent", height: size, width: size }),
190
232
  dots
191
233
  ]
192
234
  }
@@ -197,7 +239,7 @@ function ViewfinderFrame({
197
239
  color = "#2D2D2D",
198
240
  opacity = 0.01
199
241
  }) {
200
- return /* @__PURE__ */ jsx3(
242
+ return /* @__PURE__ */ jsx4(
201
243
  "svg",
202
244
  {
203
245
  width: size,
@@ -206,7 +248,7 @@ function ViewfinderFrame({
206
248
  fill: "none",
207
249
  xmlns: "http://www.w3.org/2000/svg",
208
250
  className: styles3.viewfinder,
209
- children: /* @__PURE__ */ jsx3(
251
+ children: /* @__PURE__ */ jsx4(
210
252
  "path",
211
253
  {
212
254
  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",
@@ -248,7 +290,7 @@ function CustomQRCode({
248
290
  ...style
249
291
  },
250
292
  children: [
251
- /* @__PURE__ */ jsx3(ViewfinderFrame, { size, color: resolvedFrameColor, opacity: frameOpacity }),
293
+ /* @__PURE__ */ jsx4(ViewfinderFrame, { size, color: resolvedFrameColor, opacity: frameOpacity }),
252
294
  /* @__PURE__ */ jsxs2(
253
295
  "div",
254
296
  {
@@ -256,10 +298,10 @@ function CustomQRCode({
256
298
  style: { background: resolvedBackground },
257
299
  "data-error": error,
258
300
  children: [
259
- /* @__PURE__ */ jsx3("div", { className: styles3.glow, "data-error": error }),
260
- scanning && !showPlaceholder && !error && /* @__PURE__ */ jsx3("div", { className: styles3.shine }),
261
- /* @__PURE__ */ jsx3("div", { className: styles3.qrWrapper, children: showPlaceholder ? /* @__PURE__ */ jsx3(QRPlaceholder, { size, dotColor: resolvedDotColor, backgroundColor: resolvedBackground }) : /* @__PURE__ */ jsxs2(Fragment, { children: [
262
- /* @__PURE__ */ jsx3(
301
+ /* @__PURE__ */ jsx4("div", { className: styles3.glow, "data-error": error }),
302
+ scanning && !showPlaceholder && !error && /* @__PURE__ */ jsx4("div", { className: styles3.shine }),
303
+ /* @__PURE__ */ jsx4("div", { className: styles3.qrWrapper, children: showPlaceholder ? /* @__PURE__ */ jsx4(QRPlaceholder, { size, dotColor: resolvedDotColor, backgroundColor: resolvedBackground }) : /* @__PURE__ */ jsxs2(Fragment, { children: [
304
+ /* @__PURE__ */ jsx4(
263
305
  QRCodeSVG,
264
306
  {
265
307
  value,
@@ -270,7 +312,7 @@ function CustomQRCode({
270
312
  backgroundColor: resolvedBackground
271
313
  }
272
314
  ),
273
- image && /* @__PURE__ */ jsx3(
315
+ image && /* @__PURE__ */ jsx4(
274
316
  "div",
275
317
  {
276
318
  className: styles3.logoWrapper,
@@ -296,7 +338,7 @@ function QRPlaceholder({
296
338
  backgroundColor
297
339
  }) {
298
340
  return /* @__PURE__ */ jsxs2("div", { className: styles3.placeholderContainer, style: { width: size - 40, height: size - 40 }, children: [
299
- /* @__PURE__ */ jsx3(
341
+ /* @__PURE__ */ jsx4(
300
342
  "div",
301
343
  {
302
344
  className: styles3.placeholderPattern,
@@ -309,7 +351,7 @@ function QRPlaceholder({
309
351
  { top: 0, left: 0 },
310
352
  { top: 0, right: 0 },
311
353
  { bottom: 0, left: 0 }
312
- ].map((pos, i) => /* @__PURE__ */ jsx3(
354
+ ].map((pos, i) => /* @__PURE__ */ jsx4(
313
355
  "span",
314
356
  {
315
357
  className: styles3.cornerSquare,
@@ -320,7 +362,7 @@ function QRPlaceholder({
320
362
  },
321
363
  i
322
364
  )),
323
- /* @__PURE__ */ jsx3(
365
+ /* @__PURE__ */ jsx4(
324
366
  "div",
325
367
  {
326
368
  className: styles3.centerArea,
@@ -331,14 +373,8 @@ function QRPlaceholder({
331
373
  }
332
374
  ),
333
375
  /* @__PURE__ */ jsxs2("div", { className: styles3.loaderWrapper, children: [
334
- /* @__PURE__ */ jsx3(
335
- "div",
336
- {
337
- className: styles3.spinner,
338
- style: { color: `${dotColor}40` }
339
- }
340
- ),
341
- /* @__PURE__ */ jsx3("span", { className: styles3.loadingText, style: { color: `${dotColor}70` }, children: "Generating QR code..." })
376
+ /* @__PURE__ */ jsx4(Spinner_default2, {}),
377
+ /* @__PURE__ */ jsx4("span", { className: styles3.loadingText, style: { color: `${dotColor}70` }, children: "Generating QR code..." })
342
378
  ] })
343
379
  ] });
344
380
  }
@@ -347,17 +383,6 @@ CustomQRCode.displayName = "CustomQRCode";
347
383
  // src/components/shared/CustomQRCode/index.ts
348
384
  var CustomQRCode_default = CustomQRCode;
349
385
 
350
- // src/components/shared/Spinner/Spinner.tsx
351
- import classes from "./Spinner.module-BLSWZSIL.module.css";
352
- import { jsx as jsx4 } from "react/jsx-runtime";
353
- var Spinner = () => {
354
- return /* @__PURE__ */ jsx4("div", { className: classes.spinner });
355
- };
356
- var Spinner_default = Spinner;
357
-
358
- // src/components/shared/Spinner/index.ts
359
- var Spinner_default2 = Spinner_default;
360
-
361
386
  // src/components/WalletModal/WalletModal.tsx
362
387
  import { SiWalletconnect } from "react-icons/si";
363
388
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../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","../src/components/WalletModal/index.ts"],"sourcesContent":["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;","import WalletModal from \"./WalletModal\"\nexport default WalletModal;"],"mappings":"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","names":["Wallet","X","useState","styles","forwardRef","styles","jsx","Button_default","styles","jsx","jsxs","dots","jsx","Spinner_default","styles","forwardRef","jsx","styles","jsx","clsx","Fragment","jsx","jsxs","useState","styles","X","Button_default","Spinner_default","Wallet","WalletModal_default"]}
1
+ {"version":3,"sources":["../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/Spinner/Spinner.tsx","../src/components/shared/Spinner/index.ts","../src/components/shared/CustomQRCode/index.ts","../src/components/shared/Collapsible/Collapsible.tsx","../src/components/shared/Avatar/Avatar.tsx","../src/components/shared/Avatar/index.ts","../src/components/WalletModal/index.ts"],"sourcesContent":["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';\nimport Spinner from '@shared/Spinner';\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 <Spinner />\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';","const Spinner = () => (\n <svg\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 50 50\"\n style={{ display: 'inline-block', verticalAlign: 'middle' }}\n >\n <circle\n cx=\"25\"\n cy=\"25\"\n r=\"20\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"5\"\n strokeDasharray=\"90, 150\"\n strokeLinecap=\"round\"\n >\n <animateTransform\n attributeName=\"transform\"\n type=\"rotate\"\n from=\"0 25 25\"\n to=\"360 25 25\"\n dur=\"0.8s\"\n repeatCount=\"indefinite\"\n />\n </circle>\n </svg>\n);\nexport default Spinner","import Spinner from \"./Spinner\";\nexport default Spinner;","import { CustomQRCode } from \"./CustomQRCode\";\n\nexport default CustomQRCode;","'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;","import WalletModal from \"./WalletModal\"\nexport default WalletModal;"],"mappings":"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","names":["Wallet","X","useState","styles","forwardRef","styles","jsx","Button_default","styles","jsx","Spinner_default","jsx","jsxs","dots","styles","Spinner_default","styles","forwardRef","jsx","styles","jsx","clsx","Fragment","jsx","jsxs","useState","styles","X","Button_default","Spinner_default","Wallet","WalletModal_default"]}
package/dist/index.d.mts CHANGED
@@ -1,4 +1,5 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { SimplifiedWalletConnectConfig } from '@solana/connector';
2
3
 
3
4
  type Network = 'mainnet' | 'devnet' | 'testnet' | 'localnet';
4
5
  type RpcMap = Record<Network, string[]>;
@@ -21,9 +22,16 @@ type SolanaWrapperProps = {
21
22
  */
22
23
  enableMobile?: boolean;
23
24
  /** * Enable WalletConnect support
24
- * @default true
25
+ * Enable or configure WalletConnect support for QR code and deep-link connections.
26
+ * * **Mobile-First Note:** Setting this to `false` (default) reduces initial bundle size.
27
+ * Enable this if you need to support desktop-to-mobile connections via QR codes.
28
+ * * - `false`: (Default) Disables WalletConnect.
29
+ * - `true`: Enables using `NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID` from your environment.
30
+ * - `object`: Provides manual overrides for `projectId`, `metadata`, etc.
31
+ * * @default false
32
+ * @see https://docs.reown.com/appkit/overview
25
33
  */
26
- walletConnect?: boolean;
34
+ walletConnect?: boolean | SimplifiedWalletConnectConfig;
27
35
  /** * List of default RPC endpoints mapped by network
28
36
  * @default DEFAULT_RPCS
29
37
  */
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { SimplifiedWalletConnectConfig } from '@solana/connector';
2
3
 
3
4
  type Network = 'mainnet' | 'devnet' | 'testnet' | 'localnet';
4
5
  type RpcMap = Record<Network, string[]>;
@@ -21,9 +22,16 @@ type SolanaWrapperProps = {
21
22
  */
22
23
  enableMobile?: boolean;
23
24
  /** * Enable WalletConnect support
24
- * @default true
25
+ * Enable or configure WalletConnect support for QR code and deep-link connections.
26
+ * * **Mobile-First Note:** Setting this to `false` (default) reduces initial bundle size.
27
+ * Enable this if you need to support desktop-to-mobile connections via QR codes.
28
+ * * - `false`: (Default) Disables WalletConnect.
29
+ * - `true`: Enables using `NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID` from your environment.
30
+ * - `object`: Provides manual overrides for `projectId`, `metadata`, etc.
31
+ * * @default false
32
+ * @see https://docs.reown.com/appkit/overview
25
33
  */
26
- walletConnect?: boolean;
34
+ walletConnect?: boolean | SimplifiedWalletConnectConfig;
27
35
  /** * List of default RPC endpoints mapped by network
28
36
  * @default DEFAULT_RPCS
29
37
  */
package/dist/index.js CHANGED
@@ -125,7 +125,7 @@ function SolanaWalletProvider(props) {
125
125
  appUrl,
126
126
  autoConnect = true,
127
127
  enableMobile = true,
128
- walletConnect = true,
128
+ walletConnect = false,
129
129
  additionalWallets = [],
130
130
  coingecko,
131
131
  walletsDisplayConfig
@@ -184,14 +184,13 @@ function SolanaWalletProvider(props) {
184
184
  wallets: walletsDisplayConfig
185
185
  });
186
186
  }, [appName, appOrigin, autoConnect, enableMobile, walletConnect, coingecko]);
187
- const mobile = (0, import_react2.useMemo)(
188
- () => (0, import_react3.getDefaultMobileConfig)({
189
- appName,
190
- appUrl: appOrigin,
191
- network: activeNetwork === "localnet" ? "devnet" : activeNetwork
192
- }),
193
- [appName, appOrigin, activeNetwork]
194
- );
187
+ const mobile = {
188
+ appIdentity: {
189
+ name: appName,
190
+ uri: appOrigin,
191
+ icon: appUrl ? `${appOrigin}/favicon.ico` : void 0
192
+ }
193
+ };
195
194
  return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react3.AppProvider, { connectorConfig, mobile, children });
196
195
  }
197
196