@xrpl-wallet-kit/browser 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +49 -49
- package/dist/index.js +1 -1
- package/dist/xrpl-wallet-kit-legacy-bridge.js +1 -1
- package/dist/xrpl-wallet-kit.iife.js +299 -14
- package/dist/xrpl-wallet-kit.iife.min.js +47 -47
- package/package.json +2 -2
|
@@ -2121,7 +2121,7 @@ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot
|
|
|
2121
2121
|
nativeAsset: "XRP",
|
|
2122
2122
|
nativeAssetDecimals: 6,
|
|
2123
2123
|
rpcUrl: "wss://xrplcluster.com",
|
|
2124
|
-
httpRpcUrl: "https://
|
|
2124
|
+
httpRpcUrl: "https://xrpl.ws",
|
|
2125
2125
|
walletConnectChainId: "xrpl:0",
|
|
2126
2126
|
explorerTxUrl: "https://livenet.xrpl.org/transactions/{hash}",
|
|
2127
2127
|
explorerAccountUrl: "https://livenet.xrpl.org/accounts/{address}"
|
|
@@ -2336,6 +2336,97 @@ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot
|
|
|
2336
2336
|
}
|
|
2337
2337
|
};
|
|
2338
2338
|
}
|
|
2339
|
+
const DEFAULT_MAX_TRANSACTIONS = 10;
|
|
2340
|
+
const DEFAULT_STALE_SUBMITTED_MS = 10 * 60 * 1e3;
|
|
2341
|
+
class WalletTransactionStore {
|
|
2342
|
+
constructor(options = {}) {
|
|
2343
|
+
this.max = Math.max(1, Math.floor(options.max ?? DEFAULT_MAX_TRANSACTIONS));
|
|
2344
|
+
this.staleSubmittedMs = Math.max(0, options.staleSubmittedMs ?? DEFAULT_STALE_SUBMITTED_MS);
|
|
2345
|
+
this.storage = options.storage ?? createBrowserWalletStorage("");
|
|
2346
|
+
this.now = options.now ?? Date.now;
|
|
2347
|
+
}
|
|
2348
|
+
async get(accountAddress, networkId) {
|
|
2349
|
+
const transactions2 = this.normalize(await this.readList(this.key(networkId, accountAddress)));
|
|
2350
|
+
const now = this.now();
|
|
2351
|
+
let changed = false;
|
|
2352
|
+
const normalized = transactions2.map((transaction2) => {
|
|
2353
|
+
if (transaction2.status === "submitted" && this.staleSubmittedMs > 0 && now - transaction2.submittedAt > this.staleSubmittedMs) {
|
|
2354
|
+
changed = true;
|
|
2355
|
+
return { ...transaction2, status: "unknown" };
|
|
2356
|
+
}
|
|
2357
|
+
return transaction2;
|
|
2358
|
+
});
|
|
2359
|
+
if (changed)
|
|
2360
|
+
await this.writeList(this.key(networkId, accountAddress), normalized);
|
|
2361
|
+
return normalized;
|
|
2362
|
+
}
|
|
2363
|
+
async add(accountAddress, networkId, transaction2) {
|
|
2364
|
+
const key = this.key(networkId, accountAddress);
|
|
2365
|
+
const current = await this.readList(key);
|
|
2366
|
+
const withoutDuplicate = current.filter((item) => item.hash !== transaction2.hash);
|
|
2367
|
+
const next = this.normalize([transaction2, ...withoutDuplicate]).slice(0, this.max);
|
|
2368
|
+
await this.writeList(key, next);
|
|
2369
|
+
await this.addIndex(accountAddress, networkId);
|
|
2370
|
+
}
|
|
2371
|
+
async clear(accountAddress, networkId) {
|
|
2372
|
+
if (networkId) {
|
|
2373
|
+
await this.storage.removeItem(this.key(networkId, accountAddress));
|
|
2374
|
+
return;
|
|
2375
|
+
}
|
|
2376
|
+
const index2 = await this.readIndex(accountAddress);
|
|
2377
|
+
await Promise.all(index2.map((id2) => this.storage.removeItem(this.key(id2, accountAddress))));
|
|
2378
|
+
await this.storage.removeItem(this.indexKey(accountAddress));
|
|
2379
|
+
}
|
|
2380
|
+
normalize(transactions2) {
|
|
2381
|
+
return transactions2.filter((transaction2) => typeof transaction2.hash === "string" && transaction2.hash.length > 0).sort((a2, b2) => this.timestamp(b2) - this.timestamp(a2));
|
|
2382
|
+
}
|
|
2383
|
+
timestamp(transaction2) {
|
|
2384
|
+
return transaction2.confirmedAt ?? transaction2.failedAt ?? transaction2.submittedAt ?? 0;
|
|
2385
|
+
}
|
|
2386
|
+
async readList(key) {
|
|
2387
|
+
try {
|
|
2388
|
+
const raw = await this.storage.getItem(key);
|
|
2389
|
+
if (!raw)
|
|
2390
|
+
return [];
|
|
2391
|
+
const parsed = JSON.parse(raw);
|
|
2392
|
+
return Array.isArray(parsed) ? parsed.filter(this.isStoredTransaction) : [];
|
|
2393
|
+
} catch {
|
|
2394
|
+
return [];
|
|
2395
|
+
}
|
|
2396
|
+
}
|
|
2397
|
+
async writeList(key, transactions2) {
|
|
2398
|
+
await this.storage.setItem(key, JSON.stringify(transactions2.slice(0, this.max)));
|
|
2399
|
+
}
|
|
2400
|
+
async addIndex(accountAddress, networkId) {
|
|
2401
|
+
const current = await this.readIndex(accountAddress);
|
|
2402
|
+
if (current.includes(networkId))
|
|
2403
|
+
return;
|
|
2404
|
+
await this.storage.setItem(this.indexKey(accountAddress), JSON.stringify([...current, networkId]));
|
|
2405
|
+
}
|
|
2406
|
+
async readIndex(accountAddress) {
|
|
2407
|
+
try {
|
|
2408
|
+
const raw = await this.storage.getItem(this.indexKey(accountAddress));
|
|
2409
|
+
if (!raw)
|
|
2410
|
+
return [];
|
|
2411
|
+
const parsed = JSON.parse(raw);
|
|
2412
|
+
return Array.isArray(parsed) ? parsed.filter((value) => typeof value === "string") : [];
|
|
2413
|
+
} catch {
|
|
2414
|
+
return [];
|
|
2415
|
+
}
|
|
2416
|
+
}
|
|
2417
|
+
isStoredTransaction(value) {
|
|
2418
|
+
if (!value || typeof value !== "object")
|
|
2419
|
+
return false;
|
|
2420
|
+
const transaction2 = value;
|
|
2421
|
+
return typeof transaction2.hash === "string" && typeof transaction2.status === "string" && typeof transaction2.submittedAt === "number";
|
|
2422
|
+
}
|
|
2423
|
+
key(networkId, accountAddress) {
|
|
2424
|
+
return `xwk_tx:${networkId}:${accountAddress}`;
|
|
2425
|
+
}
|
|
2426
|
+
indexKey(accountAddress) {
|
|
2427
|
+
return `xwk_tx_index:${accountAddress}`;
|
|
2428
|
+
}
|
|
2429
|
+
}
|
|
2339
2430
|
const SESSION_KEY = "session";
|
|
2340
2431
|
const WALLET_STORAGE_VERSION = 1;
|
|
2341
2432
|
const RECOVER_SESSION_RETRY_DELAYS_MS = [0, 700, 1600, 3e3];
|
|
@@ -2359,6 +2450,13 @@ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot
|
|
|
2359
2450
|
this.networks = this.networkRegistry.list();
|
|
2360
2451
|
this.storage = config.storage ?? new MemoryWalletStorage();
|
|
2361
2452
|
this.logger = createWalletKitLogger(config.logger);
|
|
2453
|
+
if (config.persistTransactions) {
|
|
2454
|
+
const persistOptions = typeof config.persistTransactions === "object" ? config.persistTransactions : {};
|
|
2455
|
+
this.transactionStore = new WalletTransactionStore({
|
|
2456
|
+
...persistOptions,
|
|
2457
|
+
storage: persistOptions.storage ?? this.storage
|
|
2458
|
+
});
|
|
2459
|
+
}
|
|
2362
2460
|
(_a2 = config.adapters) == null ? void 0 : _a2.forEach((adapter) => this.register(adapter));
|
|
2363
2461
|
}
|
|
2364
2462
|
register(adapter) {
|
|
@@ -2451,6 +2549,7 @@ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot
|
|
|
2451
2549
|
}
|
|
2452
2550
|
const enrichedSession2 = await this.enrichSession(this.withWalletMetadata(restored.session, adapter));
|
|
2453
2551
|
this.setSession(enrichedSession2);
|
|
2552
|
+
await this.loadPersistedTransactions(enrichedSession2);
|
|
2454
2553
|
this.emit("session_restored", { adapterId: enrichedSession2.adapterId, account: enrichedSession2.account, session: enrichedSession2 });
|
|
2455
2554
|
this.emit("connected", { adapterId: enrichedSession2.adapterId, account: enrichedSession2.account, session: enrichedSession2 });
|
|
2456
2555
|
return enrichedSession2;
|
|
@@ -2461,6 +2560,7 @@ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot
|
|
|
2461
2560
|
}
|
|
2462
2561
|
const enrichedSession = await this.enrichSession(this.withWalletMetadata(session, adapter));
|
|
2463
2562
|
this.setSession(enrichedSession);
|
|
2563
|
+
await this.loadPersistedTransactions(enrichedSession);
|
|
2464
2564
|
this.emit("session_restored", { adapterId: enrichedSession.adapterId, account: enrichedSession.account, session: enrichedSession, stale: true });
|
|
2465
2565
|
this.emit("connected", { adapterId: enrichedSession.adapterId, account: enrichedSession.account, session: enrichedSession });
|
|
2466
2566
|
return enrichedSession;
|
|
@@ -2504,6 +2604,7 @@ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot
|
|
|
2504
2604
|
const enrichedSession = await this.enrichSession(this.withWalletMetadata(recovered.session, adapter));
|
|
2505
2605
|
this.setSession(enrichedSession);
|
|
2506
2606
|
await this.saveSession(enrichedSession);
|
|
2607
|
+
await this.loadPersistedTransactions(enrichedSession);
|
|
2507
2608
|
this.emit("session_restored", { adapterId: enrichedSession.adapterId, account: enrichedSession.account, session: enrichedSession });
|
|
2508
2609
|
this.emit("connected", { adapterId: enrichedSession.adapterId, account: enrichedSession.account, session: enrichedSession });
|
|
2509
2610
|
return enrichedSession;
|
|
@@ -2544,6 +2645,7 @@ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot
|
|
|
2544
2645
|
const session = await this.enrichSession(this.withWalletMetadata(result.session ?? { adapterId, account: { ...result.account, network }, connectedAt: Date.now() }, adapter));
|
|
2545
2646
|
this.setSession(session);
|
|
2546
2647
|
await this.saveSession(session);
|
|
2648
|
+
await this.loadPersistedTransactions(session);
|
|
2547
2649
|
this.emit("connected", { adapterId, account: session.account, session });
|
|
2548
2650
|
return session;
|
|
2549
2651
|
} catch (error) {
|
|
@@ -2601,6 +2703,7 @@ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot
|
|
|
2601
2703
|
} finally {
|
|
2602
2704
|
this.activeAdapterId = null;
|
|
2603
2705
|
this.activeSession = null;
|
|
2706
|
+
this.transactions.clear();
|
|
2604
2707
|
await this.storage.removeItem(SESSION_KEY);
|
|
2605
2708
|
this.emit("disconnected", { adapterId });
|
|
2606
2709
|
}
|
|
@@ -2707,11 +2810,14 @@ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot
|
|
|
2707
2810
|
metadata: request.metadata ?? (existing == null ? void 0 : existing.metadata)
|
|
2708
2811
|
};
|
|
2709
2812
|
this.transactions.set(transaction2.hash, transaction2);
|
|
2813
|
+
void this.persistTransaction(transaction2).catch((error) => {
|
|
2814
|
+
this.logger.debug(`Transaction persistence failed for ${transaction2.hash}`, error);
|
|
2815
|
+
});
|
|
2710
2816
|
if (status === "confirmed") {
|
|
2711
2817
|
this.emit("tx_confirmed", { adapterId: transaction2.adapterId, account: transaction2.account, hash: transaction2.hash, result: transaction2.result, transaction: transaction2 });
|
|
2712
2818
|
} else if (status === "failed") {
|
|
2713
2819
|
this.emit("tx_failed", { adapterId: transaction2.adapterId, account: transaction2.account, hash: transaction2.hash, error: transaction2.error ?? new Error("Transaction failed"), transaction: transaction2 });
|
|
2714
|
-
} else {
|
|
2820
|
+
} else if (status === "submitted") {
|
|
2715
2821
|
this.emit("tx_submitted", { adapterId: transaction2.adapterId, account: transaction2.account, hash: transaction2.hash, transaction: transaction2 });
|
|
2716
2822
|
this.confirmTransaction(transaction2);
|
|
2717
2823
|
}
|
|
@@ -2751,6 +2857,7 @@ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot
|
|
|
2751
2857
|
}
|
|
2752
2858
|
};
|
|
2753
2859
|
void this.saveSession(this.activeSession);
|
|
2860
|
+
void this.loadPersistedTransactions(this.activeSession);
|
|
2754
2861
|
}
|
|
2755
2862
|
this.emit("accountChanged", { adapterId, account, previousAccount });
|
|
2756
2863
|
}
|
|
@@ -2766,6 +2873,7 @@ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot
|
|
|
2766
2873
|
}
|
|
2767
2874
|
};
|
|
2768
2875
|
void this.saveSession(this.activeSession);
|
|
2876
|
+
void this.loadPersistedTransactions(this.activeSession);
|
|
2769
2877
|
}
|
|
2770
2878
|
this.emit("networkChanged", { adapterId, network, previousNetwork });
|
|
2771
2879
|
}
|
|
@@ -2918,6 +3026,35 @@ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot
|
|
|
2918
3026
|
raw: response
|
|
2919
3027
|
};
|
|
2920
3028
|
}
|
|
3029
|
+
async loadPersistedTransactions(session) {
|
|
3030
|
+
if (!this.transactionStore)
|
|
3031
|
+
return;
|
|
3032
|
+
const address = session.account.address;
|
|
3033
|
+
if (!address)
|
|
3034
|
+
return;
|
|
3035
|
+
const transactions2 = await this.transactionStore.get(address, this.transactionNetworkId(session.account));
|
|
3036
|
+
this.transactions.clear();
|
|
3037
|
+
transactions2.forEach((transaction2) => this.transactions.set(transaction2.hash, transaction2));
|
|
3038
|
+
transactions2.forEach((transaction2) => {
|
|
3039
|
+
if (transaction2.status === "submitted")
|
|
3040
|
+
this.confirmTransaction(transaction2);
|
|
3041
|
+
});
|
|
3042
|
+
}
|
|
3043
|
+
async persistTransaction(transaction2) {
|
|
3044
|
+
if (!this.transactionStore)
|
|
3045
|
+
return;
|
|
3046
|
+
const account = transaction2.account ?? this.getAccount() ?? void 0;
|
|
3047
|
+
if (!(account == null ? void 0 : account.address))
|
|
3048
|
+
return;
|
|
3049
|
+
await this.transactionStore.add(account.address, this.transactionNetworkId(account), {
|
|
3050
|
+
...transaction2,
|
|
3051
|
+
account
|
|
3052
|
+
});
|
|
3053
|
+
}
|
|
3054
|
+
transactionNetworkId(account) {
|
|
3055
|
+
var _a2, _b;
|
|
3056
|
+
return ((_a2 = account == null ? void 0 : account.network) == null ? void 0 : _a2.id) ?? ((_b = account == null ? void 0 : account.network) == null ? void 0 : _b.networkType) ?? this.config.network ?? "mainnet";
|
|
3057
|
+
}
|
|
2921
3058
|
async fetchJsonRpc(rpcUrl, body, signal, timeoutMs) {
|
|
2922
3059
|
let timer;
|
|
2923
3060
|
let timeoutController;
|
|
@@ -15422,13 +15559,15 @@ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot
|
|
|
15422
15559
|
}
|
|
15423
15560
|
}
|
|
15424
15561
|
async restoreSession(session) {
|
|
15425
|
-
var _a2;
|
|
15562
|
+
var _a2, _b;
|
|
15426
15563
|
if (!this.sdk && this.options.apiKey) {
|
|
15427
15564
|
this.sdk = new distExports.Xumm(this.options.apiKey);
|
|
15428
15565
|
this.auth = this.sdk;
|
|
15429
15566
|
}
|
|
15430
15567
|
const state2 = await this.checkXamanState({ network: session.account.network });
|
|
15431
|
-
|
|
15568
|
+
if (!((_a2 = state2 == null ? void 0 : state2.account) == null ? void 0 : _a2.address) || state2.account.address !== session.account.address)
|
|
15569
|
+
return null;
|
|
15570
|
+
const account = ((_b = state2 == null ? void 0 : state2.account) == null ? void 0 : _b.address) ? { ...session.account, ...state2.account } : session.account;
|
|
15432
15571
|
return { account, session: { ...session, account }, raw: (state2 == null ? void 0 : state2.raw) ?? null };
|
|
15433
15572
|
}
|
|
15434
15573
|
async canRecoverSession() {
|
|
@@ -16144,6 +16283,8 @@ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot
|
|
|
16144
16283
|
variant: connectButton.variant,
|
|
16145
16284
|
copyAddress: accountPanel.copyAddress,
|
|
16146
16285
|
showAddressQr: accountPanel.showAddressQr,
|
|
16286
|
+
showRecentTransactions: accountPanel.showRecentTransactions,
|
|
16287
|
+
maxVisibleTransactions: accountPanel.maxVisibleTransactions,
|
|
16147
16288
|
disconnect: accountPanel.disconnect,
|
|
16148
16289
|
explorer: accountPanel.explorer,
|
|
16149
16290
|
showWeb3Name: identity2.enabled ?? true,
|
|
@@ -16164,6 +16305,8 @@ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot
|
|
|
16164
16305
|
showAdapterIcon: true,
|
|
16165
16306
|
showChevron: true,
|
|
16166
16307
|
showBalance: false,
|
|
16308
|
+
showRecentTransactions: false,
|
|
16309
|
+
maxVisibleTransactions: 5,
|
|
16167
16310
|
fallbackToAddress: true,
|
|
16168
16311
|
copyAddress: true,
|
|
16169
16312
|
explorer: false,
|
|
@@ -20680,6 +20823,7 @@ ${new this._window.XMLSerializer().serializeToString(e4)}`;
|
|
|
20680
20823
|
this.balanceRefreshTimers = /* @__PURE__ */ new Set();
|
|
20681
20824
|
this.panelOpen = false;
|
|
20682
20825
|
this.addressQrOpen = false;
|
|
20826
|
+
this.txSectionOpen = true;
|
|
20683
20827
|
this.panelScrollLocked = false;
|
|
20684
20828
|
this.connecting = false;
|
|
20685
20829
|
this.copied = false;
|
|
@@ -20700,6 +20844,8 @@ ${new this._window.XMLSerializer().serializeToString(e4)}`;
|
|
|
20700
20844
|
fallbackToAddress: true,
|
|
20701
20845
|
copyAddress: true,
|
|
20702
20846
|
showAddressQr: true,
|
|
20847
|
+
showRecentTransactions: false,
|
|
20848
|
+
maxVisibleTransactions: 5,
|
|
20703
20849
|
explorer: false,
|
|
20704
20850
|
disconnect: true,
|
|
20705
20851
|
accountPanel: true,
|
|
@@ -20757,10 +20903,15 @@ ${new this._window.XMLSerializer().serializeToString(e4)}`;
|
|
|
20757
20903
|
}));
|
|
20758
20904
|
this.offEvents.push(options.manager.on("tx_submitted", () => {
|
|
20759
20905
|
this.scheduleBalanceRefresh([1600, 4e3]);
|
|
20906
|
+
this.render();
|
|
20760
20907
|
}));
|
|
20761
20908
|
this.offEvents.push(options.manager.on("tx_confirmed", () => {
|
|
20762
20909
|
this.clearBalanceRefreshTimers();
|
|
20763
20910
|
void this.resolveBalance(options.manager.getSession());
|
|
20911
|
+
this.render();
|
|
20912
|
+
}));
|
|
20913
|
+
this.offEvents.push(options.manager.on("tx_failed", () => {
|
|
20914
|
+
this.render();
|
|
20764
20915
|
}));
|
|
20765
20916
|
this.offEvents.push(options.manager.on("accountChanged", () => {
|
|
20766
20917
|
this.clearBalanceRefreshTimers();
|
|
@@ -20877,6 +21028,7 @@ ${new this._window.XMLSerializer().serializeToString(e4)}`;
|
|
|
20877
21028
|
if (event.target instanceof Node && ((_a2 = this.accountPanelPortal) == null ? void 0 : _a2.contains(event.target)))
|
|
20878
21029
|
return;
|
|
20879
21030
|
this.panelOpen = false;
|
|
21031
|
+
this.addressQrOpen = false;
|
|
20880
21032
|
this.render();
|
|
20881
21033
|
}
|
|
20882
21034
|
handleDocumentKeyDown(event) {
|
|
@@ -20884,6 +21036,7 @@ ${new this._window.XMLSerializer().serializeToString(e4)}`;
|
|
|
20884
21036
|
return;
|
|
20885
21037
|
if (event.key === "Escape") {
|
|
20886
21038
|
this.panelOpen = false;
|
|
21039
|
+
this.addressQrOpen = false;
|
|
20887
21040
|
this.render();
|
|
20888
21041
|
return;
|
|
20889
21042
|
}
|
|
@@ -20944,7 +21097,7 @@ ${new this._window.XMLSerializer().serializeToString(e4)}`;
|
|
|
20944
21097
|
this.accountPanelPortal = void 0;
|
|
20945
21098
|
}
|
|
20946
21099
|
bindPanelActions(root) {
|
|
20947
|
-
var _a2, _b, _c, _d, _e2, _f;
|
|
21100
|
+
var _a2, _b, _c, _d, _e2, _f, _g;
|
|
20948
21101
|
(_a2 = root.querySelector("[data-xwk-account-close]")) == null ? void 0 : _a2.addEventListener("click", () => this.closePanel());
|
|
20949
21102
|
(_b = root.querySelector("[data-xwk-account-back]")) == null ? void 0 : _b.addEventListener("click", (event) => {
|
|
20950
21103
|
event.stopPropagation();
|
|
@@ -20962,7 +21115,12 @@ ${new this._window.XMLSerializer().serializeToString(e4)}`;
|
|
|
20962
21115
|
event.stopPropagation();
|
|
20963
21116
|
this.openAddressQr();
|
|
20964
21117
|
});
|
|
20965
|
-
(_f = root.querySelector("[data-xwk-
|
|
21118
|
+
(_f = root.querySelector("[data-xwk-tx-toggle]")) == null ? void 0 : _f.addEventListener("click", (event) => {
|
|
21119
|
+
event.stopPropagation();
|
|
21120
|
+
this.txSectionOpen = !this.txSectionOpen;
|
|
21121
|
+
this.render();
|
|
21122
|
+
});
|
|
21123
|
+
(_g = root.querySelector("[data-xwk-disconnect]")) == null ? void 0 : _g.addEventListener("click", () => void this.disconnect());
|
|
20966
21124
|
}
|
|
20967
21125
|
openAddressQr() {
|
|
20968
21126
|
if (!this.options.manager.getSession())
|
|
@@ -21195,8 +21353,9 @@ ${new this._window.XMLSerializer().serializeToString(e4)}`;
|
|
|
21195
21353
|
const label = this.connecting ? messages.connecting : session ? this.getAccountLabel(session) : this.options.label;
|
|
21196
21354
|
const balance = session && this.options.showBalance && this.balanceLoading ? `<span class="xwk-button-balance xwk-button-balance-loading">${this.balanceSpinnerIcon()}</span>` : session && this.options.showBalance && this.activationStatus === "unfunded" ? `<span class="xwk-button-balance">(${this.escapeHtml(messages.notActivated)})</span>` : session && this.options.showBalance && ((_a2 = this.balance) == null ? void 0 : _a2.formatted) ? `<span class="xwk-button-balance">(${this.escapeHtml(this.balance.formatted)})</span>` : "";
|
|
21197
21355
|
const icon = this.options.showAdapterIcon ? this.renderWalletIcon(connected ? session == null ? void 0 : session.wallet : void 0) : "";
|
|
21356
|
+
const pendingDot = connected && this.options.showRecentTransactions && this.getPendingTransactionCount() > 0 ? `<span class="xwk-button-pending-dot" aria-hidden="true"></span>` : "";
|
|
21198
21357
|
const chevron = connected && this.options.showChevron && this.options.accountPanel ? `<span class="xwk-button-chevron" aria-hidden="true">${this.chevronIcon()}</span>` : "";
|
|
21199
|
-
return `<button class="xwk-account-button" data-xwk-wallet-button type="button">${icon}<span class="xwk-button-label">${this.escapeHtml(label)}${balance}</span>${chevron}</button>`;
|
|
21358
|
+
return `<button class="xwk-account-button" data-xwk-wallet-button type="button">${icon}${pendingDot}<span class="xwk-button-label">${this.escapeHtml(label)}${balance}</span>${chevron}</button>`;
|
|
21200
21359
|
}
|
|
21201
21360
|
renderPanel() {
|
|
21202
21361
|
const messages = this.messages();
|
|
@@ -21205,11 +21364,13 @@ ${new this._window.XMLSerializer().serializeToString(e4)}`;
|
|
|
21205
21364
|
return "";
|
|
21206
21365
|
const content = this.addressQrOpen ? this.renderAddressQrPanelContent(session) : this.renderPanelContent(session);
|
|
21207
21366
|
const title = this.addressQrOpen ? messages.addressQr : messages.connected;
|
|
21367
|
+
const hasTransactions = !this.addressQrOpen && this.options.showRecentTransactions && this.getVisibleTransactions(session).length > 0;
|
|
21368
|
+
const panelStateClass = `${this.addressQrOpen ? " xwk-account-panel-address-qr" : ""}${hasTransactions ? " xwk-account-panel-with-transactions" : ""}`;
|
|
21208
21369
|
const leading = this.addressQrOpen ? `<button class="xwk-account-back" type="button" data-xwk-account-back aria-label="${this.escapeHtml(messages.back)}">${this.backIcon()}</button>` : `<span></span>`;
|
|
21209
21370
|
if (this.options.accountPanelMode === "modal") {
|
|
21210
|
-
return `<div class="xwk-account-overlay" data-xwk-account-overlay role="presentation"><section class="xwk-account-panel xwk-account-panel-modal${
|
|
21371
|
+
return `<div class="xwk-account-overlay" data-xwk-account-overlay role="presentation"><section class="xwk-account-panel xwk-account-panel-modal${panelStateClass}" role="dialog" aria-modal="true" aria-label="${this.escapeHtml(title)}" tabindex="-1"><div class="xwk-account-modal-header">${leading}<h2>${this.escapeHtml(title)}</h2><button class="xwk-account-close" type="button" data-xwk-account-close aria-label="${this.escapeHtml(messages.close)}">×</button></div><div class="xwk-account-modal-body">${content}</div></section></div>`;
|
|
21211
21372
|
}
|
|
21212
|
-
return `<div class="xwk-account-panel xwk-account-panel-dropdown${
|
|
21373
|
+
return `<div class="xwk-account-panel xwk-account-panel-dropdown${panelStateClass}" role="dialog" aria-label="${this.escapeHtml(title)}">${content}</div>`;
|
|
21213
21374
|
}
|
|
21214
21375
|
renderPanelContent(session) {
|
|
21215
21376
|
var _a2;
|
|
@@ -21226,12 +21387,14 @@ ${new this._window.XMLSerializer().serializeToString(e4)}`;
|
|
|
21226
21387
|
const nativeAsset = getNativeAsset(session.account.network);
|
|
21227
21388
|
const notActivated = this.options.showBalance && this.activationStatus === "unfunded" ? `<div class="xwk-account-warning">${this.escapeHtml(messages.accountNotActivated(nativeAsset))}</div>` : "";
|
|
21228
21389
|
const balance = this.options.showBalance && this.balanceLoading ? `<div class="xwk-account-balance xwk-account-balance-loading">${this.balanceSpinnerIcon()}<span>${this.escapeHtml(messages.connecting)}</span></div>` : this.options.showBalance && this.activationStatus !== "unfunded" && ((_a2 = this.balance) == null ? void 0 : _a2.formatted) ? `<div class="xwk-account-balance">${this.escapeHtml(this.balance.formatted)}</div>` : "";
|
|
21390
|
+
const metaRow = balance ? `<div class="xwk-account-meta-row">${balance}</div>` : "";
|
|
21229
21391
|
const addressQrButton = this.renderAddressQrButton(address);
|
|
21230
21392
|
const hasIdentity = this.shouldShowWeb3Name() && this.identityName;
|
|
21231
21393
|
const addressLabel = hasIdentity && address ? `<div class="xwk-account-address">${this.escapeHtml(this.formatAddress(address))}${addressQrButton}</div>` : "";
|
|
21232
21394
|
const actions = `<div class="xwk-account-panel-actions">${copy}${explorer}${disconnect}</div>`;
|
|
21233
21395
|
const accountName = !hasIdentity && addressQrButton && this.options.fallbackToAddress ? `<div class="xwk-account-name xwk-account-name-with-qr xwk-account-name-address"><span>${this.escapeHtml(label)}</span>${addressQrButton}</div>` : `<div class="xwk-account-name">${this.escapeHtml(label)}</div>`;
|
|
21234
|
-
|
|
21396
|
+
const transactions2 = this.renderTransactionHistory(session);
|
|
21397
|
+
return `<div class="xwk-account-hero">${this.renderAccountAvatar(session)}</div>${accountName}${addressLabel}${metaRow}${notActivated}${transactions2}${actions}`;
|
|
21235
21398
|
}
|
|
21236
21399
|
renderAddressQrPanelContent(session) {
|
|
21237
21400
|
const messages = this.messages();
|
|
@@ -21248,6 +21411,94 @@ ${new this._window.XMLSerializer().serializeToString(e4)}`;
|
|
|
21248
21411
|
const messages = this.messages();
|
|
21249
21412
|
return `<button class="xwk-address-qr-trigger" type="button" data-xwk-address-qr aria-label="${this.escapeHtml(messages.showAddressQr)}" title="${this.escapeHtml(messages.showAddressQr)}">${this.qrIcon()}</button>`;
|
|
21250
21413
|
}
|
|
21414
|
+
renderTransactionHistory(session) {
|
|
21415
|
+
if (!this.options.showRecentTransactions)
|
|
21416
|
+
return "";
|
|
21417
|
+
const transactions2 = this.getVisibleTransactions(session);
|
|
21418
|
+
if (!transactions2.length)
|
|
21419
|
+
return "";
|
|
21420
|
+
const messages = this.messages();
|
|
21421
|
+
const count = transactions2.length > 9 ? "9+" : String(transactions2.length);
|
|
21422
|
+
const chevronClass = this.txSectionOpen ? "open" : "closed";
|
|
21423
|
+
const list = this.txSectionOpen ? `<div class="xwk-tx-list" role="list">${transactions2.map((transaction2) => this.renderTransactionRow(transaction2)).join("")}</div>` : "";
|
|
21424
|
+
return `<section class="xwk-tx-section" aria-label="${this.escapeHtml(messages.recentTransactions)}"><button class="xwk-tx-header" type="button" data-xwk-tx-toggle aria-expanded="${this.txSectionOpen ? "true" : "false"}"><span>${this.escapeHtml(messages.recentTransactions)}</span><span class="xwk-tx-count">${this.escapeHtml(count)}</span><span class="xwk-tx-chevron ${chevronClass}" aria-hidden="true">${this.chevronUpIcon()}</span></button>${list}</section>`;
|
|
21425
|
+
}
|
|
21426
|
+
renderTransactionRow(transaction2) {
|
|
21427
|
+
const messages = this.messages();
|
|
21428
|
+
const label = this.transactionStatusLabel(transaction2);
|
|
21429
|
+
const explorerUrl = this.getTransactionExplorerUrl(transaction2);
|
|
21430
|
+
const link = explorerUrl ? `<a class="xwk-tx-link" href="${this.escapeHtml(explorerUrl)}" target="_blank" rel="noreferrer">${this.escapeHtml(messages.view)}${this.externalIcon()}</a>` : "";
|
|
21431
|
+
return `<div class="xwk-tx-row xwk-tx-row-${this.escapeHtml(transaction2.status)}" role="listitem"><span class="xwk-tx-status" aria-hidden="true">${this.transactionStatusIcon(transaction2.status)}</span><div class="xwk-tx-main"><span class="xwk-tx-label">${this.escapeHtml(label)}</span><span class="xwk-tx-hash">${this.escapeHtml(this.formatHash(transaction2.hash))} · ${this.escapeHtml(this.formatRelativeTime(transaction2))}</span></div>${link}</div>`;
|
|
21432
|
+
}
|
|
21433
|
+
transactionStatusLabel(transaction2) {
|
|
21434
|
+
const messages = this.messages();
|
|
21435
|
+
if (transaction2.status === "confirmed")
|
|
21436
|
+
return messages.transactionConfirmed;
|
|
21437
|
+
if (transaction2.status === "failed")
|
|
21438
|
+
return messages.transactionFailed;
|
|
21439
|
+
if (transaction2.status === "unknown")
|
|
21440
|
+
return messages.transactionUnknown;
|
|
21441
|
+
return messages.transactionSubmitted;
|
|
21442
|
+
}
|
|
21443
|
+
transactionStatusIcon(status) {
|
|
21444
|
+
if (status === "confirmed")
|
|
21445
|
+
return this.checkIcon();
|
|
21446
|
+
if (status === "failed")
|
|
21447
|
+
return this.closeIcon();
|
|
21448
|
+
if (status === "unknown")
|
|
21449
|
+
return this.questionIcon();
|
|
21450
|
+
return `<span class="xwk-tx-spinner" aria-hidden="true"></span>`;
|
|
21451
|
+
}
|
|
21452
|
+
getVisibleTransactions(session) {
|
|
21453
|
+
const address = this.getSessionAddress(session);
|
|
21454
|
+
const max = Math.max(1, Math.floor(this.options.maxVisibleTransactions));
|
|
21455
|
+
return this.getRecentTransactions(session).filter((transaction2) => {
|
|
21456
|
+
var _a2;
|
|
21457
|
+
return !address || !((_a2 = transaction2.account) == null ? void 0 : _a2.address) || transaction2.account.address === address;
|
|
21458
|
+
}).slice(0, max);
|
|
21459
|
+
}
|
|
21460
|
+
getRecentTransactions(session) {
|
|
21461
|
+
var _a2, _b, _c;
|
|
21462
|
+
const transactions2 = ((_b = (_a2 = this.options.manager).getTransactions) == null ? void 0 : _b.call(_a2)) ?? [];
|
|
21463
|
+
const networkId = (_c = session == null ? void 0 : session.account.network) == null ? void 0 : _c.id;
|
|
21464
|
+
return [...transactions2].sort((a2, b2) => this.transactionTimestamp(b2) - this.transactionTimestamp(a2)).filter((transaction2) => {
|
|
21465
|
+
var _a3, _b2;
|
|
21466
|
+
return !networkId || !((_b2 = (_a3 = transaction2.account) == null ? void 0 : _a3.network) == null ? void 0 : _b2.id) || transaction2.account.network.id === networkId;
|
|
21467
|
+
});
|
|
21468
|
+
}
|
|
21469
|
+
getPendingTransactionCount() {
|
|
21470
|
+
return this.getRecentTransactions(this.options.manager.getSession()).filter((transaction2) => transaction2.status === "submitted").length;
|
|
21471
|
+
}
|
|
21472
|
+
transactionTimestamp(transaction2) {
|
|
21473
|
+
return transaction2.confirmedAt ?? transaction2.failedAt ?? transaction2.submittedAt ?? 0;
|
|
21474
|
+
}
|
|
21475
|
+
getTransactionExplorerUrl(transaction2) {
|
|
21476
|
+
var _a2, _b, _c, _d;
|
|
21477
|
+
const custom = (_c = (_b = this.options).transactionExplorerUrl) == null ? void 0 : _c.call(_b, transaction2.hash, (_a2 = transaction2.account) == null ? void 0 : _a2.network);
|
|
21478
|
+
if (custom)
|
|
21479
|
+
return custom;
|
|
21480
|
+
return getExplorerTxUrl((_d = transaction2.account) == null ? void 0 : _d.network, transaction2.hash);
|
|
21481
|
+
}
|
|
21482
|
+
formatHash(hash2) {
|
|
21483
|
+
return hash2.length > 12 ? `${hash2.slice(0, 6)}...${hash2.slice(-6)}` : hash2;
|
|
21484
|
+
}
|
|
21485
|
+
formatRelativeTime(transaction2) {
|
|
21486
|
+
const timestamp = this.transactionTimestamp(transaction2);
|
|
21487
|
+
if (!timestamp)
|
|
21488
|
+
return "";
|
|
21489
|
+
const seconds = Math.max(0, Math.floor((Date.now() - timestamp) / 1e3));
|
|
21490
|
+
if (seconds < 60)
|
|
21491
|
+
return "just now";
|
|
21492
|
+
const minutes = Math.floor(seconds / 60);
|
|
21493
|
+
if (minutes < 60)
|
|
21494
|
+
return `${minutes} min ago`;
|
|
21495
|
+
const hours = Math.floor(minutes / 60);
|
|
21496
|
+
if (hours < 24)
|
|
21497
|
+
return `${hours} hr ago`;
|
|
21498
|
+
if (hours < 48)
|
|
21499
|
+
return "yesterday";
|
|
21500
|
+
return `${Math.floor(hours / 24)} days ago`;
|
|
21501
|
+
}
|
|
21251
21502
|
getAccountLabel(session) {
|
|
21252
21503
|
var _a2, _b;
|
|
21253
21504
|
if (this.shouldShowWeb3Name() && this.identityName)
|
|
@@ -21417,6 +21668,18 @@ ${new this._window.XMLSerializer().serializeToString(e4)}`;
|
|
|
21417
21668
|
chevronIcon() {
|
|
21418
21669
|
return `<svg width="14" height="14" viewBox="0 0 24 24" fill="none"><path d="m6 9 6 6 6-6" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"/></svg>`;
|
|
21419
21670
|
}
|
|
21671
|
+
chevronUpIcon() {
|
|
21672
|
+
return `<svg width="14" height="14" viewBox="0 0 24 24" fill="none"><path d="m18 15-6-6-6 6" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"/></svg>`;
|
|
21673
|
+
}
|
|
21674
|
+
checkIcon() {
|
|
21675
|
+
return `<svg width="15" height="15" viewBox="0 0 24 24" fill="none"><path d="m5 12.5 4.2 4.2L19 7" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"/></svg>`;
|
|
21676
|
+
}
|
|
21677
|
+
closeIcon() {
|
|
21678
|
+
return `<svg width="15" height="15" viewBox="0 0 24 24" fill="none"><path d="m7 7 10 10M17 7 7 17" stroke="currentColor" stroke-width="2.4" stroke-linecap="round"/></svg>`;
|
|
21679
|
+
}
|
|
21680
|
+
questionIcon() {
|
|
21681
|
+
return `<svg width="15" height="15" viewBox="0 0 24 24" fill="none"><path d="M9.7 9a2.4 2.4 0 1 1 3.8 2c-.9.6-1.5 1.1-1.5 2.4" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"/><path d="M12 17h.01" stroke="currentColor" stroke-width="3" stroke-linecap="round"/></svg>`;
|
|
21682
|
+
}
|
|
21420
21683
|
copyIcon() {
|
|
21421
21684
|
return `<svg width="17" height="17" viewBox="0 0 24 24" fill="none" aria-hidden="true"><rect x="8" y="8" width="11" height="11" rx="2" stroke="currentColor" stroke-width="2"/><path d="M5 15H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v1" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>`;
|
|
21422
21685
|
}
|
|
@@ -21452,7 +21715,7 @@ ${new this._window.XMLSerializer().serializeToString(e4)}`;
|
|
|
21452
21715
|
const fallbackIconBackground = theme.fallbackIconBackground;
|
|
21453
21716
|
const fallbackIconColor = theme.fallbackIconColor;
|
|
21454
21717
|
const overlayBlur = theme.overlayBlur > 0 ? `blur(${theme.overlayBlur}px)` : "none";
|
|
21455
|
-
return `.xwk-button-root{display:inline-block;max-width:100%;position:relative;font-family:${theme.fontFamily};font-size:14px}.xwk-account-button{align-items:center;background:${background};border:1px solid ${border};border-radius:${radius};box-shadow:none;box-sizing:border-box;color:${theme.foreground};cursor:pointer;display:inline-flex;gap:8px;font:inherit;font-weight:560;max-width:100%;min-height:${height};overflow:hidden;padding:0 12px 0 10px;touch-action:manipulation;transition:background-color .16s ease,border-color .16s ease;white-space:nowrap;-webkit-tap-highlight-color:transparent;transform:none}.xwk-account-button:hover{background:${hoverBackground};box-shadow:none;opacity:1;transform:none}.xwk-account-button:active{background:${hoverBackground};opacity:1;transform:none}.xwk-account-button:focus-visible,.xwk-button-chevron:focus-visible,.xwk-account-panel-actions button:focus-visible,.xwk-account-panel-actions a:focus-visible,.xwk-address-qr-trigger:focus-visible{outline:2px solid ${theme.accent};outline-offset:2px;text-decoration:none}.xwk-button-icon{background:${theme.background};border:1px solid ${iconBorder};border-radius:10px;box-sizing:border-box;display:inline-flex;flex:0 0 28px;height:28px;isolation:isolate;line-height:0;max-width:28px;min-width:28px;object-fit:contain;overflow:hidden;position:relative;width:28px}.xwk-button-icon-fallback{align-items:center;background:${fallbackIconBackground};color:${fallbackIconColor};justify-content:center}.xwk-button-icon-initial{font-size:12px;line-height:1}.xwk-button-icon-svg-fallback{font-size:0}.xwk-button-icon-svg-fallback svg{display:block;flex:0 0 17px;height:17px;max-height:17px;max-width:17px;min-height:17px;min-width:17px;width:17px}.xwk-button-label{display:inline-block;flex:1 1 0;font-size:13px;font-weight:560;line-height:1.1;max-width:220px;min-width:0;overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:nowrap}.xwk-button-balance{color:${theme.muted};font-weight:500;margin-left:4px}.xwk-button-balance-loading{display:inline-flex;vertical-align:-2px}.xwk-balance-spinner{animation:xwk-action-spin .8s linear infinite;border:2px solid ${theme.spinnerTrail};border-top-color:${theme.muted};border-radius:999px;box-sizing:border-box;display:inline-block;flex:0 0 13px;height:13px;width:13px}.xwk-button-chevron{align-items:center;background:${theme.background};border:1px solid ${iconBorder};border-radius:999px;color:${theme.muted};display:inline-flex;flex:0 0 26px;height:26px;justify-content:center;line-height:1;touch-action:manipulation;width:26px}.xwk-button-chevron:hover{background:${theme.surfaceHover};color:${theme.foreground}}.xwk-account-overlay{align-items:center;background:${theme.overlay};-webkit-backdrop-filter:${overlayBlur};backdrop-filter:${overlayBlur};display:flex;inset:0;justify-content:center;overscroll-behavior:contain;padding:max(24px,env(safe-area-inset-top)) max(24px,env(safe-area-inset-right)) max(24px,env(safe-area-inset-bottom)) max(24px,env(safe-area-inset-left));position:fixed;z-index:2147483647}.xwk-account-portal[data-xwk-entering="true"] .xwk-account-overlay{animation:xwk-account-overlay-in .18s ease-out}.xwk-account-panel{background:${theme.background};border:1px solid ${theme.border};border-radius:${theme.radius};box-shadow:${theme.shadow};box-sizing:border-box;color:${theme.foreground};display:grid;gap:12px;overflow:hidden;z-index:2147483647}.xwk-account-panel:focus{outline:none}.xwk-account-panel-dropdown{box-shadow:none;justify-items:center;margin-top:10px;min-width:320px;padding:18px;position:absolute;right:0;top:100%;width:min(360px,calc(100vw - 32px))}.xwk-account-panel-modal{gap:0;grid-template-rows:auto minmax(0,1fr);height:min(527px,calc(100dvh - 48px - env(safe-area-inset-top) - env(safe-area-inset-bottom)));max-width:520px;position:relative;transform-origin:center bottom;width:min(520px,100%)}.xwk-account-portal[data-xwk-entering="true"] .xwk-account-panel-modal{animation:xwk-account-panel-in .22s cubic-bezier(.22,1,.36,1)}.xwk-account-modal-header{align-items:center;background:${theme.headerBackground};border-bottom:1px solid ${theme.border};display:grid;grid-template-columns:44px minmax(0,1fr) 44px;column-gap:8px;padding:8px 18px}.xwk-account-modal-header h2{color:${theme.foreground};font-size:16px;font-weight:500;line-height:1.2;margin:0;min-width:0;overflow:hidden;text-align:center;text-overflow:ellipsis;white-space:nowrap}.xwk-account-modal-body{-webkit-overflow-scrolling:touch;display:grid;gap:12px;justify-items:center;min-height:0;overflow:auto;overscroll-behavior:contain;padding:22px 28px 28px}.xwk-account-close,.xwk-account-back{-webkit-appearance:none;-webkit-tap-highlight-color:transparent;align-items:center;appearance:none;background:transparent!important;border:0!important;border-radius:999px;box-shadow:none!important;color:${theme.muted};cursor:pointer;display:inline-flex;font:inherit;font-size:26px;font-weight:500;height:44px;justify-content:center;line-height:1;margin:0;min-height:0;outline:none!important;padding:0;touch-action:manipulation;transform:none;width:44px}.xwk-account-back{font-size:0;justify-self:start}.xwk-account-close{justify-self:end}.xwk-account-close:hover,.xwk-account-back:hover{background:${theme.surfaceHover}!important;box-shadow:none!important;color:${theme.foreground};transform:none}.xwk-account-close:focus-visible,.xwk-account-back:focus-visible{outline:2px solid ${theme.accent}!important;outline-offset:0}.xwk-account-hero{height:154px;margin-top:4px;position:relative;width:180px}.xwk-account-panel-dropdown .xwk-account-hero{height:132px;width:160px}.xwk-account-art,.xwk-account-avatar{border-radius:999px;height:118px;left:31px;position:absolute;top:8px;width:118px}.xwk-account-panel-dropdown .xwk-account-art,.xwk-account-panel-dropdown .xwk-account-avatar{height:104px;left:28px;width:104px}.xwk-account-art{align-items:center;background:radial-gradient(circle at 58% 38%,var(--xwk-avatar-spot),transparent 0 22%,transparent 23%),linear-gradient(160deg,var(--xwk-avatar-from),var(--xwk-avatar-to));display:flex;justify-content:center}.xwk-account-art span{background:rgba(255,255,255,.18);border-radius:999px;height:50px;width:50px}.xwk-account-panel-dropdown .xwk-account-art span{height:42px;width:42px}.xwk-account-avatar{background:${theme.surface};border:1px solid ${iconBorder};box-sizing:border-box;display:block;object-fit:cover;overflow:hidden}.xwk-account-name{color:${theme.foreground};font-size:21px;font-weight:650;line-height:1.2;max-width:100%;overflow:hidden;text-align:center;text-overflow:ellipsis;white-space:nowrap}.xwk-account-panel-dropdown .xwk-account-name{font-size:18px}.xwk-account-name-with-qr,.xwk-account-address{align-items:center;display:inline-flex;gap:6px;justify-content:center}.xwk-account-name-with-qr span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.xwk-account-name-address{background:${theme.surface};border:1px solid ${theme.border};border-radius:14px;color:${theme.muted};font-size:16px;font-weight:600;line-height:1.2;max-width:min(260px,100%);padding:7px 6px 7px 14px}.xwk-account-address{background:${theme.surface};border:1px solid ${theme.border};border-radius:12px;color:${theme.muted};font-size:14px;font-weight:520;line-height:1.25;max-width:100%;overflow:hidden;padding:8px 8px 8px 12px;text-align:center;text-overflow:ellipsis;white-space:nowrap}.xwk-address-qr-trigger{-webkit-appearance:none;-webkit-tap-highlight-color:transparent;align-items:center;appearance:none;background:transparent;border:0;border-radius:10px;box-shadow:none;color:currentColor;cursor:pointer;display:inline-flex;flex:0 0 34px;height:34px;justify-content:center;margin:-4px -3px -4px 0;min-height:0;outline:none;overflow:visible;padding:0;touch-action:manipulation;transform:none;width:34px}.xwk-address-qr-trigger svg{display:block;height:17px;overflow:visible;width:17px}.xwk-address-qr-trigger:hover{background:${theme.surfaceHover};box-shadow:none;transform:none}.xwk-account-balance{align-items:center;background:${theme.surface};border:1px solid ${actionBorder};border-radius:999px;box-sizing:border-box;color:${theme.muted};display:inline-flex;font-size:13px;font-weight:560;height:42px;justify-content:center;letter-spacing:0;line-height:1;padding:0 14px;text-align:center}.xwk-account-balance-loading{align-items:center;display:inline-flex;gap:6px}.xwk-account-warning{align-items:center;background:${theme.surface};border:1px solid ${actionBorder};border-radius:12px;box-sizing:border-box;color:${theme.muted};display:flex;font-size:13px;font-weight:520;justify-content:center;line-height:1.25;min-height:54px;padding:0 14px;text-align:center;width:100%}.xwk-address-qr-content{align-content:center;display:grid;gap:14px;justify-items:center;min-height:100%;width:100%}.xwk-address-qr-code{aspect-ratio:1/1;background:${theme.surface};border:1px solid ${theme.border};border-radius:14px;box-sizing:border-box;display:grid;max-width:304px;padding:12px;place-items:center;width:min(304px,100%)}.xwk-address-qr-code svg,.xwk-address-qr-code canvas,.xwk-address-qr-code img{aspect-ratio:1/1;display:block;height:auto;max-width:100%;width:100%}.xwk-address-qr-chip{background:${theme.surface};border:1px solid ${theme.border};border-radius:12px;box-sizing:border-box;color:${theme.muted};font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;font-weight:520;line-height:1.45;max-width:100%;overflow-wrap:anywhere;padding:9px 11px;text-align:center;width:100%}.xwk-address-qr-fallback{color:${theme.muted};font-size:12px;line-height:1.45;overflow-wrap:anywhere}.xwk-account-panel-actions{display:grid;gap:10px;grid-template-columns:1fr;width:100%}.xwk-account-modal-body .xwk-account-panel-actions{margin-top:auto}.xwk-account-panel-actions button,.xwk-account-panel-actions a{-webkit-appearance:none;-webkit-tap-highlight-color:transparent;align-items:center;appearance:none;background:${theme.surface};border:1px solid ${actionBorder};border-radius:${theme.walletRadius};box-shadow:none;box-sizing:border-box;color:${theme.foreground};cursor:pointer;display:flex;font:inherit;font-size:14px;font-weight:560;gap:8px;justify-content:center;line-height:1.2;min-height:46px;min-width:0;outline:none;overflow:hidden;padding:0 12px;text-decoration:none;touch-action:manipulation;transform:none;transition:background-color .16s ease,border-color .16s ease;width:100%}.xwk-account-panel-actions button:disabled{cursor:wait;opacity:1}.xwk-account-panel-actions svg{flex:0 0 auto;opacity:.58}.xwk-account-panel-actions span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.xwk-account-panel-actions button:hover,.xwk-account-panel-actions a:hover{background:${theme.surfaceHover};border-color:${actionBorder};box-shadow:none;text-decoration:none;transform:none}.xwk-account-panel-actions button:active,.xwk-account-panel-actions a:active{background:${theme.surfaceHover};opacity:1;text-decoration:none;transform:none}.xwk-copied-icon{color:${theme.success};opacity:1!important}.xwk-action-spinner{animation:xwk-action-spin .8s linear infinite;border:2px solid ${theme.spinnerTrail};border-top-color:${theme.muted};border-radius:999px;box-sizing:border-box;display:inline-block;height:17px;width:17px}@keyframes xwk-action-spin{to{transform:rotate(360deg)}}@keyframes xwk-account-overlay-in{from{opacity:0}to{opacity:1}}@keyframes xwk-account-panel-in{from{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}@media(prefers-reduced-motion:reduce){.xwk-account-button,.xwk-account-panel-actions button,.xwk-account-panel-actions a{transition:none}.xwk-account-portal[data-xwk-entering="true"] .xwk-account-overlay,.xwk-account-portal[data-xwk-entering="true"] .xwk-account-panel-modal{animation-duration:1ms!important}.xwk-action-spinner,.xwk-balance-spinner{animation:none}}@media(max-width:520px){.xwk-account-panel-dropdown{bottom:0;left:0;margin-top:0;min-width:0;position:fixed;right:0;top:auto;width:100vw}.xwk-account-overlay{align-items:flex-end;padding:max(12px,env(safe-area-inset-top)) 0 0}.xwk-account-panel-modal{align-self:flex-end;border-bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0;border-left:0;border-right:0;border-top-left-radius:${theme.radius};border-top-right-radius:${theme.radius};height:min(527px,calc(100dvh - env(safe-area-inset-top)));max-width:none;width:100vw}.xwk-account-portal[data-xwk-entering="true"] .xwk-account-panel-modal{animation:xwk-account-sheet-in .28s cubic-bezier(.32,.72,0,1)}.xwk-account-modal-header{border-top-left-radius:${theme.radius};border-top-right-radius:${theme.radius};grid-template-columns:44px minmax(0,1fr) 44px;padding:10px 16px}.xwk-account-modal-body{min-height:0;padding:18px 20px max(22px,calc(22px + env(safe-area-inset-bottom)))}.xwk-button-label{max-width:min(150px,calc(100vw - 140px))}}@keyframes xwk-account-sheet-in{from{opacity:1;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}`;
|
|
21718
|
+
return `.xwk-button-root{display:inline-block;max-width:100%;position:relative;font-family:${theme.fontFamily};font-size:14px}.xwk-account-button{align-items:center;background:${background};border:1px solid ${border};border-radius:${radius};box-shadow:none;box-sizing:border-box;color:${theme.foreground};cursor:pointer;display:inline-flex;gap:8px;font:inherit;font-weight:560;max-width:100%;min-height:${height};overflow:hidden;padding:0 12px 0 10px;touch-action:manipulation;transition:background-color .16s ease,border-color .16s ease;white-space:nowrap;-webkit-tap-highlight-color:transparent;transform:none}.xwk-account-button:hover{background:${hoverBackground};box-shadow:none;opacity:1;transform:none}.xwk-account-button:active{background:${hoverBackground};opacity:1;transform:none}.xwk-account-button:focus-visible,.xwk-button-chevron:focus-visible,.xwk-account-panel-actions button:focus-visible,.xwk-account-panel-actions a:focus-visible,.xwk-address-qr-trigger:focus-visible,.xwk-tx-header:focus-visible,.xwk-tx-link:focus-visible{outline:2px solid ${theme.accent};outline-offset:2px;text-decoration:none}.xwk-button-icon{background:${theme.background};border:1px solid ${iconBorder};border-radius:10px;box-sizing:border-box;display:inline-flex;flex:0 0 28px;height:28px;isolation:isolate;line-height:0;max-width:28px;min-width:28px;object-fit:contain;overflow:hidden;position:relative;width:28px}.xwk-button-icon-fallback{align-items:center;background:${fallbackIconBackground};color:${fallbackIconColor};justify-content:center}.xwk-button-icon-initial{font-size:12px;line-height:1}.xwk-button-icon-svg-fallback{font-size:0}.xwk-button-icon-svg-fallback svg{display:block;flex:0 0 17px;height:17px;max-height:17px;max-width:17px;min-height:17px;min-width:17px;width:17px}.xwk-button-pending-dot{background:${theme.accent};border:2px solid ${background};border-radius:999px;box-sizing:border-box;flex:0 0 9px;height:9px;margin-left:-13px;margin-right:4px;position:relative;width:9px;z-index:1}.xwk-button-label{display:inline-block;flex:1 1 0;font-size:13px;font-weight:560;line-height:1.1;max-width:220px;min-width:0;overflow:hidden;padding-right:2px;text-overflow:ellipsis;white-space:nowrap}.xwk-button-balance{color:${theme.muted};font-weight:500;margin-left:4px}.xwk-button-balance-loading{display:inline-flex;vertical-align:-2px}.xwk-balance-spinner{animation:xwk-action-spin .8s linear infinite;border:2px solid ${theme.spinnerTrail};border-top-color:${theme.muted};border-radius:999px;box-sizing:border-box;display:inline-block;flex:0 0 13px;height:13px;width:13px}.xwk-button-chevron{align-items:center;background:${theme.background};border:1px solid ${iconBorder};border-radius:999px;color:${theme.muted};display:inline-flex;flex:0 0 26px;height:26px;justify-content:center;line-height:1;touch-action:manipulation;width:26px}.xwk-button-chevron:hover{background:${theme.surfaceHover};color:${theme.foreground}}.xwk-account-overlay{align-items:center;background:${theme.overlay};-webkit-backdrop-filter:${overlayBlur};backdrop-filter:${overlayBlur};display:flex;inset:0;justify-content:center;overscroll-behavior:contain;padding:max(24px,env(safe-area-inset-top)) max(24px,env(safe-area-inset-right)) max(24px,env(safe-area-inset-bottom)) max(24px,env(safe-area-inset-left));position:fixed;z-index:2147483647}.xwk-account-portal[data-xwk-entering="true"] .xwk-account-overlay{animation:xwk-account-overlay-in .18s ease-out}.xwk-account-panel{background:${theme.background};border:1px solid ${theme.border};border-radius:${theme.radius};box-shadow:${theme.shadow};box-sizing:border-box;color:${theme.foreground};display:grid;gap:12px;overflow:hidden;z-index:2147483647}.xwk-account-panel:focus{outline:none}.xwk-account-panel-dropdown{box-shadow:none;justify-items:center;margin-top:10px;min-width:320px;padding:18px;position:absolute;right:0;top:100%;width:min(360px,calc(100vw - 32px))}.xwk-account-panel-modal{gap:0;grid-template-rows:auto minmax(0,1fr);height:min(527px,calc(100dvh - 48px - env(safe-area-inset-top) - env(safe-area-inset-bottom)));max-width:520px;position:relative;transform-origin:center bottom;width:min(520px,100%)}.xwk-account-panel-modal.xwk-account-panel-with-transactions{height:min(650px,calc(100dvh - 48px - env(safe-area-inset-top) - env(safe-area-inset-bottom)))}.xwk-account-portal[data-xwk-entering="true"] .xwk-account-panel-modal{animation:xwk-account-panel-in .22s cubic-bezier(.22,1,.36,1)}.xwk-account-modal-header{align-items:center;background:${theme.headerBackground};border-bottom:1px solid ${theme.border};display:grid;grid-template-columns:44px minmax(0,1fr) 44px;column-gap:8px;padding:8px 18px}.xwk-account-modal-header h2{color:${theme.foreground};font-size:16px;font-weight:500;line-height:1.2;margin:0;min-width:0;overflow:hidden;text-align:center;text-overflow:ellipsis;white-space:nowrap}.xwk-account-modal-body{-webkit-overflow-scrolling:touch;align-items:center;display:flex;flex-direction:column;gap:12px;min-height:0;overflow:hidden;overscroll-behavior:contain;padding:22px 28px 28px}.xwk-account-panel-with-transactions .xwk-account-modal-body{overflow:auto;padding-top:14px}.xwk-account-modal-body>.xwk-account-hero,.xwk-account-modal-body>.xwk-account-name,.xwk-account-modal-body>.xwk-account-address,.xwk-account-modal-body>.xwk-account-meta-row,.xwk-account-modal-body>.xwk-account-warning,.xwk-account-modal-body>.xwk-tx-section,.xwk-account-modal-body>.xwk-account-panel-actions{flex-shrink:0}.xwk-account-close,.xwk-account-back{-webkit-appearance:none;-webkit-tap-highlight-color:transparent;align-items:center;appearance:none;background:transparent!important;border:0!important;border-radius:999px;box-shadow:none!important;color:${theme.muted};cursor:pointer;display:inline-flex;font:inherit;font-size:26px;font-weight:500;height:44px;justify-content:center;line-height:1;margin:0;min-height:0;outline:none!important;padding:0;touch-action:manipulation;transform:none;width:44px}.xwk-account-back{font-size:0;justify-self:start}.xwk-account-close{justify-self:end}.xwk-account-close:hover,.xwk-account-back:hover{background:${theme.surfaceHover}!important;box-shadow:none!important;color:${theme.foreground};transform:none}.xwk-account-close:focus-visible,.xwk-account-back:focus-visible{outline:2px solid ${theme.accent}!important;outline-offset:0}.xwk-account-hero{height:154px;margin-top:4px;position:relative;width:180px}.xwk-account-panel-with-transactions .xwk-account-hero{height:126px;margin-bottom:0}.xwk-account-panel-with-transactions .xwk-account-art,.xwk-account-panel-with-transactions .xwk-account-avatar{top:0}.xwk-account-panel-dropdown .xwk-account-hero{height:132px;width:160px}.xwk-account-art,.xwk-account-avatar{border-radius:999px;height:118px;left:31px;position:absolute;top:8px;width:118px}.xwk-account-panel-dropdown .xwk-account-art,.xwk-account-panel-dropdown .xwk-account-avatar{height:104px;left:28px;width:104px}.xwk-account-art{align-items:center;background:radial-gradient(circle at 58% 38%,var(--xwk-avatar-spot),transparent 0 22%,transparent 23%),linear-gradient(160deg,var(--xwk-avatar-from),var(--xwk-avatar-to));display:flex;justify-content:center}.xwk-account-art span{background:rgba(255,255,255,.18);border-radius:999px;height:50px;width:50px}.xwk-account-panel-dropdown .xwk-account-art span{height:42px;width:42px}.xwk-account-avatar{background:${theme.surface};border:1px solid ${iconBorder};box-sizing:border-box;display:block;object-fit:cover;overflow:hidden}.xwk-account-panel-with-transactions .xwk-account-name{position:relative;z-index:1}.xwk-account-name{color:${theme.foreground};font-size:21px;font-weight:650;line-height:1.2;max-width:100%;overflow:hidden;text-align:center;text-overflow:ellipsis;white-space:nowrap}.xwk-account-panel-dropdown .xwk-account-name{font-size:18px}.xwk-account-name-with-qr,.xwk-account-address{align-items:center;display:inline-flex;gap:6px;justify-content:center}.xwk-account-name-with-qr span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.xwk-account-name-address{background:${theme.surface};border:1px solid ${theme.border};border-radius:14px;color:${theme.muted};font-size:16px;font-weight:600;line-height:1.2;max-width:min(260px,100%);padding:7px 6px 7px 14px}.xwk-account-address{background:${theme.surface};border:1px solid ${theme.border};border-radius:12px;color:${theme.muted};font-size:14px;font-weight:520;line-height:1.25;max-width:100%;overflow:hidden;padding:8px 8px 8px 12px;text-align:center;text-overflow:ellipsis;white-space:nowrap}.xwk-address-qr-trigger{-webkit-appearance:none;-webkit-tap-highlight-color:transparent;align-items:center;appearance:none;background:transparent;border:0;border-radius:10px;box-shadow:none;color:currentColor;cursor:pointer;display:inline-flex;flex:0 0 34px;height:34px;justify-content:center;margin:-4px -3px -4px 0;min-height:0;outline:none;overflow:visible;padding:0;touch-action:manipulation;transform:none;width:34px}.xwk-address-qr-trigger svg{display:block;height:17px;overflow:visible;width:17px}.xwk-address-qr-trigger:hover{background:${theme.surfaceHover};box-shadow:none;transform:none}.xwk-account-meta-row{align-items:center;display:flex;gap:8px;justify-content:center;max-width:100%;min-height:42px}.xwk-account-balance{align-items:center;background:${theme.surface};border:1px solid ${actionBorder};border-radius:999px;box-sizing:border-box;color:${theme.muted};display:inline-flex;font-size:13px;font-weight:560;height:42px;justify-content:center;letter-spacing:0;line-height:1;padding:0 14px;text-align:center}.xwk-account-balance-loading{align-items:center;display:inline-flex;gap:6px}.xwk-account-warning{align-items:center;background:${theme.surface};border:1px solid ${actionBorder};border-radius:12px;box-sizing:border-box;color:${theme.muted};display:flex;font-size:13px;font-weight:520;justify-content:center;line-height:1.25;min-height:54px;padding:0 14px;text-align:center;width:100%}.xwk-address-qr-content{align-content:center;display:grid;gap:14px;justify-items:center;min-height:100%;width:100%}.xwk-address-qr-code{aspect-ratio:1/1;background:${theme.surface};border:1px solid ${theme.border};border-radius:14px;box-sizing:border-box;display:grid;max-width:304px;padding:12px;place-items:center;width:min(304px,100%)}.xwk-address-qr-code svg,.xwk-address-qr-code canvas,.xwk-address-qr-code img{aspect-ratio:1/1;display:block;height:auto;max-width:100%;width:100%}.xwk-address-qr-chip{background:${theme.surface};border:1px solid ${theme.border};border-radius:12px;box-sizing:border-box;color:${theme.muted};font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;font-weight:520;line-height:1.45;max-width:100%;overflow-wrap:anywhere;padding:9px 11px;text-align:center;width:100%}.xwk-address-qr-fallback{color:${theme.muted};font-size:12px;line-height:1.45;overflow-wrap:anywhere}.xwk-tx-section{background:${theme.surface};border:1px solid ${actionBorder};border-radius:${theme.walletRadius};box-sizing:border-box;display:grid;overflow:hidden;width:100%}.xwk-tx-header{-webkit-appearance:none;-webkit-tap-highlight-color:transparent;align-items:center;appearance:none;background:${theme.surface}!important;border:0!important;box-shadow:none!important;color:${theme.muted};cursor:pointer;display:flex;font:inherit;font-size:10px;font-weight:650;gap:6px;letter-spacing:.07em;line-height:1.2;margin:0;min-height:34px;outline:none;padding:0 12px;text-align:left;text-transform:uppercase;touch-action:manipulation;transform:none;transition:background-color .16s ease,color .16s ease;width:100%}.xwk-tx-header:hover,.xwk-tx-header:active{background:${theme.surfaceHover}!important;border:0!important;box-shadow:none!important;color:${theme.foreground};opacity:1;text-decoration:none;transform:none}.xwk-tx-count{align-items:center;background:${theme.background};border:1px solid ${actionBorder};border-radius:999px;box-sizing:border-box;color:${theme.muted};display:inline-flex;font-size:10px;font-weight:650;height:16px;justify-content:center;letter-spacing:0;line-height:1;min-width:18px;padding:0 5px;text-transform:none}.xwk-tx-chevron{align-items:center;color:${theme.muted};display:inline-flex;flex:0 0 16px;height:16px;justify-content:center;margin-left:auto;transition:transform .18s ease;width:16px}.xwk-tx-chevron.closed{transform:rotate(-90deg)}.xwk-tx-chevron svg{display:block;height:12px;width:12px}.xwk-tx-list{-webkit-overflow-scrolling:touch;display:grid;gap:0;max-height:86px;overflow:auto;overscroll-behavior:contain;scrollbar-color:${theme.muted} transparent;scrollbar-width:thin}.xwk-tx-list::-webkit-scrollbar{width:6px}.xwk-tx-list::-webkit-scrollbar-track{background:transparent}.xwk-tx-list::-webkit-scrollbar-thumb{background:${theme.muted};border-radius:999px}.xwk-tx-row{align-items:center;background:${theme.surface};border-top:1px solid ${actionBorder};box-sizing:border-box;display:grid;gap:8px;grid-template-columns:24px minmax(0,1fr) auto;min-height:42px;padding:7px 10px;transition:background-color .16s ease}.xwk-tx-row:hover{background:${theme.surface};box-shadow:none;transform:none}.xwk-tx-row:first-child{border-top:0}.xwk-tx-status{align-items:center;background:${theme.background};border-radius:999px;color:${theme.accent};display:inline-flex;height:24px;justify-content:center;width:24px}.xwk-tx-row-confirmed .xwk-tx-status{color:${theme.success}}.xwk-tx-row-failed .xwk-tx-status{color:${theme.error}}.xwk-tx-row-unknown .xwk-tx-status{color:${theme.muted}}.xwk-tx-main{display:grid;gap:2px;min-width:0}.xwk-tx-label{color:${theme.foreground};font-size:12px;font-weight:600;line-height:1.15;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.xwk-tx-hash{color:${theme.muted};font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:1.15;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.xwk-tx-link{align-items:center;border-radius:9px;color:${theme.accent};display:inline-flex;font:inherit;font-size:12px;font-weight:650;gap:3px;line-height:1.2;min-height:28px;padding:0 6px;text-decoration:none}.xwk-tx-link:hover{background:${theme.surfaceHover};box-shadow:none;text-decoration:none;transform:none}.xwk-tx-link svg{height:12px;width:12px}.xwk-tx-empty{background:${theme.surface};border:1px solid ${actionBorder};border-radius:${theme.walletRadius};box-sizing:border-box;color:${theme.muted};font-size:13px;line-height:1.35;padding:14px;text-align:center;width:100%}.xwk-tx-spinner{animation:xwk-action-spin .8s linear infinite;border:2px solid ${theme.spinnerTrail};border-top-color:${theme.accent};border-radius:999px;box-sizing:border-box;display:block;height:14px;width:14px}.xwk-account-panel-actions{display:grid;gap:10px;grid-template-columns:1fr;width:100%}.xwk-account-modal-body .xwk-account-panel-actions{margin-top:auto}.xwk-account-panel-with-transactions .xwk-account-modal-body .xwk-account-panel-actions{margin-top:0}.xwk-account-panel-actions button,.xwk-account-panel-actions a{-webkit-appearance:none;-webkit-tap-highlight-color:transparent;align-items:center;appearance:none;background:${theme.surface};border:1px solid ${actionBorder};border-radius:${theme.walletRadius};box-shadow:none;box-sizing:border-box;color:${theme.foreground};cursor:pointer;display:flex;font:inherit;font-size:14px;font-weight:560;gap:8px;justify-content:center;line-height:1.2;min-height:46px;min-width:0;outline:none;overflow:hidden;padding:0 12px;text-decoration:none;touch-action:manipulation;transform:none;transition:background-color .16s ease,border-color .16s ease;width:100%}.xwk-account-panel-actions button:disabled{cursor:wait;opacity:1}.xwk-account-panel-actions svg{flex:0 0 auto;opacity:.58}.xwk-account-panel-actions span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.xwk-account-panel-actions button:hover,.xwk-account-panel-actions a:hover{background:${theme.surfaceHover};border-color:${actionBorder};box-shadow:none;text-decoration:none;transform:none}.xwk-account-panel-actions button:active,.xwk-account-panel-actions a:active{background:${theme.surfaceHover};opacity:1;text-decoration:none;transform:none}.xwk-copied-icon{color:${theme.success};opacity:1!important}.xwk-action-spinner{animation:xwk-action-spin .8s linear infinite;border:2px solid ${theme.spinnerTrail};border-top-color:${theme.muted};border-radius:999px;box-sizing:border-box;display:inline-block;height:17px;width:17px}@keyframes xwk-action-spin{to{transform:rotate(360deg)}}@keyframes xwk-account-overlay-in{from{opacity:0}to{opacity:1}}@keyframes xwk-account-panel-in{from{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}@media(prefers-reduced-motion:reduce){.xwk-account-button,.xwk-tx-chevron,.xwk-account-panel-actions button,.xwk-account-panel-actions a{transition:none}.xwk-account-portal[data-xwk-entering="true"] .xwk-account-overlay,.xwk-account-portal[data-xwk-entering="true"] .xwk-account-panel-modal{animation-duration:1ms!important}.xwk-action-spinner,.xwk-balance-spinner,.xwk-tx-spinner{animation:none}}@media(max-width:520px){.xwk-account-panel-dropdown{bottom:0;left:0;margin-top:0;min-width:0;position:fixed;right:0;top:auto;width:100vw}.xwk-account-overlay{align-items:flex-end;padding:max(12px,env(safe-area-inset-top)) 0 0}.xwk-account-panel-modal{align-self:flex-end;border-bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0;border-left:0;border-right:0;border-top-left-radius:${theme.radius};border-top-right-radius:${theme.radius};height:min(527px,calc(100dvh - env(safe-area-inset-top)));max-width:none;width:100vw}.xwk-account-portal[data-xwk-entering="true"] .xwk-account-panel-modal{animation:xwk-account-sheet-in .28s cubic-bezier(.32,.72,0,1)}.xwk-account-modal-header{border-top-left-radius:${theme.radius};border-top-right-radius:${theme.radius};grid-template-columns:44px minmax(0,1fr) 44px;padding:10px 16px}.xwk-account-modal-body{min-height:0;padding:18px 20px max(22px,calc(22px + env(safe-area-inset-bottom)))}.xwk-button-label{max-width:min(150px,calc(100vw - 140px))}}@keyframes xwk-account-sheet-in{from{opacity:1;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}`;
|
|
21456
21719
|
}
|
|
21457
21720
|
resolveTheme() {
|
|
21458
21721
|
return resolveWalletTheme({
|
|
@@ -21554,7 +21817,7 @@ ${new this._window.XMLSerializer().serializeToString(e4)}`;
|
|
|
21554
21817
|
if (!response.ok)
|
|
21555
21818
|
return void 0;
|
|
21556
21819
|
const json = await response.json();
|
|
21557
|
-
return findAvatarUrl(json);
|
|
21820
|
+
return normalizeAvatarUrl(findAvatarUrl(json), endpoint);
|
|
21558
21821
|
} catch {
|
|
21559
21822
|
return void 0;
|
|
21560
21823
|
}
|
|
@@ -21578,6 +21841,25 @@ ${new this._window.XMLSerializer().serializeToString(e4)}`;
|
|
|
21578
21841
|
return resultAvatar;
|
|
21579
21842
|
return void 0;
|
|
21580
21843
|
}
|
|
21844
|
+
function normalizeAvatarUrl(value, endpoint) {
|
|
21845
|
+
if (!value)
|
|
21846
|
+
return void 0;
|
|
21847
|
+
if (/^(?:https?:|data:|blob:|ipfs:|ar:)/i.test(value))
|
|
21848
|
+
return value;
|
|
21849
|
+
if (value.startsWith("//")) {
|
|
21850
|
+
try {
|
|
21851
|
+
return `${new URL(endpoint).protocol}${value}`;
|
|
21852
|
+
} catch {
|
|
21853
|
+
return value;
|
|
21854
|
+
}
|
|
21855
|
+
}
|
|
21856
|
+
try {
|
|
21857
|
+
const base3 = new URL(endpoint);
|
|
21858
|
+
return new URL(value.replace(/^\/+/, ""), `${base3.origin}/`).toString();
|
|
21859
|
+
} catch {
|
|
21860
|
+
return value;
|
|
21861
|
+
}
|
|
21862
|
+
}
|
|
21581
21863
|
function createWalletButton(options) {
|
|
21582
21864
|
const button = new WalletButtonController(options);
|
|
21583
21865
|
if (options.target)
|
|
@@ -21692,7 +21974,7 @@ ${new this._window.XMLSerializer().serializeToString(e4)}`;
|
|
|
21692
21974
|
const messages = this.messages();
|
|
21693
21975
|
const hash2 = transaction2.hash;
|
|
21694
21976
|
const hashLabel = this.formatHash(hash2);
|
|
21695
|
-
const label = transaction2.status === "confirmed" ? "Transaction confirmed" : transaction2.status === "failed" ? "Transaction failed" : "Transaction submitted";
|
|
21977
|
+
const label = transaction2.status === "confirmed" ? "Transaction confirmed" : transaction2.status === "failed" ? "Transaction failed" : transaction2.status === "unknown" ? "Transaction status unknown" : "Transaction submitted";
|
|
21696
21978
|
const explorerUrl = this.getExplorerUrl(hash2, (_a2 = transaction2.account) == null ? void 0 : _a2.network);
|
|
21697
21979
|
const link = explorerUrl ? `<a class="xwk-toast-link" href="${this.escapeHtml(explorerUrl)}" target="_blank" rel="noopener">View ${this.externalIcon()}</a>` : "";
|
|
21698
21980
|
return `<div class="xwk-toast xwk-toast--${transaction2.status}" data-hash="${this.escapeHtml(hash2)}" role="status"><div class="xwk-toast-icon">${this.renderStatusIcon(transaction2.status)}</div><div class="xwk-toast-body"><span class="xwk-toast-label">${this.escapeHtml(label)}</span><span class="xwk-toast-hash">${this.escapeHtml(hashLabel)}</span></div>${link}<button class="xwk-toast-dismiss" data-xwk-toast-dismiss="${this.escapeHtml(hash2)}" aria-label="${this.escapeHtml(messages.close)}" type="button">×</button></div>`;
|
|
@@ -21702,11 +21984,13 @@ ${new this._window.XMLSerializer().serializeToString(e4)}`;
|
|
|
21702
21984
|
return `<span class="xwk-toast-icon-mark" aria-hidden="true">${this.checkIcon()}</span>`;
|
|
21703
21985
|
if (status === "failed")
|
|
21704
21986
|
return `<span class="xwk-toast-icon-mark" aria-hidden="true">${this.closeIcon()}</span>`;
|
|
21987
|
+
if (status === "unknown")
|
|
21988
|
+
return `<span class="xwk-toast-icon-mark" aria-hidden="true">?</span>`;
|
|
21705
21989
|
return `<span class="xwk-toast-spinner" aria-hidden="true"></span>`;
|
|
21706
21990
|
}
|
|
21707
21991
|
renderStyles() {
|
|
21708
21992
|
const theme = this.resolveTheme();
|
|
21709
|
-
return `.xwk-toast-root{bottom:24px;display:flex;flex-direction:column-reverse;font-family:${theme.fontFamily};gap:10px;pointer-events:none;position:fixed;z-index:2147483646}.xwk-toast-root--bottom-right{right:24px}.xwk-toast-root--bottom-left{left:24px}.xwk-toast-root--bottom-center{left:50%;transform:translateX(-50%)}.xwk-toast{align-items:center;animation:xwk-toast-in .18s ease-out both;background:${theme.background};border:1px solid ${theme.border};border-radius:${theme.radius};box-shadow:none;box-sizing:border-box;color:${theme.foreground};display:flex;gap:12px;max-width:420px;min-width:330px;padding:12px 12px 12px 16px;pointer-events:auto}.xwk-toast-icon{align-items:center;border-radius:999px;display:flex;flex:0 0 32px;height:32px;justify-content:center;width:32px}.xwk-toast-spinner{animation:xwk-spin .9s linear infinite;border:2px solid ${theme.spinnerTrail};border-top-color:${theme.accent};border-radius:999px;display:block;height:18px;width:18px}.xwk-toast--submitted .xwk-toast-icon{background:${theme.surface};color:${theme.accent}}.xwk-toast--confirmed .xwk-toast-icon{background:${theme.surface};color:${theme.success}}.xwk-toast--failed .xwk-toast-icon{background:${theme.surface};color:${theme.error}}.xwk-toast-icon-mark{display:inline-flex}.xwk-toast-body{display:flex;flex:1 1 auto;flex-direction:column;gap:2px;min-width:0}.xwk-toast-label{color:${theme.foreground};font-size:13px;font-weight:600;white-space:nowrap}.xwk-toast-hash{color:${theme.muted};font-family:ui-monospace,"Cascadia Code",monospace;font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.xwk-toast-link{-webkit-tap-highlight-color:transparent;align-items:center;border-radius:${theme.walletRadius};box-sizing:border-box;color:${theme.accent};display:inline-flex;flex:0 0 auto;font:inherit;font-size:12px;font-weight:600;gap:4px;line-height:1.2;min-height:32px;outline:none;overflow:hidden;padding:0 6px;text-decoration:none;touch-action:manipulation;transform:none;white-space:nowrap}.xwk-toast-link:hover{background:${theme.surfaceHover};text-decoration:none}.xwk-toast-link svg{height:13px;width:13px}.xwk-toast-dismiss{-webkit-appearance:none;-webkit-tap-highlight-color:transparent;align-items:center;appearance:none;background:transparent;border:1px solid ${theme.border};border-radius:${theme.walletRadius};box-shadow:none;box-sizing:border-box;color:${theme.foreground};cursor:pointer;display:inline-flex;flex:0 0 44px;font:inherit;font-size:24px;font-weight:400;height:44px;justify-content:center;line-height:1;margin:0;min-height:0;outline:none;overflow:hidden;padding:0;touch-action:manipulation;transform:none;width:44px}.xwk-toast-dismiss:hover{background:${theme.surfaceHover};border-color:${theme.border};box-shadow:none;color:${theme.foreground};transform:none}.xwk-toast-dismiss:focus-visible,.xwk-toast-link:focus-visible{outline:2px solid ${theme.accent};outline-offset:2px}@keyframes xwk-toast-in{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes xwk-spin{to{transform:rotate(360deg)}}@media(max-width:480px){.xwk-toast-root{bottom:max(12px,env(safe-area-inset-bottom));left:12px;right:12px;transform:none}.xwk-toast{max-width:100%;min-width:0;width:100%}}@media(prefers-reduced-motion:reduce){.xwk-toast,.xwk-toast-spinner{animation:none}}`;
|
|
21993
|
+
return `.xwk-toast-root{bottom:24px;display:flex;flex-direction:column-reverse;font-family:${theme.fontFamily};gap:10px;pointer-events:none;position:fixed;z-index:2147483646}.xwk-toast-root--bottom-right{right:24px}.xwk-toast-root--bottom-left{left:24px}.xwk-toast-root--bottom-center{left:50%;transform:translateX(-50%)}.xwk-toast{align-items:center;animation:xwk-toast-in .18s ease-out both;background:${theme.background};border:1px solid ${theme.border};border-radius:${theme.radius};box-shadow:none;box-sizing:border-box;color:${theme.foreground};display:flex;gap:12px;max-width:420px;min-width:330px;padding:12px 12px 12px 16px;pointer-events:auto}.xwk-toast-icon{align-items:center;border-radius:999px;display:flex;flex:0 0 32px;height:32px;justify-content:center;width:32px}.xwk-toast-spinner{animation:xwk-spin .9s linear infinite;border:2px solid ${theme.spinnerTrail};border-top-color:${theme.accent};border-radius:999px;display:block;height:18px;width:18px}.xwk-toast--submitted .xwk-toast-icon{background:${theme.surface};color:${theme.accent}}.xwk-toast--confirmed .xwk-toast-icon{background:${theme.surface};color:${theme.success}}.xwk-toast--failed .xwk-toast-icon{background:${theme.surface};color:${theme.error}}.xwk-toast--unknown .xwk-toast-icon{background:${theme.surface};color:${theme.muted}}.xwk-toast-icon-mark{display:inline-flex}.xwk-toast-body{display:flex;flex:1 1 auto;flex-direction:column;gap:2px;min-width:0}.xwk-toast-label{color:${theme.foreground};font-size:13px;font-weight:600;white-space:nowrap}.xwk-toast-hash{color:${theme.muted};font-family:ui-monospace,"Cascadia Code",monospace;font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.xwk-toast-link{-webkit-tap-highlight-color:transparent;align-items:center;border-radius:${theme.walletRadius};box-sizing:border-box;color:${theme.accent};display:inline-flex;flex:0 0 auto;font:inherit;font-size:12px;font-weight:600;gap:4px;line-height:1.2;min-height:32px;outline:none;overflow:hidden;padding:0 6px;text-decoration:none;touch-action:manipulation;transform:none;white-space:nowrap}.xwk-toast-link:hover{background:${theme.surfaceHover};text-decoration:none}.xwk-toast-link svg{height:13px;width:13px}.xwk-toast-dismiss{-webkit-appearance:none;-webkit-tap-highlight-color:transparent;align-items:center;appearance:none;background:transparent;border:1px solid ${theme.border};border-radius:${theme.walletRadius};box-shadow:none;box-sizing:border-box;color:${theme.foreground};cursor:pointer;display:inline-flex;flex:0 0 44px;font:inherit;font-size:24px;font-weight:400;height:44px;justify-content:center;line-height:1;margin:0;min-height:0;outline:none;overflow:hidden;padding:0;touch-action:manipulation;transform:none;width:44px}.xwk-toast-dismiss:hover{background:${theme.surfaceHover};border-color:${theme.border};box-shadow:none;color:${theme.foreground};transform:none}.xwk-toast-dismiss:focus-visible,.xwk-toast-link:focus-visible{outline:2px solid ${theme.accent};outline-offset:2px}@keyframes xwk-toast-in{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes xwk-spin{to{transform:rotate(360deg)}}@media(max-width:480px){.xwk-toast-root{bottom:max(12px,env(safe-area-inset-bottom));left:12px;right:12px;transform:none}.xwk-toast{max-width:100%;min-width:0;width:100%}}@media(prefers-reduced-motion:reduce){.xwk-toast,.xwk-toast-spinner{animation:none}}`;
|
|
21710
21994
|
}
|
|
21711
21995
|
ensureStyles() {
|
|
21712
21996
|
const styles2 = this.renderStyles();
|
|
@@ -77269,6 +77553,7 @@ ${e2.length}`, n2 = new TextEncoder().encode(t2 + e2);
|
|
|
77269
77553
|
exports.WalletManager = WalletManager;
|
|
77270
77554
|
exports.WalletModal = WalletModal;
|
|
77271
77555
|
exports.WalletToast = WalletToast;
|
|
77556
|
+
exports.WalletTransactionStore = WalletTransactionStore;
|
|
77272
77557
|
exports.XAMAN_ICON = XAMAN_ICON;
|
|
77273
77558
|
exports.XRPLSNAP_ICON = XRPLSNAP_ICON;
|
|
77274
77559
|
exports.XRPL_DEVNET = XRPL_DEVNET;
|