@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,441 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }"use client";
2
+ "use client";
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+ var _chunkHXOGJSAIcjs = require('./chunk-HXOGJSAI.cjs');
12
+
13
+
14
+ var _chunk3E6RNP2Dcjs = require('./chunk-3E6RNP2D.cjs');
15
+
16
+
17
+ var _chunkB3ILUJ7Gcjs = require('./chunk-B3ILUJ7G.cjs');
18
+ require('./chunk-5TH6MFQD.cjs');
19
+
20
+
21
+
22
+ var _chunk6XB5R4GFcjs = require('./chunk-6XB5R4GF.cjs');
23
+
24
+
25
+
26
+
27
+ var _chunkGZUTUD5Ocjs = require('./chunk-GZUTUD5O.cjs');
28
+
29
+
30
+ var _chunkPGYOJ5RBcjs = require('./chunk-PGYOJ5RB.cjs');
31
+ require('./chunk-NBJPKJBC.cjs');
32
+
33
+ // src/components/SwapFormSplit.tsx
34
+ var _react = require('react');
35
+ var _shallow = require('zustand/react/shallow');
36
+ var _jsxruntime = require('react/jsx-runtime');
37
+ var NOOP = () => {
38
+ };
39
+ var SwapFormSplit = ({ onSwapComplete, onSwapInitiated, onBackToSwap, onMoreChainsClick }) => {
40
+ const { web3ConnectionType, hasConnectHandler, lockBase, lockQuote, disableInverting, swapButtonVariant, tokenDisplay, tokenBadgeOrientation, widgetType, assetMenuVariant } = _chunkGZUTUD5Ocjs.useWidgetConfig.call(void 0, );
41
+ const isOverlayToken = tokenDisplay === "pill" || tokenDisplay === "ghost";
42
+ const isCompactMode = widgetType === "compact";
43
+ const {
44
+ baseToken,
45
+ quoteToken,
46
+ baseAmount,
47
+ quoteAmount,
48
+ isBaseGasToken,
49
+ isQuoteGasToken,
50
+ isWrappingPair,
51
+ isUnwrappingPair,
52
+ baseBalance,
53
+ setBaseAmount,
54
+ setQuoteAmount,
55
+ swapTokens,
56
+ clearForm
57
+ } = _chunk6XB5R4GFcjs.useSwapFormContext.call(void 0, );
58
+ const {
59
+ handleInputChange,
60
+ ensureForParams,
61
+ clear,
62
+ refresh,
63
+ liquidityError,
64
+ routingError
65
+ } = _chunkHXOGJSAIcjs.useRfq.call(void 0, );
66
+ const { address: userAddress } = _chunkPGYOJ5RBcjs.useWalletState.call(void 0, );
67
+ const { openConnectModal: openWalletModal } = _chunkHXOGJSAIcjs.useWalletModal.call(void 0, );
68
+ const { isRecipientInputOpen, txStatus, view, selectedChainFilterChainId } = _chunk6XB5R4GFcjs.useWidgetSwapUIStore.call(void 0,
69
+ _shallow.useShallow.call(void 0, (state) => ({
70
+ isRecipientInputOpen: state.isRecipientInputOpen,
71
+ txStatus: state.txStatus,
72
+ view: state.view,
73
+ selectedChainFilterChainId: _nullishCoalesce(state.selectedChainFilterChainId, () => ( null))
74
+ }))
75
+ );
76
+ const [reviewState, setReviewState] = _react.useState.call(void 0, null);
77
+ const [trackedOrderHash, setTrackedOrderHash] = _react.useState.call(void 0, null);
78
+ const isHandlingStaleRestart = _react.useRef.call(void 0, false);
79
+ const isPlacingOrder = false;
80
+ const reviewActionProps = _react.useMemo.call(void 0, () => {
81
+ if (!baseToken || !quoteToken || typeof baseAmount !== "number" || !quoteAmount || !userAddress) return null;
82
+ if (parseFloat(baseBalance.formatted) < baseAmount) return null;
83
+ return { base: baseToken, quote: quoteToken, baseAmount, quoteAmount, userAddress };
84
+ }, [baseToken, quoteToken, baseAmount, quoteAmount, userAddress, baseBalance.formatted]);
85
+ const onOrderSubmitted = _react.useCallback.call(void 0, (orderHash) => {
86
+ setTrackedOrderHash(orderHash);
87
+ _chunk6XB5R4GFcjs.useWidgetSwapUIStore.getState().startTracking(orderHash);
88
+ }, []);
89
+ const onStaleQuoteRestart = _react.useCallback.call(void 0, () => {
90
+ isHandlingStaleRestart.current = true;
91
+ refresh();
92
+ }, [refresh]);
93
+ _react.useEffect.call(void 0, () => {
94
+ if (reviewState !== null) return;
95
+ if (!baseToken || !quoteToken) return;
96
+ if (!baseAmount || baseAmount <= 0) {
97
+ handleInputChange({ amount: null, inputToken: baseToken, outputToken: quoteToken, setOutputAmount: setQuoteAmount });
98
+ return;
99
+ }
100
+ if (isWrappingPair || isUnwrappingPair) {
101
+ setQuoteAmount(baseAmount);
102
+ return;
103
+ }
104
+ handleInputChange({
105
+ amount: baseAmount,
106
+ inputToken: baseToken,
107
+ outputToken: quoteToken,
108
+ setOutputAmount: setQuoteAmount
109
+ });
110
+ }, [reviewState, baseAmount, baseToken, quoteToken, isWrappingPair, isUnwrappingPair, handleInputChange, setQuoteAmount]);
111
+ const exchangeRate = baseAmount && quoteAmount && parseFloat(quoteAmount.toString()) ? parseFloat(baseAmount.toString()) / parseFloat(quoteAmount.toString()) : 0;
112
+ const handleToggleBaseSelection = _react.useCallback.call(void 0, () => {
113
+ _chunk6XB5R4GFcjs.useWidgetSwapUIStore.getState().setView("baseSelection");
114
+ }, []);
115
+ const handleToggleQuoteSelection = _react.useCallback.call(void 0, () => {
116
+ _chunk6XB5R4GFcjs.useWidgetSwapUIStore.getState().setView("quoteSelection");
117
+ }, []);
118
+ const handleInvert = _react.useCallback.call(void 0, () => {
119
+ swapTokens();
120
+ setQuoteAmount(null);
121
+ }, [swapTokens, setQuoteAmount]);
122
+ const handleMax = _react.useCallback.call(void 0, () => {
123
+ if (!baseBalance.formatted || !baseToken || !quoteToken) return;
124
+ const balNum = parseFloat(baseBalance.formatted);
125
+ if (!balNum || balNum <= 0) return;
126
+ const adjusted = balNum * 0.9999999999;
127
+ if (isWrappingPair || isUnwrappingPair) {
128
+ setBaseAmount(adjusted);
129
+ setQuoteAmount(adjusted);
130
+ clear();
131
+ } else {
132
+ setBaseAmount(adjusted);
133
+ setQuoteAmount(null);
134
+ ensureForParams({
135
+ inputToken: baseToken,
136
+ outputToken: quoteToken,
137
+ inputAmount: adjusted.toString(),
138
+ setOutputAmount: (amount) => setQuoteAmount(amount)
139
+ });
140
+ }
141
+ }, [baseBalance.formatted, baseToken, quoteToken, isWrappingPair, isUnwrappingPair, setBaseAmount, setQuoteAmount, clear, ensureForParams]);
142
+ const handleClear = _react.useCallback.call(void 0, () => {
143
+ clear();
144
+ clearForm();
145
+ }, [clear, clearForm]);
146
+ const baseBalanceNum = baseBalance.formatted ? parseFloat(baseBalance.formatted) : null;
147
+ const hasAmount = !!(baseAmount || quoteAmount);
148
+ const base = baseToken;
149
+ const quote = quoteToken;
150
+ const baseUsd = _optionalChain([base, 'optionalAccess', _2 => _2.price]) && baseAmount ? `$${(base.price * baseAmount).toFixed(2)}` : "$0.00";
151
+ const quoteUsd = _optionalChain([quote, 'optionalAccess', _3 => _3.price]) && quoteAmount ? `$${(quote.price * quoteAmount).toFixed(2)}` : "$0.00";
152
+ const hasValidQuote = !!(base && quote && baseAmount && quoteAmount);
153
+ const hasQuoteError = liquidityError || routingError;
154
+ const isShowingTxStatus = reviewState === "trackingTx" && !!trackedOrderHash && !!base && !!quote && !!baseAmount && !!quoteAmount;
155
+ const isSplitMenuMode = assetMenuVariant === "split";
156
+ const isSelecting = isSplitMenuMode && (view === "baseSelection" || view === "quoteSelection" || view === "baseChainSelection" || view === "quoteChainSelection");
157
+ const menuSide = view === "baseSelection" || view === "baseChainSelection" ? "base" : "quote";
158
+ const menuOtherAsset = menuSide === "base" ? quote : base;
159
+ const leftColRef = _react.useRef.call(void 0, null);
160
+ const [leftColHeight, setLeftColHeight] = _react.useState.call(void 0, 380);
161
+ _react.useEffect.call(void 0, () => {
162
+ if (!isSplitMenuMode) return;
163
+ const el = leftColRef.current;
164
+ if (!el) return;
165
+ const observer = new ResizeObserver((entries) => {
166
+ for (const entry of entries) {
167
+ setLeftColHeight(entry.contentRect.height);
168
+ }
169
+ });
170
+ observer.observe(el);
171
+ return () => observer.disconnect();
172
+ }, [isSplitMenuMode]);
173
+ const handleInlineChainSelect = _react.useCallback.call(void 0, (chainId) => {
174
+ const currentView = _chunk6XB5R4GFcjs.useWidgetSwapUIStore.getState().view;
175
+ const side = currentView === "baseChainSelection" ? "base" : "quote";
176
+ _chunk6XB5R4GFcjs.useWidgetSwapUIStore.getState().setChainFilter({ chainId, side });
177
+ _chunk6XB5R4GFcjs.useWidgetSwapUIStore.getState().pushRecentChain(chainId);
178
+ _chunk6XB5R4GFcjs.useWidgetSwapUIStore.getState().transitionToView(
179
+ side === "base" ? "baseSelection" : "quoteSelection",
180
+ "chainSelection"
181
+ );
182
+ }, []);
183
+ const handleInlineMoreChains = _react.useCallback.call(void 0, () => {
184
+ const currentView = _chunk6XB5R4GFcjs.useWidgetSwapUIStore.getState().view;
185
+ if (currentView === "baseSelection") {
186
+ _chunk6XB5R4GFcjs.useWidgetSwapUIStore.getState().transitionToView("baseChainSelection", "chainSelection");
187
+ } else if (currentView === "quoteSelection") {
188
+ _chunk6XB5R4GFcjs.useWidgetSwapUIStore.getState().transitionToView("quoteChainSelection", "chainSelection");
189
+ }
190
+ }, []);
191
+ const connectButtonStyle = {
192
+ backgroundColor: swapButtonVariant === "default" ? "var(--widget-primary)" : "transparent",
193
+ color: swapButtonVariant === "default" ? "var(--widget-primary-foreground)" : "var(--widget-primary)",
194
+ border: swapButtonVariant !== "default" ? "1px solid var(--widget-primary)" : "none",
195
+ borderRadius: "var(--widget-radius)"
196
+ };
197
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-row w-full", children: [
198
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
199
+ "div",
200
+ {
201
+ ref: leftColRef,
202
+ className: "flex flex-col flex-1 min-w-0",
203
+ style: { borderRight: "1px solid var(--widget-border)" },
204
+ children: [
205
+ isShowingTxStatus && trackedOrderHash && base && quote && baseAmount && quoteAmount ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex-1 min-h-0 overflow-hidden", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
206
+ _chunkHXOGJSAIcjs.TxStatusDisplay_default,
207
+ {
208
+ orderHash: trackedOrderHash,
209
+ base,
210
+ quote,
211
+ baseAmount,
212
+ quoteAmount,
213
+ status: txStatus
214
+ }
215
+ ) }) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
216
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
217
+ "div",
218
+ {
219
+ className: `relative ${isCompactMode ? "px-4 pt-3 pb-1" : "px-4 pt-4 pb-2"}`,
220
+ style: { borderBottom: "1px solid var(--widget-border)" },
221
+ children: [
222
+ isOverlayToken ? isCompactMode ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: `flex items-center gap-2 ${tokenBadgeOrientation === "right" ? "flex-row-reverse" : "flex-row"}`, children: [
223
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHXOGJSAIcjs.AssetSelection_default, { toggle: handleToggleBaseSelection, side: "base", asset: base, isPlacingOrder: isPlacingOrder || lockBase }),
224
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex-1 min-w-0", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHXOGJSAIcjs.AssetAmountInput_default, { side: "base", asset: _nullishCoalesce(base, () => ( null)), otherAsset: _nullishCoalesce(quote, () => ( null)), isPlacingOrder, isWrappingPair, isUnwrappingPair }) })
225
+ ] }) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: `flex flex-col ${tokenBadgeOrientation === "right" ? "items-end" : "items-start"}`, children: [
226
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHXOGJSAIcjs.AssetSelection_default, { toggle: handleToggleBaseSelection, side: "base", asset: base, isPlacingOrder: isPlacingOrder || lockBase }),
227
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHXOGJSAIcjs.AssetAmountInput_default, { side: "base", asset: _nullishCoalesce(base, () => ( null)), otherAsset: _nullishCoalesce(quote, () => ( null)), isPlacingOrder, isWrappingPair, isUnwrappingPair })
228
+ ] }) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
229
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHXOGJSAIcjs.AssetSelection_default, { toggle: handleToggleBaseSelection, side: "base", asset: base, isPlacingOrder: isPlacingOrder || lockBase }),
230
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHXOGJSAIcjs.AssetAmountInput_default, { side: "base", asset: _nullishCoalesce(base, () => ( null)), otherAsset: _nullishCoalesce(quote, () => ( null)), isPlacingOrder, isWrappingPair, isUnwrappingPair })
231
+ ] }),
232
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mb-1 flex w-full flex-row items-center justify-between", children: [
233
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "mono text-sm", style: { color: "var(--widget-muted-foreground)" }, children: baseUsd }),
234
+ userAddress && baseBalanceNum !== null && baseBalanceNum > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
235
+ "button",
236
+ {
237
+ type: "button",
238
+ onClick: handleMax,
239
+ disabled: isPlacingOrder,
240
+ className: "absolute bottom-3 right-4 flex items-center rounded-full px-3 py-0.5 text-xs font-medium uppercase cursor-pointer disabled:opacity-40 bg-(--widget-primary) text-(--widget-primary-foreground) hover:bg-(--widget-foreground) hover:text-(--widget-card) transition-colors",
241
+ children: "Max"
242
+ }
243
+ )
244
+ ] })
245
+ ]
246
+ }
247
+ ),
248
+ !disableInverting && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex justify-center -my-4 relative z-10", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
249
+ "button",
250
+ {
251
+ type: "button",
252
+ onClick: handleInvert,
253
+ "aria-label": "Swap input and output tokens",
254
+ className: "flex h-8 w-8 items-center justify-center rounded-full cursor-pointer bg-(--widget-card) text-(--widget-muted-foreground) hover:bg-(--widget-secondary) hover:text-(--widget-foreground) transition-colors",
255
+ style: { border: "1px solid var(--widget-border)" },
256
+ children: [
257
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-2xs", children: "\u2191" }),
258
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-2xs", children: "\u2193" })
259
+ ]
260
+ }
261
+ ) }),
262
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: `relative ${isCompactMode ? "px-4 pt-4 pb-1" : "px-4 pt-6 pb-2"}`, children: [
263
+ isOverlayToken ? isCompactMode ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: `flex items-center gap-2 ${tokenBadgeOrientation === "right" ? "flex-row-reverse" : "flex-row"}`, children: [
264
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHXOGJSAIcjs.AssetSelection_default, { toggle: handleToggleQuoteSelection, side: "quote", asset: quote, isPlacingOrder: isPlacingOrder || lockQuote }),
265
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex-1 min-w-0", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHXOGJSAIcjs.AssetAmountInput_default, { side: "quote", asset: _nullishCoalesce(quote, () => ( null)), otherAsset: _nullishCoalesce(base, () => ( null)), isPlacingOrder, isWrappingPair, isUnwrappingPair }) })
266
+ ] }) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: `flex flex-col ${tokenBadgeOrientation === "right" ? "items-end" : "items-start"}`, children: [
267
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHXOGJSAIcjs.AssetSelection_default, { toggle: handleToggleQuoteSelection, side: "quote", asset: quote, isPlacingOrder: isPlacingOrder || lockQuote }),
268
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHXOGJSAIcjs.AssetAmountInput_default, { side: "quote", asset: _nullishCoalesce(quote, () => ( null)), otherAsset: _nullishCoalesce(base, () => ( null)), isPlacingOrder, isWrappingPair, isUnwrappingPair })
269
+ ] }) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
270
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHXOGJSAIcjs.AssetSelection_default, { toggle: handleToggleQuoteSelection, side: "quote", asset: quote, isPlacingOrder: isPlacingOrder || lockQuote }),
271
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHXOGJSAIcjs.AssetAmountInput_default, { side: "quote", asset: _nullishCoalesce(quote, () => ( null)), otherAsset: _nullishCoalesce(base, () => ( null)), isPlacingOrder, isWrappingPair, isUnwrappingPair })
272
+ ] }),
273
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-row items-center justify-between", children: [
274
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "mono text-sm", style: { color: "var(--widget-muted-foreground)" }, children: quoteUsd }),
275
+ hasAmount && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
276
+ "button",
277
+ {
278
+ type: "button",
279
+ onClick: handleClear,
280
+ disabled: isPlacingOrder,
281
+ className: "absolute bottom-2 right-4 flex items-center rounded-full px-3 py-0.5 text-xs font-medium uppercase cursor-pointer disabled:opacity-40 text-(--widget-muted-foreground) hover:bg-(--widget-secondary) transition-colors",
282
+ children: "Clear"
283
+ }
284
+ )
285
+ ] })
286
+ ] })
287
+ ] }),
288
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
289
+ "div",
290
+ {
291
+ className: "flex flex-row items-center w-full overflow-hidden",
292
+ style: {
293
+ borderTop: isRecipientInputOpen ? "1px solid var(--widget-border)" : "none",
294
+ maxHeight: isRecipientInputOpen ? "60px" : "0px",
295
+ opacity: isRecipientInputOpen ? 1 : 0,
296
+ transition: "max-height 0.3s ease, opacity 0.3s ease"
297
+ },
298
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHXOGJSAIcjs.RecipientForm_default, {})
299
+ }
300
+ ),
301
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: `relative ${isShowingTxStatus ? "px-0" : "px-4"} py-4`, children: userAddress && base && quote && baseAmount && baseAmount > 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
302
+ _chunkHXOGJSAIcjs.SwapButton,
303
+ {
304
+ base,
305
+ baseAmount,
306
+ quote,
307
+ quoteAmount: _nullishCoalesce(quoteAmount, () => ( 0)),
308
+ userAddress,
309
+ isWrappingPair,
310
+ isUnwrappingPair,
311
+ isBaseGasToken,
312
+ isQuoteGasToken,
313
+ reviewActionProps,
314
+ reviewState,
315
+ setReviewState,
316
+ trackedOrderHash,
317
+ setTrackedOrderHash,
318
+ onSwapComplete,
319
+ onSwapInitiated,
320
+ onOrderSubmitted,
321
+ onStaleQuoteRestart,
322
+ txStatus
323
+ }
324
+ ) : !userAddress && hasConnectHandler ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
325
+ "button",
326
+ {
327
+ onClick: () => openWalletModal(),
328
+ className: "w-full py-3 text-sm font-medium cursor-pointer transition-opacity hover:opacity-80",
329
+ style: connectButtonStyle,
330
+ children: "Connect Wallet"
331
+ }
332
+ ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
333
+ "button",
334
+ {
335
+ disabled: true,
336
+ className: "w-full py-3 text-sm font-medium transition-colors disabled:opacity-40 cursor-not-allowed",
337
+ style: connectButtonStyle,
338
+ children: !userAddress ? "Connect Wallet" : "Enter Amount"
339
+ }
340
+ ) })
341
+ ]
342
+ }
343
+ ),
344
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
345
+ "div",
346
+ {
347
+ className: `flex flex-col transition-all duration-300 ${isSelecting ? "flex-1 min-w-0" : "w-48 shrink-0"}`,
348
+ style: { backgroundColor: "var(--widget-background)", ...isSelecting ? { height: `${leftColHeight}px` } : {} },
349
+ children: isSelecting ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-col overflow-hidden p-2", style: { height: "100%" }, children: view === "baseChainSelection" || view === "quoteChainSelection" ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
350
+ _chunkB3ILUJ7Gcjs.ChainSelectionMenu_default,
351
+ {
352
+ toggle: _nullishCoalesce(onBackToSwap, () => ( NOOP)),
353
+ side: menuSide,
354
+ onChainSelect: handleInlineChainSelect
355
+ }
356
+ ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
357
+ _chunk3E6RNP2Dcjs.AssetSelectionMenu_default,
358
+ {
359
+ toggle: _nullishCoalesce(onBackToSwap, () => ( NOOP)),
360
+ side: menuSide,
361
+ otherAsset: menuOtherAsset,
362
+ onMoreChainsClick: handleInlineMoreChains,
363
+ selectedChainFilter: selectedChainFilterChainId
364
+ }
365
+ ) }) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-3 px-4 py-4", children: [
366
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
367
+ "span",
368
+ {
369
+ className: "text-2xs uppercase tracking-wider font-medium",
370
+ style: { color: "var(--widget-muted-foreground)" },
371
+ children: "Quote Details"
372
+ }
373
+ ),
374
+ hasValidQuote && base && quote ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
375
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-0.5", children: [
376
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-2xs", style: { color: "var(--widget-muted-foreground)" }, children: "Rate" }),
377
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-1", children: [
378
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGZUTUD5Ocjs.TokenImage_default, { asset: quote, size: "3xs", noChain: true }),
379
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "font-mono text-xs uppercase", children: [
380
+ "1 ",
381
+ quote.symbol
382
+ ] })
383
+ ] }),
384
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex items-center gap-1 pl-4", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "text-2xs", style: { color: "var(--widget-muted-foreground)" }, children: [
385
+ "= ",
386
+ exchangeRate.toFixed(6)
387
+ ] }) }),
388
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-1 pl-4", children: [
389
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGZUTUD5Ocjs.TokenImage_default, { asset: base, size: "3xs", noChain: true }),
390
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "font-mono text-xs uppercase", children: base.symbol })
391
+ ] })
392
+ ] }),
393
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-2", style: { borderTop: "1px solid var(--widget-border)", paddingTop: "0.5rem" }, children: [
394
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex justify-between items-center", children: [
395
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-2xs", style: { color: "var(--widget-muted-foreground)" }, children: "USD Value" }),
396
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "font-mono text-xs", children: [
397
+ "$",
398
+ base.price ? (base.price * exchangeRate * parseFloat(quoteAmount.toString())).toFixed(2) : "\u2014"
399
+ ] })
400
+ ] }),
401
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex justify-between items-center", children: [
402
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-2xs", style: { color: "var(--widget-muted-foreground)" }, children: "Order Type" }),
403
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-2xs font-mono", style: { color: "var(--widget-foreground)" }, children: "RFQ" })
404
+ ] }),
405
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex justify-between items-center", children: [
406
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-2xs", style: { color: "var(--widget-muted-foreground)" }, children: "Fill" }),
407
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-2xs", style: { color: "var(--widget-primary)" }, children: "Exact" })
408
+ ] }),
409
+ base.chainId !== quote.chainId && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex justify-between items-center", children: [
410
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-2xs", style: { color: "var(--widget-muted-foreground)" }, children: "Route" }),
411
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-2xs font-mono", children: "Cross-chain" })
412
+ ] })
413
+ ] })
414
+ ] }) : hasQuoteError ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-1", children: [
415
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGZUTUD5Ocjs.ThreeDots, { className: "h-6 w-6", style: { color: "var(--widget-destructive)" } }),
416
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-2xs", style: { color: "var(--widget-destructive)" }, children: "Quote not found" })
417
+ ] }) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-2 mt-2", children: [
418
+ [...Array(4)].map((_, i) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
419
+ "div",
420
+ {
421
+ className: "h-3 rounded animate-pulse",
422
+ style: {
423
+ backgroundColor: "var(--widget-muted)",
424
+ width: i % 2 === 0 ? "80%" : "60%",
425
+ opacity: 0.5
426
+ }
427
+ },
428
+ i
429
+ )),
430
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-2xs mt-1", style: { color: "var(--widget-muted-foreground)", opacity: 0.5 }, children: "Enter an amount" })
431
+ ] })
432
+ ] })
433
+ }
434
+ )
435
+ ] });
436
+ };
437
+ var SwapFormSplit_default = SwapFormSplit;
438
+
439
+
440
+ exports.default = SwapFormSplit_default;
441
+ //# sourceMappingURL=SwapFormSplit-VDDIRQUQ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/flooreyes/mega-swap-widget/dist/SwapFormSplit-VDDIRQUQ.cjs","../src/components/SwapFormSplit.tsx"],"names":[],"mappings":"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","file":"/Users/flooreyes/mega-swap-widget/dist/SwapFormSplit-VDDIRQUQ.cjs","sourcesContent":[null,"'use client';\n\nimport { type Asset, type SupportedChainId, type ReviewOrderStep, ThreeDots, TokenImage } from '../internal';\nimport { useWalletModal } from '../wallet/WalletModalContext';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\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 { useShallow } from 'zustand/react/shallow';\nimport AssetAmountInput from './AssetAmountInput';\nimport AssetSelection from './AssetSelection';\nimport AssetSelectionMenu from './AssetSelectionMenu';\nimport ChainSelectionMenu from './ChainSelectionMenu';\nimport RecipientForm from './RecipientForm';\nimport TxStatusDisplay from './states/TxStatusDisplay';\nimport { SwapButton } from './states/SwapButton';\n\nconst NOOP = () => {};\n\ninterface ReviewActionProps {\n base: Asset;\n quote: Asset;\n baseAmount: number;\n quoteAmount: number;\n userAddress: string;\n}\n\ninterface SwapFormSplitProps {\n onSwapComplete?: (orderHash: string) => void;\n onSwapInitiated?: () => void;\n onBackToSwap?: () => void;\n onMoreChainsClick?: () => void;\n}\n\nconst SwapFormSplit: React.FC<SwapFormSplitProps> = ({ onSwapComplete, onSwapInitiated, onBackToSwap, onMoreChainsClick }) => {\n const { web3ConnectionType, hasConnectHandler, lockBase, lockQuote, disableInverting, swapButtonVariant, tokenDisplay, tokenBadgeOrientation, widgetType, assetMenuVariant } = 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 setBaseAmount,\n setQuoteAmount,\n swapTokens,\n clearForm,\n } = useSwapFormContext();\n\n const {\n handleInputChange,\n ensureForParams,\n clear,\n refresh,\n liquidityError,\n routingError,\n } = useRfq();\n const { address: userAddress } = useWalletState();\n const { openConnectModal: openWalletModal } = useWalletModal();\n const { isRecipientInputOpen, txStatus, view, selectedChainFilterChainId } = useWidgetSwapUIStore(\n useShallow((state) => ({\n isRecipientInputOpen: state.isRecipientInputOpen,\n txStatus: state.txStatus,\n view: state.view,\n selectedChainFilterChainId: state.selectedChainFilterChainId ?? 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\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 }, [reviewState, baseAmount, baseToken, quoteToken, isWrappingPair, isUnwrappingPair, handleInputChange, setQuoteAmount]);\n\n const exchangeRate =\n baseAmount && quoteAmount && parseFloat(quoteAmount.toString())\n ? parseFloat(baseAmount.toString()) / parseFloat(quoteAmount.toString())\n : 0;\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 }, [baseBalance.formatted, baseToken, quoteToken, isWrappingPair, isUnwrappingPair, setBaseAmount, setQuoteAmount, clear, ensureForParams]);\n\n const handleClear = useCallback(() => {\n clear();\n clearForm();\n }, [clear, clearForm]);\n\n const baseBalanceNum = baseBalance.formatted ? parseFloat(baseBalance.formatted) : null;\n const hasAmount = !!(baseAmount || quoteAmount);\n\n const base = baseToken;\n const quote = quoteToken;\n const baseUsd = base?.price && baseAmount ? `$${(base.price * baseAmount).toFixed(2)}` : '$0.00';\n const quoteUsd = quote?.price && quoteAmount ? `$${(quote.price * quoteAmount).toFixed(2)}` : '$0.00';\n const hasValidQuote = !!(base && quote && baseAmount && quoteAmount);\n const hasQuoteError = liquidityError || routingError;\n\n const isShowingTxStatus =\n reviewState === 'trackingTx' && !!trackedOrderHash && !!base && !!quote && !!baseAmount && !!quoteAmount;\n\n // Inline selection: right panel becomes AssetSelectionMenu when split assetMenuVariant\n const isSplitMenuMode = assetMenuVariant === 'split';\n const isSelecting = isSplitMenuMode && (\n view === 'baseSelection' || view === 'quoteSelection' ||\n view === 'baseChainSelection' || view === 'quoteChainSelection'\n );\n const menuSide = view === 'baseSelection' || view === 'baseChainSelection' ? 'base' : 'quote';\n const menuOtherAsset = menuSide === 'base' ? quote : base;\n\n // Measure left column height so the right panel (selection menu) matches exactly.\n const leftColRef = useRef<HTMLDivElement>(null);\n const [leftColHeight, setLeftColHeight] = useState<number>(380);\n\n useEffect(() => {\n if (!isSplitMenuMode) return;\n const el = leftColRef.current;\n if (!el) return;\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n setLeftColHeight(entry.contentRect.height);\n }\n });\n observer.observe(el);\n return () => observer.disconnect();\n }, [isSplitMenuMode]);\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.getState().transitionToView(\n side === 'base' ? 'baseSelection' : 'quoteSelection',\n 'chainSelection',\n );\n }, []);\n\n const handleInlineMoreChains = useCallback(() => {\n const currentView = useWidgetSwapUIStore.getState().view;\n if (currentView === 'baseSelection') {\n useWidgetSwapUIStore.getState().transitionToView('baseChainSelection', 'chainSelection');\n } else if (currentView === 'quoteSelection') {\n useWidgetSwapUIStore.getState().transitionToView('quoteChainSelection', 'chainSelection');\n }\n }, []);\n\n const connectButtonStyle: React.CSSProperties = {\n backgroundColor: swapButtonVariant === 'default' ? 'var(--widget-primary)' : 'transparent',\n color: swapButtonVariant === 'default' ? 'var(--widget-primary-foreground)' : 'var(--widget-primary)',\n border: swapButtonVariant !== 'default' ? '1px solid var(--widget-primary)' : 'none',\n borderRadius: 'var(--widget-radius)',\n };\n\n return (\n <div className=\"flex flex-row w-full\">\n {/* ── LEFT: Swap Form (or TxStatus during tracking) ──── */}\n <div\n ref={leftColRef}\n className=\"flex flex-col flex-1 min-w-0\"\n style={{ borderRight: '1px solid var(--widget-border)' }}\n >\n {isShowingTxStatus && trackedOrderHash && base && quote && baseAmount && quoteAmount ? (\n <div className=\"flex-1 min-h-0 overflow-hidden\">\n <TxStatusDisplay\n orderHash={trackedOrderHash}\n base={base}\n quote={quote}\n baseAmount={baseAmount}\n quoteAmount={quoteAmount}\n status={txStatus}\n />\n </div>\n ) : (\n <>\n {/* BASE TOKEN SECTION */}\n <div\n className={`relative ${isCompactMode ? 'px-4 pt-3 pb-1' : 'px-4 pt-4 pb-2'}`}\n style={{ borderBottom: '1px solid var(--widget-border)' }}\n >\n {isOverlayToken ? (\n isCompactMode ? (\n <div className={`flex items-center gap-2 ${tokenBadgeOrientation === 'right' ? 'flex-row-reverse' : 'flex-row'}`}>\n <AssetSelection toggle={handleToggleBaseSelection} side=\"base\" asset={base} isPlacingOrder={isPlacingOrder || lockBase} />\n <div className=\"flex-1 min-w-0\">\n <AssetAmountInput side=\"base\" asset={base ?? null} otherAsset={quote ?? null} isPlacingOrder={isPlacingOrder} isWrappingPair={isWrappingPair} isUnwrappingPair={isUnwrappingPair} />\n </div>\n </div>\n ) : (\n <div className={`flex flex-col ${tokenBadgeOrientation === 'right' ? 'items-end' : 'items-start'}`}>\n <AssetSelection toggle={handleToggleBaseSelection} side=\"base\" asset={base} isPlacingOrder={isPlacingOrder || lockBase} />\n <AssetAmountInput side=\"base\" asset={base ?? null} otherAsset={quote ?? null} isPlacingOrder={isPlacingOrder} isWrappingPair={isWrappingPair} isUnwrappingPair={isUnwrappingPair} />\n </div>\n )\n ) : (\n <>\n <AssetSelection toggle={handleToggleBaseSelection} side=\"base\" asset={base} isPlacingOrder={isPlacingOrder || lockBase} />\n <AssetAmountInput side=\"base\" asset={base ?? null} otherAsset={quote ?? null} isPlacingOrder={isPlacingOrder} isWrappingPair={isWrappingPair} isUnwrappingPair={isUnwrappingPair} />\n </>\n )}\n <div className=\"mb-1 flex w-full flex-row items-center justify-between\">\n <p className=\"mono text-sm\" style={{ color: 'var(--widget-muted-foreground)' }}>{baseUsd}</p>\n {userAddress && baseBalanceNum !== null && baseBalanceNum > 0 && (\n <button\n type=\"button\"\n onClick={handleMax}\n disabled={isPlacingOrder}\n className=\"absolute bottom-3 right-4 flex items-center rounded-full px-3 py-0.5 text-xs font-medium uppercase cursor-pointer disabled:opacity-40 bg-(--widget-primary) text-(--widget-primary-foreground) hover:bg-(--widget-foreground) hover:text-(--widget-card) transition-colors\"\n >\n Max\n </button>\n )}\n </div>\n </div>\n\n {/* INVERT BUTTON */}\n {!disableInverting && (\n <div className=\"flex justify-center -my-4 relative z-10\">\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 bg-(--widget-card) text-(--widget-muted-foreground) hover:bg-(--widget-secondary) hover:text-(--widget-foreground) transition-colors\"\n style={{ border: '1px solid var(--widget-border)' }}\n >\n <span className=\"text-2xs\">↑</span>\n <span className=\"text-2xs\">↓</span>\n </button>\n </div>\n )}\n\n {/* QUOTE TOKEN SECTION */}\n <div className={`relative ${isCompactMode ? 'px-4 pt-4 pb-1' : 'px-4 pt-6 pb-2'}`}>\n {isOverlayToken ? (\n isCompactMode ? (\n <div className={`flex items-center gap-2 ${tokenBadgeOrientation === 'right' ? 'flex-row-reverse' : 'flex-row'}`}>\n <AssetSelection toggle={handleToggleQuoteSelection} side=\"quote\" asset={quote} isPlacingOrder={isPlacingOrder || lockQuote} />\n <div className=\"flex-1 min-w-0\">\n <AssetAmountInput side=\"quote\" asset={quote ?? null} otherAsset={base ?? null} isPlacingOrder={isPlacingOrder} isWrappingPair={isWrappingPair} isUnwrappingPair={isUnwrappingPair} />\n </div>\n </div>\n ) : (\n <div className={`flex flex-col ${tokenBadgeOrientation === 'right' ? 'items-end' : 'items-start'}`}>\n <AssetSelection toggle={handleToggleQuoteSelection} side=\"quote\" asset={quote} isPlacingOrder={isPlacingOrder || lockQuote} />\n <AssetAmountInput side=\"quote\" asset={quote ?? null} otherAsset={base ?? null} isPlacingOrder={isPlacingOrder} isWrappingPair={isWrappingPair} isUnwrappingPair={isUnwrappingPair} />\n </div>\n )\n ) : (\n <>\n <AssetSelection toggle={handleToggleQuoteSelection} side=\"quote\" asset={quote} isPlacingOrder={isPlacingOrder || lockQuote} />\n <AssetAmountInput side=\"quote\" asset={quote ?? null} otherAsset={base ?? null} isPlacingOrder={isPlacingOrder} isWrappingPair={isWrappingPair} isUnwrappingPair={isUnwrappingPair} />\n </>\n )}\n <div className=\"flex w-full flex-row items-center justify-between\">\n <p className=\"mono text-sm\" style={{ color: 'var(--widget-muted-foreground)' }}>{quoteUsd}</p>\n {hasAmount && (\n <button\n type=\"button\"\n onClick={handleClear}\n disabled={isPlacingOrder}\n className=\"absolute bottom-2 right-4 flex items-center rounded-full px-3 py-0.5 text-xs font-medium uppercase cursor-pointer disabled:opacity-40 text-(--widget-muted-foreground) hover:bg-(--widget-secondary) transition-colors\"\n >\n Clear\n </button>\n )}\n </div>\n </div>\n\n </>\n )}\n\n {/* RECIPIENT FORM */}\n <div\n className=\"flex flex-row items-center w-full overflow-hidden\"\n style={{\n borderTop: isRecipientInputOpen ? '1px solid var(--widget-border)' : '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 {/* SWAP BUTTON */}\n <div className={`relative ${isShowingTxStatus ? 'px-0' : 'px-4'} py-4`}>\n {userAddress && base && quote && baseAmount && baseAmount > 0 ? (\n <SwapButton\n base={base}\n baseAmount={baseAmount}\n quote={quote}\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 {/* ── RIGHT: Selection menu (when open) or Live Details Panel ──────────── */}\n <div\n className={`flex flex-col transition-all duration-300 ${isSelecting ? 'flex-1 min-w-0' : 'w-48 shrink-0'}`}\n style={{ backgroundColor: 'var(--widget-background)', ...(isSelecting ? { height: `${leftColHeight}px` } : {}) }}\n >\n {isSelecting ? (\n <div className=\"flex flex-col overflow-hidden p-2\" style={{ height: '100%' }}>\n {view === 'baseChainSelection' || view === 'quoteChainSelection' ? (\n <ChainSelectionMenu\n toggle={onBackToSwap ?? NOOP}\n side={menuSide}\n onChainSelect={handleInlineChainSelect}\n />\n ) : (\n <AssetSelectionMenu\n toggle={onBackToSwap ?? NOOP}\n side={menuSide}\n otherAsset={menuOtherAsset}\n onMoreChainsClick={handleInlineMoreChains}\n selectedChainFilter={selectedChainFilterChainId}\n />\n )}\n </div>\n ) : (\n <div className=\"flex flex-col gap-3 px-4 py-4\">\n <span\n className=\"text-2xs uppercase tracking-wider font-medium\"\n style={{ color: 'var(--widget-muted-foreground)' }}\n >\n Quote Details\n </span>\n\n {hasValidQuote && base && quote ? (\n <>\n {/* Exchange rate */}\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"text-2xs\" style={{ color: 'var(--widget-muted-foreground)' }}>Rate</span>\n <div className=\"flex items-center gap-1\">\n <TokenImage asset={quote} size=\"3xs\" noChain />\n <span className=\"font-mono text-xs uppercase\">\n 1 {quote.symbol}\n </span>\n </div>\n <div className=\"flex items-center gap-1 pl-4\">\n <span className=\"text-2xs\" style={{ color: 'var(--widget-muted-foreground)' }}>= {exchangeRate.toFixed(6)}</span>\n </div>\n <div className=\"flex items-center gap-1 pl-4\">\n <TokenImage asset={base} size=\"3xs\" noChain />\n <span className=\"font-mono text-xs uppercase\">{base.symbol}</span>\n </div>\n </div>\n\n <div className=\"flex flex-col gap-2\" style={{ borderTop: '1px solid var(--widget-border)', paddingTop: '0.5rem' }}>\n {/* USD value */}\n <div className=\"flex justify-between items-center\">\n <span className=\"text-2xs\" style={{ color: 'var(--widget-muted-foreground)' }}>USD Value</span>\n <span className=\"font-mono text-xs\">\n ${base.price ? (base.price * exchangeRate * parseFloat(quoteAmount!.toString())).toFixed(2) : '—'}\n </span>\n </div>\n\n {/* Order type */}\n <div className=\"flex justify-between items-center\">\n <span className=\"text-2xs\" style={{ color: 'var(--widget-muted-foreground)' }}>Order Type</span>\n <span className=\"text-2xs font-mono\" style={{ color: 'var(--widget-foreground)' }}>RFQ</span>\n </div>\n\n {/* Fill guarantee */}\n <div className=\"flex justify-between items-center\">\n <span className=\"text-2xs\" style={{ color: 'var(--widget-muted-foreground)' }}>Fill</span>\n <span className=\"text-2xs\" style={{ color: 'var(--widget-primary)' }}>Exact</span>\n </div>\n\n {/* Base chain */}\n {base.chainId !== quote.chainId && (\n <div className=\"flex justify-between items-center\">\n <span className=\"text-2xs\" style={{ color: 'var(--widget-muted-foreground)' }}>Route</span>\n <span className=\"text-2xs font-mono\">Cross-chain</span>\n </div>\n )}\n </div>\n </>\n ) : hasQuoteError ? (\n <div className=\"flex flex-col gap-1\">\n <ThreeDots className=\"h-6 w-6\" style={{ color: 'var(--widget-destructive)' }} />\n <span className=\"text-2xs\" style={{ color: 'var(--widget-destructive)' }}>Quote not found</span>\n </div>\n ) : (\n <div className=\"flex flex-col gap-2 mt-2\">\n {[...Array(4)].map((_, i) => (\n <div\n key={i}\n className=\"h-3 rounded animate-pulse\"\n style={{\n backgroundColor: 'var(--widget-muted)',\n width: i % 2 === 0 ? '80%' : '60%',\n opacity: 0.5,\n }}\n />\n ))}\n <span className=\"text-2xs mt-1\" style={{ color: 'var(--widget-muted-foreground)', opacity: 0.5 }}>\n Enter an amount\n </span>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default SwapFormSplit;\n"]}
@@ -0,0 +1,57 @@
1
+ "use client";
2
+ "use client";
3
+ import {
4
+ useWalletState
5
+ } from "./chunk-7AWG6OWF.js";
6
+ import "./chunk-GGM3MDFM.js";
7
+
8
+ // src/components/WalletPlaceholderPanel.tsx
9
+ import { useDisconnect } from "wagmi";
10
+ import { jsx, jsxs } from "react/jsx-runtime";
11
+ var WalletPlaceholderPanel = () => {
12
+ const { disconnect } = useDisconnect();
13
+ const { address } = useWalletState();
14
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col h-full w-full", children: [
15
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 flex flex-col items-center justify-center p-6 gap-3 text-center", children: [
16
+ /* @__PURE__ */ jsxs(
17
+ "svg",
18
+ {
19
+ className: "size-8",
20
+ viewBox: "0 0 24 24",
21
+ fill: "none",
22
+ style: { color: "var(--widget-muted-foreground)", opacity: 0.5 },
23
+ children: [
24
+ /* @__PURE__ */ jsx("rect", { x: "2", y: "3", width: "20", height: "18", rx: "2", stroke: "currentColor", strokeWidth: "1.5", strokeDasharray: "4 2" }),
25
+ /* @__PURE__ */ jsx("path", { d: "M8 12h8M12 8v8", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" })
26
+ ]
27
+ }
28
+ ),
29
+ /* @__PURE__ */ jsx(
30
+ "p",
31
+ {
32
+ className: "text-sm font-medium",
33
+ style: { color: "var(--widget-foreground)" },
34
+ children: "Your custom components live here"
35
+ }
36
+ )
37
+ ] }),
38
+ address && /* @__PURE__ */ jsx("div", { className: "px-4 pb-4", children: /* @__PURE__ */ jsx(
39
+ "button",
40
+ {
41
+ type: "button",
42
+ onClick: () => disconnect(),
43
+ className: "w-full py-2.5 text-xs font-medium cursor-pointer transition-colors",
44
+ style: {
45
+ backgroundColor: "var(--widget-secondary)",
46
+ color: "var(--widget-secondary-foreground)",
47
+ borderRadius: "var(--widget-radius)"
48
+ },
49
+ children: "Disconnect"
50
+ }
51
+ ) })
52
+ ] });
53
+ };
54
+ export {
55
+ WalletPlaceholderPanel
56
+ };
57
+ //# sourceMappingURL=WalletPlaceholderPanel-7YDQ4FT6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/WalletPlaceholderPanel.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\nimport { useDisconnect } from 'wagmi';\nimport { useWalletState } from '../wallet/useWalletState';\n\nexport const WalletPlaceholderPanel: React.FC = () => {\n const { disconnect } = useDisconnect();\n const { address } = useWalletState();\n\n return (\n <div className=\"flex flex-col h-full w-full\">\n <div className=\"flex-1 flex flex-col items-center justify-center p-6 gap-3 text-center\">\n <svg\n className=\"size-8\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{ color: 'var(--widget-muted-foreground)', opacity: 0.5 }}\n >\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"18\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeDasharray=\"4 2\" />\n <path d=\"M8 12h8M12 8v8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n <p\n className=\"text-sm font-medium\"\n style={{ color: 'var(--widget-foreground)' }}\n >\n Your custom components live here\n </p>\n </div>\n {address && (\n <div className=\"px-4 pb-4\">\n <button\n type=\"button\"\n onClick={() => disconnect()}\n className=\"w-full py-2.5 text-xs font-medium cursor-pointer transition-colors\"\n style={{\n backgroundColor: 'var(--widget-secondary)',\n color: 'var(--widget-secondary-foreground)',\n borderRadius: 'var(--widget-radius)',\n }}\n >\n Disconnect\n </button>\n </div>\n )}\n </div>\n );\n};\n"],"mappings":";;;;;;;;AAGA,SAAS,qBAAqB;AAUtB,SAME,KANF;AAPD,IAAM,yBAAmC,MAAM;AACpD,QAAM,EAAE,WAAW,IAAI,cAAc;AACrC,QAAM,EAAE,QAAQ,IAAI,eAAe;AAEnC,SACE,qBAAC,SAAI,WAAU,+BACb;AAAA,yBAAC,SAAI,WAAU,0EACb;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,OAAO,EAAE,OAAO,kCAAkC,SAAS,IAAI;AAAA,UAE/D;AAAA,gCAAC,UAAK,GAAE,KAAI,GAAE,KAAI,OAAM,MAAK,QAAO,MAAK,IAAG,KAAI,QAAO,gBAAe,aAAY,OAAM,iBAAgB,OAAM;AAAA,YAC9G,oBAAC,UAAK,GAAE,kBAAiB,QAAO,gBAAe,aAAY,OAAM,eAAc,SAAQ;AAAA;AAAA;AAAA,MACzF;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO,EAAE,OAAO,2BAA2B;AAAA,UAC5C;AAAA;AAAA,MAED;AAAA,OACF;AAAA,IACC,WACC,oBAAC,SAAI,WAAU,aACb;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAS,MAAM,WAAW;AAAA,QAC1B,WAAU;AAAA,QACV,OAAO;AAAA,UACL,iBAAiB;AAAA,UACjB,OAAO;AAAA,UACP,cAAc;AAAA,QAChB;AAAA,QACD;AAAA;AAAA,IAED,GACF;AAAA,KAEJ;AAEJ;","names":[]}