@aori/mega-swap-widget 0.1.0

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 (71) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +404 -0
  3. package/dist/AssetSelectionMenu-Y3EB32BT.cjs +13 -0
  4. package/dist/AssetSelectionMenu-Y3EB32BT.cjs.map +1 -0
  5. package/dist/AssetSelectionMenu-ZRG42UCZ.js +13 -0
  6. package/dist/AssetSelectionMenu-ZRG42UCZ.js.map +1 -0
  7. package/dist/ChainSelectionMenu-FBAPPFKI.cjs +11 -0
  8. package/dist/ChainSelectionMenu-FBAPPFKI.cjs.map +1 -0
  9. package/dist/ChainSelectionMenu-QO3H4TNR.js +11 -0
  10. package/dist/ChainSelectionMenu-QO3H4TNR.js.map +1 -0
  11. package/dist/SwapFormHorizontal-JDJUDFNX.js +573 -0
  12. package/dist/SwapFormHorizontal-JDJUDFNX.js.map +1 -0
  13. package/dist/SwapFormHorizontal-WG3Z3CFT.cjs +573 -0
  14. package/dist/SwapFormHorizontal-WG3Z3CFT.cjs.map +1 -0
  15. package/dist/SwapFormSplit-7CHTPLEQ.js +441 -0
  16. package/dist/SwapFormSplit-7CHTPLEQ.js.map +1 -0
  17. package/dist/SwapFormSplit-VDDIRQUQ.cjs +441 -0
  18. package/dist/SwapFormSplit-VDDIRQUQ.cjs.map +1 -0
  19. package/dist/WalletPlaceholderPanel-7YDQ4FT6.js +57 -0
  20. package/dist/WalletPlaceholderPanel-7YDQ4FT6.js.map +1 -0
  21. package/dist/WalletPlaceholderPanel-FZ6XIAMF.cjs +57 -0
  22. package/dist/WalletPlaceholderPanel-FZ6XIAMF.cjs.map +1 -0
  23. package/dist/WidgetWalletPanel-D7I5TAU3.js +789 -0
  24. package/dist/WidgetWalletPanel-D7I5TAU3.js.map +1 -0
  25. package/dist/WidgetWalletPanel-T7H6FGVN.cjs +789 -0
  26. package/dist/WidgetWalletPanel-T7H6FGVN.cjs.map +1 -0
  27. package/dist/chunk-3E6RNP2D.cjs +389 -0
  28. package/dist/chunk-3E6RNP2D.cjs.map +1 -0
  29. package/dist/chunk-5TH6MFQD.cjs +122 -0
  30. package/dist/chunk-5TH6MFQD.cjs.map +1 -0
  31. package/dist/chunk-5XSCUUOW.js +101 -0
  32. package/dist/chunk-5XSCUUOW.js.map +1 -0
  33. package/dist/chunk-6Q7MSCKS.js +2199 -0
  34. package/dist/chunk-6Q7MSCKS.js.map +1 -0
  35. package/dist/chunk-6XB5R4GF.cjs +368 -0
  36. package/dist/chunk-6XB5R4GF.cjs.map +1 -0
  37. package/dist/chunk-6YLNOZ7P.js +389 -0
  38. package/dist/chunk-6YLNOZ7P.js.map +1 -0
  39. package/dist/chunk-7AWG6OWF.js +27 -0
  40. package/dist/chunk-7AWG6OWF.js.map +1 -0
  41. package/dist/chunk-ARMW5POL.js +3082 -0
  42. package/dist/chunk-ARMW5POL.js.map +1 -0
  43. package/dist/chunk-B3ILUJ7G.cjs +101 -0
  44. package/dist/chunk-B3ILUJ7G.cjs.map +1 -0
  45. package/dist/chunk-GGM3MDFM.js +32 -0
  46. package/dist/chunk-GGM3MDFM.js.map +1 -0
  47. package/dist/chunk-GZUTUD5O.cjs +2199 -0
  48. package/dist/chunk-GZUTUD5O.cjs.map +1 -0
  49. package/dist/chunk-HXOGJSAI.cjs +3082 -0
  50. package/dist/chunk-HXOGJSAI.cjs.map +1 -0
  51. package/dist/chunk-LTA7IG3J.js +122 -0
  52. package/dist/chunk-LTA7IG3J.js.map +1 -0
  53. package/dist/chunk-NBJPKJBC.cjs +32 -0
  54. package/dist/chunk-NBJPKJBC.cjs.map +1 -0
  55. package/dist/chunk-PGYOJ5RB.cjs +27 -0
  56. package/dist/chunk-PGYOJ5RB.cjs.map +1 -0
  57. package/dist/chunk-QHW27RMH.js +199 -0
  58. package/dist/chunk-QHW27RMH.js.map +1 -0
  59. package/dist/chunk-TMC4SUEV.js +368 -0
  60. package/dist/chunk-TMC4SUEV.js.map +1 -0
  61. package/dist/chunk-XQINW7QP.cjs +199 -0
  62. package/dist/chunk-XQINW7QP.cjs.map +1 -0
  63. package/dist/index.cjs +1780 -0
  64. package/dist/index.cjs.map +1 -0
  65. package/dist/index.css +1424 -0
  66. package/dist/index.css.map +1 -0
  67. package/dist/index.d.cts +555 -0
  68. package/dist/index.d.ts +555 -0
  69. package/dist/index.js +1780 -0
  70. package/dist/index.js.map +1 -0
  71. package/package.json +82 -0
@@ -0,0 +1,573 @@
1
+ "use client";
2
+ "use client";
3
+ import {
4
+ QuoteLoader_default
5
+ } from "./chunk-QHW27RMH.js";
6
+ import {
7
+ AssetAmountInput_default,
8
+ AssetSelection_default,
9
+ RecipientForm_default,
10
+ SwapButton,
11
+ TxStatusDisplay_default,
12
+ useRfq,
13
+ useWalletModal
14
+ } from "./chunk-ARMW5POL.js";
15
+ import {
16
+ AssetSelectionMenu_default
17
+ } from "./chunk-6YLNOZ7P.js";
18
+ import {
19
+ ChainSelectionMenu_default
20
+ } from "./chunk-5XSCUUOW.js";
21
+ import "./chunk-LTA7IG3J.js";
22
+ import {
23
+ useSwapFormContext,
24
+ useWidgetSwapUIStore
25
+ } from "./chunk-TMC4SUEV.js";
26
+ import {
27
+ useWidgetConfig
28
+ } from "./chunk-6Q7MSCKS.js";
29
+ import {
30
+ useWalletState
31
+ } from "./chunk-7AWG6OWF.js";
32
+ import "./chunk-GGM3MDFM.js";
33
+
34
+ // src/components/SwapFormHorizontal.tsx
35
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
36
+ import { useShallow } from "zustand/react/shallow";
37
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
38
+ var NOOP = () => {
39
+ };
40
+ var SwapFormHorizontal = ({
41
+ onSwapComplete,
42
+ onSwapInitiated,
43
+ onBackToSwap,
44
+ onMoreChainsClick
45
+ }) => {
46
+ const {
47
+ web3ConnectionType,
48
+ hasConnectHandler,
49
+ lockBase,
50
+ lockQuote,
51
+ disableInverting,
52
+ swapButtonVariant,
53
+ tokenDisplay,
54
+ tokenBadgeOrientation,
55
+ widgetType,
56
+ assetMenuVariant
57
+ } = useWidgetConfig();
58
+ const isOverlayToken = tokenDisplay === "pill" || tokenDisplay === "ghost";
59
+ const isCompactMode = widgetType === "compact";
60
+ const {
61
+ baseToken,
62
+ quoteToken,
63
+ baseAmount,
64
+ quoteAmount,
65
+ isBaseGasToken,
66
+ isQuoteGasToken,
67
+ isWrappingPair,
68
+ isUnwrappingPair,
69
+ baseBalance,
70
+ quoteBalance,
71
+ setBaseAmount,
72
+ setQuoteAmount,
73
+ swapTokens,
74
+ clearForm
75
+ } = useSwapFormContext();
76
+ const {
77
+ rfqQuote,
78
+ status: rfqStatus,
79
+ handleInputChange,
80
+ ensureForParams,
81
+ stop,
82
+ clear,
83
+ refresh
84
+ } = useRfq();
85
+ const { address: userAddress } = useWalletState();
86
+ const { openConnectModal: openWalletModal } = useWalletModal();
87
+ const {
88
+ isRecipientInputOpen,
89
+ txStatus,
90
+ view,
91
+ selectedChainFilterChainId
92
+ } = useWidgetSwapUIStore(
93
+ useShallow((state) => ({
94
+ isRecipientInputOpen: state.isRecipientInputOpen,
95
+ txStatus: state.txStatus,
96
+ view: state.view,
97
+ selectedChainFilterChainId: state.selectedChainFilter?.chainId ?? null
98
+ }))
99
+ );
100
+ const [reviewState, setReviewState] = useState(null);
101
+ const [trackedOrderHash, setTrackedOrderHash] = useState(null);
102
+ const isHandlingStaleRestart = useRef(false);
103
+ const isPlacingOrder = false;
104
+ const reviewActionProps = useMemo(() => {
105
+ if (!baseToken || !quoteToken || typeof baseAmount !== "number" || !quoteAmount || !userAddress) return null;
106
+ if (parseFloat(baseBalance.formatted) < baseAmount) return null;
107
+ return { base: baseToken, quote: quoteToken, baseAmount, quoteAmount, userAddress };
108
+ }, [baseToken, quoteToken, baseAmount, quoteAmount, userAddress, baseBalance.formatted]);
109
+ const onOrderSubmitted = useCallback((orderHash) => {
110
+ setTrackedOrderHash(orderHash);
111
+ useWidgetSwapUIStore.getState().startTracking(orderHash);
112
+ }, []);
113
+ const onStaleQuoteRestart = useCallback(() => {
114
+ isHandlingStaleRestart.current = true;
115
+ refresh();
116
+ }, [refresh]);
117
+ useEffect(() => {
118
+ if (reviewState !== null) return;
119
+ if (!baseToken || !quoteToken) return;
120
+ if (!baseAmount || baseAmount <= 0) {
121
+ handleInputChange({ amount: null, inputToken: baseToken, outputToken: quoteToken, setOutputAmount: setQuoteAmount });
122
+ return;
123
+ }
124
+ if (isWrappingPair || isUnwrappingPair) {
125
+ setQuoteAmount(baseAmount);
126
+ return;
127
+ }
128
+ handleInputChange({
129
+ amount: baseAmount,
130
+ inputToken: baseToken,
131
+ outputToken: quoteToken,
132
+ setOutputAmount: setQuoteAmount
133
+ });
134
+ }, [
135
+ reviewState,
136
+ baseAmount,
137
+ baseToken,
138
+ quoteToken,
139
+ isWrappingPair,
140
+ isUnwrappingPair,
141
+ handleInputChange,
142
+ setQuoteAmount
143
+ ]);
144
+ const handleToggleBaseSelection = useCallback(() => {
145
+ useWidgetSwapUIStore.getState().setView("baseSelection");
146
+ }, []);
147
+ const handleToggleQuoteSelection = useCallback(() => {
148
+ useWidgetSwapUIStore.getState().setView("quoteSelection");
149
+ }, []);
150
+ const handleInvert = useCallback(() => {
151
+ swapTokens();
152
+ setQuoteAmount(null);
153
+ }, [swapTokens, setQuoteAmount]);
154
+ const handleMax = useCallback(() => {
155
+ if (!baseBalance.formatted || !baseToken || !quoteToken) return;
156
+ const balNum = parseFloat(baseBalance.formatted);
157
+ if (!balNum || balNum <= 0) return;
158
+ const adjusted = balNum * 0.9999999999;
159
+ if (isWrappingPair || isUnwrappingPair) {
160
+ setBaseAmount(adjusted);
161
+ setQuoteAmount(adjusted);
162
+ clear();
163
+ } else {
164
+ setBaseAmount(adjusted);
165
+ setQuoteAmount(null);
166
+ ensureForParams({
167
+ inputToken: baseToken,
168
+ outputToken: quoteToken,
169
+ inputAmount: adjusted.toString(),
170
+ setOutputAmount: (amount) => setQuoteAmount(amount)
171
+ });
172
+ }
173
+ }, [
174
+ baseBalance.formatted,
175
+ baseToken,
176
+ quoteToken,
177
+ isWrappingPair,
178
+ isUnwrappingPair,
179
+ setBaseAmount,
180
+ setQuoteAmount,
181
+ clear,
182
+ ensureForParams
183
+ ]);
184
+ const handleClear = useCallback(() => {
185
+ clear();
186
+ clearForm();
187
+ }, [clear, clearForm]);
188
+ const baseBalanceNum = baseBalance.formatted ? parseFloat(baseBalance.formatted) : null;
189
+ const hasAmount = !!(baseAmount || quoteAmount);
190
+ const isSplitMenuMode = assetMenuVariant === "split";
191
+ const isBaseSelecting = isSplitMenuMode && (view === "baseSelection" || view === "baseChainSelection");
192
+ const isQuoteSelecting = isSplitMenuMode && (view === "quoteSelection" || view === "quoteChainSelection");
193
+ const handleInlineChainSelect = useCallback((chainId) => {
194
+ const currentView = useWidgetSwapUIStore.getState().view;
195
+ const side = currentView === "baseChainSelection" ? "base" : "quote";
196
+ useWidgetSwapUIStore.getState().setChainFilter({ chainId, side });
197
+ useWidgetSwapUIStore.getState().pushRecentChain(chainId);
198
+ useWidgetSwapUIStore.getState().transitionToView(
199
+ side === "base" ? "baseSelection" : "quoteSelection",
200
+ "chainSelection"
201
+ );
202
+ }, []);
203
+ const handleInlineMoreChainsBase = useCallback(() => {
204
+ useWidgetSwapUIStore.getState().transitionToView("baseChainSelection", "chainSelection");
205
+ }, []);
206
+ const handleInlineMoreChainsQuote = useCallback(() => {
207
+ useWidgetSwapUIStore.getState().transitionToView("quoteChainSelection", "chainSelection");
208
+ }, []);
209
+ const baseUsd = baseToken?.price && baseAmount ? `$${(baseToken.price * baseAmount).toFixed(2)}` : "$0.00";
210
+ const quoteUsd = quoteToken?.price && quoteAmount ? `$${(quoteToken.price * quoteAmount).toFixed(2)}` : "$0.00";
211
+ const isShowingTxStatus = reviewState === "trackingTx" && !!trackedOrderHash && !!baseToken && !!quoteToken && !!baseAmount && !!quoteAmount;
212
+ const connectButtonStyle = {
213
+ backgroundColor: swapButtonVariant === "default" ? "var(--widget-primary)" : "transparent",
214
+ color: swapButtonVariant === "default" ? "var(--widget-primary-foreground)" : "var(--widget-primary)",
215
+ border: swapButtonVariant !== "default" ? "1px solid var(--widget-primary)" : "none",
216
+ borderRadius: "var(--widget-radius)"
217
+ };
218
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col w-full", children: [
219
+ isShowingTxStatus && trackedOrderHash && baseToken && quoteToken && baseAmount && quoteAmount ? /* @__PURE__ */ jsx("div", { className: "flex-1 min-h-0 overflow-hidden", children: /* @__PURE__ */ jsx(
220
+ TxStatusDisplay_default,
221
+ {
222
+ orderHash: trackedOrderHash,
223
+ base: baseToken,
224
+ quote: quoteToken,
225
+ baseAmount,
226
+ quoteAmount,
227
+ status: txStatus
228
+ }
229
+ ) }) : /* @__PURE__ */ jsxs(
230
+ "div",
231
+ {
232
+ className: `grid grid-cols-[1fr_auto_1fr] items-stretch px-4 ${isCompactMode ? "pt-3 pb-1" : "pt-4 pb-2"} gap-2`,
233
+ children: [
234
+ /* @__PURE__ */ jsx(
235
+ "div",
236
+ {
237
+ className: `relative flex flex-col gap-1 p-3 rounded-lg overflow-hidden ${isBaseSelecting ? "h-[380px]" : ""}`,
238
+ style: {
239
+ border: "1px solid var(--widget-border)",
240
+ backgroundColor: "var(--widget-card)"
241
+ },
242
+ children: isBaseSelecting ? view === "baseChainSelection" ? /* @__PURE__ */ jsx(
243
+ ChainSelectionMenu_default,
244
+ {
245
+ toggle: onBackToSwap ?? NOOP,
246
+ side: "base",
247
+ onChainSelect: handleInlineChainSelect
248
+ }
249
+ ) : /* @__PURE__ */ jsx(
250
+ AssetSelectionMenu_default,
251
+ {
252
+ toggle: onBackToSwap ?? NOOP,
253
+ side: "base",
254
+ otherAsset: quoteToken,
255
+ onMoreChainsClick: handleInlineMoreChainsBase,
256
+ selectedChainFilter: selectedChainFilterChainId
257
+ }
258
+ ) : /* @__PURE__ */ jsxs(Fragment, { children: [
259
+ isOverlayToken ? isCompactMode ? /* @__PURE__ */ jsxs(
260
+ "div",
261
+ {
262
+ className: `flex items-center gap-2 ${tokenBadgeOrientation === "right" ? "flex-row-reverse" : "flex-row"}`,
263
+ children: [
264
+ /* @__PURE__ */ jsx(
265
+ AssetSelection_default,
266
+ {
267
+ toggle: handleToggleBaseSelection,
268
+ side: "base",
269
+ asset: baseToken,
270
+ isPlacingOrder: isPlacingOrder || lockBase
271
+ }
272
+ ),
273
+ /* @__PURE__ */ jsx("div", { className: "flex-1 min-w-0", children: /* @__PURE__ */ jsx(
274
+ AssetAmountInput_default,
275
+ {
276
+ side: "base",
277
+ asset: baseToken ?? null,
278
+ otherAsset: quoteToken ?? null,
279
+ isPlacingOrder,
280
+ isWrappingPair,
281
+ isUnwrappingPair
282
+ }
283
+ ) })
284
+ ]
285
+ }
286
+ ) : /* @__PURE__ */ jsxs(
287
+ "div",
288
+ {
289
+ className: `flex flex-col ${tokenBadgeOrientation === "right" ? "items-end" : "items-start"}`,
290
+ children: [
291
+ /* @__PURE__ */ jsx(
292
+ AssetSelection_default,
293
+ {
294
+ toggle: handleToggleBaseSelection,
295
+ side: "base",
296
+ asset: baseToken,
297
+ isPlacingOrder: isPlacingOrder || lockBase
298
+ }
299
+ ),
300
+ /* @__PURE__ */ jsx(
301
+ AssetAmountInput_default,
302
+ {
303
+ side: "base",
304
+ asset: baseToken ?? null,
305
+ otherAsset: quoteToken ?? null,
306
+ isPlacingOrder,
307
+ isWrappingPair,
308
+ isUnwrappingPair
309
+ }
310
+ )
311
+ ]
312
+ }
313
+ ) : /* @__PURE__ */ jsxs(Fragment, { children: [
314
+ /* @__PURE__ */ jsx(
315
+ AssetSelection_default,
316
+ {
317
+ toggle: handleToggleBaseSelection,
318
+ side: "base",
319
+ asset: baseToken,
320
+ isPlacingOrder: isPlacingOrder || lockBase
321
+ }
322
+ ),
323
+ /* @__PURE__ */ jsx(
324
+ AssetAmountInput_default,
325
+ {
326
+ side: "base",
327
+ asset: baseToken ?? null,
328
+ otherAsset: quoteToken ?? null,
329
+ isPlacingOrder,
330
+ isWrappingPair,
331
+ isUnwrappingPair
332
+ }
333
+ )
334
+ ] }),
335
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
336
+ /* @__PURE__ */ jsx(
337
+ "span",
338
+ {
339
+ className: "mono text-xs",
340
+ style: { color: "var(--widget-muted-foreground)" },
341
+ children: baseUsd
342
+ }
343
+ ),
344
+ userAddress && baseBalanceNum !== null && baseBalanceNum > 0 && /* @__PURE__ */ jsx(
345
+ "button",
346
+ {
347
+ type: "button",
348
+ onClick: handleMax,
349
+ disabled: isPlacingOrder,
350
+ className: "flex items-center rounded-full px-2 py-0.5 text-xs font-medium uppercase cursor-pointer disabled:opacity-40 transition-colors bg-(--widget-primary) text-(--widget-primary-foreground) hover:bg-(--widget-foreground) hover:text-(--widget-card)",
351
+ children: "Max"
352
+ }
353
+ )
354
+ ] })
355
+ ] })
356
+ }
357
+ ),
358
+ /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center px-1", children: !disableInverting ? /* @__PURE__ */ jsx(
359
+ "button",
360
+ {
361
+ type: "button",
362
+ onClick: handleInvert,
363
+ "aria-label": "Swap input and output tokens",
364
+ className: "flex h-8 w-8 items-center justify-center rounded-full cursor-pointer transition-colors bg-(--widget-card) text-(--widget-muted-foreground) hover:bg-(--widget-secondary) hover:text-(--widget-foreground)",
365
+ style: { border: "1px solid var(--widget-border)" },
366
+ children: /* @__PURE__ */ jsx("span", { className: "text-2xs", children: "\u2194" })
367
+ }
368
+ ) : /* @__PURE__ */ jsx("div", { className: "flex h-8 w-8 items-center justify-center opacity-20", children: /* @__PURE__ */ jsx(
369
+ "span",
370
+ {
371
+ className: "text-sm",
372
+ style: { color: "var(--widget-muted-foreground)" },
373
+ children: "\u2192"
374
+ }
375
+ ) }) }),
376
+ /* @__PURE__ */ jsx(
377
+ "div",
378
+ {
379
+ className: `relative flex flex-col gap-1 p-3 rounded-lg overflow-hidden ${isQuoteSelecting ? "h-[380px]" : ""}`,
380
+ style: {
381
+ border: "1px solid var(--widget-border)",
382
+ backgroundColor: "var(--widget-card)"
383
+ },
384
+ children: isQuoteSelecting ? view === "quoteChainSelection" ? /* @__PURE__ */ jsx(
385
+ ChainSelectionMenu_default,
386
+ {
387
+ toggle: onBackToSwap ?? NOOP,
388
+ side: "quote",
389
+ onChainSelect: handleInlineChainSelect
390
+ }
391
+ ) : /* @__PURE__ */ jsx(
392
+ AssetSelectionMenu_default,
393
+ {
394
+ toggle: onBackToSwap ?? NOOP,
395
+ side: "quote",
396
+ otherAsset: baseToken,
397
+ onMoreChainsClick: handleInlineMoreChainsQuote,
398
+ selectedChainFilter: selectedChainFilterChainId
399
+ }
400
+ ) : /* @__PURE__ */ jsxs(Fragment, { children: [
401
+ isOverlayToken ? isCompactMode ? /* @__PURE__ */ jsxs(
402
+ "div",
403
+ {
404
+ className: `flex items-center gap-2 ${tokenBadgeOrientation === "right" ? "flex-row-reverse" : "flex-row"}`,
405
+ children: [
406
+ /* @__PURE__ */ jsx(
407
+ AssetSelection_default,
408
+ {
409
+ toggle: handleToggleQuoteSelection,
410
+ side: "quote",
411
+ asset: quoteToken,
412
+ isPlacingOrder: isPlacingOrder || lockQuote
413
+ }
414
+ ),
415
+ /* @__PURE__ */ jsx("div", { className: "flex-1 min-w-0", children: /* @__PURE__ */ jsx(
416
+ AssetAmountInput_default,
417
+ {
418
+ side: "quote",
419
+ asset: quoteToken ?? null,
420
+ otherAsset: baseToken ?? null,
421
+ isPlacingOrder,
422
+ isWrappingPair,
423
+ isUnwrappingPair
424
+ }
425
+ ) })
426
+ ]
427
+ }
428
+ ) : /* @__PURE__ */ jsxs(
429
+ "div",
430
+ {
431
+ className: `flex flex-col ${tokenBadgeOrientation === "right" ? "items-end" : "items-start"}`,
432
+ children: [
433
+ /* @__PURE__ */ jsx(
434
+ AssetSelection_default,
435
+ {
436
+ toggle: handleToggleQuoteSelection,
437
+ side: "quote",
438
+ asset: quoteToken,
439
+ isPlacingOrder: isPlacingOrder || lockQuote
440
+ }
441
+ ),
442
+ /* @__PURE__ */ jsx(
443
+ AssetAmountInput_default,
444
+ {
445
+ side: "quote",
446
+ asset: quoteToken ?? null,
447
+ otherAsset: baseToken ?? null,
448
+ isPlacingOrder,
449
+ isWrappingPair,
450
+ isUnwrappingPair
451
+ }
452
+ )
453
+ ]
454
+ }
455
+ ) : /* @__PURE__ */ jsxs(Fragment, { children: [
456
+ /* @__PURE__ */ jsx(
457
+ AssetSelection_default,
458
+ {
459
+ toggle: handleToggleQuoteSelection,
460
+ side: "quote",
461
+ asset: quoteToken,
462
+ isPlacingOrder: isPlacingOrder || lockQuote
463
+ }
464
+ ),
465
+ /* @__PURE__ */ jsx(
466
+ AssetAmountInput_default,
467
+ {
468
+ side: "quote",
469
+ asset: quoteToken ?? null,
470
+ otherAsset: baseToken ?? null,
471
+ isPlacingOrder,
472
+ isWrappingPair,
473
+ isUnwrappingPair
474
+ }
475
+ )
476
+ ] }),
477
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
478
+ /* @__PURE__ */ jsx(
479
+ "span",
480
+ {
481
+ className: "mono text-xs",
482
+ style: { color: "var(--widget-muted-foreground)" },
483
+ children: quoteUsd
484
+ }
485
+ ),
486
+ hasAmount && /* @__PURE__ */ jsx(
487
+ "button",
488
+ {
489
+ type: "button",
490
+ onClick: handleClear,
491
+ disabled: isPlacingOrder,
492
+ className: "flex items-center rounded-full px-2 py-0.5 text-xs font-medium uppercase cursor-pointer disabled:opacity-40 transition-colors text-(--widget-muted-foreground) hover:bg-(--widget-secondary)",
493
+ children: "Clear"
494
+ }
495
+ )
496
+ ] })
497
+ ] })
498
+ }
499
+ )
500
+ ]
501
+ }
502
+ ),
503
+ /* @__PURE__ */ jsx(
504
+ "div",
505
+ {
506
+ className: "flex flex-row items-center w-full overflow-hidden px-4",
507
+ style: {
508
+ borderTop: isRecipientInputOpen ? "1px solid var(--widget-border)" : "none",
509
+ maxHeight: isRecipientInputOpen ? "60px" : "0px",
510
+ opacity: isRecipientInputOpen ? 1 : 0,
511
+ transition: "max-height 0.3s ease, opacity 0.3s ease"
512
+ },
513
+ children: /* @__PURE__ */ jsx(RecipientForm_default, {})
514
+ }
515
+ ),
516
+ /* @__PURE__ */ jsx(
517
+ "div",
518
+ {
519
+ className: "px-4",
520
+ style: {
521
+ borderTop: "1px solid var(--widget-border)",
522
+ borderBottom: "1px solid var(--widget-border)"
523
+ },
524
+ children: /* @__PURE__ */ jsx(QuoteLoader_default, {})
525
+ }
526
+ ),
527
+ /* @__PURE__ */ jsx("div", { className: `relative ${isShowingTxStatus ? "px-0" : "px-4"} py-4`, children: userAddress && baseToken && quoteToken && baseAmount && baseAmount > 0 ? /* @__PURE__ */ jsx(
528
+ SwapButton,
529
+ {
530
+ base: baseToken,
531
+ baseAmount,
532
+ quote: quoteToken,
533
+ quoteAmount: quoteAmount ?? 0,
534
+ userAddress,
535
+ isWrappingPair,
536
+ isUnwrappingPair,
537
+ isBaseGasToken,
538
+ isQuoteGasToken,
539
+ reviewActionProps,
540
+ reviewState,
541
+ setReviewState,
542
+ trackedOrderHash,
543
+ setTrackedOrderHash,
544
+ onSwapComplete,
545
+ onSwapInitiated,
546
+ onOrderSubmitted,
547
+ onStaleQuoteRestart,
548
+ txStatus
549
+ }
550
+ ) : !userAddress && hasConnectHandler ? /* @__PURE__ */ jsx(
551
+ "button",
552
+ {
553
+ onClick: () => openWalletModal(),
554
+ className: "w-full py-3 text-sm font-medium cursor-pointer transition-opacity hover:opacity-80",
555
+ style: connectButtonStyle,
556
+ children: "Connect Wallet"
557
+ }
558
+ ) : /* @__PURE__ */ jsx(
559
+ "button",
560
+ {
561
+ disabled: true,
562
+ className: "w-full py-3 text-sm font-medium transition-colors disabled:opacity-40 cursor-not-allowed",
563
+ style: connectButtonStyle,
564
+ children: !userAddress ? "Connect Wallet" : "Enter Amount"
565
+ }
566
+ ) })
567
+ ] });
568
+ };
569
+ var SwapFormHorizontal_default = SwapFormHorizontal;
570
+ export {
571
+ SwapFormHorizontal_default as default
572
+ };
573
+ //# sourceMappingURL=SwapFormHorizontal-JDJUDFNX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/SwapFormHorizontal.tsx"],"sourcesContent":["'use client';\n\nimport { type Asset, type ReviewOrderStep, type SupportedChainId } from '../internal';\nimport { useWalletModal } from '../wallet/WalletModalContext';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { useShallow } from 'zustand/react/shallow';\nimport { useWidgetConfig } from '../context/WidgetConfigContext';\nimport { useRfq } from '../providers/RfqProvider';\nimport { useSwapFormContext } from '../providers/SwapFormProvider';\n\nimport { useWidgetSwapUIStore } from '../stores/swapUIStore';\nimport { useWalletState } from '../wallet/useWalletState';\nimport AssetAmountInput from './AssetAmountInput';\nimport AssetSelection from './AssetSelection';\nimport AssetSelectionMenu from './AssetSelectionMenu';\nimport ChainSelectionMenu from './ChainSelectionMenu';\nimport QuoteLoader from './QuoteLoader';\nimport RecipientForm from './RecipientForm';\nimport { SwapButton } from './states/SwapButton';\nimport TxStatusDisplay from './states/TxStatusDisplay';\n\nconst NOOP = () => {};\n\ninterface ReviewActionProps {\n base: Asset;\n quote: Asset;\n baseAmount: number;\n quoteAmount: number;\n userAddress: string;\n}\n\ninterface SwapFormHorizontalProps {\n onSwapComplete?: (orderHash: string) => void;\n onSwapInitiated?: () => void;\n onBackToSwap?: () => void;\n onMoreChainsClick?: () => void;\n}\n\nconst SwapFormHorizontal: React.FC<SwapFormHorizontalProps> = ({\n onSwapComplete,\n onSwapInitiated,\n onBackToSwap,\n onMoreChainsClick,\n}) => {\n const {\n web3ConnectionType,\n hasConnectHandler,\n lockBase,\n lockQuote,\n disableInverting,\n swapButtonVariant,\n tokenDisplay,\n tokenBadgeOrientation,\n widgetType,\n assetMenuVariant,\n } = useWidgetConfig();\n const isOverlayToken = tokenDisplay === 'pill' || tokenDisplay === 'ghost';\n const isCompactMode = widgetType === 'compact';\n const {\n baseToken,\n quoteToken,\n baseAmount,\n quoteAmount,\n isBaseGasToken,\n isQuoteGasToken,\n isWrappingPair,\n isUnwrappingPair,\n baseBalance,\n quoteBalance,\n setBaseAmount,\n setQuoteAmount,\n swapTokens,\n clearForm,\n } = useSwapFormContext();\n\n const {\n rfqQuote,\n status: rfqStatus,\n handleInputChange,\n ensureForParams,\n stop,\n clear,\n refresh,\n } = useRfq();\n const { address: userAddress } = useWalletState();\n const { openConnectModal: openWalletModal } = useWalletModal();\n const {\n isRecipientInputOpen,\n txStatus,\n view,\n selectedChainFilterChainId,\n } = useWidgetSwapUIStore(\n useShallow((state) => ({\n isRecipientInputOpen: state.isRecipientInputOpen,\n txStatus: state.txStatus,\n view: state.view,\n selectedChainFilterChainId: state.selectedChainFilter?.chainId ?? null,\n })),\n );\n\n const [reviewState, setReviewState] = useState<ReviewOrderStep | null>(null);\n const [trackedOrderHash, setTrackedOrderHash] = useState<string | null>(null);\n const isHandlingStaleRestart = useRef(false);\n const isPlacingOrder = false;\n\n const reviewActionProps = useMemo((): ReviewActionProps | null => {\n if (!baseToken || !quoteToken || typeof baseAmount !== 'number' || !quoteAmount || !userAddress) return null;\n if (parseFloat(baseBalance.formatted) < baseAmount) return null;\n return { base: baseToken, quote: quoteToken, baseAmount, quoteAmount, userAddress };\n }, [baseToken, quoteToken, baseAmount, quoteAmount, userAddress, baseBalance.formatted]);\n\n const onOrderSubmitted = useCallback((orderHash: string) => {\n setTrackedOrderHash(orderHash);\n useWidgetSwapUIStore.getState().startTracking(orderHash);\n }, []);\n\n const onStaleQuoteRestart = useCallback(() => {\n isHandlingStaleRestart.current = true;\n refresh();\n }, [refresh]);\n\n useEffect(() => {\n if (reviewState !== null) return;\n if (!baseToken || !quoteToken) return;\n if (!baseAmount || baseAmount <= 0) {\n handleInputChange({ amount: null, inputToken: baseToken, outputToken: quoteToken, setOutputAmount: setQuoteAmount });\n return;\n }\n if (isWrappingPair || isUnwrappingPair) {\n setQuoteAmount(baseAmount);\n return;\n }\n handleInputChange({\n amount: baseAmount,\n inputToken: baseToken,\n outputToken: quoteToken,\n setOutputAmount: setQuoteAmount,\n });\n }, [\n reviewState,\n baseAmount,\n baseToken,\n quoteToken,\n isWrappingPair,\n isUnwrappingPair,\n handleInputChange,\n setQuoteAmount,\n ]);\n\n const handleToggleBaseSelection = useCallback(() => {\n useWidgetSwapUIStore.getState().setView('baseSelection');\n }, []);\n\n const handleToggleQuoteSelection = useCallback(() => {\n useWidgetSwapUIStore.getState().setView('quoteSelection');\n }, []);\n\n const handleInvert = useCallback(() => {\n swapTokens();\n setQuoteAmount(null);\n }, [swapTokens, setQuoteAmount]);\n\n const handleMax = useCallback(() => {\n if (!baseBalance.formatted || !baseToken || !quoteToken) return;\n const balNum = parseFloat(baseBalance.formatted);\n if (!balNum || balNum <= 0) return;\n const adjusted = balNum * 0.9999999999;\n if (isWrappingPair || isUnwrappingPair) {\n setBaseAmount(adjusted);\n setQuoteAmount(adjusted);\n clear();\n } else {\n setBaseAmount(adjusted);\n setQuoteAmount(null);\n ensureForParams({\n inputToken: baseToken,\n outputToken: quoteToken,\n inputAmount: adjusted.toString(),\n setOutputAmount: (amount) => setQuoteAmount(amount),\n });\n }\n }, [\n baseBalance.formatted,\n baseToken,\n quoteToken,\n isWrappingPair,\n isUnwrappingPair,\n setBaseAmount,\n setQuoteAmount,\n clear,\n ensureForParams,\n ]);\n\n const handleClear = useCallback(() => {\n clear();\n clearForm();\n }, [clear, clearForm]);\n\n const baseBalanceNum = baseBalance.formatted\n ? parseFloat(baseBalance.formatted)\n : null;\n const hasAmount = !!(baseAmount || quoteAmount);\n\n // Inline selection (split assetMenuVariant): the respective column renders the menu\n const isSplitMenuMode = assetMenuVariant === 'split';\n const isBaseSelecting =\n isSplitMenuMode &&\n (view === 'baseSelection' || view === 'baseChainSelection');\n const isQuoteSelecting =\n isSplitMenuMode &&\n (view === 'quoteSelection' || view === 'quoteChainSelection');\n\n const handleInlineChainSelect = useCallback((chainId: SupportedChainId) => {\n const currentView = useWidgetSwapUIStore.getState().view;\n const side = currentView === 'baseChainSelection' ? 'base' : 'quote';\n useWidgetSwapUIStore.getState().setChainFilter({ chainId, side });\n useWidgetSwapUIStore.getState().pushRecentChain(chainId);\n useWidgetSwapUIStore\n .getState()\n .transitionToView(\n side === 'base' ? 'baseSelection' : 'quoteSelection',\n 'chainSelection',\n );\n }, []);\n\n const handleInlineMoreChainsBase = useCallback(() => {\n useWidgetSwapUIStore\n .getState()\n .transitionToView('baseChainSelection', 'chainSelection');\n }, []);\n\n const handleInlineMoreChainsQuote = useCallback(() => {\n useWidgetSwapUIStore\n .getState()\n .transitionToView('quoteChainSelection', 'chainSelection');\n }, []);\n\n const baseUsd =\n baseToken?.price && baseAmount\n ? `$${(baseToken.price * baseAmount).toFixed(2)}`\n : '$0.00';\n const quoteUsd =\n quoteToken?.price && quoteAmount\n ? `$${(quoteToken.price * quoteAmount).toFixed(2)}`\n : '$0.00';\n\n const isShowingTxStatus =\n reviewState === 'trackingTx' &&\n !!trackedOrderHash &&\n !!baseToken &&\n !!quoteToken &&\n !!baseAmount &&\n !!quoteAmount;\n\n const connectButtonStyle: React.CSSProperties = {\n backgroundColor:\n swapButtonVariant === 'default' ? 'var(--widget-primary)' : 'transparent',\n color:\n swapButtonVariant === 'default'\n ? 'var(--widget-primary-foreground)'\n : 'var(--widget-primary)',\n border:\n swapButtonVariant !== 'default'\n ? '1px solid var(--widget-primary)'\n : 'none',\n borderRadius: 'var(--widget-radius)',\n };\n\n return (\n <div className=\"flex flex-col w-full\">\n {/* ── TX STATUS or TWO-COLUMN TOKEN SECTIONS ─────────── */}\n {isShowingTxStatus &&\n trackedOrderHash &&\n baseToken &&\n quoteToken &&\n baseAmount &&\n quoteAmount ? (\n <div className=\"flex-1 min-h-0 overflow-hidden\">\n <TxStatusDisplay\n orderHash={trackedOrderHash}\n base={baseToken}\n quote={quoteToken}\n baseAmount={baseAmount}\n quoteAmount={quoteAmount}\n status={txStatus}\n />\n </div>\n ) : (\n <div\n className={`grid grid-cols-[1fr_auto_1fr] items-stretch px-4 ${isCompactMode ? 'pt-3 pb-1' : 'pt-4 pb-2'} gap-2`}\n >\n {/* BASE column */}\n <div\n className={`relative flex flex-col gap-1 p-3 rounded-lg overflow-hidden ${isBaseSelecting ? 'h-[380px]' : ''}`}\n style={{\n border: '1px solid var(--widget-border)',\n backgroundColor: 'var(--widget-card)',\n }}\n >\n {isBaseSelecting ? (\n view === 'baseChainSelection' ? (\n <ChainSelectionMenu\n toggle={onBackToSwap ?? NOOP}\n side=\"base\"\n onChainSelect={handleInlineChainSelect}\n />\n ) : (\n <AssetSelectionMenu\n toggle={onBackToSwap ?? NOOP}\n side=\"base\"\n otherAsset={quoteToken}\n onMoreChainsClick={handleInlineMoreChainsBase}\n selectedChainFilter={selectedChainFilterChainId}\n />\n )\n ) : (\n <>\n {isOverlayToken ? (\n isCompactMode ? (\n <div\n className={`flex items-center gap-2 ${tokenBadgeOrientation === 'right' ? 'flex-row-reverse' : 'flex-row'}`}\n >\n <AssetSelection\n toggle={handleToggleBaseSelection}\n side=\"base\"\n asset={baseToken}\n isPlacingOrder={isPlacingOrder || lockBase}\n />\n <div className=\"flex-1 min-w-0\">\n <AssetAmountInput\n side=\"base\"\n asset={baseToken ?? null}\n otherAsset={quoteToken ?? null}\n isPlacingOrder={isPlacingOrder}\n isWrappingPair={isWrappingPair}\n isUnwrappingPair={isUnwrappingPair}\n />\n </div>\n </div>\n ) : (\n <div\n className={`flex flex-col ${tokenBadgeOrientation === 'right' ? 'items-end' : 'items-start'}`}\n >\n <AssetSelection\n toggle={handleToggleBaseSelection}\n side=\"base\"\n asset={baseToken}\n isPlacingOrder={isPlacingOrder || lockBase}\n />\n <AssetAmountInput\n side=\"base\"\n asset={baseToken ?? null}\n otherAsset={quoteToken ?? null}\n isPlacingOrder={isPlacingOrder}\n isWrappingPair={isWrappingPair}\n isUnwrappingPair={isUnwrappingPair}\n />\n </div>\n )\n ) : (\n <>\n <AssetSelection\n toggle={handleToggleBaseSelection}\n side=\"base\"\n asset={baseToken}\n isPlacingOrder={isPlacingOrder || lockBase}\n />\n <AssetAmountInput\n side=\"base\"\n asset={baseToken ?? null}\n otherAsset={quoteToken ?? null}\n isPlacingOrder={isPlacingOrder}\n isWrappingPair={isWrappingPair}\n isUnwrappingPair={isUnwrappingPair}\n />\n </>\n )}\n <div className=\"flex items-center justify-between\">\n <span\n className=\"mono text-xs\"\n style={{ color: 'var(--widget-muted-foreground)' }}\n >\n {baseUsd}\n </span>\n {userAddress &&\n baseBalanceNum !== null &&\n baseBalanceNum > 0 && (\n <button\n type=\"button\"\n onClick={handleMax}\n disabled={isPlacingOrder}\n className=\"flex items-center rounded-full px-2 py-0.5 text-xs font-medium uppercase cursor-pointer disabled:opacity-40 transition-colors bg-(--widget-primary) text-(--widget-primary-foreground) hover:bg-(--widget-foreground) hover:text-(--widget-card)\"\n >\n Max\n </button>\n )}\n </div>\n </>\n )}\n </div>\n\n {/* Center invert button */}\n <div className=\"flex items-center justify-center px-1\">\n {!disableInverting ? (\n <button\n type=\"button\"\n onClick={handleInvert}\n aria-label=\"Swap input and output tokens\"\n className=\"flex h-8 w-8 items-center justify-center rounded-full cursor-pointer transition-colors bg-(--widget-card) text-(--widget-muted-foreground) hover:bg-(--widget-secondary) hover:text-(--widget-foreground)\"\n style={{ border: '1px solid var(--widget-border)' }}\n >\n <span className=\"text-2xs\">↔</span>\n </button>\n ) : (\n <div className=\"flex h-8 w-8 items-center justify-center opacity-20\">\n <span\n className=\"text-sm\"\n style={{ color: 'var(--widget-muted-foreground)' }}\n >\n →\n </span>\n </div>\n )}\n </div>\n\n {/* QUOTE column */}\n <div\n className={`relative flex flex-col gap-1 p-3 rounded-lg overflow-hidden ${isQuoteSelecting ? 'h-[380px]' : ''}`}\n style={{\n border: '1px solid var(--widget-border)',\n backgroundColor: 'var(--widget-card)',\n }}\n >\n {isQuoteSelecting ? (\n view === 'quoteChainSelection' ? (\n <ChainSelectionMenu\n toggle={onBackToSwap ?? NOOP}\n side=\"quote\"\n onChainSelect={handleInlineChainSelect}\n />\n ) : (\n <AssetSelectionMenu\n toggle={onBackToSwap ?? NOOP}\n side=\"quote\"\n otherAsset={baseToken}\n onMoreChainsClick={handleInlineMoreChainsQuote}\n selectedChainFilter={selectedChainFilterChainId}\n />\n )\n ) : (\n <>\n {isOverlayToken ? (\n isCompactMode ? (\n <div\n className={`flex items-center gap-2 ${tokenBadgeOrientation === 'right' ? 'flex-row-reverse' : 'flex-row'}`}\n >\n <AssetSelection\n toggle={handleToggleQuoteSelection}\n side=\"quote\"\n asset={quoteToken}\n isPlacingOrder={isPlacingOrder || lockQuote}\n />\n <div className=\"flex-1 min-w-0\">\n <AssetAmountInput\n side=\"quote\"\n asset={quoteToken ?? null}\n otherAsset={baseToken ?? null}\n isPlacingOrder={isPlacingOrder}\n isWrappingPair={isWrappingPair}\n isUnwrappingPair={isUnwrappingPair}\n />\n </div>\n </div>\n ) : (\n <div\n className={`flex flex-col ${tokenBadgeOrientation === 'right' ? 'items-end' : 'items-start'}`}\n >\n <AssetSelection\n toggle={handleToggleQuoteSelection}\n side=\"quote\"\n asset={quoteToken}\n isPlacingOrder={isPlacingOrder || lockQuote}\n />\n <AssetAmountInput\n side=\"quote\"\n asset={quoteToken ?? null}\n otherAsset={baseToken ?? null}\n isPlacingOrder={isPlacingOrder}\n isWrappingPair={isWrappingPair}\n isUnwrappingPair={isUnwrappingPair}\n />\n </div>\n )\n ) : (\n <>\n <AssetSelection\n toggle={handleToggleQuoteSelection}\n side=\"quote\"\n asset={quoteToken}\n isPlacingOrder={isPlacingOrder || lockQuote}\n />\n <AssetAmountInput\n side=\"quote\"\n asset={quoteToken ?? null}\n otherAsset={baseToken ?? null}\n isPlacingOrder={isPlacingOrder}\n isWrappingPair={isWrappingPair}\n isUnwrappingPair={isUnwrappingPair}\n />\n </>\n )}\n <div className=\"flex items-center justify-between\">\n <span\n className=\"mono text-xs\"\n style={{ color: 'var(--widget-muted-foreground)' }}\n >\n {quoteUsd}\n </span>\n {hasAmount && (\n <button\n type=\"button\"\n onClick={handleClear}\n disabled={isPlacingOrder}\n className=\"flex items-center rounded-full px-2 py-0.5 text-xs font-medium uppercase cursor-pointer disabled:opacity-40 transition-colors text-(--widget-muted-foreground) hover:bg-(--widget-secondary)\"\n >\n Clear\n </button>\n )}\n </div>\n </>\n )}\n </div>\n </div>\n )}\n\n {/* ── RECIPIENT FORM ─────────────────────────────────── */}\n <div\n className=\"flex flex-row items-center w-full overflow-hidden px-4\"\n style={{\n borderTop: isRecipientInputOpen\n ? '1px solid var(--widget-border)'\n : 'none',\n maxHeight: isRecipientInputOpen ? '60px' : '0px',\n opacity: isRecipientInputOpen ? 1 : 0,\n transition: 'max-height 0.3s ease, opacity 0.3s ease',\n }}\n >\n <RecipientForm />\n </div>\n\n {/* ── QUOTE LOADER ───────────────────────────────────── */}\n <div\n className=\"px-4\"\n style={{\n borderTop: '1px solid var(--widget-border)',\n borderBottom: '1px solid var(--widget-border)',\n }}\n >\n <QuoteLoader />\n </div>\n\n {/* ── SWAP / CONNECT BUTTON ──────────────────────────── */}\n <div className={`relative ${isShowingTxStatus ? 'px-0' : 'px-4'} py-4`}>\n {userAddress &&\n baseToken &&\n quoteToken &&\n baseAmount &&\n baseAmount > 0 ? (\n <SwapButton\n base={baseToken}\n baseAmount={baseAmount}\n quote={quoteToken}\n quoteAmount={quoteAmount ?? 0}\n userAddress={userAddress}\n isWrappingPair={isWrappingPair}\n isUnwrappingPair={isUnwrappingPair}\n isBaseGasToken={isBaseGasToken}\n isQuoteGasToken={isQuoteGasToken}\n reviewActionProps={reviewActionProps}\n reviewState={reviewState}\n setReviewState={setReviewState}\n trackedOrderHash={trackedOrderHash}\n setTrackedOrderHash={setTrackedOrderHash}\n onSwapComplete={onSwapComplete}\n onSwapInitiated={onSwapInitiated}\n onOrderSubmitted={onOrderSubmitted}\n onStaleQuoteRestart={onStaleQuoteRestart}\n txStatus={txStatus}\n />\n ) : !userAddress && hasConnectHandler ? (\n <button\n onClick={() => openWalletModal()}\n className=\"w-full py-3 text-sm font-medium cursor-pointer transition-opacity hover:opacity-80\"\n style={connectButtonStyle}\n >\n Connect Wallet\n </button>\n ) : (\n <button\n disabled\n className=\"w-full py-3 text-sm font-medium transition-colors disabled:opacity-40 cursor-not-allowed\"\n style={connectButtonStyle}\n >\n {!userAddress ? 'Connect Wallet' : 'Enter Amount'}\n </button>\n )}\n </div>\n </div>\n );\n};\n\nexport default SwapFormHorizontal;\n"],"mappings":"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","names":[]}