@wallet-ui/react 1.1.0-canary-20250313140452 → 1.1.0-canary-20250313144314

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.
@@ -1,7 +1,10 @@
1
- import React4, { createContext, useContext, useMemo, useState, useEffect, useCallback } from 'react';
1
+ import React10, { createContext, useContext, useMemo, useState, useEffect, useId, useCallback } from 'react';
2
2
  import { createSolanaClient, address } from 'gill';
3
- import { useWallets, uiWalletAccountsAreSame, uiWalletAccountBelongsToUiWallet, getUiWalletAccountStorageKey } from '@wallet-standard/react';
3
+ import { useWallets, uiWalletAccountsAreSame, uiWalletAccountBelongsToUiWallet, useConnect, useDisconnect, getUiWalletAccountStorageKey } from '@wallet-standard/react';
4
4
  export * from '@wallet-standard/react';
5
+ import * as dialog from '@zag-js/dialog';
6
+ import * as menu from '@zag-js/menu';
7
+ import { useMachine, normalizeProps, Portal } from '@zag-js/react';
5
8
  export * from '@wallet-ui/core';
6
9
 
7
10
  // src/solana-client-context.tsx
@@ -14,7 +17,7 @@ function SolanaClientProvider({
14
17
  urlOrMoniker
15
18
  }) {
16
19
  const value = useMemo(() => createSolanaClient({ urlOrMoniker }), [urlOrMoniker]);
17
- return /* @__PURE__ */ React4.createElement(SolanaClientContext.Provider, { value }, children);
20
+ return /* @__PURE__ */ React10.createElement(SolanaClientContext.Provider, { value }, children);
18
21
  }
19
22
  var SolanaClusterContext = createContext({});
20
23
  function useSolanaCluster() {
@@ -72,7 +75,7 @@ function SolanaClusterProvider({ clusters, children }) {
72
75
  }
73
76
  return clusters[0];
74
77
  }, [clusterId, clusters]);
75
- return /* @__PURE__ */ React4.createElement(
78
+ return /* @__PURE__ */ React10.createElement(
76
79
  SolanaClusterContext.Provider,
77
80
  {
78
81
  value: useMemo(
@@ -174,18 +177,189 @@ function SolanaWalletProvider({ children }) {
174
177
  setSelectedWalletAccountInternal(void 0);
175
178
  }
176
179
  }, [selectedWalletAccount, walletAccount]);
177
- return /* @__PURE__ */ React4.createElement(SolanaWalletContext.Provider, { value: useMemo(() => [walletAccount, setSelectedWalletAccount2], [walletAccount]) }, children);
180
+ return /* @__PURE__ */ React10.createElement(SolanaWalletContext.Provider, { value: useMemo(() => [walletAccount, setSelectedWalletAccount2], [walletAccount]) }, children);
181
+ }
182
+ var SolanaWalletUiContext = React10.createContext(
183
+ {}
184
+ );
185
+ function useSolanaWalletUi() {
186
+ return React10.useContext(SolanaWalletUiContext);
187
+ }
188
+
189
+ // src/solana-wallet-ui-provider.tsx
190
+ function SolanaWalletUiProvider(props) {
191
+ const wallets = useWallets();
192
+ const [walletAccount, setWalletAccount] = useSolanaWallet();
193
+ const [wallet, setWallet] = useState(void 0);
194
+ const dialogService = useMachine(dialog.machine, { id: useId(), modal: true });
195
+ const dialogApi = dialog.connect(dialogService, normalizeProps);
196
+ const menuService = useMachine(menu.machine, { id: useId() });
197
+ const menuApi = menu.connect(menuService, normalizeProps);
198
+ const [connected, setConnected] = useState(false);
199
+ function change() {
200
+ menuService.send({ type: "CLOSE" });
201
+ dialogService.send({ type: "OPEN" });
202
+ }
203
+ function connectAccount(wallet2, account) {
204
+ console.log("connectAccount", account);
205
+ setWalletAccount(account);
206
+ setWallet(wallet2);
207
+ setConnected(true);
208
+ dialogService.send({ type: "CLOSE" });
209
+ }
210
+ async function copy() {
211
+ if (!walletAccount) {
212
+ return;
213
+ }
214
+ await navigator.clipboard.writeText(walletAccount.address);
215
+ menuService.send({ type: "CLOSE" });
216
+ dialogService.send({ type: "CLOSE" });
217
+ }
218
+ function disconnect() {
219
+ setConnected(false);
220
+ setWalletAccount(void 0);
221
+ dialogService.send({ type: "CLOSE" });
222
+ menuService.send({ type: "CLOSE" });
223
+ }
224
+ const value = {
225
+ change,
226
+ connectAccount,
227
+ connected: connected && walletAccount !== void 0,
228
+ copy,
229
+ dialogApi,
230
+ disconnect,
231
+ menuApi,
232
+ wallet,
233
+ walletAccount,
234
+ wallets: useMemo(() => wallets.filter((wallet2) => wallet2.chains.some((i) => i.startsWith("solana:"))), [wallets])
235
+ };
236
+ return /* @__PURE__ */ React10.createElement(SolanaWalletUiContext.Provider, { value }, props.children);
178
237
  }
179
238
 
180
239
  // src/solana-provider.tsx
181
240
  function SolanaProvider({ clusters, children }) {
182
- return /* @__PURE__ */ React4.createElement(SolanaClusterProvider, { clusters }, /* @__PURE__ */ React4.createElement(SolanaClientProviderLoader, null, /* @__PURE__ */ React4.createElement(SolanaWalletProvider, null, children)));
241
+ return /* @__PURE__ */ React10.createElement(SolanaClusterProvider, { clusters }, /* @__PURE__ */ React10.createElement(SolanaClientProviderLoader, null, /* @__PURE__ */ React10.createElement(SolanaWalletProvider, null, /* @__PURE__ */ React10.createElement(SolanaWalletUiProvider, null, children))));
183
242
  }
184
243
  function SolanaClientProviderLoader({ children }) {
185
244
  const { cluster } = useSolanaCluster();
186
- return /* @__PURE__ */ React4.createElement(SolanaClientProvider, { urlOrMoniker: cluster.urlOrMoniker }, children);
245
+ return /* @__PURE__ */ React10.createElement(SolanaClientProvider, { urlOrMoniker: cluster.urlOrMoniker }, children);
246
+ }
247
+ function SolanaWalletUiDialogTrigger(props) {
248
+ const { dialogApi } = useSolanaWalletUi();
249
+ console.log("SolanaWalletUiDialogTrigger", dialogApi);
250
+ return /* @__PURE__ */ React10.createElement("button", { ...props, ...dialogApi.getTriggerProps() }, "Select Wallet");
251
+ }
252
+ function SolanaWalletUiDropdown() {
253
+ const { change, connected, copy, disconnect, menuApi: api, wallet } = useSolanaWalletUi();
254
+ const menuItems = [
255
+ {
256
+ handler: copy,
257
+ label: "Copy Address",
258
+ value: "copy"
259
+ },
260
+ {
261
+ handler: change,
262
+ label: "Change Wallet",
263
+ value: "change"
264
+ },
265
+ {
266
+ handler: disconnect,
267
+ label: "Disconnect",
268
+ value: "disconnect"
269
+ }
270
+ ];
271
+ const trigger = /* @__PURE__ */ React10.createElement(
272
+ AppMenuButton,
273
+ {
274
+ ...api.getTriggerProps(),
275
+ className: `wallet-trigger ${connected ? "connected" : ""}`,
276
+ "data-part": "trigger"
277
+ },
278
+ connected ? wallet?.name : "Select Wallet",
279
+ /* @__PURE__ */ React10.createElement("span", { className: "wallet-actions" }, /* @__PURE__ */ React10.createElement("span", { ...api.getIndicatorProps(), className: "indicator" }, "\u25BE"))
280
+ );
281
+ return /* @__PURE__ */ React10.createElement("div", { className: "wallet-menu" }, trigger, /* @__PURE__ */ React10.createElement("div", { ...api.getPositionerProps(), className: "wallet-positioner" }, /* @__PURE__ */ React10.createElement("ul", { ...api.getContentProps(), className: "wallet-content", "data-part": "content" }, menuItems.map((item) => /* @__PURE__ */ React10.createElement(
282
+ "li",
283
+ {
284
+ key: item.value,
285
+ ...api.getItemProps({ value: item.value }),
286
+ className: "wallet-item",
287
+ "data-part": "item",
288
+ onClick: () => {
289
+ if (item.disabled) {
290
+ return;
291
+ }
292
+ void item.handler();
293
+ }
294
+ },
295
+ item.label
296
+ )))));
297
+ }
298
+ function AppMenuButton(props) {
299
+ return /* @__PURE__ */ React10.createElement("button", { ...props }, props.children);
300
+ }
301
+
302
+ // src/solana-wallet-ui-button.tsx
303
+ function SolanaWalletUiButton() {
304
+ const { connected } = useSolanaWalletUi();
305
+ return connected ? /* @__PURE__ */ React10.createElement(SolanaWalletUiDropdown, null) : /* @__PURE__ */ React10.createElement(SolanaWalletUiDialogTrigger, null);
306
+ }
307
+ function SolanaWalletUiDialog({ description, title }) {
308
+ const { dialogApi: api, connected, disconnect } = useSolanaWalletUi();
309
+ if (!api) {
310
+ console.log("no api");
311
+ return null;
312
+ }
313
+ if (!api.open) {
314
+ console.log("no api.open");
315
+ return null;
316
+ }
317
+ return /* @__PURE__ */ React10.createElement(Portal, null, /* @__PURE__ */ React10.createElement("div", { className: "dialog", ...api.getBackdropProps() }), /* @__PURE__ */ React10.createElement("div", { className: "dialog", ...api.getPositionerProps() }, /* @__PURE__ */ React10.createElement("div", { className: "dialog", ...api.getContentProps() }, title ? /* @__PURE__ */ React10.createElement("h2", { className: "dialog", ...api.getTitleProps() }, title) : null, description ? /* @__PURE__ */ React10.createElement("p", { className: "dialog", ...api.getDescriptionProps() }, description) : null, /* @__PURE__ */ React10.createElement("div", { style: { marginTop: "32px" } }, /* @__PURE__ */ React10.createElement(SolanaWalletUiDialogList, null), connected ? /* @__PURE__ */ React10.createElement("button", { onClick: disconnect }, "Disconnect") : null), /* @__PURE__ */ React10.createElement("button", { className: "dialog", ...api.getCloseTriggerProps() }, "\xD7"))));
318
+ }
319
+ function SolanaWalletUiDialogList() {
320
+ const { wallets } = useSolanaWalletUi();
321
+ return /* @__PURE__ */ React10.createElement("div", { style: { display: "flex", flexDirection: "column", gap: "16px" } }, wallets.map((item, index) => /* @__PURE__ */ React10.createElement(SolanaWalletUiDialogListItem, { key: `${item.name}-${index}`, wallet: item })));
322
+ }
323
+ function SolanaWalletUiDialogListItem({ wallet }) {
324
+ const [isConnecting, connect3] = useConnect(wallet);
325
+ const [isDisconnecting, disconnect] = useDisconnect(wallet);
326
+ const { connectAccount, walletAccount } = useSolanaWalletUi();
327
+ const accounts = wallet.accounts ?? [];
328
+ const isConnected = wallet.accounts.length > 0;
329
+ const isPending = isConnecting || isDisconnecting;
330
+ if (isPending) {
331
+ return /* @__PURE__ */ React10.createElement("div", null, "Pending...");
332
+ }
333
+ return /* @__PURE__ */ React10.createElement("div", { style: { display: "flex", flexDirection: "column", gap: "8px" } }, /* @__PURE__ */ React10.createElement("div", { style: { display: "flex", justifyContent: "space-between" } }, /* @__PURE__ */ React10.createElement("div", { style: { alignItems: "center", display: "flex", gap: "8px" } }, /* @__PURE__ */ React10.createElement("img", { src: wallet.icon, alt: wallet.name, style: { height: 32 } }), /* @__PURE__ */ React10.createElement("span", { style: { fontSize: "1rem", fontWeight: "500" } }, wallet.name)), isConnected ? /* @__PURE__ */ React10.createElement(
334
+ "button",
335
+ {
336
+ disabled: isPending,
337
+ onClick: () => {
338
+ void disconnect();
339
+ }
340
+ },
341
+ "Disconnect"
342
+ ) : /* @__PURE__ */ React10.createElement(
343
+ "button",
344
+ {
345
+ disabled: isPending,
346
+ onClick: () => {
347
+ void connect3();
348
+ }
349
+ },
350
+ "Connect"
351
+ )), accounts.map((item, index) => /* @__PURE__ */ React10.createElement("div", { key: `${item.address}-${index}` }, /* @__PURE__ */ React10.createElement(
352
+ "button",
353
+ {
354
+ disabled: item.address === walletAccount?.address,
355
+ onClick: () => {
356
+ void connectAccount(wallet, item);
357
+ }
358
+ },
359
+ item.address
360
+ ))));
187
361
  }
188
362
 
189
- export { SolanaClientContext, SolanaClientProvider, SolanaClusterContext, SolanaClusterProvider, SolanaProvider, SolanaWalletContext, SolanaWalletProvider, useSolanaClient, useSolanaCluster, useSolanaWallet, useSolanaWalletAddress };
363
+ export { AppMenuButton, SolanaClientContext, SolanaClientProvider, SolanaClusterContext, SolanaClusterProvider, SolanaProvider, SolanaWalletContext, SolanaWalletProvider, SolanaWalletUiButton, SolanaWalletUiContext, SolanaWalletUiDialog, SolanaWalletUiDialogList, SolanaWalletUiDialogListItem, SolanaWalletUiDialogTrigger, SolanaWalletUiDropdown, SolanaWalletUiProvider, useSolanaClient, useSolanaCluster, useSolanaWallet, useSolanaWalletAddress, useSolanaWalletUi };
190
364
  //# sourceMappingURL=index.node.mjs.map
191
365
  //# sourceMappingURL=index.node.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/solana-client-context.tsx","../src/solana-client-provider.tsx","../src/solana-cluster-context.tsx","../src/use-local-storage.ts","../src/solana-cluster-provider.tsx","../src/solana-wallet-context.tsx","../src/solana-wallet-provider.tsx","../src/solana-provider.tsx"],"names":["React","createContext","useContext","useMemo","cluster","STORAGE_KEY","useState","setSelectedWalletAccount"],"mappings":"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","file":"index.node.mjs","sourcesContent":["import { SolanaClient } from '@wallet-ui/core';\nimport { createContext, useContext } from 'react';\n\nexport const SolanaClientContext = createContext<SolanaClient>({} as SolanaClient);\n\nexport function useSolanaClient() {\n return useContext(SolanaClientContext);\n}\n","import { SolanaClientUrlOrMoniker } from '@wallet-ui/core';\nimport { createSolanaClient } from 'gill';\nimport React, { ReactNode, useMemo } from 'react';\n\nimport { SolanaClientContext } from './solana-client-context';\n\nexport function SolanaClientProvider({\n children,\n urlOrMoniker,\n}: {\n children: ReactNode;\n urlOrMoniker: SolanaClientUrlOrMoniker;\n}) {\n const value = useMemo(() => createSolanaClient({ urlOrMoniker }), [urlOrMoniker]);\n\n return <SolanaClientContext.Provider value={value}>{children}</SolanaClientContext.Provider>;\n}\n","import { SolanaCluster } from '@wallet-ui/core';\nimport { createContext, useContext } from 'react';\n\nexport type SolanaClusterContextProps = Readonly<{\n cluster: SolanaCluster;\n clusters: SolanaCluster[];\n setCluster?(cluster: `solana:${string}`): void;\n}>;\n\nexport const SolanaClusterContext = createContext<SolanaClusterContextProps>({} as SolanaClusterContextProps);\n\nexport function useSolanaCluster() {\n return useContext(SolanaClusterContext);\n}\n","import { useCallback, useState } from 'react';\n\nexport function useLocalStorage<T>(key: string, initialValue: T) {\n // State to store our value\n const [storedValue, setStoredValue] = useState<T>(() => {\n try {\n // Check if we're on the client side\n if (typeof window === 'undefined') {\n return initialValue;\n }\n\n const item = window.localStorage.getItem(key);\n // For wallet-related data, validate the stored value\n if (key.includes('wallet') || key.includes('account')) {\n // Return initial value if stored data might be stale\n return initialValue;\n }\n return item ? JSON.parse(item) : initialValue;\n } catch (error) {\n console.warn(`Error reading localStorage key \"${key}\":`, error);\n return initialValue;\n }\n });\n\n // Return a wrapped version of useState's setter function that persists the new value to localStorage\n const setValue = useCallback(\n (value: T | ((val: T) => T)) => {\n try {\n // Allow value to be a function so we have same API as useState\n const valueToStore = value instanceof Function ? value(storedValue) : value;\n\n // Save state\n setStoredValue(valueToStore);\n\n // Save to localStorage\n if (typeof window !== 'undefined') {\n if (valueToStore === undefined || valueToStore === null) {\n window.localStorage.removeItem(key);\n } else {\n window.localStorage.setItem(key, JSON.stringify(valueToStore));\n }\n }\n } catch (error) {\n console.warn(`Error setting localStorage key \"${key}\":`, error);\n }\n },\n [key, storedValue],\n );\n\n return [storedValue, setValue] as const;\n}\n","import { SolanaCluster } from '@wallet-ui/core';\nimport React, { ReactNode, useMemo } from 'react';\n\nimport { SolanaClusterContext } from './solana-cluster-context';\nimport { useLocalStorage } from './use-local-storage';\n\nconst STORAGE_KEY = 'placeholder:selected-cluster';\n\nexport function SolanaClusterProvider({ clusters, children }: { children: ReactNode, clusters: SolanaCluster[]; }) {\n const [clusterId, setClusterId] = useLocalStorage(STORAGE_KEY, 'solana:devnet');\n\n if (!clusters.length) {\n throw new Error('No clusters provided');\n }\n\n const cluster = useMemo<SolanaCluster>(() => {\n for (const cluster of clusters) {\n if (cluster.id === clusterId) {\n return cluster;\n }\n }\n return clusters[0];\n }, [clusterId, clusters]);\n\n return (\n <SolanaClusterContext.Provider\n value={useMemo(\n () => ({\n cluster,\n clusters,\n setCluster(cluster) {\n localStorage.setItem(STORAGE_KEY, cluster);\n setClusterId(cluster);\n },\n }),\n [cluster, clusters],\n )}\n >\n {children}\n </SolanaClusterContext.Provider>\n );\n}\n","import type { UiWalletAccount } from '@wallet-standard/react';\nimport { address } from 'gill';\nimport { createContext, Dispatch, SetStateAction, useContext } from 'react';\n\nexport type SelectedWalletAccountState = UiWalletAccount | undefined;\n\nexport const SolanaWalletContext = createContext<\n readonly [\n selectedWalletAccount: SelectedWalletAccountState,\n setSelectedWalletAccount: Dispatch<SetStateAction<SelectedWalletAccountState>>,\n ]\n>([\n undefined /* selectedWalletAccount */,\n function setSelectedWalletAccount() {\n /* empty */\n },\n]);\n\nexport function useSolanaWallet() {\n return useContext(SolanaWalletContext);\n}\n\nexport function useSolanaWalletAddress() {\n const [wallet] = useSolanaWallet();\n if (!wallet?.address) {\n return null;\n }\n return address(wallet.address);\n}\n","import {\n getUiWalletAccountStorageKey,\n UiWallet,\n uiWalletAccountBelongsToUiWallet,\n uiWalletAccountsAreSame,\n useWallets,\n} from '@wallet-standard/react';\nimport React, { Dispatch, ReactNode, SetStateAction, useEffect, useMemo, useState } from 'react';\n\nimport { SelectedWalletAccountState, SolanaWalletContext } from './solana-wallet-context';\nimport { useLocalStorage } from './use-local-storage';\n\nconst STORAGE_KEY = 'placeholder:selected-wallet-and-address';\n\nlet wasSetterInvoked = false;\n\nfunction getSavedWalletAccount(wallets: readonly UiWallet[], savedWalletNameAndAddress: string | null) {\n if (wasSetterInvoked) {\n // After the user makes an explicit choice of wallet, stop trying to auto-select the\n // saved wallet, if and when it appears.\n return;\n }\n if (!savedWalletNameAndAddress || typeof savedWalletNameAndAddress !== 'string') {\n return;\n }\n const [savedWalletName, savedAccountAddress] = savedWalletNameAndAddress.split(':');\n if (!savedWalletName || !savedAccountAddress) {\n return;\n }\n for (const wallet of wallets) {\n if (wallet.name === savedWalletName) {\n for (const account of wallet.accounts) {\n if (account.address === savedAccountAddress) {\n return account;\n }\n }\n }\n }\n}\n\n/**\n * Saves the selected wallet account's storage key to the browser's local storage. In future\n * sessions it will try to return that same wallet account, or at least one from the same brand of\n * wallet if the wallet from which it came is still in the Wallet Standard registry.\n */\nexport function SolanaWalletProvider({ children }: { children: ReactNode }) {\n const [storedKey, setStoredKey] = useLocalStorage<string | null>(STORAGE_KEY, null);\n const wallets = useWallets();\n const [selectedWalletAccount, setSelectedWalletAccountInternal] = useState<SelectedWalletAccountState>(() =>\n getSavedWalletAccount(wallets, storedKey),\n );\n const setSelectedWalletAccount: Dispatch<SetStateAction<SelectedWalletAccountState>> = setStateAction => {\n setSelectedWalletAccountInternal(prevSelectedWalletAccount => {\n wasSetterInvoked = true;\n const nextWalletAccount =\n typeof setStateAction === 'function' ? setStateAction(prevSelectedWalletAccount) : setStateAction;\n const accountKey = nextWalletAccount ? getUiWalletAccountStorageKey(nextWalletAccount) : undefined;\n if (accountKey) {\n setStoredKey(accountKey);\n } else {\n setStoredKey(null);\n }\n return nextWalletAccount;\n });\n };\n useEffect(() => {\n const savedWalletAccount = getSavedWalletAccount(wallets, storedKey);\n if (savedWalletAccount) {\n setSelectedWalletAccountInternal(savedWalletAccount);\n }\n }, [wallets]);\n const walletAccount = useMemo(() => {\n if (selectedWalletAccount) {\n for (const uiWallet of wallets) {\n for (const uiWalletAccount of uiWallet.accounts) {\n if (uiWalletAccountsAreSame(selectedWalletAccount, uiWalletAccount)) {\n return uiWalletAccount;\n }\n }\n if (uiWalletAccountBelongsToUiWallet(selectedWalletAccount, uiWallet) && uiWallet.accounts[0]) {\n // If the selected account belongs to this connected wallet, at least, then\n // select one of its accounts.\n return uiWallet.accounts[0];\n }\n }\n }\n }, [selectedWalletAccount, wallets]);\n useEffect(() => {\n // If there is a selected wallet account but the wallet to which it belongs has since\n // disconnected, clear the selected wallet.\n if (selectedWalletAccount && !walletAccount) {\n setSelectedWalletAccountInternal(undefined);\n }\n }, [selectedWalletAccount, walletAccount]);\n return (\n <SolanaWalletContext.Provider value={useMemo(() => [walletAccount, setSelectedWalletAccount], [walletAccount])}>\n {children}\n </SolanaWalletContext.Provider>\n );\n}\n","import { SolanaCluster } from '@wallet-ui/core';\nimport React, { ReactNode } from 'react';\n\nimport { SolanaClientProvider } from './solana-client-provider';\nimport { useSolanaCluster } from './solana-cluster-context';\nimport { SolanaClusterProvider } from './solana-cluster-provider';\nimport { SolanaWalletProvider } from './solana-wallet-provider';\n\nexport function SolanaProvider({ clusters, children }: { children: ReactNode; clusters: SolanaCluster[] }) {\n return (\n <SolanaClusterProvider clusters={clusters}>\n <SolanaClientProviderLoader>\n <SolanaWalletProvider>{children}</SolanaWalletProvider>\n </SolanaClientProviderLoader>\n </SolanaClusterProvider>\n );\n}\n\nfunction SolanaClientProviderLoader({ children }: { children: ReactNode }) {\n const { cluster } = useSolanaCluster();\n\n return <SolanaClientProvider urlOrMoniker={cluster.urlOrMoniker}>{children}</SolanaClientProvider>;\n}\n"]}
1
+ {"version":3,"sources":["../src/solana-client-context.tsx","../src/solana-client-provider.tsx","../src/solana-cluster-context.tsx","../src/use-local-storage.ts","../src/solana-cluster-provider.tsx","../src/solana-wallet-context.tsx","../src/solana-wallet-provider.tsx","../src/solana-wallet-ui-context.tsx","../src/solana-wallet-ui-provider.tsx","../src/solana-provider.tsx","../src/solana-wallet-ui-dialog-trigger.tsx","../src/solana-wallet-ui-dropdown.tsx","../src/solana-wallet-ui-button.tsx","../src/solana-wallet-ui-dialog.tsx"],"names":["React","createContext","useContext","useMemo","cluster","STORAGE_KEY","useState","setSelectedWalletAccount","useWallets","wallet","connect"],"mappings":"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","file":"index.node.mjs","sourcesContent":["import { SolanaClient } from '@wallet-ui/core';\nimport { createContext, useContext } from 'react';\n\nexport const SolanaClientContext = createContext<SolanaClient>({} as SolanaClient);\n\nexport function useSolanaClient() {\n return useContext(SolanaClientContext);\n}\n","import { SolanaClientUrlOrMoniker } from '@wallet-ui/core';\nimport { createSolanaClient } from 'gill';\nimport React, { ReactNode, useMemo } from 'react';\n\nimport { SolanaClientContext } from './solana-client-context';\n\nexport function SolanaClientProvider({\n children,\n urlOrMoniker,\n}: {\n children: ReactNode;\n urlOrMoniker: SolanaClientUrlOrMoniker;\n}) {\n const value = useMemo(() => createSolanaClient({ urlOrMoniker }), [urlOrMoniker]);\n\n return <SolanaClientContext.Provider value={value}>{children}</SolanaClientContext.Provider>;\n}\n","import { SolanaCluster } from '@wallet-ui/core';\nimport { createContext, useContext } from 'react';\n\nexport type SolanaClusterContextProps = Readonly<{\n cluster: SolanaCluster;\n clusters: SolanaCluster[];\n setCluster?(cluster: `solana:${string}`): void;\n}>;\n\nexport const SolanaClusterContext = createContext<SolanaClusterContextProps>({} as SolanaClusterContextProps);\n\nexport function useSolanaCluster() {\n return useContext(SolanaClusterContext);\n}\n","import { useCallback, useState } from 'react';\n\nexport function useLocalStorage<T>(key: string, initialValue: T) {\n // State to store our value\n const [storedValue, setStoredValue] = useState<T>(() => {\n try {\n // Check if we're on the client side\n if (typeof window === 'undefined') {\n return initialValue;\n }\n\n const item = window.localStorage.getItem(key);\n // For wallet-related data, validate the stored value\n if (key.includes('wallet') || key.includes('account')) {\n // Return initial value if stored data might be stale\n return initialValue;\n }\n return item ? JSON.parse(item) : initialValue;\n } catch (error) {\n console.warn(`Error reading localStorage key \"${key}\":`, error);\n return initialValue;\n }\n });\n\n // Return a wrapped version of useState's setter function that persists the new value to localStorage\n const setValue = useCallback(\n (value: T | ((val: T) => T)) => {\n try {\n // Allow value to be a function so we have same API as useState\n const valueToStore = value instanceof Function ? value(storedValue) : value;\n\n // Save state\n setStoredValue(valueToStore);\n\n // Save to localStorage\n if (typeof window !== 'undefined') {\n if (valueToStore === undefined || valueToStore === null) {\n window.localStorage.removeItem(key);\n } else {\n window.localStorage.setItem(key, JSON.stringify(valueToStore));\n }\n }\n } catch (error) {\n console.warn(`Error setting localStorage key \"${key}\":`, error);\n }\n },\n [key, storedValue],\n );\n\n return [storedValue, setValue] as const;\n}\n","import { SolanaCluster } from '@wallet-ui/core';\nimport React, { ReactNode, useMemo } from 'react';\n\nimport { SolanaClusterContext } from './solana-cluster-context';\nimport { useLocalStorage } from './use-local-storage';\n\nconst STORAGE_KEY = 'placeholder:selected-cluster';\n\nexport function SolanaClusterProvider({ clusters, children }: { children: ReactNode, clusters: SolanaCluster[]; }) {\n const [clusterId, setClusterId] = useLocalStorage(STORAGE_KEY, 'solana:devnet');\n\n if (!clusters.length) {\n throw new Error('No clusters provided');\n }\n\n const cluster = useMemo<SolanaCluster>(() => {\n for (const cluster of clusters) {\n if (cluster.id === clusterId) {\n return cluster;\n }\n }\n return clusters[0];\n }, [clusterId, clusters]);\n\n return (\n <SolanaClusterContext.Provider\n value={useMemo(\n () => ({\n cluster,\n clusters,\n setCluster(cluster) {\n localStorage.setItem(STORAGE_KEY, cluster);\n setClusterId(cluster);\n },\n }),\n [cluster, clusters],\n )}\n >\n {children}\n </SolanaClusterContext.Provider>\n );\n}\n","import type { UiWalletAccount } from '@wallet-standard/react';\nimport { address } from 'gill';\nimport { createContext, Dispatch, SetStateAction, useContext } from 'react';\n\nexport type SelectedWalletAccountState = UiWalletAccount | undefined;\n\nexport const SolanaWalletContext = createContext<\n readonly [\n selectedWalletAccount: SelectedWalletAccountState,\n setSelectedWalletAccount: Dispatch<SetStateAction<SelectedWalletAccountState>>,\n ]\n>([\n undefined /* selectedWalletAccount */,\n function setSelectedWalletAccount() {\n /* empty */\n },\n]);\n\nexport function useSolanaWallet() {\n return useContext(SolanaWalletContext);\n}\n\nexport function useSolanaWalletAddress() {\n const [wallet] = useSolanaWallet();\n if (!wallet?.address) {\n return null;\n }\n return address(wallet.address);\n}\n","import {\n getUiWalletAccountStorageKey,\n UiWallet,\n uiWalletAccountBelongsToUiWallet,\n uiWalletAccountsAreSame,\n useWallets,\n} from '@wallet-standard/react';\nimport React, { Dispatch, ReactNode, SetStateAction, useEffect, useMemo, useState } from 'react';\n\nimport { SelectedWalletAccountState, SolanaWalletContext } from './solana-wallet-context';\nimport { useLocalStorage } from './use-local-storage';\n\nconst STORAGE_KEY = 'placeholder:selected-wallet-and-address';\n\nlet wasSetterInvoked = false;\n\nfunction getSavedWalletAccount(wallets: readonly UiWallet[], savedWalletNameAndAddress: string | null) {\n if (wasSetterInvoked) {\n // After the user makes an explicit choice of wallet, stop trying to auto-select the\n // saved wallet, if and when it appears.\n return;\n }\n if (!savedWalletNameAndAddress || typeof savedWalletNameAndAddress !== 'string') {\n return;\n }\n const [savedWalletName, savedAccountAddress] = savedWalletNameAndAddress.split(':');\n if (!savedWalletName || !savedAccountAddress) {\n return;\n }\n for (const wallet of wallets) {\n if (wallet.name === savedWalletName) {\n for (const account of wallet.accounts) {\n if (account.address === savedAccountAddress) {\n return account;\n }\n }\n }\n }\n}\n\n/**\n * Saves the selected wallet account's storage key to the browser's local storage. In future\n * sessions it will try to return that same wallet account, or at least one from the same brand of\n * wallet if the wallet from which it came is still in the Wallet Standard registry.\n */\nexport function SolanaWalletProvider({ children }: { children: ReactNode }) {\n const [storedKey, setStoredKey] = useLocalStorage<string | null>(STORAGE_KEY, null);\n const wallets = useWallets();\n const [selectedWalletAccount, setSelectedWalletAccountInternal] = useState<SelectedWalletAccountState>(() =>\n getSavedWalletAccount(wallets, storedKey),\n );\n const setSelectedWalletAccount: Dispatch<SetStateAction<SelectedWalletAccountState>> = setStateAction => {\n setSelectedWalletAccountInternal(prevSelectedWalletAccount => {\n wasSetterInvoked = true;\n const nextWalletAccount =\n typeof setStateAction === 'function' ? setStateAction(prevSelectedWalletAccount) : setStateAction;\n const accountKey = nextWalletAccount ? getUiWalletAccountStorageKey(nextWalletAccount) : undefined;\n if (accountKey) {\n setStoredKey(accountKey);\n } else {\n setStoredKey(null);\n }\n return nextWalletAccount;\n });\n };\n useEffect(() => {\n const savedWalletAccount = getSavedWalletAccount(wallets, storedKey);\n if (savedWalletAccount) {\n setSelectedWalletAccountInternal(savedWalletAccount);\n }\n }, [wallets]);\n const walletAccount = useMemo(() => {\n if (selectedWalletAccount) {\n for (const uiWallet of wallets) {\n for (const uiWalletAccount of uiWallet.accounts) {\n if (uiWalletAccountsAreSame(selectedWalletAccount, uiWalletAccount)) {\n return uiWalletAccount;\n }\n }\n if (uiWalletAccountBelongsToUiWallet(selectedWalletAccount, uiWallet) && uiWallet.accounts[0]) {\n // If the selected account belongs to this connected wallet, at least, then\n // select one of its accounts.\n return uiWallet.accounts[0];\n }\n }\n }\n }, [selectedWalletAccount, wallets]);\n useEffect(() => {\n // If there is a selected wallet account but the wallet to which it belongs has since\n // disconnected, clear the selected wallet.\n if (selectedWalletAccount && !walletAccount) {\n setSelectedWalletAccountInternal(undefined);\n }\n }, [selectedWalletAccount, walletAccount]);\n return (\n <SolanaWalletContext.Provider value={useMemo(() => [walletAccount, setSelectedWalletAccount], [walletAccount])}>\n {children}\n </SolanaWalletContext.Provider>\n );\n}\n","import { UiWallet, UiWalletAccount } from '@wallet-standard/react';\nimport * as dialog from '@zag-js/dialog';\nimport * as menu from '@zag-js/menu';\nimport React from 'react';\n\nexport interface SolanaWalletUiProviderContext {\n change: () => void;\n connectAccount: (wallet: UiWallet | undefined, account: UiWalletAccount | undefined) => void;\n connected: boolean;\n copy: () => Promise<void>;\n dialogApi: ReturnType<typeof dialog.connect>;\n disconnect: () => void;\n menuApi: ReturnType<typeof menu.connect>;\n wallet: UiWallet | undefined;\n walletAccount: UiWalletAccount | undefined;\n wallets: readonly UiWallet[];\n}\n\nexport const SolanaWalletUiContext = React.createContext<SolanaWalletUiProviderContext>(\n {} as SolanaWalletUiProviderContext,\n);\n\nexport function useSolanaWalletUi() {\n return React.useContext(SolanaWalletUiContext);\n}\n","import { UiWallet, UiWalletAccount, useWallets } from '@wallet-standard/react';\nimport * as dialog from '@zag-js/dialog';\nimport * as menu from '@zag-js/menu';\nimport { normalizeProps, useMachine } from '@zag-js/react';\nimport React, { ReactNode, useId, useMemo, useState } from 'react';\n\nimport { useSolanaWallet } from './solana-wallet-context';\nimport { SolanaWalletUiContext, SolanaWalletUiProviderContext } from './solana-wallet-ui-context';\n\nexport function SolanaWalletUiProvider(props: { children: ReactNode }) {\n const wallets = useWallets();\n const [walletAccount, setWalletAccount] = useSolanaWallet();\n const [wallet, setWallet] = useState<UiWallet | undefined>(undefined);\n const dialogService = useMachine(dialog.machine, { id: useId(), modal: true });\n const dialogApi = dialog.connect(dialogService, normalizeProps);\n const menuService = useMachine(menu.machine, { id: useId() });\n const menuApi = menu.connect(menuService, normalizeProps);\n\n const [connected, setConnected] = useState(false);\n\n function change() {\n menuService.send({ type: 'CLOSE' });\n dialogService.send({ type: 'OPEN' });\n }\n\n function connectAccount(wallet: UiWallet | undefined, account: UiWalletAccount | undefined) {\n console.log('connectAccount', account);\n setWalletAccount(account);\n setWallet(wallet);\n setConnected(true);\n dialogService.send({ type: 'CLOSE' });\n }\n\n async function copy() {\n if (!walletAccount) {\n return;\n }\n await navigator.clipboard.writeText(walletAccount.address);\n menuService.send({ type: 'CLOSE' });\n dialogService.send({ type: 'CLOSE' });\n }\n\n function disconnect() {\n setConnected(false);\n setWalletAccount(undefined);\n dialogService.send({ type: 'CLOSE' });\n menuService.send({ type: 'CLOSE' });\n }\n\n const value: SolanaWalletUiProviderContext = {\n change,\n connectAccount,\n connected: connected && walletAccount !== undefined,\n copy,\n dialogApi,\n disconnect,\n menuApi,\n wallet,\n walletAccount,\n wallets: useMemo(() => wallets.filter(wallet => wallet.chains.some(i => i.startsWith('solana:'))), [wallets]),\n };\n\n return <SolanaWalletUiContext.Provider value={value}>{props.children}</SolanaWalletUiContext.Provider>;\n}\n","import { SolanaCluster } from '@wallet-ui/core';\nimport React, { ReactNode } from 'react';\n\nimport { SolanaClientProvider } from './solana-client-provider';\nimport { useSolanaCluster } from './solana-cluster-context';\nimport { SolanaClusterProvider } from './solana-cluster-provider';\nimport { SolanaWalletProvider } from './solana-wallet-provider';\nimport { SolanaWalletUiProvider } from './solana-wallet-ui-provider';\n\nexport function SolanaProvider({ clusters, children }: { children: ReactNode; clusters: SolanaCluster[] }) {\n return (\n <SolanaClusterProvider clusters={clusters}>\n <SolanaClientProviderLoader>\n <SolanaWalletProvider>\n <SolanaWalletUiProvider>{children}</SolanaWalletUiProvider>\n </SolanaWalletProvider>\n </SolanaClientProviderLoader>\n </SolanaClusterProvider>\n );\n}\n\nfunction SolanaClientProviderLoader({ children }: { children: ReactNode }) {\n const { cluster } = useSolanaCluster();\n\n return <SolanaClientProvider urlOrMoniker={cluster.urlOrMoniker}>{children}</SolanaClientProvider>;\n}\n","import React, { ButtonHTMLAttributes } from 'react';\n\nimport { useSolanaWalletUi } from './solana-wallet-ui-context';\n\nexport type WalletUiDialogTriggerProps = ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport function SolanaWalletUiDialogTrigger(props: WalletUiDialogTriggerProps) {\n const { dialogApi } = useSolanaWalletUi();\n\n console.log('SolanaWalletUiDialogTrigger', dialogApi);\n return (\n <button {...props} {...dialogApi.getTriggerProps()}>\n Select Wallet\n </button>\n );\n}\n","import './solana-wallet-ui-dropdown.css';\n\nimport React, { ButtonHTMLAttributes } from 'react';\n\nimport { useSolanaWalletUi } from './solana-wallet-ui-context';\n\nexport interface AppMenuItem {\n disabled?: boolean;\n handler: () => Promise<void> | void;\n label: string;\n value: string;\n}\n\nexport function SolanaWalletUiDropdown() {\n const { change, connected, copy, disconnect, menuApi: api, wallet } = useSolanaWalletUi();\n\n const menuItems: AppMenuItem[] = [\n {\n handler: copy,\n label: 'Copy Address',\n value: 'copy',\n },\n {\n handler: change,\n label: 'Change Wallet',\n value: 'change',\n },\n {\n handler: disconnect,\n label: 'Disconnect',\n value: 'disconnect',\n },\n ];\n\n const trigger = (\n <AppMenuButton\n {...api.getTriggerProps()}\n className={`wallet-trigger ${connected ? 'connected' : ''}`}\n data-part=\"trigger\"\n >\n {connected ? wallet?.name : 'Select Wallet'}\n <span className=\"wallet-actions\">\n <span {...api.getIndicatorProps()} className=\"indicator\">\n ▾\n </span>\n </span>\n </AppMenuButton>\n );\n\n return (\n <div className=\"wallet-menu\">\n {trigger}\n <div {...api.getPositionerProps()} className=\"wallet-positioner\">\n <ul {...api.getContentProps()} className=\"wallet-content\" data-part=\"content\">\n {menuItems.map(item => (\n <li\n key={item.value}\n {...api.getItemProps({ value: item.value })}\n className=\"wallet-item\"\n data-part=\"item\"\n onClick={() => {\n if (item.disabled) {\n return;\n }\n void item.handler();\n }}\n >\n {item.label}\n </li>\n ))}\n </ul>\n </div>\n </div>\n );\n}\n\nexport function AppMenuButton(props: ButtonHTMLAttributes<HTMLButtonElement>) {\n return <button {...props}>{props.children}</button>;\n}\n","import React from 'react';\n\nimport { useSolanaWalletUi } from './solana-wallet-ui-context';\nimport { SolanaWalletUiDialogTrigger } from './solana-wallet-ui-dialog-trigger';\nimport { SolanaWalletUiDropdown } from './solana-wallet-ui-dropdown';\n\nexport function SolanaWalletUiButton() {\n const { connected } = useSolanaWalletUi();\n\n return connected ? <SolanaWalletUiDropdown /> : <SolanaWalletUiDialogTrigger />;\n}\n","import './solana-wallet-ui-dialog.css';\n\nimport { UiWallet, useConnect, useDisconnect } from '@wallet-standard/react';\nimport { Portal } from '@zag-js/react';\nimport React from 'react';\n\nimport { useSolanaWalletUi } from './solana-wallet-ui-context';\n\nexport function SolanaWalletUiDialog({ description, title }: { description?: string; title?: string }) {\n const { dialogApi: api, connected, disconnect } = useSolanaWalletUi();\n\n if (!api) {\n console.log('no api');\n return null;\n }\n\n if (!api.open) {\n console.log('no api.open');\n return null;\n }\n\n return (\n <Portal>\n <div className=\"dialog\" {...api.getBackdropProps()} />\n <div className=\"dialog\" {...api.getPositionerProps()}>\n <div className=\"dialog\" {...api.getContentProps()}>\n {title ? (\n <h2 className=\"dialog\" {...api.getTitleProps()}>\n {title}\n </h2>\n ) : null}\n {description ? (\n <p className=\"dialog\" {...api.getDescriptionProps()}>\n {description}\n </p>\n ) : null}\n <div style={{ marginTop: '32px' }}>\n <SolanaWalletUiDialogList />\n {connected ? <button onClick={disconnect}>Disconnect</button> : null}\n </div>\n <button className=\"dialog\" {...api.getCloseTriggerProps()}>\n &times;\n </button>\n </div>\n </div>\n </Portal>\n );\n}\n\nexport function SolanaWalletUiDialogList() {\n const { wallets } = useSolanaWalletUi();\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '16px' }}>\n {wallets.map((item, index) => (\n <SolanaWalletUiDialogListItem key={`${item.name}-${index}`} wallet={item} />\n ))}\n </div>\n );\n}\n\nexport function SolanaWalletUiDialogListItem({ wallet }: { wallet: UiWallet }) {\n const [isConnecting, connect] = useConnect(wallet);\n const [isDisconnecting, disconnect] = useDisconnect(wallet);\n const { connectAccount, walletAccount } = useSolanaWalletUi();\n const accounts = wallet.accounts ?? [];\n const isConnected = wallet.accounts.length > 0;\n const isPending = isConnecting || isDisconnecting;\n\n if (isPending) {\n return <div>Pending...</div>;\n }\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <div style={{ alignItems: 'center', display: 'flex', gap: '8px' }}>\n <img src={wallet.icon} alt={wallet.name} style={{ height: 32 }} />\n <span style={{ fontSize: '1rem', fontWeight: '500' }}>{wallet.name}</span>\n </div>\n {isConnected ? (\n <button\n disabled={isPending}\n onClick={() => {\n void disconnect();\n }}\n >\n Disconnect\n </button>\n ) : (\n <button\n disabled={isPending}\n onClick={() => {\n void connect();\n }}\n >\n Connect\n </button>\n )}\n </div>\n {accounts.map((item, index) => (\n <div key={`${item.address}-${index}`}>\n <button\n disabled={item.address === walletAccount?.address}\n onClick={() => {\n void connectAccount(wallet, item);\n }}\n >\n {item.address}\n </button>\n </div>\n ))}\n </div>\n );\n}\n"]}
@@ -6,6 +6,12 @@ export * from './solana-cluster-provider';
6
6
  export * from './solana-provider';
7
7
  export * from './solana-wallet-context';
8
8
  export * from './solana-wallet-provider';
9
+ export * from './solana-wallet-ui-button';
10
+ export * from './solana-wallet-ui-context';
11
+ export * from './solana-wallet-ui-dialog';
12
+ export * from './solana-wallet-ui-dialog-trigger';
13
+ export * from './solana-wallet-ui-dropdown';
14
+ export * from './solana-wallet-ui-provider';
9
15
  export * from '@wallet-standard/react';
10
16
  export * from '@wallet-ui/core';
11
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAErB,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AAEzC,cAAc,wBAAwB,CAAC;AAEvC,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAErB,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAE5C,cAAc,wBAAwB,CAAC;AAEvC,cAAc,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"solana-provider.d.ts","sourceRoot":"","sources":["../../src/solana-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAOzC,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;CAAE,qBAQxG"}
1
+ {"version":3,"file":"solana-provider.d.ts","sourceRoot":"","sources":["../../src/solana-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQzC,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;CAAE,qBAUxG"}
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ export declare function SolanaWalletUiButton(): React.JSX.Element;
3
+ //# sourceMappingURL=solana-wallet-ui-button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana-wallet-ui-button.d.ts","sourceRoot":"","sources":["../../src/solana-wallet-ui-button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,wBAAgB,oBAAoB,sBAInC"}
@@ -0,0 +1,19 @@
1
+ import { UiWallet, UiWalletAccount } from '@wallet-standard/react';
2
+ import * as dialog from '@zag-js/dialog';
3
+ import * as menu from '@zag-js/menu';
4
+ import React from 'react';
5
+ export interface SolanaWalletUiProviderContext {
6
+ change: () => void;
7
+ connectAccount: (wallet: UiWallet | undefined, account: UiWalletAccount | undefined) => void;
8
+ connected: boolean;
9
+ copy: () => Promise<void>;
10
+ dialogApi: ReturnType<typeof dialog.connect>;
11
+ disconnect: () => void;
12
+ menuApi: ReturnType<typeof menu.connect>;
13
+ wallet: UiWallet | undefined;
14
+ walletAccount: UiWalletAccount | undefined;
15
+ wallets: readonly UiWallet[];
16
+ }
17
+ export declare const SolanaWalletUiContext: React.Context<SolanaWalletUiProviderContext>;
18
+ export declare function useSolanaWalletUi(): SolanaWalletUiProviderContext;
19
+ //# sourceMappingURL=solana-wallet-ui-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana-wallet-ui-context.d.ts","sourceRoot":"","sources":["../../src/solana-wallet-ui-context.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,cAAc,CAAC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,WAAW,6BAA6B;IAC1C,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,cAAc,EAAE,CAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,EAAE,OAAO,EAAE,eAAe,GAAG,SAAS,KAAK,IAAI,CAAC;IAC7F,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,SAAS,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7C,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,OAAO,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC7B,aAAa,EAAE,eAAe,GAAG,SAAS,CAAC;IAC3C,OAAO,EAAE,SAAS,QAAQ,EAAE,CAAC;CAChC;AAED,eAAO,MAAM,qBAAqB,8CAEjC,CAAC;AAEF,wBAAgB,iBAAiB,kCAEhC"}
@@ -0,0 +1,4 @@
1
+ import React, { ButtonHTMLAttributes } from 'react';
2
+ export type WalletUiDialogTriggerProps = ButtonHTMLAttributes<HTMLButtonElement>;
3
+ export declare function SolanaWalletUiDialogTrigger(props: WalletUiDialogTriggerProps): React.JSX.Element;
4
+ //# sourceMappingURL=solana-wallet-ui-dialog-trigger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana-wallet-ui-dialog-trigger.d.ts","sourceRoot":"","sources":["../../src/solana-wallet-ui-dialog-trigger.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAIpD,MAAM,MAAM,0BAA0B,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;AAEjF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,0BAA0B,qBAS5E"}
@@ -0,0 +1,12 @@
1
+ import './solana-wallet-ui-dialog.css';
2
+ import { UiWallet } from '@wallet-standard/react';
3
+ import React from 'react';
4
+ export declare function SolanaWalletUiDialog({ description, title }: {
5
+ description?: string;
6
+ title?: string;
7
+ }): React.JSX.Element | null;
8
+ export declare function SolanaWalletUiDialogList(): React.JSX.Element;
9
+ export declare function SolanaWalletUiDialogListItem({ wallet }: {
10
+ wallet: UiWallet;
11
+ }): React.JSX.Element;
12
+ //# sourceMappingURL=solana-wallet-ui-dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana-wallet-ui-dialog.d.ts","sourceRoot":"","sources":["../../src/solana-wallet-ui-dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,+BAA+B,CAAC;AAEvC,OAAO,EAAE,QAAQ,EAA6B,MAAM,wBAAwB,CAAC;AAE7E,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,wBAAgB,oBAAoB,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,4BAuCpG;AAED,wBAAgB,wBAAwB,sBAUvC;AAED,wBAAgB,4BAA4B,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,qBAqD5E"}
@@ -0,0 +1,11 @@
1
+ import './solana-wallet-ui-dropdown.css';
2
+ import React, { ButtonHTMLAttributes } from 'react';
3
+ export interface AppMenuItem {
4
+ disabled?: boolean;
5
+ handler: () => Promise<void> | void;
6
+ label: string;
7
+ value: string;
8
+ }
9
+ export declare function SolanaWalletUiDropdown(): React.JSX.Element;
10
+ export declare function AppMenuButton(props: ButtonHTMLAttributes<HTMLButtonElement>): React.JSX.Element;
11
+ //# sourceMappingURL=solana-wallet-ui-dropdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana-wallet-ui-dropdown.d.ts","sourceRoot":"","sources":["../../src/solana-wallet-ui-dropdown.tsx"],"names":[],"mappings":"AAAA,OAAO,iCAAiC,CAAC;AAEzC,OAAO,KAAK,EAAE,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAIpD,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,sBAAsB,sBA6DrC;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,qBAE3E"}
@@ -0,0 +1,5 @@
1
+ import React, { ReactNode } from 'react';
2
+ export declare function SolanaWalletUiProvider(props: {
3
+ children: ReactNode;
4
+ }): React.JSX.Element;
5
+ //# sourceMappingURL=solana-wallet-ui-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana-wallet-ui-provider.d.ts","sourceRoot":"","sources":["../../src/solana-wallet-ui-provider.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAAE,SAAS,EAA4B,MAAM,OAAO,CAAC;AAKnE,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,qBAsDpE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wallet-ui/react",
3
- "version": "1.1.0-canary-20250313140452",
3
+ "version": "1.1.0-canary-20250313144314",
4
4
  "description": "React hooks for building Solana apps",
5
5
  "exports": {
6
6
  ".": {
@@ -58,8 +58,11 @@
58
58
  ],
59
59
  "dependencies": {
60
60
  "@wallet-standard/react": "1.0.0",
61
+ "@zag-js/dialog": "^1.3.3",
62
+ "@zag-js/menu": "^1.3.3",
63
+ "@zag-js/react": "^1.3.3",
61
64
  "gill": "0.7.0",
62
- "@wallet-ui/core": "1.1.0-canary-20250313140452"
65
+ "@wallet-ui/core": "1.1.0-canary-20250313144314"
63
66
  },
64
67
  "peerDependencies": {
65
68
  "react": ">=18"