@b3dotfun/sdk 0.0.58-alpha.2 → 0.0.58-test.1

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 (29) hide show
  1. package/dist/cjs/global-account/react/hooks/useWagmiConfig.d.ts +1 -441
  2. package/dist/cjs/global-account/react/hooks/useWagmiConfig.js +0 -2
  3. package/dist/cjs/shared/react/components/CurrencySelector.js +3 -8
  4. package/dist/cjs/shared/react/components/FormattedCurrency.d.ts +3 -3
  5. package/dist/cjs/shared/react/components/FormattedCurrency.js +26 -31
  6. package/dist/cjs/shared/react/hooks/useCurrencyConversion.d.ts +5 -8
  7. package/dist/cjs/shared/react/hooks/useCurrencyConversion.js +94 -153
  8. package/dist/cjs/shared/react/stores/currencyStore.d.ts +8 -83
  9. package/dist/cjs/shared/react/stores/currencyStore.js +5 -147
  10. package/dist/esm/global-account/react/hooks/useWagmiConfig.d.ts +1 -441
  11. package/dist/esm/global-account/react/hooks/useWagmiConfig.js +0 -2
  12. package/dist/esm/shared/react/components/CurrencySelector.js +5 -10
  13. package/dist/esm/shared/react/components/FormattedCurrency.d.ts +3 -3
  14. package/dist/esm/shared/react/components/FormattedCurrency.js +26 -31
  15. package/dist/esm/shared/react/hooks/useCurrencyConversion.d.ts +5 -8
  16. package/dist/esm/shared/react/hooks/useCurrencyConversion.js +95 -154
  17. package/dist/esm/shared/react/stores/currencyStore.d.ts +8 -83
  18. package/dist/esm/shared/react/stores/currencyStore.js +5 -143
  19. package/dist/types/global-account/react/hooks/useWagmiConfig.d.ts +1 -441
  20. package/dist/types/shared/react/components/FormattedCurrency.d.ts +3 -3
  21. package/dist/types/shared/react/hooks/useCurrencyConversion.d.ts +5 -8
  22. package/dist/types/shared/react/stores/currencyStore.d.ts +8 -83
  23. package/package.json +8 -4
  24. package/src/global-account/react/hooks/useWagmiConfig.tsx +0 -2
  25. package/src/shared/react/components/CurrencySelector.tsx +5 -36
  26. package/src/shared/react/components/FormattedCurrency.tsx +30 -36
  27. package/src/shared/react/hooks/__tests__/useCurrencyConversion.test.ts +14 -14
  28. package/src/shared/react/hooks/useCurrencyConversion.ts +96 -163
  29. package/src/shared/react/stores/currencyStore.ts +10 -216
@@ -10,444 +10,4 @@ export declare function useWagmiConfig(partnerId: string, rpcUrls?: Record<numbe
10
10
  }>;
11
11
  }, {
12
12
  "thirdweb:lastChainId": number;
13
- }>, import("wagmi").CreateConnectorFn<{
14
- request: import("ox/_types/core/Provider").RequestFn<{
15
- Request: {
16
- method: "eth_accounts";
17
- params?: undefined;
18
- };
19
- ReturnType: readonly import("ox/_types/core/Address").Address[];
20
- } | {
21
- Request: {
22
- method: "eth_blobBaseFee";
23
- params?: undefined;
24
- };
25
- ReturnType: import("ox/_types/core/Hex").Hex;
26
- } | {
27
- Request: {
28
- method: "eth_blockNumber";
29
- params?: undefined;
30
- };
31
- ReturnType: import("ox/_types/core/Hex").Hex;
32
- } | {
33
- Request: {
34
- method: "eth_call";
35
- params: [transaction: import("ox/_types/core/TransactionRequest").Rpc] | [transaction: import("ox/_types/core/TransactionRequest").Rpc, block: import("ox/_types/core/Block").Number<import("ox/_types/core/Hex").Hex> | import("ox/_types/core/Block").Tag | import("ox/_types/core/Block").Hash | import("ox/_types/core/Block").Identifier] | [transaction: import("ox/_types/core/TransactionRequest").Rpc, block: import("ox/_types/core/Block").Number<import("ox/_types/core/Hex").Hex> | import("ox/_types/core/Block").Tag | import("ox/_types/core/Block").Hash | import("ox/_types/core/Block").Identifier, stateOverride: unknown];
36
- };
37
- ReturnType: import("ox/_types/core/Hex").Hex;
38
- } | {
39
- Request: {
40
- method: "eth_chainId";
41
- params?: undefined;
42
- };
43
- ReturnType: import("ox/_types/core/Hex").Hex;
44
- } | {
45
- Request: {
46
- method: "eth_coinbase";
47
- params?: undefined;
48
- };
49
- ReturnType: import("ox/_types/core/Address").Address;
50
- } | {
51
- Request: {
52
- method: "eth_estimateGas";
53
- params: [transaction: import("ox/_types/core/TransactionRequest").Rpc] | [transaction: import("ox/_types/core/TransactionRequest").Rpc, block: import("ox/_types/core/Block").Number<import("ox/_types/core/Hex").Hex> | import("ox/_types/core/Block").Tag | import("ox/_types/core/Block").Hash | import("ox/_types/core/Block").Identifier] | [transaction: import("ox/_types/core/TransactionRequest").Rpc, block: import("ox/_types/core/Block").Number<import("ox/_types/core/Hex").Hex> | import("ox/_types/core/Block").Tag | import("ox/_types/core/Block").Hash | import("ox/_types/core/Block").Identifier, stateOverride: unknown];
54
- };
55
- ReturnType: import("ox/_types/core/Hex").Hex;
56
- } | {
57
- Request: {
58
- method: "eth_feeHistory";
59
- params: [blockCount: import("ox/_types/core/Hex").Hex, newestBlock: import("ox/_types/core/Block").Number<import("ox/_types/core/Hex").Hex> | import("ox/_types/core/Block").Tag, rewardPercentiles: number[] | undefined];
60
- };
61
- ReturnType: import("ox/_types/core/Fee").FeeHistoryRpc;
62
- } | {
63
- Request: {
64
- method: "eth_gasPrice";
65
- params?: undefined;
66
- };
67
- ReturnType: import("ox/_types/core/Hex").Hex;
68
- } | {
69
- Request: {
70
- method: "eth_getBalance";
71
- params: [address: import("ox/_types/core/Address").Address, block: import("ox/_types/core/Block").Number<import("ox/_types/core/Hex").Hex> | import("ox/_types/core/Block").Tag | import("ox/_types/core/Block").Hash | import("ox/_types/core/Block").Identifier];
72
- };
73
- ReturnType: import("ox/_types/core/Hex").Hex;
74
- } | {
75
- Request: {
76
- method: "eth_getBlockByHash";
77
- params: [hash: import("ox/_types/core/Hex").Hex, includeTransactionObjects: boolean];
78
- };
79
- ReturnType: import("ox/_types/core/Block").Rpc | null;
80
- } | {
81
- Request: {
82
- method: "eth_getBlockByNumber";
83
- params: [block: import("ox/_types/core/Block").Number<import("ox/_types/core/Hex").Hex> | import("ox/_types/core/Block").Tag, includeTransactionObjects: boolean];
84
- };
85
- ReturnType: import("ox/_types/core/Block").Rpc | null;
86
- } | {
87
- Request: {
88
- method: "eth_getBlockTransactionCountByHash";
89
- params: [hash: import("ox/_types/core/Hex").Hex];
90
- };
91
- ReturnType: import("ox/_types/core/Hex").Hex;
92
- } | {
93
- Request: {
94
- method: "eth_getBlockTransactionCountByNumber";
95
- params: [block: import("ox/_types/core/Block").Number<import("ox/_types/core/Hex").Hex> | import("ox/_types/core/Block").Tag];
96
- };
97
- ReturnType: import("ox/_types/core/Hex").Hex;
98
- } | {
99
- Request: {
100
- method: "eth_getCode";
101
- params: [address: import("ox/_types/core/Address").Address, block: import("ox/_types/core/Block").Number<import("ox/_types/core/Hex").Hex> | import("ox/_types/core/Block").Tag | import("ox/_types/core/Block").Hash | import("ox/_types/core/Block").Identifier];
102
- };
103
- ReturnType: import("ox/_types/core/Hex").Hex;
104
- } | {
105
- Request: {
106
- method: "eth_getFilterChanges";
107
- params: [filterId: import("ox/_types/core/Hex").Hex];
108
- };
109
- ReturnType: readonly import("ox/_types/core/Log").Rpc[] | readonly import("ox/_types/core/Hex").Hex[];
110
- } | {
111
- Request: {
112
- method: "eth_getFilterLogs";
113
- params: [filterId: import("ox/_types/core/Hex").Hex];
114
- };
115
- ReturnType: readonly import("ox/_types/core/Log").Rpc[];
116
- } | {
117
- Request: {
118
- method: "eth_getLogs";
119
- params: [filter: import("ox/_types/core/Filter").Rpc];
120
- };
121
- ReturnType: readonly import("ox/_types/core/Log").Rpc[];
122
- } | {
123
- Request: {
124
- method: "eth_getProof";
125
- params: [address: import("ox/_types/core/Address").Address, storageKeys: import("ox/_types/core/Hex").Hex[], block: import("ox/_types/core/Block").Number<import("ox/_types/core/Hex").Hex> | import("ox/_types/core/Block").Tag | import("ox/_types/core/Block").Hash | import("ox/_types/core/Block").Identifier];
126
- };
127
- ReturnType: import("ox/_types/core/AccountProof").Rpc;
128
- } | {
129
- Request: {
130
- method: "eth_getStorageAt";
131
- params: [address: import("ox/_types/core/Address").Address, index: import("ox/_types/core/Hex").Hex, block: import("ox/_types/core/Block").Number<import("ox/_types/core/Hex").Hex> | import("ox/_types/core/Block").Tag | import("ox/_types/core/Block").Hash | import("ox/_types/core/Block").Identifier];
132
- };
133
- ReturnType: import("ox/_types/core/Hex").Hex;
134
- } | {
135
- Request: {
136
- method: "eth_getTransactionByBlockHashAndIndex";
137
- params: [hash: import("ox/_types/core/Hex").Hex, index: import("ox/_types/core/Hex").Hex];
138
- };
139
- ReturnType: import("ox/_types/core/Transaction").Rpc | null;
140
- } | {
141
- Request: {
142
- method: "eth_getTransactionByBlockNumberAndIndex";
143
- params: [block: import("ox/_types/core/Block").Number<import("ox/_types/core/Hex").Hex> | import("ox/_types/core/Block").Tag, index: import("ox/_types/core/Hex").Hex];
144
- };
145
- ReturnType: import("ox/_types/core/Transaction").Rpc | null;
146
- } | {
147
- Request: {
148
- method: "eth_getTransactionByHash";
149
- params: [hash: import("ox/_types/core/Hex").Hex];
150
- };
151
- ReturnType: import("ox/_types/core/Transaction").Rpc | null;
152
- } | {
153
- Request: {
154
- method: "eth_getTransactionCount";
155
- params: [address: import("ox/_types/core/Address").Address, block: import("ox/_types/core/Block").Number<import("ox/_types/core/Hex").Hex> | import("ox/_types/core/Block").Tag | import("ox/_types/core/Block").Hash | import("ox/_types/core/Block").Identifier];
156
- };
157
- ReturnType: import("ox/_types/core/Hex").Hex;
158
- } | {
159
- Request: {
160
- method: "eth_getTransactionReceipt";
161
- params: [hash: import("ox/_types/core/Hex").Hex];
162
- };
163
- ReturnType: import("ox/_types/core/TransactionReceipt").Rpc | null;
164
- } | {
165
- Request: {
166
- method: "eth_getUncleCountByBlockHash";
167
- params: [hash: import("ox/_types/core/Hex").Hex];
168
- };
169
- ReturnType: import("ox/_types/core/Hex").Hex;
170
- } | {
171
- Request: {
172
- method: "eth_getUncleCountByBlockNumber";
173
- params: [block: import("ox/_types/core/Block").Number<import("ox/_types/core/Hex").Hex> | import("ox/_types/core/Block").Tag];
174
- };
175
- ReturnType: import("ox/_types/core/Hex").Hex;
176
- } | {
177
- Request: {
178
- method: "eth_maxPriorityFeePerGas";
179
- params?: undefined;
180
- };
181
- ReturnType: import("ox/_types/core/Hex").Hex;
182
- } | {
183
- Request: {
184
- method: "eth_newBlockFilter";
185
- params?: undefined;
186
- };
187
- ReturnType: import("ox/_types/core/Hex").Hex;
188
- } | {
189
- Request: {
190
- method: "eth_newFilter";
191
- params: [filter: import("ox/_types/core/Filter").Rpc];
192
- };
193
- ReturnType: import("ox/_types/core/Hex").Hex;
194
- } | {
195
- Request: {
196
- method: "eth_newPendingTransactionFilter";
197
- params?: undefined;
198
- };
199
- ReturnType: import("ox/_types/core/Hex").Hex;
200
- } | {
201
- Request: {
202
- method: "eth_protocolVersion";
203
- params?: undefined;
204
- };
205
- ReturnType: string;
206
- } | {
207
- Request: {
208
- method: "eth_requestAccounts";
209
- params?: undefined;
210
- };
211
- ReturnType: readonly import("ox/_types/core/Address").Address[];
212
- } | {
213
- Request: {
214
- method: "eth_sendRawTransaction";
215
- params: [serializedTransaction: import("ox/_types/core/Hex").Hex];
216
- };
217
- ReturnType: import("ox/_types/core/Hex").Hex;
218
- } | {
219
- Request: {
220
- method: "eth_sendTransaction";
221
- params: [transaction: import("ox/_types/core/TransactionRequest").Rpc];
222
- };
223
- ReturnType: import("ox/_types/core/Hex").Hex;
224
- } | {
225
- Request: {
226
- method: "eth_signTransaction";
227
- params: [request: import("ox/_types/core/TransactionRequest").Rpc];
228
- };
229
- ReturnType: import("ox/_types/core/Hex").Hex;
230
- } | {
231
- Request: {
232
- method: "eth_signTypedData_v4";
233
- params: [address: import("ox/_types/core/Address").Address, message: string];
234
- };
235
- ReturnType: import("ox/_types/core/Hex").Hex;
236
- } | {
237
- Request: {
238
- method: "eth_uninstallFilter";
239
- params: [filterId: import("ox/_types/core/Hex").Hex];
240
- };
241
- ReturnType: boolean;
242
- } | {
243
- Request: {
244
- method: "eth_requestAccounts";
245
- params?: undefined;
246
- };
247
- ReturnType: readonly import("ox/_types/core/Address").Address[];
248
- } | {
249
- Request: {
250
- method: "eth_sendRawTransaction";
251
- params: [serializedTransaction: import("ox/_types/core/Hex").Hex];
252
- };
253
- ReturnType: import("ox/_types/core/Hex").Hex;
254
- } | {
255
- Request: {
256
- method: "eth_sendTransaction";
257
- params: [transaction: import("ox/_types/core/TransactionRequest").Rpc];
258
- };
259
- ReturnType: import("ox/_types/core/Hex").Hex;
260
- } | {
261
- Request: {
262
- method: "eth_signTransaction";
263
- params: [request: import("ox/_types/core/TransactionRequest").Rpc];
264
- };
265
- ReturnType: import("ox/_types/core/Hex").Hex;
266
- } | {
267
- Request: {
268
- method: "eth_signTypedData_v4";
269
- params: [address: import("ox/_types/core/Address").Address, message: string];
270
- };
271
- ReturnType: import("ox/_types/core/Hex").Hex;
272
- } | {
273
- Request: {
274
- method: "personal_sign";
275
- params: [data: import("ox/_types/core/Hex").Hex, address: import("ox/_types/core/Address").Address];
276
- };
277
- ReturnType: import("ox/_types/core/Hex").Hex;
278
- } | {
279
- Request: {
280
- method: "wallet_addEthereumChain";
281
- params: [chain: {
282
- chainId: string;
283
- chainName: string;
284
- nativeCurrency?: {
285
- name: string;
286
- symbol: string;
287
- decimals: number;
288
- } | undefined | undefined;
289
- rpcUrls: readonly string[];
290
- blockExplorerUrls?: readonly string[] | undefined;
291
- iconUrls?: readonly string[] | undefined;
292
- }];
293
- };
294
- ReturnType: null;
295
- } | {
296
- Request: {
297
- method: "wallet_getCallsStatus";
298
- params?: [string];
299
- };
300
- ReturnType: {
301
- status: "PENDING" | "CONFIRMED";
302
- receipts?: readonly {
303
- logs: {
304
- address: import("ox/_types/core/Hex").Hex;
305
- data: import("ox/_types/core/Hex").Hex;
306
- topics: readonly import("ox/_types/core/Hex").Hex[];
307
- }[];
308
- status: import("ox/_types/core/Hex").Hex;
309
- blockHash: import("ox/_types/core/Hex").Hex;
310
- blockNumber: import("ox/_types/core/Hex").Hex;
311
- gasUsed: import("ox/_types/core/Hex").Hex;
312
- transactionHash: import("ox/_types/core/Hex").Hex;
313
- }[] | undefined;
314
- };
315
- } | {
316
- Request: {
317
- method: "wallet_getCapabilities";
318
- params?: [import("ox/_types/core/Address").Address];
319
- };
320
- ReturnType: {
321
- [x: `0x${string}`]: {
322
- [capability: string]: any;
323
- };
324
- };
325
- } | {
326
- Request: {
327
- method: "wallet_getPermissions";
328
- params?: undefined;
329
- };
330
- ReturnType: readonly {
331
- caveats: readonly {
332
- type: string;
333
- value: any;
334
- }[];
335
- date: number;
336
- id: string;
337
- invoker: `http://${string}` | `https://${string}`;
338
- parentCapability: "eth_accounts" | string;
339
- }[];
340
- } | {
341
- Request: {
342
- method: "wallet_grantPermissions";
343
- params?: [{
344
- signer?: {
345
- type: string;
346
- data?: unknown | undefined;
347
- } | undefined;
348
- permissions: readonly {
349
- data: unknown;
350
- policies: readonly {
351
- data: unknown;
352
- type: string;
353
- }[];
354
- required?: boolean | undefined;
355
- type: string;
356
- }[];
357
- expiry: number;
358
- }];
359
- };
360
- ReturnType: {
361
- expiry: number;
362
- factory?: `0x${string}` | undefined | undefined;
363
- factoryData?: string | undefined | undefined;
364
- grantedPermissions: readonly {
365
- data: unknown;
366
- policies: readonly {
367
- data: unknown;
368
- type: string;
369
- }[];
370
- required?: boolean | undefined;
371
- type: string;
372
- }[];
373
- permissionsContext: string;
374
- signerData?: {
375
- userOpBuilder?: `0x${string}` | undefined;
376
- submitToAddress?: `0x${string}` | undefined;
377
- } | undefined | undefined;
378
- };
379
- } | {
380
- Request: {
381
- method: "wallet_requestPermissions";
382
- params: [permissions: {
383
- eth_accounts: Record<string, any>;
384
- }];
385
- };
386
- ReturnType: readonly {
387
- caveats: readonly {
388
- type: string;
389
- value: any;
390
- }[];
391
- date: number;
392
- id: string;
393
- invoker: `http://${string}` | `https://${string}`;
394
- parentCapability: "eth_accounts" | string;
395
- }[];
396
- } | {
397
- Request: {
398
- method: "wallet_revokePermissions";
399
- params: [permissions: {
400
- eth_accounts: Record<string, any>;
401
- }];
402
- };
403
- ReturnType: null;
404
- } | {
405
- Request: {
406
- method: "wallet_sendCalls";
407
- params: [{
408
- calls: readonly {
409
- to?: import("ox/_types/core/Address").Address | undefined;
410
- data?: import("ox/_types/core/Hex").Hex | undefined;
411
- value?: import("ox/_types/core/Hex").Hex | undefined;
412
- }[];
413
- capabilities?: {
414
- [capability: string]: any;
415
- } | undefined;
416
- chainId?: import("ox/_types/core/Hex").Hex | undefined;
417
- from: import("ox/_types/core/Address").Address;
418
- version: string;
419
- }];
420
- };
421
- ReturnType: string;
422
- } | {
423
- Request: {
424
- method: "wallet_showCallsStatus";
425
- params: [string];
426
- };
427
- ReturnType: undefined;
428
- } | {
429
- Request: {
430
- method: "wallet_switchEthereumChain";
431
- params: [chain: {
432
- chainId: string;
433
- }];
434
- };
435
- ReturnType: null;
436
- } | {
437
- Request: {
438
- method: "wallet_watchAsset";
439
- params: [{
440
- type: "ERC20";
441
- options: {
442
- address: string;
443
- symbol: string;
444
- decimals: number;
445
- image?: string | undefined;
446
- };
447
- }];
448
- };
449
- ReturnType: boolean;
450
- }>;
451
- on: import("ox/_types/core/Provider").EventListenerFn;
452
- removeListener: import("ox/_types/core/Provider").EventListenerFn;
453
- }, Record<string, unknown>, Record<string, unknown>>]>;
13
+ }>]>;
@@ -1,7 +1,6 @@
1
1
  import { ecosystemWalletId } from "../../../shared/constants/index.js";
2
2
  import { supportedChains } from "../../../shared/constants/chains/supported.js";
3
3
  import { client } from "../../../shared/utils/thirdweb.js";
4
- import { farcasterMiniApp as miniAppConnector } from "@farcaster/miniapp-wagmi-connector";
5
4
  import { inAppWalletConnector } from "@thirdweb-dev/wagmi-adapter";
6
5
  import { useMemo } from "react";
7
6
  import { http } from "viem";
@@ -31,7 +30,6 @@ export function useWagmiConfig(partnerId, rpcUrls) {
31
30
  ...ecocystemConfig,
32
31
  client,
33
32
  }),
34
- miniAppConnector(),
35
33
  // injected(),
36
34
  // coinbaseWallet({ appName: "HypeDuel" }),
37
35
  ],
@@ -1,16 +1,11 @@
1
1
  "use client";
2
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { cn } from "../../../shared/utils/index.js";
4
4
  import { Button } from "../../../global-account/react/components/ui/button.js";
5
5
  import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from "../../../global-account/react/components/ui/dropdown-menu.js";
6
- import { CURRENCY_NAMES, CURRENCY_SYMBOLS, useCurrencyStore, getCurrencyName, getCurrencySymbol, } from "../stores/currencyStore.js";
7
- const builtInCurrencies = ["B3", "ETH", "SOL", "USD", "EUR", "GBP", "KRW", "JPY", "CAD", "AUD"];
6
+ import { CURRENCY_NAMES, CURRENCY_SYMBOLS, useCurrencyStore } from "../stores/currencyStore.js";
7
+ const currencies = ["B3", "ETH", "SOL", "USD", "EUR", "GBP", "KRW", "JPY", "CAD", "AUD"];
8
8
  export function CurrencySelector({ labelClassName, buttonVariant = "dark", label }) {
9
- const selectedCurrency = useCurrencyStore(state => state.selectedCurrency);
10
- const setSelectedCurrency = useCurrencyStore(state => state.setSelectedCurrency);
11
- const customCurrencies = useCurrencyStore(state => state.customCurrencies);
12
- // Separate built-in and custom for better organization
13
- const customCurrencyCodes = Object.keys(customCurrencies);
14
- const hasCustomCurrencies = customCurrencyCodes.length > 0;
15
- return (_jsx("div", { className: "flex items-center gap-2", children: _jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs("div", { className: "flex items-center gap-3", children: [label && (_jsx("span", { className: cn("text-foreground text-sm font-medium leading-none tracking-tight sm:text-base", labelClassName), children: label })), _jsxs(Button, { variant: buttonVariant, className: "flex items-center gap-2", children: [_jsx("span", { className: "text-sm font-medium", children: getCurrencyName(selectedCurrency) }), _jsx("svg", { className: "h-4 w-4", fill: "currentColor", viewBox: "0 0 20 20", children: _jsx("path", { fillRule: "evenodd", d: "M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z", clipRule: "evenodd" }) })] })] }) }), _jsxs(DropdownMenuContent, { align: "end", className: "z-[100] min-w-[200px]", children: [builtInCurrencies.map(currency => (_jsxs("div", { children: [_jsxs(DropdownMenuItem, { onClick: () => setSelectedCurrency(currency), className: `flex cursor-pointer items-center justify-between gap-3 px-3 py-2.5 transition-colors ${selectedCurrency === currency ? "bg-accent" : "hover:bg-accent/50"}`, children: [_jsx("span", { className: "text-foreground text-sm font-medium", children: CURRENCY_NAMES[currency] }), _jsx("span", { className: "text-muted-foreground text-xs font-medium", children: CURRENCY_SYMBOLS[currency] })] }), currency === "SOL" && _jsx(DropdownMenuSeparator, { className: "bg-border my-1" }, "separator")] }, currency))), hasCustomCurrencies && (_jsxs(_Fragment, { children: [_jsx(DropdownMenuSeparator, { className: "bg-border my-1" }), customCurrencyCodes.map(currency => (_jsxs(DropdownMenuItem, { onClick: () => setSelectedCurrency(currency), className: `flex cursor-pointer items-center justify-between gap-3 px-3 py-2.5 transition-colors ${selectedCurrency === currency ? "bg-accent" : "hover:bg-accent/50"}`, children: [_jsx("span", { className: "text-foreground text-sm font-medium", children: getCurrencyName(currency) }), _jsx("span", { className: "text-muted-foreground text-xs font-medium", children: getCurrencySymbol(currency) })] }, currency)))] }))] })] }) }));
9
+ const { selectedCurrency, setSelectedCurrency } = useCurrencyStore();
10
+ return (_jsx("div", { className: "flex items-center gap-2", children: _jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs("div", { className: "flex items-center gap-3", children: [label && (_jsx("span", { className: cn("text-foreground text-sm font-medium leading-none tracking-tight sm:text-base", labelClassName), children: label })), _jsxs(Button, { variant: buttonVariant, className: "flex items-center gap-2", children: [_jsx("span", { className: "text-sm font-medium", children: CURRENCY_NAMES[selectedCurrency] }), _jsx("svg", { className: "h-4 w-4", fill: "currentColor", viewBox: "0 0 20 20", children: _jsx("path", { fillRule: "evenodd", d: "M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z", clipRule: "evenodd" }) })] })] }) }), _jsx(DropdownMenuContent, { align: "end", className: "z-[100] min-w-[200px]", children: currencies.map(currency => (_jsxs("div", { children: [_jsxs(DropdownMenuItem, { onClick: () => setSelectedCurrency(currency), className: `flex cursor-pointer items-center justify-between gap-3 px-3 py-2.5 transition-colors ${selectedCurrency === currency ? "bg-accent" : "hover:bg-accent/50"}`, children: [_jsx("span", { className: "text-foreground text-sm font-medium", children: CURRENCY_NAMES[currency] }), _jsx("span", { className: "text-muted-foreground text-xs font-medium", children: CURRENCY_SYMBOLS[currency] })] }), currency === "SOL" && _jsx(DropdownMenuSeparator, { className: "bg-border my-1" }, "separator")] }, currency))) })] }) }));
16
11
  }
@@ -1,12 +1,12 @@
1
1
  interface FormattedCurrencyProps {
2
- amount: string;
3
- sourceCurrency: string;
2
+ amount: number;
4
3
  showChange?: boolean;
5
4
  showColor?: boolean;
6
5
  className?: string;
7
6
  subB3Icon?: boolean;
8
7
  clickable?: boolean;
9
8
  decimals?: number;
9
+ currency?: string;
10
10
  }
11
- export declare function FormattedCurrency({ amount, sourceCurrency, showChange, showColor, className, subB3Icon, clickable, decimals, }: FormattedCurrencyProps): import("react/jsx-runtime").JSX.Element;
11
+ export declare function FormattedCurrency({ amount, showChange, showColor, className, subB3Icon, clickable, decimals, currency, }: FormattedCurrencyProps): import("react/jsx-runtime").JSX.Element;
12
12
  export {};
@@ -5,30 +5,21 @@ import { cn } from "../../../shared/utils/index.js";
5
5
  import { Tooltip, TooltipContent, TooltipTrigger } from "../../../global-account/react/components/ui/tooltip.js";
6
6
  import { useCurrencyConversion } from "../hooks/useCurrencyConversion.js";
7
7
  import { useCurrencyModalStore } from "../stores/currencyModalStore.js";
8
- import { getCurrencyDecimalPlaces } from "../stores/currencyStore.js";
9
- export function FormattedCurrency({ amount, sourceCurrency, showChange = false, showColor = false, className, subB3Icon = true, clickable = true, decimals, }) {
8
+ export function FormattedCurrency({ amount, showChange = false, showColor = false, className, subB3Icon = true, clickable = true, decimals, currency, }) {
10
9
  const { formatCurrencyValue, formatTooltipValue, selectedCurrency, baseCurrency } = useCurrencyConversion();
11
10
  const { openModal } = useCurrencyModalStore();
12
- // Convert from smallest unit to human-readable using currency's decimal places
13
- const decimalPlaces = getCurrencyDecimalPlaces(sourceCurrency);
14
- const divisor = Math.pow(10, decimalPlaces);
15
- // Parse amount - handle both string and numeric inputs, including negatives
16
- let parsedAmount;
17
- if (typeof amount === "string") {
18
- // Handle BigInt strings and negative values
19
- const numericAmount = amount.startsWith("-") ? -Math.abs(parseFloat(amount.replace("-", ""))) : parseFloat(amount);
20
- parsedAmount = numericAmount / divisor;
21
- }
22
- else {
23
- parsedAmount = amount / divisor;
24
- }
25
- const isPositive = parsedAmount >= 0;
26
- // Always format with absolute value, we'll add the sign separately
27
- const absoluteAmount = Math.abs(parsedAmount);
28
- // Format value with automatic conversion from source to display currency
29
- const formattedValue = formatCurrencyValue(absoluteAmount, sourceCurrency, { decimals });
11
+ // Use passed currency or fall back to selected currency
12
+ const activeCurrency = currency || selectedCurrency;
13
+ const isPositive = amount >= 0;
14
+ // Get the formatted value (using absolute value for negative numbers when showing change)
15
+ const baseAmount = showChange ? Math.abs(amount) : amount;
16
+ // Use centralized formatting from hook with optional overrides
17
+ const formattedValue = formatCurrencyValue(baseAmount, {
18
+ decimals,
19
+ currency,
20
+ });
30
21
  // Generate tooltip using the centralized hook function
31
- const baseTooltipValue = formatTooltipValue(parsedAmount, sourceCurrency);
22
+ const baseTooltipValue = formatTooltipValue(amount, currency);
32
23
  // Add change indicator if needed
33
24
  const tooltipValue = showChange ? `${isPositive ? "+" : "-"}${baseTooltipValue}` : baseTooltipValue;
34
25
  // Determine color class
@@ -41,22 +32,26 @@ export function FormattedCurrency({ amount, sourceCurrency, showChange = false,
41
32
  colorClass = "text-red-400";
42
33
  }
43
34
  }
44
- // Build display value with appropriate sign
35
+ // Add change indicator
45
36
  let displayValue = formattedValue;
46
37
  if (showChange) {
47
- // Add +/- prefix for change indicators
48
- displayValue = `${isPositive ? "+" : "-"}${formattedValue}`;
49
- }
50
- else if (!isPositive) {
51
- // Add minus sign for negative values
52
- displayValue = `-${formattedValue}`;
38
+ if (isPositive) {
39
+ displayValue = `+${formattedValue}`;
40
+ }
41
+ else {
42
+ displayValue = `-${formattedValue}`;
43
+ }
53
44
  }
54
45
  const handleClick = () => {
55
46
  if (clickable) {
56
47
  openModal();
57
48
  }
58
49
  };
59
- // Check if we should show B3 icon (when displaying in B3 and baseCurrency is B3)
60
- const shouldShowB3Icon = subB3Icon && selectedCurrency === "B3" && baseCurrency === "B3";
61
- return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("span", { onClick: handleClick, className: cn("inline-flex items-center gap-1 whitespace-nowrap", colorClass, className, clickable && "cursor-pointer transition-opacity hover:opacity-80"), children: [shouldShowB3Icon ? displayValue.split(" ")[0] : displayValue, shouldShowB3Icon && (_jsx("img", { src: B3_COIN_IMAGE_URL, className: "inline-block h-4 w-4 align-middle", alt: "B3 coin" }))] }) }), _jsx(TooltipContent, { children: tooltipValue })] }));
50
+ return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("span", { onClick: handleClick, className: cn("inline-flex items-center gap-1 whitespace-nowrap", colorClass, className, clickable && "cursor-pointer transition-opacity hover:opacity-80"), children: [subB3Icon &&
51
+ (currency === baseCurrency || (!currency && activeCurrency === baseCurrency)) &&
52
+ baseCurrency === "B3"
53
+ ? displayValue.split(" ")[0]
54
+ : displayValue, subB3Icon &&
55
+ (currency === baseCurrency || (!currency && activeCurrency === baseCurrency)) &&
56
+ baseCurrency === "B3" && (_jsx("img", { src: B3_COIN_IMAGE_URL, className: "inline-block h-4 w-4 align-middle", alt: "B3 coin" }))] }) }), _jsx(TooltipContent, { children: tooltipValue })] }));
62
57
  }
@@ -16,23 +16,20 @@
16
16
  */
17
17
  export declare function useCurrencyConversion(): {
18
18
  /** Currently selected display currency */
19
- selectedCurrency: string;
19
+ selectedCurrency: import("../stores/currencyStore").SupportedCurrency;
20
20
  /** Base currency used for conversion (typically B3) */
21
- baseCurrency: string;
21
+ baseCurrency: import("../stores/currencyStore").SupportedCurrency;
22
22
  /** Current exchange rate from base to selected currency (undefined while loading) */
23
23
  exchangeRate: number | undefined;
24
24
  /** Format a value with currency conversion and proper symbol/decimal handling */
25
- formatCurrencyValue: (value: number, sourceCurrency: string, options?: {
25
+ formatCurrencyValue: (value: number, options?: {
26
26
  decimals?: number;
27
+ currency?: string;
27
28
  }) => string;
28
29
  /** Format a tooltip value showing alternate currency representation */
29
- formatTooltipValue: (value: number, sourceCurrency: string) => string;
30
+ formatTooltipValue: (value: number, customCurrency?: string) => string;
30
31
  /** Symbol for the currently selected currency (e.g., "$", "€", "ETH") */
31
32
  selectedCurrencySymbol: string;
32
33
  /** Symbol for the base currency */
33
34
  baseCurrencySymbol: string;
34
- /** Get exchange rate between any two currencies */
35
- getExchangeRate: (from: string, to: string) => number | undefined;
36
- /** All registered custom currencies */
37
- customCurrencies: Record<string, import("../stores/currencyStore").CurrencyMetadata>;
38
35
  };