@luxfi/ui 7.4.12 → 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.
- package/dist/avatar.cjs +0 -1
- package/dist/avatar.js +0 -1
- package/dist/index.cjs +320 -208
- package/dist/index.js +320 -208
- package/dist/input-group.cjs +36 -19
- package/dist/input-group.js +37 -19
- package/dist/pin-input.cjs +30 -29
- package/dist/pin-input.js +30 -29
- package/dist/progress-circle.cjs +40 -22
- package/dist/progress-circle.d.cts +5 -5
- package/dist/progress-circle.d.ts +5 -5
- package/dist/progress-circle.js +41 -22
- package/dist/radio.cjs +0 -1
- package/dist/radio.js +0 -1
- package/dist/rating.cjs +15 -17
- package/dist/rating.js +15 -17
- package/dist/slider.cjs +0 -1
- package/dist/slider.js +0 -1
- package/dist/strategy-builder.cjs +194 -115
- package/dist/strategy-builder.js +194 -115
- package/dist/tag.cjs +18 -15
- package/dist/tag.js +18 -15
- package/package.json +1 -1
- package/src/avatar.tsx +1 -2
- package/src/expiration-selector.tsx +6 -6
- package/src/input-group.tsx +2 -2
- package/src/option-position.tsx +9 -2
- package/src/progress-circle.tsx +52 -28
- package/src/radio.tsx +0 -1
- package/src/rating.tsx +22 -20
- package/src/slider.tsx +0 -1
- package/src/strategy-builder.tsx +51 -42
package/dist/index.cjs
CHANGED
|
@@ -1657,7 +1657,6 @@ var Avatar = React32__namespace.forwardRef(
|
|
|
1657
1657
|
gui.Avatar,
|
|
1658
1658
|
{
|
|
1659
1659
|
ref,
|
|
1660
|
-
unstyled: true,
|
|
1661
1660
|
position: "relative",
|
|
1662
1661
|
display: "inline-flex",
|
|
1663
1662
|
flexShrink: 0,
|
|
@@ -3764,22 +3763,30 @@ var InputGroup = React32__namespace.forwardRef(
|
|
|
3764
3763
|
const { className: startClassName, ...startRest } = startElementProps ?? {};
|
|
3765
3764
|
const { className: endClassName, ...endRest } = endElementProps ?? {};
|
|
3766
3765
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3767
|
-
|
|
3766
|
+
gui.XStack,
|
|
3768
3767
|
{
|
|
3769
3768
|
ref: combinedRef,
|
|
3770
|
-
|
|
3769
|
+
position: "relative",
|
|
3770
|
+
width: "100%",
|
|
3771
|
+
alignItems: "center",
|
|
3772
|
+
className,
|
|
3771
3773
|
...rest,
|
|
3772
3774
|
children: [
|
|
3773
3775
|
startElement && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3774
|
-
|
|
3776
|
+
gui.XStack,
|
|
3775
3777
|
{
|
|
3776
3778
|
ref: startElementRef,
|
|
3777
|
-
|
|
3778
|
-
|
|
3779
|
-
|
|
3780
|
-
|
|
3779
|
+
position: "absolute",
|
|
3780
|
+
top: 0,
|
|
3781
|
+
bottom: 0,
|
|
3782
|
+
left: 0,
|
|
3783
|
+
zIndex: 1,
|
|
3784
|
+
alignItems: "center",
|
|
3785
|
+
pointerEvents: "none",
|
|
3786
|
+
style: { color: "var(--color-icon-secondary)" },
|
|
3787
|
+
className: startClassName,
|
|
3781
3788
|
...startRest,
|
|
3782
|
-
children: startElement
|
|
3789
|
+
children: ink(startElement)
|
|
3783
3790
|
}
|
|
3784
3791
|
),
|
|
3785
3792
|
React32__namespace.Children.map(children, (child) => {
|
|
@@ -3798,15 +3805,20 @@ var InputGroup = React32__namespace.forwardRef(
|
|
|
3798
3805
|
});
|
|
3799
3806
|
}),
|
|
3800
3807
|
endElement && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3801
|
-
|
|
3808
|
+
gui.XStack,
|
|
3802
3809
|
{
|
|
3803
3810
|
ref: endElementRef,
|
|
3804
|
-
|
|
3805
|
-
|
|
3806
|
-
|
|
3807
|
-
|
|
3811
|
+
position: "absolute",
|
|
3812
|
+
top: 0,
|
|
3813
|
+
bottom: 0,
|
|
3814
|
+
right: 0,
|
|
3815
|
+
zIndex: 1,
|
|
3816
|
+
alignItems: "center",
|
|
3817
|
+
pointerEvents: "none",
|
|
3818
|
+
style: { color: "var(--color-icon-secondary)" },
|
|
3819
|
+
className: endClassName,
|
|
3808
3820
|
...endRest,
|
|
3809
|
-
children: endElement
|
|
3821
|
+
children: ink(endElement)
|
|
3810
3822
|
}
|
|
3811
3823
|
)
|
|
3812
3824
|
]
|
|
@@ -3815,20 +3827,26 @@ var InputGroup = React32__namespace.forwardRef(
|
|
|
3815
3827
|
}
|
|
3816
3828
|
);
|
|
3817
3829
|
InputGroup.displayName = "InputGroup";
|
|
3818
|
-
var
|
|
3819
|
-
|
|
3820
|
-
|
|
3821
|
-
|
|
3822
|
-
|
|
3823
|
-
|
|
3824
|
-
|
|
3825
|
-
|
|
3826
|
-
|
|
3827
|
-
|
|
3828
|
-
"
|
|
3829
|
-
|
|
3830
|
-
|
|
3831
|
-
|
|
3830
|
+
var BOX = {
|
|
3831
|
+
width: 40,
|
|
3832
|
+
height: 40,
|
|
3833
|
+
textAlign: "center",
|
|
3834
|
+
fontSize: 14,
|
|
3835
|
+
fontWeight: 500,
|
|
3836
|
+
borderRadius: 6,
|
|
3837
|
+
borderWidth: 2,
|
|
3838
|
+
borderStyle: "solid",
|
|
3839
|
+
outlineWidth: 0,
|
|
3840
|
+
backgroundColor: "var(--color-input-bg)",
|
|
3841
|
+
color: "var(--color-input-fg)",
|
|
3842
|
+
borderColor: "var(--color-input-border)",
|
|
3843
|
+
hoverStyle: { borderColor: "var(--color-input-border-hover)" },
|
|
3844
|
+
focusStyle: {
|
|
3845
|
+
borderColor: "var(--color-input-border-focus)",
|
|
3846
|
+
boxShadow: "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)"
|
|
3847
|
+
},
|
|
3848
|
+
disabledStyle: { opacity: 0.4 }
|
|
3849
|
+
};
|
|
3832
3850
|
var PinInput = React32__namespace.forwardRef(
|
|
3833
3851
|
function PinInput2(props, ref) {
|
|
3834
3852
|
const {
|
|
@@ -3920,8 +3938,8 @@ var PinInput = React32__namespace.forwardRef(
|
|
|
3920
3938
|
const onKeyDownAtIndex = React32__namespace.useCallback((index) => (e) => {
|
|
3921
3939
|
handleKeyDown(index, e);
|
|
3922
3940
|
}, [handleKeyDown]);
|
|
3923
|
-
const
|
|
3924
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3941
|
+
const boxBackground = bgColor ? `var(--color-${bgColor.replace(/\./g, "-")})` : BOX.backgroundColor;
|
|
3942
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(gui.XStack, { ref: rootRef, alignItems: "center", gap: attached ? 0 : 8, className, children: [
|
|
3925
3943
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3926
3944
|
"input",
|
|
3927
3945
|
{
|
|
@@ -3933,9 +3951,10 @@ var PinInput = React32__namespace.forwardRef(
|
|
|
3933
3951
|
}
|
|
3934
3952
|
),
|
|
3935
3953
|
Array.from({ length: count }).map((_, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
3936
|
-
|
|
3954
|
+
gui.Input,
|
|
3937
3955
|
{
|
|
3938
3956
|
ref: setInputRef(index),
|
|
3957
|
+
unstyled: true,
|
|
3939
3958
|
type: "text",
|
|
3940
3959
|
inputMode: "numeric",
|
|
3941
3960
|
autoComplete: otp ? "one-time-code" : "off",
|
|
@@ -3944,14 +3963,12 @@ var PinInput = React32__namespace.forwardRef(
|
|
|
3944
3963
|
placeholder,
|
|
3945
3964
|
disabled,
|
|
3946
3965
|
"aria-invalid": invalid || void 0,
|
|
3966
|
+
"data-invalid": invalid || void 0,
|
|
3947
3967
|
value: values[index] || "",
|
|
3948
|
-
className:
|
|
3949
|
-
|
|
3950
|
-
|
|
3951
|
-
|
|
3952
|
-
attached && index > 0 && "-ml-0.5"
|
|
3953
|
-
),
|
|
3954
|
-
style: bgStyle,
|
|
3968
|
+
className: "lux-control",
|
|
3969
|
+
...BOX,
|
|
3970
|
+
backgroundColor: boxBackground,
|
|
3971
|
+
marginLeft: attached && index > 0 ? -2 : void 0,
|
|
3955
3972
|
onInput: onInputAtIndex(index),
|
|
3956
3973
|
onKeyDown: onKeyDownAtIndex(index),
|
|
3957
3974
|
onPaste: handlePaste,
|
|
@@ -4279,11 +4296,11 @@ var Progress = React32__namespace.forwardRef(
|
|
|
4279
4296
|
}
|
|
4280
4297
|
);
|
|
4281
4298
|
var SIZE_MAP = {
|
|
4282
|
-
xs: { size: 24, thickness: 4,
|
|
4283
|
-
sm: { size: 32, thickness: 5,
|
|
4284
|
-
md: { size: 40, thickness: 6,
|
|
4285
|
-
lg: { size: 48, thickness: 7,
|
|
4286
|
-
xl: { size: 64, thickness: 8,
|
|
4299
|
+
xs: { size: 24, thickness: 4, fontSize: 10 },
|
|
4300
|
+
sm: { size: 32, thickness: 5, fontSize: 10 },
|
|
4301
|
+
md: { size: 40, thickness: 6, fontSize: 12 },
|
|
4302
|
+
lg: { size: 48, thickness: 7, fontSize: 14 },
|
|
4303
|
+
xl: { size: 64, thickness: 8, fontSize: 14 }
|
|
4287
4304
|
};
|
|
4288
4305
|
var Ctx = React32__namespace.createContext({
|
|
4289
4306
|
value: 0,
|
|
@@ -4304,16 +4321,18 @@ var ProgressCircleRoot = React32__namespace.forwardRef(function ProgressCircleRo
|
|
|
4304
4321
|
[value, size, colorPalette]
|
|
4305
4322
|
);
|
|
4306
4323
|
return /* @__PURE__ */ jsxRuntime.jsx(Ctx.Provider, { value: ctx, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
4307
|
-
|
|
4324
|
+
gui.View,
|
|
4308
4325
|
{
|
|
4309
4326
|
ref,
|
|
4310
4327
|
role: "progressbar",
|
|
4311
4328
|
"aria-valuenow": value ?? void 0,
|
|
4312
4329
|
"aria-valuemin": 0,
|
|
4313
4330
|
"aria-valuemax": 100,
|
|
4314
|
-
|
|
4331
|
+
position: "relative",
|
|
4332
|
+
style: { display: "inline-flex", fontSize: 14 },
|
|
4333
|
+
className,
|
|
4315
4334
|
...rest,
|
|
4316
|
-
children
|
|
4335
|
+
children: ink(children)
|
|
4317
4336
|
}
|
|
4318
4337
|
) });
|
|
4319
4338
|
});
|
|
@@ -4332,10 +4351,7 @@ var ProgressCircleRing = React32__namespace.forwardRef(function ProgressCircleRi
|
|
|
4332
4351
|
width: size,
|
|
4333
4352
|
height: size,
|
|
4334
4353
|
viewBox: `0 0 ${size} ${size}`,
|
|
4335
|
-
className: cn(
|
|
4336
|
-
value === null && "animate-spin",
|
|
4337
|
-
className
|
|
4338
|
-
),
|
|
4354
|
+
className: value === null ? cn("lux-spin", className) : className,
|
|
4339
4355
|
...rest,
|
|
4340
4356
|
children: [
|
|
4341
4357
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -4347,7 +4363,7 @@ var ProgressCircleRing = React32__namespace.forwardRef(function ProgressCircleRi
|
|
|
4347
4363
|
fill: "transparent",
|
|
4348
4364
|
strokeWidth: thickness,
|
|
4349
4365
|
stroke: trackColor ?? "currentColor",
|
|
4350
|
-
|
|
4366
|
+
opacity: !trackColor ? 0.2 : void 0
|
|
4351
4367
|
}
|
|
4352
4368
|
),
|
|
4353
4369
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -4377,20 +4393,30 @@ var ProgressCircleRing = React32__namespace.forwardRef(function ProgressCircleRi
|
|
|
4377
4393
|
var ProgressCircleValueText = React32__namespace.forwardRef(function ProgressCircleValueText2(props, ref) {
|
|
4378
4394
|
const { className, children, ...rest } = props;
|
|
4379
4395
|
const { value, size: sizeKey } = React32__namespace.useContext(Ctx);
|
|
4380
|
-
const {
|
|
4396
|
+
const { fontSize } = SIZE_MAP[sizeKey];
|
|
4381
4397
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
4382
|
-
|
|
4398
|
+
gui.View,
|
|
4383
4399
|
{
|
|
4384
4400
|
ref,
|
|
4385
4401
|
"aria-live": "polite",
|
|
4386
|
-
|
|
4387
|
-
|
|
4388
|
-
|
|
4389
|
-
|
|
4390
|
-
|
|
4391
|
-
|
|
4402
|
+
position: "absolute",
|
|
4403
|
+
top: 0,
|
|
4404
|
+
left: 0,
|
|
4405
|
+
right: 0,
|
|
4406
|
+
bottom: 0,
|
|
4407
|
+
display: "flex",
|
|
4408
|
+
alignItems: "center",
|
|
4409
|
+
justifyContent: "center",
|
|
4410
|
+
style: {
|
|
4411
|
+
fontWeight: 500,
|
|
4412
|
+
fontSize,
|
|
4413
|
+
lineHeight: `${fontSize}px`,
|
|
4414
|
+
letterSpacing: fontSize * -0.025,
|
|
4415
|
+
fontVariantNumeric: "tabular-nums"
|
|
4416
|
+
},
|
|
4417
|
+
className,
|
|
4392
4418
|
...rest,
|
|
4393
|
-
children: children ?? `${Math.round(value ?? 0)}%`
|
|
4419
|
+
children: ink(children ?? `${Math.round(value ?? 0)}%`)
|
|
4394
4420
|
}
|
|
4395
4421
|
);
|
|
4396
4422
|
});
|
|
@@ -4432,7 +4458,6 @@ var RadioGroupBase = React32__namespace.forwardRef(
|
|
|
4432
4458
|
gui.RadioGroup,
|
|
4433
4459
|
{
|
|
4434
4460
|
ref,
|
|
4435
|
-
unstyled: true,
|
|
4436
4461
|
name,
|
|
4437
4462
|
required,
|
|
4438
4463
|
disabled: disabled || readOnly,
|
|
@@ -4510,8 +4535,8 @@ var RadioBase = React32__namespace.forwardRef(
|
|
|
4510
4535
|
}
|
|
4511
4536
|
);
|
|
4512
4537
|
var Radio2 = RadioBase;
|
|
4513
|
-
var StarFilledIcon = (
|
|
4514
|
-
var StarOutlineIcon = (
|
|
4538
|
+
var StarFilledIcon = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { width: 20, height: 20, viewBox: "0 0 20 20", fill: "currentColor", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" }) });
|
|
4539
|
+
var StarOutlineIcon = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { width: 20, height: 20, viewBox: "0 0 20 20", fill: "none", stroke: "currentColor", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z", strokeWidth: "1.5" }) });
|
|
4515
4540
|
var Rating = React32__namespace.forwardRef(
|
|
4516
4541
|
function Rating2(props, ref) {
|
|
4517
4542
|
const { count = 5, label: labelProp, defaultValue = 0, onValueChange, readOnly, className, ...rest } = props;
|
|
@@ -4531,28 +4556,30 @@ var Rating = React32__namespace.forwardRef(
|
|
|
4531
4556
|
const handleMouseLeave = React32__namespace.useCallback(() => {
|
|
4532
4557
|
setHoveredIndex(-1);
|
|
4533
4558
|
}, []);
|
|
4534
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4535
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4559
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(gui.XStack, { ref, display: "inline-flex", alignItems: "center", gap: 4, className, ...rest, children: [
|
|
4560
|
+
/* @__PURE__ */ jsxRuntime.jsx(gui.XStack, { display: "inline-flex", alignItems: "center", onMouseLeave: handleMouseLeave, children: Array.from({ length: count }).map((_, index) => {
|
|
4536
4561
|
const filled = index < highlightedIndex;
|
|
4537
4562
|
const starIndex = index + 1;
|
|
4538
4563
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
4539
|
-
|
|
4564
|
+
gui.View,
|
|
4540
4565
|
{
|
|
4541
|
-
type: "button",
|
|
4566
|
+
render: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button" }),
|
|
4542
4567
|
tabIndex: readOnly ? -1 : 0,
|
|
4543
4568
|
"aria-label": `Rate ${starIndex} of ${count}`,
|
|
4544
|
-
|
|
4545
|
-
|
|
4546
|
-
|
|
4547
|
-
|
|
4569
|
+
display: "inline-flex",
|
|
4570
|
+
alignItems: "center",
|
|
4571
|
+
justifyContent: "center",
|
|
4572
|
+
width: 20,
|
|
4573
|
+
height: 20,
|
|
4574
|
+
cursor: readOnly ? "default" : "pointer",
|
|
4548
4575
|
onClick: handleClick(starIndex),
|
|
4549
4576
|
onMouseEnter: handleMouseEnter(index),
|
|
4550
|
-
children: filled ? /* @__PURE__ */ jsxRuntime.jsx(StarFilledIcon, {
|
|
4577
|
+
children: filled ? /* @__PURE__ */ jsxRuntime.jsx(StarFilledIcon, {}) : /* @__PURE__ */ jsxRuntime.jsx(StarOutlineIcon, {})
|
|
4551
4578
|
},
|
|
4552
4579
|
index
|
|
4553
4580
|
);
|
|
4554
4581
|
}) }),
|
|
4555
|
-
label && /* @__PURE__ */ jsxRuntime.jsx(
|
|
4582
|
+
label && /* @__PURE__ */ jsxRuntime.jsx(gui.Text, { fontSize: 14, children: label })
|
|
4556
4583
|
] });
|
|
4557
4584
|
}
|
|
4558
4585
|
);
|
|
@@ -5035,7 +5062,6 @@ var Slider = React32__namespace.forwardRef(
|
|
|
5035
5062
|
gui.Slider,
|
|
5036
5063
|
{
|
|
5037
5064
|
ref,
|
|
5038
|
-
unstyled: true,
|
|
5039
5065
|
position: "relative",
|
|
5040
5066
|
flexDirection: "row",
|
|
5041
5067
|
width: "100%",
|
|
@@ -5785,21 +5811,24 @@ var Tag = React32__namespace.forwardRef(
|
|
|
5785
5811
|
":",
|
|
5786
5812
|
nbsp
|
|
5787
5813
|
] }) : null;
|
|
5788
|
-
const labelSpan =
|
|
5789
|
-
|
|
5790
|
-
|
|
5791
|
-
|
|
5792
|
-
|
|
5793
|
-
|
|
5794
|
-
|
|
5795
|
-
|
|
5796
|
-
|
|
5797
|
-
|
|
5798
|
-
|
|
5799
|
-
|
|
5800
|
-
children
|
|
5801
|
-
|
|
5802
|
-
|
|
5814
|
+
const labelSpan = (
|
|
5815
|
+
// `ellipsis` is Text's own built-in single-line-truncation variant —
|
|
5816
|
+
// the same rule Tailwind's `line-clamp-1`/`text-ellipsis` drew, through
|
|
5817
|
+
// the component's variants rather than three separate style props.
|
|
5818
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
5819
|
+
gui.Text,
|
|
5820
|
+
{
|
|
5821
|
+
ellipsis: true,
|
|
5822
|
+
fontWeight: "500",
|
|
5823
|
+
fontSize: TAG_SIZE_FONT[resolvedSize],
|
|
5824
|
+
color,
|
|
5825
|
+
hoverStyle: textHoverColor ? { color: textHoverColor } : void 0,
|
|
5826
|
+
children: [
|
|
5827
|
+
labelElement,
|
|
5828
|
+
children
|
|
5829
|
+
]
|
|
5830
|
+
}
|
|
5831
|
+
)
|
|
5803
5832
|
);
|
|
5804
5833
|
const contentElement = truncated ? /* @__PURE__ */ jsxRuntime.jsx(TruncatedTextTooltip2, { label: children, children: labelSpan }) : labelSpan;
|
|
5805
5834
|
return /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { loading, asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -6385,84 +6414,145 @@ var STRATEGY_PRESETS = [
|
|
|
6385
6414
|
]
|
|
6386
6415
|
}
|
|
6387
6416
|
];
|
|
6417
|
+
var MONO = "monospace";
|
|
6418
|
+
var CONTROL_BOX = {
|
|
6419
|
+
backgroundColor: "var(--color-input-bg)",
|
|
6420
|
+
borderWidth: 1,
|
|
6421
|
+
borderColor: "var(--color-input-border)",
|
|
6422
|
+
outlineWidth: 0,
|
|
6423
|
+
focusStyle: { borderColor: "var(--color-input-border-focus)" }
|
|
6424
|
+
};
|
|
6425
|
+
var CONTROL_INK = { color: "var(--color-input-fg)" };
|
|
6388
6426
|
function LegRow({ leg, index, strikes, expirations, removable, onChange, onRemove }) {
|
|
6389
6427
|
const update2 = (patch) => {
|
|
6390
6428
|
onChange(index, { ...leg, ...patch });
|
|
6391
6429
|
};
|
|
6392
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6393
|
-
|
|
6394
|
-
|
|
6395
|
-
"
|
|
6396
|
-
|
|
6397
|
-
|
|
6398
|
-
|
|
6399
|
-
|
|
6400
|
-
|
|
6430
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6431
|
+
gui.XStack,
|
|
6432
|
+
{
|
|
6433
|
+
alignItems: "center",
|
|
6434
|
+
gap: 8,
|
|
6435
|
+
borderRadius: 6,
|
|
6436
|
+
backgroundColor: "var(--color-tag-subtle-bg)",
|
|
6437
|
+
paddingHorizontal: 8,
|
|
6438
|
+
paddingVertical: 6,
|
|
6439
|
+
children: [
|
|
6440
|
+
/* @__PURE__ */ jsxRuntime.jsx(gui.Text, { fontSize: 10, style: { fontFamily: MONO }, flexShrink: 0, width: 16, color: "var(--color-text-secondary)", children: index + 1 }),
|
|
6441
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6442
|
+
gui.XStack,
|
|
6443
|
+
{
|
|
6444
|
+
unstyled: true,
|
|
6445
|
+
render: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button" }),
|
|
6446
|
+
onClick: () => update2({ action: leg.action === "buy" ? "sell" : "buy" }),
|
|
6447
|
+
paddingHorizontal: 8,
|
|
6448
|
+
paddingVertical: 2,
|
|
6449
|
+
borderRadius: 4,
|
|
6450
|
+
borderWidth: 0,
|
|
6451
|
+
cursor: "pointer",
|
|
6452
|
+
transition: "quick",
|
|
6453
|
+
backgroundColor: leg.action === "buy" ? "color-mix(in srgb, var(--color-status-good) 20%, transparent)" : "color-mix(in srgb, var(--color-status-bad) 20%, transparent)",
|
|
6454
|
+
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" })
|
|
6455
|
+
}
|
|
6401
6456
|
),
|
|
6402
|
-
|
|
6403
|
-
|
|
6404
|
-
|
|
6405
|
-
|
|
6406
|
-
|
|
6407
|
-
|
|
6408
|
-
|
|
6409
|
-
|
|
6410
|
-
|
|
6411
|
-
|
|
6412
|
-
|
|
6413
|
-
|
|
6457
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6458
|
+
gui.XStack,
|
|
6459
|
+
{
|
|
6460
|
+
unstyled: true,
|
|
6461
|
+
render: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button" }),
|
|
6462
|
+
onClick: () => update2({ type: leg.type === "call" ? "put" : "call" }),
|
|
6463
|
+
paddingHorizontal: 8,
|
|
6464
|
+
paddingVertical: 2,
|
|
6465
|
+
borderRadius: 4,
|
|
6466
|
+
borderWidth: 0,
|
|
6467
|
+
cursor: "pointer",
|
|
6468
|
+
transition: "quick",
|
|
6469
|
+
backgroundColor: leg.type === "call" ? "var(--secondary)" : "var(--muted)",
|
|
6470
|
+
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" })
|
|
6471
|
+
}
|
|
6414
6472
|
),
|
|
6415
|
-
|
|
6416
|
-
|
|
6417
|
-
|
|
6418
|
-
|
|
6419
|
-
|
|
6420
|
-
|
|
6421
|
-
|
|
6422
|
-
|
|
6423
|
-
|
|
6424
|
-
|
|
6425
|
-
|
|
6426
|
-
|
|
6427
|
-
|
|
6428
|
-
|
|
6429
|
-
|
|
6430
|
-
|
|
6431
|
-
|
|
6432
|
-
|
|
6433
|
-
|
|
6434
|
-
|
|
6435
|
-
|
|
6436
|
-
|
|
6437
|
-
|
|
6438
|
-
|
|
6439
|
-
|
|
6440
|
-
|
|
6441
|
-
|
|
6442
|
-
|
|
6443
|
-
|
|
6444
|
-
|
|
6445
|
-
|
|
6446
|
-
|
|
6447
|
-
|
|
6448
|
-
|
|
6449
|
-
|
|
6450
|
-
|
|
6451
|
-
|
|
6452
|
-
|
|
6453
|
-
|
|
6454
|
-
|
|
6455
|
-
|
|
6456
|
-
|
|
6457
|
-
|
|
6458
|
-
|
|
6459
|
-
|
|
6460
|
-
|
|
6461
|
-
|
|
6462
|
-
|
|
6463
|
-
|
|
6464
|
-
|
|
6465
|
-
|
|
6473
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6474
|
+
gui.View,
|
|
6475
|
+
{
|
|
6476
|
+
unstyled: true,
|
|
6477
|
+
render: /* @__PURE__ */ jsxRuntime.jsx("select", { value: leg.strike, onChange: (e) => update2({ strike: Number(e.target.value) }) }),
|
|
6478
|
+
...CONTROL_BOX,
|
|
6479
|
+
borderRadius: 4,
|
|
6480
|
+
paddingHorizontal: 6,
|
|
6481
|
+
paddingVertical: 2,
|
|
6482
|
+
minWidth: 72,
|
|
6483
|
+
style: { ...CONTROL_INK, fontFamily: MONO, fontSize: 12 },
|
|
6484
|
+
children: strikes.map((s) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: s, children: s.toFixed(2) }, s))
|
|
6485
|
+
}
|
|
6486
|
+
),
|
|
6487
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6488
|
+
gui.View,
|
|
6489
|
+
{
|
|
6490
|
+
unstyled: true,
|
|
6491
|
+
render: /* @__PURE__ */ jsxRuntime.jsx("select", { value: leg.expiration, onChange: (e) => update2({ expiration: e.target.value }) }),
|
|
6492
|
+
...CONTROL_BOX,
|
|
6493
|
+
borderRadius: 4,
|
|
6494
|
+
paddingHorizontal: 6,
|
|
6495
|
+
paddingVertical: 2,
|
|
6496
|
+
minWidth: 80,
|
|
6497
|
+
style: { ...CONTROL_INK, fontSize: 12 },
|
|
6498
|
+
children: expirations.map((exp) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: exp, children: exp }, exp))
|
|
6499
|
+
}
|
|
6500
|
+
),
|
|
6501
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6502
|
+
gui.View,
|
|
6503
|
+
{
|
|
6504
|
+
unstyled: true,
|
|
6505
|
+
render: /* @__PURE__ */ jsxRuntime.jsx(
|
|
6506
|
+
"input",
|
|
6507
|
+
{
|
|
6508
|
+
type: "number",
|
|
6509
|
+
min: 1,
|
|
6510
|
+
max: 999,
|
|
6511
|
+
value: leg.quantity,
|
|
6512
|
+
onChange: (e) => update2({ quantity: Math.max(1, parseInt(e.target.value, 10) || 1) })
|
|
6513
|
+
}
|
|
6514
|
+
),
|
|
6515
|
+
...CONTROL_BOX,
|
|
6516
|
+
borderRadius: 4,
|
|
6517
|
+
paddingHorizontal: 6,
|
|
6518
|
+
paddingVertical: 2,
|
|
6519
|
+
width: 48,
|
|
6520
|
+
style: { ...CONTROL_INK, fontFamily: MONO, fontSize: 12, textAlign: "center" }
|
|
6521
|
+
}
|
|
6522
|
+
),
|
|
6523
|
+
leg.premium !== void 0 && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6524
|
+
gui.Text,
|
|
6525
|
+
{
|
|
6526
|
+
fontSize: 12,
|
|
6527
|
+
style: { fontFamily: MONO },
|
|
6528
|
+
fontVariant: ["tabular-nums"],
|
|
6529
|
+
marginLeft: "auto",
|
|
6530
|
+
color: leg.premium >= 0 ? "var(--color-status-good)" : "var(--color-status-bad)",
|
|
6531
|
+
children: [
|
|
6532
|
+
leg.premium >= 0 ? "+" : "",
|
|
6533
|
+
leg.premium.toFixed(2)
|
|
6534
|
+
]
|
|
6535
|
+
}
|
|
6536
|
+
),
|
|
6537
|
+
removable && /* @__PURE__ */ jsxRuntime.jsx(
|
|
6538
|
+
gui.XStack,
|
|
6539
|
+
{
|
|
6540
|
+
unstyled: true,
|
|
6541
|
+
render: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", "aria-label": "Remove leg" }),
|
|
6542
|
+
onClick: () => onRemove(index),
|
|
6543
|
+
marginLeft: "auto",
|
|
6544
|
+
padding: 2,
|
|
6545
|
+
borderWidth: 0,
|
|
6546
|
+
cursor: "pointer",
|
|
6547
|
+
transition: "quick",
|
|
6548
|
+
style: { color: "var(--color-text-secondary)" },
|
|
6549
|
+
hoverStyle: { opacity: 0.7 },
|
|
6550
|
+
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" }) })
|
|
6551
|
+
}
|
|
6552
|
+
)
|
|
6553
|
+
]
|
|
6554
|
+
}
|
|
6555
|
+
);
|
|
6466
6556
|
}
|
|
6467
6557
|
var StrategyBuilder = React32__namespace.forwardRef(
|
|
6468
6558
|
function StrategyBuilder2(props, ref) {
|
|
@@ -6532,37 +6622,46 @@ var StrategyBuilder = React32__namespace.forwardRef(
|
|
|
6532
6622
|
});
|
|
6533
6623
|
}, [onSubmit, strategyType, legs, netPremium]);
|
|
6534
6624
|
const currentPreset = STRATEGY_PRESETS.find((p) => p.value === strategyType);
|
|
6625
|
+
const netColor = netPremium > 0 ? "var(--color-status-good)" : netPremium < 0 ? "var(--color-status-bad)" : "var(--color-text-secondary)";
|
|
6535
6626
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6536
|
-
|
|
6627
|
+
gui.YStack,
|
|
6537
6628
|
{
|
|
6538
6629
|
ref,
|
|
6539
|
-
|
|
6540
|
-
|
|
6541
|
-
|
|
6542
|
-
),
|
|
6630
|
+
gap: 12,
|
|
6631
|
+
borderRadius: 8,
|
|
6632
|
+
borderWidth: 1,
|
|
6633
|
+
borderColor: "var(--color-border-divider)",
|
|
6634
|
+
backgroundColor: "var(--card)",
|
|
6635
|
+
padding: 12,
|
|
6636
|
+
className,
|
|
6543
6637
|
...rest,
|
|
6544
6638
|
children: [
|
|
6545
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
6546
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
6547
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6548
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6639
|
+
/* @__PURE__ */ jsxRuntime.jsxs(gui.XStack, { alignItems: "center", justifyContent: "space-between", gap: 12, children: [
|
|
6640
|
+
/* @__PURE__ */ jsxRuntime.jsxs(gui.XStack, { alignItems: "center", gap: 8, children: [
|
|
6641
|
+
/* @__PURE__ */ jsxRuntime.jsx(gui.Text, { fontSize: 12, fontWeight: "600", textTransform: "uppercase", letterSpacing: 0.6, color: "var(--color-text-secondary)", children: "Strategy" }),
|
|
6642
|
+
/* @__PURE__ */ jsxRuntime.jsx(gui.Text, { fontSize: 14, fontWeight: "500", color: "var(--color-text-primary)", children: underlying })
|
|
6549
6643
|
] }),
|
|
6550
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
6644
|
+
/* @__PURE__ */ jsxRuntime.jsxs(gui.Text, { fontSize: 10, color: "var(--color-text-secondary)", children: [
|
|
6551
6645
|
"Spot: ",
|
|
6552
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6646
|
+
/* @__PURE__ */ jsxRuntime.jsx(gui.Text, { style: { fontFamily: MONO }, fontVariant: ["tabular-nums"], color: "var(--color-text-primary)", children: spotPrice.toFixed(2) })
|
|
6553
6647
|
] })
|
|
6554
6648
|
] }),
|
|
6555
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6556
|
-
|
|
6649
|
+
/* @__PURE__ */ jsxRuntime.jsx(gui.XStack, { alignItems: "center", gap: 8, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
6650
|
+
gui.View,
|
|
6557
6651
|
{
|
|
6558
|
-
|
|
6559
|
-
onChange: handleStrategyChange,
|
|
6560
|
-
|
|
6652
|
+
unstyled: true,
|
|
6653
|
+
render: /* @__PURE__ */ jsxRuntime.jsx("select", { value: strategyType, onChange: handleStrategyChange }),
|
|
6654
|
+
flex: 1,
|
|
6655
|
+
...CONTROL_BOX,
|
|
6656
|
+
borderRadius: 6,
|
|
6657
|
+
paddingHorizontal: 10,
|
|
6658
|
+
paddingVertical: 6,
|
|
6659
|
+
style: { ...CONTROL_INK, fontSize: 14 },
|
|
6561
6660
|
children: STRATEGY_PRESETS.map((preset) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: preset.value, children: preset.label }, preset.value))
|
|
6562
6661
|
}
|
|
6563
6662
|
) }),
|
|
6564
|
-
currentPreset && /* @__PURE__ */ jsxRuntime.jsx(
|
|
6565
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6663
|
+
currentPreset && /* @__PURE__ */ jsxRuntime.jsx(gui.Text, { fontSize: 11, marginTop: -4, color: "var(--color-text-secondary)", children: currentPreset.description }),
|
|
6664
|
+
/* @__PURE__ */ jsxRuntime.jsx(gui.YStack, { gap: 6, children: legs.map((leg, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
6566
6665
|
LegRow,
|
|
6567
6666
|
{
|
|
6568
6667
|
leg,
|
|
@@ -6576,40 +6675,53 @@ var StrategyBuilder = React32__namespace.forwardRef(
|
|
|
6576
6675
|
i
|
|
6577
6676
|
)) }),
|
|
6578
6677
|
strategyType === "custom" && legs.length < 4 && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6579
|
-
|
|
6678
|
+
gui.XStack,
|
|
6580
6679
|
{
|
|
6581
|
-
|
|
6680
|
+
unstyled: true,
|
|
6681
|
+
render: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button" }),
|
|
6582
6682
|
onClick: handleAddLeg,
|
|
6583
|
-
|
|
6683
|
+
alignItems: "center",
|
|
6684
|
+
justifyContent: "center",
|
|
6685
|
+
gap: 4,
|
|
6686
|
+
borderRadius: 6,
|
|
6687
|
+
borderWidth: 1,
|
|
6688
|
+
paddingVertical: 4,
|
|
6689
|
+
cursor: "pointer",
|
|
6690
|
+
transition: "quick",
|
|
6691
|
+
borderColor: "var(--color-border-divider)",
|
|
6692
|
+
hoverStyle: { borderColor: "var(--color-hover)" },
|
|
6693
|
+
style: { color: "var(--color-text-secondary)", borderStyle: "dashed" },
|
|
6584
6694
|
children: [
|
|
6585
|
-
/* @__PURE__ */ jsxRuntime.jsx("svg", {
|
|
6586
|
-
"Add Leg"
|
|
6695
|
+
/* @__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" }) }),
|
|
6696
|
+
/* @__PURE__ */ jsxRuntime.jsx(gui.Text, { fontSize: 12, color: "var(--color-text-secondary)", children: "Add Leg" })
|
|
6587
6697
|
]
|
|
6588
6698
|
}
|
|
6589
6699
|
),
|
|
6590
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
6591
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
6592
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6593
|
-
/* @__PURE__ */ jsxRuntime.jsxs("
|
|
6594
|
-
"font-mono tabular-nums text-sm font-semibold",
|
|
6595
|
-
netPremium > 0 ? "text-emerald-400" : netPremium < 0 ? "text-red-400" : "text-zinc-400"
|
|
6596
|
-
), children: [
|
|
6700
|
+
/* @__PURE__ */ jsxRuntime.jsxs(gui.XStack, { alignItems: "center", justifyContent: "space-between", paddingTop: 4, borderTopWidth: 1, borderColor: "var(--color-border-divider)", children: [
|
|
6701
|
+
/* @__PURE__ */ jsxRuntime.jsxs(gui.XStack, { alignItems: "center", gap: 8, children: [
|
|
6702
|
+
/* @__PURE__ */ jsxRuntime.jsx(gui.Text, { fontSize: 12, color: "var(--color-text-secondary)", children: "Net:" }),
|
|
6703
|
+
/* @__PURE__ */ jsxRuntime.jsxs(gui.Text, { fontSize: 14, fontWeight: "600", style: { fontFamily: MONO }, fontVariant: ["tabular-nums"], color: netColor, children: [
|
|
6597
6704
|
netPremium > 0 ? "Credit " : netPremium < 0 ? "Debit " : "",
|
|
6598
6705
|
netPremium !== 0 ? `$${Math.abs(netPremium).toFixed(2)}` : "-"
|
|
6599
6706
|
] })
|
|
6600
6707
|
] }),
|
|
6601
6708
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6602
|
-
|
|
6709
|
+
gui.XStack,
|
|
6603
6710
|
{
|
|
6604
|
-
|
|
6711
|
+
unstyled: true,
|
|
6712
|
+
render: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button" }),
|
|
6605
6713
|
onClick: handleSubmit,
|
|
6606
6714
|
disabled: legs.length === 0,
|
|
6607
|
-
|
|
6608
|
-
|
|
6609
|
-
|
|
6610
|
-
|
|
6611
|
-
|
|
6612
|
-
|
|
6715
|
+
paddingHorizontal: 16,
|
|
6716
|
+
paddingVertical: 6,
|
|
6717
|
+
borderRadius: 6,
|
|
6718
|
+
borderWidth: 0,
|
|
6719
|
+
cursor: "pointer",
|
|
6720
|
+
transition: "quick",
|
|
6721
|
+
backgroundColor: "var(--color-button-solid-bg)",
|
|
6722
|
+
hoverStyle: { backgroundColor: "var(--color-hover)" },
|
|
6723
|
+
disabledStyle: { opacity: 0.4, cursor: "not-allowed" },
|
|
6724
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(gui.Text, { fontSize: 12, fontWeight: "600", color: "var(--color-button-solid-text)", children: "Review Order" })
|
|
6613
6725
|
}
|
|
6614
6726
|
)
|
|
6615
6727
|
] })
|
|
@@ -7048,7 +7160,7 @@ function formatDate(date) {
|
|
|
7048
7160
|
const d = new Date(date);
|
|
7049
7161
|
return d.toLocaleDateString("en-US", { month: "short", day: "numeric" });
|
|
7050
7162
|
}
|
|
7051
|
-
var
|
|
7163
|
+
var MONO2 = { fontFamily: "monospace" };
|
|
7052
7164
|
var OptionPositionCard = React32__namespace.forwardRef(
|
|
7053
7165
|
function OptionPositionCard2(props, ref) {
|
|
7054
7166
|
const {
|
|
@@ -7088,7 +7200,7 @@ var OptionPositionCard = React32__namespace.forwardRef(
|
|
|
7088
7200
|
backgroundColor: isCall ? "var(--secondary)" : "var(--muted)",
|
|
7089
7201
|
children: [
|
|
7090
7202
|
/* @__PURE__ */ jsxRuntime.jsx(gui.Text, { fontSize: 12, fontWeight: "600", color: isCall ? "var(--foreground)" : "var(--muted-foreground)", children: position.underlying }),
|
|
7091
|
-
/* @__PURE__ */ jsxRuntime.jsx(gui.Text, { fontSize: 12, fontWeight: "600", style:
|
|
7203
|
+
/* @__PURE__ */ jsxRuntime.jsx(gui.Text, { fontSize: 12, fontWeight: "600", style: MONO2, fontVariant: ["tabular-nums"], color: isCall ? "var(--foreground)" : "var(--muted-foreground)", children: position.strike }),
|
|
7092
7204
|
/* @__PURE__ */ jsxRuntime.jsx(gui.Text, { fontSize: 12, fontWeight: "600", textTransform: "uppercase", color: isCall ? "var(--foreground)" : "var(--muted-foreground)", children: position.type === "call" ? "C" : "P" }),
|
|
7093
7205
|
/* @__PURE__ */ jsxRuntime.jsx(gui.Text, { fontSize: 12, fontWeight: "400", color: "var(--color-text-secondary)", children: formatDate(position.expiration) })
|
|
7094
7206
|
]
|
|
@@ -7099,7 +7211,7 @@ var OptionPositionCard = React32__namespace.forwardRef(
|
|
|
7099
7211
|
{
|
|
7100
7212
|
fontSize: 12,
|
|
7101
7213
|
fontWeight: "600",
|
|
7102
|
-
style:
|
|
7214
|
+
style: MONO2,
|
|
7103
7215
|
fontVariant: ["tabular-nums"],
|
|
7104
7216
|
color: isLong ? "var(--color-status-good)" : "var(--color-status-bad)",
|
|
7105
7217
|
children: [
|
|
@@ -7112,14 +7224,14 @@ var OptionPositionCard = React32__namespace.forwardRef(
|
|
|
7112
7224
|
/* @__PURE__ */ jsxRuntime.jsxs(gui.XStack, { gap: 12, children: [
|
|
7113
7225
|
/* @__PURE__ */ jsxRuntime.jsxs(gui.YStack, { flex: 1, gap: 2, children: [
|
|
7114
7226
|
/* @__PURE__ */ jsxRuntime.jsx(gui.Text, { fontSize: 10, textTransform: "uppercase", letterSpacing: 0.5, color: "var(--color-text-secondary)", children: "Avg Cost" }),
|
|
7115
|
-
/* @__PURE__ */ jsxRuntime.jsxs(gui.Text, { fontSize: 12, style:
|
|
7227
|
+
/* @__PURE__ */ jsxRuntime.jsxs(gui.Text, { fontSize: 12, style: MONO2, fontVariant: ["tabular-nums"], color: "var(--color-text-primary)", children: [
|
|
7116
7228
|
"$",
|
|
7117
7229
|
position.avgCost.toFixed(2)
|
|
7118
7230
|
] })
|
|
7119
7231
|
] }),
|
|
7120
7232
|
/* @__PURE__ */ jsxRuntime.jsxs(gui.YStack, { flex: 1, gap: 2, children: [
|
|
7121
7233
|
/* @__PURE__ */ jsxRuntime.jsx(gui.Text, { fontSize: 10, textTransform: "uppercase", letterSpacing: 0.5, color: "var(--color-text-secondary)", children: "Value" }),
|
|
7122
|
-
/* @__PURE__ */ jsxRuntime.jsxs(gui.Text, { fontSize: 12, style:
|
|
7234
|
+
/* @__PURE__ */ jsxRuntime.jsxs(gui.Text, { fontSize: 12, style: MONO2, fontVariant: ["tabular-nums"], color: "var(--color-text-primary)", children: [
|
|
7123
7235
|
"$",
|
|
7124
7236
|
position.currentValue.toFixed(2)
|
|
7125
7237
|
] })
|
|
@@ -7127,11 +7239,11 @@ var OptionPositionCard = React32__namespace.forwardRef(
|
|
|
7127
7239
|
/* @__PURE__ */ jsxRuntime.jsxs(gui.YStack, { flex: 1, gap: 2, alignItems: "flex-end", children: [
|
|
7128
7240
|
/* @__PURE__ */ jsxRuntime.jsx(gui.Text, { fontSize: 10, textTransform: "uppercase", letterSpacing: 0.5, color: "var(--color-text-secondary)", children: "P/L" }),
|
|
7129
7241
|
/* @__PURE__ */ jsxRuntime.jsxs(gui.XStack, { alignItems: "center", gap: 4, children: [
|
|
7130
|
-
/* @__PURE__ */ jsxRuntime.jsxs(gui.Text, { fontSize: 12, fontWeight: "600", style:
|
|
7242
|
+
/* @__PURE__ */ jsxRuntime.jsxs(gui.Text, { fontSize: 12, fontWeight: "600", style: MONO2, fontVariant: ["tabular-nums"], color: pnlColor, children: [
|
|
7131
7243
|
isProfitable ? "+" : "",
|
|
7132
7244
|
position.pnl.toFixed(2)
|
|
7133
7245
|
] }),
|
|
7134
|
-
/* @__PURE__ */ jsxRuntime.jsxs(gui.Text, { fontSize: 10, style:
|
|
7246
|
+
/* @__PURE__ */ jsxRuntime.jsxs(gui.Text, { fontSize: 10, style: MONO2, fontVariant: ["tabular-nums"], color: pnlColor, opacity: 0.7, children: [
|
|
7135
7247
|
"(",
|
|
7136
7248
|
isProfitable ? "+" : "",
|
|
7137
7249
|
position.pnlPercent.toFixed(1),
|
|
@@ -7180,7 +7292,7 @@ function ActionButton({ onClick, children }) {
|
|
|
7180
7292
|
function GreekPill({ label, value, color }) {
|
|
7181
7293
|
return /* @__PURE__ */ jsxRuntime.jsxs(gui.XStack, { alignItems: "center", gap: 4, children: [
|
|
7182
7294
|
/* @__PURE__ */ jsxRuntime.jsx(gui.Text, { fontSize: 10, fontWeight: "600", color, children: label }),
|
|
7183
|
-
/* @__PURE__ */ jsxRuntime.jsx(gui.Text, { fontSize: 11, style:
|
|
7295
|
+
/* @__PURE__ */ jsxRuntime.jsx(gui.Text, { fontSize: 11, style: MONO2, fontVariant: ["tabular-nums"], color: value < 0 ? "var(--color-status-bad)" : "var(--color-text-secondary)", children: value.toFixed(4) })
|
|
7184
7296
|
] });
|
|
7185
7297
|
}
|
|
7186
7298
|
function formatExpDate(date) {
|