@luxfi/ui 7.4.11 → 7.4.13

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 (84) hide show
  1. package/dist/alert.cjs +68 -46
  2. package/dist/alert.js +69 -46
  3. package/dist/avatar.cjs +49 -47
  4. package/dist/avatar.js +52 -49
  5. package/dist/badge.cjs +82 -49
  6. package/dist/badge.js +83 -50
  7. package/dist/checkbox.cjs +42 -75
  8. package/dist/checkbox.js +43 -76
  9. package/dist/chrome.cjs +3 -7
  10. package/dist/chrome.js +3 -7
  11. package/dist/close-button.cjs +3 -7
  12. package/dist/close-button.js +3 -7
  13. package/dist/dialog.cjs +3 -7
  14. package/dist/dialog.js +3 -7
  15. package/dist/drawer.cjs +3 -7
  16. package/dist/drawer.js +3 -7
  17. package/dist/empty-state.cjs +13 -13
  18. package/dist/empty-state.js +13 -13
  19. package/dist/expiration-selector.cjs +58 -63
  20. package/dist/expiration-selector.js +58 -63
  21. package/dist/greeks-display.cjs +48 -39
  22. package/dist/greeks-display.js +48 -39
  23. package/dist/index.cjs +1053 -888
  24. package/dist/index.js +1054 -889
  25. package/dist/input-group.cjs +36 -19
  26. package/dist/input-group.js +37 -19
  27. package/dist/option-chain.cjs +89 -67
  28. package/dist/option-chain.js +89 -67
  29. package/dist/option-position.cjs +88 -85
  30. package/dist/option-position.js +88 -85
  31. package/dist/pin-input.cjs +30 -29
  32. package/dist/pin-input.js +30 -29
  33. package/dist/pnl-diagram.cjs +20 -20
  34. package/dist/pnl-diagram.js +20 -20
  35. package/dist/popover.cjs +3 -7
  36. package/dist/popover.js +3 -7
  37. package/dist/progress-circle.cjs +40 -22
  38. package/dist/progress-circle.d.cts +5 -5
  39. package/dist/progress-circle.d.ts +5 -5
  40. package/dist/progress-circle.js +41 -22
  41. package/dist/progress.cjs +15 -22
  42. package/dist/progress.d.cts +6 -6
  43. package/dist/progress.d.ts +6 -6
  44. package/dist/progress.js +15 -22
  45. package/dist/radio.cjs +35 -68
  46. package/dist/radio.d.cts +18 -18
  47. package/dist/radio.d.ts +18 -18
  48. package/dist/radio.js +36 -69
  49. package/dist/rating.cjs +15 -17
  50. package/dist/rating.js +15 -17
  51. package/dist/slider.cjs +33 -50
  52. package/dist/slider.js +34 -51
  53. package/dist/strategy-builder.cjs +194 -115
  54. package/dist/strategy-builder.js +194 -115
  55. package/dist/switch.cjs +48 -55
  56. package/dist/switch.js +49 -56
  57. package/dist/tag.cjs +115 -69
  58. package/dist/tag.js +116 -69
  59. package/dist/tooltip.cjs +28 -17
  60. package/dist/tooltip.js +30 -18
  61. package/package.json +1 -1
  62. package/src/alert.tsx +78 -45
  63. package/src/avatar.tsx +54 -38
  64. package/src/badge.tsx +65 -44
  65. package/src/checkbox.tsx +70 -89
  66. package/src/close-button.tsx +3 -8
  67. package/src/empty-state.tsx +21 -17
  68. package/src/expiration-selector.tsx +84 -66
  69. package/src/greeks-display.tsx +59 -51
  70. package/src/input-group.tsx +38 -24
  71. package/src/option-chain.tsx +154 -104
  72. package/src/option-position.tsx +143 -114
  73. package/src/pin-input.tsx +37 -29
  74. package/src/pnl-diagram.tsx +36 -28
  75. package/src/progress-circle.tsx +52 -28
  76. package/src/progress.tsx +17 -21
  77. package/src/radio.tsx +56 -76
  78. package/src/rating.tsx +22 -20
  79. package/src/slider.tsx +43 -45
  80. package/src/strategy-builder.tsx +260 -162
  81. package/src/switch.tsx +63 -64
  82. package/src/tag.tsx +89 -51
  83. package/src/tooltip.tsx +21 -13
  84. package/tokens.css +18 -0
@@ -1,9 +1,8 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
+ var gui = require('@hanzo/gui');
4
5
  var React = require('react');
5
- var clsx = require('clsx');
6
- var tailwindMerge = require('tailwind-merge');
7
6
  var jsxRuntime = require('react/jsx-runtime');
8
7
 
9
8
  function _interopNamespace(e) {
@@ -26,9 +25,6 @@ function _interopNamespace(e) {
26
25
 
27
26
  var React__namespace = /*#__PURE__*/_interopNamespace(React);
28
27
 
29
- function cn(...inputs) {
30
- return tailwindMerge.twMerge(clsx.clsx(inputs));
31
- }
32
28
  function findATM(strikes, spot) {
33
29
  if (strikes.length === 0) return spot;
34
30
  return strikes.reduce(
@@ -137,84 +133,145 @@ var STRATEGY_PRESETS = [
137
133
  ]
138
134
  }
139
135
  ];
136
+ var MONO = "monospace";
137
+ var CONTROL_BOX = {
138
+ backgroundColor: "var(--color-input-bg)",
139
+ borderWidth: 1,
140
+ borderColor: "var(--color-input-border)",
141
+ outlineWidth: 0,
142
+ focusStyle: { borderColor: "var(--color-input-border-focus)" }
143
+ };
144
+ var CONTROL_INK = { color: "var(--color-input-fg)" };
140
145
  function LegRow({ leg, index, strikes, expirations, removable, onChange, onRemove }) {
141
146
  const update = (patch) => {
142
147
  onChange(index, { ...leg, ...patch });
143
148
  };
144
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 rounded-md bg-zinc-800/50 px-2 py-1.5", children: [
145
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] font-mono text-zinc-500 w-4 shrink-0", children: index + 1 }),
146
- /* @__PURE__ */ jsxRuntime.jsx(
147
- "button",
148
- {
149
- type: "button",
150
- className: cn(
151
- "px-2 py-0.5 rounded text-xs font-semibold transition-colors",
152
- leg.action === "buy" ? "bg-emerald-900/60 text-emerald-400" : "bg-red-900/60 text-red-400"
149
+ return /* @__PURE__ */ jsxRuntime.jsxs(
150
+ gui.XStack,
151
+ {
152
+ alignItems: "center",
153
+ gap: 8,
154
+ borderRadius: 6,
155
+ backgroundColor: "var(--color-tag-subtle-bg)",
156
+ paddingHorizontal: 8,
157
+ paddingVertical: 6,
158
+ children: [
159
+ /* @__PURE__ */ jsxRuntime.jsx(gui.Text, { fontSize: 10, style: { fontFamily: MONO }, flexShrink: 0, width: 16, color: "var(--color-text-secondary)", children: index + 1 }),
160
+ /* @__PURE__ */ jsxRuntime.jsx(
161
+ gui.XStack,
162
+ {
163
+ unstyled: true,
164
+ render: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button" }),
165
+ onClick: () => update({ action: leg.action === "buy" ? "sell" : "buy" }),
166
+ paddingHorizontal: 8,
167
+ paddingVertical: 2,
168
+ borderRadius: 4,
169
+ borderWidth: 0,
170
+ cursor: "pointer",
171
+ transition: "quick",
172
+ backgroundColor: leg.action === "buy" ? "color-mix(in srgb, var(--color-status-good) 20%, transparent)" : "color-mix(in srgb, var(--color-status-bad) 20%, transparent)",
173
+ children: /* @__PURE__ */ jsxRuntime.jsx(gui.Text, { fontSize: 12, fontWeight: "600", color: leg.action === "buy" ? "var(--color-status-good)" : "var(--color-status-bad)", children: leg.action === "buy" ? "BUY" : "SELL" })
174
+ }
153
175
  ),
154
- onClick: () => update({ action: leg.action === "buy" ? "sell" : "buy" }),
155
- children: leg.action === "buy" ? "BUY" : "SELL"
156
- }
157
- ),
158
- /* @__PURE__ */ jsxRuntime.jsx(
159
- "button",
160
- {
161
- type: "button",
162
- className: cn(
163
- "px-2 py-0.5 rounded text-xs font-medium transition-colors",
164
- // Call vs put is a rank difference, not a hue difference.
165
- leg.type === "call" ? "bg-[var(--secondary)] text-[var(--foreground)]" : "bg-[var(--muted)] text-[var(--muted-foreground)]"
176
+ /* @__PURE__ */ jsxRuntime.jsx(
177
+ gui.XStack,
178
+ {
179
+ unstyled: true,
180
+ render: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button" }),
181
+ onClick: () => update({ type: leg.type === "call" ? "put" : "call" }),
182
+ paddingHorizontal: 8,
183
+ paddingVertical: 2,
184
+ borderRadius: 4,
185
+ borderWidth: 0,
186
+ cursor: "pointer",
187
+ transition: "quick",
188
+ backgroundColor: leg.type === "call" ? "var(--secondary)" : "var(--muted)",
189
+ children: /* @__PURE__ */ jsxRuntime.jsx(gui.Text, { fontSize: 12, fontWeight: "500", color: leg.type === "call" ? "var(--foreground)" : "var(--muted-foreground)", children: leg.type === "call" ? "CALL" : "PUT" })
190
+ }
166
191
  ),
167
- onClick: () => update({ type: leg.type === "call" ? "put" : "call" }),
168
- children: leg.type === "call" ? "CALL" : "PUT"
169
- }
170
- ),
171
- /* @__PURE__ */ jsxRuntime.jsx(
172
- "select",
173
- {
174
- value: leg.strike,
175
- onChange: (e) => update({ strike: Number(e.target.value) }),
176
- className: "bg-zinc-900 border border-zinc-700 rounded px-1.5 py-0.5 text-xs font-mono text-zinc-200 outline-none focus:border-zinc-500 min-w-[72px]",
177
- children: strikes.map((s) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: s, children: s.toFixed(2) }, s))
178
- }
179
- ),
180
- /* @__PURE__ */ jsxRuntime.jsx(
181
- "select",
182
- {
183
- value: leg.expiration,
184
- onChange: (e) => update({ expiration: e.target.value }),
185
- className: "bg-zinc-900 border border-zinc-700 rounded px-1.5 py-0.5 text-xs text-zinc-200 outline-none focus:border-zinc-500 min-w-[80px]",
186
- children: expirations.map((exp) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: exp, children: exp }, exp))
187
- }
188
- ),
189
- /* @__PURE__ */ jsxRuntime.jsx(
190
- "input",
191
- {
192
- type: "number",
193
- min: 1,
194
- max: 999,
195
- value: leg.quantity,
196
- onChange: (e) => update({ quantity: Math.max(1, parseInt(e.target.value, 10) || 1) }),
197
- className: "bg-zinc-900 border border-zinc-700 rounded px-1.5 py-0.5 text-xs font-mono text-zinc-200 outline-none focus:border-zinc-500 w-[48px] text-center"
198
- }
199
- ),
200
- leg.premium !== void 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn(
201
- "font-mono tabular-nums text-xs ml-auto",
202
- leg.premium >= 0 ? "text-emerald-400" : "text-red-400"
203
- ), children: [
204
- leg.premium >= 0 ? "+" : "",
205
- leg.premium.toFixed(2)
206
- ] }),
207
- removable && /* @__PURE__ */ jsxRuntime.jsx(
208
- "button",
209
- {
210
- type: "button",
211
- onClick: () => onRemove(index),
212
- className: "ml-auto p-0.5 text-zinc-500 hover:text-red-400 transition-colors",
213
- "aria-label": "Remove leg",
214
- children: /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "h-3.5 w-3.5", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M18 6L6 18M6 6l12 12", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }) })
215
- }
216
- )
217
- ] });
192
+ /* @__PURE__ */ jsxRuntime.jsx(
193
+ gui.View,
194
+ {
195
+ unstyled: true,
196
+ render: /* @__PURE__ */ jsxRuntime.jsx("select", { value: leg.strike, onChange: (e) => update({ strike: Number(e.target.value) }) }),
197
+ ...CONTROL_BOX,
198
+ borderRadius: 4,
199
+ paddingHorizontal: 6,
200
+ paddingVertical: 2,
201
+ minWidth: 72,
202
+ style: { ...CONTROL_INK, fontFamily: MONO, fontSize: 12 },
203
+ children: strikes.map((s) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: s, children: s.toFixed(2) }, s))
204
+ }
205
+ ),
206
+ /* @__PURE__ */ jsxRuntime.jsx(
207
+ gui.View,
208
+ {
209
+ unstyled: true,
210
+ render: /* @__PURE__ */ jsxRuntime.jsx("select", { value: leg.expiration, onChange: (e) => update({ expiration: e.target.value }) }),
211
+ ...CONTROL_BOX,
212
+ borderRadius: 4,
213
+ paddingHorizontal: 6,
214
+ paddingVertical: 2,
215
+ minWidth: 80,
216
+ style: { ...CONTROL_INK, fontSize: 12 },
217
+ children: expirations.map((exp) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: exp, children: exp }, exp))
218
+ }
219
+ ),
220
+ /* @__PURE__ */ jsxRuntime.jsx(
221
+ gui.View,
222
+ {
223
+ unstyled: true,
224
+ render: /* @__PURE__ */ jsxRuntime.jsx(
225
+ "input",
226
+ {
227
+ type: "number",
228
+ min: 1,
229
+ max: 999,
230
+ value: leg.quantity,
231
+ onChange: (e) => update({ quantity: Math.max(1, parseInt(e.target.value, 10) || 1) })
232
+ }
233
+ ),
234
+ ...CONTROL_BOX,
235
+ borderRadius: 4,
236
+ paddingHorizontal: 6,
237
+ paddingVertical: 2,
238
+ width: 48,
239
+ style: { ...CONTROL_INK, fontFamily: MONO, fontSize: 12, textAlign: "center" }
240
+ }
241
+ ),
242
+ leg.premium !== void 0 && /* @__PURE__ */ jsxRuntime.jsxs(
243
+ gui.Text,
244
+ {
245
+ fontSize: 12,
246
+ style: { fontFamily: MONO },
247
+ fontVariant: ["tabular-nums"],
248
+ marginLeft: "auto",
249
+ color: leg.premium >= 0 ? "var(--color-status-good)" : "var(--color-status-bad)",
250
+ children: [
251
+ leg.premium >= 0 ? "+" : "",
252
+ leg.premium.toFixed(2)
253
+ ]
254
+ }
255
+ ),
256
+ removable && /* @__PURE__ */ jsxRuntime.jsx(
257
+ gui.XStack,
258
+ {
259
+ unstyled: true,
260
+ render: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", "aria-label": "Remove leg" }),
261
+ onClick: () => onRemove(index),
262
+ marginLeft: "auto",
263
+ padding: 2,
264
+ borderWidth: 0,
265
+ cursor: "pointer",
266
+ transition: "quick",
267
+ style: { color: "var(--color-text-secondary)" },
268
+ hoverStyle: { opacity: 0.7 },
269
+ children: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: 14, height: 14, viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M18 6L6 18M6 6l12 12", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }) })
270
+ }
271
+ )
272
+ ]
273
+ }
274
+ );
218
275
  }
219
276
  var StrategyBuilder = React__namespace.forwardRef(
220
277
  function StrategyBuilder2(props, ref) {
@@ -284,37 +341,46 @@ var StrategyBuilder = React__namespace.forwardRef(
284
341
  });
285
342
  }, [onSubmit, strategyType, legs, netPremium]);
286
343
  const currentPreset = STRATEGY_PRESETS.find((p) => p.value === strategyType);
344
+ const netColor = netPremium > 0 ? "var(--color-status-good)" : netPremium < 0 ? "var(--color-status-bad)" : "var(--color-text-secondary)";
287
345
  return /* @__PURE__ */ jsxRuntime.jsxs(
288
- "div",
346
+ gui.YStack,
289
347
  {
290
348
  ref,
291
- className: cn(
292
- "flex flex-col gap-3 rounded-lg border border-zinc-800 bg-zinc-900/50 p-3",
293
- className
294
- ),
349
+ gap: 12,
350
+ borderRadius: 8,
351
+ borderWidth: 1,
352
+ borderColor: "var(--color-border-divider)",
353
+ backgroundColor: "var(--card)",
354
+ padding: 12,
355
+ className,
295
356
  ...rest,
296
357
  children: [
297
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-3", children: [
298
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
299
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-semibold uppercase tracking-wider text-zinc-500", children: "Strategy" }),
300
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-zinc-200", children: underlying })
358
+ /* @__PURE__ */ jsxRuntime.jsxs(gui.XStack, { alignItems: "center", justifyContent: "space-between", gap: 12, children: [
359
+ /* @__PURE__ */ jsxRuntime.jsxs(gui.XStack, { alignItems: "center", gap: 8, children: [
360
+ /* @__PURE__ */ jsxRuntime.jsx(gui.Text, { fontSize: 12, fontWeight: "600", textTransform: "uppercase", letterSpacing: 0.6, color: "var(--color-text-secondary)", children: "Strategy" }),
361
+ /* @__PURE__ */ jsxRuntime.jsx(gui.Text, { fontSize: 14, fontWeight: "500", color: "var(--color-text-primary)", children: underlying })
301
362
  ] }),
302
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-[10px] text-zinc-500", children: [
363
+ /* @__PURE__ */ jsxRuntime.jsxs(gui.Text, { fontSize: 10, color: "var(--color-text-secondary)", children: [
303
364
  "Spot: ",
304
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-mono tabular-nums text-zinc-300", children: spotPrice.toFixed(2) })
365
+ /* @__PURE__ */ jsxRuntime.jsx(gui.Text, { style: { fontFamily: MONO }, fontVariant: ["tabular-nums"], color: "var(--color-text-primary)", children: spotPrice.toFixed(2) })
305
366
  ] })
306
367
  ] }),
307
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-2", children: /* @__PURE__ */ jsxRuntime.jsx(
308
- "select",
368
+ /* @__PURE__ */ jsxRuntime.jsx(gui.XStack, { alignItems: "center", gap: 8, children: /* @__PURE__ */ jsxRuntime.jsx(
369
+ gui.View,
309
370
  {
310
- value: strategyType,
311
- onChange: handleStrategyChange,
312
- className: "flex-1 bg-zinc-900 border border-zinc-700 rounded-md px-2.5 py-1.5 text-sm text-zinc-200 outline-none focus:border-zinc-500",
371
+ unstyled: true,
372
+ render: /* @__PURE__ */ jsxRuntime.jsx("select", { value: strategyType, onChange: handleStrategyChange }),
373
+ flex: 1,
374
+ ...CONTROL_BOX,
375
+ borderRadius: 6,
376
+ paddingHorizontal: 10,
377
+ paddingVertical: 6,
378
+ style: { ...CONTROL_INK, fontSize: 14 },
313
379
  children: STRATEGY_PRESETS.map((preset) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: preset.value, children: preset.label }, preset.value))
314
380
  }
315
381
  ) }),
316
- currentPreset && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[11px] text-zinc-500 -mt-1", children: currentPreset.description }),
317
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-1.5", children: legs.map((leg, i) => /* @__PURE__ */ jsxRuntime.jsx(
382
+ currentPreset && /* @__PURE__ */ jsxRuntime.jsx(gui.Text, { fontSize: 11, marginTop: -4, color: "var(--color-text-secondary)", children: currentPreset.description }),
383
+ /* @__PURE__ */ jsxRuntime.jsx(gui.YStack, { gap: 6, children: legs.map((leg, i) => /* @__PURE__ */ jsxRuntime.jsx(
318
384
  LegRow,
319
385
  {
320
386
  leg,
@@ -328,40 +394,53 @@ var StrategyBuilder = React__namespace.forwardRef(
328
394
  i
329
395
  )) }),
330
396
  strategyType === "custom" && legs.length < 4 && /* @__PURE__ */ jsxRuntime.jsxs(
331
- "button",
397
+ gui.XStack,
332
398
  {
333
- type: "button",
399
+ unstyled: true,
400
+ render: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button" }),
334
401
  onClick: handleAddLeg,
335
- className: "flex items-center justify-center gap-1 rounded-md border border-dashed border-zinc-700 py-1 text-xs text-zinc-500 hover:text-zinc-300 hover:border-zinc-500 transition-colors",
402
+ alignItems: "center",
403
+ justifyContent: "center",
404
+ gap: 4,
405
+ borderRadius: 6,
406
+ borderWidth: 1,
407
+ paddingVertical: 4,
408
+ cursor: "pointer",
409
+ transition: "quick",
410
+ borderColor: "var(--color-border-divider)",
411
+ hoverStyle: { borderColor: "var(--color-hover)" },
412
+ style: { color: "var(--color-text-secondary)", borderStyle: "dashed" },
336
413
  children: [
337
- /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "h-3 w-3", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 5v14M5 12h14", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }) }),
338
- "Add Leg"
414
+ /* @__PURE__ */ jsxRuntime.jsx("svg", { width: 12, height: 12, viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 5v14M5 12h14", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }) }),
415
+ /* @__PURE__ */ jsxRuntime.jsx(gui.Text, { fontSize: 12, color: "var(--color-text-secondary)", children: "Add Leg" })
339
416
  ]
340
417
  }
341
418
  ),
342
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between pt-1 border-t border-zinc-800", children: [
343
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
344
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-zinc-500", children: "Net:" }),
345
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn(
346
- "font-mono tabular-nums text-sm font-semibold",
347
- netPremium > 0 ? "text-emerald-400" : netPremium < 0 ? "text-red-400" : "text-zinc-400"
348
- ), children: [
419
+ /* @__PURE__ */ jsxRuntime.jsxs(gui.XStack, { alignItems: "center", justifyContent: "space-between", paddingTop: 4, borderTopWidth: 1, borderColor: "var(--color-border-divider)", children: [
420
+ /* @__PURE__ */ jsxRuntime.jsxs(gui.XStack, { alignItems: "center", gap: 8, children: [
421
+ /* @__PURE__ */ jsxRuntime.jsx(gui.Text, { fontSize: 12, color: "var(--color-text-secondary)", children: "Net:" }),
422
+ /* @__PURE__ */ jsxRuntime.jsxs(gui.Text, { fontSize: 14, fontWeight: "600", style: { fontFamily: MONO }, fontVariant: ["tabular-nums"], color: netColor, children: [
349
423
  netPremium > 0 ? "Credit " : netPremium < 0 ? "Debit " : "",
350
424
  netPremium !== 0 ? `$${Math.abs(netPremium).toFixed(2)}` : "-"
351
425
  ] })
352
426
  ] }),
353
427
  /* @__PURE__ */ jsxRuntime.jsx(
354
- "button",
428
+ gui.XStack,
355
429
  {
356
- type: "button",
430
+ unstyled: true,
431
+ render: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button" }),
357
432
  onClick: handleSubmit,
358
433
  disabled: legs.length === 0,
359
- className: cn(
360
- "px-4 py-1.5 rounded-md text-xs font-semibold transition-colors",
361
- "bg-blue-600 text-white hover:bg-blue-500",
362
- "disabled:opacity-40 disabled:cursor-not-allowed"
363
- ),
364
- children: "Review Order"
434
+ paddingHorizontal: 16,
435
+ paddingVertical: 6,
436
+ borderRadius: 6,
437
+ borderWidth: 0,
438
+ cursor: "pointer",
439
+ transition: "quick",
440
+ backgroundColor: "var(--color-button-solid-bg)",
441
+ hoverStyle: { backgroundColor: "var(--color-hover)" },
442
+ disabledStyle: { opacity: 0.4, cursor: "not-allowed" },
443
+ children: /* @__PURE__ */ jsxRuntime.jsx(gui.Text, { fontSize: 12, fontWeight: "600", color: "var(--color-button-solid-text)", children: "Review Order" })
365
444
  }
366
445
  )
367
446
  ] })