@trading-game/design-intelligence-layer 1.0.1 → 1.0.2
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/AGENTS.md +7 -5
- package/README.md +5 -5
- package/dist/index.cjs +934 -367
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +84 -14
- package/dist/index.d.ts +84 -14
- package/dist/index.js +948 -384
- package/dist/index.js.map +1 -1
- package/docs/components/bottom-navigation.md +1 -1
- package/docs/components/breadcrumb.md +1 -1
- package/docs/components/calendar.md +7 -7
- package/docs/components/card.md +2 -2
- package/docs/components/dialog.md +3 -3
- package/docs/components/empty.md +1 -1
- package/docs/components/input-otp.md +3 -3
- package/docs/components/item.md +1 -1
- package/docs/components/link.md +1 -1
- package/docs/components/navigation-button.md +2 -2
- package/docs/components/progress.md +42 -25
- package/docs/components/radio-group.md +1 -1
- package/docs/components/select.md +1 -1
- package/docs/components/sheet.md +2 -2
- package/docs/components/slide-to-confirm.md +68 -0
- package/docs/components/stepper.md +29 -37
- package/docs/components/steps.md +77 -0
- package/docs/components/switch.md +1 -1
- package/docs/components/tabs.md +1 -1
- package/docs/components/toggle.md +46 -13
- package/docs/foundations/colors.md +1 -1
- package/docs/foundations/shape-layout.md +1 -1
- package/docs/patterns/forms.md +1 -1
- package/package.json +3 -2
- package/src/styles.css +154 -9
- package/docs/components/toggle-group.md +0 -77
package/dist/index.cjs
CHANGED
|
@@ -319,9 +319,12 @@ __export(index_exports, {
|
|
|
319
319
|
SidebarSeparator: () => SidebarSeparator,
|
|
320
320
|
SidebarTrigger: () => SidebarTrigger,
|
|
321
321
|
Skeleton: () => Skeleton,
|
|
322
|
+
SlideToConfirm: () => SlideToConfirm,
|
|
322
323
|
Slider: () => Slider,
|
|
323
324
|
Spinner: () => Spinner,
|
|
325
|
+
Step: () => Step,
|
|
324
326
|
Stepper: () => Stepper,
|
|
327
|
+
Steps: () => Steps,
|
|
325
328
|
Switch: () => Switch,
|
|
326
329
|
Table: () => Table,
|
|
327
330
|
TableBody: () => TableBody,
|
|
@@ -632,7 +635,7 @@ var navigationButtonVariants = (0, import_class_variance_authority2.cva)(
|
|
|
632
635
|
{
|
|
633
636
|
variants: {
|
|
634
637
|
variant: {
|
|
635
|
-
default: "bg-
|
|
638
|
+
default: "bg-background-hover-default text-icon-prominent-default hover:bg-background-pressed-default",
|
|
636
639
|
// Frosted circle for art/hero/brand surfaces — same recipe as
|
|
637
640
|
// Button's frosted-on-brand: hover thickens the frost, press thins it.
|
|
638
641
|
"frosted-on-brand": "bg-(--primitive-white-alpha-24) backdrop-blur-md border border-(--primitive-white-alpha-24) text-text-on-brand-static hover:bg-(--primitive-white-alpha-32) active:bg-(--primitive-white-alpha-16) active:opacity-100",
|
|
@@ -1676,7 +1679,7 @@ function BreadcrumbPage(_a) {
|
|
|
1676
1679
|
role: "link",
|
|
1677
1680
|
"aria-disabled": "true",
|
|
1678
1681
|
"aria-current": "page",
|
|
1679
|
-
className: cn("type-breadcrumb-page text-text-brand-
|
|
1682
|
+
className: cn("type-breadcrumb-page text-text-brand-selected", className)
|
|
1680
1683
|
}, props)
|
|
1681
1684
|
);
|
|
1682
1685
|
}
|
|
@@ -2029,12 +2032,15 @@ function Calendar(_a) {
|
|
|
2029
2032
|
props.showWeekNumber ? "[&:nth-child(2)[data-selected=true]_button]:rounded-l-full" : "[&:first-child[data-selected=true]_button]:rounded-l-full",
|
|
2030
2033
|
defaultClassNames.day
|
|
2031
2034
|
),
|
|
2035
|
+
/* The range band rides `brand-selected` — the theme-aware selection
|
|
2036
|
+
family — not the static `brand-container`, which is one value in
|
|
2037
|
+
both themes and reads as a pale strip on the dark canvas. */
|
|
2032
2038
|
range_start: cn(
|
|
2033
|
-
"rounded-l-full
|
|
2039
|
+
"rounded-l-full bg-background-brand-selected",
|
|
2034
2040
|
defaultClassNames.range_start
|
|
2035
2041
|
),
|
|
2036
2042
|
range_middle: cn("rounded-none", defaultClassNames.range_middle),
|
|
2037
|
-
range_end: cn("rounded-r-full
|
|
2043
|
+
range_end: cn("rounded-r-full bg-background-brand-selected", defaultClassNames.range_end),
|
|
2038
2044
|
today: cn(
|
|
2039
2045
|
"rounded-full data-[selected=true]:rounded-none",
|
|
2040
2046
|
defaultClassNames.today
|
|
@@ -2154,14 +2160,19 @@ function CalendarDayButton(_a) {
|
|
|
2154
2160
|
// Base day cell — circular, calendar's own type, prominent ink,
|
|
2155
2161
|
// hover = the standard hover glaze.
|
|
2156
2162
|
"type-calendar-day flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 rounded-full leading-none font-body bg-transparent border-transparent shadow-none text-text-prominent-default hover:!bg-background-hover-default hover:text-text-prominent-default hover:no-underline hover:shadow-none group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong",
|
|
2157
|
-
// Today (when not selected) — brand number
|
|
2158
|
-
|
|
2159
|
-
//
|
|
2160
|
-
"data-[selected-single=true]:[
|
|
2161
|
-
//
|
|
2162
|
-
|
|
2163
|
-
"data-[
|
|
2164
|
-
|
|
2163
|
+
// Today (when not selected) — brand number inside a brand hairline
|
|
2164
|
+
// ring. The ring, not a heavier weight, is what makes today legible:
|
|
2165
|
+
// components cap at semibold 600, and 600 vs 400 doesn't read at 14px.
|
|
2166
|
+
"[&[data-today='true']:not([data-selected-single='true']):not([data-range-start='true']):not([data-range-end='true'])]:font-semibold [&[data-today='true']:not([data-selected-single='true']):not([data-range-start='true']):not([data-range-end='true'])]:text-text-brand-selected [&[data-today='true']:not([data-selected-single='true']):not([data-range-start='true']):not([data-range-end='true'])]:border-[1.5px] [&[data-today='true']:not([data-selected-single='true']):not([data-range-start='true']):not([data-range-end='true'])]:border-border-brand-selected",
|
|
2167
|
+
// Selected single — the same solid brand disc as a range endpoint:
|
|
2168
|
+
// both mean "the date you picked", so they must not diverge.
|
|
2169
|
+
"data-[selected-single=true]:bg-background-brand-default data-[selected-single=true]:border-transparent data-[selected-single=true]:text-text-on-brand-static data-[selected-single=true]:font-semibold data-[selected-single=true]:hover:!bg-background-brand-default",
|
|
2170
|
+
// Range — the two endpoints are solid brand discs (they're the values
|
|
2171
|
+
// the user actually picked); the days between keep the quiet
|
|
2172
|
+
// brand-selected band. Both ends and band are theme-aware.
|
|
2173
|
+
"data-[range-start=true]:rounded-full data-[range-start=true]:bg-background-brand-default data-[range-start=true]:border-transparent data-[range-start=true]:text-text-on-brand-static data-[range-start=true]:font-semibold data-[range-start=true]:hover:!bg-background-brand-default",
|
|
2174
|
+
"data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-background-brand-selected data-[range-middle=true]:text-text-brand-selected data-[range-middle=true]:hover:!bg-background-brand-selected",
|
|
2175
|
+
"data-[range-end=true]:rounded-full data-[range-end=true]:bg-background-brand-default data-[range-end=true]:border-transparent data-[range-end=true]:text-text-on-brand-static data-[range-end=true]:font-semibold data-[range-end=true]:hover:!bg-background-brand-default",
|
|
2165
2176
|
"[&>span]:text-xs [&>span]:opacity-70",
|
|
2166
2177
|
defaultClassNames.day,
|
|
2167
2178
|
className
|
|
@@ -2189,7 +2200,7 @@ function Card(_a) {
|
|
|
2189
2200
|
"data-variant": variant,
|
|
2190
2201
|
className: cn(
|
|
2191
2202
|
"flex flex-col gap-4 rounded-2xl py-4",
|
|
2192
|
-
variant === "frosted-on-brand" || variant === "glass" ? "border border-(--primitive-white-alpha-64) bg-(--primitive-white-alpha-80) backdrop-blur-xl text-text-static-black" : "border border-border-default-default bg-background-primary-surface text-text-prominent-default",
|
|
2203
|
+
variant === "frosted-on-brand" || variant === "glass" ? "border border-(--primitive-white-alpha-64) bg-(--primitive-white-alpha-80) backdrop-blur-xl text-text-static-black" : variant === "frosted" ? "bg-background-brand-selected text-text-brand-selected" : "border border-border-default-default bg-background-primary-surface text-text-prominent-default",
|
|
2193
2204
|
interactive && "transition-transform duration-base ease-standard sm:hover:-translate-y-0.75 motion-reduce:transition-none motion-reduce:sm:hover:translate-y-0",
|
|
2194
2205
|
className
|
|
2195
2206
|
)
|
|
@@ -2603,17 +2614,16 @@ function DialogContent(_a) {
|
|
|
2603
2614
|
}, props), {
|
|
2604
2615
|
children: [
|
|
2605
2616
|
children,
|
|
2606
|
-
showCloseButton && /* @__PURE__ */ (0, import_jsx_runtime19.
|
|
2607
|
-
|
|
2617
|
+
showCloseButton && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_radix_ui12.Dialog.Close, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
2618
|
+
NavigationButton,
|
|
2608
2619
|
{
|
|
2609
2620
|
"data-slot": "dialog-close",
|
|
2610
|
-
|
|
2611
|
-
|
|
2612
|
-
|
|
2613
|
-
|
|
2614
|
-
]
|
|
2621
|
+
size: "sm",
|
|
2622
|
+
"aria-label": "Close",
|
|
2623
|
+
className: "absolute top-4 right-4",
|
|
2624
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react10.XIcon, { className: "size-4" })
|
|
2615
2625
|
}
|
|
2616
|
-
)
|
|
2626
|
+
) })
|
|
2617
2627
|
]
|
|
2618
2628
|
})
|
|
2619
2629
|
)
|
|
@@ -3496,7 +3506,7 @@ function EmptyDescription(_a) {
|
|
|
3496
3506
|
__spreadValues({
|
|
3497
3507
|
"data-slot": "empty-description",
|
|
3498
3508
|
className: cn(
|
|
3499
|
-
"type-empty-description text-text-subtle-default [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-text-brand-
|
|
3509
|
+
"type-empty-description text-text-subtle-default [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-text-brand-selected",
|
|
3500
3510
|
className
|
|
3501
3511
|
)
|
|
3502
3512
|
}, props)
|
|
@@ -3740,7 +3750,7 @@ function FieldDescription(_a) {
|
|
|
3740
3750
|
className: cn(
|
|
3741
3751
|
"type-field-description text-text-subtle-default group-has-[[data-orientation=horizontal]]/field:text-balance",
|
|
3742
3752
|
"last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5",
|
|
3743
|
-
"[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-text-brand-
|
|
3753
|
+
"[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-text-brand-selected",
|
|
3744
3754
|
className
|
|
3745
3755
|
)
|
|
3746
3756
|
}, props)
|
|
@@ -4249,7 +4259,7 @@ function InputOTPSlot(_a) {
|
|
|
4249
4259
|
"data-slot": "input-otp-slot",
|
|
4250
4260
|
"data-active": isActive,
|
|
4251
4261
|
className: cn(
|
|
4252
|
-
"type-input-otp relative flex size-
|
|
4262
|
+
"type-input-otp relative flex size-12 items-center justify-center border border-border-default-default bg-background-primary-surface font-body text-text-prominent-default transition-[color,box-shadow] outline-none first:rounded-l-xs last:rounded-r-xs aria-invalid:border-border-error-default aria-invalid:ring-ring-error-soft data-[active=true]:z-10 data-[active=true]:border-ring-focus-default data-[active=true]:ring-[3px] data-[active=true]:ring-ring-focus-soft data-[active=true]:aria-invalid:border-border-error-default data-[active=true]:aria-invalid:ring-ring-error-soft",
|
|
4253
4263
|
className
|
|
4254
4264
|
)
|
|
4255
4265
|
}, props), {
|
|
@@ -4428,7 +4438,7 @@ function ItemDescription(_a) {
|
|
|
4428
4438
|
"data-slot": "item-description",
|
|
4429
4439
|
className: cn(
|
|
4430
4440
|
"type-item-description line-clamp-2 text-balance text-text-subtle-default",
|
|
4431
|
-
"[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-text-brand-
|
|
4441
|
+
"[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-text-brand-selected",
|
|
4432
4442
|
className
|
|
4433
4443
|
)
|
|
4434
4444
|
}, props)
|
|
@@ -4493,7 +4503,7 @@ var linkVariants = (0, import_class_variance_authority11.cva)(
|
|
|
4493
4503
|
// on-brand = static white for links on brand-coloured surfaces
|
|
4494
4504
|
// (same family naming as Button/Input).
|
|
4495
4505
|
tone: {
|
|
4496
|
-
brand: "text-text-brand-
|
|
4506
|
+
brand: "text-text-brand-selected hover:text-text-brand-hover",
|
|
4497
4507
|
"on-brand": "text-text-on-brand-static hover:text-(--primitive-white-alpha-80)"
|
|
4498
4508
|
}
|
|
4499
4509
|
},
|
|
@@ -5283,37 +5293,203 @@ function PopoverDescription(_a) {
|
|
|
5283
5293
|
}
|
|
5284
5294
|
|
|
5285
5295
|
// components/ui/progress.tsx
|
|
5296
|
+
var React10 = __toESM(require("react"), 1);
|
|
5286
5297
|
var import_radix_ui23 = require("radix-ui");
|
|
5287
5298
|
var import_jsx_runtime41 = require("react/jsx-runtime");
|
|
5299
|
+
var BAR_HEIGHTS = {
|
|
5300
|
+
sm: "h-1",
|
|
5301
|
+
md: "h-2",
|
|
5302
|
+
lg: "h-3"
|
|
5303
|
+
};
|
|
5304
|
+
var DOT_WIDTHS = {
|
|
5305
|
+
sm: "w-4",
|
|
5306
|
+
md: "w-6",
|
|
5307
|
+
lg: "w-8"
|
|
5308
|
+
};
|
|
5309
|
+
var RINGS = {
|
|
5310
|
+
sm: { box: 24, r: 11, stroke: 2 },
|
|
5311
|
+
md: { box: 32, r: 15, stroke: 2 },
|
|
5312
|
+
lg: { box: 48, r: 22, stroke: 3 },
|
|
5313
|
+
xl: { box: 112, r: 52, stroke: 7 }
|
|
5314
|
+
};
|
|
5288
5315
|
function Progress(_a) {
|
|
5289
5316
|
var _b = _a, {
|
|
5290
5317
|
className,
|
|
5291
|
-
value
|
|
5318
|
+
value,
|
|
5319
|
+
variant = "bar",
|
|
5320
|
+
size = "md",
|
|
5321
|
+
label,
|
|
5322
|
+
valueLabel,
|
|
5323
|
+
segments = 5,
|
|
5324
|
+
timer,
|
|
5325
|
+
direction = "down",
|
|
5326
|
+
onTimerEnd,
|
|
5327
|
+
children
|
|
5292
5328
|
} = _b, props = __objRest(_b, [
|
|
5293
5329
|
"className",
|
|
5294
|
-
"value"
|
|
5330
|
+
"value",
|
|
5331
|
+
"variant",
|
|
5332
|
+
"size",
|
|
5333
|
+
"label",
|
|
5334
|
+
"valueLabel",
|
|
5335
|
+
"segments",
|
|
5336
|
+
"timer",
|
|
5337
|
+
"direction",
|
|
5338
|
+
"onTimerEnd",
|
|
5339
|
+
"children"
|
|
5295
5340
|
]);
|
|
5296
|
-
|
|
5341
|
+
const [timerPct, setTimerPct] = React10.useState(
|
|
5342
|
+
timer != null ? direction === "up" ? 0 : 100 : null
|
|
5343
|
+
);
|
|
5344
|
+
const endedRef = React10.useRef(false);
|
|
5345
|
+
React10.useEffect(() => {
|
|
5346
|
+
if (timer == null) {
|
|
5347
|
+
setTimerPct(null);
|
|
5348
|
+
return;
|
|
5349
|
+
}
|
|
5350
|
+
endedRef.current = false;
|
|
5351
|
+
const start = performance.now();
|
|
5352
|
+
let raf = 0;
|
|
5353
|
+
const frame = (now) => {
|
|
5354
|
+
const p = Math.min((now - start) / timer * 100, 100);
|
|
5355
|
+
setTimerPct(direction === "up" ? p : 100 - p);
|
|
5356
|
+
if (p < 100) {
|
|
5357
|
+
raf = requestAnimationFrame(frame);
|
|
5358
|
+
} else if (!endedRef.current) {
|
|
5359
|
+
endedRef.current = true;
|
|
5360
|
+
onTimerEnd == null ? void 0 : onTimerEnd();
|
|
5361
|
+
}
|
|
5362
|
+
};
|
|
5363
|
+
raf = requestAnimationFrame(frame);
|
|
5364
|
+
return () => cancelAnimationFrame(raf);
|
|
5365
|
+
}, [timer, direction]);
|
|
5366
|
+
const timed = timerPct != null;
|
|
5367
|
+
const pct = timed ? timerPct : Math.min(Math.max(value != null ? value : 0, 0), 100);
|
|
5368
|
+
const content = typeof children === "function" ? children(pct) : children;
|
|
5369
|
+
if (variant === "dots") {
|
|
5370
|
+
const filled = Math.round(pct / 100 * segments);
|
|
5371
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
5372
|
+
"div",
|
|
5373
|
+
__spreadProps(__spreadValues({
|
|
5374
|
+
"data-slot": "progress",
|
|
5375
|
+
"data-variant": "dots",
|
|
5376
|
+
role: "progressbar",
|
|
5377
|
+
"aria-valuemin": 0,
|
|
5378
|
+
"aria-valuemax": 100,
|
|
5379
|
+
"aria-valuenow": pct,
|
|
5380
|
+
className: cn("flex items-center gap-1", className)
|
|
5381
|
+
}, props), {
|
|
5382
|
+
children: Array.from({ length: segments }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
5383
|
+
"span",
|
|
5384
|
+
{
|
|
5385
|
+
"data-slot": "progress-dot",
|
|
5386
|
+
"data-filled": i < filled || void 0,
|
|
5387
|
+
className: cn(
|
|
5388
|
+
"h-1 rounded-full",
|
|
5389
|
+
DOT_WIDTHS[size in BAR_HEIGHTS ? size : "md"],
|
|
5390
|
+
i < filled ? "bg-background-brand-default" : "bg-background-secondary-surface"
|
|
5391
|
+
)
|
|
5392
|
+
},
|
|
5393
|
+
i
|
|
5394
|
+
))
|
|
5395
|
+
})
|
|
5396
|
+
);
|
|
5397
|
+
}
|
|
5398
|
+
if (variant === "ring") {
|
|
5399
|
+
const { box, r, stroke } = RINGS[size in RINGS ? size : "md"];
|
|
5400
|
+
const circumference = 2 * Math.PI * r;
|
|
5401
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
|
|
5402
|
+
"div",
|
|
5403
|
+
__spreadProps(__spreadValues({
|
|
5404
|
+
"data-slot": "progress",
|
|
5405
|
+
"data-variant": "ring",
|
|
5406
|
+
role: "progressbar",
|
|
5407
|
+
"aria-valuemin": 0,
|
|
5408
|
+
"aria-valuemax": 100,
|
|
5409
|
+
"aria-valuenow": pct,
|
|
5410
|
+
className: cn("relative inline-grid place-items-center", className),
|
|
5411
|
+
style: { width: box, height: box }
|
|
5412
|
+
}, props), {
|
|
5413
|
+
children: [
|
|
5414
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
|
|
5415
|
+
"svg",
|
|
5416
|
+
{
|
|
5417
|
+
viewBox: `0 0 ${box} ${box}`,
|
|
5418
|
+
className: "absolute inset-0 -rotate-90",
|
|
5419
|
+
"aria-hidden": true,
|
|
5420
|
+
children: [
|
|
5421
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
5422
|
+
"circle",
|
|
5423
|
+
{
|
|
5424
|
+
cx: box / 2,
|
|
5425
|
+
cy: box / 2,
|
|
5426
|
+
r,
|
|
5427
|
+
fill: "none",
|
|
5428
|
+
className: "stroke-border-default-default",
|
|
5429
|
+
strokeWidth: stroke
|
|
5430
|
+
}
|
|
5431
|
+
),
|
|
5432
|
+
pct > 0 && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
5433
|
+
"circle",
|
|
5434
|
+
{
|
|
5435
|
+
"data-slot": "progress-ring-fill",
|
|
5436
|
+
cx: box / 2,
|
|
5437
|
+
cy: box / 2,
|
|
5438
|
+
r,
|
|
5439
|
+
fill: "none",
|
|
5440
|
+
className: cn(
|
|
5441
|
+
"stroke-background-brand-default",
|
|
5442
|
+
!timed && "transition-[stroke-dashoffset] duration-slow ease-linear"
|
|
5443
|
+
),
|
|
5444
|
+
strokeWidth: stroke,
|
|
5445
|
+
strokeLinecap: "round",
|
|
5446
|
+
strokeDasharray: circumference,
|
|
5447
|
+
strokeDashoffset: circumference * (1 - pct / 100)
|
|
5448
|
+
}
|
|
5449
|
+
)
|
|
5450
|
+
]
|
|
5451
|
+
}
|
|
5452
|
+
),
|
|
5453
|
+
content != null && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: "type-progress-value relative text-text-prominent-default", children: content })
|
|
5454
|
+
]
|
|
5455
|
+
})
|
|
5456
|
+
);
|
|
5457
|
+
}
|
|
5458
|
+
const bar = /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
5297
5459
|
import_radix_ui23.Progress.Root,
|
|
5298
5460
|
__spreadProps(__spreadValues({
|
|
5299
5461
|
"data-slot": "progress",
|
|
5462
|
+
"data-variant": "bar",
|
|
5463
|
+
value: pct,
|
|
5300
5464
|
className: cn(
|
|
5301
|
-
// One track spec, shared with Slider:
|
|
5465
|
+
// One track spec, shared with Slider: rounded-full, secondary
|
|
5302
5466
|
// surface, solid brand fill.
|
|
5303
|
-
"relative
|
|
5304
|
-
|
|
5467
|
+
"relative w-full overflow-hidden rounded-full bg-background-secondary-surface",
|
|
5468
|
+
BAR_HEIGHTS[size in BAR_HEIGHTS ? size : "md"],
|
|
5469
|
+
label == null && valueLabel == null && className
|
|
5305
5470
|
)
|
|
5306
5471
|
}, props), {
|
|
5307
5472
|
children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
5308
5473
|
import_radix_ui23.Progress.Indicator,
|
|
5309
5474
|
{
|
|
5310
5475
|
"data-slot": "progress-indicator",
|
|
5311
|
-
className:
|
|
5312
|
-
|
|
5476
|
+
className: cn(
|
|
5477
|
+
"h-full w-full flex-1 rounded-full bg-background-brand-default",
|
|
5478
|
+
!timed && "transition-transform duration-slow ease-linear"
|
|
5479
|
+
),
|
|
5480
|
+
style: { transform: `translateX(-${100 - pct}%)` }
|
|
5313
5481
|
}
|
|
5314
5482
|
)
|
|
5315
5483
|
})
|
|
5316
5484
|
);
|
|
5485
|
+
if (label == null && valueLabel == null) return bar;
|
|
5486
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { "data-slot": "progress-meter", className: cn("flex w-full flex-col gap-1.5", className), children: [
|
|
5487
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "flex items-baseline justify-between gap-3", children: [
|
|
5488
|
+
label != null && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: "type-progress-label text-text-prominent-default", children: label }),
|
|
5489
|
+
valueLabel != null && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: "type-progress-label ml-auto text-text-subtle-default tabular-nums", children: valueLabel })
|
|
5490
|
+
] }),
|
|
5491
|
+
bar
|
|
5492
|
+
] });
|
|
5317
5493
|
}
|
|
5318
5494
|
|
|
5319
5495
|
// components/ui/profile-photo.tsx
|
|
@@ -5459,7 +5635,7 @@ function RadioGroupItem(_a) {
|
|
|
5459
5635
|
__spreadProps(__spreadValues({
|
|
5460
5636
|
"data-slot": "radio-group-item",
|
|
5461
5637
|
className: cn(
|
|
5462
|
-
"aspect-square size-4 shrink-0 rounded-full border border-border-default-default bg-background-primary-surface
|
|
5638
|
+
"aspect-square size-4 shrink-0 rounded-full border border-border-default-default bg-background-primary-surface transition-[color,box-shadow] outline-none focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong data-[state=checked]:border-border-brand-selected disabled:cursor-not-allowed disabled:opacity-24 aria-invalid:border-border-error-default aria-invalid:ring-ring-error-soft",
|
|
5463
5639
|
className
|
|
5464
5640
|
)
|
|
5465
5641
|
}, props), {
|
|
@@ -5468,7 +5644,7 @@ function RadioGroupItem(_a) {
|
|
|
5468
5644
|
{
|
|
5469
5645
|
"data-slot": "radio-group-indicator",
|
|
5470
5646
|
className: "relative flex items-center justify-center",
|
|
5471
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_lucide_react21.CircleIcon, { className: "absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 fill-
|
|
5647
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_lucide_react21.CircleIcon, { className: "absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 fill-text-brand-selected text-background-brand-default" })
|
|
5472
5648
|
}
|
|
5473
5649
|
)
|
|
5474
5650
|
})
|
|
@@ -5651,10 +5827,16 @@ function SheetContent(_a) {
|
|
|
5651
5827
|
}, props), {
|
|
5652
5828
|
children: [
|
|
5653
5829
|
children,
|
|
5654
|
-
showCloseButton && /* @__PURE__ */ (0, import_jsx_runtime46.
|
|
5655
|
-
|
|
5656
|
-
|
|
5657
|
-
|
|
5830
|
+
showCloseButton && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_radix_ui26.Dialog.Close, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
|
|
5831
|
+
NavigationButton,
|
|
5832
|
+
{
|
|
5833
|
+
"data-slot": "sheet-close",
|
|
5834
|
+
size: "sm",
|
|
5835
|
+
"aria-label": "Close",
|
|
5836
|
+
className: "absolute top-4 right-4",
|
|
5837
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react23.XIcon, { className: "size-4" })
|
|
5838
|
+
}
|
|
5839
|
+
) })
|
|
5658
5840
|
]
|
|
5659
5841
|
})
|
|
5660
5842
|
)
|
|
@@ -5710,17 +5892,17 @@ function SheetDescription(_a) {
|
|
|
5710
5892
|
}
|
|
5711
5893
|
|
|
5712
5894
|
// components/ui/sidebar.tsx
|
|
5713
|
-
var
|
|
5895
|
+
var React13 = __toESM(require("react"), 1);
|
|
5714
5896
|
var import_class_variance_authority13 = require("class-variance-authority");
|
|
5715
5897
|
var import_lucide_react24 = require("lucide-react");
|
|
5716
5898
|
var import_radix_ui28 = require("radix-ui");
|
|
5717
5899
|
|
|
5718
5900
|
// hooks/use-mobile.ts
|
|
5719
|
-
var
|
|
5901
|
+
var React11 = __toESM(require("react"), 1);
|
|
5720
5902
|
var MOBILE_BREAKPOINT = 768;
|
|
5721
5903
|
function useIsMobile() {
|
|
5722
|
-
const [isMobile, setIsMobile] =
|
|
5723
|
-
|
|
5904
|
+
const [isMobile, setIsMobile] = React11.useState(void 0);
|
|
5905
|
+
React11.useEffect(() => {
|
|
5724
5906
|
const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
|
|
5725
5907
|
const onChange = () => {
|
|
5726
5908
|
setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
|
|
@@ -5750,10 +5932,10 @@ function Skeleton(_a) {
|
|
|
5750
5932
|
}
|
|
5751
5933
|
|
|
5752
5934
|
// components/ui/tooltip.tsx
|
|
5753
|
-
var
|
|
5935
|
+
var React12 = __toESM(require("react"), 1);
|
|
5754
5936
|
var import_radix_ui27 = require("radix-ui");
|
|
5755
5937
|
var import_jsx_runtime48 = require("react/jsx-runtime");
|
|
5756
|
-
var TooltipModeContext =
|
|
5938
|
+
var TooltipModeContext = React12.createContext("tooltip");
|
|
5757
5939
|
function TooltipProvider(_a) {
|
|
5758
5940
|
var _b = _a, {
|
|
5759
5941
|
delayDuration = 0
|
|
@@ -5787,7 +5969,7 @@ function TooltipTrigger(_a) {
|
|
|
5787
5969
|
} = _b, props = __objRest(_b, [
|
|
5788
5970
|
"children"
|
|
5789
5971
|
]);
|
|
5790
|
-
const mode =
|
|
5972
|
+
const mode = React12.useContext(TooltipModeContext);
|
|
5791
5973
|
if (mode === "drawer") {
|
|
5792
5974
|
return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(DrawerTrigger, __spreadProps(__spreadValues({ "data-slot": "tooltip-trigger" }, props), { children }));
|
|
5793
5975
|
}
|
|
@@ -5809,7 +5991,7 @@ function TooltipContent(_a) {
|
|
|
5809
5991
|
"closeLabel",
|
|
5810
5992
|
"children"
|
|
5811
5993
|
]);
|
|
5812
|
-
const mode =
|
|
5994
|
+
const mode = React12.useContext(TooltipModeContext);
|
|
5813
5995
|
if (mode === "drawer") {
|
|
5814
5996
|
return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(DrawerContent, { "data-slot": "tooltip-content", "data-variant": variant, children: [
|
|
5815
5997
|
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(DrawerHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(DrawerTitle, { children: title }) }),
|
|
@@ -5847,9 +6029,9 @@ var SIDEBAR_WIDTH = "16rem";
|
|
|
5847
6029
|
var SIDEBAR_WIDTH_MOBILE = "18rem";
|
|
5848
6030
|
var SIDEBAR_WIDTH_ICON = "3rem";
|
|
5849
6031
|
var SIDEBAR_KEYBOARD_SHORTCUT = "b";
|
|
5850
|
-
var SidebarContext =
|
|
6032
|
+
var SidebarContext = React13.createContext(null);
|
|
5851
6033
|
function useSidebar() {
|
|
5852
|
-
const context =
|
|
6034
|
+
const context = React13.useContext(SidebarContext);
|
|
5853
6035
|
if (!context) {
|
|
5854
6036
|
throw new Error("useSidebar must be used within a SidebarProvider.");
|
|
5855
6037
|
}
|
|
@@ -5872,10 +6054,10 @@ function SidebarProvider(_a) {
|
|
|
5872
6054
|
"children"
|
|
5873
6055
|
]);
|
|
5874
6056
|
const isMobile = useIsMobile();
|
|
5875
|
-
const [openMobile, setOpenMobile] =
|
|
5876
|
-
const [_open, _setOpen] =
|
|
6057
|
+
const [openMobile, setOpenMobile] = React13.useState(false);
|
|
6058
|
+
const [_open, _setOpen] = React13.useState(defaultOpen);
|
|
5877
6059
|
const open = openProp != null ? openProp : _open;
|
|
5878
|
-
const setOpen =
|
|
6060
|
+
const setOpen = React13.useCallback(
|
|
5879
6061
|
(value) => {
|
|
5880
6062
|
const openState = typeof value === "function" ? value(open) : value;
|
|
5881
6063
|
if (setOpenProp) {
|
|
@@ -5887,10 +6069,10 @@ function SidebarProvider(_a) {
|
|
|
5887
6069
|
},
|
|
5888
6070
|
[setOpenProp, open]
|
|
5889
6071
|
);
|
|
5890
|
-
const toggleSidebar =
|
|
6072
|
+
const toggleSidebar = React13.useCallback(() => {
|
|
5891
6073
|
return isMobile ? setOpenMobile((open2) => !open2) : setOpen((open2) => !open2);
|
|
5892
6074
|
}, [isMobile, setOpen, setOpenMobile]);
|
|
5893
|
-
|
|
6075
|
+
React13.useEffect(() => {
|
|
5894
6076
|
const handleKeyDown = (event) => {
|
|
5895
6077
|
if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
|
|
5896
6078
|
event.preventDefault();
|
|
@@ -5901,7 +6083,7 @@ function SidebarProvider(_a) {
|
|
|
5901
6083
|
return () => window.removeEventListener("keydown", handleKeyDown);
|
|
5902
6084
|
}, [toggleSidebar]);
|
|
5903
6085
|
const state = open ? "expanded" : "collapsed";
|
|
5904
|
-
const contextValue =
|
|
6086
|
+
const contextValue = React13.useMemo(
|
|
5905
6087
|
() => ({
|
|
5906
6088
|
state,
|
|
5907
6089
|
open,
|
|
@@ -6488,7 +6670,7 @@ function SidebarMenuSubButton(_a) {
|
|
|
6488
6670
|
}
|
|
6489
6671
|
|
|
6490
6672
|
// components/ui/slider.tsx
|
|
6491
|
-
var
|
|
6673
|
+
var React14 = __toESM(require("react"), 1);
|
|
6492
6674
|
var import_radix_ui29 = require("radix-ui");
|
|
6493
6675
|
var import_jsx_runtime50 = require("react/jsx-runtime");
|
|
6494
6676
|
function Slider(_a) {
|
|
@@ -6505,7 +6687,7 @@ function Slider(_a) {
|
|
|
6505
6687
|
"min",
|
|
6506
6688
|
"max"
|
|
6507
6689
|
]);
|
|
6508
|
-
const _values =
|
|
6690
|
+
const _values = React14.useMemo(
|
|
6509
6691
|
() => Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max],
|
|
6510
6692
|
[value, defaultValue, min, max]
|
|
6511
6693
|
);
|
|
@@ -6598,10 +6780,186 @@ var Toaster = (_a) => {
|
|
|
6598
6780
|
);
|
|
6599
6781
|
};
|
|
6600
6782
|
|
|
6601
|
-
// components/ui/
|
|
6602
|
-
var
|
|
6783
|
+
// components/ui/slide-to-confirm.tsx
|
|
6784
|
+
var React15 = __toESM(require("react"), 1);
|
|
6603
6785
|
var import_lucide_react26 = require("lucide-react");
|
|
6604
6786
|
var import_jsx_runtime52 = require("react/jsx-runtime");
|
|
6787
|
+
var CONFIRM_AT = 0.9;
|
|
6788
|
+
var HANDLE = 46;
|
|
6789
|
+
var INSET2 = 5;
|
|
6790
|
+
function SlideToConfirm(_a) {
|
|
6791
|
+
var _b = _a, {
|
|
6792
|
+
onConfirm,
|
|
6793
|
+
label = "Slide to confirm",
|
|
6794
|
+
confirmedLabel = "Confirmed",
|
|
6795
|
+
disabled = false,
|
|
6796
|
+
confirmed: controlledConfirmed,
|
|
6797
|
+
className
|
|
6798
|
+
} = _b, props = __objRest(_b, [
|
|
6799
|
+
"onConfirm",
|
|
6800
|
+
"label",
|
|
6801
|
+
"confirmedLabel",
|
|
6802
|
+
"disabled",
|
|
6803
|
+
"confirmed",
|
|
6804
|
+
"className"
|
|
6805
|
+
]);
|
|
6806
|
+
const trackRef = React15.useRef(null);
|
|
6807
|
+
const [dragX, setDragX] = React15.useState(0);
|
|
6808
|
+
const [dragging, setDragging] = React15.useState(false);
|
|
6809
|
+
const [trackWidth, setTrackWidth] = React15.useState(0);
|
|
6810
|
+
const [internalConfirmed, setInternalConfirmed] = React15.useState(false);
|
|
6811
|
+
const confirmed = controlledConfirmed != null ? controlledConfirmed : internalConfirmed;
|
|
6812
|
+
const firedRef = React15.useRef(false);
|
|
6813
|
+
React15.useEffect(() => {
|
|
6814
|
+
if (controlledConfirmed === false) {
|
|
6815
|
+
setInternalConfirmed(false);
|
|
6816
|
+
setDragX(0);
|
|
6817
|
+
firedRef.current = false;
|
|
6818
|
+
}
|
|
6819
|
+
}, [controlledConfirmed]);
|
|
6820
|
+
React15.useEffect(() => {
|
|
6821
|
+
const track = trackRef.current;
|
|
6822
|
+
if (!track) return;
|
|
6823
|
+
const ro = new ResizeObserver(() => setTrackWidth(track.clientWidth));
|
|
6824
|
+
ro.observe(track);
|
|
6825
|
+
setTrackWidth(track.clientWidth);
|
|
6826
|
+
return () => ro.disconnect();
|
|
6827
|
+
}, []);
|
|
6828
|
+
const maxTravel = Math.max(trackWidth - HANDLE - INSET2 * 2, 0);
|
|
6829
|
+
function confirm() {
|
|
6830
|
+
if (firedRef.current) return;
|
|
6831
|
+
firedRef.current = true;
|
|
6832
|
+
setInternalConfirmed(true);
|
|
6833
|
+
onConfirm == null ? void 0 : onConfirm();
|
|
6834
|
+
}
|
|
6835
|
+
function handlePointerDown(e) {
|
|
6836
|
+
if (disabled || confirmed) return;
|
|
6837
|
+
e.target.setPointerCapture(e.pointerId);
|
|
6838
|
+
setDragging(true);
|
|
6839
|
+
}
|
|
6840
|
+
function handlePointerMove(e) {
|
|
6841
|
+
if (!dragging || disabled || confirmed) return;
|
|
6842
|
+
const track = trackRef.current;
|
|
6843
|
+
if (!track) return;
|
|
6844
|
+
const rect = track.getBoundingClientRect();
|
|
6845
|
+
const x = e.clientX - rect.left - INSET2 - HANDLE / 2;
|
|
6846
|
+
setDragX(Math.min(Math.max(x, 0), maxTravel));
|
|
6847
|
+
}
|
|
6848
|
+
function handlePointerUp() {
|
|
6849
|
+
if (!dragging) return;
|
|
6850
|
+
setDragging(false);
|
|
6851
|
+
if (dragX >= maxTravel * CONFIRM_AT) {
|
|
6852
|
+
setDragX(maxTravel);
|
|
6853
|
+
confirm();
|
|
6854
|
+
} else {
|
|
6855
|
+
setDragX(0);
|
|
6856
|
+
}
|
|
6857
|
+
}
|
|
6858
|
+
function handleKeyDown(e) {
|
|
6859
|
+
if (disabled || confirmed) return;
|
|
6860
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
6861
|
+
e.preventDefault();
|
|
6862
|
+
setDragX(maxTravel);
|
|
6863
|
+
confirm();
|
|
6864
|
+
}
|
|
6865
|
+
}
|
|
6866
|
+
const fillWidth = dragX === 0 ? 0 : dragX + HANDLE;
|
|
6867
|
+
const revealWidth = INSET2 + dragX + HANDLE / 2;
|
|
6868
|
+
const spring = "duration-slow ease-(--primitive-ease-spring)";
|
|
6869
|
+
return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(
|
|
6870
|
+
"div",
|
|
6871
|
+
__spreadProps(__spreadValues({
|
|
6872
|
+
ref: trackRef,
|
|
6873
|
+
"data-slot": "slide-to-confirm",
|
|
6874
|
+
"data-confirmed": confirmed || void 0,
|
|
6875
|
+
role: "button",
|
|
6876
|
+
tabIndex: disabled ? -1 : 0,
|
|
6877
|
+
"aria-disabled": disabled || void 0,
|
|
6878
|
+
"aria-label": typeof label === "string" ? label : void 0,
|
|
6879
|
+
onKeyDown: handleKeyDown,
|
|
6880
|
+
className: cn(
|
|
6881
|
+
"relative h-14 w-full touch-none overflow-hidden rounded-full bg-background-secondary-surface select-none",
|
|
6882
|
+
disabled && "pointer-events-none opacity-24",
|
|
6883
|
+
"outline-none focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong",
|
|
6884
|
+
className
|
|
6885
|
+
)
|
|
6886
|
+
}, props), {
|
|
6887
|
+
children: [
|
|
6888
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: "absolute inset-0 grid place-items-center", children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: "type-slide-to-confirm text-text-subtle-default", children: label }) }),
|
|
6889
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
6890
|
+
"span",
|
|
6891
|
+
{
|
|
6892
|
+
"aria-hidden": true,
|
|
6893
|
+
"data-slot": "slide-to-confirm-progress",
|
|
6894
|
+
className: cn(
|
|
6895
|
+
"absolute rounded-full bg-background-brand-default",
|
|
6896
|
+
// Confirmed floods the whole track; mid-drag it sits inside the
|
|
6897
|
+
// handle's inset so the two read as one continuous brand shape.
|
|
6898
|
+
confirmed ? "inset-0" : "top-(--inset) bottom-(--inset) left-(--inset)",
|
|
6899
|
+
!dragging && cn("transition-[width]", spring)
|
|
6900
|
+
),
|
|
6901
|
+
style: {
|
|
6902
|
+
"--inset": `${INSET2}px`,
|
|
6903
|
+
width: confirmed ? "100%" : `${fillWidth}px`
|
|
6904
|
+
}
|
|
6905
|
+
}
|
|
6906
|
+
),
|
|
6907
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
6908
|
+
"span",
|
|
6909
|
+
{
|
|
6910
|
+
"aria-hidden": true,
|
|
6911
|
+
"data-slot": "slide-to-confirm-reveal",
|
|
6912
|
+
className: cn(
|
|
6913
|
+
"absolute inset-0 grid place-items-center",
|
|
6914
|
+
!dragging && cn("transition-[clip-path]", spring)
|
|
6915
|
+
),
|
|
6916
|
+
style: {
|
|
6917
|
+
clipPath: confirmed ? "inset(0 round 9999px)" : `inset(0 calc(100% - ${revealWidth}px) 0 0 round 9999px)`
|
|
6918
|
+
},
|
|
6919
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: "type-slide-to-confirm flex items-center gap-2 text-text-on-brand-static", children: confirmed ? confirmedLabel : label })
|
|
6920
|
+
}
|
|
6921
|
+
),
|
|
6922
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
6923
|
+
"span",
|
|
6924
|
+
{
|
|
6925
|
+
"data-slot": "slide-to-confirm-handle",
|
|
6926
|
+
"data-confirmed": confirmed || void 0,
|
|
6927
|
+
onPointerDown: handlePointerDown,
|
|
6928
|
+
onPointerMove: handlePointerMove,
|
|
6929
|
+
onPointerUp: handlePointerUp,
|
|
6930
|
+
onPointerCancel: handlePointerUp,
|
|
6931
|
+
className: cn(
|
|
6932
|
+
"absolute top-1/2 z-20 grid size-11.5 place-items-center rounded-full",
|
|
6933
|
+
confirmed ? (
|
|
6934
|
+
// Landed: an inverted disc on the flooded track, glow dropped
|
|
6935
|
+
// — nothing left to drag, so no grab cursor.
|
|
6936
|
+
"bg-background-static-white text-text-brand-default"
|
|
6937
|
+
) : "cursor-grab bg-background-brand-default text-text-on-brand-static [box-shadow:var(--shadow-brand-glow)] active:cursor-grabbing",
|
|
6938
|
+
!dragging && cn("transition-[translate]", spring),
|
|
6939
|
+
// Idle nudge, per the Refined spec: the handle drifts 10px and
|
|
6940
|
+
// back. Safe because the sweep is 0-width at rest, so there is
|
|
6941
|
+
// nothing behind the handle to expose. Rest only, and reduced
|
|
6942
|
+
// motion turns it off.
|
|
6943
|
+
!dragging && !disabled && !confirmed && dragX === 0 && "animate-slide-confirm-nudge motion-reduce:animate-none"
|
|
6944
|
+
),
|
|
6945
|
+
style: {
|
|
6946
|
+
left: `${INSET2}px`,
|
|
6947
|
+
// Confirmed pins it to the far end even when the gesture came from
|
|
6948
|
+
// the keyboard, where dragX never moved.
|
|
6949
|
+
translate: `${confirmed ? maxTravel : dragX}px -50%`
|
|
6950
|
+
},
|
|
6951
|
+
children: confirmed ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react26.Check, { className: "size-4.5 [animation:slide-confirm-pop_var(--motion-pop)_var(--primitive-ease-overshoot)]" }) : /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react26.ArrowRight, { className: "size-4.5" })
|
|
6952
|
+
}
|
|
6953
|
+
)
|
|
6954
|
+
]
|
|
6955
|
+
})
|
|
6956
|
+
);
|
|
6957
|
+
}
|
|
6958
|
+
|
|
6959
|
+
// components/ui/stepper.tsx
|
|
6960
|
+
var React16 = __toESM(require("react"), 1);
|
|
6961
|
+
var import_lucide_react27 = require("lucide-react");
|
|
6962
|
+
var import_jsx_runtime53 = require("react/jsx-runtime");
|
|
6605
6963
|
function clamp(value, min, max) {
|
|
6606
6964
|
return Math.min(Math.max(value, min), max);
|
|
6607
6965
|
}
|
|
@@ -6613,19 +6971,14 @@ function getDecimalPlaces(n) {
|
|
|
6613
6971
|
function formatValue(value, decimalPlaces) {
|
|
6614
6972
|
return decimalPlaces > 0 ? value.toFixed(decimalPlaces) : String(value);
|
|
6615
6973
|
}
|
|
6616
|
-
var stepperSizeConfig = {
|
|
6617
|
-
sm: { container: "h-8", buttonSize: "icon-xs", iconClass: "size-3" },
|
|
6618
|
-
md: { container: "h-10", buttonSize: "icon-xs", iconClass: "size-3.5" },
|
|
6619
|
-
lg: { container: "h-12", buttonSize: "icon-sm", iconClass: "size-4" }
|
|
6620
|
-
};
|
|
6621
6974
|
function Stepper({
|
|
6975
|
+
label,
|
|
6622
6976
|
value: controlledValue,
|
|
6623
6977
|
defaultValue = 0,
|
|
6624
6978
|
onValueChange,
|
|
6625
6979
|
min = -Infinity,
|
|
6626
6980
|
max = Infinity,
|
|
6627
6981
|
step = 1,
|
|
6628
|
-
size = "md",
|
|
6629
6982
|
disabled,
|
|
6630
6983
|
placeholder,
|
|
6631
6984
|
className,
|
|
@@ -6633,18 +6986,17 @@ function Stepper({
|
|
|
6633
6986
|
name,
|
|
6634
6987
|
"aria-label": ariaLabel
|
|
6635
6988
|
}) {
|
|
6636
|
-
const { container, buttonSize, iconClass } = stepperSizeConfig[size];
|
|
6637
6989
|
const isControlled = controlledValue !== void 0;
|
|
6638
|
-
const [internalValue, setInternalValue] =
|
|
6990
|
+
const [internalValue, setInternalValue] = React16.useState(
|
|
6639
6991
|
clamp(defaultValue, min, max)
|
|
6640
6992
|
);
|
|
6641
6993
|
const currentValue = isControlled ? controlledValue : internalValue;
|
|
6642
6994
|
const decimalPlaces = getDecimalPlaces(step);
|
|
6643
|
-
const [displayString, setDisplayString] =
|
|
6995
|
+
const [displayString, setDisplayString] = React16.useState(
|
|
6644
6996
|
formatValue(currentValue, decimalPlaces)
|
|
6645
6997
|
);
|
|
6646
|
-
const [isFocused, setIsFocused] =
|
|
6647
|
-
|
|
6998
|
+
const [isFocused, setIsFocused] = React16.useState(false);
|
|
6999
|
+
React16.useEffect(() => {
|
|
6648
7000
|
if (!isFocused) {
|
|
6649
7001
|
setDisplayString(formatValue(currentValue, decimalPlaces));
|
|
6650
7002
|
}
|
|
@@ -6694,68 +7046,293 @@ function Stepper({
|
|
|
6694
7046
|
}
|
|
6695
7047
|
}
|
|
6696
7048
|
}
|
|
6697
|
-
return /* @__PURE__ */ (0,
|
|
6698
|
-
|
|
7049
|
+
return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
|
|
7050
|
+
"div",
|
|
6699
7051
|
{
|
|
6700
7052
|
"data-slot": "stepper",
|
|
6701
7053
|
"data-disabled": disabled || void 0,
|
|
6702
|
-
className: cn(
|
|
7054
|
+
className: cn(
|
|
7055
|
+
"flex w-full items-center justify-between gap-4",
|
|
7056
|
+
// No opacity here on purpose. The +/- are Buttons and already carry
|
|
7057
|
+
// their own disabled treatment; dimming the wrapper too multiplied
|
|
7058
|
+
// with theirs (24% × 24% ≈ 6%) and made them all but invisible.
|
|
7059
|
+
// Disabled text takes the disabled ink token instead of a wash.
|
|
7060
|
+
disabled && "pointer-events-none",
|
|
7061
|
+
className
|
|
7062
|
+
),
|
|
6703
7063
|
children: [
|
|
6704
|
-
/* @__PURE__ */ (0,
|
|
6705
|
-
|
|
7064
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
7065
|
+
Button,
|
|
6706
7066
|
{
|
|
6707
|
-
|
|
6708
|
-
variant: "
|
|
7067
|
+
type: "button",
|
|
7068
|
+
variant: "frosted",
|
|
7069
|
+
size: "icon-lg",
|
|
6709
7070
|
onClick: handleDecrement,
|
|
6710
7071
|
disabled: disabled || currentValue <= min,
|
|
6711
7072
|
"aria-label": "Decrease value",
|
|
6712
|
-
children: /* @__PURE__ */ (0,
|
|
6713
|
-
}
|
|
6714
|
-
) }),
|
|
6715
|
-
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
6716
|
-
InputGroupInput,
|
|
6717
|
-
{
|
|
6718
|
-
type: "text",
|
|
6719
|
-
inputMode: "numeric",
|
|
6720
|
-
role: "spinbutton",
|
|
6721
|
-
"aria-valuemin": min === -Infinity ? void 0 : min,
|
|
6722
|
-
"aria-valuemax": max === Infinity ? void 0 : max,
|
|
6723
|
-
"aria-valuenow": currentValue,
|
|
6724
|
-
"aria-label": ariaLabel,
|
|
6725
|
-
value: displayString,
|
|
6726
|
-
onChange: handleInputChange,
|
|
6727
|
-
onBlur: handleBlur,
|
|
6728
|
-
onFocus: handleFocus,
|
|
6729
|
-
onKeyDown: handleKeyDown,
|
|
6730
|
-
disabled,
|
|
6731
|
-
placeholder,
|
|
6732
|
-
id,
|
|
6733
|
-
name,
|
|
6734
|
-
className: "text-center [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none"
|
|
7073
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react27.Minus, {})
|
|
6735
7074
|
}
|
|
6736
7075
|
),
|
|
6737
|
-
/* @__PURE__ */ (0,
|
|
6738
|
-
/* @__PURE__ */ (0,
|
|
6739
|
-
|
|
6740
|
-
|
|
7076
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex min-w-0 flex-col items-center", children: [
|
|
7077
|
+
label != null && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
7078
|
+
"span",
|
|
7079
|
+
{
|
|
7080
|
+
className: cn(
|
|
7081
|
+
"type-stepper-stake-label",
|
|
7082
|
+
disabled ? "text-text-disabled-default" : "text-text-subtle-default"
|
|
7083
|
+
),
|
|
7084
|
+
children: label
|
|
7085
|
+
}
|
|
7086
|
+
),
|
|
7087
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
7088
|
+
"input",
|
|
6741
7089
|
{
|
|
6742
|
-
|
|
6743
|
-
|
|
6744
|
-
|
|
6745
|
-
|
|
6746
|
-
"aria-
|
|
6747
|
-
|
|
7090
|
+
type: "text",
|
|
7091
|
+
inputMode: "decimal",
|
|
7092
|
+
role: "spinbutton",
|
|
7093
|
+
"aria-valuemin": min === -Infinity ? void 0 : min,
|
|
7094
|
+
"aria-valuemax": max === Infinity ? void 0 : max,
|
|
7095
|
+
"aria-valuenow": currentValue,
|
|
7096
|
+
"aria-label": ariaLabel,
|
|
7097
|
+
value: displayString,
|
|
7098
|
+
onChange: handleInputChange,
|
|
7099
|
+
onBlur: handleBlur,
|
|
7100
|
+
onFocus: handleFocus,
|
|
7101
|
+
onKeyDown: handleKeyDown,
|
|
7102
|
+
disabled,
|
|
7103
|
+
placeholder,
|
|
7104
|
+
id,
|
|
7105
|
+
name,
|
|
7106
|
+
size: Math.max(displayString.length, 1),
|
|
7107
|
+
className: "type-stepper-stake-amount w-full min-w-0 border-0 bg-transparent text-center text-text-prominent-default outline-none disabled:text-text-disabled-default [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none"
|
|
6748
7108
|
}
|
|
6749
7109
|
)
|
|
6750
|
-
] })
|
|
7110
|
+
] }),
|
|
7111
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
7112
|
+
Button,
|
|
7113
|
+
{
|
|
7114
|
+
type: "button",
|
|
7115
|
+
variant: "frosted",
|
|
7116
|
+
size: "icon-lg",
|
|
7117
|
+
onClick: handleIncrement,
|
|
7118
|
+
disabled: disabled || currentValue >= max,
|
|
7119
|
+
"aria-label": "Increase value",
|
|
7120
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react27.Plus, {})
|
|
7121
|
+
}
|
|
7122
|
+
)
|
|
6751
7123
|
]
|
|
6752
7124
|
}
|
|
6753
7125
|
);
|
|
6754
7126
|
}
|
|
6755
7127
|
|
|
7128
|
+
// components/ui/steps.tsx
|
|
7129
|
+
var React17 = __toESM(require("react"), 1);
|
|
7130
|
+
var import_lucide_react28 = require("lucide-react");
|
|
7131
|
+
var import_jsx_runtime54 = require("react/jsx-runtime");
|
|
7132
|
+
var StepsContext = React17.createContext({ shape: "circle", orientation: "horizontal", size: "md" });
|
|
7133
|
+
function Steps(_a) {
|
|
7134
|
+
var _b = _a, {
|
|
7135
|
+
shape = "circle",
|
|
7136
|
+
orientation = "horizontal",
|
|
7137
|
+
size = "md",
|
|
7138
|
+
className,
|
|
7139
|
+
children
|
|
7140
|
+
} = _b, props = __objRest(_b, [
|
|
7141
|
+
"shape",
|
|
7142
|
+
"orientation",
|
|
7143
|
+
"size",
|
|
7144
|
+
"className",
|
|
7145
|
+
"children"
|
|
7146
|
+
]);
|
|
7147
|
+
const steps = React17.Children.toArray(children);
|
|
7148
|
+
return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(StepsContext.Provider, { value: { shape, orientation, size }, children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
7149
|
+
"ol",
|
|
7150
|
+
__spreadProps(__spreadValues({
|
|
7151
|
+
"data-slot": "steps",
|
|
7152
|
+
"data-shape": shape,
|
|
7153
|
+
"data-orientation": orientation,
|
|
7154
|
+
"data-size": size,
|
|
7155
|
+
className: cn(
|
|
7156
|
+
"flex list-none",
|
|
7157
|
+
orientation === "horizontal" ? "flex-row items-start" : "flex-col",
|
|
7158
|
+
className
|
|
7159
|
+
)
|
|
7160
|
+
}, props), {
|
|
7161
|
+
children: steps.map(
|
|
7162
|
+
(child, index) => React17.isValidElement(child) ? React17.cloneElement(child, {
|
|
7163
|
+
index: index + 1,
|
|
7164
|
+
isFirst: index === 0,
|
|
7165
|
+
isLast: index === steps.length - 1
|
|
7166
|
+
}) : child
|
|
7167
|
+
)
|
|
7168
|
+
})
|
|
7169
|
+
) });
|
|
7170
|
+
}
|
|
7171
|
+
function Step(_a) {
|
|
7172
|
+
var _b = _a, {
|
|
7173
|
+
state = "upcoming",
|
|
7174
|
+
icon,
|
|
7175
|
+
title,
|
|
7176
|
+
description,
|
|
7177
|
+
tag,
|
|
7178
|
+
index,
|
|
7179
|
+
isFirst = false,
|
|
7180
|
+
isLast = false,
|
|
7181
|
+
className
|
|
7182
|
+
} = _b, props = __objRest(_b, [
|
|
7183
|
+
"state",
|
|
7184
|
+
"icon",
|
|
7185
|
+
"title",
|
|
7186
|
+
"description",
|
|
7187
|
+
"tag",
|
|
7188
|
+
"index",
|
|
7189
|
+
"isFirst",
|
|
7190
|
+
"isLast",
|
|
7191
|
+
"className"
|
|
7192
|
+
]);
|
|
7193
|
+
const { shape, orientation, size } = React17.useContext(StepsContext);
|
|
7194
|
+
const horizontal = orientation === "horizontal";
|
|
7195
|
+
const sm = size === "sm";
|
|
7196
|
+
const indicator = /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
7197
|
+
"span",
|
|
7198
|
+
{
|
|
7199
|
+
"data-slot": "step-indicator",
|
|
7200
|
+
className: cn(
|
|
7201
|
+
"type-steps-indicator z-10 grid shrink-0 place-items-center",
|
|
7202
|
+
sm ? "size-6" : "size-8",
|
|
7203
|
+
shape === "circle" ? "rounded-full" : "rounded-md",
|
|
7204
|
+
state === "done" && "bg-background-success-solid text-text-on-status-static",
|
|
7205
|
+
state === "active" && "bg-background-brand-default text-text-on-brand-static",
|
|
7206
|
+
state === "upcoming" && "bg-background-secondary-surface text-text-subtle-default",
|
|
7207
|
+
"[&_svg]:pointer-events-none [&_svg]:shrink-0",
|
|
7208
|
+
sm ? "[&_svg:not([class*='size-'])]:size-3.5" : "[&_svg:not([class*='size-'])]:size-4"
|
|
7209
|
+
),
|
|
7210
|
+
children: state === "done" ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_lucide_react28.Check, {}) : icon != null ? icon : index
|
|
7211
|
+
}
|
|
7212
|
+
);
|
|
7213
|
+
if (horizontal) {
|
|
7214
|
+
return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
|
|
7215
|
+
"li",
|
|
7216
|
+
__spreadProps(__spreadValues({
|
|
7217
|
+
"data-slot": "step",
|
|
7218
|
+
"data-state": state,
|
|
7219
|
+
"aria-current": state === "active" ? "step" : void 0,
|
|
7220
|
+
className: cn("flex min-w-0 flex-1 flex-col items-center", className)
|
|
7221
|
+
}, props), {
|
|
7222
|
+
children: [
|
|
7223
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex w-full items-center", children: [
|
|
7224
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
7225
|
+
"span",
|
|
7226
|
+
{
|
|
7227
|
+
"aria-hidden": true,
|
|
7228
|
+
"data-slot": "step-connector",
|
|
7229
|
+
className: cn("h-px flex-1", !isFirst && "bg-border-neutral-default")
|
|
7230
|
+
}
|
|
7231
|
+
),
|
|
7232
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: cn(!isFirst && "w-1", "shrink-0") }),
|
|
7233
|
+
indicator,
|
|
7234
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: cn(!isLast && "w-1", "shrink-0") }),
|
|
7235
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
7236
|
+
"span",
|
|
7237
|
+
{
|
|
7238
|
+
"aria-hidden": true,
|
|
7239
|
+
"data-slot": "step-connector",
|
|
7240
|
+
className: cn("h-px flex-1", !isLast && "bg-border-neutral-default")
|
|
7241
|
+
}
|
|
7242
|
+
)
|
|
7243
|
+
] }),
|
|
7244
|
+
(title != null || description != null) && /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
|
|
7245
|
+
"div",
|
|
7246
|
+
{
|
|
7247
|
+
"data-slot": "step-body",
|
|
7248
|
+
className: cn(
|
|
7249
|
+
"flex min-w-0 flex-col items-center px-1 text-center",
|
|
7250
|
+
sm ? "mt-1" : "mt-1.5"
|
|
7251
|
+
),
|
|
7252
|
+
children: [
|
|
7253
|
+
title != null && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
7254
|
+
"span",
|
|
7255
|
+
{
|
|
7256
|
+
className: cn(
|
|
7257
|
+
"type-steps-title",
|
|
7258
|
+
state === "upcoming" ? "text-text-subtle-default" : "text-text-prominent-default"
|
|
7259
|
+
),
|
|
7260
|
+
children: title
|
|
7261
|
+
}
|
|
7262
|
+
),
|
|
7263
|
+
tag != null && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "type-steps-tag whitespace-nowrap text-text-brand-selected", children: tag }),
|
|
7264
|
+
description != null && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "type-steps-description text-text-subtle-default", children: description })
|
|
7265
|
+
]
|
|
7266
|
+
}
|
|
7267
|
+
)
|
|
7268
|
+
]
|
|
7269
|
+
})
|
|
7270
|
+
);
|
|
7271
|
+
}
|
|
7272
|
+
const hasBody = title != null || description != null;
|
|
7273
|
+
return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
|
|
7274
|
+
"li",
|
|
7275
|
+
__spreadProps(__spreadValues({
|
|
7276
|
+
"data-slot": "step",
|
|
7277
|
+
"data-state": state,
|
|
7278
|
+
"aria-current": state === "active" ? "step" : void 0,
|
|
7279
|
+
className: cn(
|
|
7280
|
+
"flex min-w-0",
|
|
7281
|
+
sm ? "gap-2.5" : "gap-3",
|
|
7282
|
+
// Minimum row rhythm so title-only steps still leave a visible
|
|
7283
|
+
// stretch of rail; description steps outgrow it naturally, and the
|
|
7284
|
+
// last step needs none (no connector below it).
|
|
7285
|
+
!isLast && (sm ? "min-h-11" : "min-h-14"),
|
|
7286
|
+
className
|
|
7287
|
+
)
|
|
7288
|
+
}, props), {
|
|
7289
|
+
children: [
|
|
7290
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: "flex flex-col items-center self-stretch", children: [
|
|
7291
|
+
indicator,
|
|
7292
|
+
!isLast && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
7293
|
+
"span",
|
|
7294
|
+
{
|
|
7295
|
+
"aria-hidden": true,
|
|
7296
|
+
"data-slot": "step-connector",
|
|
7297
|
+
className: "mt-1 mb-1 w-px flex-1 bg-border-neutral-default"
|
|
7298
|
+
}
|
|
7299
|
+
)
|
|
7300
|
+
] }),
|
|
7301
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
|
|
7302
|
+
"div",
|
|
7303
|
+
{
|
|
7304
|
+
"data-slot": "step-body",
|
|
7305
|
+
className: cn("flex min-w-0 flex-col", !isLast && (sm ? "pb-4" : "pb-6")),
|
|
7306
|
+
children: [
|
|
7307
|
+
title != null && /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
|
|
7308
|
+
"span",
|
|
7309
|
+
{
|
|
7310
|
+
className: cn(
|
|
7311
|
+
"type-steps-title",
|
|
7312
|
+
state === "upcoming" ? "text-text-subtle-default" : "text-text-prominent-default"
|
|
7313
|
+
),
|
|
7314
|
+
children: [
|
|
7315
|
+
title,
|
|
7316
|
+
tag != null && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "type-steps-tag ml-2 whitespace-nowrap text-text-brand-selected", children: tag })
|
|
7317
|
+
]
|
|
7318
|
+
}
|
|
7319
|
+
),
|
|
7320
|
+
description != null && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "type-steps-description text-text-subtle-default", children: description }),
|
|
7321
|
+
!hasBody && /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("span", { className: "sr-only", children: [
|
|
7322
|
+
"Step ",
|
|
7323
|
+
index
|
|
7324
|
+
] })
|
|
7325
|
+
]
|
|
7326
|
+
}
|
|
7327
|
+
)
|
|
7328
|
+
]
|
|
7329
|
+
})
|
|
7330
|
+
);
|
|
7331
|
+
}
|
|
7332
|
+
|
|
6756
7333
|
// components/ui/switch.tsx
|
|
6757
7334
|
var import_radix_ui30 = require("radix-ui");
|
|
6758
|
-
var
|
|
7335
|
+
var import_jsx_runtime55 = require("react/jsx-runtime");
|
|
6759
7336
|
function Switch(_a) {
|
|
6760
7337
|
var _b = _a, {
|
|
6761
7338
|
className,
|
|
@@ -6764,7 +7341,7 @@ function Switch(_a) {
|
|
|
6764
7341
|
"className",
|
|
6765
7342
|
"size"
|
|
6766
7343
|
]);
|
|
6767
|
-
return /* @__PURE__ */ (0,
|
|
7344
|
+
return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
6768
7345
|
import_radix_ui30.Switch.Root,
|
|
6769
7346
|
__spreadProps(__spreadValues({
|
|
6770
7347
|
"data-slot": "switch",
|
|
@@ -6774,7 +7351,7 @@ function Switch(_a) {
|
|
|
6774
7351
|
className
|
|
6775
7352
|
)
|
|
6776
7353
|
}, props), {
|
|
6777
|
-
children: /* @__PURE__ */ (0,
|
|
7354
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
6778
7355
|
import_radix_ui30.Switch.Thumb,
|
|
6779
7356
|
{
|
|
6780
7357
|
"data-slot": "switch-thumb",
|
|
@@ -6788,15 +7365,15 @@ function Switch(_a) {
|
|
|
6788
7365
|
}
|
|
6789
7366
|
|
|
6790
7367
|
// components/ui/table.tsx
|
|
6791
|
-
var
|
|
7368
|
+
var import_jsx_runtime56 = require("react/jsx-runtime");
|
|
6792
7369
|
function Table(_a) {
|
|
6793
7370
|
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
6794
|
-
return /* @__PURE__ */ (0,
|
|
7371
|
+
return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
6795
7372
|
"div",
|
|
6796
7373
|
{
|
|
6797
7374
|
"data-slot": "table-container",
|
|
6798
7375
|
className: "relative w-full overflow-x-auto",
|
|
6799
|
-
children: /* @__PURE__ */ (0,
|
|
7376
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
6800
7377
|
"table",
|
|
6801
7378
|
__spreadValues({
|
|
6802
7379
|
"data-slot": "table",
|
|
@@ -6808,7 +7385,7 @@ function Table(_a) {
|
|
|
6808
7385
|
}
|
|
6809
7386
|
function TableHeader(_a) {
|
|
6810
7387
|
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
6811
|
-
return /* @__PURE__ */ (0,
|
|
7388
|
+
return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
6812
7389
|
"thead",
|
|
6813
7390
|
__spreadValues({
|
|
6814
7391
|
"data-slot": "table-header",
|
|
@@ -6818,7 +7395,7 @@ function TableHeader(_a) {
|
|
|
6818
7395
|
}
|
|
6819
7396
|
function TableBody(_a) {
|
|
6820
7397
|
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
6821
|
-
return /* @__PURE__ */ (0,
|
|
7398
|
+
return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
6822
7399
|
"tbody",
|
|
6823
7400
|
__spreadValues({
|
|
6824
7401
|
"data-slot": "table-body",
|
|
@@ -6828,7 +7405,7 @@ function TableBody(_a) {
|
|
|
6828
7405
|
}
|
|
6829
7406
|
function TableFooter(_a) {
|
|
6830
7407
|
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
6831
|
-
return /* @__PURE__ */ (0,
|
|
7408
|
+
return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
6832
7409
|
"tfoot",
|
|
6833
7410
|
__spreadValues({
|
|
6834
7411
|
"data-slot": "table-footer",
|
|
@@ -6841,7 +7418,7 @@ function TableFooter(_a) {
|
|
|
6841
7418
|
}
|
|
6842
7419
|
function TableRow(_a) {
|
|
6843
7420
|
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
6844
|
-
return /* @__PURE__ */ (0,
|
|
7421
|
+
return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
6845
7422
|
"tr",
|
|
6846
7423
|
__spreadValues({
|
|
6847
7424
|
"data-slot": "table-row",
|
|
@@ -6854,7 +7431,7 @@ function TableRow(_a) {
|
|
|
6854
7431
|
}
|
|
6855
7432
|
function TableHead(_a) {
|
|
6856
7433
|
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
6857
|
-
return /* @__PURE__ */ (0,
|
|
7434
|
+
return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
6858
7435
|
"th",
|
|
6859
7436
|
__spreadValues({
|
|
6860
7437
|
"data-slot": "table-head",
|
|
@@ -6867,7 +7444,7 @@ function TableHead(_a) {
|
|
|
6867
7444
|
}
|
|
6868
7445
|
function TableCell(_a) {
|
|
6869
7446
|
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
6870
|
-
return /* @__PURE__ */ (0,
|
|
7447
|
+
return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
6871
7448
|
"td",
|
|
6872
7449
|
__spreadValues({
|
|
6873
7450
|
"data-slot": "table-cell",
|
|
@@ -6884,7 +7461,7 @@ function TableCaption(_a) {
|
|
|
6884
7461
|
} = _b, props = __objRest(_b, [
|
|
6885
7462
|
"className"
|
|
6886
7463
|
]);
|
|
6887
|
-
return /* @__PURE__ */ (0,
|
|
7464
|
+
return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
6888
7465
|
"caption",
|
|
6889
7466
|
__spreadValues({
|
|
6890
7467
|
"data-slot": "table-caption",
|
|
@@ -6896,7 +7473,7 @@ function TableCaption(_a) {
|
|
|
6896
7473
|
// components/ui/tabs.tsx
|
|
6897
7474
|
var import_class_variance_authority14 = require("class-variance-authority");
|
|
6898
7475
|
var import_radix_ui31 = require("radix-ui");
|
|
6899
|
-
var
|
|
7476
|
+
var import_jsx_runtime57 = require("react/jsx-runtime");
|
|
6900
7477
|
function Tabs(_a) {
|
|
6901
7478
|
var _b = _a, {
|
|
6902
7479
|
className,
|
|
@@ -6905,7 +7482,7 @@ function Tabs(_a) {
|
|
|
6905
7482
|
"className",
|
|
6906
7483
|
"orientation"
|
|
6907
7484
|
]);
|
|
6908
|
-
return /* @__PURE__ */ (0,
|
|
7485
|
+
return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
6909
7486
|
import_radix_ui31.Tabs.Root,
|
|
6910
7487
|
__spreadValues({
|
|
6911
7488
|
"data-slot": "tabs",
|
|
@@ -6948,7 +7525,7 @@ function TabsList(_a) {
|
|
|
6948
7525
|
"variant",
|
|
6949
7526
|
"size"
|
|
6950
7527
|
]);
|
|
6951
|
-
return /* @__PURE__ */ (0,
|
|
7528
|
+
return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
6952
7529
|
import_radix_ui31.Tabs.List,
|
|
6953
7530
|
__spreadValues({
|
|
6954
7531
|
"data-slot": "tabs-list",
|
|
@@ -6966,7 +7543,7 @@ function TabsTrigger(_a) {
|
|
|
6966
7543
|
"className",
|
|
6967
7544
|
"iconPosition"
|
|
6968
7545
|
]);
|
|
6969
|
-
return /* @__PURE__ */ (0,
|
|
7546
|
+
return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
6970
7547
|
import_radix_ui31.Tabs.Trigger,
|
|
6971
7548
|
__spreadValues({
|
|
6972
7549
|
"data-slot": "tabs-trigger",
|
|
@@ -6992,7 +7569,7 @@ function TabsContent(_a) {
|
|
|
6992
7569
|
} = _b, props = __objRest(_b, [
|
|
6993
7570
|
"className"
|
|
6994
7571
|
]);
|
|
6995
|
-
return /* @__PURE__ */ (0,
|
|
7572
|
+
return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
6996
7573
|
import_radix_ui31.Tabs.Content,
|
|
6997
7574
|
__spreadValues({
|
|
6998
7575
|
"data-slot": "tabs-content",
|
|
@@ -7004,15 +7581,11 @@ function TabsContent(_a) {
|
|
|
7004
7581
|
// components/ui/toggle.tsx
|
|
7005
7582
|
var import_class_variance_authority15 = require("class-variance-authority");
|
|
7006
7583
|
var import_radix_ui32 = require("radix-ui");
|
|
7007
|
-
var
|
|
7584
|
+
var import_jsx_runtime58 = require("react/jsx-runtime");
|
|
7008
7585
|
var toggleVariants = (0, import_class_variance_authority15.cva)(
|
|
7009
|
-
"type-toggle inline-flex items-center justify-center gap-2 rounded-md whitespace-nowrap transition-[color,box-shadow] outline-none hover:bg-background-
|
|
7586
|
+
"type-toggle inline-flex items-center justify-center gap-2 rounded-md border border-border-default-default bg-background-primary-surface text-text-prominent-default whitespace-nowrap transition-[color,background-color,border-color,box-shadow] outline-none hover:bg-background-secondary-surface active:bg-background-secondary-wash focus-visible:border-ring-focus-default focus-visible:ring-[3px] focus-visible:ring-ring-focus-strong disabled:pointer-events-none disabled:opacity-24 aria-invalid:border-border-error-default aria-invalid:ring-ring-error-soft data-[state=on]:border-transparent data-[state=on]:bg-background-brand-default data-[state=on]:text-text-on-brand-static [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
7010
7587
|
{
|
|
7011
7588
|
variants: {
|
|
7012
|
-
variant: {
|
|
7013
|
-
default: "bg-transparent",
|
|
7014
|
-
outline: "border border-border-prominent-default bg-transparent text-text-prominent-default hover:bg-background-hover-default"
|
|
7015
|
-
},
|
|
7016
7589
|
size: {
|
|
7017
7590
|
default: "h-10 min-w-10 px-2.5",
|
|
7018
7591
|
sm: "h-8 min-w-8 px-1.5",
|
|
@@ -7020,7 +7593,6 @@ var toggleVariants = (0, import_class_variance_authority15.cva)(
|
|
|
7020
7593
|
}
|
|
7021
7594
|
},
|
|
7022
7595
|
defaultVariants: {
|
|
7023
|
-
variant: "default",
|
|
7024
7596
|
size: "default"
|
|
7025
7597
|
}
|
|
7026
7598
|
}
|
|
@@ -7028,50 +7600,44 @@ var toggleVariants = (0, import_class_variance_authority15.cva)(
|
|
|
7028
7600
|
function Toggle(_a) {
|
|
7029
7601
|
var _b = _a, {
|
|
7030
7602
|
className,
|
|
7031
|
-
variant,
|
|
7032
7603
|
size
|
|
7033
7604
|
} = _b, props = __objRest(_b, [
|
|
7034
7605
|
"className",
|
|
7035
|
-
"variant",
|
|
7036
7606
|
"size"
|
|
7037
7607
|
]);
|
|
7038
|
-
return /* @__PURE__ */ (0,
|
|
7608
|
+
return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
|
|
7039
7609
|
import_radix_ui32.Toggle.Root,
|
|
7040
7610
|
__spreadValues({
|
|
7041
7611
|
"data-slot": "toggle",
|
|
7042
|
-
className: cn(toggleVariants({
|
|
7612
|
+
className: cn(toggleVariants({ size, className }))
|
|
7043
7613
|
}, props)
|
|
7044
7614
|
);
|
|
7045
7615
|
}
|
|
7046
7616
|
|
|
7047
7617
|
// components/ui/toggle-group.tsx
|
|
7048
|
-
var
|
|
7618
|
+
var React18 = __toESM(require("react"), 1);
|
|
7049
7619
|
var import_radix_ui33 = require("radix-ui");
|
|
7050
|
-
var
|
|
7051
|
-
var ToggleGroupContext =
|
|
7620
|
+
var import_jsx_runtime59 = require("react/jsx-runtime");
|
|
7621
|
+
var ToggleGroupContext = React18.createContext({
|
|
7052
7622
|
size: "default",
|
|
7053
|
-
variant: "default",
|
|
7054
7623
|
spacing: 0
|
|
7055
7624
|
});
|
|
7056
7625
|
function ToggleGroup(_a) {
|
|
7057
7626
|
var _b = _a, {
|
|
7058
7627
|
className,
|
|
7059
|
-
variant,
|
|
7060
7628
|
size,
|
|
7061
7629
|
spacing = 0,
|
|
7062
7630
|
children
|
|
7063
7631
|
} = _b, props = __objRest(_b, [
|
|
7064
7632
|
"className",
|
|
7065
|
-
"variant",
|
|
7066
7633
|
"size",
|
|
7067
7634
|
"spacing",
|
|
7068
7635
|
"children"
|
|
7069
7636
|
]);
|
|
7070
|
-
return /* @__PURE__ */ (0,
|
|
7637
|
+
return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
|
|
7071
7638
|
import_radix_ui33.ToggleGroup.Root,
|
|
7072
7639
|
__spreadProps(__spreadValues({
|
|
7073
7640
|
"data-slot": "toggle-group",
|
|
7074
|
-
"data-variant": variant,
|
|
7075
7641
|
"data-size": size,
|
|
7076
7642
|
"data-spacing": spacing,
|
|
7077
7643
|
style: { "--gap": spacing },
|
|
@@ -7080,7 +7646,7 @@ function ToggleGroup(_a) {
|
|
|
7080
7646
|
className
|
|
7081
7647
|
)
|
|
7082
7648
|
}, props), {
|
|
7083
|
-
children: /* @__PURE__ */ (0,
|
|
7649
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(ToggleGroupContext.Provider, { value: { size, spacing }, children })
|
|
7084
7650
|
})
|
|
7085
7651
|
);
|
|
7086
7652
|
}
|
|
@@ -7088,29 +7654,27 @@ function ToggleGroupItem(_a) {
|
|
|
7088
7654
|
var _b = _a, {
|
|
7089
7655
|
className,
|
|
7090
7656
|
children,
|
|
7091
|
-
variant,
|
|
7092
7657
|
size
|
|
7093
7658
|
} = _b, props = __objRest(_b, [
|
|
7094
7659
|
"className",
|
|
7095
7660
|
"children",
|
|
7096
|
-
"variant",
|
|
7097
7661
|
"size"
|
|
7098
7662
|
]);
|
|
7099
|
-
const context =
|
|
7100
|
-
return /* @__PURE__ */ (0,
|
|
7663
|
+
const context = React18.useContext(ToggleGroupContext);
|
|
7664
|
+
return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
|
|
7101
7665
|
import_radix_ui33.ToggleGroup.Item,
|
|
7102
7666
|
__spreadProps(__spreadValues({
|
|
7103
7667
|
"data-slot": "toggle-group-item",
|
|
7104
|
-
"data-variant": context.variant || variant,
|
|
7105
7668
|
"data-size": context.size || size,
|
|
7106
7669
|
"data-spacing": context.spacing,
|
|
7107
7670
|
className: cn(
|
|
7108
7671
|
toggleVariants({
|
|
7109
|
-
variant: context.variant || variant,
|
|
7110
7672
|
size: context.size || size
|
|
7111
7673
|
}),
|
|
7112
7674
|
"w-auto min-w-0 shrink-0 px-3 focus:z-10 focus-visible:z-10",
|
|
7113
|
-
|
|
7675
|
+
// Joined (spacing 0): shared hairlines — every item after the first
|
|
7676
|
+
// drops its left border; the on item paints solid over its cell.
|
|
7677
|
+
"data-[spacing=0]:rounded-none data-[spacing=0]:shadow-none data-[spacing=0]:first:rounded-l-md data-[spacing=0]:last:rounded-r-md data-[spacing=0]:border-l-0 data-[spacing=0]:first:border-l",
|
|
7114
7678
|
className
|
|
7115
7679
|
)
|
|
7116
7680
|
}, props), {
|
|
@@ -7120,7 +7684,7 @@ function ToggleGroupItem(_a) {
|
|
|
7120
7684
|
}
|
|
7121
7685
|
|
|
7122
7686
|
// components/blocks/result-block.tsx
|
|
7123
|
-
var
|
|
7687
|
+
var import_jsx_runtime60 = require("react/jsx-runtime");
|
|
7124
7688
|
var THUMBS_UP_DATA_URL = "data:image/webp;base64,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";
|
|
7125
7689
|
var THUMBS_DOWN_DATA_URL = "data:image/webp;base64,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";
|
|
7126
7690
|
function ResultBlock({
|
|
@@ -7137,9 +7701,9 @@ function ResultBlock({
|
|
|
7137
7701
|
const signedAmount = isWin ? `+${amount}` : `\u2212${amount}`;
|
|
7138
7702
|
const amountColorClass = isWin ? "text-semantic-win" : "text-semantic-loss";
|
|
7139
7703
|
const haloBgClass = isWin ? "bg-semantic-win" : "bg-semantic-loss";
|
|
7140
|
-
return /* @__PURE__ */ (0,
|
|
7141
|
-
/* @__PURE__ */ (0,
|
|
7142
|
-
/* @__PURE__ */ (0,
|
|
7704
|
+
return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(Card, { className: "w-80 shrink-0 overflow-hidden rounded-md shadow-sm px-5 py-5 items-center gap-3", children: [
|
|
7705
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "relative flex items-center justify-center py-2", children: [
|
|
7706
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
|
|
7143
7707
|
"span",
|
|
7144
7708
|
{
|
|
7145
7709
|
"aria-hidden": true,
|
|
@@ -7147,7 +7711,7 @@ function ResultBlock({
|
|
|
7147
7711
|
className: `absolute size-24 rounded-full blur-2xl opacity-20 ${haloBgClass}`
|
|
7148
7712
|
}
|
|
7149
7713
|
),
|
|
7150
|
-
/* @__PURE__ */ (0,
|
|
7714
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
|
|
7151
7715
|
"img",
|
|
7152
7716
|
{
|
|
7153
7717
|
"data-results-motion": isWin ? "icon-win" : "icon-loss",
|
|
@@ -7157,28 +7721,28 @@ function ResultBlock({
|
|
|
7157
7721
|
}
|
|
7158
7722
|
)
|
|
7159
7723
|
] }),
|
|
7160
|
-
/* @__PURE__ */ (0,
|
|
7161
|
-
/* @__PURE__ */ (0,
|
|
7162
|
-
/* @__PURE__ */ (0,
|
|
7163
|
-
/* @__PURE__ */ (0,
|
|
7724
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)("p", { className: "text-lg font-semibold text-on-prominent", children: titleText }),
|
|
7725
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("p", { className: `flex items-baseline gap-1.5 ${amountColorClass}`, children: [
|
|
7726
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "font-display text-4xl font-semibold tabular-nums tracking-tight", children: signedAmount }),
|
|
7727
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "text-lg font-semibold", children: currency })
|
|
7164
7728
|
] }),
|
|
7165
|
-
/* @__PURE__ */ (0,
|
|
7166
|
-
/* @__PURE__ */ (0,
|
|
7729
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
7730
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(Badge, { variant: "tint-neutral", size: "sm", children: [
|
|
7167
7731
|
contractLabel,
|
|
7168
|
-
pickedDigit !== void 0 && /* @__PURE__ */ (0,
|
|
7169
|
-
/* @__PURE__ */ (0,
|
|
7170
|
-
/* @__PURE__ */ (0,
|
|
7732
|
+
pickedDigit !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(import_jsx_runtime60.Fragment, { children: [
|
|
7733
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { "aria-hidden": true, className: "h-3 w-px bg-border-prominent/40 mx-1" }),
|
|
7734
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "tabular-nums", children: pickedDigit })
|
|
7171
7735
|
] })
|
|
7172
7736
|
] }),
|
|
7173
|
-
/* @__PURE__ */ (0,
|
|
7737
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)(Badge, { variant: "tint-neutral", size: "sm", children: duration })
|
|
7174
7738
|
] }),
|
|
7175
|
-
/* @__PURE__ */ (0,
|
|
7176
|
-
ctaMode === "next-round" && /* @__PURE__ */ (0,
|
|
7177
|
-
ctaMode === "go-again" && /* @__PURE__ */ (0,
|
|
7178
|
-
ctaMode === "conversion" && /* @__PURE__ */ (0,
|
|
7179
|
-
/* @__PURE__ */ (0,
|
|
7180
|
-
/* @__PURE__ */ (0,
|
|
7181
|
-
/* @__PURE__ */ (0,
|
|
7739
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "w-full pt-2", children: [
|
|
7740
|
+
ctaMode === "next-round" && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(Button, { className: "w-full", children: "Next round" }),
|
|
7741
|
+
ctaMode === "go-again" && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(Button, { className: "w-full", children: "Go again" }),
|
|
7742
|
+
ctaMode === "conversion" && /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "w-full flex flex-col gap-3", children: [
|
|
7743
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)("p", { className: "text-center text-base font-semibold text-on-prominent", children: "Ready to play for real?" }),
|
|
7744
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)(Button, { className: "w-full", children: "Deposit now" }),
|
|
7745
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)(Button, { variant: "secondary", className: "w-full", children: "Stay in demo" })
|
|
7182
7746
|
] })
|
|
7183
7747
|
] })
|
|
7184
7748
|
] });
|
|
@@ -7189,21 +7753,21 @@ function ResultDialog({
|
|
|
7189
7753
|
primaryLabel,
|
|
7190
7754
|
secondaryLabel
|
|
7191
7755
|
}) {
|
|
7192
|
-
return /* @__PURE__ */ (0,
|
|
7193
|
-
/* @__PURE__ */ (0,
|
|
7194
|
-
/* @__PURE__ */ (0,
|
|
7195
|
-
/* @__PURE__ */ (0,
|
|
7756
|
+
return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(Card, { className: "w-80 shrink-0 overflow-hidden rounded-md shadow-sm px-5 py-6 items-center gap-4", children: [
|
|
7757
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "flex flex-col items-center gap-2 text-center", children: [
|
|
7758
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)("p", { className: "text-lg font-semibold text-on-prominent", children: title }),
|
|
7759
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)("p", { className: "text-sm text-on-subtle", children: body })
|
|
7196
7760
|
] }),
|
|
7197
|
-
/* @__PURE__ */ (0,
|
|
7198
|
-
/* @__PURE__ */ (0,
|
|
7199
|
-
/* @__PURE__ */ (0,
|
|
7761
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "w-full flex flex-col gap-2", children: [
|
|
7762
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)(Button, { className: "w-full", children: primaryLabel }),
|
|
7763
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)(Button, { variant: "secondary", className: "w-full", children: secondaryLabel })
|
|
7200
7764
|
] })
|
|
7201
7765
|
] });
|
|
7202
7766
|
}
|
|
7203
7767
|
|
|
7204
7768
|
// components/blocks/header-navigation-block.tsx
|
|
7205
|
-
var
|
|
7206
|
-
var
|
|
7769
|
+
var import_lucide_react29 = require("lucide-react");
|
|
7770
|
+
var import_jsx_runtime61 = require("react/jsx-runtime");
|
|
7207
7771
|
function HeaderNavigationBlock({
|
|
7208
7772
|
onBack,
|
|
7209
7773
|
badge,
|
|
@@ -7212,15 +7776,15 @@ function HeaderNavigationBlock({
|
|
|
7212
7776
|
actions
|
|
7213
7777
|
}) {
|
|
7214
7778
|
var _a;
|
|
7215
|
-
return /* @__PURE__ */ (0,
|
|
7216
|
-
onBack && /* @__PURE__ */ (0,
|
|
7217
|
-
/* @__PURE__ */ (0,
|
|
7218
|
-
badge && /* @__PURE__ */ (0,
|
|
7219
|
-
/* @__PURE__ */ (0,
|
|
7220
|
-
/* @__PURE__ */ (0,
|
|
7779
|
+
return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "w-full min-w-80 max-w-layout-diagram-small rounded-md overflow-hidden bg-prominent", children: /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("header", { className: "flex items-center gap-2 border-b border-border-subtle bg-prominent px-layout-margin-inline py-3", children: [
|
|
7780
|
+
onBack && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(NavigationButton, { type: "button", size: "md", "aria-label": "Back", onClick: onBack, children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_lucide_react29.ArrowLeft, { className: "size-5" }) }),
|
|
7781
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "flex min-w-0 flex-1 items-center justify-center gap-2", children: [
|
|
7782
|
+
badge && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(Badge, { variant: (_a = badge.variant) != null ? _a : "tint-warning", size: "sm", children: badge.label }),
|
|
7783
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "font-display font-semibold tabular-nums text-on-prominent", children: balance.amount }),
|
|
7784
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "text-sm text-on-subtle", children: balance.currency })
|
|
7221
7785
|
] }),
|
|
7222
|
-
/* @__PURE__ */ (0,
|
|
7223
|
-
history && /* @__PURE__ */ (0,
|
|
7786
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "flex shrink-0 items-center gap-1", children: [
|
|
7787
|
+
history && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(HistoryButton, __spreadValues({}, history)),
|
|
7224
7788
|
actions
|
|
7225
7789
|
] })
|
|
7226
7790
|
] }) });
|
|
@@ -7233,9 +7797,9 @@ function HistoryButton({
|
|
|
7233
7797
|
const show = typeof count === "number" && count > 0;
|
|
7234
7798
|
const label = show ? count > 99 ? "99+" : String(count) : null;
|
|
7235
7799
|
const ariaLabel = ariaLabelOverride != null ? ariaLabelOverride : show ? `Open history, ${count} new` : "Open history";
|
|
7236
|
-
return /* @__PURE__ */ (0,
|
|
7237
|
-
/* @__PURE__ */ (0,
|
|
7238
|
-
show && /* @__PURE__ */ (0,
|
|
7800
|
+
return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "relative inline-flex", children: [
|
|
7801
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(NavigationButton, { type: "button", size: "md", "aria-label": ariaLabel, onClick, children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_lucide_react29.History, { className: "size-5" }) }),
|
|
7802
|
+
show && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
7239
7803
|
"span",
|
|
7240
7804
|
{
|
|
7241
7805
|
"aria-hidden": true,
|
|
@@ -7247,9 +7811,9 @@ function HistoryButton({
|
|
|
7247
7811
|
}
|
|
7248
7812
|
|
|
7249
7813
|
// components/blocks/faq-block.tsx
|
|
7250
|
-
var
|
|
7814
|
+
var import_lucide_react30 = require("lucide-react");
|
|
7251
7815
|
var import_radix_ui34 = require("radix-ui");
|
|
7252
|
-
var
|
|
7816
|
+
var import_jsx_runtime62 = require("react/jsx-runtime");
|
|
7253
7817
|
function FAQBlock({
|
|
7254
7818
|
eyebrow = "FAQ",
|
|
7255
7819
|
title = "Frequently asked questions",
|
|
@@ -7261,34 +7825,34 @@ function FAQBlock({
|
|
|
7261
7825
|
}) {
|
|
7262
7826
|
var _a, _b;
|
|
7263
7827
|
if (layout === "two-column") {
|
|
7264
|
-
return /* @__PURE__ */ (0,
|
|
7265
|
-
/* @__PURE__ */ (0,
|
|
7266
|
-
/* @__PURE__ */ (0,
|
|
7267
|
-
/* @__PURE__ */ (0,
|
|
7268
|
-
intro && /* @__PURE__ */ (0,
|
|
7828
|
+
return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "@container w-full", children: /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "flex flex-col @[600px]:flex-row gap-8 @[600px]:gap-12", children: [
|
|
7829
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "flex flex-col gap-4 flex-1 @[600px]:max-w-xs", children: [
|
|
7830
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { className: "text-xs font-body font-semibold tracking-widest uppercase text-on-subtle", children: eyebrow }),
|
|
7831
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)("h2", { className: "text-4xl @[600px]:text-6xl font-semibold font-display text-on-prominent tracking-tight", children: title }),
|
|
7832
|
+
intro && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("p", { className: "text-base font-body text-on-subtle", children: intro })
|
|
7269
7833
|
] }),
|
|
7270
|
-
/* @__PURE__ */ (0,
|
|
7834
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "flex-1", children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
|
|
7271
7835
|
Accordion,
|
|
7272
7836
|
{
|
|
7273
7837
|
type: "single",
|
|
7274
7838
|
collapsible: true,
|
|
7275
7839
|
defaultValue: defaultValue != null ? defaultValue : (_a = items[0]) == null ? void 0 : _a.value,
|
|
7276
7840
|
className: "w-full",
|
|
7277
|
-
children: items.map(({ value, question, answer }, i) => /* @__PURE__ */ (0,
|
|
7278
|
-
/* @__PURE__ */ (0,
|
|
7841
|
+
children: items.map(({ value, question, answer }, i) => /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(AccordionItem, { value, children: [
|
|
7842
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_radix_ui34.Accordion.Header, { className: "flex", children: /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
|
|
7279
7843
|
import_radix_ui34.Accordion.Trigger,
|
|
7280
7844
|
{
|
|
7281
7845
|
className: "group flex flex-1 items-center justify-between gap-4 py-5 text-left outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50",
|
|
7282
7846
|
children: [
|
|
7283
|
-
/* @__PURE__ */ (0,
|
|
7284
|
-
/* @__PURE__ */ (0,
|
|
7285
|
-
/* @__PURE__ */ (0,
|
|
7847
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("span", { className: "flex items-baseline gap-4", children: [
|
|
7848
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { className: "text-sm font-body text-on-subtle shrink-0 w-6", children: String(i + 1).padStart(2, "0") }),
|
|
7849
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { className: "text-lg @[600px]:text-xl font-semibold font-display text-on-prominent", children: question })
|
|
7286
7850
|
] }),
|
|
7287
|
-
/* @__PURE__ */ (0,
|
|
7851
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { className: cn(
|
|
7288
7852
|
"shrink-0 size-7 flex items-center justify-center rounded-sm border transition-all duration-200",
|
|
7289
7853
|
"group-data-[state=open]:bg-primary group-data-[state=open]:border-primary",
|
|
7290
7854
|
"group-data-[state=closed]:bg-transparent group-data-[state=closed]:border-border-subtle"
|
|
7291
|
-
), children: /* @__PURE__ */ (0,
|
|
7855
|
+
), children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_lucide_react30.Plus, { className: cn(
|
|
7292
7856
|
"size-4 transition-all duration-200",
|
|
7293
7857
|
"group-data-[state=open]:rotate-45 group-data-[state=open]:text-on-primary",
|
|
7294
7858
|
"group-data-[state=closed]:text-on-prominent"
|
|
@@ -7296,7 +7860,7 @@ function FAQBlock({
|
|
|
7296
7860
|
]
|
|
7297
7861
|
}
|
|
7298
7862
|
) }),
|
|
7299
|
-
/* @__PURE__ */ (0,
|
|
7863
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)(AccordionContent, { children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("p", { className: "text-base font-body text-on-subtle pl-10 pb-4", children: answer }) })
|
|
7300
7864
|
] }, value))
|
|
7301
7865
|
}
|
|
7302
7866
|
) })
|
|
@@ -7307,38 +7871,38 @@ function FAQBlock({
|
|
|
7307
7871
|
const helpCardPaddingClass = layout === "desktop" ? "p-8" : "p-6";
|
|
7308
7872
|
const gapClass = layout === "desktop" ? "gap-12" : "gap-10";
|
|
7309
7873
|
const headerGapClass = layout === "desktop" ? "gap-5" : "gap-4";
|
|
7310
|
-
return /* @__PURE__ */ (0,
|
|
7311
|
-
/* @__PURE__ */ (0,
|
|
7312
|
-
/* @__PURE__ */ (0,
|
|
7313
|
-
/* @__PURE__ */ (0,
|
|
7314
|
-
intro && /* @__PURE__ */ (0,
|
|
7874
|
+
return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: `w-full flex flex-col ${gapClass}`, children: [
|
|
7875
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: `flex flex-col ${headerGapClass} items-center w-full`, children: [
|
|
7876
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { className: "text-sm text-on-subtle font-body", children: eyebrow }),
|
|
7877
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)("h2", { className: headingClass, children: title }),
|
|
7878
|
+
intro && /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("p", { className: "text-lg text-on-subtle font-body text-center", children: intro })
|
|
7315
7879
|
] }),
|
|
7316
|
-
/* @__PURE__ */ (0,
|
|
7880
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
|
|
7317
7881
|
Accordion,
|
|
7318
7882
|
{
|
|
7319
7883
|
type: "single",
|
|
7320
7884
|
collapsible: true,
|
|
7321
7885
|
defaultValue: defaultValue != null ? defaultValue : (_b = items[0]) == null ? void 0 : _b.value,
|
|
7322
7886
|
className: "w-full",
|
|
7323
|
-
children: items.map(({ value, question, answer }) => /* @__PURE__ */ (0,
|
|
7324
|
-
/* @__PURE__ */ (0,
|
|
7325
|
-
/* @__PURE__ */ (0,
|
|
7887
|
+
children: items.map(({ value, question, answer }) => /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(AccordionItem, { value, children: [
|
|
7888
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)(AccordionTrigger, { className: "text-base font-medium font-body text-on-prominent hover:no-underline", children: question }),
|
|
7889
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)(AccordionContent, { children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("p", { className: "text-sm text-on-subtle font-body pb-4", children: answer }) })
|
|
7326
7890
|
] }, value))
|
|
7327
7891
|
}
|
|
7328
7892
|
),
|
|
7329
|
-
helpCard && /* @__PURE__ */ (0,
|
|
7330
|
-
/* @__PURE__ */ (0,
|
|
7331
|
-
/* @__PURE__ */ (0,
|
|
7332
|
-
/* @__PURE__ */ (0,
|
|
7893
|
+
helpCard && /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: `flex flex-col gap-6 items-center w-full bg-subtle rounded-xl ${helpCardPaddingClass}`, children: [
|
|
7894
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: "flex flex-col gap-2 w-full", children: [
|
|
7895
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)("h3", { className: helpTitleClass, children: helpCard.title }),
|
|
7896
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)("p", { className: "text-base text-on-subtle font-body", children: helpCard.body })
|
|
7333
7897
|
] }),
|
|
7334
|
-
/* @__PURE__ */ (0,
|
|
7898
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)(Button, { size: "sm", onClick: helpCard.onCtaClick, children: helpCard.ctaLabel })
|
|
7335
7899
|
] })
|
|
7336
7900
|
] });
|
|
7337
7901
|
}
|
|
7338
7902
|
|
|
7339
7903
|
// components/blocks/hero-block.tsx
|
|
7340
|
-
var
|
|
7341
|
-
var
|
|
7904
|
+
var import_lucide_react31 = require("lucide-react");
|
|
7905
|
+
var import_jsx_runtime63 = require("react/jsx-runtime");
|
|
7342
7906
|
function HeroBlock({
|
|
7343
7907
|
layout = "centered",
|
|
7344
7908
|
tagline,
|
|
@@ -7349,31 +7913,31 @@ function HeroBlock({
|
|
|
7349
7913
|
image
|
|
7350
7914
|
}) {
|
|
7351
7915
|
if (layout === "centered") {
|
|
7352
|
-
return /* @__PURE__ */ (0,
|
|
7353
|
-
/* @__PURE__ */ (0,
|
|
7354
|
-
tagline && /* @__PURE__ */ (0,
|
|
7355
|
-
/* @__PURE__ */ (0,
|
|
7356
|
-
/* @__PURE__ */ (0,
|
|
7916
|
+
return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "w-full border border-border-subtle rounded-xl overflow-hidden bg-prominent", children: /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "flex flex-col items-center justify-center gap-8 px-layout-margin-inline py-24 max-w-2xl mx-auto text-center", children: [
|
|
7917
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "flex flex-col items-center gap-6 w-full", children: [
|
|
7918
|
+
tagline && /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(TaglinePill, __spreadValues({}, tagline)),
|
|
7919
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("h1", { className: "text-5xl font-semibold font-display tracking-tight text-on-prominent text-center", children: heading }),
|
|
7920
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("p", { className: "text-lg font-body text-on-subtle text-center", children: body })
|
|
7357
7921
|
] }),
|
|
7358
|
-
/* @__PURE__ */ (0,
|
|
7922
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(Button, { size: "sm", onClick: primaryCta.onClick, children: [
|
|
7359
7923
|
primaryCta.label,
|
|
7360
|
-
primaryCta.trailingArrow !== false && /* @__PURE__ */ (0,
|
|
7924
|
+
primaryCta.trailingArrow !== false && /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_lucide_react31.ArrowRight, { className: "size-4" })
|
|
7361
7925
|
] })
|
|
7362
7926
|
] }) });
|
|
7363
7927
|
}
|
|
7364
|
-
return /* @__PURE__ */ (0,
|
|
7365
|
-
/* @__PURE__ */ (0,
|
|
7366
|
-
/* @__PURE__ */ (0,
|
|
7367
|
-
tagline && /* @__PURE__ */ (0,
|
|
7368
|
-
/* @__PURE__ */ (0,
|
|
7369
|
-
/* @__PURE__ */ (0,
|
|
7928
|
+
return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "w-full border border-border-subtle rounded-xl overflow-hidden bg-prominent", children: /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "flex flex-col min-[600px]:flex-row items-center gap-layout-gutter px-layout-margin-inline py-16 min-[600px]:py-24 max-w-5xl mx-auto", children: [
|
|
7929
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "flex flex-col gap-6 min-[600px]:gap-8 flex-1 min-w-0 items-center min-[600px]:items-start text-center min-[600px]:text-left w-full", children: [
|
|
7930
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "flex flex-col gap-5 min-[600px]:gap-6 items-center min-[600px]:items-start w-full", children: [
|
|
7931
|
+
tagline && /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(TaglinePill, __spreadProps(__spreadValues({}, tagline), { responsive: true })),
|
|
7932
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("h1", { className: "text-4xl min-[600px]:text-5xl font-semibold font-display tracking-tight text-on-prominent", children: heading }),
|
|
7933
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("p", { className: "text-lg font-body text-on-subtle", children: body })
|
|
7370
7934
|
] }),
|
|
7371
|
-
/* @__PURE__ */ (0,
|
|
7372
|
-
/* @__PURE__ */ (0,
|
|
7373
|
-
secondaryCta && /* @__PURE__ */ (0,
|
|
7935
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "flex items-center justify-center min-[600px]:justify-start gap-2", children: [
|
|
7936
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Button, { size: "sm", onClick: primaryCta.onClick, children: primaryCta.label }),
|
|
7937
|
+
secondaryCta && /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(Button, { variant: "secondary", size: "sm", onClick: secondaryCta.onClick, children: secondaryCta.label })
|
|
7374
7938
|
] })
|
|
7375
7939
|
] }),
|
|
7376
|
-
/* @__PURE__ */ (0,
|
|
7940
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "w-full min-[600px]:flex-1 min-[600px]:min-w-0 aspect-square rounded-xl bg-subtle shrink-0", "aria-hidden": "true", children: image })
|
|
7377
7941
|
] }) });
|
|
7378
7942
|
}
|
|
7379
7943
|
function TaglinePill({
|
|
@@ -7381,25 +7945,25 @@ function TaglinePill({
|
|
|
7381
7945
|
suffix,
|
|
7382
7946
|
responsive
|
|
7383
7947
|
}) {
|
|
7384
|
-
return /* @__PURE__ */ (0,
|
|
7385
|
-
/* @__PURE__ */ (0,
|
|
7386
|
-
responsive && suffix ? /* @__PURE__ */ (0,
|
|
7387
|
-
/* @__PURE__ */ (0,
|
|
7948
|
+
return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "inline-flex items-center gap-1.5 h-7 px-3 rounded-full border border-border-subtle bg-prominent shadow-sm shrink-0", children: [
|
|
7949
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("span", { className: "size-1.5 rounded-full bg-semantic-win shrink-0", "aria-hidden": "true" }),
|
|
7950
|
+
responsive && suffix ? /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("span", { className: "text-sm font-body text-on-prominent whitespace-nowrap", children: [
|
|
7951
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("span", { className: "hidden min-[600px]:inline", children: [
|
|
7388
7952
|
label,
|
|
7389
|
-
/* @__PURE__ */ (0,
|
|
7953
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("span", { className: "text-on-subtle", children: " \xB7 " })
|
|
7390
7954
|
] }),
|
|
7391
|
-
/* @__PURE__ */ (0,
|
|
7392
|
-
] }) : /* @__PURE__ */ (0,
|
|
7955
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("span", { className: "text-on-subtle min-[600px]:text-on-prominent", children: suffix })
|
|
7956
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("span", { className: "text-sm font-body text-on-prominent whitespace-nowrap", children: [
|
|
7393
7957
|
label,
|
|
7394
|
-
suffix && /* @__PURE__ */ (0,
|
|
7958
|
+
suffix && /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("span", { className: "text-on-subtle", children: ` \xB7 ${suffix}` })
|
|
7395
7959
|
] }),
|
|
7396
|
-
/* @__PURE__ */ (0,
|
|
7960
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_lucide_react31.ArrowUpRight, { className: "size-4 text-on-subtle shrink-0", "aria-hidden": "true" })
|
|
7397
7961
|
] });
|
|
7398
7962
|
}
|
|
7399
7963
|
|
|
7400
7964
|
// components/blocks/auth-block.tsx
|
|
7401
|
-
var
|
|
7402
|
-
var
|
|
7965
|
+
var React19 = __toESM(require("react"), 1);
|
|
7966
|
+
var import_jsx_runtime64 = require("react/jsx-runtime");
|
|
7403
7967
|
function AuthBlock({
|
|
7404
7968
|
mode,
|
|
7405
7969
|
logoSrc,
|
|
@@ -7414,20 +7978,20 @@ function AuthBlock({
|
|
|
7414
7978
|
const ctaText = mode === "sign-in" ? "Sign in" : "Sign up";
|
|
7415
7979
|
const footerPrompt = mode === "sign-in" ? "Don't have an account?" : "Already have an account?";
|
|
7416
7980
|
const footerLinkLabel = mode === "sign-in" ? "Sign up" : "Log in";
|
|
7417
|
-
const [email, setEmail] =
|
|
7418
|
-
return /* @__PURE__ */ (0,
|
|
7419
|
-
/* @__PURE__ */ (0,
|
|
7420
|
-
/* @__PURE__ */ (0,
|
|
7421
|
-
/* @__PURE__ */ (0,
|
|
7981
|
+
const [email, setEmail] = React19.useState("");
|
|
7982
|
+
return /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("div", { className: "flex flex-col items-center gap-6 w-full", children: [
|
|
7983
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
7984
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)("img", { src: logoSrc, alt: wordmark, className: "size-8 object-contain" }),
|
|
7985
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)("span", { className: "font-display font-semibold text-base text-on-prominent tracking-tight", children: wordmark })
|
|
7422
7986
|
] }),
|
|
7423
|
-
/* @__PURE__ */ (0,
|
|
7424
|
-
/* @__PURE__ */ (0,
|
|
7425
|
-
/* @__PURE__ */ (0,
|
|
7426
|
-
/* @__PURE__ */ (0,
|
|
7427
|
-
/* @__PURE__ */ (0,
|
|
7428
|
-
/* @__PURE__ */ (0,
|
|
7987
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)("h2", { className: "text-3xl font-semibold font-display text-on-prominent text-center", children: headingText }),
|
|
7988
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)("div", { className: "flex flex-col gap-3 w-full", children: providers.map((p) => /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(ProviderButton, { provider: p }, p)) }),
|
|
7989
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("div", { className: "flex items-center gap-3 w-full", children: [
|
|
7990
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)("div", { className: "flex-1 h-px bg-border-subtle" }),
|
|
7991
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)("span", { className: "text-sm text-on-subtle font-body", children: "or" }),
|
|
7992
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)("div", { className: "flex-1 h-px bg-border-subtle" })
|
|
7429
7993
|
] }),
|
|
7430
|
-
/* @__PURE__ */ (0,
|
|
7994
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)("div", { className: "flex items-center gap-2 w-full", children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)(
|
|
7431
7995
|
Input,
|
|
7432
7996
|
{
|
|
7433
7997
|
id: `${idPrefix}-email`,
|
|
@@ -7438,60 +8002,60 @@ function AuthBlock({
|
|
|
7438
8002
|
onChange: (e) => setEmail(e.target.value)
|
|
7439
8003
|
}
|
|
7440
8004
|
) }),
|
|
7441
|
-
/* @__PURE__ */ (0,
|
|
8005
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("p", { className: "text-sm text-on-subtle font-body text-left w-full", children: [
|
|
7442
8006
|
termsText,
|
|
7443
8007
|
", you agree to our",
|
|
7444
8008
|
" ",
|
|
7445
|
-
/* @__PURE__ */ (0,
|
|
8009
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)(Link, { size: "sm", href: "#", children: "Terms & Conditions" })
|
|
7446
8010
|
] }),
|
|
7447
|
-
/* @__PURE__ */ (0,
|
|
7448
|
-
/* @__PURE__ */ (0,
|
|
8011
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)(Button, { size: "md", className: "w-full", onClick: () => onSubmit == null ? void 0 : onSubmit({ email }), children: ctaText }),
|
|
8012
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("p", { className: "text-sm text-on-subtle font-body text-center", children: [
|
|
7449
8013
|
footerPrompt,
|
|
7450
8014
|
" ",
|
|
7451
|
-
/* @__PURE__ */ (0,
|
|
8015
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)(Link, { size: "sm", href: crossLinkHref, children: footerLinkLabel })
|
|
7452
8016
|
] })
|
|
7453
8017
|
] });
|
|
7454
8018
|
}
|
|
7455
8019
|
function ProviderButton({ provider }) {
|
|
7456
8020
|
switch (provider) {
|
|
7457
8021
|
case "google":
|
|
7458
|
-
return /* @__PURE__ */ (0,
|
|
7459
|
-
/* @__PURE__ */ (0,
|
|
7460
|
-
/* @__PURE__ */ (0,
|
|
7461
|
-
/* @__PURE__ */ (0,
|
|
7462
|
-
/* @__PURE__ */ (0,
|
|
7463
|
-
/* @__PURE__ */ (0,
|
|
8022
|
+
return /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)(Button, { variant: "secondary", size: "lg", className: "w-full", children: [
|
|
8023
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("svg", { width: "18", height: "18", viewBox: "0 0 18 18", "aria-hidden": "true", fill: "none", className: "shrink-0", children: [
|
|
8024
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)("path", { d: "M17.64 9.205c0-.639-.057-1.252-.164-1.841H9v3.481h4.844a4.14 4.14 0 0 1-1.796 2.716v2.259h2.908c1.702-1.567 2.684-3.875 2.684-6.615Z", fill: "#4285F4" }),
|
|
8025
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)("path", { d: "M9 18c2.43 0 4.467-.806 5.956-2.18l-2.908-2.259c-.806.54-1.837.86-3.048.86-2.344 0-4.328-1.584-5.036-3.711H.957v2.332A8.997 8.997 0 0 0 9 18Z", fill: "#34A853" }),
|
|
8026
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)("path", { d: "M3.964 10.71A5.41 5.41 0 0 1 3.682 9c0-.593.102-1.17.282-1.71V4.958H.957A8.996 8.996 0 0 0 0 9c0 1.452.348 2.827.957 4.042l3.007-2.332Z", fill: "#FBBC05" }),
|
|
8027
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)("path", { d: "M9 3.58c1.321 0 2.508.454 3.44 1.345l2.582-2.58C13.463.891 11.426 0 9 0A8.997 8.997 0 0 0 .957 4.958L3.964 7.29C4.672 5.163 6.656 3.58 9 3.58Z", fill: "#EA4335" })
|
|
7464
8028
|
] }),
|
|
7465
8029
|
"Continue with Google"
|
|
7466
8030
|
] });
|
|
7467
8031
|
case "telegram":
|
|
7468
|
-
return /* @__PURE__ */ (0,
|
|
7469
|
-
/* @__PURE__ */ (0,
|
|
7470
|
-
/* @__PURE__ */ (0,
|
|
7471
|
-
/* @__PURE__ */ (0,
|
|
7472
|
-
/* @__PURE__ */ (0,
|
|
8032
|
+
return /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)(Button, { variant: "secondary", size: "lg", className: "w-full", children: [
|
|
8033
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("svg", { width: "18", height: "18", viewBox: "0 0 18 18", "aria-hidden": "true", fill: "none", className: "shrink-0", children: [
|
|
8034
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)("circle", { cx: "9", cy: "9", r: "9", fill: "#29B6F6" }),
|
|
8035
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)("path", { d: "M13.5 5.25 11.25 13.5l-2.25-3-3 1.5 1.5-5.25 6-1.5Z", fill: "white", opacity: "0.3" }),
|
|
8036
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)("path", { d: "m4.5 8.625 7.5-3-1.125 7.125-2.625-2.25-1.5 1.5.375-3.375Z", fill: "white" })
|
|
7473
8037
|
] }),
|
|
7474
8038
|
"Continue with Telegram"
|
|
7475
8039
|
] });
|
|
7476
8040
|
case "x":
|
|
7477
|
-
return /* @__PURE__ */ (0,
|
|
7478
|
-
/* @__PURE__ */ (0,
|
|
8041
|
+
return /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)(Button, { variant: "secondary", size: "lg", className: "w-full", children: [
|
|
8042
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)("svg", { width: "18", height: "18", viewBox: "0 0 18 18", "aria-hidden": "true", fill: "currentColor", className: "shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime64.jsx)("path", { d: "M13.955 2.25h2.423L10.977 8.28 17.25 15.75h-4.812l-3.913-5.116-4.477 5.116H1.645l5.703-6.52L1.125 2.25h4.934l3.538 4.678 4.358-4.678Zm-.85 12.105h1.343L5.025 3.627H3.579l9.526 10.728Z" }) }),
|
|
7479
8043
|
"Continue with X (Twitter)"
|
|
7480
8044
|
] });
|
|
7481
8045
|
}
|
|
7482
8046
|
}
|
|
7483
8047
|
|
|
7484
8048
|
// components/blocks/navbar-block.tsx
|
|
7485
|
-
var
|
|
7486
|
-
var
|
|
7487
|
-
var
|
|
8049
|
+
var React20 = __toESM(require("react"), 1);
|
|
8050
|
+
var import_lucide_react32 = require("lucide-react");
|
|
8051
|
+
var import_jsx_runtime65 = require("react/jsx-runtime");
|
|
7488
8052
|
function NavBarBlock({ brand, links, signIn, signUp }) {
|
|
7489
8053
|
var _a, _b, _c, _d;
|
|
7490
|
-
const [mobileMenuOpen, setMobileMenuOpen] =
|
|
7491
|
-
return /* @__PURE__ */ (0,
|
|
7492
|
-
/* @__PURE__ */ (0,
|
|
7493
|
-
/* @__PURE__ */ (0,
|
|
7494
|
-
/* @__PURE__ */ (0,
|
|
8054
|
+
const [mobileMenuOpen, setMobileMenuOpen] = React20.useState(false);
|
|
8055
|
+
return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: "w-full border border-border-subtle rounded-md overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("nav", { className: "bg-prominent", children: [
|
|
8056
|
+
/* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "flex items-center justify-between px-layout-margin-inline py-3", children: [
|
|
8057
|
+
/* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "flex items-center gap-6", children: [
|
|
8058
|
+
/* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
|
|
7495
8059
|
"img",
|
|
7496
8060
|
{
|
|
7497
8061
|
src: brand.fullLogoSrc,
|
|
@@ -7499,7 +8063,7 @@ function NavBarBlock({ brand, links, signIn, signUp }) {
|
|
|
7499
8063
|
className: "hidden min-[600px]:block h-7 w-auto shrink-0 object-contain object-left"
|
|
7500
8064
|
}
|
|
7501
8065
|
),
|
|
7502
|
-
/* @__PURE__ */ (0,
|
|
8066
|
+
/* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
|
|
7503
8067
|
"img",
|
|
7504
8068
|
{
|
|
7505
8069
|
src: brand.iconLogoSrc,
|
|
@@ -7507,13 +8071,13 @@ function NavBarBlock({ brand, links, signIn, signUp }) {
|
|
|
7507
8071
|
className: "min-[600px]:hidden size-7 shrink-0 object-contain"
|
|
7508
8072
|
}
|
|
7509
8073
|
),
|
|
7510
|
-
/* @__PURE__ */ (0,
|
|
8074
|
+
/* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: "hidden min-[600px]:flex items-center gap-1", children: links.map((l) => /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(Button, { variant: "tertiary", size: "sm", onClick: l.onClick, children: l.label }, l.label)) })
|
|
7511
8075
|
] }),
|
|
7512
|
-
/* @__PURE__ */ (0,
|
|
7513
|
-
signIn && /* @__PURE__ */ (0,
|
|
7514
|
-
signUp && /* @__PURE__ */ (0,
|
|
8076
|
+
/* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "hidden min-[600px]:flex items-center gap-2", children: [
|
|
8077
|
+
signIn && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(Button, { variant: "tertiary", size: "sm", onClick: signIn.onClick, children: (_a = signIn.label) != null ? _a : "Sign in" }),
|
|
8078
|
+
signUp && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(Button, { size: "sm", onClick: signUp.onClick, children: (_b = signUp.label) != null ? _b : "Sign up" })
|
|
7515
8079
|
] }),
|
|
7516
|
-
/* @__PURE__ */ (0,
|
|
8080
|
+
/* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
|
|
7517
8081
|
Button,
|
|
7518
8082
|
{
|
|
7519
8083
|
variant: "tertiary",
|
|
@@ -7522,12 +8086,12 @@ function NavBarBlock({ brand, links, signIn, signUp }) {
|
|
|
7522
8086
|
"aria-expanded": mobileMenuOpen,
|
|
7523
8087
|
className: "min-[600px]:hidden",
|
|
7524
8088
|
onClick: () => setMobileMenuOpen((prev) => !prev),
|
|
7525
|
-
children: mobileMenuOpen ? /* @__PURE__ */ (0,
|
|
8089
|
+
children: mobileMenuOpen ? /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_lucide_react32.X, { className: "size-4" }) : /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(import_lucide_react32.Menu, { className: "size-4" })
|
|
7526
8090
|
}
|
|
7527
8091
|
)
|
|
7528
8092
|
] }),
|
|
7529
|
-
mobileMenuOpen && /* @__PURE__ */ (0,
|
|
7530
|
-
links.map((l) => /* @__PURE__ */ (0,
|
|
8093
|
+
mobileMenuOpen && /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "min-[600px]:hidden flex flex-col border-t border-border-subtle px-layout-margin-inline py-3 gap-1", children: [
|
|
8094
|
+
links.map((l) => /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(
|
|
7531
8095
|
Button,
|
|
7532
8096
|
{
|
|
7533
8097
|
variant: "tertiary",
|
|
@@ -7538,17 +8102,17 @@ function NavBarBlock({ brand, links, signIn, signUp }) {
|
|
|
7538
8102
|
},
|
|
7539
8103
|
l.label
|
|
7540
8104
|
)),
|
|
7541
|
-
(signIn || signUp) && /* @__PURE__ */ (0,
|
|
7542
|
-
signIn && /* @__PURE__ */ (0,
|
|
7543
|
-
signUp && /* @__PURE__ */ (0,
|
|
8105
|
+
(signIn || signUp) && /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("div", { className: "flex flex-col gap-2 pt-3 mt-2 border-t border-border-subtle", children: [
|
|
8106
|
+
signIn && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(Button, { variant: "secondary", size: "sm", className: "w-full", onClick: signIn.onClick, children: (_c = signIn.label) != null ? _c : "Sign in" }),
|
|
8107
|
+
signUp && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(Button, { size: "sm", className: "w-full", onClick: signUp.onClick, children: (_d = signUp.label) != null ? _d : "Sign up" })
|
|
7544
8108
|
] })
|
|
7545
8109
|
] })
|
|
7546
8110
|
] }) });
|
|
7547
8111
|
}
|
|
7548
8112
|
|
|
7549
8113
|
// components/blocks/open-positions-block.tsx
|
|
7550
|
-
var
|
|
7551
|
-
var
|
|
8114
|
+
var import_lucide_react33 = require("lucide-react");
|
|
8115
|
+
var import_jsx_runtime66 = require("react/jsx-runtime");
|
|
7552
8116
|
function OpenPositionsBlock({
|
|
7553
8117
|
trigger,
|
|
7554
8118
|
sheetTitle = "Positions",
|
|
@@ -7557,28 +8121,28 @@ function OpenPositionsBlock({
|
|
|
7557
8121
|
emptyState
|
|
7558
8122
|
}) {
|
|
7559
8123
|
const isMobile = useIsMobile();
|
|
7560
|
-
const body = positions.length === 0 ? emptyState != null ? emptyState : /* @__PURE__ */ (0,
|
|
8124
|
+
const body = positions.length === 0 ? emptyState != null ? emptyState : /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(DefaultEmptyState, { onViewHistory }) : /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(PositionsList, { positions, onViewHistory });
|
|
7561
8125
|
if (isMobile) {
|
|
7562
|
-
return /* @__PURE__ */ (0,
|
|
7563
|
-
/* @__PURE__ */ (0,
|
|
7564
|
-
/* @__PURE__ */ (0,
|
|
7565
|
-
/* @__PURE__ */ (0,
|
|
7566
|
-
/* @__PURE__ */ (0,
|
|
7567
|
-
/* @__PURE__ */ (0,
|
|
8126
|
+
return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(Drawer, { children: [
|
|
8127
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(DrawerTrigger, { asChild: true, children: trigger }),
|
|
8128
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(DrawerContent, { className: "p-0 flex flex-col", children: [
|
|
8129
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(DrawerHeader, { className: "flex-row items-center justify-between px-4 py-3 shrink-0 text-left", children: [
|
|
8130
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(DrawerTitle, { className: "text-base font-semibold font-display text-on-prominent", children: sheetTitle }),
|
|
8131
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(DrawerClose, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(NavigationButton, { size: "sm", "aria-label": "Close", children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_lucide_react33.X, {}) }) })
|
|
7568
8132
|
] }),
|
|
7569
|
-
/* @__PURE__ */ (0,
|
|
8133
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(Separator, {}),
|
|
7570
8134
|
body
|
|
7571
8135
|
] })
|
|
7572
8136
|
] });
|
|
7573
8137
|
}
|
|
7574
|
-
return /* @__PURE__ */ (0,
|
|
7575
|
-
/* @__PURE__ */ (0,
|
|
7576
|
-
/* @__PURE__ */ (0,
|
|
7577
|
-
/* @__PURE__ */ (0,
|
|
7578
|
-
/* @__PURE__ */ (0,
|
|
7579
|
-
/* @__PURE__ */ (0,
|
|
8138
|
+
return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(Sheet, { children: [
|
|
8139
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(SheetTrigger, { asChild: true, children: trigger }),
|
|
8140
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(SheetContent, { side: "right", showCloseButton: false, className: "p-0 flex flex-col w-80 sm:max-w-xs", children: [
|
|
8141
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(SheetHeader, { className: "flex-row items-center justify-between px-4 py-3 shrink-0", children: [
|
|
8142
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(SheetTitle, { className: "text-base font-semibold font-display text-on-prominent", children: sheetTitle }),
|
|
8143
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(SheetClose, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(NavigationButton, { size: "sm", "aria-label": "Close", children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_lucide_react33.X, {}) }) })
|
|
7580
8144
|
] }),
|
|
7581
|
-
/* @__PURE__ */ (0,
|
|
8145
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(Separator, {}),
|
|
7582
8146
|
body
|
|
7583
8147
|
] })
|
|
7584
8148
|
] });
|
|
@@ -7587,23 +8151,23 @@ function PositionsList({
|
|
|
7587
8151
|
positions,
|
|
7588
8152
|
onViewHistory
|
|
7589
8153
|
}) {
|
|
7590
|
-
return /* @__PURE__ */ (0,
|
|
7591
|
-
/* @__PURE__ */ (0,
|
|
7592
|
-
/* @__PURE__ */ (0,
|
|
7593
|
-
/* @__PURE__ */ (0,
|
|
8154
|
+
return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "flex flex-col flex-1 min-h-0", children: [
|
|
8155
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(ItemGroup, { className: "min-h-0 overflow-y-auto", children: positions.map((pos, i) => /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(PositionRow, { position: pos }, i)) }),
|
|
8156
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(Separator, {}),
|
|
8157
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "shrink-0 flex justify-center py-4", children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(Button, { variant: "tertiary", size: "md", onClick: onViewHistory, children: "View trade history" }) })
|
|
7594
8158
|
] });
|
|
7595
8159
|
}
|
|
7596
8160
|
function PositionRow({ position }) {
|
|
7597
8161
|
const { label, suffix } = positionTitleParts(position);
|
|
7598
|
-
return /* @__PURE__ */ (0,
|
|
7599
|
-
/* @__PURE__ */ (0,
|
|
7600
|
-
/* @__PURE__ */ (0,
|
|
7601
|
-
/* @__PURE__ */ (0,
|
|
7602
|
-
suffix && /* @__PURE__ */ (0,
|
|
8162
|
+
return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(Item, { size: "sm", children: [
|
|
8163
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(ItemContent, { children: [
|
|
8164
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(ItemTitle, { children: [
|
|
8165
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "text-on-prominent", children: label }),
|
|
8166
|
+
suffix && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "text-on-subtle", children: ` ${suffix}` })
|
|
7603
8167
|
] }),
|
|
7604
|
-
/* @__PURE__ */ (0,
|
|
8168
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(MetaNote, { market: position.market, duration: position.duration })
|
|
7605
8169
|
] }),
|
|
7606
|
-
/* @__PURE__ */ (0,
|
|
8170
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(ItemActions, { children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(PnlMeta, { pnl: position.pnl, win: position.win, stake: position.stake }) })
|
|
7607
8171
|
] });
|
|
7608
8172
|
}
|
|
7609
8173
|
var DIGITS_TYPE_LABEL = {
|
|
@@ -7629,29 +8193,29 @@ function positionTitleParts(p) {
|
|
|
7629
8193
|
}
|
|
7630
8194
|
}
|
|
7631
8195
|
function MetaNote({ market, duration }) {
|
|
7632
|
-
return /* @__PURE__ */ (0,
|
|
8196
|
+
return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("span", { className: "text-xs text-on-subtle whitespace-nowrap", children: [
|
|
7633
8197
|
market,
|
|
7634
8198
|
" \xB7 ",
|
|
7635
8199
|
duration
|
|
7636
8200
|
] });
|
|
7637
8201
|
}
|
|
7638
8202
|
function PnlMeta({ pnl, win, stake }) {
|
|
7639
|
-
return /* @__PURE__ */ (0,
|
|
7640
|
-
/* @__PURE__ */ (0,
|
|
7641
|
-
/* @__PURE__ */ (0,
|
|
8203
|
+
return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "flex flex-col items-end gap-0.5", children: [
|
|
8204
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: `font-display font-semibold tabular-nums text-base ${win ? "text-semantic-win" : "text-semantic-loss"}`, children: pnl }),
|
|
8205
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "tabular-nums text-xs text-on-subtle", children: stake })
|
|
7642
8206
|
] });
|
|
7643
8207
|
}
|
|
7644
8208
|
function DefaultEmptyState({ onViewHistory }) {
|
|
7645
|
-
return /* @__PURE__ */ (0,
|
|
7646
|
-
/* @__PURE__ */ (0,
|
|
7647
|
-
/* @__PURE__ */ (0,
|
|
7648
|
-
/* @__PURE__ */ (0,
|
|
8209
|
+
return /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(Empty, { className: "flex min-h-0 flex-1 flex-col justify-center border-none rounded-none p-6 text-center", children: /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(EmptyHeader, { className: "gap-4", children: [
|
|
8210
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(EmptyMedia, { children: /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(import_lucide_react33.History, { className: "size-8 text-on-subtle" }) }),
|
|
8211
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(EmptyTitle, { className: "h6 text-on-subtle", children: "No trades yet." }),
|
|
8212
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(Button, { variant: "tertiary", size: "md", onClick: onViewHistory, children: "View trade history" })
|
|
7649
8213
|
] }) });
|
|
7650
8214
|
}
|
|
7651
8215
|
|
|
7652
8216
|
// components/blocks/game-loading-block.tsx
|
|
7653
|
-
var
|
|
7654
|
-
var
|
|
8217
|
+
var React21 = __toESM(require("react"), 1);
|
|
8218
|
+
var import_jsx_runtime67 = require("react/jsx-runtime");
|
|
7655
8219
|
function useSmoothProgress({
|
|
7656
8220
|
checkpoints,
|
|
7657
8221
|
reached,
|
|
@@ -7661,19 +8225,19 @@ function useSmoothProgress({
|
|
|
7661
8225
|
readyLabel = "Ready"
|
|
7662
8226
|
}) {
|
|
7663
8227
|
var _a, _b;
|
|
7664
|
-
const [progress, setProgress] =
|
|
7665
|
-
const [delayed, setDelayed] =
|
|
7666
|
-
const checkpointsRef =
|
|
7667
|
-
const reachedRef =
|
|
7668
|
-
const doneRef =
|
|
7669
|
-
|
|
8228
|
+
const [progress, setProgress] = React21.useState(0);
|
|
8229
|
+
const [delayed, setDelayed] = React21.useState(false);
|
|
8230
|
+
const checkpointsRef = React21.useRef(checkpoints);
|
|
8231
|
+
const reachedRef = React21.useRef(reached);
|
|
8232
|
+
const doneRef = React21.useRef(done);
|
|
8233
|
+
React21.useEffect(() => {
|
|
7670
8234
|
checkpointsRef.current = checkpoints;
|
|
7671
8235
|
reachedRef.current = reached;
|
|
7672
8236
|
doneRef.current = done;
|
|
7673
8237
|
});
|
|
7674
|
-
const progressRef =
|
|
7675
|
-
const lastAdvanceRef =
|
|
7676
|
-
|
|
8238
|
+
const progressRef = React21.useRef(0);
|
|
8239
|
+
const lastAdvanceRef = React21.useRef(0);
|
|
8240
|
+
React21.useEffect(() => {
|
|
7677
8241
|
let raf = 0;
|
|
7678
8242
|
let last = 0;
|
|
7679
8243
|
const tick = (ts) => {
|
|
@@ -7727,14 +8291,14 @@ function GameLoadingBlock({
|
|
|
7727
8291
|
backgroundImageUrl,
|
|
7728
8292
|
className
|
|
7729
8293
|
}) {
|
|
7730
|
-
const [go, setGo] =
|
|
7731
|
-
const [reduced, setReduced] =
|
|
7732
|
-
|
|
8294
|
+
const [go, setGo] = React21.useState(false);
|
|
8295
|
+
const [reduced, setReduced] = React21.useState(false);
|
|
8296
|
+
React21.useEffect(() => {
|
|
7733
8297
|
if (typeof window !== "undefined" && typeof window.matchMedia === "function") {
|
|
7734
8298
|
setReduced(window.matchMedia("(prefers-reduced-motion: reduce)").matches);
|
|
7735
8299
|
}
|
|
7736
8300
|
}, []);
|
|
7737
|
-
|
|
8301
|
+
React21.useEffect(() => {
|
|
7738
8302
|
if (!exiting) return;
|
|
7739
8303
|
const raf = requestAnimationFrame(() => setGo(true));
|
|
7740
8304
|
const timer = setTimeout(() => onExitEnd == null ? void 0 : onExitEnd(), reduced ? 240 : 520);
|
|
@@ -7744,7 +8308,7 @@ function GameLoadingBlock({
|
|
|
7744
8308
|
};
|
|
7745
8309
|
}, [exiting, reduced, onExitEnd]);
|
|
7746
8310
|
const isAbsolute = exiting || contained;
|
|
7747
|
-
return /* @__PURE__ */ (0,
|
|
8311
|
+
return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
|
|
7748
8312
|
"div",
|
|
7749
8313
|
{
|
|
7750
8314
|
role: "status",
|
|
@@ -7763,7 +8327,7 @@ function GameLoadingBlock({
|
|
|
7763
8327
|
),
|
|
7764
8328
|
style: backgroundImageUrl ? { backgroundImage: `url(${backgroundImageUrl})` } : void 0,
|
|
7765
8329
|
children: [
|
|
7766
|
-
/* @__PURE__ */ (0,
|
|
8330
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
|
|
7767
8331
|
"svg",
|
|
7768
8332
|
{
|
|
7769
8333
|
width: "120",
|
|
@@ -7772,19 +8336,19 @@ function GameLoadingBlock({
|
|
|
7772
8336
|
xmlns: "http://www.w3.org/2000/svg",
|
|
7773
8337
|
"aria-hidden": "true",
|
|
7774
8338
|
className: cn("game-loader-mark fill-on-primary", exiting && go && !reduced && "game-loader-mark-exit"),
|
|
7775
|
-
children: /* @__PURE__ */ (0,
|
|
8339
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("path", { d: MONOGRAM_D })
|
|
7776
8340
|
}
|
|
7777
8341
|
),
|
|
7778
|
-
!exiting && /* @__PURE__ */ (0,
|
|
7779
|
-
/* @__PURE__ */ (0,
|
|
8342
|
+
!exiting && /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("div", { className: "flex w-[200px] flex-col items-start gap-3.5", children: [
|
|
8343
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "relative h-2 w-full overflow-hidden rounded-xs bg-on-primary/25", children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
|
|
7780
8344
|
"div",
|
|
7781
8345
|
{
|
|
7782
8346
|
className: "absolute inset-y-0 left-0 overflow-hidden rounded-xs bg-on-primary",
|
|
7783
8347
|
style: { width: `${progress}%` },
|
|
7784
|
-
children: /* @__PURE__ */ (0,
|
|
8348
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { "aria-hidden": "true", className: "game-loader-shimmer absolute inset-y-0 left-[-60%] w-[60%]" })
|
|
7785
8349
|
}
|
|
7786
8350
|
) }),
|
|
7787
|
-
/* @__PURE__ */ (0,
|
|
8351
|
+
/* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "caption text-on-primary/90", children: delayed ? "Taking longer than usual\u2026" : label })
|
|
7788
8352
|
] })
|
|
7789
8353
|
]
|
|
7790
8354
|
}
|
|
@@ -8051,9 +8615,12 @@ function GameLoadingBlock({
|
|
|
8051
8615
|
SidebarSeparator,
|
|
8052
8616
|
SidebarTrigger,
|
|
8053
8617
|
Skeleton,
|
|
8618
|
+
SlideToConfirm,
|
|
8054
8619
|
Slider,
|
|
8055
8620
|
Spinner,
|
|
8621
|
+
Step,
|
|
8056
8622
|
Stepper,
|
|
8623
|
+
Steps,
|
|
8057
8624
|
Switch,
|
|
8058
8625
|
Table,
|
|
8059
8626
|
TableBody,
|