miniwallet 0.1.15 → 0.1.17

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.
Files changed (2) hide show
  1. package/dist/miniwallet.js +171 -145
  2. package/package.json +1 -3
@@ -1,26 +1,26 @@
1
1
  import "./miniwallet.css";
2
- import { createContext as e, useCallback as t, useContext as n, useEffect as r, useMemo as i, useState as a } from "react";
3
- import { jsx as o, jsxs as s } from "react/jsx-runtime";
2
+ import { createContext as e, useCallback as t, useContext as n, useEffect as r, useMemo as i, useRef as a, useState as o } from "react";
3
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
4
4
  //#region src/MiniWalletContext.tsx
5
- var c = e(null);
5
+ var l = e(null);
6
6
  //#endregion
7
7
  //#region src/utils/formatUnits.ts
8
- function l(e) {
8
+ function u(e) {
9
9
  if (typeof e == "bigint") return e;
10
10
  let t = e.trim();
11
11
  if (!t) throw Error("value must not be empty");
12
12
  return BigInt(t);
13
13
  }
14
- function u(e, t) {
14
+ function d(e, t) {
15
15
  if (!Number.isInteger(t) || t < 0) throw Error("decimals must be a non-negative integer");
16
- let n = l(e);
16
+ let n = u(e);
17
17
  if (t === 0) return n.toString();
18
18
  let r = 10n ** BigInt(t), i = n / r, a = n % r;
19
19
  return a === 0n ? i.toString() : `${i}.${a.toString().padStart(t, "0").replace(/0+$/, "")}`;
20
20
  }
21
21
  //#endregion
22
22
  //#region src/constants.ts
23
- var d = [
23
+ var f = [
24
24
  {
25
25
  id: "metamask",
26
26
  name: "MetaMask",
@@ -41,13 +41,13 @@ var d = [
41
41
  name: "Coinbase",
42
42
  icon: "data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20t='1783439807758'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='13209'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='32'%20height='32'%3e%3cpath%20d='M1024%20186.181818a186.181818%20186.181818%200%200%200-186.181818-186.181818H186.181818a186.181818%20186.181818%200%200%200-186.181818%20186.181818v651.636364a186.181818%20186.181818%200%200%200%20186.181818%20186.181818h651.636364a186.181818%20186.181818%200%200%200%20186.181818-186.181818V186.181818z'%20fill='%232C5FF6'%20p-id='13210'%3e%3c/path%3e%3cpath%20d='M512%20870.4a358.4%20358.4%200%201%200%200-716.8%20358.4%20358.4%200%200%200%200%20716.8zM422.4%20394.984727h179.2a27.461818%2027.461818%200%200%201%2027.461818%2027.415273v179.2a27.461818%2027.461818%200%200%201-27.461818%2027.461818h-179.2a27.461818%2027.461818%200%200%201-27.461818-27.461818v-179.2a27.461818%2027.461818%200%200%201%2027.461818-27.461818z'%20fill='%23FFFFFF'%20p-id='13211'%3e%3c/path%3e%3c/svg%3e"
43
43
  }
44
- ], f = {
44
+ ], p = {
45
45
  "io.metamask": "metamask",
46
46
  "com.okex.wallet": "okx",
47
47
  "com.okx.wallet": "okx",
48
48
  "app.phantom": "phantom",
49
49
  "com.coinbase.wallet": "coinbase"
50
- }, p = [
50
+ }, m = [
51
51
  {
52
52
  id: 1,
53
53
  name: "Ethereum",
@@ -69,19 +69,17 @@ var d = [
69
69
  ];
70
70
  //#endregion
71
71
  //#region src/MiniWalletProvider.tsx
72
- function m({ children: e, chains: n = [] }) {
73
- let [s, l] = a(""), [m, h] = a(""), [g, _] = a(0), [v, y] = a(""), [b, x] = a(null), [S, C] = a({}), w = i(() => n.length > 0 ? n : p, [n]), T = i(() => S[m] ?? null, [S, m]), E = i(() => d.find((e) => e.id === m), [m]), D = i(() => !!s, [s]), O = i(() => w.find((e) => e.id === g) || null, [w, g]), k = i(() => !O || !v || !O?.decimals ? "0" : Number(u(v, O.decimals)).toFixed(3), [v, O]), A = t(async (e) => {
74
- let { id: t } = e, n = S[t];
75
- if (!n) {
76
- alert("请安装钱包");
77
- return;
78
- }
72
+ function h({ children: e, chains: n = [] }) {
73
+ let [c, u] = o(""), [h, g] = o(""), [_, v] = o(0), [y, b] = o(""), [x, S] = o(null), C = a({}), [w, T] = o(0), E = i(() => n.length > 0 ? n : m, [n]), D = i(() => f.find((e) => e.id === h), [h]), O = i(() => !!c, [c]), k = i(() => E.find((e) => e.id === _) || null, [E, _]), A = i(() => !k || !y || !k?.decimals ? "0" : Number(d(y, k.decimals)).toFixed(3), [y, k]), j = t(async (e) => {
79
74
  try {
80
- x(e), console.log("provider: ", n);
81
- let r = await n.request({ method: "eth_requestAccounts" });
82
- console.log("accounts: ", r), console.log("provider.chainId: ", n.chainId);
83
- let i = parseInt(String(n.chainId ?? "0x0"), 16);
84
- l(r[0]), h(t), _(i), localStorage.setItem("miniwallet:lastWalletId", t);
75
+ let { id: t } = e, n = C.current[t];
76
+ if (!n) {
77
+ alert("请安装钱包");
78
+ return;
79
+ }
80
+ S(e);
81
+ let r = await n.request({ method: "eth_requestAccounts" }), i = parseInt(String(n.chainId ?? "0x0"), 16);
82
+ u(r[0]), g(t), v(i), localStorage.setItem("miniwallet:lastWalletId", t);
85
83
  } catch (e) {
86
84
  console.log("error: ", e);
87
85
  let t = e, n = t?.code ?? "", r = t?.message ?? "";
@@ -91,103 +89,111 @@ function m({ children: e, chains: n = [] }) {
91
89
  }
92
90
  alert(`Connect failed${n && `\n${n}`}${r && `\n${r}`}`);
93
91
  } finally {
94
- x(null);
92
+ S(null);
95
93
  }
96
- }, [S]), j = t(async () => {
94
+ }, []), M = t(async () => {
97
95
  try {
98
- if (!T || !m) {
96
+ let e = C.current[h];
97
+ if (!e || !h) {
99
98
  alert("请安装钱包");
100
99
  return;
101
100
  }
102
- m !== "okx" && await T.request({
101
+ h !== "okx" && await e.request({
103
102
  method: "wallet_revokePermissions",
104
103
  params: [{ eth_accounts: {} }]
105
104
  });
106
105
  } catch (e) {
107
106
  console.error("disconnect error: ", e);
108
107
  } finally {
109
- l(""), h(""), _(0), localStorage.removeItem("miniwallet:lastWalletId");
110
- }
111
- }, [T, m]), M = t(async (e) => {
112
- if (!T) {
113
- alert("钱包不存在");
114
- return;
108
+ u(""), g(""), v(0), localStorage.removeItem("miniwallet:lastWalletId");
115
109
  }
110
+ }, [h]), N = t(async (e) => {
116
111
  try {
117
- await T.request({
112
+ let t = C.current[h];
113
+ if (!t) {
114
+ alert("钱包不存在");
115
+ return;
116
+ }
117
+ await t.request({
118
118
  method: "wallet_switchEthereumChain",
119
119
  params: [{ chainId: `0x${e.id.toString(16)}` }]
120
- }), _(e.id);
120
+ }), v(e.id);
121
121
  } catch (e) {
122
122
  console.log("switchError: ", e);
123
123
  let t = e, n = t?.code ?? "", r = t?.message ?? "";
124
124
  alert(`Switch failed${n && `\n${n}`}${r && `\n${r}`}`);
125
125
  }
126
- }, [T]), N = t(async () => {
126
+ }, [h]), P = t(async () => {
127
127
  try {
128
- if (!s || !T) return;
129
- let e = await T.request({
128
+ let e = C.current[h];
129
+ if (!c || !e) return;
130
+ let t = await e.request({
130
131
  method: "eth_getBalance",
131
- params: [s, "latest"]
132
+ params: [c, "latest"]
132
133
  });
133
- y(BigInt(e).toString());
134
+ b(BigInt(t).toString());
134
135
  } catch (e) {
135
136
  console.error("getBalance error: ", e);
136
137
  }
137
- }, [s, T]), P = i(() => ({
138
- account: s,
139
- balance: k,
140
- isConnected: D,
141
- connectingWallet: b,
142
- selectedChain: O,
143
- wallet: E,
144
- chains: w,
145
- connect: A,
146
- switchChain: M,
147
- disconnect: j
138
+ }, [c, h]), F = i(() => ({
139
+ account: c,
140
+ balance: A,
141
+ isConnected: O,
142
+ connectingWallet: x,
143
+ selectedChain: k,
144
+ wallet: D,
145
+ chains: E,
146
+ connect: j,
147
+ switchChain: N,
148
+ disconnect: M
148
149
  }), [
149
- s,
150
+ c,
151
+ A,
152
+ O,
153
+ x,
150
154
  k,
151
155
  D,
152
- b,
153
- O,
154
156
  E,
155
- w,
156
- A,
157
- M,
158
- j
157
+ j,
158
+ N,
159
+ M
159
160
  ]);
160
161
  return r(() => {
161
162
  let e = ((e) => {
162
- let { info: t, provider: n } = e.detail ?? {}, r = f[t?.rdns];
163
- !r || !n?.request || C((e) => e[r] === n ? e : {
164
- ...e,
163
+ let { info: t, provider: n } = e.detail ?? {}, r = p[t?.rdns];
164
+ !r || !n?.request || C.current[r] !== n && (C.current = {
165
+ ...C.current,
165
166
  [r]: n
166
- });
167
+ }, T((e) => e + 1));
167
168
  });
168
169
  return window.addEventListener("eip6963:announceProvider", e), window.dispatchEvent(new Event("eip6963:requestProvider")), () => {
169
- window.removeEventListener("eip6963:announceProvider", e), C({});
170
+ window.removeEventListener("eip6963:announceProvider", e);
170
171
  };
171
172
  }, []), r(() => {
172
- g && N();
173
- }, [N, g]), r(() => {
174
- if (!D || !T?.on) return;
175
- let e = (e) => {
176
- console.log("ChainChanged chainId: ", e), _(parseInt(e, 16));
177
- }, t = (e) => {
178
- console.log("AccountsChanged accounts: ", e), l(e[0] ?? "");
173
+ _ && P();
174
+ }, [P, _]), r(() => {
175
+ let e = C.current[h];
176
+ if (!O || !e?.on) return;
177
+ let t = (e) => {
178
+ console.log("ChainChanged chainId: ", e), v(parseInt(e, 16));
179
+ }, n = (e) => {
180
+ console.log("AccountsChanged accounts: ", e), u(e[0] ?? "");
179
181
  };
180
- return console.log("Listen chainChanged and accountsChanged"), T.on("chainChanged", e), T.on("accountsChanged", t), () => {
181
- console.log("RemoveListener chainChanged and accountsChanged"), T.removeListener("chainChanged", e), T.removeListener("accountsChanged", t);
182
+ return console.log("Listen chainChanged and accountsChanged"), e.on("chainChanged", t), e.on("accountsChanged", n), () => {
183
+ console.log("RemoveListener chainChanged and accountsChanged"), e.removeListener("chainChanged", t), e.removeListener("accountsChanged", n);
182
184
  };
183
- }, [D, T]), r(() => {
184
- if (!s) return;
185
- let e = setInterval(N, 1e4);
185
+ }, [
186
+ O,
187
+ h,
188
+ w
189
+ ]), r(() => {
190
+ if (!c) return;
191
+ let e = setInterval(P, 1e4);
186
192
  return () => clearInterval(e);
187
- }, [s, N]), r(() => {
193
+ }, [c, P]), r(() => {
188
194
  let e = localStorage.getItem("miniwallet:lastWalletId");
189
195
  if (!e) return;
190
- let t = S[e];
196
+ let t = C.current[e];
191
197
  if (!t) return;
192
198
  let n = !1;
193
199
  return (async () => {
@@ -197,132 +203,132 @@ function m({ children: e, chains: n = [] }) {
197
203
  localStorage.removeItem("miniwallet:lastWalletId");
198
204
  return;
199
205
  }
200
- l(r[0]), h(e), _(parseInt(t.chainId, 16));
206
+ u(r[0]), g(e), v(parseInt(t.chainId, 16));
201
207
  }
202
208
  })(), () => {
203
209
  n = !0;
204
210
  };
205
- }, [S]), /* @__PURE__ */ o(c.Provider, {
206
- value: P,
211
+ }, [w]), /* @__PURE__ */ s(l.Provider, {
212
+ value: F,
207
213
  children: e
208
214
  });
209
215
  }
210
216
  //#endregion
211
217
  //#region src/useMiniWallet.ts
212
- function h() {
213
- let e = n(c);
218
+ function g() {
219
+ let e = n(l);
214
220
  if (!e) throw Error("useMiniWallet 必须在 MiniWalletProvider 内使用");
215
221
  return e;
216
222
  }
217
223
  //#endregion
218
224
  //#region src/icons/disconnect.svg
219
- var g = "data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20t='1783575961451'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='5071'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='32'%20height='32'%3e%3cpath%20d='M512.922%2063.583c248.335%200%20449.712%20201.384%20449.712%20449.71%200%20248.333-201.377%20449.702-449.712%20449.702-248.333%200-449.71-201.369-449.71-449.702%200-248.326%20201.377-449.71%20449.71-449.71z%20m148.683%20213.634l-35.351%2061.247a206.8%20206.8%200%200%201%2034.37%2027.739c37.359%2037.351%2060.475%2088.96%2060.475%20145.955%200%2057.004-23.117%20108.607-60.475%20145.965-37.344%2037.352-88.945%2060.469-145.949%2060.469-56.987%200-108.606-23.117-145.965-60.469-37.359-37.359-60.461-88.962-60.461-145.965%200-56.995%2023.117-108.605%2060.461-145.955a209.04%20209.04%200%200%201%2027.762-23.286l-35.43-61.359a278.69%20278.69%200%200%200-42.279%2034.69c-50.156%2050.148-81.18%20119.417-81.18%20195.91%200%2076.504%2031.041%20145.773%2081.18%20195.929%2050.139%2050.139%20119.408%2081.166%20195.912%2081.166%2076.502%200%20145.771-31.026%20195.91-81.166%2050.156-50.156%2081.182-119.425%2081.182-195.929%200-76.494-31.026-145.763-81.182-195.91a277.704%20277.704%200%200%200-48.98-39.031zM473.618%20128.865v337.849h75.458V128.865h-75.458z'%20fill='%23e6523f'%20p-id='5072'%3e%3c/path%3e%3c/svg%3e";
225
+ var _ = "data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20t='1783575961451'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='5071'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='32'%20height='32'%3e%3cpath%20d='M512.922%2063.583c248.335%200%20449.712%20201.384%20449.712%20449.71%200%20248.333-201.377%20449.702-449.712%20449.702-248.333%200-449.71-201.369-449.71-449.702%200-248.326%20201.377-449.71%20449.71-449.71z%20m148.683%20213.634l-35.351%2061.247a206.8%20206.8%200%200%201%2034.37%2027.739c37.359%2037.351%2060.475%2088.96%2060.475%20145.955%200%2057.004-23.117%20108.607-60.475%20145.965-37.344%2037.352-88.945%2060.469-145.949%2060.469-56.987%200-108.606-23.117-145.965-60.469-37.359-37.359-60.461-88.962-60.461-145.965%200-56.995%2023.117-108.605%2060.461-145.955a209.04%20209.04%200%200%201%2027.762-23.286l-35.43-61.359a278.69%20278.69%200%200%200-42.279%2034.69c-50.156%2050.148-81.18%20119.417-81.18%20195.91%200%2076.504%2031.041%20145.773%2081.18%20195.929%2050.139%2050.139%20119.408%2081.166%20195.912%2081.166%2076.502%200%20145.771-31.026%20195.91-81.166%2050.156-50.156%2081.182-119.425%2081.182-195.929%200-76.494-31.026-145.763-81.182-195.91a277.704%20277.704%200%200%200-48.98-39.031zM473.618%20128.865v337.849h75.458V128.865h-75.458z'%20fill='%23e6523f'%20p-id='5072'%3e%3c/path%3e%3c/svg%3e";
220
226
  //#endregion
221
227
  //#region src/MiniWalletButton.tsx
222
- function _({ label: e = "Connect Wallet" }) {
223
- let { account: n, balance: c, isConnected: l, selectedChain: u, wallet: f, switchChain: p, chains: m, connect: _, disconnect: v } = h(), [y, b] = a(!1), [x, S] = a(!1), [C, w] = a("复制地址"), T = i(() => n ? `${n.slice(0, 6)}...${n.slice(-4)}` : "", [n]), E = t(() => {
224
- b(!0);
225
- }, []), D = t(() => {
226
- b(!1);
227
- }, []), O = t(async () => {
228
+ function v({ label: e = "Connect Wallet" }) {
229
+ let { account: n, balance: a, isConnected: l, connectingWallet: u, selectedChain: d, wallet: p, switchChain: m, chains: h, connect: v, disconnect: y } = g(), [b, x] = o(!1), [S, C] = o(!1), [w, T] = o(!1), [E, D] = o("复制地址"), O = i(() => n ? `${n.slice(0, 6)}...${n.slice(-4)}` : "", [n]), k = t(() => {
230
+ x(!0);
231
+ }, []), A = t(() => {
232
+ x(!1), C(!1);
233
+ }, []), j = t(async () => {
228
234
  try {
229
- await navigator.clipboard.writeText(n), w("已复制!"), setTimeout(() => {
230
- w("复制地址");
235
+ await navigator.clipboard.writeText(n), D("已复制!"), setTimeout(() => {
236
+ D("复制地址");
231
237
  }, 1e3);
232
238
  } catch (e) {
233
239
  console.error("copy", e);
234
240
  }
235
241
  }, [n]);
236
242
  return r(() => {
237
- l && b(!1);
238
- }, [l]), l ? /* @__PURE__ */ s("section", {
243
+ l && A();
244
+ }, [A, l]), l ? /* @__PURE__ */ c("section", {
239
245
  className: "inline-flex items-center justify-center text-center",
240
246
  children: [
241
- /* @__PURE__ */ o("select", {
242
- value: u?.id,
243
- onChange: (e) => p(m.find((t) => t.id === Number(e.target.value))),
247
+ /* @__PURE__ */ s("select", {
248
+ value: d?.id,
249
+ onChange: (e) => m(h.find((t) => t.id === Number(e.target.value))),
244
250
  className: "bg-transparent1 mr-4 cursor-pointer rounded-sm border-none p-1 text-gray-600 outline-none hover:bg-gray-100",
245
- children: m.map((e) => /* @__PURE__ */ o("option", {
251
+ children: h.map((e) => /* @__PURE__ */ s("option", {
246
252
  value: e.id,
247
253
  children: e.name
248
254
  }, e.id))
249
255
  }),
250
- /* @__PURE__ */ s("div", {
256
+ /* @__PURE__ */ c("div", {
251
257
  className: "flex items-center justify-center rounded-2xl bg-white pr-3 shadow-lg inset-ring-1 shadow-gray-200 inset-ring-gray-100",
252
- children: [/* @__PURE__ */ s("div", {
258
+ children: [/* @__PURE__ */ c("div", {
253
259
  onClick: () => {
254
- S(!0);
260
+ T(!0);
255
261
  },
256
262
  className: "flex cursor-pointer items-center justify-center space-x-2 rounded-l-2xl py-2.5 pr-1 pl-3 hover:bg-gray-50",
257
263
  children: [
258
- f && /* @__PURE__ */ o("img", {
259
- src: f.icon,
260
- alt: f.name,
264
+ p && /* @__PURE__ */ s("img", {
265
+ src: p.icon,
266
+ alt: p.name,
261
267
  className: "h-6 w-6"
262
268
  }),
263
- /* @__PURE__ */ o("div", {
269
+ /* @__PURE__ */ s("div", {
264
270
  className: "mr-1",
265
- children: T
271
+ children: O
266
272
  }),
267
- /* @__PURE__ */ s("span", {
273
+ /* @__PURE__ */ c("span", {
268
274
  className: "text-sm text-gray-400",
269
275
  children: [
270
276
  "(",
271
- c,
277
+ a,
272
278
  " ",
273
- u?.symbol ?? "",
279
+ d?.symbol ?? "",
274
280
  ")"
275
281
  ]
276
282
  })
277
283
  ]
278
- }), /* @__PURE__ */ o("button", {
284
+ }), /* @__PURE__ */ s("button", {
279
285
  className: "ml-1 h-6 w-6 cursor-pointer rounded-full",
280
- onClick: v,
281
- children: /* @__PURE__ */ o("img", {
282
- src: g,
286
+ onClick: y,
287
+ children: /* @__PURE__ */ s("img", {
288
+ src: _,
283
289
  alt: "disconnect",
284
290
  className: "h-[22px] w-6"
285
291
  })
286
292
  })]
287
293
  }),
288
- x && /* @__PURE__ */ o("div", {
294
+ w && /* @__PURE__ */ s("div", {
289
295
  className: "z-index-10 fixed top-0 right-0 bottom-0 left-0 bg-[rgba(0,0,0,0.5)]",
290
- children: /* @__PURE__ */ s("div", {
296
+ children: /* @__PURE__ */ c("div", {
291
297
  className: "absolute top-1/2 left-1/2 flex h-auto w-[380px] -translate-x-1/2 -translate-y-1/2 flex-col items-center gap-3 rounded-3xl bg-white p-10 pt-5 text-center",
292
298
  children: [
293
- /* @__PURE__ */ o("div", {
299
+ /* @__PURE__ */ s("div", {
294
300
  className: "mb-[-12px] w-full text-right",
295
- children: /* @__PURE__ */ o("button", {
301
+ children: /* @__PURE__ */ s("button", {
296
302
  className: "mr-[-20px] cursor-pointer rounded-full p-1 hover:bg-gray-100",
297
303
  onClick: () => {
298
- S(!1);
304
+ T(!1);
299
305
  },
300
- children: /* @__PURE__ */ s("svg", {
306
+ children: /* @__PURE__ */ c("svg", {
301
307
  xmlns: "http://www.w3.org/2000/svg",
302
308
  viewBox: "0 0 24 24",
303
309
  fill: "none",
304
310
  stroke: "currentColor",
305
311
  strokeWidth: "2",
306
312
  className: "h-8 w-8",
307
- children: [/* @__PURE__ */ o("path", { d: "M18 6 6 18" }), /* @__PURE__ */ o("path", { d: "m6 6 12 12" })]
313
+ children: [/* @__PURE__ */ s("path", { d: "M18 6 6 18" }), /* @__PURE__ */ s("path", { d: "m6 6 12 12" })]
308
314
  })
309
315
  })
310
316
  }),
311
- f && /* @__PURE__ */ o("img", {
312
- src: f.icon,
313
- alt: f.name,
317
+ p && /* @__PURE__ */ s("img", {
318
+ src: p.icon,
319
+ alt: p.name,
314
320
  className: "h-16 w-16"
315
321
  }),
316
- /* @__PURE__ */ o("p", { children: T }),
317
- /* @__PURE__ */ s("div", {
322
+ /* @__PURE__ */ s("p", { children: O }),
323
+ /* @__PURE__ */ c("div", {
318
324
  className: "mt-2 w-full space-x-10",
319
- children: [/* @__PURE__ */ o("button", {
320
- onClick: O,
325
+ children: [/* @__PURE__ */ s("button", {
326
+ onClick: j,
321
327
  className: "w-[112px] cursor-pointer rounded-xl bg-gray-700 py-2 text-white shadow-md shadow-gray-500/50 outline-none",
322
- children: C
323
- }), /* @__PURE__ */ o("button", {
328
+ children: E
329
+ }), /* @__PURE__ */ s("button", {
324
330
  type: "button",
325
- onClick: v,
331
+ onClick: y,
326
332
  className: "w-[112px] cursor-pointer rounded-xl bg-red-400 py-2 text-white shadow-md shadow-red-500/50 outline-none",
327
333
  children: "断开连接"
328
334
  })]
@@ -331,48 +337,68 @@ function _({ label: e = "Connect Wallet" }) {
331
337
  })
332
338
  })
333
339
  ]
334
- }) : /* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("button", {
340
+ }) : /* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("button", {
335
341
  type: "button",
336
- onClick: E,
342
+ onClick: k,
337
343
  className: "cursor-pointer rounded-xl bg-blue-500 px-4 py-2 text-white shadow-lg shadow-blue-500/50",
338
344
  children: e
339
- }), y && /* @__PURE__ */ o("div", {
345
+ }), b && /* @__PURE__ */ s("div", {
340
346
  className: "z-index-10 fixed top-0 right-0 bottom-0 left-0 bg-[rgba(0,0,0,0.5)]",
341
- children: /* @__PURE__ */ s("div", {
347
+ children: /* @__PURE__ */ c("div", {
342
348
  className: "absolute top-1/2 left-1/2 flex h-auto w-[380px] -translate-x-1/2 -translate-y-1/2 flex-col gap-3 rounded-3xl bg-white p-6",
343
- children: [/* @__PURE__ */ s("div", {
349
+ children: [/* @__PURE__ */ c("div", {
344
350
  className: "mb-2 flex items-center justify-between",
345
- children: [/* @__PURE__ */ o("span", {
351
+ children: [/* @__PURE__ */ s("span", {
346
352
  className: "text-2xl font-bold",
347
353
  children: "Connect Wallet"
348
- }), /* @__PURE__ */ o("button", {
354
+ }), /* @__PURE__ */ s("button", {
349
355
  type: "button",
350
356
  "aria-label": "Close",
351
357
  className: "cursor-pointer rounded-full p-1 hover:bg-gray-100",
352
- onClick: D,
353
- children: /* @__PURE__ */ s("svg", {
358
+ onClick: A,
359
+ children: /* @__PURE__ */ c("svg", {
354
360
  xmlns: "http://www.w3.org/2000/svg",
355
361
  viewBox: "0 0 24 24",
356
362
  fill: "none",
357
363
  stroke: "currentColor",
358
364
  strokeWidth: "2",
359
365
  className: "h-8 w-8",
360
- children: [/* @__PURE__ */ o("path", { d: "M18 6 6 18" }), /* @__PURE__ */ o("path", { d: "m6 6 12 12" })]
366
+ children: [/* @__PURE__ */ s("path", { d: "M18 6 6 18" }), /* @__PURE__ */ s("path", { d: "m6 6 12 12" })]
361
367
  })
362
368
  })]
363
- }), /* @__PURE__ */ o("div", {
369
+ }), /* @__PURE__ */ c("div", {
364
370
  className: "relative w-full space-y-4",
365
- children: d.map((e) => /* @__PURE__ */ s("button", {
371
+ children: [S && u && /* @__PURE__ */ c("div", {
372
+ className: "absolute inset-0 mb-0 flex flex-col items-center justify-center rounded-xl bg-[rgba(255,255,255,0.9)] text-black",
373
+ children: [
374
+ /* @__PURE__ */ c("div", { children: [
375
+ "正在连接",
376
+ u.name,
377
+ "..."
378
+ ] }),
379
+ /* @__PURE__ */ s("div", {
380
+ className: "my-1.5 text-xs",
381
+ children: "请在扩展中确认连接"
382
+ }),
383
+ /* @__PURE__ */ s("img", {
384
+ src: "data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20t='1783646544006'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='78324'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='32'%20height='32'%3e%3cpath%20d='M512%20907c-24.852%200-45-20.148-45-45s20.148-45%2045-45c168.446%200%20305-136.554%20305-305S680.446%20207%20512%20207%20207%20343.554%20207%20512c0%2024.852-20.148%2045-45%2045S117%20536.852%20117%20512c0-218.152%20176.848-395%20395-395S907%20293.848%20907%20512%20730.152%20907%20512%20907z'%20fill='%23444444'%20p-id='78325'%3e%3c/path%3e%3c/svg%3e",
385
+ alt: "spin",
386
+ className: "h-8 w-8 animate-[spin_2s_linear_infinite]"
387
+ })
388
+ ]
389
+ }), f.map((e) => /* @__PURE__ */ c("button", {
366
390
  type: "button",
367
- onClick: () => _(e),
391
+ onClick: () => {
392
+ C(!0), v(e);
393
+ },
368
394
  className: "flex w-full cursor-pointer items-center gap-2 rounded-xl border border-gray-300 px-4 py-2 hover:bg-gray-100",
369
- children: [/* @__PURE__ */ o("img", {
395
+ children: [/* @__PURE__ */ s("img", {
370
396
  src: e.icon,
371
397
  alt: e.name,
372
398
  className: "h-8 w-8"
373
- }), /* @__PURE__ */ s("div", {
399
+ }), /* @__PURE__ */ c("div", {
374
400
  className: "flex flex-col justify-between text-left",
375
- children: [/* @__PURE__ */ o("p", { children: e.name }), /* @__PURE__ */ s("span", {
401
+ children: [/* @__PURE__ */ s("p", { children: e.name }), /* @__PURE__ */ c("span", {
376
402
  className: "text-xs text-gray-500",
377
403
  children: [
378
404
  "Connect your ",
@@ -381,10 +407,10 @@ function _({ label: e = "Connect Wallet" }) {
381
407
  ]
382
408
  })]
383
409
  })]
384
- }, e.id))
410
+ }, e.id))]
385
411
  })]
386
412
  })
387
413
  })] });
388
414
  }
389
415
  //#endregion
390
- export { _ as MiniWalletButton, m as MiniWalletProvider, h as useMiniWallet };
416
+ export { v as MiniWalletButton, h as MiniWalletProvider, g as useMiniWallet };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "miniwallet",
3
- "version": "0.1.15",
3
+ "version": "0.1.17",
4
4
  "description": "React wallet connect button with multi-wallet support via EIP-6963",
5
5
  "type": "module",
6
6
  "main": "./dist/miniwallet.js",
@@ -22,10 +22,8 @@
22
22
  "scripts": {
23
23
  "dev": "vite",
24
24
  "build": "tsc -b && vite build",
25
- "build:demo": "tsc -b && vite build --mode demo",
26
25
  "lint": "eslint .",
27
26
  "preview": "vite preview",
28
- "preview:demo": "vite preview --outDir dist-demo",
29
27
  "prepublishOnly": "pnpm build"
30
28
  },
31
29
  "peerDependencies": {