@wallet-ui/react 4.0.5 → 4.1.0-canary-20260430184135
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.browser.cjs +406 -104
- package/dist/index.browser.cjs.map +1 -1
- package/dist/index.browser.mjs +379 -77
- package/dist/index.browser.mjs.map +1 -1
- package/dist/index.native.mjs +379 -77
- package/dist/index.native.mjs.map +1 -1
- package/dist/index.node.cjs +406 -104
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.mjs +379 -77
- package/dist/index.node.mjs.map +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/use-wallet-ui-auth-message.d.ts +9 -0
- package/dist/types/use-wallet-ui-auth-message.d.ts.map +1 -0
- package/dist/types/use-wallet-ui-auth-native.d.ts +6 -0
- package/dist/types/use-wallet-ui-auth-native.d.ts.map +1 -0
- package/dist/types/use-wallet-ui-auth.d.ts +4 -0
- package/dist/types/use-wallet-ui-auth.d.ts.map +1 -0
- package/dist/types/wallet-standard-ui-registry.d.ts +5 -0
- package/dist/types/wallet-standard-ui-registry.d.ts.map +1 -0
- package/dist/types/wallet-ui-auth-types.d.ts +41 -0
- package/dist/types/wallet-ui-auth-types.d.ts.map +1 -0
- package/dist/types/wallet-ui-auth-utils.d.ts +21 -0
- package/dist/types/wallet-ui-auth-utils.d.ts.map +1 -0
- package/dist/types/wallet-ui-auth.d.ts +4 -0
- package/dist/types/wallet-ui-auth.d.ts.map +1 -0
- package/package.json +4 -2
package/dist/index.browser.cjs
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var React19 = require('react');
|
|
4
4
|
var react$1 = require('@wallet-standard/react');
|
|
5
5
|
var react$2 = require('@zag-js/react');
|
|
6
6
|
var menu = require('@zag-js/menu');
|
|
7
7
|
var dialog = require('@zag-js/dialog');
|
|
8
|
+
var walletStandardFeatures = require('@solana/wallet-standard-features');
|
|
9
|
+
var walletStandardUtil = require('@solana/wallet-standard-util');
|
|
10
|
+
var ui = require('@wallet-standard/ui');
|
|
11
|
+
var uiRegistry = require('@wallet-standard/ui-registry');
|
|
8
12
|
var react = require('@solana/react');
|
|
9
13
|
var react$3 = require('@nanostores/react');
|
|
10
14
|
var core$1 = require('@wallet-ui/core');
|
|
11
|
-
var walletStandardFeatures = require('@solana/wallet-standard-features');
|
|
12
15
|
var core = require('@wallet-standard/core');
|
|
13
|
-
var ui = require('@wallet-standard/ui');
|
|
14
16
|
|
|
15
17
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
18
|
|
|
@@ -32,25 +34,25 @@ function _interopNamespace(e) {
|
|
|
32
34
|
return Object.freeze(n);
|
|
33
35
|
}
|
|
34
36
|
|
|
35
|
-
var
|
|
37
|
+
var React19__default = /*#__PURE__*/_interopDefault(React19);
|
|
36
38
|
var menu__namespace = /*#__PURE__*/_interopNamespace(menu);
|
|
37
39
|
var dialog__namespace = /*#__PURE__*/_interopNamespace(dialog);
|
|
38
40
|
|
|
39
41
|
// src/base-button.tsx
|
|
40
42
|
function BaseButton({ className, label, leftSection, onClick, rightSection, ...props }) {
|
|
41
|
-
return /* @__PURE__ */
|
|
43
|
+
return /* @__PURE__ */ React19__default.default.createElement("button", { "data-wu": "base-button", className: `${className ?? ""}`, onClick, ...props }, leftSection ? /* @__PURE__ */ React19__default.default.createElement("span", { "data-wu": "base-button-left-section" }, leftSection) : null, label, rightSection ? /* @__PURE__ */ React19__default.default.createElement("span", { "data-wu": "base-button-right-section" }, rightSection) : null);
|
|
42
44
|
}
|
|
43
|
-
var WalletUiContext =
|
|
45
|
+
var WalletUiContext = React19__default.default.createContext({});
|
|
44
46
|
|
|
45
47
|
// src/use-wallet-ui.tsx
|
|
46
48
|
function useWalletUi() {
|
|
47
|
-
return
|
|
49
|
+
return React19__default.default.useContext(WalletUiContext);
|
|
48
50
|
}
|
|
49
|
-
var WalletUiAccountContext =
|
|
51
|
+
var WalletUiAccountContext = React19.createContext({});
|
|
50
52
|
|
|
51
53
|
// src/use-wallet-ui-account.tsx
|
|
52
54
|
function useWalletUiAccount() {
|
|
53
|
-
return
|
|
55
|
+
return React19.useContext(WalletUiAccountContext);
|
|
54
56
|
}
|
|
55
57
|
|
|
56
58
|
// src/use-wallet-ui-wallet.tsx
|
|
@@ -59,7 +61,7 @@ function useWalletUiWallet({ wallet }) {
|
|
|
59
61
|
const { setAccount } = useWalletUiAccount();
|
|
60
62
|
const [isConnecting, connect3] = react$1.useConnect(wallet);
|
|
61
63
|
const [isDisconnecting, disconnect] = react$1.useDisconnect(wallet);
|
|
62
|
-
|
|
64
|
+
React19.useEffect(() => {
|
|
63
65
|
}, [isDisconnecting]);
|
|
64
66
|
return {
|
|
65
67
|
connect: async () => {
|
|
@@ -82,7 +84,7 @@ function WalletUiIcon({ className, wallet, ...props }) {
|
|
|
82
84
|
if (!wallet) {
|
|
83
85
|
return null;
|
|
84
86
|
}
|
|
85
|
-
return /* @__PURE__ */
|
|
87
|
+
return /* @__PURE__ */ React19__default.default.createElement("img", { "data-wu": "wallet-ui-icon", src: wallet.icon, alt: wallet.name, className: className ?? "", ...props });
|
|
86
88
|
}
|
|
87
89
|
|
|
88
90
|
// src/base-dropdown.tsx
|
|
@@ -96,16 +98,16 @@ var BaseDropdownItemType = /* @__PURE__ */ ((BaseDropdownItemType2) => {
|
|
|
96
98
|
})(BaseDropdownItemType || {});
|
|
97
99
|
function BaseDropdown({ buttonProps, dropdown, items, showIndicator }) {
|
|
98
100
|
const api = dropdown.api;
|
|
99
|
-
const trigger = /* @__PURE__ */
|
|
101
|
+
const trigger = /* @__PURE__ */ React19__default.default.createElement(
|
|
100
102
|
BaseButton,
|
|
101
103
|
{
|
|
102
104
|
...api.getTriggerProps(),
|
|
103
|
-
rightSection: showIndicator ? /* @__PURE__ */
|
|
105
|
+
rightSection: showIndicator ? /* @__PURE__ */ React19__default.default.createElement("span", { ...api.getIndicatorProps() }, /* @__PURE__ */ React19__default.default.createElement(BaseDropdownChevronDown, null)) : null,
|
|
104
106
|
...buttonProps
|
|
105
107
|
}
|
|
106
108
|
);
|
|
107
|
-
return /* @__PURE__ */
|
|
108
|
-
return /* @__PURE__ */
|
|
109
|
+
return /* @__PURE__ */ React19__default.default.createElement("div", { "data-wu": "base-dropdown" }, trigger, /* @__PURE__ */ React19__default.default.createElement("div", { ...api.getPositionerProps(), "data-wu": "base-dropdown-wrapper" }, /* @__PURE__ */ React19__default.default.createElement("div", { ...api.getContentProps(), "data-wu": "base-dropdown-list", "data-part": "content" }, items.map((item) => {
|
|
110
|
+
return /* @__PURE__ */ React19__default.default.createElement(
|
|
109
111
|
BaseDropdownItem,
|
|
110
112
|
{
|
|
111
113
|
...api.getItemProps({ value: item.value }),
|
|
@@ -125,17 +127,17 @@ function BaseDropdown({ buttonProps, dropdown, items, showIndicator }) {
|
|
|
125
127
|
}
|
|
126
128
|
function BaseDropdownItem({ afterClick, item }) {
|
|
127
129
|
if (!item.wallet) {
|
|
128
|
-
return /* @__PURE__ */
|
|
130
|
+
return /* @__PURE__ */ React19__default.default.createElement(BaseDropdownItemRender, { afterClick, item });
|
|
129
131
|
}
|
|
130
132
|
switch (item.type) {
|
|
131
133
|
case "Item" /* Item */:
|
|
132
|
-
return /* @__PURE__ */
|
|
134
|
+
return /* @__PURE__ */ React19__default.default.createElement(BaseDropdownItemRender, { afterClick, item });
|
|
133
135
|
case "WalletConnect" /* WalletConnect */:
|
|
134
|
-
return /* @__PURE__ */
|
|
136
|
+
return /* @__PURE__ */ React19__default.default.createElement(BaseDropdownItemWalletConnect, { afterClick, item, wallet: item.wallet });
|
|
135
137
|
case "WalletCopy" /* WalletCopy */:
|
|
136
|
-
return /* @__PURE__ */
|
|
138
|
+
return /* @__PURE__ */ React19__default.default.createElement(BaseDropdownItemRender, { afterClick, item });
|
|
137
139
|
case "WalletDisconnect" /* WalletDisconnect */:
|
|
138
|
-
return /* @__PURE__ */
|
|
140
|
+
return /* @__PURE__ */ React19__default.default.createElement(BaseDropdownItemWalletDisconnect, { afterClick, item, wallet: item.wallet });
|
|
139
141
|
}
|
|
140
142
|
}
|
|
141
143
|
function BaseDropdownItemWalletConnect({
|
|
@@ -144,7 +146,7 @@ function BaseDropdownItemWalletConnect({
|
|
|
144
146
|
wallet
|
|
145
147
|
}) {
|
|
146
148
|
const { connect: connect3 } = useWalletUiWallet({ wallet });
|
|
147
|
-
return /* @__PURE__ */
|
|
149
|
+
return /* @__PURE__ */ React19__default.default.createElement(
|
|
148
150
|
BaseDropdownItemRender,
|
|
149
151
|
{
|
|
150
152
|
afterClick,
|
|
@@ -154,7 +156,7 @@ function BaseDropdownItemWalletConnect({
|
|
|
154
156
|
await connect3();
|
|
155
157
|
return await item.handler();
|
|
156
158
|
},
|
|
157
|
-
leftSection: wallet ? /* @__PURE__ */
|
|
159
|
+
leftSection: wallet ? /* @__PURE__ */ React19__default.default.createElement(WalletUiIcon, { wallet }) : void 0
|
|
158
160
|
}
|
|
159
161
|
}
|
|
160
162
|
);
|
|
@@ -165,7 +167,7 @@ function BaseDropdownItemWalletDisconnect({
|
|
|
165
167
|
wallet
|
|
166
168
|
}) {
|
|
167
169
|
const { disconnect } = useWalletUiWallet({ wallet });
|
|
168
|
-
return /* @__PURE__ */
|
|
170
|
+
return /* @__PURE__ */ React19__default.default.createElement(
|
|
169
171
|
BaseDropdownItemRender,
|
|
170
172
|
{
|
|
171
173
|
afterClick,
|
|
@@ -188,10 +190,10 @@ function BaseDropdownItemRender({ afterClick, item }) {
|
|
|
188
190
|
afterClick();
|
|
189
191
|
});
|
|
190
192
|
}
|
|
191
|
-
return /* @__PURE__ */
|
|
193
|
+
return /* @__PURE__ */ React19__default.default.createElement("button", { type: "button", "data-wu": "base-dropdown-item", "data-part": "item", onClick }, item.leftSection ? /* @__PURE__ */ React19__default.default.createElement("span", { "data-wu": "base-dropdown-item-left-section" }, item.leftSection) : null, item.label, item.rightSection ? /* @__PURE__ */ React19__default.default.createElement("span", { "data-wu": "base-dropdown-item-right-section" }, item.rightSection) : null);
|
|
192
194
|
}
|
|
193
195
|
function BaseDropdownChevronDown(props) {
|
|
194
|
-
return /* @__PURE__ */
|
|
196
|
+
return /* @__PURE__ */ React19__default.default.createElement(
|
|
195
197
|
"svg",
|
|
196
198
|
{
|
|
197
199
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -205,16 +207,16 @@ function BaseDropdownChevronDown(props) {
|
|
|
205
207
|
strokeLinejoin: "round",
|
|
206
208
|
...props
|
|
207
209
|
},
|
|
208
|
-
/* @__PURE__ */
|
|
210
|
+
/* @__PURE__ */ React19__default.default.createElement("path", { d: "m6 9 6 6 6-6" })
|
|
209
211
|
);
|
|
210
212
|
}
|
|
211
213
|
function BaseSvg({ ...props }) {
|
|
212
|
-
return /* @__PURE__ */
|
|
214
|
+
return /* @__PURE__ */ React19__default.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", ...props }, props.children);
|
|
213
215
|
}
|
|
214
216
|
|
|
215
217
|
// src/wallet-ui-icon-close.tsx
|
|
216
218
|
function WalletUiIconClose({ ...props }) {
|
|
217
|
-
return /* @__PURE__ */
|
|
219
|
+
return /* @__PURE__ */ React19__default.default.createElement(
|
|
218
220
|
BaseSvg,
|
|
219
221
|
{
|
|
220
222
|
fill: "none",
|
|
@@ -225,17 +227,17 @@ function WalletUiIconClose({ ...props }) {
|
|
|
225
227
|
viewBox: "0 0 14 14",
|
|
226
228
|
...props
|
|
227
229
|
},
|
|
228
|
-
/* @__PURE__ */
|
|
230
|
+
/* @__PURE__ */ React19__default.default.createElement("path", { d: "M14 12.461 8.3 6.772l5.234-5.233L12.006 0 6.772 5.234 1.54 0 0 1.539l5.234 5.233L0 12.006l1.539 1.528L6.772 8.3l5.69 5.7L14 12.461z" })
|
|
229
231
|
);
|
|
230
232
|
}
|
|
231
233
|
|
|
232
234
|
// src/base-modal.tsx
|
|
233
235
|
function BaseModal({ modal, buttonLabel, buttonProps = {}, ...props }) {
|
|
234
236
|
const api = modal.api;
|
|
235
|
-
return /* @__PURE__ */
|
|
237
|
+
return /* @__PURE__ */ React19__default.default.createElement(React19__default.default.Fragment, null, buttonLabel ? /* @__PURE__ */ React19__default.default.createElement(BaseButton, { label: buttonLabel, ...buttonProps, ...api.getTriggerProps() }) : null, api.open && /* @__PURE__ */ React19__default.default.createElement(react$2.Portal, null, /* @__PURE__ */ React19__default.default.createElement("div", { ...api.getBackdropProps() }), /* @__PURE__ */ React19__default.default.createElement("div", { ...api.getPositionerProps() }, /* @__PURE__ */ React19__default.default.createElement("div", { ...api.getContentProps() }, /* @__PURE__ */ React19__default.default.createElement("header", null, /* @__PURE__ */ React19__default.default.createElement("button", { ...api.getCloseTriggerProps() }, /* @__PURE__ */ React19__default.default.createElement(WalletUiIconClose, null))), props.description ? /* @__PURE__ */ React19__default.default.createElement("p", { ...api.getDescriptionProps() }, props.description) : null, /* @__PURE__ */ React19__default.default.createElement("main", null, props.children)))));
|
|
236
238
|
}
|
|
237
239
|
function useBaseDropdown() {
|
|
238
|
-
const service = react$2.useMachine(menu__namespace.machine, { id:
|
|
240
|
+
const service = react$2.useMachine(menu__namespace.machine, { id: React19.useId() });
|
|
239
241
|
const api = menu__namespace.connect(service, react$2.normalizeProps);
|
|
240
242
|
return {
|
|
241
243
|
api,
|
|
@@ -244,7 +246,7 @@ function useBaseDropdown() {
|
|
|
244
246
|
};
|
|
245
247
|
}
|
|
246
248
|
function useBaseModal() {
|
|
247
|
-
const service = react$2.useMachine(dialog__namespace.machine, { id:
|
|
249
|
+
const service = react$2.useMachine(dialog__namespace.machine, { id: React19.useId(), modal: true });
|
|
248
250
|
const api = dialog__namespace.connect(service, react$2.normalizeProps);
|
|
249
251
|
return {
|
|
250
252
|
api,
|
|
@@ -252,11 +254,237 @@ function useBaseModal() {
|
|
|
252
254
|
open: () => service.send({ type: "OPEN" })
|
|
253
255
|
};
|
|
254
256
|
}
|
|
255
|
-
|
|
257
|
+
|
|
258
|
+
// src/wallet-ui-auth-types.ts
|
|
259
|
+
var AUTH_ERROR_MESSAGES = {
|
|
260
|
+
"auth-unsupported": "The selected wallet does not support Sign In With Solana or message signing.",
|
|
261
|
+
"message-signing-unavailable": "The selected wallet account does not support message signing.",
|
|
262
|
+
"missing-domain": "A Sign In With Solana fallback message requires a domain.",
|
|
263
|
+
"wallet-not-connected": "Connect a wallet account before signing in."
|
|
264
|
+
};
|
|
265
|
+
var WalletUiAuthError = class extends Error {
|
|
266
|
+
cause;
|
|
267
|
+
reason;
|
|
268
|
+
constructor(reason, cause) {
|
|
269
|
+
super(AUTH_ERROR_MESSAGES[reason]);
|
|
270
|
+
this.cause = cause;
|
|
271
|
+
this.name = "WalletUiAuthError";
|
|
272
|
+
this.reason = reason;
|
|
273
|
+
}
|
|
274
|
+
};
|
|
275
|
+
var getOrCreateUiWalletAccountForStandardWalletAccount = uiRegistry.getOrCreateUiWalletAccountForStandardWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
|
|
276
|
+
var getWalletAccountForUiWalletAccount = uiRegistry.getWalletAccountForUiWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
|
|
277
|
+
var getWalletForHandle = uiRegistry.getWalletForHandle_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
|
|
278
|
+
|
|
279
|
+
// src/wallet-ui-auth-utils.ts
|
|
280
|
+
function getTargetAccount(account, wallet) {
|
|
281
|
+
if (account && ui.uiWalletAccountBelongsToUiWallet(account, wallet)) {
|
|
282
|
+
return account;
|
|
283
|
+
}
|
|
284
|
+
return void 0;
|
|
285
|
+
}
|
|
286
|
+
function hasFeature(handle, featureName) {
|
|
287
|
+
return Boolean(handle && handle.features.includes(featureName));
|
|
288
|
+
}
|
|
289
|
+
async function signInWithMessageFeature({
|
|
290
|
+
account,
|
|
291
|
+
input
|
|
292
|
+
}) {
|
|
293
|
+
const messageSignInInput = getMessageSignInInput(account, input);
|
|
294
|
+
const { signMessage } = ui.getWalletAccountFeature(
|
|
295
|
+
account,
|
|
296
|
+
walletStandardFeatures.SolanaSignMessage
|
|
297
|
+
);
|
|
298
|
+
const walletAccount = getWalletAccountForUiWalletAccount(account);
|
|
299
|
+
const [output] = await signMessage({ account: walletAccount, message: walletStandardUtil.createSignInMessage(messageSignInInput) });
|
|
300
|
+
if (!output) {
|
|
301
|
+
throw new WalletUiAuthError("message-signing-unavailable");
|
|
302
|
+
}
|
|
303
|
+
return getMessageSignInResult({ account, input: messageSignInInput, output });
|
|
304
|
+
}
|
|
305
|
+
async function signInWithMessageSigner({
|
|
306
|
+
account,
|
|
307
|
+
input,
|
|
308
|
+
signMessage
|
|
309
|
+
}) {
|
|
310
|
+
const messageSignInInput = getMessageSignInInput(account, input);
|
|
311
|
+
const output = await signMessage({ message: walletStandardUtil.createSignInMessage(messageSignInInput) });
|
|
312
|
+
return getMessageSignInResult({ account, input: messageSignInInput, output });
|
|
313
|
+
}
|
|
314
|
+
function getMessageSignInResult({
|
|
315
|
+
account,
|
|
316
|
+
input,
|
|
317
|
+
output
|
|
318
|
+
}) {
|
|
319
|
+
return {
|
|
320
|
+
account,
|
|
321
|
+
input,
|
|
322
|
+
method: walletStandardFeatures.SolanaSignMessage,
|
|
323
|
+
signature: output.signature,
|
|
324
|
+
signedMessage: output.signedMessage
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
async function signInWithNativeFeature({
|
|
328
|
+
account,
|
|
329
|
+
connect: connect3,
|
|
330
|
+
input,
|
|
331
|
+
wallet
|
|
332
|
+
}) {
|
|
333
|
+
const signInInput = account?.address && !input.address ? { ...input, address: account.address } : { ...input };
|
|
334
|
+
const { signIn } = ui.getWalletFeature(wallet, walletStandardFeatures.SolanaSignIn);
|
|
335
|
+
const [output] = await signIn(signInInput);
|
|
336
|
+
if (!output) {
|
|
337
|
+
throw new WalletUiAuthError("auth-unsupported");
|
|
338
|
+
}
|
|
339
|
+
const uiAccount = getUiWalletAccountForSignedInAccount({ account, output, wallet });
|
|
340
|
+
if (wallet.accounts.includes(uiAccount)) {
|
|
341
|
+
connect3(uiAccount);
|
|
342
|
+
}
|
|
343
|
+
return {
|
|
344
|
+
account: uiAccount,
|
|
345
|
+
input: signInInput,
|
|
346
|
+
method: walletStandardFeatures.SolanaSignIn,
|
|
347
|
+
signature: output.signature,
|
|
348
|
+
signedMessage: output.signedMessage
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
function getUiWalletAccountForSignedInAccount({
|
|
352
|
+
account,
|
|
353
|
+
output,
|
|
354
|
+
wallet
|
|
355
|
+
}) {
|
|
356
|
+
const matchingCurrentAccount = account?.address === output.account.address ? account : void 0;
|
|
357
|
+
return wallet.accounts.find((walletAccount) => walletAccount.address === output.account.address) ?? matchingCurrentAccount ?? getOrCreateUiWalletAccountForStandardWalletAccount(getWalletForHandle(wallet), output.account);
|
|
358
|
+
}
|
|
359
|
+
function getLocationHost() {
|
|
360
|
+
if (typeof location === "undefined") {
|
|
361
|
+
return void 0;
|
|
362
|
+
}
|
|
363
|
+
return location.host || void 0;
|
|
364
|
+
}
|
|
365
|
+
function getMessageSignInInput(account, input) {
|
|
366
|
+
const domain = input.domain ?? getLocationHost();
|
|
367
|
+
if (!domain) {
|
|
368
|
+
throw new WalletUiAuthError("missing-domain");
|
|
369
|
+
}
|
|
370
|
+
return {
|
|
371
|
+
...input,
|
|
372
|
+
address: account.address,
|
|
373
|
+
domain
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
// src/use-wallet-ui-auth-message.ts
|
|
378
|
+
function useWalletUiAuthMessage({
|
|
379
|
+
account,
|
|
380
|
+
enabled = Boolean(account),
|
|
381
|
+
reason = account ? "message-signing-unavailable" : "wallet-not-connected",
|
|
382
|
+
signMessage
|
|
383
|
+
}) {
|
|
384
|
+
const [isSigningIn, setIsSigningIn] = React19.useState(false);
|
|
385
|
+
const canSignIn = Boolean(enabled && account);
|
|
386
|
+
const unavailableReason = account ? reason : "wallet-not-connected";
|
|
387
|
+
const signIn = React19.useCallback(
|
|
388
|
+
async ({ input = {} } = {}) => {
|
|
389
|
+
if (!canSignIn || !account) {
|
|
390
|
+
throw new WalletUiAuthError(unavailableReason);
|
|
391
|
+
}
|
|
392
|
+
setIsSigningIn(true);
|
|
393
|
+
try {
|
|
394
|
+
if (signMessage) {
|
|
395
|
+
return await signInWithMessageSigner({
|
|
396
|
+
account,
|
|
397
|
+
input,
|
|
398
|
+
signMessage
|
|
399
|
+
});
|
|
400
|
+
}
|
|
401
|
+
return await signInWithMessageFeature({
|
|
402
|
+
account,
|
|
403
|
+
input
|
|
404
|
+
});
|
|
405
|
+
} finally {
|
|
406
|
+
setIsSigningIn(false);
|
|
407
|
+
}
|
|
408
|
+
},
|
|
409
|
+
[account, canSignIn, signMessage, unavailableReason]
|
|
410
|
+
);
|
|
411
|
+
return {
|
|
412
|
+
canSignIn,
|
|
413
|
+
isSigningIn,
|
|
414
|
+
messageSigningAvailable: canSignIn,
|
|
415
|
+
nativeSignInAvailable: false,
|
|
416
|
+
reason: canSignIn ? void 0 : unavailableReason,
|
|
417
|
+
signIn
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
function useWalletUiAuthNative({ enabled = true, wallet }) {
|
|
421
|
+
const { account, connect: connect3 } = useWalletUi();
|
|
422
|
+
const [isSigningIn, setIsSigningIn] = React19.useState(false);
|
|
423
|
+
const targetAccount = getTargetAccount(account, wallet);
|
|
424
|
+
const messageSigningAvailable = hasFeature(targetAccount, walletStandardFeatures.SolanaSignMessage);
|
|
425
|
+
const signIn = React19.useCallback(
|
|
426
|
+
async ({ input = {} } = {}) => {
|
|
427
|
+
if (!enabled) {
|
|
428
|
+
throw new WalletUiAuthError("auth-unsupported");
|
|
429
|
+
}
|
|
430
|
+
setIsSigningIn(true);
|
|
431
|
+
try {
|
|
432
|
+
return await signInWithNativeFeature({
|
|
433
|
+
account: targetAccount,
|
|
434
|
+
connect: connect3,
|
|
435
|
+
input,
|
|
436
|
+
wallet
|
|
437
|
+
});
|
|
438
|
+
} finally {
|
|
439
|
+
setIsSigningIn(false);
|
|
440
|
+
}
|
|
441
|
+
},
|
|
442
|
+
[connect3, enabled, targetAccount, wallet]
|
|
443
|
+
);
|
|
444
|
+
return {
|
|
445
|
+
canSignIn: enabled,
|
|
446
|
+
isSigningIn,
|
|
447
|
+
messageSigningAvailable,
|
|
448
|
+
nativeSignInAvailable: enabled,
|
|
449
|
+
reason: enabled ? void 0 : "auth-unsupported",
|
|
450
|
+
signIn
|
|
451
|
+
};
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
// src/use-wallet-ui-auth.tsx
|
|
455
|
+
function useWalletUiAuth({ wallet }) {
|
|
456
|
+
const { account } = useWalletUi();
|
|
457
|
+
const targetAccount = getTargetAccount(account, wallet);
|
|
458
|
+
const nativeSignInAvailable = hasFeature(wallet, walletStandardFeatures.SolanaSignIn);
|
|
459
|
+
const messageSigningAvailable = Boolean(targetAccount && hasFeature(targetAccount, walletStandardFeatures.SolanaSignMessage));
|
|
460
|
+
const nativeAuth = useWalletUiAuthNative({ enabled: nativeSignInAvailable, wallet });
|
|
461
|
+
const messageAuth = useWalletUiAuthMessage({
|
|
462
|
+
account: targetAccount,
|
|
463
|
+
enabled: messageSigningAvailable,
|
|
464
|
+
reason: targetAccount ? "message-signing-unavailable" : "wallet-not-connected"});
|
|
465
|
+
if (nativeSignInAvailable) {
|
|
466
|
+
return nativeAuth;
|
|
467
|
+
}
|
|
468
|
+
if (messageSigningAvailable) {
|
|
469
|
+
return messageAuth;
|
|
470
|
+
}
|
|
471
|
+
const reason = targetAccount || !hasFeature(wallet, walletStandardFeatures.SolanaSignMessage) ? "auth-unsupported" : "wallet-not-connected";
|
|
472
|
+
return {
|
|
473
|
+
canSignIn: false,
|
|
474
|
+
isSigningIn: false,
|
|
475
|
+
messageSigningAvailable: false,
|
|
476
|
+
nativeSignInAvailable: false,
|
|
477
|
+
reason,
|
|
478
|
+
signIn() {
|
|
479
|
+
return Promise.reject(new WalletUiAuthError(reason));
|
|
480
|
+
}
|
|
481
|
+
};
|
|
482
|
+
}
|
|
483
|
+
var WalletUiClusterContext = React19.createContext({});
|
|
256
484
|
|
|
257
485
|
// src/use-wallet-ui-cluster.tsx
|
|
258
486
|
function useWalletUiCluster() {
|
|
259
|
-
return
|
|
487
|
+
return React19.useContext(WalletUiClusterContext);
|
|
260
488
|
}
|
|
261
489
|
function getDropdownItemsWallets({
|
|
262
490
|
wallets,
|
|
@@ -290,8 +518,8 @@ function getDropdownItemsWallets({
|
|
|
290
518
|
function useWalletUiDropdown() {
|
|
291
519
|
const dropdown = useBaseDropdown();
|
|
292
520
|
const { account, connect: connect3, copy, disconnect, connected, wallet, wallets } = useWalletUi();
|
|
293
|
-
const itemsWallets =
|
|
294
|
-
const itemsConnected =
|
|
521
|
+
const itemsWallets = React19.useMemo(() => getDropdownItemsWallets({ connect: connect3, wallets }), [wallets, connect3]);
|
|
522
|
+
const itemsConnected = React19.useMemo(
|
|
295
523
|
() => [
|
|
296
524
|
{
|
|
297
525
|
handler: async () => {
|
|
@@ -317,13 +545,13 @@ function useWalletUiDropdown() {
|
|
|
317
545
|
],
|
|
318
546
|
[copy, disconnect, dropdown, wallet, itemsWallets]
|
|
319
547
|
);
|
|
320
|
-
const items =
|
|
548
|
+
const items = React19.useMemo(() => {
|
|
321
549
|
return connected ? itemsConnected : itemsWallets;
|
|
322
550
|
}, [connected, itemsConnected, itemsWallets]);
|
|
323
|
-
const buttonProps =
|
|
551
|
+
const buttonProps = React19.useMemo(() => {
|
|
324
552
|
return {
|
|
325
553
|
label: connected ? (account ? ellipsify(account.address) : wallet?.name) ?? "Connected" : "Select Wallet",
|
|
326
|
-
leftSection: connected ? /* @__PURE__ */
|
|
554
|
+
leftSection: connected ? /* @__PURE__ */ React19__default.default.createElement(WalletUiIcon, { wallet }) : void 0
|
|
327
555
|
};
|
|
328
556
|
}, [account, connected, wallet]);
|
|
329
557
|
return {
|
|
@@ -346,7 +574,7 @@ function useWalletUiSigner({
|
|
|
346
574
|
}
|
|
347
575
|
function useWalletUiWallets() {
|
|
348
576
|
const readonlyWallets = react$1.useWallets();
|
|
349
|
-
return
|
|
577
|
+
return React19.useMemo(
|
|
350
578
|
() => readonlyWallets.filter((wallet) => wallet.chains.some((i) => i.startsWith("solana:"))).sort((a, b) => a.name.localeCompare(b.name)),
|
|
351
579
|
[readonlyWallets]
|
|
352
580
|
);
|
|
@@ -373,10 +601,10 @@ function WalletUiAccountContextProvider({ children, cluster, storage }) {
|
|
|
373
601
|
storage = storage ?? core$1.createStorageAccount();
|
|
374
602
|
const wallets = react$1.useWallets();
|
|
375
603
|
const accountId = react$3.useStore(storage.value);
|
|
376
|
-
const [account, setAccountInternal] =
|
|
604
|
+
const [account, setAccountInternal] = React19.useState(
|
|
377
605
|
() => getSavedWalletAccount(wallets, accountId)
|
|
378
606
|
);
|
|
379
|
-
const setAccount =
|
|
607
|
+
const setAccount = React19.useCallback(
|
|
380
608
|
(setStateAction) => {
|
|
381
609
|
setAccountInternal((prevAccount) => {
|
|
382
610
|
wasSetterInvoked = true;
|
|
@@ -388,13 +616,13 @@ function WalletUiAccountContextProvider({ children, cluster, storage }) {
|
|
|
388
616
|
},
|
|
389
617
|
[storage]
|
|
390
618
|
);
|
|
391
|
-
|
|
619
|
+
React19.useEffect(() => {
|
|
392
620
|
const savedWalletAccount = getSavedWalletAccount(wallets, accountId);
|
|
393
621
|
if (savedWalletAccount) {
|
|
394
622
|
setAccountInternal(savedWalletAccount);
|
|
395
623
|
}
|
|
396
624
|
}, [accountId, wallets]);
|
|
397
|
-
const walletAccount =
|
|
625
|
+
const walletAccount = React19.useMemo(() => {
|
|
398
626
|
if (account) {
|
|
399
627
|
for (const uiWallet of wallets) {
|
|
400
628
|
for (const uiWalletAccount of uiWallet.accounts) {
|
|
@@ -408,12 +636,12 @@ function WalletUiAccountContextProvider({ children, cluster, storage }) {
|
|
|
408
636
|
}
|
|
409
637
|
}
|
|
410
638
|
}, [account, wallets]);
|
|
411
|
-
|
|
639
|
+
React19.useEffect(() => {
|
|
412
640
|
if (account && !walletAccount) {
|
|
413
641
|
setAccountInternal(void 0);
|
|
414
642
|
}
|
|
415
643
|
}, [account, walletAccount]);
|
|
416
|
-
const wallet =
|
|
644
|
+
const wallet = React19.useMemo(() => {
|
|
417
645
|
if (!walletAccount) {
|
|
418
646
|
return void 0;
|
|
419
647
|
}
|
|
@@ -428,16 +656,16 @@ function WalletUiAccountContextProvider({ children, cluster, storage }) {
|
|
|
428
656
|
}
|
|
429
657
|
}
|
|
430
658
|
}, [walletAccount, wallets]);
|
|
431
|
-
const accountKeys =
|
|
659
|
+
const accountKeys = React19.useMemo(() => {
|
|
432
660
|
if (!walletAccount) {
|
|
433
661
|
return [];
|
|
434
662
|
}
|
|
435
663
|
return [cluster.id, react$1.getUiWalletAccountStorageKey(walletAccount)].filter(Boolean);
|
|
436
664
|
}, [walletAccount, cluster.id]);
|
|
437
|
-
return /* @__PURE__ */
|
|
665
|
+
return /* @__PURE__ */ React19__default.default.createElement(
|
|
438
666
|
WalletUiAccountContext.Provider,
|
|
439
667
|
{
|
|
440
|
-
value:
|
|
668
|
+
value: React19.useMemo(
|
|
441
669
|
() => ({
|
|
442
670
|
account: walletAccount,
|
|
443
671
|
accountKeys,
|
|
@@ -459,7 +687,7 @@ function WalletUiClusterContextProvider({ clusters, render, storage }) {
|
|
|
459
687
|
}
|
|
460
688
|
const found = clusters.find((c) => c.id === clusterId);
|
|
461
689
|
const first = clusters[0];
|
|
462
|
-
const value =
|
|
690
|
+
const value = React19.useMemo(
|
|
463
691
|
() => ({
|
|
464
692
|
cluster: found ?? first,
|
|
465
693
|
clusters,
|
|
@@ -473,13 +701,13 @@ function WalletUiClusterContextProvider({ clusters, render, storage }) {
|
|
|
473
701
|
}),
|
|
474
702
|
[clusters, first, found, storage]
|
|
475
703
|
);
|
|
476
|
-
return /* @__PURE__ */
|
|
704
|
+
return /* @__PURE__ */ React19__default.default.createElement(WalletUiClusterContext.Provider, { value }, render(value));
|
|
477
705
|
}
|
|
478
706
|
function WalletUiContextProvider({ children }) {
|
|
479
707
|
const { account, accountKeys, cluster, setAccount, wallet } = useWalletUiAccount();
|
|
480
708
|
const wallets = useWalletUiWallets();
|
|
481
709
|
const connected = Boolean(wallet && wallet?.accounts.length > 0);
|
|
482
|
-
const value =
|
|
710
|
+
const value = React19.useMemo(
|
|
483
711
|
() => ({
|
|
484
712
|
account,
|
|
485
713
|
accountKeys,
|
|
@@ -498,7 +726,7 @@ function WalletUiContextProvider({ children }) {
|
|
|
498
726
|
}),
|
|
499
727
|
[account, accountKeys, cluster, setAccount, connected, wallet, wallets]
|
|
500
728
|
);
|
|
501
|
-
return /* @__PURE__ */
|
|
729
|
+
return /* @__PURE__ */ React19__default.default.createElement(WalletUiContext.Provider, { value }, children);
|
|
502
730
|
}
|
|
503
731
|
|
|
504
732
|
// src/wallet-ui.tsx
|
|
@@ -506,31 +734,102 @@ function createWalletUiConfig(props) {
|
|
|
506
734
|
return { ...props };
|
|
507
735
|
}
|
|
508
736
|
function WalletUi({ children, config: { accountStorage, clusters, clusterStorage, ...config } }) {
|
|
509
|
-
return /* @__PURE__ */
|
|
737
|
+
return /* @__PURE__ */ React19__default.default.createElement(
|
|
510
738
|
WalletUiClusterContextProvider,
|
|
511
739
|
{
|
|
512
740
|
clusters,
|
|
513
741
|
storage: clusterStorage,
|
|
514
742
|
render: ({ cluster }) => {
|
|
515
|
-
return /* @__PURE__ */
|
|
743
|
+
return /* @__PURE__ */ React19__default.default.createElement(WalletUiAccountContextProvider, { cluster, storage: accountStorage }, /* @__PURE__ */ React19__default.default.createElement(WalletUiContextProvider, { ...config }, children));
|
|
516
744
|
}
|
|
517
745
|
}
|
|
518
746
|
);
|
|
519
747
|
}
|
|
520
748
|
function WalletUiDropdown({ ...props }) {
|
|
521
749
|
const { buttonProps, items, dropdown } = useWalletUiDropdown();
|
|
522
|
-
return /* @__PURE__ */
|
|
750
|
+
return /* @__PURE__ */ React19__default.default.createElement(BaseDropdown, { ...props, buttonProps: { ...buttonProps }, dropdown, items });
|
|
523
751
|
}
|
|
524
752
|
|
|
525
753
|
// src/wallet-ui-account-guard.tsx
|
|
526
|
-
function WalletUiAccountGuard({ fallback = /* @__PURE__ */
|
|
754
|
+
function WalletUiAccountGuard({ fallback = /* @__PURE__ */ React19__default.default.createElement(WalletUiDropdown, null), render }) {
|
|
527
755
|
const { account, accountKeys, cluster, wallet } = useWalletUiAccount();
|
|
528
756
|
return account ? render({ account, accountKeys, cluster, wallet }) : fallback;
|
|
529
757
|
}
|
|
758
|
+
function WalletUiAuth({ children, wallet }) {
|
|
759
|
+
const { account } = useWalletUi();
|
|
760
|
+
const targetAccount = getTargetAccount(account, wallet);
|
|
761
|
+
if (hasFeature(wallet, walletStandardFeatures.SolanaSignIn)) {
|
|
762
|
+
return /* @__PURE__ */ React19__default.default.createElement(WalletUiAuthNative, { wallet }, children);
|
|
763
|
+
}
|
|
764
|
+
if (targetAccount && hasFeature(targetAccount, walletStandardFeatures.SolanaSignMessage)) {
|
|
765
|
+
return /* @__PURE__ */ React19__default.default.createElement(WalletUiAuthMessage, { account: targetAccount, wallet }, children);
|
|
766
|
+
}
|
|
767
|
+
if (hasFeature(wallet, walletStandardFeatures.SolanaSignMessage) && hasFeature(wallet, core.StandardConnect)) {
|
|
768
|
+
return /* @__PURE__ */ React19__default.default.createElement(WalletUiAuthMessageConnect, { wallet }, children);
|
|
769
|
+
}
|
|
770
|
+
return children({
|
|
771
|
+
canSignIn: false,
|
|
772
|
+
isSigningIn: false,
|
|
773
|
+
messageSigningAvailable: false,
|
|
774
|
+
nativeSignInAvailable: false,
|
|
775
|
+
reason: "auth-unsupported",
|
|
776
|
+
signIn() {
|
|
777
|
+
return Promise.reject(new WalletUiAuthError("auth-unsupported"));
|
|
778
|
+
}
|
|
779
|
+
});
|
|
780
|
+
}
|
|
781
|
+
function WalletUiAuthMessage({
|
|
782
|
+
account,
|
|
783
|
+
children,
|
|
784
|
+
wallet
|
|
785
|
+
}) {
|
|
786
|
+
const signMessage = react.useSignMessage(account);
|
|
787
|
+
const auth = useWalletUiAuthMessage({ account, signMessage});
|
|
788
|
+
return children(auth);
|
|
789
|
+
}
|
|
790
|
+
function WalletUiAuthMessageConnect({ children, wallet }) {
|
|
791
|
+
const { connect: selectAccount } = useWalletUi();
|
|
792
|
+
const [isConnecting, connectWallet] = react$1.useConnect(wallet);
|
|
793
|
+
const [isSigningIn, setIsSigningIn] = React19.useState(false);
|
|
794
|
+
const signIn = React19.useCallback(
|
|
795
|
+
async ({ input = {} } = {}) => {
|
|
796
|
+
setIsSigningIn(true);
|
|
797
|
+
try {
|
|
798
|
+
const [firstAccount] = await connectWallet();
|
|
799
|
+
if (!firstAccount) {
|
|
800
|
+
throw new WalletUiAuthError("wallet-not-connected");
|
|
801
|
+
}
|
|
802
|
+
if (!hasFeature(firstAccount, walletStandardFeatures.SolanaSignMessage)) {
|
|
803
|
+
throw new WalletUiAuthError("auth-unsupported");
|
|
804
|
+
}
|
|
805
|
+
const result = await signInWithMessageFeature({
|
|
806
|
+
account: firstAccount,
|
|
807
|
+
input
|
|
808
|
+
});
|
|
809
|
+
selectAccount(firstAccount);
|
|
810
|
+
return result;
|
|
811
|
+
} finally {
|
|
812
|
+
setIsSigningIn(false);
|
|
813
|
+
}
|
|
814
|
+
},
|
|
815
|
+
[connectWallet, selectAccount]
|
|
816
|
+
);
|
|
817
|
+
return children({
|
|
818
|
+
canSignIn: true,
|
|
819
|
+
isSigningIn: isConnecting || isSigningIn,
|
|
820
|
+
messageSigningAvailable: false,
|
|
821
|
+
nativeSignInAvailable: false,
|
|
822
|
+
reason: void 0,
|
|
823
|
+
signIn
|
|
824
|
+
});
|
|
825
|
+
}
|
|
826
|
+
function WalletUiAuthNative({ children, wallet }) {
|
|
827
|
+
return children(useWalletUiAuthNative({ wallet }));
|
|
828
|
+
}
|
|
530
829
|
function WalletUiClusterDropdown({ buttonProps, ...props }) {
|
|
531
830
|
const dropdown = useBaseDropdown();
|
|
532
831
|
const { cluster, clusters, setCluster } = useWalletUiCluster();
|
|
533
|
-
return /* @__PURE__ */
|
|
832
|
+
return /* @__PURE__ */ React19__default.default.createElement(
|
|
534
833
|
BaseDropdown,
|
|
535
834
|
{
|
|
536
835
|
buttonProps: { ...buttonProps, label: cluster.label },
|
|
@@ -549,7 +848,7 @@ function WalletUiClusterDropdown({ buttonProps, ...props }) {
|
|
|
549
848
|
);
|
|
550
849
|
}
|
|
551
850
|
function WalletUiIconNoWallet({ ...props }) {
|
|
552
|
-
return /* @__PURE__ */
|
|
851
|
+
return /* @__PURE__ */ React19__default.default.createElement(BaseSvg, { fill: "none", height: 100, width: 100, viewBox: "0 0 97 96", ...props }, /* @__PURE__ */ React19__default.default.createElement("circle", { cx: "48.5", cy: "48", r: "48", fill: "url(#paint0_linear_880_5115)", fillOpacity: "0.1" }), /* @__PURE__ */ React19__default.default.createElement(
|
|
553
852
|
"circle",
|
|
554
853
|
{
|
|
555
854
|
cx: "48.5",
|
|
@@ -559,19 +858,19 @@ function WalletUiIconNoWallet({ ...props }) {
|
|
|
559
858
|
strokeOpacity: "0.4",
|
|
560
859
|
strokeWidth: "2"
|
|
561
860
|
}
|
|
562
|
-
), /* @__PURE__ */
|
|
861
|
+
), /* @__PURE__ */ React19__default.default.createElement("g", { clipPath: "url(#clip0_880_5115)" }, /* @__PURE__ */ React19__default.default.createElement(
|
|
563
862
|
"path",
|
|
564
863
|
{
|
|
565
864
|
d: "M65.5769 28.1523H31.4231C27.6057 28.1523 24.5 31.258 24.5 35.0754V60.9215C24.5 64.7389 27.6057 67.8446 31.4231 67.8446H65.5769C69.3943 67.8446 72.5 64.7389 72.5 60.9215V35.0754C72.5 31.258 69.3943 28.1523 65.5769 28.1523ZM69.7308 52.1523H59.5769C57.2865 52.1523 55.4231 50.289 55.4231 47.9985C55.4231 45.708 57.2864 43.8446 59.5769 43.8446H69.7308V52.1523ZM69.7308 41.0754H59.5769C55.7595 41.0754 52.6539 44.1811 52.6539 47.9985C52.6539 51.8159 55.7595 54.9215 59.5769 54.9215H69.7308V60.9215C69.7308 63.2119 67.8674 65.0754 65.5769 65.0754H31.4231C29.1327 65.0754 27.2692 63.212 27.2692 60.9215V35.0754C27.2692 32.785 29.1326 30.9215 31.4231 30.9215H65.5769C67.8673 30.9215 69.7308 32.7849 69.7308 35.0754V41.0754Z",
|
|
566
865
|
fill: "url(#paint2_linear_880_5115)"
|
|
567
866
|
}
|
|
568
|
-
), /* @__PURE__ */
|
|
867
|
+
), /* @__PURE__ */ React19__default.default.createElement(
|
|
569
868
|
"path",
|
|
570
869
|
{
|
|
571
870
|
d: "M61.4231 46.6172H59.577C58.8123 46.6172 58.1924 47.2371 58.1924 48.0018C58.1924 48.7665 58.8123 49.3863 59.577 49.3863H61.4231C62.1878 49.3863 62.8077 48.7664 62.8077 48.0018C62.8077 47.2371 62.1878 46.6172 61.4231 46.6172Z",
|
|
572
871
|
fill: "url(#paint3_linear_880_5115)"
|
|
573
872
|
}
|
|
574
|
-
)), /* @__PURE__ */
|
|
873
|
+
)), /* @__PURE__ */ React19__default.default.createElement("defs", null, /* @__PURE__ */ React19__default.default.createElement(
|
|
575
874
|
"linearGradient",
|
|
576
875
|
{
|
|
577
876
|
id: "paint0_linear_880_5115",
|
|
@@ -581,13 +880,13 @@ function WalletUiIconNoWallet({ ...props }) {
|
|
|
581
880
|
y2: "8.42498",
|
|
582
881
|
gradientUnits: "userSpaceOnUse"
|
|
583
882
|
},
|
|
584
|
-
/* @__PURE__ */
|
|
585
|
-
/* @__PURE__ */
|
|
586
|
-
/* @__PURE__ */
|
|
587
|
-
/* @__PURE__ */
|
|
588
|
-
/* @__PURE__ */
|
|
589
|
-
/* @__PURE__ */
|
|
590
|
-
), /* @__PURE__ */
|
|
883
|
+
/* @__PURE__ */ React19__default.default.createElement("stop", { stopColor: "#9945FF" }),
|
|
884
|
+
/* @__PURE__ */ React19__default.default.createElement("stop", { offset: "0.14", stopColor: "#8A53F4" }),
|
|
885
|
+
/* @__PURE__ */ React19__default.default.createElement("stop", { offset: "0.42", stopColor: "#6377D6" }),
|
|
886
|
+
/* @__PURE__ */ React19__default.default.createElement("stop", { offset: "0.79", stopColor: "#24B0A7" }),
|
|
887
|
+
/* @__PURE__ */ React19__default.default.createElement("stop", { offset: "0.99", stopColor: "#00D18C" }),
|
|
888
|
+
/* @__PURE__ */ React19__default.default.createElement("stop", { offset: "1", stopColor: "#00D18C" })
|
|
889
|
+
), /* @__PURE__ */ React19__default.default.createElement(
|
|
591
890
|
"linearGradient",
|
|
592
891
|
{
|
|
593
892
|
id: "paint1_linear_880_5115",
|
|
@@ -597,13 +896,13 @@ function WalletUiIconNoWallet({ ...props }) {
|
|
|
597
896
|
y2: "8.42498",
|
|
598
897
|
gradientUnits: "userSpaceOnUse"
|
|
599
898
|
},
|
|
600
|
-
/* @__PURE__ */
|
|
601
|
-
/* @__PURE__ */
|
|
602
|
-
/* @__PURE__ */
|
|
603
|
-
/* @__PURE__ */
|
|
604
|
-
/* @__PURE__ */
|
|
605
|
-
/* @__PURE__ */
|
|
606
|
-
), /* @__PURE__ */
|
|
899
|
+
/* @__PURE__ */ React19__default.default.createElement("stop", { stopColor: "#9945FF" }),
|
|
900
|
+
/* @__PURE__ */ React19__default.default.createElement("stop", { offset: "0.14", stopColor: "#8A53F4" }),
|
|
901
|
+
/* @__PURE__ */ React19__default.default.createElement("stop", { offset: "0.42", stopColor: "#6377D6" }),
|
|
902
|
+
/* @__PURE__ */ React19__default.default.createElement("stop", { offset: "0.79", stopColor: "#24B0A7" }),
|
|
903
|
+
/* @__PURE__ */ React19__default.default.createElement("stop", { offset: "0.99", stopColor: "#00D18C" }),
|
|
904
|
+
/* @__PURE__ */ React19__default.default.createElement("stop", { offset: "1", stopColor: "#00D18C" })
|
|
905
|
+
), /* @__PURE__ */ React19__default.default.createElement(
|
|
607
906
|
"linearGradient",
|
|
608
907
|
{
|
|
609
908
|
id: "paint2_linear_880_5115",
|
|
@@ -613,13 +912,13 @@ function WalletUiIconNoWallet({ ...props }) {
|
|
|
613
912
|
y2: "23.7879",
|
|
614
913
|
gradientUnits: "userSpaceOnUse"
|
|
615
914
|
},
|
|
616
|
-
/* @__PURE__ */
|
|
617
|
-
/* @__PURE__ */
|
|
618
|
-
/* @__PURE__ */
|
|
619
|
-
/* @__PURE__ */
|
|
620
|
-
/* @__PURE__ */
|
|
621
|
-
/* @__PURE__ */
|
|
622
|
-
), /* @__PURE__ */
|
|
915
|
+
/* @__PURE__ */ React19__default.default.createElement("stop", { stopColor: "#9945FF" }),
|
|
916
|
+
/* @__PURE__ */ React19__default.default.createElement("stop", { offset: "0.14", stopColor: "#8A53F4" }),
|
|
917
|
+
/* @__PURE__ */ React19__default.default.createElement("stop", { offset: "0.42", stopColor: "#6377D6" }),
|
|
918
|
+
/* @__PURE__ */ React19__default.default.createElement("stop", { offset: "0.79", stopColor: "#24B0A7" }),
|
|
919
|
+
/* @__PURE__ */ React19__default.default.createElement("stop", { offset: "0.99", stopColor: "#00D18C" }),
|
|
920
|
+
/* @__PURE__ */ React19__default.default.createElement("stop", { offset: "1", stopColor: "#00D18C" })
|
|
921
|
+
), /* @__PURE__ */ React19__default.default.createElement(
|
|
623
922
|
"linearGradient",
|
|
624
923
|
{
|
|
625
924
|
id: "paint3_linear_880_5115",
|
|
@@ -629,22 +928,22 @@ function WalletUiIconNoWallet({ ...props }) {
|
|
|
629
928
|
y2: "45.4453",
|
|
630
929
|
gradientUnits: "userSpaceOnUse"
|
|
631
930
|
},
|
|
632
|
-
/* @__PURE__ */
|
|
633
|
-
/* @__PURE__ */
|
|
634
|
-
/* @__PURE__ */
|
|
635
|
-
/* @__PURE__ */
|
|
636
|
-
/* @__PURE__ */
|
|
637
|
-
/* @__PURE__ */
|
|
638
|
-
), /* @__PURE__ */
|
|
931
|
+
/* @__PURE__ */ React19__default.default.createElement("stop", { stopColor: "#9945FF" }),
|
|
932
|
+
/* @__PURE__ */ React19__default.default.createElement("stop", { offset: "0.14", stopColor: "#8A53F4" }),
|
|
933
|
+
/* @__PURE__ */ React19__default.default.createElement("stop", { offset: "0.42", stopColor: "#6377D6" }),
|
|
934
|
+
/* @__PURE__ */ React19__default.default.createElement("stop", { offset: "0.79", stopColor: "#24B0A7" }),
|
|
935
|
+
/* @__PURE__ */ React19__default.default.createElement("stop", { offset: "0.99", stopColor: "#00D18C" }),
|
|
936
|
+
/* @__PURE__ */ React19__default.default.createElement("stop", { offset: "1", stopColor: "#00D18C" })
|
|
937
|
+
), /* @__PURE__ */ React19__default.default.createElement("clipPath", { id: "clip0_880_5115" }, /* @__PURE__ */ React19__default.default.createElement("rect", { width: "48", height: "48", fill: "white", transform: "translate(24.5 24)" }))));
|
|
639
938
|
}
|
|
640
939
|
function WalletUiLabel({ className, wallet, ...props }) {
|
|
641
940
|
if (!wallet) {
|
|
642
941
|
return null;
|
|
643
942
|
}
|
|
644
|
-
return /* @__PURE__ */
|
|
943
|
+
return /* @__PURE__ */ React19__default.default.createElement("span", { "data-wu": "wallet-ui-label", className: `${className ?? ""}`, ...props }, wallet.name);
|
|
645
944
|
}
|
|
646
945
|
function WalletUiListButton({ className, select, wallet, ...props }) {
|
|
647
|
-
const [pending, setPending] =
|
|
946
|
+
const [pending, setPending] = React19__default.default.useState(false);
|
|
648
947
|
function handleSelect() {
|
|
649
948
|
if (!select) {
|
|
650
949
|
return;
|
|
@@ -656,7 +955,7 @@ function WalletUiListButton({ className, select, wallet, ...props }) {
|
|
|
656
955
|
}
|
|
657
956
|
void select(account).finally(() => setPending(false));
|
|
658
957
|
}
|
|
659
|
-
return /* @__PURE__ */
|
|
958
|
+
return /* @__PURE__ */ React19__default.default.createElement(
|
|
660
959
|
"button",
|
|
661
960
|
{
|
|
662
961
|
disabled: pending,
|
|
@@ -665,20 +964,20 @@ function WalletUiListButton({ className, select, wallet, ...props }) {
|
|
|
665
964
|
onClick: handleSelect,
|
|
666
965
|
...props
|
|
667
966
|
},
|
|
668
|
-
/* @__PURE__ */
|
|
669
|
-
/* @__PURE__ */
|
|
967
|
+
/* @__PURE__ */ React19__default.default.createElement(WalletUiIcon, { wallet }),
|
|
968
|
+
/* @__PURE__ */ React19__default.default.createElement(WalletUiLabel, { wallet })
|
|
670
969
|
);
|
|
671
970
|
}
|
|
672
971
|
|
|
673
972
|
// src/wallet-ui-list.tsx
|
|
674
973
|
function WalletUiList({ className, select, wallets, ...props }) {
|
|
675
|
-
return /* @__PURE__ */
|
|
974
|
+
return /* @__PURE__ */ React19__default.default.createElement("div", { "data-wu": "wallet-ui-list", className: `${className ?? ""}`, ...props }, wallets.map((wallet) => /* @__PURE__ */ React19__default.default.createElement(WalletUiListButton, { key: wallet.name, select, wallet })));
|
|
676
975
|
}
|
|
677
976
|
function WalletUiModal({ wallets, select, ...props }) {
|
|
678
|
-
return /* @__PURE__ */
|
|
977
|
+
return /* @__PURE__ */ React19__default.default.createElement(BaseModal, { description: "Connect a wallet on Solana to continue", ...props }, /* @__PURE__ */ React19__default.default.createElement(WalletUiList, { wallets, select }));
|
|
679
978
|
}
|
|
680
979
|
function WalletUiModalTrigger({ label = "Select Wallet", modal, ...props }) {
|
|
681
|
-
return /* @__PURE__ */
|
|
980
|
+
return /* @__PURE__ */ React19__default.default.createElement(BaseButton, { label, onClick: () => void modal.open(), ...props });
|
|
682
981
|
}
|
|
683
982
|
|
|
684
983
|
Object.defineProperty(exports, "getWalletAccountFeature", {
|
|
@@ -707,6 +1006,8 @@ exports.WalletUi = WalletUi;
|
|
|
707
1006
|
exports.WalletUiAccountContext = WalletUiAccountContext;
|
|
708
1007
|
exports.WalletUiAccountContextProvider = WalletUiAccountContextProvider;
|
|
709
1008
|
exports.WalletUiAccountGuard = WalletUiAccountGuard;
|
|
1009
|
+
exports.WalletUiAuth = WalletUiAuth;
|
|
1010
|
+
exports.WalletUiAuthError = WalletUiAuthError;
|
|
710
1011
|
exports.WalletUiClusterContext = WalletUiClusterContext;
|
|
711
1012
|
exports.WalletUiClusterContextProvider = WalletUiClusterContextProvider;
|
|
712
1013
|
exports.WalletUiClusterDropdown = WalletUiClusterDropdown;
|
|
@@ -727,6 +1028,7 @@ exports.useBaseDropdown = useBaseDropdown;
|
|
|
727
1028
|
exports.useBaseModal = useBaseModal;
|
|
728
1029
|
exports.useWalletUi = useWalletUi;
|
|
729
1030
|
exports.useWalletUiAccount = useWalletUiAccount;
|
|
1031
|
+
exports.useWalletUiAuth = useWalletUiAuth;
|
|
730
1032
|
exports.useWalletUiCluster = useWalletUiCluster;
|
|
731
1033
|
exports.useWalletUiDropdown = useWalletUiDropdown;
|
|
732
1034
|
exports.useWalletUiSigner = useWalletUiSigner;
|
|
@@ -738,22 +1040,22 @@ Object.keys(react$1).forEach(function (k) {
|
|
|
738
1040
|
get: function () { return react$1[k]; }
|
|
739
1041
|
});
|
|
740
1042
|
});
|
|
741
|
-
Object.keys(
|
|
1043
|
+
Object.keys(walletStandardFeatures).forEach(function (k) {
|
|
742
1044
|
if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
|
|
743
1045
|
enumerable: true,
|
|
744
|
-
get: function () { return
|
|
1046
|
+
get: function () { return walletStandardFeatures[k]; }
|
|
745
1047
|
});
|
|
746
1048
|
});
|
|
747
|
-
Object.keys(
|
|
1049
|
+
Object.keys(react).forEach(function (k) {
|
|
748
1050
|
if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
|
|
749
1051
|
enumerable: true,
|
|
750
|
-
get: function () { return
|
|
1052
|
+
get: function () { return react[k]; }
|
|
751
1053
|
});
|
|
752
1054
|
});
|
|
753
|
-
Object.keys(
|
|
1055
|
+
Object.keys(core$1).forEach(function (k) {
|
|
754
1056
|
if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
|
|
755
1057
|
enumerable: true,
|
|
756
|
-
get: function () { return
|
|
1058
|
+
get: function () { return core$1[k]; }
|
|
757
1059
|
});
|
|
758
1060
|
});
|
|
759
1061
|
Object.keys(core).forEach(function (k) {
|