kaleido-ui 0.2.7 → 0.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/web/{chunk-7F5GSNHE.js → chunk-MKZZD3FM.js} +9 -2
- package/dist/web/chunk-O3VC3EQT.js +143 -0
- package/dist/web/chunk-X7AOMP24.js +235 -0
- package/dist/web/components/activity-list.js +2 -2
- package/dist/web/components/charts/bar-chart.js +1 -1
- package/dist/web/components/charts/bar-list.js +1 -1
- package/dist/web/components/charts/core.js +1 -1
- package/dist/web/components/charts/donut-chart.js +1 -1
- package/dist/web/components/charts/index.js +7 -7
- package/dist/web/components/charts/line-chart.js +1 -1
- package/dist/web/components/charts/meter.js +1 -1
- package/dist/web/components/charts/mixed-chart.js +1 -1
- package/dist/web/components/charts/scatter-chart.js +1 -1
- package/dist/web/components/date-picker.js +14 -0
- package/dist/web/components/metric-card.js +1 -1
- package/dist/web/components/trend-chart.js +2 -2
- package/dist/web/index.cjs +1092 -841
- package/dist/web/index.d.cts +41 -2
- package/dist/web/index.d.ts +41 -2
- package/dist/web/index.js +40 -36
- package/package.json +1 -1
- package/dist/web/chunk-STMNX3QT.js +0 -109
- package/dist/web/{chunk-S2ICIIH2.js → chunk-STH4BGSE.js} +3 -3
package/dist/web/index.cjs
CHANGED
|
@@ -93,6 +93,7 @@ __export(web_exports, {
|
|
|
93
93
|
CopyIcon: () => CopyIcon,
|
|
94
94
|
Copyable: () => Copyable,
|
|
95
95
|
DEFAULT_AMOUNT_LOCALE: () => DEFAULT_AMOUNT_LOCALE,
|
|
96
|
+
DatePicker: () => DatePicker,
|
|
96
97
|
DateRangeFilter: () => DateRangeFilter,
|
|
97
98
|
DepositAssetSelection: () => DepositAssetSelection,
|
|
98
99
|
DepositGeneratedView: () => DepositGeneratedView,
|
|
@@ -9548,45 +9549,253 @@ function Boundary({ label, value }) {
|
|
|
9548
9549
|
] });
|
|
9549
9550
|
}
|
|
9550
9551
|
|
|
9551
|
-
// src/web/components/
|
|
9552
|
+
// src/web/components/date-picker.tsx
|
|
9553
|
+
var React26 = __toESM(require("react"), 1);
|
|
9552
9554
|
var import_jsx_runtime98 = require("react/jsx-runtime");
|
|
9555
|
+
var pad = (n) => String(n).padStart(2, "0");
|
|
9556
|
+
var toIso = (d) => `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;
|
|
9557
|
+
function parseIso(value) {
|
|
9558
|
+
const m = /^(\d{4})-(\d{2})-(\d{2})$/.exec(value ?? "");
|
|
9559
|
+
if (!m) return null;
|
|
9560
|
+
const d = new Date(Number(m[1]), Number(m[2]) - 1, Number(m[3]));
|
|
9561
|
+
return toIso(d) === value ? d : null;
|
|
9562
|
+
}
|
|
9563
|
+
var addDays = (d, n) => new Date(d.getFullYear(), d.getMonth(), d.getDate() + n);
|
|
9564
|
+
var startOfMonth = (d) => new Date(d.getFullYear(), d.getMonth(), 1);
|
|
9565
|
+
function DatePicker({
|
|
9566
|
+
value,
|
|
9567
|
+
onChange,
|
|
9568
|
+
placeholder = "Select a date",
|
|
9569
|
+
min,
|
|
9570
|
+
max,
|
|
9571
|
+
disabled,
|
|
9572
|
+
locale = "en-US",
|
|
9573
|
+
weekStartsOn = 1,
|
|
9574
|
+
id,
|
|
9575
|
+
previousMonthLabel = "Previous month",
|
|
9576
|
+
nextMonthLabel = "Next month",
|
|
9577
|
+
clearLabel = "Clear",
|
|
9578
|
+
todayLabel = "Today",
|
|
9579
|
+
className,
|
|
9580
|
+
...rest
|
|
9581
|
+
}) {
|
|
9582
|
+
const selected = parseIso(value);
|
|
9583
|
+
const minDate = parseIso(min);
|
|
9584
|
+
const maxDate = parseIso(max);
|
|
9585
|
+
const [open, setOpen] = React26.useState(false);
|
|
9586
|
+
const [focused, setFocused] = React26.useState(() => selected ?? /* @__PURE__ */ new Date());
|
|
9587
|
+
const gridRef = React26.useRef(null);
|
|
9588
|
+
const wantFocus = React26.useRef(false);
|
|
9589
|
+
const inRange = (d) => !(minDate && d < minDate) && !(maxDate && d > maxDate);
|
|
9590
|
+
const handleOpenChange = (next) => {
|
|
9591
|
+
if (next) {
|
|
9592
|
+
setFocused(selected ?? /* @__PURE__ */ new Date());
|
|
9593
|
+
wantFocus.current = true;
|
|
9594
|
+
}
|
|
9595
|
+
setOpen(next);
|
|
9596
|
+
};
|
|
9597
|
+
React26.useEffect(() => {
|
|
9598
|
+
if (!open || !wantFocus.current) return;
|
|
9599
|
+
gridRef.current?.querySelector('button[tabindex="0"]')?.focus();
|
|
9600
|
+
}, [open, focused]);
|
|
9601
|
+
const month = startOfMonth(focused);
|
|
9602
|
+
const lead = (month.getDay() - weekStartsOn + 7) % 7;
|
|
9603
|
+
const gridStart = addDays(month, -lead);
|
|
9604
|
+
const days = Array.from({ length: 42 }, (_, i) => addDays(gridStart, i));
|
|
9605
|
+
const rows = [0, 1, 2, 3, 4, 5].filter((r) => days.slice(r * 7, r * 7 + 7).some((d) => d.getMonth() === month.getMonth()));
|
|
9606
|
+
const monthFmt = new Intl.DateTimeFormat(locale, { month: "long", year: "numeric" });
|
|
9607
|
+
const weekdayLong = new Intl.DateTimeFormat(locale, { weekday: "long" });
|
|
9608
|
+
const weekdayShort = new Intl.DateTimeFormat(locale, { weekday: "short" });
|
|
9609
|
+
const dayFull = new Intl.DateTimeFormat(locale, { dateStyle: "full" });
|
|
9610
|
+
const triggerFmt = new Intl.DateTimeFormat(locale, { dateStyle: "medium" });
|
|
9611
|
+
const heads = Array.from({ length: 7 }, (_, i) => addDays(gridStart, i));
|
|
9612
|
+
const move = (next) => {
|
|
9613
|
+
wantFocus.current = true;
|
|
9614
|
+
setFocused(next);
|
|
9615
|
+
};
|
|
9616
|
+
const shiftMonth = (delta) => {
|
|
9617
|
+
const last = new Date(focused.getFullYear(), focused.getMonth() + delta + 1, 0).getDate();
|
|
9618
|
+
move(new Date(focused.getFullYear(), focused.getMonth() + delta, Math.min(focused.getDate(), last)));
|
|
9619
|
+
};
|
|
9620
|
+
const choose = (d) => {
|
|
9621
|
+
if (!inRange(d)) return;
|
|
9622
|
+
onChange(toIso(d));
|
|
9623
|
+
setOpen(false);
|
|
9624
|
+
};
|
|
9625
|
+
const onKeyDown = (event) => {
|
|
9626
|
+
const step = {
|
|
9627
|
+
ArrowLeft: () => addDays(focused, -1),
|
|
9628
|
+
ArrowRight: () => addDays(focused, 1),
|
|
9629
|
+
ArrowUp: () => addDays(focused, -7),
|
|
9630
|
+
ArrowDown: () => addDays(focused, 7),
|
|
9631
|
+
Home: () => addDays(focused, -((focused.getDay() - weekStartsOn + 7) % 7)),
|
|
9632
|
+
End: () => addDays(focused, 6 - (focused.getDay() - weekStartsOn + 7) % 7)
|
|
9633
|
+
};
|
|
9634
|
+
if (event.key === "PageUp" || event.key === "PageDown") {
|
|
9635
|
+
event.preventDefault();
|
|
9636
|
+
shiftMonth(event.key === "PageUp" ? -1 : 1);
|
|
9637
|
+
return;
|
|
9638
|
+
}
|
|
9639
|
+
const next = step[event.key]?.();
|
|
9640
|
+
if (next) {
|
|
9641
|
+
event.preventDefault();
|
|
9642
|
+
move(next);
|
|
9643
|
+
}
|
|
9644
|
+
};
|
|
9645
|
+
const todayIso = toIso(/* @__PURE__ */ new Date());
|
|
9646
|
+
return /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)(Popover, { open, onOpenChange: handleOpenChange, children: [
|
|
9647
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)(
|
|
9648
|
+
"button",
|
|
9649
|
+
{
|
|
9650
|
+
type: "button",
|
|
9651
|
+
id,
|
|
9652
|
+
disabled,
|
|
9653
|
+
"aria-label": rest["aria-label"],
|
|
9654
|
+
"data-slot": "date-picker-trigger",
|
|
9655
|
+
className: cn(
|
|
9656
|
+
"flex h-12 w-full items-center justify-between gap-3 px-4 py-3 text-left text-body",
|
|
9657
|
+
fieldSurface,
|
|
9658
|
+
!selected && "text-muted-foreground",
|
|
9659
|
+
className
|
|
9660
|
+
),
|
|
9661
|
+
children: [
|
|
9662
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)("span", { className: "truncate", children: selected ? triggerFmt.format(selected) : placeholder }),
|
|
9663
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)(IconGlyph, { glyph: Event2, "aria-hidden": "true", className: "shrink-0 text-secondary-content" })
|
|
9664
|
+
]
|
|
9665
|
+
}
|
|
9666
|
+
) }),
|
|
9667
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
|
|
9668
|
+
PopoverContent,
|
|
9669
|
+
{
|
|
9670
|
+
align: "start",
|
|
9671
|
+
className: "w-auto p-3",
|
|
9672
|
+
onOpenAutoFocus: (event) => event.preventDefault(),
|
|
9673
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("div", { "data-slot": "date-picker", className: "flex flex-col gap-2", children: [
|
|
9674
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("div", { className: "flex items-center justify-between gap-2", children: [
|
|
9675
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)(GlyphButton, { size: "sm", icon: ChevronLeft, label: previousMonthLabel, onClick: () => shiftMonth(-1) }),
|
|
9676
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)("p", { "aria-live": "polite", className: "m-0 text-caption font-semibold text-foreground", children: monthFmt.format(month) }),
|
|
9677
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)(GlyphButton, { size: "sm", icon: ChevronRight, label: nextMonthLabel, onClick: () => shiftMonth(1) })
|
|
9678
|
+
] }),
|
|
9679
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsxs)(
|
|
9680
|
+
"div",
|
|
9681
|
+
{
|
|
9682
|
+
ref: gridRef,
|
|
9683
|
+
role: "grid",
|
|
9684
|
+
"aria-label": monthFmt.format(month),
|
|
9685
|
+
onKeyDown,
|
|
9686
|
+
className: "flex flex-col gap-1",
|
|
9687
|
+
children: [
|
|
9688
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)("div", { role: "row", className: "grid grid-cols-7", children: heads.map((d) => /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
|
|
9689
|
+
"span",
|
|
9690
|
+
{
|
|
9691
|
+
role: "columnheader",
|
|
9692
|
+
"aria-label": weekdayLong.format(d),
|
|
9693
|
+
className: "py-1 text-center text-mini font-medium uppercase tracking-eyebrow text-muted-foreground",
|
|
9694
|
+
children: weekdayShort.format(d).slice(0, 2)
|
|
9695
|
+
},
|
|
9696
|
+
d.getDay()
|
|
9697
|
+
)) }),
|
|
9698
|
+
rows.map((r) => /* @__PURE__ */ (0, import_jsx_runtime98.jsx)("div", { role: "row", className: "grid grid-cols-7 gap-1", children: days.slice(r * 7, r * 7 + 7).map((d) => {
|
|
9699
|
+
const iso = toIso(d);
|
|
9700
|
+
const outside = d.getMonth() !== month.getMonth();
|
|
9701
|
+
const isSelected = iso === value;
|
|
9702
|
+
const isFocused = iso === toIso(focused);
|
|
9703
|
+
const enabled = inRange(d);
|
|
9704
|
+
return /* @__PURE__ */ (0, import_jsx_runtime98.jsx)("span", { role: "gridcell", "aria-selected": isSelected, children: /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
|
|
9705
|
+
"button",
|
|
9706
|
+
{
|
|
9707
|
+
type: "button",
|
|
9708
|
+
tabIndex: isFocused ? 0 : -1,
|
|
9709
|
+
disabled: !enabled,
|
|
9710
|
+
"aria-label": dayFull.format(d),
|
|
9711
|
+
"aria-current": iso === todayIso ? "date" : void 0,
|
|
9712
|
+
"data-date": iso,
|
|
9713
|
+
onClick: () => choose(d),
|
|
9714
|
+
className: cn(
|
|
9715
|
+
"size-9 rounded-xl text-caption tabular-nums transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50 disabled:cursor-not-allowed disabled:opacity-30",
|
|
9716
|
+
isSelected ? "bg-primary font-semibold text-primary-foreground shadow-button-primary" : cn(
|
|
9717
|
+
"hover:bg-foreground/10",
|
|
9718
|
+
outside ? "text-foreground/55" : "text-foreground",
|
|
9719
|
+
iso === todayIso && "font-semibold text-brand"
|
|
9720
|
+
)
|
|
9721
|
+
),
|
|
9722
|
+
children: d.getDate()
|
|
9723
|
+
}
|
|
9724
|
+
) }, iso);
|
|
9725
|
+
}) }, r))
|
|
9726
|
+
]
|
|
9727
|
+
}
|
|
9728
|
+
),
|
|
9729
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsxs)("div", { className: "flex items-center justify-between", children: [
|
|
9730
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
|
|
9731
|
+
"button",
|
|
9732
|
+
{
|
|
9733
|
+
type: "button",
|
|
9734
|
+
disabled: !selected,
|
|
9735
|
+
onClick: () => {
|
|
9736
|
+
onChange("");
|
|
9737
|
+
setOpen(false);
|
|
9738
|
+
},
|
|
9739
|
+
className: "rounded-lg px-2 py-1 text-caption font-medium text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50 disabled:opacity-40",
|
|
9740
|
+
children: clearLabel
|
|
9741
|
+
}
|
|
9742
|
+
),
|
|
9743
|
+
/* @__PURE__ */ (0, import_jsx_runtime98.jsx)(
|
|
9744
|
+
"button",
|
|
9745
|
+
{
|
|
9746
|
+
type: "button",
|
|
9747
|
+
disabled: !inRange(parseIso(todayIso)),
|
|
9748
|
+
onClick: () => choose(parseIso(todayIso)),
|
|
9749
|
+
className: "rounded-lg px-2 py-1 text-caption font-medium text-brand focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50 disabled:opacity-40",
|
|
9750
|
+
children: todayLabel
|
|
9751
|
+
}
|
|
9752
|
+
)
|
|
9753
|
+
] })
|
|
9754
|
+
] })
|
|
9755
|
+
}
|
|
9756
|
+
)
|
|
9757
|
+
] });
|
|
9758
|
+
}
|
|
9759
|
+
|
|
9760
|
+
// src/web/components/value-list.tsx
|
|
9761
|
+
var import_jsx_runtime99 = require("react/jsx-runtime");
|
|
9553
9762
|
function ValueList({ values, singular, plural, emptyLabel = "None", defaultOpen = false, className }) {
|
|
9554
9763
|
if (values.length === 0) {
|
|
9555
|
-
return /* @__PURE__ */ (0,
|
|
9764
|
+
return /* @__PURE__ */ (0, import_jsx_runtime99.jsx)("span", { className: cn("text-caption text-muted-foreground", className), children: emptyLabel });
|
|
9556
9765
|
}
|
|
9557
9766
|
const summary = `${values.length} ${values.length === 1 ? singular : plural}`;
|
|
9558
|
-
return /* @__PURE__ */ (0,
|
|
9559
|
-
/* @__PURE__ */ (0,
|
|
9767
|
+
return /* @__PURE__ */ (0, import_jsx_runtime99.jsxs)(Collapsible, { defaultOpen, "data-slot": "value-list", className: cn("min-w-0", className), children: [
|
|
9768
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsxs)(
|
|
9560
9769
|
CollapsibleTrigger,
|
|
9561
9770
|
{
|
|
9562
9771
|
type: "button",
|
|
9563
9772
|
className: "inline-flex items-center gap-1 rounded-lg text-caption font-semibold text-foreground transition-colors hover:text-secondary-content data-[state=open]:text-secondary-content",
|
|
9564
9773
|
children: [
|
|
9565
9774
|
summary,
|
|
9566
|
-
/* @__PURE__ */ (0,
|
|
9775
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)(CollapsibleChevron, {})
|
|
9567
9776
|
]
|
|
9568
9777
|
}
|
|
9569
9778
|
),
|
|
9570
|
-
/* @__PURE__ */ (0,
|
|
9571
|
-
/* @__PURE__ */ (0,
|
|
9572
|
-
/* @__PURE__ */ (0,
|
|
9779
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)(CollapsibleContent, { children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)("ul", { className: "m-0 mt-2 list-none space-y-1 p-0", children: values.map((value, index) => /* @__PURE__ */ (0, import_jsx_runtime99.jsxs)("li", { className: "flex items-center gap-1 rounded-xl kui-well px-3 py-1.5", children: [
|
|
9780
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)("span", { className: "min-w-0 select-all break-all font-mono text-caption text-foreground", children: value }),
|
|
9781
|
+
/* @__PURE__ */ (0, import_jsx_runtime99.jsx)(CopyButton, { value, label: singular })
|
|
9573
9782
|
] }, `${index}-${value}`)) }) })
|
|
9574
9783
|
] });
|
|
9575
9784
|
}
|
|
9576
9785
|
|
|
9577
9786
|
// src/web/components/event-timeline.tsx
|
|
9578
|
-
var
|
|
9787
|
+
var import_jsx_runtime100 = require("react/jsx-runtime");
|
|
9579
9788
|
function EventTimeline({ events, label, className }) {
|
|
9580
|
-
return /* @__PURE__ */ (0,
|
|
9789
|
+
return /* @__PURE__ */ (0, import_jsx_runtime100.jsx)("ol", { "aria-label": label, "data-slot": "event-timeline", className: cn("m-0 list-none space-y-1.5 p-0", className), children: events.map((event) => /* @__PURE__ */ (0, import_jsx_runtime100.jsxs)(
|
|
9581
9790
|
"li",
|
|
9582
9791
|
{
|
|
9583
9792
|
"data-slot": "event-timeline-item",
|
|
9584
9793
|
className: "relative flex items-baseline justify-between gap-3 rounded-xl kui-well py-2.5 pl-7 pr-3 before:absolute before:left-3 before:top-1/2 before:size-1.5 before:-translate-y-1/2 before:rounded-full before:bg-primary/60 last:before:bg-primary last:before:shadow-glow-primary-soft",
|
|
9585
9794
|
children: [
|
|
9586
|
-
/* @__PURE__ */ (0,
|
|
9587
|
-
/* @__PURE__ */ (0,
|
|
9588
|
-
event.duration !== void 0 && /* @__PURE__ */ (0,
|
|
9589
|
-
/* @__PURE__ */ (0,
|
|
9795
|
+
/* @__PURE__ */ (0, import_jsx_runtime100.jsx)("span", { className: "min-w-0 text-caption font-medium text-foreground", children: event.label }),
|
|
9796
|
+
/* @__PURE__ */ (0, import_jsx_runtime100.jsxs)("span", { className: "flex shrink-0 items-baseline gap-2 text-caption tabular-nums text-muted-foreground", children: [
|
|
9797
|
+
event.duration !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime100.jsx)("span", { "data-slot": "event-timeline-duration", children: event.duration }),
|
|
9798
|
+
/* @__PURE__ */ (0, import_jsx_runtime100.jsx)("time", { dateTime: event.dateTime, children: event.timestamp })
|
|
9590
9799
|
] })
|
|
9591
9800
|
]
|
|
9592
9801
|
},
|
|
@@ -9596,7 +9805,7 @@ function EventTimeline({ events, label, className }) {
|
|
|
9596
9805
|
|
|
9597
9806
|
// src/web/components/notice-bar.tsx
|
|
9598
9807
|
var import_react28 = require("react");
|
|
9599
|
-
var
|
|
9808
|
+
var import_jsx_runtime101 = require("react/jsx-runtime");
|
|
9600
9809
|
var useIsomorphicLayoutEffect2 = typeof window === "undefined" ? import_react28.useEffect : import_react28.useLayoutEffect;
|
|
9601
9810
|
function NoticeBar({ children, hidden = false, heightVariable = "--kui-notice-height", className }) {
|
|
9602
9811
|
const ref = (0, import_react28.useRef)(null);
|
|
@@ -9625,7 +9834,7 @@ function NoticeBar({ children, hidden = false, heightVariable = "--kui-notice-he
|
|
|
9625
9834
|
};
|
|
9626
9835
|
}, [hidden, heightVariable]);
|
|
9627
9836
|
if (hidden) return null;
|
|
9628
|
-
return /* @__PURE__ */ (0,
|
|
9837
|
+
return /* @__PURE__ */ (0, import_jsx_runtime101.jsx)(
|
|
9629
9838
|
"div",
|
|
9630
9839
|
{
|
|
9631
9840
|
ref,
|
|
@@ -9637,7 +9846,7 @@ function NoticeBar({ children, hidden = false, heightVariable = "--kui-notice-he
|
|
|
9637
9846
|
}
|
|
9638
9847
|
|
|
9639
9848
|
// src/web/components/floating-notice.tsx
|
|
9640
|
-
var
|
|
9849
|
+
var import_jsx_runtime102 = require("react/jsx-runtime");
|
|
9641
9850
|
function FloatingNotice({
|
|
9642
9851
|
children,
|
|
9643
9852
|
onDismiss,
|
|
@@ -9647,7 +9856,7 @@ function FloatingNotice({
|
|
|
9647
9856
|
className
|
|
9648
9857
|
}) {
|
|
9649
9858
|
const showClose = dismissible && Boolean(onDismiss);
|
|
9650
|
-
return /* @__PURE__ */ (0,
|
|
9859
|
+
return /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(
|
|
9651
9860
|
"div",
|
|
9652
9861
|
{
|
|
9653
9862
|
"data-slot": "floating-notice",
|
|
@@ -9656,16 +9865,16 @@ function FloatingNotice({
|
|
|
9656
9865
|
"fixed bottom-4 left-1/2 z-[var(--z-modal)] w-[min(32rem,calc(100vw-2rem))] -translate-x-1/2 rounded-2xl bg-card bg-gradient-card-hero shadow-toast",
|
|
9657
9866
|
className
|
|
9658
9867
|
),
|
|
9659
|
-
children: /* @__PURE__ */ (0,
|
|
9868
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime102.jsxs)("div", { className: "relative", children: [
|
|
9660
9869
|
children,
|
|
9661
|
-
showClose && /* @__PURE__ */ (0,
|
|
9870
|
+
showClose && /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(GlyphButton, { icon: Close, label: dismissLabel, size: "sm", onClick: onDismiss, className: "absolute right-2 top-2" })
|
|
9662
9871
|
] })
|
|
9663
9872
|
}
|
|
9664
9873
|
);
|
|
9665
9874
|
}
|
|
9666
9875
|
|
|
9667
9876
|
// src/web/components/summary-rows.tsx
|
|
9668
|
-
var
|
|
9877
|
+
var import_jsx_runtime103 = require("react/jsx-runtime");
|
|
9669
9878
|
var valueTone = {
|
|
9670
9879
|
default: "text-foreground",
|
|
9671
9880
|
primary: "text-brand",
|
|
@@ -9680,18 +9889,18 @@ function SummaryRows({ rows, as = "dl", className }) {
|
|
|
9680
9889
|
const isDl = as === "dl";
|
|
9681
9890
|
const Label4 = isDl ? "dt" : "span";
|
|
9682
9891
|
const Value2 = isDl ? "dd" : "div";
|
|
9683
|
-
return /* @__PURE__ */ (0,
|
|
9892
|
+
return /* @__PURE__ */ (0, import_jsx_runtime103.jsx)(
|
|
9684
9893
|
List2,
|
|
9685
9894
|
{
|
|
9686
9895
|
"data-slot": "summary-rows",
|
|
9687
9896
|
className: cn("m-0 list-none p-0", className),
|
|
9688
9897
|
children: rows.map((row, index) => {
|
|
9689
9898
|
const muted = row.tone === "muted";
|
|
9690
|
-
const content = /* @__PURE__ */ (0,
|
|
9691
|
-
/* @__PURE__ */ (0,
|
|
9692
|
-
/* @__PURE__ */ (0,
|
|
9693
|
-
/* @__PURE__ */ (0,
|
|
9694
|
-
/* @__PURE__ */ (0,
|
|
9899
|
+
const content = /* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(import_jsx_runtime103.Fragment, { children: [
|
|
9900
|
+
/* @__PURE__ */ (0, import_jsx_runtime103.jsx)(Label4, { className: "shrink-0 text-caption text-muted-foreground", children: row.label }),
|
|
9901
|
+
/* @__PURE__ */ (0, import_jsx_runtime103.jsx)(DottedLeader, {}),
|
|
9902
|
+
/* @__PURE__ */ (0, import_jsx_runtime103.jsxs)(Value2, { className: "m-0 flex min-w-0 max-w-[65%] items-baseline gap-2", children: [
|
|
9903
|
+
/* @__PURE__ */ (0, import_jsx_runtime103.jsx)(
|
|
9695
9904
|
"span",
|
|
9696
9905
|
{
|
|
9697
9906
|
className: cn(
|
|
@@ -9703,7 +9912,7 @@ function SummaryRows({ rows, as = "dl", className }) {
|
|
|
9703
9912
|
children: row.value
|
|
9704
9913
|
}
|
|
9705
9914
|
),
|
|
9706
|
-
row.hint && /* @__PURE__ */ (0,
|
|
9915
|
+
row.hint && /* @__PURE__ */ (0, import_jsx_runtime103.jsx)("span", { className: "shrink-0 text-xxs text-muted-foreground", children: row.hint })
|
|
9707
9916
|
] })
|
|
9708
9917
|
] });
|
|
9709
9918
|
const rowProps = {
|
|
@@ -9711,16 +9920,16 @@ function SummaryRows({ rows, as = "dl", className }) {
|
|
|
9711
9920
|
"data-emphasis": row.emphasis ? "true" : void 0,
|
|
9712
9921
|
className: rowClass
|
|
9713
9922
|
};
|
|
9714
|
-
return isDl ? /* @__PURE__ */ (0,
|
|
9923
|
+
return isDl ? /* @__PURE__ */ (0, import_jsx_runtime103.jsx)("div", { ...rowProps, children: content }, index) : /* @__PURE__ */ (0, import_jsx_runtime103.jsx)("li", { ...rowProps, children: content }, index);
|
|
9715
9924
|
})
|
|
9716
9925
|
}
|
|
9717
9926
|
);
|
|
9718
9927
|
}
|
|
9719
9928
|
|
|
9720
9929
|
// src/web/components/section-label.tsx
|
|
9721
|
-
var
|
|
9930
|
+
var import_jsx_runtime104 = require("react/jsx-runtime");
|
|
9722
9931
|
function SectionLabel({ children, className }) {
|
|
9723
|
-
return /* @__PURE__ */ (0,
|
|
9932
|
+
return /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(
|
|
9724
9933
|
"span",
|
|
9725
9934
|
{
|
|
9726
9935
|
className: cn("text-mini font-medium uppercase tracking-eyebrow-wide text-muted-foreground", className),
|
|
@@ -9730,21 +9939,21 @@ function SectionLabel({ children, className }) {
|
|
|
9730
9939
|
}
|
|
9731
9940
|
|
|
9732
9941
|
// src/web/components/section-header.tsx
|
|
9733
|
-
var
|
|
9942
|
+
var import_jsx_runtime105 = require("react/jsx-runtime");
|
|
9734
9943
|
function SectionHeader({
|
|
9735
9944
|
children,
|
|
9736
9945
|
right,
|
|
9737
9946
|
as: Tag = "h2",
|
|
9738
9947
|
className
|
|
9739
9948
|
}) {
|
|
9740
|
-
return /* @__PURE__ */ (0,
|
|
9741
|
-
/* @__PURE__ */ (0,
|
|
9949
|
+
return /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)("div", { className: cn("flex items-center justify-between gap-3 px-1", className), children: [
|
|
9950
|
+
/* @__PURE__ */ (0, import_jsx_runtime105.jsx)(Tag, { className: cn("text-muted-foreground", eyebrow), children }),
|
|
9742
9951
|
right
|
|
9743
9952
|
] });
|
|
9744
9953
|
}
|
|
9745
9954
|
|
|
9746
9955
|
// src/web/components/info-chip.tsx
|
|
9747
|
-
var
|
|
9956
|
+
var import_jsx_runtime106 = require("react/jsx-runtime");
|
|
9748
9957
|
var defaultStatusLabel = {
|
|
9749
9958
|
success: "Success",
|
|
9750
9959
|
warning: "Warning",
|
|
@@ -9770,7 +9979,7 @@ var statusDotClass = {
|
|
|
9770
9979
|
info: "bg-secondary-content"
|
|
9771
9980
|
};
|
|
9772
9981
|
function StatusChip2({ status, label, pulse = true, className }) {
|
|
9773
|
-
return /* @__PURE__ */ (0,
|
|
9982
|
+
return /* @__PURE__ */ (0, import_jsx_runtime106.jsxs)(
|
|
9774
9983
|
"span",
|
|
9775
9984
|
{
|
|
9776
9985
|
"data-slot": "status-chip",
|
|
@@ -9781,17 +9990,17 @@ function StatusChip2({ status, label, pulse = true, className }) {
|
|
|
9781
9990
|
className
|
|
9782
9991
|
),
|
|
9783
9992
|
children: [
|
|
9784
|
-
/* @__PURE__ */ (0,
|
|
9785
|
-
pulse && /* @__PURE__ */ (0,
|
|
9993
|
+
/* @__PURE__ */ (0, import_jsx_runtime106.jsxs)("span", { "aria-hidden": "true", className: "relative flex size-1.5 shrink-0", children: [
|
|
9994
|
+
pulse && /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(
|
|
9786
9995
|
"span",
|
|
9787
9996
|
{
|
|
9788
9997
|
"data-slot": "status-chip-pulse",
|
|
9789
9998
|
className: cn("absolute inset-0 rounded-full opacity-0 motion-safe:animate-ping motion-safe:opacity-75", statusDotClass[status])
|
|
9790
9999
|
}
|
|
9791
10000
|
),
|
|
9792
|
-
/* @__PURE__ */ (0,
|
|
10001
|
+
/* @__PURE__ */ (0, import_jsx_runtime106.jsx)("span", { className: cn("relative size-1.5 rounded-full", statusDotClass[status]) })
|
|
9793
10002
|
] }),
|
|
9794
|
-
/* @__PURE__ */ (0,
|
|
10003
|
+
/* @__PURE__ */ (0, import_jsx_runtime106.jsx)("span", { className: "truncate", children: label ?? defaultStatusLabel[status] })
|
|
9795
10004
|
]
|
|
9796
10005
|
}
|
|
9797
10006
|
);
|
|
@@ -9811,7 +10020,7 @@ function InfoChip({
|
|
|
9811
10020
|
"data-info-kind": dataInfoKind
|
|
9812
10021
|
}) {
|
|
9813
10022
|
const readableStatus = status ? statusLabel ?? defaultStatusLabel[status] : null;
|
|
9814
|
-
return /* @__PURE__ */ (0,
|
|
10023
|
+
return /* @__PURE__ */ (0, import_jsx_runtime106.jsxs)(
|
|
9815
10024
|
"div",
|
|
9816
10025
|
{
|
|
9817
10026
|
"data-slot": "info-chip",
|
|
@@ -9823,7 +10032,7 @@ function InfoChip({
|
|
|
9823
10032
|
className
|
|
9824
10033
|
),
|
|
9825
10034
|
children: [
|
|
9826
|
-
leading && /* @__PURE__ */ (0,
|
|
10035
|
+
leading && /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(
|
|
9827
10036
|
"span",
|
|
9828
10037
|
{
|
|
9829
10038
|
"aria-hidden": "true",
|
|
@@ -9834,10 +10043,10 @@ function InfoChip({
|
|
|
9834
10043
|
children: leading
|
|
9835
10044
|
}
|
|
9836
10045
|
),
|
|
9837
|
-
/* @__PURE__ */ (0,
|
|
9838
|
-
/* @__PURE__ */ (0,
|
|
9839
|
-
/* @__PURE__ */ (0,
|
|
9840
|
-
/* @__PURE__ */ (0,
|
|
10046
|
+
/* @__PURE__ */ (0, import_jsx_runtime106.jsxs)("dl", { className: "min-w-0 flex-1", children: [
|
|
10047
|
+
/* @__PURE__ */ (0, import_jsx_runtime106.jsx)("dt", { className: cn("truncate text-muted-foreground", eyebrow), children: label }),
|
|
10048
|
+
/* @__PURE__ */ (0, import_jsx_runtime106.jsxs)("dd", { className: "mt-0.5 flex min-w-0 flex-wrap items-center gap-x-2 gap-y-1", children: [
|
|
10049
|
+
/* @__PURE__ */ (0, import_jsx_runtime106.jsx)(
|
|
9841
10050
|
"span",
|
|
9842
10051
|
{
|
|
9843
10052
|
className: cn(
|
|
@@ -9847,10 +10056,10 @@ function InfoChip({
|
|
|
9847
10056
|
children: value
|
|
9848
10057
|
}
|
|
9849
10058
|
),
|
|
9850
|
-
status && /* @__PURE__ */ (0,
|
|
10059
|
+
status && /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(StatusChip2, { status, label: readableStatus ?? void 0 })
|
|
9851
10060
|
] })
|
|
9852
10061
|
] }),
|
|
9853
|
-
onEdit && /* @__PURE__ */ (0,
|
|
10062
|
+
onEdit && /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(GlyphButton, { icon: Edit, label: editLabel, onClick: onEdit, disabled: editDisabled })
|
|
9854
10063
|
]
|
|
9855
10064
|
}
|
|
9856
10065
|
);
|
|
@@ -9862,12 +10071,12 @@ function NetworkInfoChip({
|
|
|
9862
10071
|
iconBasePath,
|
|
9863
10072
|
...infoChipProps
|
|
9864
10073
|
}) {
|
|
9865
|
-
return /* @__PURE__ */ (0,
|
|
10074
|
+
return /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(
|
|
9866
10075
|
InfoChip,
|
|
9867
10076
|
{
|
|
9868
10077
|
...infoChipProps,
|
|
9869
10078
|
"data-info-kind": "network",
|
|
9870
|
-
leading: /* @__PURE__ */ (0,
|
|
10079
|
+
leading: /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(NetworkBadge, { network, iconBasePath, size: "md" }),
|
|
9871
10080
|
label,
|
|
9872
10081
|
value
|
|
9873
10082
|
}
|
|
@@ -9881,12 +10090,12 @@ function AssetInfoChip({
|
|
|
9881
10090
|
cdnBaseUrl,
|
|
9882
10091
|
...infoChipProps
|
|
9883
10092
|
}) {
|
|
9884
|
-
return /* @__PURE__ */ (0,
|
|
10093
|
+
return /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(
|
|
9885
10094
|
InfoChip,
|
|
9886
10095
|
{
|
|
9887
10096
|
...infoChipProps,
|
|
9888
10097
|
"data-info-kind": "asset",
|
|
9889
|
-
leading: /* @__PURE__ */ (0,
|
|
10098
|
+
leading: /* @__PURE__ */ (0, import_jsx_runtime106.jsx)(AssetIcon, { ticker, logoUri, cdnBaseUrl, size: 28 }),
|
|
9890
10099
|
label,
|
|
9891
10100
|
value
|
|
9892
10101
|
}
|
|
@@ -9895,7 +10104,7 @@ function AssetInfoChip({
|
|
|
9895
10104
|
|
|
9896
10105
|
// src/web/components/error-boundary.tsx
|
|
9897
10106
|
var import_react29 = require("react");
|
|
9898
|
-
var
|
|
10107
|
+
var import_jsx_runtime107 = require("react/jsx-runtime");
|
|
9899
10108
|
var ErrorBoundary = class extends import_react29.Component {
|
|
9900
10109
|
constructor(props) {
|
|
9901
10110
|
super(props);
|
|
@@ -9909,11 +10118,11 @@ var ErrorBoundary = class extends import_react29.Component {
|
|
|
9909
10118
|
}
|
|
9910
10119
|
render() {
|
|
9911
10120
|
if (this.state.hasError) {
|
|
9912
|
-
return this.props.fallback ?? /* @__PURE__ */ (0,
|
|
9913
|
-
/* @__PURE__ */ (0,
|
|
9914
|
-
/* @__PURE__ */ (0,
|
|
9915
|
-
/* @__PURE__ */ (0,
|
|
9916
|
-
/* @__PURE__ */ (0,
|
|
10121
|
+
return this.props.fallback ?? /* @__PURE__ */ (0, import_jsx_runtime107.jsxs)("div", { className: "min-h-screen bg-background bg-page-radial text-foreground font-display flex flex-col items-center justify-center p-6 gap-4", children: [
|
|
10122
|
+
/* @__PURE__ */ (0, import_jsx_runtime107.jsx)(IconGlyph, { glyph: Error2, className: "text-danger-fg text-icon-5xl" }),
|
|
10123
|
+
/* @__PURE__ */ (0, import_jsx_runtime107.jsx)("h2", { className: "text-subhead font-bold", children: "Something went wrong" }),
|
|
10124
|
+
/* @__PURE__ */ (0, import_jsx_runtime107.jsx)("p", { className: "text-caption text-muted-foreground text-center", children: this.state.error?.message ?? "An unexpected error occurred." }),
|
|
10125
|
+
/* @__PURE__ */ (0, import_jsx_runtime107.jsx)(
|
|
9917
10126
|
"button",
|
|
9918
10127
|
{
|
|
9919
10128
|
onClick: () => {
|
|
@@ -9931,7 +10140,7 @@ var ErrorBoundary = class extends import_react29.Component {
|
|
|
9931
10140
|
};
|
|
9932
10141
|
|
|
9933
10142
|
// src/web/components/recovery-phrase-card.tsx
|
|
9934
|
-
var
|
|
10143
|
+
var import_jsx_runtime108 = require("react/jsx-runtime");
|
|
9935
10144
|
function RecoveryPhraseCard({
|
|
9936
10145
|
words,
|
|
9937
10146
|
revealed = false,
|
|
@@ -9950,10 +10159,10 @@ function RecoveryPhraseCard({
|
|
|
9950
10159
|
const selfCopy = !onCopy && copyValue !== void 0;
|
|
9951
10160
|
const handleCopy = onCopy ?? (selfCopy ? () => void clipboard.copy(copyValue) : void 0);
|
|
9952
10161
|
const copied = selfCopy && clipboard.state === "copied";
|
|
9953
|
-
return /* @__PURE__ */ (0,
|
|
9954
|
-
/* @__PURE__ */ (0,
|
|
9955
|
-
/* @__PURE__ */ (0,
|
|
9956
|
-
hasWords && revealed && onRevealChange && /* @__PURE__ */ (0,
|
|
10162
|
+
return /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)("section", { className: cn("space-y-2", className), children: [
|
|
10163
|
+
/* @__PURE__ */ (0, import_jsx_runtime108.jsxs)("div", { className: "flex items-center justify-between px-0.5", children: [
|
|
10164
|
+
/* @__PURE__ */ (0, import_jsx_runtime108.jsx)("p", { className: cn("text-muted-foreground", eyebrow), children: title }),
|
|
10165
|
+
hasWords && revealed && onRevealChange && /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)(
|
|
9957
10166
|
Button,
|
|
9958
10167
|
{
|
|
9959
10168
|
type: "button",
|
|
@@ -9961,27 +10170,27 @@ function RecoveryPhraseCard({
|
|
|
9961
10170
|
size: "xs",
|
|
9962
10171
|
onClick: () => onRevealChange(!revealed),
|
|
9963
10172
|
children: [
|
|
9964
|
-
/* @__PURE__ */ (0,
|
|
10173
|
+
/* @__PURE__ */ (0, import_jsx_runtime108.jsx)(IconGlyph, { glyph: VisibilityOff, className: "text-icon-md" }),
|
|
9965
10174
|
"Hide"
|
|
9966
10175
|
]
|
|
9967
10176
|
}
|
|
9968
10177
|
)
|
|
9969
10178
|
] }),
|
|
9970
|
-
/* @__PURE__ */ (0,
|
|
9971
|
-
hasWords ? /* @__PURE__ */ (0,
|
|
10179
|
+
/* @__PURE__ */ (0, import_jsx_runtime108.jsxs)("div", { className: "relative", children: [
|
|
10180
|
+
hasWords ? /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(
|
|
9972
10181
|
"div",
|
|
9973
10182
|
{
|
|
9974
10183
|
className: cn(
|
|
9975
10184
|
"grid grid-cols-3 gap-2 transition-all duration-300",
|
|
9976
10185
|
!revealed && "pointer-events-none select-none blur-sm"
|
|
9977
10186
|
),
|
|
9978
|
-
children: words.map((word, index) => /* @__PURE__ */ (0,
|
|
9979
|
-
/* @__PURE__ */ (0,
|
|
9980
|
-
/* @__PURE__ */ (0,
|
|
10187
|
+
children: words.map((word, index) => /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)("div", { className: "flex items-center gap-2 rounded-xl bg-card bg-gradient-card px-3 py-2.5 shadow-raised", children: [
|
|
10188
|
+
/* @__PURE__ */ (0, import_jsx_runtime108.jsx)("span", { className: "w-4 shrink-0 text-caption font-bold text-secondary-content", children: index + 1 }),
|
|
10189
|
+
/* @__PURE__ */ (0, import_jsx_runtime108.jsx)("span", { className: "font-mono text-body text-foreground", children: word })
|
|
9981
10190
|
] }, `${index}-${word}`))
|
|
9982
10191
|
}
|
|
9983
|
-
) : /* @__PURE__ */ (0,
|
|
9984
|
-
hasWords && !revealed && onRevealChange && /* @__PURE__ */ (0,
|
|
10192
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime108.jsx)("div", { className: "rounded-xl bg-warning/10 px-4 py-3 text-body text-warning-fg", children: emptyMessage }),
|
|
10193
|
+
hasWords && !revealed && onRevealChange && /* @__PURE__ */ (0, import_jsx_runtime108.jsx)("div", { className: "absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)(
|
|
9985
10194
|
Button,
|
|
9986
10195
|
{
|
|
9987
10196
|
type: "button",
|
|
@@ -9989,13 +10198,13 @@ function RecoveryPhraseCard({
|
|
|
9989
10198
|
size: "sm",
|
|
9990
10199
|
onClick: () => onRevealChange(true),
|
|
9991
10200
|
children: [
|
|
9992
|
-
/* @__PURE__ */ (0,
|
|
10201
|
+
/* @__PURE__ */ (0, import_jsx_runtime108.jsx)(IconGlyph, { glyph: Visibility, className: "text-icon-lg" }),
|
|
9993
10202
|
"Tap to reveal"
|
|
9994
10203
|
]
|
|
9995
10204
|
}
|
|
9996
10205
|
) })
|
|
9997
10206
|
] }),
|
|
9998
|
-
hasWords && revealed && handleCopy && /* @__PURE__ */ (0,
|
|
10207
|
+
hasWords && revealed && handleCopy && /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)(
|
|
9999
10208
|
Button,
|
|
10000
10209
|
{
|
|
10001
10210
|
type: "button",
|
|
@@ -10004,18 +10213,18 @@ function RecoveryPhraseCard({
|
|
|
10004
10213
|
onClick: handleCopy,
|
|
10005
10214
|
className: cn("w-full", copied && "bg-primary/10 bg-gradient-active text-brand ring-primary/40 hover:ring-primary/50"),
|
|
10006
10215
|
children: [
|
|
10007
|
-
/* @__PURE__ */ (0,
|
|
10216
|
+
/* @__PURE__ */ (0, import_jsx_runtime108.jsx)(IconGlyph, { glyph: copied ? Check : ContentCopy, className: "text-icon-lg" }),
|
|
10008
10217
|
copied ? copiedLabel : copyLabel
|
|
10009
10218
|
]
|
|
10010
10219
|
}
|
|
10011
10220
|
),
|
|
10012
|
-
selfCopy && clipboard.state === "failed" && /* @__PURE__ */ (0,
|
|
10013
|
-
selfCopy && /* @__PURE__ */ (0,
|
|
10221
|
+
selfCopy && clipboard.state === "failed" && /* @__PURE__ */ (0, import_jsx_runtime108.jsx)("p", { role: "alert", className: "m-0 text-caption text-danger-fg", children: copyFailedMessage }),
|
|
10222
|
+
selfCopy && /* @__PURE__ */ (0, import_jsx_runtime108.jsx)("span", { "aria-live": "polite", className: "sr-only", children: copied ? copiedLabel : "" })
|
|
10014
10223
|
] });
|
|
10015
10224
|
}
|
|
10016
10225
|
|
|
10017
10226
|
// src/web/components/settings-selector-row.tsx
|
|
10018
|
-
var
|
|
10227
|
+
var import_jsx_runtime109 = require("react/jsx-runtime");
|
|
10019
10228
|
function SettingsSelectorRow({
|
|
10020
10229
|
icon,
|
|
10021
10230
|
title,
|
|
@@ -10024,9 +10233,9 @@ function SettingsSelectorRow({
|
|
|
10024
10233
|
className,
|
|
10025
10234
|
iconClassName
|
|
10026
10235
|
}) {
|
|
10027
|
-
return /* @__PURE__ */ (0,
|
|
10028
|
-
/* @__PURE__ */ (0,
|
|
10029
|
-
/* @__PURE__ */ (0,
|
|
10236
|
+
return /* @__PURE__ */ (0, import_jsx_runtime109.jsxs)("div", { className: cn("flex items-start justify-between gap-3 rounded-2xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card p-5 shadow-card-secondary", className), children: [
|
|
10237
|
+
/* @__PURE__ */ (0, import_jsx_runtime109.jsxs)("div", { className: "flex min-w-0 flex-1 items-start gap-3", children: [
|
|
10238
|
+
/* @__PURE__ */ (0, import_jsx_runtime109.jsx)(
|
|
10030
10239
|
"div",
|
|
10031
10240
|
{
|
|
10032
10241
|
className: cn(
|
|
@@ -10036,17 +10245,17 @@ function SettingsSelectorRow({
|
|
|
10036
10245
|
children: icon
|
|
10037
10246
|
}
|
|
10038
10247
|
),
|
|
10039
|
-
/* @__PURE__ */ (0,
|
|
10040
|
-
/* @__PURE__ */ (0,
|
|
10041
|
-
description && /* @__PURE__ */ (0,
|
|
10248
|
+
/* @__PURE__ */ (0, import_jsx_runtime109.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col", children: [
|
|
10249
|
+
/* @__PURE__ */ (0, import_jsx_runtime109.jsx)("span", { className: "text-body font-bold tracking-wide text-foreground", children: title }),
|
|
10250
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime109.jsx)("span", { className: "mt-0.5 text-caption font-medium text-muted-foreground", children: description })
|
|
10042
10251
|
] })
|
|
10043
10252
|
] }),
|
|
10044
|
-
/* @__PURE__ */ (0,
|
|
10253
|
+
/* @__PURE__ */ (0, import_jsx_runtime109.jsx)("div", { className: "shrink-0", children: control })
|
|
10045
10254
|
] });
|
|
10046
10255
|
}
|
|
10047
10256
|
|
|
10048
10257
|
// src/web/components/bottom-sheet.tsx
|
|
10049
|
-
var
|
|
10258
|
+
var import_jsx_runtime110 = require("react/jsx-runtime");
|
|
10050
10259
|
function BottomSheet({
|
|
10051
10260
|
open,
|
|
10052
10261
|
title,
|
|
@@ -10062,7 +10271,7 @@ function BottomSheet({
|
|
|
10062
10271
|
const handleBackdropClick = (event) => {
|
|
10063
10272
|
if (closeOnBackdrop && event.target === event.currentTarget) onClose?.();
|
|
10064
10273
|
};
|
|
10065
|
-
return /* @__PURE__ */ (0,
|
|
10274
|
+
return /* @__PURE__ */ (0, import_jsx_runtime110.jsx)(
|
|
10066
10275
|
"div",
|
|
10067
10276
|
{
|
|
10068
10277
|
className: cn(
|
|
@@ -10070,7 +10279,7 @@ function BottomSheet({
|
|
|
10070
10279
|
className
|
|
10071
10280
|
),
|
|
10072
10281
|
onClick: handleBackdropClick,
|
|
10073
|
-
children: /* @__PURE__ */ (0,
|
|
10282
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime110.jsxs)(
|
|
10074
10283
|
ScrollArea,
|
|
10075
10284
|
{
|
|
10076
10285
|
className: cn(
|
|
@@ -10079,13 +10288,13 @@ function BottomSheet({
|
|
|
10079
10288
|
),
|
|
10080
10289
|
viewportClassName: "max-h-[90vh] px-4 pb-6 pt-5",
|
|
10081
10290
|
children: [
|
|
10082
|
-
/* @__PURE__ */ (0,
|
|
10083
|
-
(title || icon) && /* @__PURE__ */ (0,
|
|
10291
|
+
/* @__PURE__ */ (0, import_jsx_runtime110.jsx)("div", { className: "-mt-1 flex justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime110.jsx)("div", { className: "h-1 w-10 rounded-full bg-secondary/40" }) }),
|
|
10292
|
+
(title || icon) && /* @__PURE__ */ (0, import_jsx_runtime110.jsxs)("div", { className: "mt-4 flex items-center gap-2", children: [
|
|
10084
10293
|
icon,
|
|
10085
|
-
/* @__PURE__ */ (0,
|
|
10294
|
+
/* @__PURE__ */ (0, import_jsx_runtime110.jsx)("p", { className: "text-body font-bold text-foreground", children: title })
|
|
10086
10295
|
] }),
|
|
10087
|
-
/* @__PURE__ */ (0,
|
|
10088
|
-
actions && actions.length > 0 && /* @__PURE__ */ (0,
|
|
10296
|
+
/* @__PURE__ */ (0, import_jsx_runtime110.jsx)("div", { className: cn((title || icon) && "mt-3"), children }),
|
|
10297
|
+
actions && actions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime110.jsx)("div", { className: "mt-4 flex gap-2", children: actions.map((action, index) => /* @__PURE__ */ (0, import_jsx_runtime110.jsxs)(
|
|
10089
10298
|
Button,
|
|
10090
10299
|
{
|
|
10091
10300
|
type: "button",
|
|
@@ -10095,7 +10304,7 @@ function BottomSheet({
|
|
|
10095
10304
|
onClick: action.onClick,
|
|
10096
10305
|
disabled: action.disabled,
|
|
10097
10306
|
children: [
|
|
10098
|
-
action.icon && /* @__PURE__ */ (0,
|
|
10307
|
+
action.icon && /* @__PURE__ */ (0, import_jsx_runtime110.jsx)(Icon, { name: action.icon, className: "text-icon-md" }),
|
|
10099
10308
|
action.label
|
|
10100
10309
|
]
|
|
10101
10310
|
},
|
|
@@ -10109,7 +10318,7 @@ function BottomSheet({
|
|
|
10109
10318
|
}
|
|
10110
10319
|
|
|
10111
10320
|
// src/web/components/basic-collapsible.tsx
|
|
10112
|
-
var
|
|
10321
|
+
var import_jsx_runtime111 = require("react/jsx-runtime");
|
|
10113
10322
|
function BasicCollapsible({
|
|
10114
10323
|
title,
|
|
10115
10324
|
children,
|
|
@@ -10120,7 +10329,7 @@ function BasicCollapsible({
|
|
|
10120
10329
|
triggerClassName,
|
|
10121
10330
|
contentClassName
|
|
10122
10331
|
}) {
|
|
10123
|
-
return /* @__PURE__ */ (0,
|
|
10332
|
+
return /* @__PURE__ */ (0, import_jsx_runtime111.jsxs)(
|
|
10124
10333
|
Collapsible,
|
|
10125
10334
|
{
|
|
10126
10335
|
open,
|
|
@@ -10129,7 +10338,7 @@ function BasicCollapsible({
|
|
|
10129
10338
|
"data-slot": "basic-collapsible",
|
|
10130
10339
|
className: cn("overflow-hidden rounded-xl bg-surface-inset/40 shadow-raised", className),
|
|
10131
10340
|
children: [
|
|
10132
|
-
/* @__PURE__ */ (0,
|
|
10341
|
+
/* @__PURE__ */ (0, import_jsx_runtime111.jsxs)(
|
|
10133
10342
|
CollapsibleTrigger,
|
|
10134
10343
|
{
|
|
10135
10344
|
className: cn(
|
|
@@ -10138,18 +10347,18 @@ function BasicCollapsible({
|
|
|
10138
10347
|
),
|
|
10139
10348
|
children: [
|
|
10140
10349
|
title,
|
|
10141
|
-
/* @__PURE__ */ (0,
|
|
10350
|
+
/* @__PURE__ */ (0, import_jsx_runtime111.jsx)(CollapsibleChevron, {})
|
|
10142
10351
|
]
|
|
10143
10352
|
}
|
|
10144
10353
|
),
|
|
10145
|
-
/* @__PURE__ */ (0,
|
|
10354
|
+
/* @__PURE__ */ (0, import_jsx_runtime111.jsx)(CollapsibleContent, { className: cn("px-3 pb-3 pt-1 text-caption text-muted-foreground", contentClassName), children })
|
|
10146
10355
|
]
|
|
10147
10356
|
}
|
|
10148
10357
|
);
|
|
10149
10358
|
}
|
|
10150
10359
|
|
|
10151
10360
|
// src/web/components/stepper-number-input.tsx
|
|
10152
|
-
var
|
|
10361
|
+
var import_jsx_runtime112 = require("react/jsx-runtime");
|
|
10153
10362
|
function StepperNumberInput({
|
|
10154
10363
|
value,
|
|
10155
10364
|
onChange,
|
|
@@ -10166,7 +10375,7 @@ function StepperNumberInput({
|
|
|
10166
10375
|
const bounded = max === void 0 ? boundedMin : Math.min(max, boundedMin);
|
|
10167
10376
|
onChange(Number.isFinite(bounded) ? bounded : min ?? 0);
|
|
10168
10377
|
};
|
|
10169
|
-
return /* @__PURE__ */ (0,
|
|
10378
|
+
return /* @__PURE__ */ (0, import_jsx_runtime112.jsxs)(
|
|
10170
10379
|
"div",
|
|
10171
10380
|
{
|
|
10172
10381
|
className: cn(
|
|
@@ -10174,7 +10383,7 @@ function StepperNumberInput({
|
|
|
10174
10383
|
className
|
|
10175
10384
|
),
|
|
10176
10385
|
children: [
|
|
10177
|
-
/* @__PURE__ */ (0,
|
|
10386
|
+
/* @__PURE__ */ (0, import_jsx_runtime112.jsx)(
|
|
10178
10387
|
"button",
|
|
10179
10388
|
{
|
|
10180
10389
|
type: "button",
|
|
@@ -10182,10 +10391,10 @@ function StepperNumberInput({
|
|
|
10182
10391
|
disabled: disabled || min !== void 0 && value <= min,
|
|
10183
10392
|
onClick: () => clamp(value - step),
|
|
10184
10393
|
"aria-label": "Decrease",
|
|
10185
|
-
children: /* @__PURE__ */ (0,
|
|
10394
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(IconGlyph, { glyph: Remove, className: "text-icon-md" })
|
|
10186
10395
|
}
|
|
10187
10396
|
),
|
|
10188
|
-
/* @__PURE__ */ (0,
|
|
10397
|
+
/* @__PURE__ */ (0, import_jsx_runtime112.jsx)(
|
|
10189
10398
|
"input",
|
|
10190
10399
|
{
|
|
10191
10400
|
type: "number",
|
|
@@ -10202,7 +10411,7 @@ function StepperNumberInput({
|
|
|
10202
10411
|
)
|
|
10203
10412
|
}
|
|
10204
10413
|
),
|
|
10205
|
-
/* @__PURE__ */ (0,
|
|
10414
|
+
/* @__PURE__ */ (0, import_jsx_runtime112.jsx)(
|
|
10206
10415
|
"button",
|
|
10207
10416
|
{
|
|
10208
10417
|
type: "button",
|
|
@@ -10210,7 +10419,7 @@ function StepperNumberInput({
|
|
|
10210
10419
|
disabled: disabled || max !== void 0 && value >= max,
|
|
10211
10420
|
onClick: () => clamp(value + step),
|
|
10212
10421
|
"aria-label": "Increase",
|
|
10213
|
-
children: /* @__PURE__ */ (0,
|
|
10422
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime112.jsx)(IconGlyph, { glyph: Add, className: "text-icon-md" })
|
|
10214
10423
|
}
|
|
10215
10424
|
)
|
|
10216
10425
|
]
|
|
@@ -10220,7 +10429,7 @@ function StepperNumberInput({
|
|
|
10220
10429
|
|
|
10221
10430
|
// src/web/components/metric-card.tsx
|
|
10222
10431
|
var import_react30 = require("react");
|
|
10223
|
-
var
|
|
10432
|
+
var import_jsx_runtime113 = require("react/jsx-runtime");
|
|
10224
10433
|
var toneClasses2 = {
|
|
10225
10434
|
primary: "bg-primary/10 text-brand",
|
|
10226
10435
|
purple: "bg-network-arkade/10 text-network-arkade-fg",
|
|
@@ -10241,16 +10450,36 @@ function MetricCard({
|
|
|
10241
10450
|
trend,
|
|
10242
10451
|
definition,
|
|
10243
10452
|
change,
|
|
10453
|
+
labelStyle = "eyebrow",
|
|
10244
10454
|
className,
|
|
10245
10455
|
...rest
|
|
10246
10456
|
}) {
|
|
10247
10457
|
const labelId = (0, import_react30.useId)();
|
|
10458
|
+
const valueRef = (0, import_react30.useRef)(null);
|
|
10248
10459
|
const comfortable = size === "comfortable";
|
|
10249
10460
|
const placement = iconPlacement ?? (comfortable ? "end" : "label");
|
|
10250
10461
|
const hasEnd = placement === "end" || !!trend;
|
|
10251
10462
|
const iconBox = comfortable ? "size-9 rounded-xl shadow-raised" : placement === "end" ? "size-7 rounded-lg" : "size-5 rounded-md";
|
|
10252
10463
|
const iconGlyph = comfortable ? "text-icon-lg" : placement === "end" ? "text-icon-md" : "text-icon-xs";
|
|
10253
|
-
|
|
10464
|
+
(0, import_react30.useLayoutEffect)(() => {
|
|
10465
|
+
const el = valueRef.current;
|
|
10466
|
+
const column = el?.parentElement;
|
|
10467
|
+
if (!el || !column || !hasEnd) return;
|
|
10468
|
+
const fit = () => {
|
|
10469
|
+
el.style.fontSize = "";
|
|
10470
|
+
const base = parseFloat(getComputedStyle(el).fontSize);
|
|
10471
|
+
let size2 = base;
|
|
10472
|
+
while (el.scrollWidth > el.clientWidth + 0.5 && size2 > base * 0.6) {
|
|
10473
|
+
size2 -= 1;
|
|
10474
|
+
el.style.fontSize = `${size2}px`;
|
|
10475
|
+
}
|
|
10476
|
+
};
|
|
10477
|
+
fit();
|
|
10478
|
+
const observer = new ResizeObserver(fit);
|
|
10479
|
+
observer.observe(column);
|
|
10480
|
+
return () => observer.disconnect();
|
|
10481
|
+
}, [value, hasEnd, comfortable]);
|
|
10482
|
+
const iconNode = icon ? /* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
|
|
10254
10483
|
"span",
|
|
10255
10484
|
{
|
|
10256
10485
|
"data-slot": "metric-card-icon",
|
|
@@ -10259,11 +10488,19 @@ function MetricCard({
|
|
|
10259
10488
|
iconBox,
|
|
10260
10489
|
toneClasses2[tone]
|
|
10261
10490
|
),
|
|
10262
|
-
children: typeof icon === "string" ? /* @__PURE__ */ (0,
|
|
10491
|
+
children: typeof icon === "string" ? /* @__PURE__ */ (0, import_jsx_runtime113.jsx)(Icon, { name: icon, className: iconGlyph }) : icon
|
|
10263
10492
|
}
|
|
10264
10493
|
) : null;
|
|
10265
|
-
const labelNode = /* @__PURE__ */ (0,
|
|
10266
|
-
|
|
10494
|
+
const labelNode = /* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
|
|
10495
|
+
"span",
|
|
10496
|
+
{
|
|
10497
|
+
id: labelId,
|
|
10498
|
+
"data-slot": "metric-card-label",
|
|
10499
|
+
className: labelStyle === "title" ? "text-body font-semibold text-foreground" : cn(eyebrow, "text-muted-foreground"),
|
|
10500
|
+
children: label
|
|
10501
|
+
}
|
|
10502
|
+
);
|
|
10503
|
+
return /* @__PURE__ */ (0, import_jsx_runtime113.jsxs)(
|
|
10267
10504
|
"div",
|
|
10268
10505
|
{
|
|
10269
10506
|
role: "group",
|
|
@@ -10277,36 +10514,42 @@ function MetricCard({
|
|
|
10277
10514
|
),
|
|
10278
10515
|
...rest,
|
|
10279
10516
|
children: [
|
|
10280
|
-
/* @__PURE__ */ (0,
|
|
10281
|
-
/* @__PURE__ */ (0,
|
|
10282
|
-
|
|
10283
|
-
|
|
10517
|
+
/* @__PURE__ */ (0, import_jsx_runtime113.jsxs)("div", { className: hasEnd ? "flex min-w-0 flex-1 flex-col justify-between gap-4" : "contents", children: [
|
|
10518
|
+
/* @__PURE__ */ (0, import_jsx_runtime113.jsxs)("div", { className: hasEnd ? labelStyle === "title" ? "space-y-0" : "space-y-1" : "contents", children: [
|
|
10519
|
+
/* @__PURE__ */ (0, import_jsx_runtime113.jsxs)("div", { className: "flex items-center gap-1.5", children: [
|
|
10520
|
+
placement === "label" && iconNode,
|
|
10521
|
+
labelNode
|
|
10522
|
+
] }),
|
|
10523
|
+
definition && /* @__PURE__ */ (0, import_jsx_runtime113.jsx)("p", { "data-slot": "metric-card-definition", className: "m-0 text-caption text-muted-foreground", children: definition })
|
|
10284
10524
|
] }),
|
|
10285
|
-
|
|
10286
|
-
|
|
10287
|
-
|
|
10288
|
-
|
|
10289
|
-
|
|
10290
|
-
|
|
10291
|
-
|
|
10292
|
-
|
|
10293
|
-
|
|
10294
|
-
|
|
10295
|
-
|
|
10296
|
-
|
|
10297
|
-
|
|
10298
|
-
|
|
10299
|
-
"p",
|
|
10300
|
-
|
|
10301
|
-
"
|
|
10302
|
-
|
|
10303
|
-
|
|
10304
|
-
|
|
10305
|
-
|
|
10525
|
+
/* @__PURE__ */ (0, import_jsx_runtime113.jsxs)("div", { className: hasEnd ? "space-y-1" : "contents", children: [
|
|
10526
|
+
/* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
|
|
10527
|
+
"p",
|
|
10528
|
+
{
|
|
10529
|
+
ref: valueRef,
|
|
10530
|
+
"data-slot": "metric-card-value",
|
|
10531
|
+
className: cn(
|
|
10532
|
+
"m-0 font-bold tabular-nums text-foreground",
|
|
10533
|
+
hasEnd && "whitespace-nowrap",
|
|
10534
|
+
comfortable ? "text-headline" : "text-body"
|
|
10535
|
+
),
|
|
10536
|
+
children: value
|
|
10537
|
+
}
|
|
10538
|
+
),
|
|
10539
|
+
change && /* @__PURE__ */ (0, import_jsx_runtime113.jsx)("p", { "data-slot": "metric-card-change", className: cn("m-0 tabular-nums text-foreground", comfortable ? "text-caption" : "text-xxs"), children: change }),
|
|
10540
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
|
|
10541
|
+
"p",
|
|
10542
|
+
{
|
|
10543
|
+
"data-slot": "metric-card-description",
|
|
10544
|
+
className: cn("m-0 text-muted-foreground", comfortable ? "text-caption" : "text-xxs"),
|
|
10545
|
+
children: description
|
|
10546
|
+
}
|
|
10547
|
+
)
|
|
10548
|
+
] })
|
|
10306
10549
|
] }),
|
|
10307
|
-
hasEnd && /* @__PURE__ */ (0,
|
|
10550
|
+
hasEnd && /* @__PURE__ */ (0, import_jsx_runtime113.jsxs)("div", { className: "flex shrink-0 flex-col items-end justify-between gap-3", children: [
|
|
10308
10551
|
placement === "end" && iconNode,
|
|
10309
|
-
trend && /* @__PURE__ */ (0,
|
|
10552
|
+
trend && /* @__PURE__ */ (0, import_jsx_runtime113.jsx)("div", { "data-slot": "metric-card-trend", className: "min-h-0 flex-1", children: trend })
|
|
10310
10553
|
] })
|
|
10311
10554
|
]
|
|
10312
10555
|
}
|
|
@@ -10314,10 +10557,10 @@ function MetricCard({
|
|
|
10314
10557
|
}
|
|
10315
10558
|
|
|
10316
10559
|
// src/web/components/copyable.tsx
|
|
10317
|
-
var
|
|
10560
|
+
var import_jsx_runtime114 = require("react/jsx-runtime");
|
|
10318
10561
|
function Copyable({ value, label, children, mono = true, wrap = false, className }) {
|
|
10319
|
-
return /* @__PURE__ */ (0,
|
|
10320
|
-
/* @__PURE__ */ (0,
|
|
10562
|
+
return /* @__PURE__ */ (0, import_jsx_runtime114.jsxs)("span", { "data-slot": "copyable", className: cn("inline-flex min-w-0 max-w-full items-center gap-1", className), children: [
|
|
10563
|
+
/* @__PURE__ */ (0, import_jsx_runtime114.jsx)(
|
|
10321
10564
|
"span",
|
|
10322
10565
|
{
|
|
10323
10566
|
title: value,
|
|
@@ -10325,29 +10568,29 @@ function Copyable({ value, label, children, mono = true, wrap = false, className
|
|
|
10325
10568
|
children: children ?? value
|
|
10326
10569
|
}
|
|
10327
10570
|
),
|
|
10328
|
-
/* @__PURE__ */ (0,
|
|
10571
|
+
/* @__PURE__ */ (0, import_jsx_runtime114.jsx)(CopyButton, { value, label })
|
|
10329
10572
|
] });
|
|
10330
10573
|
}
|
|
10331
10574
|
|
|
10332
10575
|
// src/web/components/code-block.tsx
|
|
10333
|
-
var
|
|
10576
|
+
var import_jsx_runtime115 = require("react/jsx-runtime");
|
|
10334
10577
|
function CodeBlock({ code, label = "code", language, className }) {
|
|
10335
|
-
return /* @__PURE__ */ (0,
|
|
10578
|
+
return /* @__PURE__ */ (0, import_jsx_runtime115.jsxs)(
|
|
10336
10579
|
"figure",
|
|
10337
10580
|
{
|
|
10338
10581
|
"data-slot": "code-block",
|
|
10339
10582
|
"aria-label": label,
|
|
10340
10583
|
className: cn("relative m-0 min-w-0 overflow-hidden rounded-xl bg-muted/60 shadow-inner ring-1 ring-inset ring-secondary/15", className),
|
|
10341
10584
|
children: [
|
|
10342
|
-
language && /* @__PURE__ */ (0,
|
|
10343
|
-
/* @__PURE__ */ (0,
|
|
10344
|
-
/* @__PURE__ */ (0,
|
|
10585
|
+
language && /* @__PURE__ */ (0, import_jsx_runtime115.jsx)("figcaption", { className: cn("px-4 pt-3 text-muted-foreground", eyebrow), children: language }),
|
|
10586
|
+
/* @__PURE__ */ (0, import_jsx_runtime115.jsx)("div", { className: "absolute right-2 top-2", children: /* @__PURE__ */ (0, import_jsx_runtime115.jsx)(CopyButton, { value: code, label }) }),
|
|
10587
|
+
/* @__PURE__ */ (0, import_jsx_runtime115.jsx)(
|
|
10345
10588
|
HorizontalScrollArea,
|
|
10346
10589
|
{
|
|
10347
10590
|
className: "my-4 ml-4 mr-12",
|
|
10348
10591
|
viewportAs: "pre",
|
|
10349
10592
|
viewportClassName: "m-0 pb-3 font-mono text-caption text-foreground",
|
|
10350
|
-
children: /* @__PURE__ */ (0,
|
|
10593
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime115.jsx)("code", { children: code })
|
|
10351
10594
|
}
|
|
10352
10595
|
)
|
|
10353
10596
|
]
|
|
@@ -10372,7 +10615,7 @@ var chartScatterSeriesLimit = 3;
|
|
|
10372
10615
|
|
|
10373
10616
|
// src/web/components/filter-chip-group.tsx
|
|
10374
10617
|
var import_react31 = require("react");
|
|
10375
|
-
var
|
|
10618
|
+
var import_jsx_runtime116 = require("react/jsx-runtime");
|
|
10376
10619
|
function FilterChipGroup({
|
|
10377
10620
|
options,
|
|
10378
10621
|
value,
|
|
@@ -10399,7 +10642,7 @@ function FilterChipGroup({
|
|
|
10399
10642
|
onChange(target.option.value);
|
|
10400
10643
|
refs.current[target.index]?.focus();
|
|
10401
10644
|
};
|
|
10402
|
-
return /* @__PURE__ */ (0,
|
|
10645
|
+
return /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(
|
|
10403
10646
|
"div",
|
|
10404
10647
|
{
|
|
10405
10648
|
role: segmented ? "radiogroup" : void 0,
|
|
@@ -10413,7 +10656,7 @@ function FilterChipGroup({
|
|
|
10413
10656
|
children: options.map((option, index) => {
|
|
10414
10657
|
const active = option.value === value;
|
|
10415
10658
|
const iconOnly = option.label === void 0 || option.label === null;
|
|
10416
|
-
return /* @__PURE__ */ (0,
|
|
10659
|
+
return /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)(
|
|
10417
10660
|
"button",
|
|
10418
10661
|
{
|
|
10419
10662
|
ref: (node) => {
|
|
@@ -10441,7 +10684,7 @@ function FilterChipGroup({
|
|
|
10441
10684
|
children: [
|
|
10442
10685
|
option.icon,
|
|
10443
10686
|
option.label,
|
|
10444
|
-
option.count !== void 0 && /* @__PURE__ */ (0,
|
|
10687
|
+
option.count !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(
|
|
10445
10688
|
"span",
|
|
10446
10689
|
{
|
|
10447
10690
|
className: cn(
|
|
@@ -10461,7 +10704,7 @@ function FilterChipGroup({
|
|
|
10461
10704
|
}
|
|
10462
10705
|
|
|
10463
10706
|
// src/web/components/charts/core.tsx
|
|
10464
|
-
var
|
|
10707
|
+
var import_jsx_runtime117 = require("react/jsx-runtime");
|
|
10465
10708
|
var BAR_GAP = 2;
|
|
10466
10709
|
var BAR_RADIUS = 4;
|
|
10467
10710
|
function barPath(x, y, w, h, end) {
|
|
@@ -10526,15 +10769,15 @@ function ChartLegend({
|
|
|
10526
10769
|
className
|
|
10527
10770
|
}) {
|
|
10528
10771
|
const visibleCount = items.filter((item) => !hidden?.has(item.id)).length;
|
|
10529
|
-
return /* @__PURE__ */ (0,
|
|
10772
|
+
return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
|
|
10530
10773
|
"ul",
|
|
10531
10774
|
{
|
|
10532
10775
|
"data-slot": "chart-legend",
|
|
10533
10776
|
className: cn("m-0 flex list-none flex-wrap justify-center gap-x-4 gap-y-1 p-0 text-caption text-foreground", className),
|
|
10534
10777
|
children: items.map((item) => {
|
|
10535
10778
|
const off = hidden?.has(item.id) ?? false;
|
|
10536
|
-
const key = item.swatch ?? /* @__PURE__ */ (0,
|
|
10537
|
-
return /* @__PURE__ */ (0,
|
|
10779
|
+
const key = item.swatch ?? /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(LegendSwatch, { color: item.color, shape: keyShape });
|
|
10780
|
+
return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("li", { className: "flex items-center", children: onToggle ? /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(
|
|
10538
10781
|
"button",
|
|
10539
10782
|
{
|
|
10540
10783
|
type: "button",
|
|
@@ -10551,7 +10794,7 @@ function ChartLegend({
|
|
|
10551
10794
|
item.label
|
|
10552
10795
|
]
|
|
10553
10796
|
}
|
|
10554
|
-
) : /* @__PURE__ */ (0,
|
|
10797
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("span", { className: "flex items-center gap-1.5 px-1.5 py-0.5", children: [
|
|
10555
10798
|
key,
|
|
10556
10799
|
item.label
|
|
10557
10800
|
] }) }, item.id);
|
|
@@ -10577,7 +10820,7 @@ function useSeriesVisibility(ids) {
|
|
|
10577
10820
|
};
|
|
10578
10821
|
}
|
|
10579
10822
|
function LegendSwatch({ color, shape = "rect" }) {
|
|
10580
|
-
return /* @__PURE__ */ (0,
|
|
10823
|
+
return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("svg", { width: "12", height: "12", "aria-hidden": "true", className: "shrink-0", children: shape === "line" ? /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("line", { x1: "1", x2: "11", y1: "6", y2: "6", stroke: color, strokeWidth: "2", strokeLinecap: "round" }) : shape === "dot" ? /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("circle", { cx: "6", cy: "6", r: "4", fill: color }) : /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("rect", { width: "12", height: "12", rx: "3", fill: color }) });
|
|
10581
10824
|
}
|
|
10582
10825
|
function ChartTooltip({
|
|
10583
10826
|
title,
|
|
@@ -10588,7 +10831,7 @@ function ChartTooltip({
|
|
|
10588
10831
|
swatch = "line"
|
|
10589
10832
|
}) {
|
|
10590
10833
|
const flip = x > width * 0.6;
|
|
10591
|
-
return /* @__PURE__ */ (0,
|
|
10834
|
+
return /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(
|
|
10592
10835
|
"div",
|
|
10593
10836
|
{
|
|
10594
10837
|
"data-slot": "chart-tooltip",
|
|
@@ -10600,11 +10843,11 @@ function ChartTooltip({
|
|
|
10600
10843
|
top: Math.max(0, y - 8)
|
|
10601
10844
|
},
|
|
10602
10845
|
children: [
|
|
10603
|
-
/* @__PURE__ */ (0,
|
|
10604
|
-
/* @__PURE__ */ (0,
|
|
10605
|
-
/* @__PURE__ */ (0,
|
|
10606
|
-
/* @__PURE__ */ (0,
|
|
10607
|
-
/* @__PURE__ */ (0,
|
|
10846
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)("div", { className: "mb-1 font-semibold text-foreground", children: title }),
|
|
10847
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)("ul", { className: "m-0 list-none space-y-0.5 p-0", children: rows.map((row) => /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("li", { className: "flex items-center gap-2 whitespace-nowrap", children: [
|
|
10848
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(LegendSwatch, { color: row.color, shape: swatch }),
|
|
10849
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)("span", { className: "font-semibold tabular-nums text-foreground", children: row.value }),
|
|
10850
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)("span", { className: "text-muted-foreground", children: row.label })
|
|
10608
10851
|
] }, row.id)) })
|
|
10609
10852
|
]
|
|
10610
10853
|
}
|
|
@@ -10632,8 +10875,8 @@ function nextActiveIndex(key, current, count3, { vertical = false } = {}) {
|
|
|
10632
10875
|
}
|
|
10633
10876
|
}
|
|
10634
10877
|
var viewOptions = [
|
|
10635
|
-
{ value: "chart", ariaLabel: "Chart", icon: /* @__PURE__ */ (0,
|
|
10636
|
-
{ value: "table", ariaLabel: "Table", icon: /* @__PURE__ */ (0,
|
|
10878
|
+
{ value: "chart", ariaLabel: "Chart", icon: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(IconGlyph, { glyph: BarChart, size: "sm" }) },
|
|
10879
|
+
{ value: "table", ariaLabel: "Table", icon: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(IconGlyph, { glyph: TableRows, size: "sm" }) }
|
|
10637
10880
|
];
|
|
10638
10881
|
var tableOption = viewOptions[1];
|
|
10639
10882
|
function ChartViewToggle({
|
|
@@ -10643,9 +10886,9 @@ function ChartViewToggle({
|
|
|
10643
10886
|
chartView,
|
|
10644
10887
|
onChartViewChange
|
|
10645
10888
|
}) {
|
|
10646
|
-
const options = views && views.length > 0 ? [...views.map((v) => ({ value: v.value, ariaLabel: v.label, icon: /* @__PURE__ */ (0,
|
|
10889
|
+
const options = views && views.length > 0 ? [...views.map((v) => ({ value: v.value, ariaLabel: v.label, icon: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(Icon, { name: v.icon, size: "sm" }) })), tableOption] : viewOptions;
|
|
10647
10890
|
const value = view === "table" ? "table" : views && views.length > 0 ? chartView ?? views[0].value : "chart";
|
|
10648
|
-
return /* @__PURE__ */ (0,
|
|
10891
|
+
return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("div", { "data-slot": "chart-view-toggle", className: "shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
|
|
10649
10892
|
FilterChipGroup,
|
|
10650
10893
|
{
|
|
10651
10894
|
variant: "segmented",
|
|
@@ -10666,16 +10909,16 @@ function ChartTimeframeMenu({
|
|
|
10666
10909
|
onChange
|
|
10667
10910
|
}) {
|
|
10668
10911
|
const current = timeframes.find((t) => t.value === value) ?? timeframes[0];
|
|
10669
|
-
return /* @__PURE__ */ (0,
|
|
10670
|
-
/* @__PURE__ */ (0,
|
|
10671
|
-
/* @__PURE__ */ (0,
|
|
10912
|
+
return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("div", { "data-slot": "chart-timeframe", className: "shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(DropdownMenu, { children: [
|
|
10913
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(GlyphButton, { icon: Event2, label: `Timeframe: ${current.label}` }) }),
|
|
10914
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(DropdownMenuContent, { className: "min-w-28", children: timeframes.map((t) => /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(
|
|
10672
10915
|
DropdownMenuItem,
|
|
10673
10916
|
{
|
|
10674
10917
|
onSelect: () => onChange(t.value),
|
|
10675
|
-
icon: /* @__PURE__ */ (0,
|
|
10918
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(IconGlyph, { glyph: Check, className: t.value === current.value ? void 0 : "invisible" }),
|
|
10676
10919
|
children: [
|
|
10677
10920
|
t.label,
|
|
10678
|
-
t.value === current.value && /* @__PURE__ */ (0,
|
|
10921
|
+
t.value === current.value && /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("span", { className: "sr-only", children: " (current)" })
|
|
10679
10922
|
]
|
|
10680
10923
|
},
|
|
10681
10924
|
t.value
|
|
@@ -10689,8 +10932,8 @@ function ChartFiltersMenu({
|
|
|
10689
10932
|
}) {
|
|
10690
10933
|
const on = filters.filter((f) => active.includes(f.value));
|
|
10691
10934
|
const toggle = (value) => onChange(active.includes(value) ? active.filter((v) => v !== value) : [...active, value]);
|
|
10692
|
-
return /* @__PURE__ */ (0,
|
|
10693
|
-
/* @__PURE__ */ (0,
|
|
10935
|
+
return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("div", { "data-slot": "chart-filters", className: "shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(DropdownMenu, { children: [
|
|
10936
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
|
|
10694
10937
|
GlyphButton,
|
|
10695
10938
|
{
|
|
10696
10939
|
icon: Tune,
|
|
@@ -10698,9 +10941,9 @@ function ChartFiltersMenu({
|
|
|
10698
10941
|
label: on.length > 0 ? `Filters: ${on.length} on` : "Filters"
|
|
10699
10942
|
}
|
|
10700
10943
|
) }),
|
|
10701
|
-
/* @__PURE__ */ (0,
|
|
10944
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(DropdownMenuContent, { className: "min-w-44", children: filters.map((f) => {
|
|
10702
10945
|
const checked = active.includes(f.value);
|
|
10703
|
-
return /* @__PURE__ */ (0,
|
|
10946
|
+
return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
|
|
10704
10947
|
DropdownMenuItem,
|
|
10705
10948
|
{
|
|
10706
10949
|
role: "menuitemcheckbox",
|
|
@@ -10709,7 +10952,7 @@ function ChartFiltersMenu({
|
|
|
10709
10952
|
event.preventDefault();
|
|
10710
10953
|
toggle(f.value);
|
|
10711
10954
|
},
|
|
10712
|
-
icon: /* @__PURE__ */ (0,
|
|
10955
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(IconGlyph, { glyph: Check, className: checked ? void 0 : "invisible" }),
|
|
10713
10956
|
children: f.label
|
|
10714
10957
|
},
|
|
10715
10958
|
f.value
|
|
@@ -10735,20 +10978,20 @@ function ChartHeader({
|
|
|
10735
10978
|
const showTimeframes = timeframes && timeframes.length > 0 && onTimeframeChange;
|
|
10736
10979
|
const showFilters = filters && filters.length > 0 && onFiltersChange;
|
|
10737
10980
|
const hasText = Boolean(title || description);
|
|
10738
|
-
return /* @__PURE__ */ (0,
|
|
10981
|
+
return /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(
|
|
10739
10982
|
"div",
|
|
10740
10983
|
{
|
|
10741
10984
|
"data-slot": "chart-header",
|
|
10742
10985
|
className: cn("flex flex-wrap items-start gap-x-4 gap-y-2", hasText ? "justify-between" : "justify-end"),
|
|
10743
10986
|
children: [
|
|
10744
|
-
hasText && /* @__PURE__ */ (0,
|
|
10745
|
-
title && /* @__PURE__ */ (0,
|
|
10746
|
-
description && /* @__PURE__ */ (0,
|
|
10987
|
+
hasText && /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("div", { className: "flex min-w-0 flex-col gap-1", children: [
|
|
10988
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("h3", { className: "m-0 text-subhead font-semibold leading-none tracking-tight text-foreground", children: title }),
|
|
10989
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("p", { className: "m-0 text-caption text-muted-foreground", children: description })
|
|
10747
10990
|
] }),
|
|
10748
|
-
/* @__PURE__ */ (0,
|
|
10749
|
-
(showTimeframes || showFilters) && /* @__PURE__ */ (0,
|
|
10750
|
-
showFilters && /* @__PURE__ */ (0,
|
|
10751
|
-
showTimeframes && /* @__PURE__ */ (0,
|
|
10991
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("div", { className: "flex shrink-0 items-center gap-1", children: [
|
|
10992
|
+
(showTimeframes || showFilters) && /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("div", { className: "flex items-center gap-0.5", children: [
|
|
10993
|
+
showFilters && /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(ChartFiltersMenu, { filters, active: activeFilters ?? [], onChange: onFiltersChange }),
|
|
10994
|
+
showTimeframes && /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
|
|
10752
10995
|
ChartTimeframeMenu,
|
|
10753
10996
|
{
|
|
10754
10997
|
timeframes,
|
|
@@ -10757,7 +11000,7 @@ function ChartHeader({
|
|
|
10757
11000
|
}
|
|
10758
11001
|
)
|
|
10759
11002
|
] }),
|
|
10760
|
-
/* @__PURE__ */ (0,
|
|
11003
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
|
|
10761
11004
|
ChartViewToggle,
|
|
10762
11005
|
{
|
|
10763
11006
|
view,
|
|
@@ -10773,13 +11016,13 @@ function ChartHeader({
|
|
|
10773
11016
|
);
|
|
10774
11017
|
}
|
|
10775
11018
|
function ChartLegendRow({ children }) {
|
|
10776
|
-
return /* @__PURE__ */ (0,
|
|
11019
|
+
return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("div", { "data-slot": "chart-legend-row", children });
|
|
10777
11020
|
}
|
|
10778
11021
|
function ChartDataTable({ label, table }) {
|
|
10779
|
-
return /* @__PURE__ */ (0,
|
|
10780
|
-
/* @__PURE__ */ (0,
|
|
10781
|
-
/* @__PURE__ */ (0,
|
|
10782
|
-
/* @__PURE__ */ (0,
|
|
11022
|
+
return /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(Table, { children: [
|
|
11023
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)("caption", { className: "sr-only", children: label }),
|
|
11024
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(TableHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(TableRow, { children: table.columns.map((column, index) => /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(TableHead, { className: index > 0 ? "text-right" : void 0, children: column }, index)) }) }),
|
|
11025
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(TableBody, { children: table.rows.map((row, rowIndex) => /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(TableRow, { children: row.map((cell, cellIndex) => /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(TableCell, { className: cellIndex > 0 ? "text-right tabular-nums" : void 0, children: cell }, cellIndex)) }, rowIndex)) })
|
|
10783
11026
|
] });
|
|
10784
11027
|
}
|
|
10785
11028
|
function ChartFrame({
|
|
@@ -10793,18 +11036,18 @@ function ChartFrame({
|
|
|
10793
11036
|
...head
|
|
10794
11037
|
}) {
|
|
10795
11038
|
const [view, setView] = (0, import_react32.useState)("chart");
|
|
10796
|
-
return /* @__PURE__ */ (0,
|
|
10797
|
-
scale && /* @__PURE__ */ (0,
|
|
10798
|
-
/* @__PURE__ */ (0,
|
|
10799
|
-
view === "chart" ? children : /* @__PURE__ */ (0,
|
|
10800
|
-
view === "chart" && legend && /* @__PURE__ */ (0,
|
|
10801
|
-
/* @__PURE__ */ (0,
|
|
11039
|
+
return /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("figure", { "data-slot": "chart", "aria-label": label, className: cn("m-0 min-w-0 space-y-3", className), children: [
|
|
11040
|
+
scale && /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("p", { "data-slot": "chart-scale", className: "sr-only", children: scale }),
|
|
11041
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(ChartHeader, { ...head, view, onViewChange: setView }),
|
|
11042
|
+
view === "chart" ? children : /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(ChartDataTable, { label, table }),
|
|
11043
|
+
view === "chart" && legend && /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(ChartLegendRow, { children: legend }),
|
|
11044
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)("p", { "aria-live": "polite", className: "sr-only", children: announcement ?? "" })
|
|
10802
11045
|
] });
|
|
10803
11046
|
}
|
|
10804
11047
|
var plotClass = "relative w-full min-w-0 rounded-xl outline-none transition-shadow duration-200 focus-visible:ring-2 focus-visible:ring-primary/50 focus-visible:shadow-glow-primary-soft";
|
|
10805
11048
|
|
|
10806
11049
|
// src/web/components/trend-chart.tsx
|
|
10807
|
-
var
|
|
11050
|
+
var import_jsx_runtime118 = require("react/jsx-runtime");
|
|
10808
11051
|
var toneFill = {
|
|
10809
11052
|
// The charts' green, so every chart draws the same one.
|
|
10810
11053
|
primary: "var(--series-1)",
|
|
@@ -10914,7 +11157,7 @@ function TrendChart({
|
|
|
10914
11157
|
},
|
|
10915
11158
|
[active, count3]
|
|
10916
11159
|
);
|
|
10917
|
-
if (count3 === 0) return /* @__PURE__ */ (0,
|
|
11160
|
+
if (count3 === 0) return /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(import_jsx_runtime118.Fragment, { children: empty ?? null });
|
|
10918
11161
|
const textures = series.map((s) => s.texture);
|
|
10919
11162
|
const totals = points.map(
|
|
10920
11163
|
(point) => series.reduce((sum, s) => sum + Math.max(0, point.values[s.id] ?? 0), 0)
|
|
@@ -10947,15 +11190,15 @@ function TrendChart({
|
|
|
10947
11190
|
const activeTitle = activePoint ? activePoint.detail ?? activePoint.label : "";
|
|
10948
11191
|
const containerWidth = containerRef.current?.clientWidth ?? width;
|
|
10949
11192
|
const toContainer = width > 0 ? containerWidth / width : 1;
|
|
10950
|
-
return /* @__PURE__ */ (0,
|
|
11193
|
+
return /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)(
|
|
10951
11194
|
"figure",
|
|
10952
11195
|
{
|
|
10953
11196
|
"data-slot": "trend-chart",
|
|
10954
11197
|
"aria-label": label,
|
|
10955
11198
|
className: cn("m-0 min-w-0 space-y-2", className),
|
|
10956
11199
|
children: [
|
|
10957
|
-
/* @__PURE__ */ (0,
|
|
10958
|
-
view === "table" && /* @__PURE__ */ (0,
|
|
11200
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)(ChartHeader, { ...head, view, onViewChange: setView }),
|
|
11201
|
+
view === "table" && /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
|
|
10959
11202
|
ChartDataTable,
|
|
10960
11203
|
{
|
|
10961
11204
|
label,
|
|
@@ -10969,8 +11212,8 @@ function TrendChart({
|
|
|
10969
11212
|
}
|
|
10970
11213
|
}
|
|
10971
11214
|
),
|
|
10972
|
-
/* @__PURE__ */ (0,
|
|
10973
|
-
/* @__PURE__ */ (0,
|
|
11215
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)("p", { id: readoutId, "data-slot": "trend-chart-readout", "aria-live": "polite", className: "sr-only", children: activePoint ? tooltipText(activeTitle, activeRows) : "" }),
|
|
11216
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsxs)(
|
|
10974
11217
|
"div",
|
|
10975
11218
|
{
|
|
10976
11219
|
ref: containerRef,
|
|
@@ -10985,7 +11228,7 @@ function TrendChart({
|
|
|
10985
11228
|
onBlur: () => setActive(null),
|
|
10986
11229
|
className: "relative mt-5 w-full min-w-0 rounded-xl outline-none transition-shadow focus-visible:ring-2 focus-visible:ring-primary/50 focus-visible:shadow-glow-primary-soft",
|
|
10987
11230
|
children: [
|
|
10988
|
-
/* @__PURE__ */ (0,
|
|
11231
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsxs)(
|
|
10989
11232
|
"svg",
|
|
10990
11233
|
{
|
|
10991
11234
|
width: "100%",
|
|
@@ -10996,11 +11239,11 @@ function TrendChart({
|
|
|
10996
11239
|
onPointerLeave: () => setActive(null),
|
|
10997
11240
|
"aria-hidden": "true",
|
|
10998
11241
|
children: [
|
|
10999
|
-
/* @__PURE__ */ (0,
|
|
11000
|
-
(s, index) => textures[index] === "hatch" ? /* @__PURE__ */ (0,
|
|
11242
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)("defs", { children: series.map(
|
|
11243
|
+
(s, index) => textures[index] === "hatch" ? /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(Texture, { id: `${idBase}-hatch-${index}`, tone: s.tone, texture: "hatch" }, s.id) : /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(SolidFill, { id: `${idBase}-fill-${index}`, tone: s.tone }, s.id)
|
|
11001
11244
|
) }),
|
|
11002
|
-
/* @__PURE__ */ (0,
|
|
11003
|
-
/* @__PURE__ */ (0,
|
|
11245
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)("g", { "data-slot": "trend-chart-y-axis", children: ticks.map((tick, index) => /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)("g", { children: [
|
|
11246
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
|
|
11004
11247
|
"line",
|
|
11005
11248
|
{
|
|
11006
11249
|
x1: plotLeft,
|
|
@@ -11011,7 +11254,7 @@ function TrendChart({
|
|
|
11011
11254
|
strokeDasharray: tick === 0 ? void 0 : "2 3"
|
|
11012
11255
|
}
|
|
11013
11256
|
),
|
|
11014
|
-
/* @__PURE__ */ (0,
|
|
11257
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
|
|
11015
11258
|
"text",
|
|
11016
11259
|
{
|
|
11017
11260
|
x: plotLeft - 6,
|
|
@@ -11025,7 +11268,7 @@ function TrendChart({
|
|
|
11025
11268
|
}
|
|
11026
11269
|
)
|
|
11027
11270
|
] }, tick)) }),
|
|
11028
|
-
active !== null && /* @__PURE__ */ (0,
|
|
11271
|
+
active !== null && /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
|
|
11029
11272
|
"rect",
|
|
11030
11273
|
{
|
|
11031
11274
|
"data-slot": "trend-chart-active",
|
|
@@ -11037,9 +11280,9 @@ function TrendChart({
|
|
|
11037
11280
|
opacity: 0.14
|
|
11038
11281
|
}
|
|
11039
11282
|
),
|
|
11040
|
-
/* @__PURE__ */ (0,
|
|
11283
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)("g", { "data-slot": "trend-chart-bars", children: points.map((point, pointIndex) => {
|
|
11041
11284
|
let base = 0;
|
|
11042
|
-
return /* @__PURE__ */ (0,
|
|
11285
|
+
return /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)("g", { "data-period": point.key, children: [
|
|
11043
11286
|
series.map((s, seriesIndex) => {
|
|
11044
11287
|
const value = point.values[s.id] ?? 0;
|
|
11045
11288
|
if (value <= 0) return null;
|
|
@@ -11049,7 +11292,7 @@ function TrendChart({
|
|
|
11049
11292
|
base += value;
|
|
11050
11293
|
const isTop = series.slice(seriesIndex + 1).every((next) => (point.values[next.id] ?? 0) <= 0);
|
|
11051
11294
|
const hatched = textures[seriesIndex] === "hatch";
|
|
11052
|
-
return /* @__PURE__ */ (0,
|
|
11295
|
+
return /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
|
|
11053
11296
|
"path",
|
|
11054
11297
|
{
|
|
11055
11298
|
"data-series": s.id,
|
|
@@ -11067,7 +11310,7 @@ function TrendChart({
|
|
|
11067
11310
|
s.id
|
|
11068
11311
|
);
|
|
11069
11312
|
}),
|
|
11070
|
-
/* @__PURE__ */ (0,
|
|
11313
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
|
|
11071
11314
|
"rect",
|
|
11072
11315
|
{
|
|
11073
11316
|
x: plotLeft + pointIndex * band,
|
|
@@ -11080,7 +11323,7 @@ function TrendChart({
|
|
|
11080
11323
|
)
|
|
11081
11324
|
] }, point.key);
|
|
11082
11325
|
}) }),
|
|
11083
|
-
/* @__PURE__ */ (0,
|
|
11326
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)("g", { "data-slot": "trend-chart-x-axis", children: labelIndices.map((index) => /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
|
|
11084
11327
|
"text",
|
|
11085
11328
|
{
|
|
11086
11329
|
x: plotLeft + index * band + band / 2,
|
|
@@ -11095,7 +11338,7 @@ function TrendChart({
|
|
|
11095
11338
|
]
|
|
11096
11339
|
}
|
|
11097
11340
|
),
|
|
11098
|
-
activePoint && /* @__PURE__ */ (0,
|
|
11341
|
+
activePoint && /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
|
|
11099
11342
|
ChartTooltip,
|
|
11100
11343
|
{
|
|
11101
11344
|
title: activeTitle,
|
|
@@ -11109,16 +11352,16 @@ function TrendChart({
|
|
|
11109
11352
|
]
|
|
11110
11353
|
}
|
|
11111
11354
|
),
|
|
11112
|
-
view === "chart" && /* @__PURE__ */ (0,
|
|
11355
|
+
view === "chart" && /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(ChartLegendRow, { children: /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
|
|
11113
11356
|
ChartLegend,
|
|
11114
11357
|
{
|
|
11115
11358
|
items: styledSeries.map((s, index) => ({
|
|
11116
11359
|
id: s.id,
|
|
11117
11360
|
label: s.label,
|
|
11118
11361
|
color: toneFill[s.tone],
|
|
11119
|
-
swatch: /* @__PURE__ */ (0,
|
|
11120
|
-
/* @__PURE__ */ (0,
|
|
11121
|
-
/* @__PURE__ */ (0,
|
|
11362
|
+
swatch: /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)("svg", { width: "12", height: "12", "aria-hidden": "true", className: "shrink-0", children: [
|
|
11363
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)(Texture, { id: `${idBase}-legend-${index}`, tone: s.tone, texture: s.texture }),
|
|
11364
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
|
|
11122
11365
|
"rect",
|
|
11123
11366
|
{
|
|
11124
11367
|
width: "12",
|
|
@@ -11133,7 +11376,7 @@ function TrendChart({
|
|
|
11133
11376
|
...visibility.legend
|
|
11134
11377
|
}
|
|
11135
11378
|
) }),
|
|
11136
|
-
/* @__PURE__ */ (0,
|
|
11379
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsxs)("p", { "data-slot": "trend-chart-scale", className: "sr-only", children: [
|
|
11137
11380
|
scaleLabel,
|
|
11138
11381
|
" \xB7 linear, from 0"
|
|
11139
11382
|
] })
|
|
@@ -11142,9 +11385,16 @@ function TrendChart({
|
|
|
11142
11385
|
);
|
|
11143
11386
|
}
|
|
11144
11387
|
function SolidFill({ id, tone }) {
|
|
11145
|
-
|
|
11146
|
-
|
|
11147
|
-
/* @__PURE__ */ (0,
|
|
11388
|
+
const danger = tone === "danger";
|
|
11389
|
+
return /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)("linearGradient", { id, x1: "0", y1: "0", x2: "0", y2: "1", children: [
|
|
11390
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
|
|
11391
|
+
"stop",
|
|
11392
|
+
{
|
|
11393
|
+
offset: "0%",
|
|
11394
|
+
style: { stopColor: danger ? `color-mix(in srgb, ${toneFill[tone]}, white 12%)` : `color-mix(in oklab, ${toneFill[tone]}, white 35%)` }
|
|
11395
|
+
}
|
|
11396
|
+
),
|
|
11397
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)("stop", { offset: "100%", style: { stopColor: danger ? `color-mix(in srgb, ${toneFill[tone]}, black 22%)` : toneFill[tone] } })
|
|
11148
11398
|
] });
|
|
11149
11399
|
}
|
|
11150
11400
|
function Texture({
|
|
@@ -11153,15 +11403,15 @@ function Texture({
|
|
|
11153
11403
|
texture
|
|
11154
11404
|
}) {
|
|
11155
11405
|
if (texture !== "hatch") return null;
|
|
11156
|
-
return /* @__PURE__ */ (0,
|
|
11157
|
-
/* @__PURE__ */ (0,
|
|
11158
|
-
/* @__PURE__ */ (0,
|
|
11406
|
+
return /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)("pattern", { id, width: "4", height: "4", patternUnits: "userSpaceOnUse", patternTransform: "rotate(45)", children: [
|
|
11407
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)("rect", { width: "4", height: "4", fill: toneFill[tone], opacity: 0.25 }),
|
|
11408
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)("rect", { width: "2", height: "4", fill: toneFill[tone] })
|
|
11159
11409
|
] });
|
|
11160
11410
|
}
|
|
11161
11411
|
|
|
11162
11412
|
// src/web/components/charts/line-chart.tsx
|
|
11163
11413
|
var import_react34 = require("react");
|
|
11164
|
-
var
|
|
11414
|
+
var import_jsx_runtime119 = require("react/jsx-runtime");
|
|
11165
11415
|
var MARGIN2 = { top: 12, right: 16, bottom: 26, left: 8 };
|
|
11166
11416
|
function LineChart({
|
|
11167
11417
|
data,
|
|
@@ -11183,7 +11433,7 @@ function LineChart({
|
|
|
11183
11433
|
const series = allSeries.filter((s) => visibility.isVisible(s.id));
|
|
11184
11434
|
const slotOf = (id) => allSeries.findIndex((s) => s.id === id);
|
|
11185
11435
|
const count3 = data.length;
|
|
11186
|
-
if (count3 === 0 || series.length === 0) return /* @__PURE__ */ (0,
|
|
11436
|
+
if (count3 === 0 || series.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(import_jsx_runtime119.Fragment, { children: empty ?? null });
|
|
11187
11437
|
const max = Math.max(0, ...data.flatMap((d) => series.map((s) => d.values[s.id] ?? 0)));
|
|
11188
11438
|
const ticks = chartValueTicks(max, { integer });
|
|
11189
11439
|
const tickLabels = ticks.map(formatValue);
|
|
@@ -11220,14 +11470,14 @@ function LineChart({
|
|
|
11220
11470
|
});
|
|
11221
11471
|
};
|
|
11222
11472
|
const activeDatum = active === null ? null : data[active];
|
|
11223
|
-
return /* @__PURE__ */ (0,
|
|
11473
|
+
return /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
|
|
11224
11474
|
ChartFrame,
|
|
11225
11475
|
{
|
|
11226
11476
|
...head,
|
|
11227
11477
|
label,
|
|
11228
11478
|
className,
|
|
11229
11479
|
scale: `${scaleLabel} \xB7 linear, from 0`,
|
|
11230
|
-
legend: allSeries.length > 1 ? /* @__PURE__ */ (0,
|
|
11480
|
+
legend: allSeries.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
|
|
11231
11481
|
ChartLegend,
|
|
11232
11482
|
{
|
|
11233
11483
|
keyShape: "line",
|
|
@@ -11240,7 +11490,7 @@ function LineChart({
|
|
|
11240
11490
|
rows: data.map((d) => [d.detail ?? d.label, ...series.map((s) => formatValue(d.values[s.id] ?? 0))])
|
|
11241
11491
|
},
|
|
11242
11492
|
announcement: activeDatum ? tooltipText(activeDatum.detail ?? activeDatum.label, rowsAt(active)) : void 0,
|
|
11243
|
-
children: /* @__PURE__ */ (0,
|
|
11493
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)(
|
|
11244
11494
|
"div",
|
|
11245
11495
|
{
|
|
11246
11496
|
ref: containerRef,
|
|
@@ -11252,7 +11502,7 @@ function LineChart({
|
|
|
11252
11502
|
onBlur: () => setActive(null),
|
|
11253
11503
|
className: plotClass,
|
|
11254
11504
|
children: [
|
|
11255
|
-
/* @__PURE__ */ (0,
|
|
11505
|
+
/* @__PURE__ */ (0, import_jsx_runtime119.jsxs)(
|
|
11256
11506
|
"svg",
|
|
11257
11507
|
{
|
|
11258
11508
|
width: "100%",
|
|
@@ -11263,13 +11513,13 @@ function LineChart({
|
|
|
11263
11513
|
onPointerMove,
|
|
11264
11514
|
onPointerLeave: () => setActive(null),
|
|
11265
11515
|
children: [
|
|
11266
|
-
showArea && /* @__PURE__ */ (0,
|
|
11267
|
-
/* @__PURE__ */ (0,
|
|
11268
|
-
/* @__PURE__ */ (0,
|
|
11516
|
+
showArea && /* @__PURE__ */ (0, import_jsx_runtime119.jsx)("defs", { children: /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)("linearGradient", { id: `${idBase}-wash`, x1: "0", x2: "0", y1: "0", y2: "1", children: [
|
|
11517
|
+
/* @__PURE__ */ (0, import_jsx_runtime119.jsx)("stop", { offset: "0", stopColor: seriesColor(0), stopOpacity: "0.14" }),
|
|
11518
|
+
/* @__PURE__ */ (0, import_jsx_runtime119.jsx)("stop", { offset: "1", stopColor: seriesColor(0), stopOpacity: "0.04" })
|
|
11269
11519
|
] }) }),
|
|
11270
|
-
/* @__PURE__ */ (0,
|
|
11271
|
-
/* @__PURE__ */ (0,
|
|
11272
|
-
/* @__PURE__ */ (0,
|
|
11520
|
+
/* @__PURE__ */ (0, import_jsx_runtime119.jsx)("g", { "data-slot": "chart-y-axis", children: ticks.map((tick, index) => /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)("g", { children: [
|
|
11521
|
+
/* @__PURE__ */ (0, import_jsx_runtime119.jsx)("line", { x1: plotLeft, x2: plotRight, y1: y(tick), y2: y(tick), stroke: "var(--border)" }),
|
|
11522
|
+
/* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
|
|
11273
11523
|
"text",
|
|
11274
11524
|
{
|
|
11275
11525
|
x: plotLeft - 8,
|
|
@@ -11283,7 +11533,7 @@ function LineChart({
|
|
|
11283
11533
|
}
|
|
11284
11534
|
)
|
|
11285
11535
|
] }, tick)) }),
|
|
11286
|
-
showArea && /* @__PURE__ */ (0,
|
|
11536
|
+
showArea && /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
|
|
11287
11537
|
"path",
|
|
11288
11538
|
{
|
|
11289
11539
|
"data-slot": "chart-area",
|
|
@@ -11291,7 +11541,7 @@ function LineChart({
|
|
|
11291
11541
|
fill: `url(#${idBase}-wash)`
|
|
11292
11542
|
}
|
|
11293
11543
|
),
|
|
11294
|
-
/* @__PURE__ */ (0,
|
|
11544
|
+
/* @__PURE__ */ (0, import_jsx_runtime119.jsx)("g", { "data-slot": "chart-lines", children: series.map((s, slot) => /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
|
|
11295
11545
|
"path",
|
|
11296
11546
|
{
|
|
11297
11547
|
"data-series": s.id,
|
|
@@ -11304,7 +11554,7 @@ function LineChart({
|
|
|
11304
11554
|
},
|
|
11305
11555
|
s.id
|
|
11306
11556
|
)) }),
|
|
11307
|
-
/* @__PURE__ */ (0,
|
|
11557
|
+
/* @__PURE__ */ (0, import_jsx_runtime119.jsx)("g", { "data-slot": "chart-end-markers", children: series.map((s, slot) => /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
|
|
11308
11558
|
"circle",
|
|
11309
11559
|
{
|
|
11310
11560
|
cx: x(count3 - 1),
|
|
@@ -11316,9 +11566,9 @@ function LineChart({
|
|
|
11316
11566
|
},
|
|
11317
11567
|
s.id
|
|
11318
11568
|
)) }),
|
|
11319
|
-
active !== null && /* @__PURE__ */ (0,
|
|
11320
|
-
/* @__PURE__ */ (0,
|
|
11321
|
-
series.map((s, slot) => /* @__PURE__ */ (0,
|
|
11569
|
+
active !== null && /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)("g", { "data-slot": "chart-crosshair", children: [
|
|
11570
|
+
/* @__PURE__ */ (0, import_jsx_runtime119.jsx)("line", { x1: x(active), x2: x(active), y1: plotTop, y2: plotBottom, stroke: "var(--muted-foreground)", strokeWidth: 1 }),
|
|
11571
|
+
series.map((s, slot) => /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
|
|
11322
11572
|
"circle",
|
|
11323
11573
|
{
|
|
11324
11574
|
cx: x(active),
|
|
@@ -11331,7 +11581,7 @@ function LineChart({
|
|
|
11331
11581
|
s.id
|
|
11332
11582
|
))
|
|
11333
11583
|
] }),
|
|
11334
|
-
/* @__PURE__ */ (0,
|
|
11584
|
+
/* @__PURE__ */ (0, import_jsx_runtime119.jsx)("g", { "data-slot": "chart-x-axis", children: labelIndices.map((index) => /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
|
|
11335
11585
|
"text",
|
|
11336
11586
|
{
|
|
11337
11587
|
x: x(index),
|
|
@@ -11346,7 +11596,7 @@ function LineChart({
|
|
|
11346
11596
|
]
|
|
11347
11597
|
}
|
|
11348
11598
|
),
|
|
11349
|
-
activeDatum && /* @__PURE__ */ (0,
|
|
11599
|
+
activeDatum && /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
|
|
11350
11600
|
ChartTooltip,
|
|
11351
11601
|
{
|
|
11352
11602
|
title: activeDatum.detail ?? activeDatum.label,
|
|
@@ -11363,12 +11613,12 @@ function LineChart({
|
|
|
11363
11613
|
);
|
|
11364
11614
|
}
|
|
11365
11615
|
function AreaChart2(props) {
|
|
11366
|
-
return /* @__PURE__ */ (0,
|
|
11616
|
+
return /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(LineChart, { ...props, area: true, className: cn(props.className) });
|
|
11367
11617
|
}
|
|
11368
11618
|
|
|
11369
11619
|
// src/web/components/charts/bar-chart.tsx
|
|
11370
11620
|
var import_react35 = require("react");
|
|
11371
|
-
var
|
|
11621
|
+
var import_jsx_runtime120 = require("react/jsx-runtime");
|
|
11372
11622
|
var MAX_BAR = 24;
|
|
11373
11623
|
var GAP = BAR_GAP;
|
|
11374
11624
|
function BarChart2({
|
|
@@ -11391,7 +11641,7 @@ function BarChart2({
|
|
|
11391
11641
|
const series = allSeries.filter((s) => visibility.isVisible(s.id));
|
|
11392
11642
|
const slotOf = (id) => allSeries.findIndex((s) => s.id === id);
|
|
11393
11643
|
const count3 = data.length;
|
|
11394
|
-
if (count3 === 0 || series.length === 0) return /* @__PURE__ */ (0,
|
|
11644
|
+
if (count3 === 0 || series.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(import_jsx_runtime120.Fragment, { children: empty ?? null });
|
|
11395
11645
|
const stacked = layout === "stacked";
|
|
11396
11646
|
const horizontal = orientation === "horizontal";
|
|
11397
11647
|
const totals = data.map((d) => series.reduce((sum, s) => sum + Math.max(0, d.values[s.id] ?? 0), 0));
|
|
@@ -11444,11 +11694,11 @@ function BarChart2({
|
|
|
11444
11694
|
const across = stacked ? groupStart : groupStart + slot * (barThickness + GAP);
|
|
11445
11695
|
const seam = stacked && offset > 0 ? GAP : 0;
|
|
11446
11696
|
const path = horizontal ? barPath(plotLeft + offset + seam, across, Math.max(0.5, length - seam), barThickness, isLastInStack ? "right" : "none") : barPath(across, plotBottom - offset - length, barThickness, Math.max(0.5, length - seam), isLastInStack ? "top" : "none");
|
|
11447
|
-
marks.push(/* @__PURE__ */ (0,
|
|
11697
|
+
marks.push(/* @__PURE__ */ (0, import_jsx_runtime120.jsx)("path", { "data-series": s.id, d: path, fill: seriesColor(slotOf(s.id)) }, s.id));
|
|
11448
11698
|
});
|
|
11449
|
-
return /* @__PURE__ */ (0,
|
|
11699
|
+
return /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)("g", { "data-category": d.key, opacity: active !== null && active !== index ? 0.55 : 1, children: [
|
|
11450
11700
|
marks,
|
|
11451
|
-
/* @__PURE__ */ (0,
|
|
11701
|
+
/* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
|
|
11452
11702
|
"rect",
|
|
11453
11703
|
{
|
|
11454
11704
|
x: horizontal ? plotLeft : bandStart,
|
|
@@ -11464,14 +11714,14 @@ function BarChart2({
|
|
|
11464
11714
|
const labelIndices = horizontal ? data.map((_, index) => index) : chartLabelIndices(count3, plotWidth / 56);
|
|
11465
11715
|
const activeDatum = active === null ? null : data[active];
|
|
11466
11716
|
const tooltipAnchor = active === null ? { x: 0, y: 0 } : horizontal ? { x: plotLeft + scale(stacked ? totals[active] : Math.max(...series.map((s) => data[active].values[s.id] ?? 0))), y: plotTop + active * bandSize } : { x: plotLeft + (active + 0.5) * bandSize, y: plotTop };
|
|
11467
|
-
return /* @__PURE__ */ (0,
|
|
11717
|
+
return /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
|
|
11468
11718
|
ChartFrame,
|
|
11469
11719
|
{
|
|
11470
11720
|
...head,
|
|
11471
11721
|
label,
|
|
11472
11722
|
className,
|
|
11473
11723
|
scale: `${scaleLabel} \xB7 linear, from 0`,
|
|
11474
|
-
legend: allSeries.length > 1 ? /* @__PURE__ */ (0,
|
|
11724
|
+
legend: allSeries.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
|
|
11475
11725
|
ChartLegend,
|
|
11476
11726
|
{
|
|
11477
11727
|
items: allSeries.map((s, slot) => ({ id: s.id, label: s.label, color: seriesColor(slot) })),
|
|
@@ -11491,7 +11741,7 @@ function BarChart2({
|
|
|
11491
11741
|
])
|
|
11492
11742
|
},
|
|
11493
11743
|
announcement: activeDatum ? tooltipText(activeDatum.detail ?? activeDatum.label, rowsAt(active)) : void 0,
|
|
11494
|
-
children: /* @__PURE__ */ (0,
|
|
11744
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)(
|
|
11495
11745
|
"div",
|
|
11496
11746
|
{
|
|
11497
11747
|
ref: containerRef,
|
|
@@ -11504,12 +11754,12 @@ function BarChart2({
|
|
|
11504
11754
|
onPointerLeave: () => setActive(null),
|
|
11505
11755
|
className: plotClass,
|
|
11506
11756
|
children: [
|
|
11507
|
-
/* @__PURE__ */ (0,
|
|
11508
|
-
/* @__PURE__ */ (0,
|
|
11757
|
+
/* @__PURE__ */ (0, import_jsx_runtime120.jsxs)("svg", { width: "100%", height: svgHeight, viewBox: `0 0 ${width} ${svgHeight}`, className: "block overflow-visible", "aria-hidden": "true", children: [
|
|
11758
|
+
/* @__PURE__ */ (0, import_jsx_runtime120.jsx)("g", { "data-slot": "chart-value-axis", children: ticks.map((tick, index) => {
|
|
11509
11759
|
const at = horizontal ? plotLeft + scale(tick) : plotBottom - scale(tick);
|
|
11510
|
-
return /* @__PURE__ */ (0,
|
|
11511
|
-
horizontal ? /* @__PURE__ */ (0,
|
|
11512
|
-
/* @__PURE__ */ (0,
|
|
11760
|
+
return /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)("g", { children: [
|
|
11761
|
+
horizontal ? /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("line", { x1: at, x2: at, y1: plotTop, y2: plotBottom, stroke: "var(--border)" }) : /* @__PURE__ */ (0, import_jsx_runtime120.jsx)("line", { x1: plotLeft, x2: plotRight, y1: at, y2: at, stroke: "var(--border)" }),
|
|
11762
|
+
/* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
|
|
11513
11763
|
"text",
|
|
11514
11764
|
{
|
|
11515
11765
|
x: horizontal ? at : plotLeft - 8,
|
|
@@ -11524,8 +11774,8 @@ function BarChart2({
|
|
|
11524
11774
|
)
|
|
11525
11775
|
] }, tick);
|
|
11526
11776
|
}) }),
|
|
11527
|
-
/* @__PURE__ */ (0,
|
|
11528
|
-
/* @__PURE__ */ (0,
|
|
11777
|
+
/* @__PURE__ */ (0, import_jsx_runtime120.jsx)("g", { "data-slot": "chart-bars", children: bars }),
|
|
11778
|
+
/* @__PURE__ */ (0, import_jsx_runtime120.jsx)("g", { "data-slot": "chart-category-axis", children: labelIndices.map((index) => /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
|
|
11529
11779
|
"text",
|
|
11530
11780
|
{
|
|
11531
11781
|
x: horizontal ? plotLeft - 8 : plotLeft + (index + 0.5) * bandSize,
|
|
@@ -11539,7 +11789,7 @@ function BarChart2({
|
|
|
11539
11789
|
data[index].key
|
|
11540
11790
|
)) })
|
|
11541
11791
|
] }),
|
|
11542
|
-
activeDatum && /* @__PURE__ */ (0,
|
|
11792
|
+
activeDatum && /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
|
|
11543
11793
|
ChartTooltip,
|
|
11544
11794
|
{
|
|
11545
11795
|
title: activeDatum.detail ?? activeDatum.label,
|
|
@@ -11558,7 +11808,7 @@ function BarChart2({
|
|
|
11558
11808
|
|
|
11559
11809
|
// src/web/components/charts/mixed-chart.tsx
|
|
11560
11810
|
var import_react36 = require("react");
|
|
11561
|
-
var
|
|
11811
|
+
var import_jsx_runtime121 = require("react/jsx-runtime");
|
|
11562
11812
|
var MARK_VIEWS = {
|
|
11563
11813
|
bar: { value: "bar", label: "Bars", icon: "bar_chart" },
|
|
11564
11814
|
stacked: { value: "stacked", label: "Stacked bars", icon: "stacked_bar_chart" },
|
|
@@ -11571,12 +11821,12 @@ var MAX_BAR_GROUP = 56;
|
|
|
11571
11821
|
var ALL_MARKS = ["bar", "stacked", "line", "area", "dots"];
|
|
11572
11822
|
function MarkSwatch({ mark, color }) {
|
|
11573
11823
|
if (mark === "area") {
|
|
11574
|
-
return /* @__PURE__ */ (0,
|
|
11575
|
-
/* @__PURE__ */ (0,
|
|
11576
|
-
/* @__PURE__ */ (0,
|
|
11824
|
+
return /* @__PURE__ */ (0, import_jsx_runtime121.jsxs)("svg", { width: "12", height: "12", "aria-hidden": "true", className: "shrink-0", children: [
|
|
11825
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)("rect", { width: "12", height: "12", rx: "3", fill: color, fillOpacity: "0.25" }),
|
|
11826
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)("line", { x1: "1", x2: "11", y1: "3", y2: "3", stroke: color, strokeWidth: "2", strokeLinecap: "round" })
|
|
11577
11827
|
] });
|
|
11578
11828
|
}
|
|
11579
|
-
return /* @__PURE__ */ (0,
|
|
11829
|
+
return /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(LegendSwatch, { color, shape: mark === "line" ? "line" : mark === "dots" ? "dot" : "rect" });
|
|
11580
11830
|
}
|
|
11581
11831
|
function MixedChart({
|
|
11582
11832
|
data,
|
|
@@ -11600,7 +11850,7 @@ function MixedChart({
|
|
|
11600
11850
|
const series = allSeries.filter((s) => visibility.isVisible(s.id));
|
|
11601
11851
|
const colorOf = (id) => seriesColor(allSeries.findIndex((s) => s.id === id));
|
|
11602
11852
|
const count3 = data.length;
|
|
11603
|
-
if (count3 === 0 || allSeries.length === 0) return /* @__PURE__ */ (0,
|
|
11853
|
+
if (count3 === 0 || allSeries.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(import_jsx_runtime121.Fragment, { children: empty ?? null });
|
|
11604
11854
|
const totals = data.map((d) => series.reduce((sum, s) => sum + Math.max(0, d.values[s.id] ?? 0), 0));
|
|
11605
11855
|
const max = mark === "stacked" ? Math.max(0, ...totals) : Math.max(0, ...data.flatMap((d) => series.map((s) => d.values[s.id] ?? 0)));
|
|
11606
11856
|
const ticks = chartValueTicks(max, { integer });
|
|
@@ -11639,7 +11889,7 @@ function MixedChart({
|
|
|
11639
11889
|
});
|
|
11640
11890
|
};
|
|
11641
11891
|
const activeDatum = active === null ? null : data[active];
|
|
11642
|
-
const strokeFor = (s) => /* @__PURE__ */ (0,
|
|
11892
|
+
const strokeFor = (s) => /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
|
|
11643
11893
|
"path",
|
|
11644
11894
|
{
|
|
11645
11895
|
"data-series": s.id,
|
|
@@ -11663,7 +11913,7 @@ function MixedChart({
|
|
|
11663
11913
|
const bottom = mark === "stacked" ? y(stackTop) : plotBottom;
|
|
11664
11914
|
if (mark === "stacked") stackTop += value;
|
|
11665
11915
|
const barTop = mark === "stacked" ? y(stackTop) : y(value);
|
|
11666
|
-
return /* @__PURE__ */ (0,
|
|
11916
|
+
return /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
|
|
11667
11917
|
"rect",
|
|
11668
11918
|
{
|
|
11669
11919
|
"data-series": s.id,
|
|
@@ -11681,11 +11931,11 @@ function MixedChart({
|
|
|
11681
11931
|
});
|
|
11682
11932
|
}
|
|
11683
11933
|
if (mark === "dots") {
|
|
11684
|
-
return series.map((s) => /* @__PURE__ */ (0,
|
|
11934
|
+
return series.map((s) => /* @__PURE__ */ (0, import_jsx_runtime121.jsx)("g", { "data-series": s.id, "data-mark": "dots", children: data.map((d, index) => /* @__PURE__ */ (0, import_jsx_runtime121.jsx)("circle", { cx: x(index), cy: y(d.values[s.id] ?? 0), r: 4, fill: colorOf(s.id), stroke: "var(--card)", strokeWidth: 1.5 }, d.key)) }, s.id));
|
|
11685
11935
|
}
|
|
11686
11936
|
if (mark === "area") {
|
|
11687
|
-
return /* @__PURE__ */ (0,
|
|
11688
|
-
series.map((s) => /* @__PURE__ */ (0,
|
|
11937
|
+
return /* @__PURE__ */ (0, import_jsx_runtime121.jsxs)(import_jsx_runtime121.Fragment, { children: [
|
|
11938
|
+
series.map((s) => /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
|
|
11689
11939
|
"path",
|
|
11690
11940
|
{
|
|
11691
11941
|
d: `${pathFor(s.id)}L${x(count3 - 1)},${plotBottom}L${x(0)},${plotBottom}Z`,
|
|
@@ -11698,7 +11948,7 @@ function MixedChart({
|
|
|
11698
11948
|
}
|
|
11699
11949
|
return series.map(strokeFor);
|
|
11700
11950
|
};
|
|
11701
|
-
return /* @__PURE__ */ (0,
|
|
11951
|
+
return /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
|
|
11702
11952
|
ChartFrame,
|
|
11703
11953
|
{
|
|
11704
11954
|
...head,
|
|
@@ -11708,14 +11958,14 @@ function MixedChart({
|
|
|
11708
11958
|
label,
|
|
11709
11959
|
className,
|
|
11710
11960
|
scale: `${scaleLabel} \xB7 linear, from 0`,
|
|
11711
|
-
legend: /* @__PURE__ */ (0,
|
|
11961
|
+
legend: /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
|
|
11712
11962
|
ChartLegend,
|
|
11713
11963
|
{
|
|
11714
11964
|
items: allSeries.map((s) => ({
|
|
11715
11965
|
id: s.id,
|
|
11716
11966
|
label: s.label,
|
|
11717
11967
|
color: colorOf(s.id),
|
|
11718
|
-
swatch: /* @__PURE__ */ (0,
|
|
11968
|
+
swatch: /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(MarkSwatch, { mark, color: colorOf(s.id) })
|
|
11719
11969
|
})),
|
|
11720
11970
|
...visibility.legend
|
|
11721
11971
|
}
|
|
@@ -11725,7 +11975,7 @@ function MixedChart({
|
|
|
11725
11975
|
rows: data.map((d) => [d.detail ?? d.label, ...allSeries.map((s) => formatValue(d.values[s.id] ?? 0))])
|
|
11726
11976
|
},
|
|
11727
11977
|
announcement: activeDatum ? tooltipText(activeDatum.detail ?? activeDatum.label, rowsAt(active)) : void 0,
|
|
11728
|
-
children: /* @__PURE__ */ (0,
|
|
11978
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime121.jsxs)(
|
|
11729
11979
|
"div",
|
|
11730
11980
|
{
|
|
11731
11981
|
ref: containerRef,
|
|
@@ -11737,7 +11987,7 @@ function MixedChart({
|
|
|
11737
11987
|
onBlur: () => setActive(null),
|
|
11738
11988
|
className: plotClass,
|
|
11739
11989
|
children: [
|
|
11740
|
-
/* @__PURE__ */ (0,
|
|
11990
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsxs)(
|
|
11741
11991
|
"svg",
|
|
11742
11992
|
{
|
|
11743
11993
|
width: "100%",
|
|
@@ -11748,13 +11998,13 @@ function MixedChart({
|
|
|
11748
11998
|
onPointerMove,
|
|
11749
11999
|
onPointerLeave: () => setActive(null),
|
|
11750
12000
|
children: [
|
|
11751
|
-
/* @__PURE__ */ (0,
|
|
11752
|
-
/* @__PURE__ */ (0,
|
|
11753
|
-
/* @__PURE__ */ (0,
|
|
12001
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)("defs", { children: mark === "area" && series.map((s) => /* @__PURE__ */ (0, import_jsx_runtime121.jsxs)("linearGradient", { id: `${idBase}-wash-${s.id}`, x1: "0", x2: "0", y1: "0", y2: "1", children: [
|
|
12002
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)("stop", { offset: "0", stopColor: colorOf(s.id), stopOpacity: "0.22" }),
|
|
12003
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)("stop", { offset: "1", stopColor: colorOf(s.id), stopOpacity: "0.03" })
|
|
11754
12004
|
] }, s.id)) }),
|
|
11755
|
-
/* @__PURE__ */ (0,
|
|
11756
|
-
/* @__PURE__ */ (0,
|
|
11757
|
-
/* @__PURE__ */ (0,
|
|
12005
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)("g", { "data-slot": "chart-y-axis", children: ticks.map((tick, index) => /* @__PURE__ */ (0, import_jsx_runtime121.jsxs)("g", { children: [
|
|
12006
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)("line", { x1: plotLeft, x2: plotRight, y1: y(tick), y2: y(tick), stroke: "var(--border)" }),
|
|
12007
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
|
|
11758
12008
|
"text",
|
|
11759
12009
|
{
|
|
11760
12010
|
x: plotLeft - 8,
|
|
@@ -11768,7 +12018,7 @@ function MixedChart({
|
|
|
11768
12018
|
}
|
|
11769
12019
|
)
|
|
11770
12020
|
] }, tick)) }),
|
|
11771
|
-
active !== null && /* @__PURE__ */ (0,
|
|
12021
|
+
active !== null && /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
|
|
11772
12022
|
"rect",
|
|
11773
12023
|
{
|
|
11774
12024
|
"data-slot": "chart-active-band",
|
|
@@ -11780,8 +12030,8 @@ function MixedChart({
|
|
|
11780
12030
|
fillOpacity: 0.08
|
|
11781
12031
|
}
|
|
11782
12032
|
),
|
|
11783
|
-
/* @__PURE__ */ (0,
|
|
11784
|
-
active !== null && /* @__PURE__ */ (0,
|
|
12033
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)("g", { "data-slot": "chart-marks", "data-view": mark, children: marksLayer() }),
|
|
12034
|
+
active !== null && /* @__PURE__ */ (0, import_jsx_runtime121.jsx)("g", { "data-slot": "chart-crosshair", children: (mark === "bar" || mark === "stacked" ? [] : series).map((s) => /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
|
|
11785
12035
|
"circle",
|
|
11786
12036
|
{
|
|
11787
12037
|
cx: x(active),
|
|
@@ -11793,7 +12043,7 @@ function MixedChart({
|
|
|
11793
12043
|
},
|
|
11794
12044
|
s.id
|
|
11795
12045
|
)) }),
|
|
11796
|
-
/* @__PURE__ */ (0,
|
|
12046
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)("g", { "data-slot": "chart-x-axis", children: labelIndices.map((index) => /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
|
|
11797
12047
|
"text",
|
|
11798
12048
|
{
|
|
11799
12049
|
x: x(index),
|
|
@@ -11808,7 +12058,7 @@ function MixedChart({
|
|
|
11808
12058
|
]
|
|
11809
12059
|
}
|
|
11810
12060
|
),
|
|
11811
|
-
activeDatum && /* @__PURE__ */ (0,
|
|
12061
|
+
activeDatum && /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
|
|
11812
12062
|
ChartTooltip,
|
|
11813
12063
|
{
|
|
11814
12064
|
title: activeDatum.detail ?? activeDatum.label,
|
|
@@ -11826,7 +12076,7 @@ function MixedChart({
|
|
|
11826
12076
|
}
|
|
11827
12077
|
|
|
11828
12078
|
// src/web/components/charts/bar-list.tsx
|
|
11829
|
-
var
|
|
12079
|
+
var import_jsx_runtime122 = require("react/jsx-runtime");
|
|
11830
12080
|
function BarList({
|
|
11831
12081
|
items,
|
|
11832
12082
|
label,
|
|
@@ -11839,7 +12089,7 @@ function BarList({
|
|
|
11839
12089
|
className,
|
|
11840
12090
|
...head
|
|
11841
12091
|
}) {
|
|
11842
|
-
if (items.length === 0) return /* @__PURE__ */ (0,
|
|
12092
|
+
if (items.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime122.jsx)(import_jsx_runtime122.Fragment, { children: empty ?? null });
|
|
11843
12093
|
const rows = sort === "desc" ? [...items].sort((a, b) => b.value - a.value) : items;
|
|
11844
12094
|
const top = Math.max(max ?? 0, ...rows.map((item) => item.value), 0) || 1;
|
|
11845
12095
|
const sum = rows.reduce((acc, item) => acc + Math.max(0, item.value), 0);
|
|
@@ -11847,7 +12097,7 @@ function BarList({
|
|
|
11847
12097
|
const framed = head.title !== void 0 || (head.timeframes?.length ?? 0) > 0;
|
|
11848
12098
|
const label_ = labelWidth ? `minmax(0,${labelWidth})` : "auto";
|
|
11849
12099
|
const wideColumns = showPercent ? `${label_} 1fr auto auto` : `${label_} 1fr auto`;
|
|
11850
|
-
const list = /* @__PURE__ */ (0,
|
|
12100
|
+
const list = /* @__PURE__ */ (0, import_jsx_runtime122.jsx)(
|
|
11851
12101
|
"ol",
|
|
11852
12102
|
{
|
|
11853
12103
|
"data-slot": "bar-list",
|
|
@@ -11862,7 +12112,7 @@ function BarList({
|
|
|
11862
12112
|
style: { "--bar-list-columns": wideColumns },
|
|
11863
12113
|
children: rows.map((item) => {
|
|
11864
12114
|
const share = Math.max(0, item.value) / top;
|
|
11865
|
-
return /* @__PURE__ */ (0,
|
|
12115
|
+
return /* @__PURE__ */ (0, import_jsx_runtime122.jsxs)(
|
|
11866
12116
|
"li",
|
|
11867
12117
|
{
|
|
11868
12118
|
"data-slot": "bar-list-row",
|
|
@@ -11873,13 +12123,13 @@ function BarList({
|
|
|
11873
12123
|
"sm:col-span-full sm:grid-cols-subgrid sm:items-center sm:gap-y-0"
|
|
11874
12124
|
),
|
|
11875
12125
|
children: [
|
|
11876
|
-
/* @__PURE__ */ (0,
|
|
11877
|
-
/* @__PURE__ */ (0,
|
|
12126
|
+
/* @__PURE__ */ (0, import_jsx_runtime122.jsx)("span", { className: cn("min-w-0 truncate text-muted-foreground", !labelWidth && "sm:max-w-[10rem]"), children: item.label }),
|
|
12127
|
+
/* @__PURE__ */ (0, import_jsx_runtime122.jsx)(
|
|
11878
12128
|
"span",
|
|
11879
12129
|
{
|
|
11880
12130
|
className: "order-last col-span-full h-2 overflow-hidden rounded-full bg-primary/15 shadow-inner sm:order-none sm:col-span-1",
|
|
11881
12131
|
"aria-hidden": "true",
|
|
11882
|
-
children: /* @__PURE__ */ (0,
|
|
12132
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime122.jsx)(
|
|
11883
12133
|
"span",
|
|
11884
12134
|
{
|
|
11885
12135
|
className: "block h-full rounded-full bg-primary bg-gradient-primary",
|
|
@@ -11892,8 +12142,8 @@ function BarList({
|
|
|
11892
12142
|
)
|
|
11893
12143
|
}
|
|
11894
12144
|
),
|
|
11895
|
-
/* @__PURE__ */ (0,
|
|
11896
|
-
showPercent && /* @__PURE__ */ (0,
|
|
12145
|
+
/* @__PURE__ */ (0, import_jsx_runtime122.jsx)("span", { className: "whitespace-nowrap text-right font-semibold tabular-nums text-foreground", children: item.valueText ?? formatValue(item.value) }),
|
|
12146
|
+
showPercent && /* @__PURE__ */ (0, import_jsx_runtime122.jsx)("span", { className: "text-right tabular-nums text-muted-foreground", children: percentOf(item) })
|
|
11897
12147
|
]
|
|
11898
12148
|
},
|
|
11899
12149
|
item.id
|
|
@@ -11902,7 +12152,7 @@ function BarList({
|
|
|
11902
12152
|
}
|
|
11903
12153
|
);
|
|
11904
12154
|
if (!framed) return list;
|
|
11905
|
-
return /* @__PURE__ */ (0,
|
|
12155
|
+
return /* @__PURE__ */ (0, import_jsx_runtime122.jsx)(
|
|
11906
12156
|
ChartFrame,
|
|
11907
12157
|
{
|
|
11908
12158
|
...head,
|
|
@@ -11925,7 +12175,7 @@ function formatPercent(fraction) {
|
|
|
11925
12175
|
|
|
11926
12176
|
// src/web/components/charts/donut-chart.tsx
|
|
11927
12177
|
var import_react37 = require("react");
|
|
11928
|
-
var
|
|
12178
|
+
var import_jsx_runtime123 = require("react/jsx-runtime");
|
|
11929
12179
|
var OTHER_ID = "__other";
|
|
11930
12180
|
function foldSegments(segments) {
|
|
11931
12181
|
const positive = segments.filter((s) => s.value > 0);
|
|
@@ -11963,7 +12213,7 @@ function DonutChart({
|
|
|
11963
12213
|
const visibility = useSeriesVisibility(allParts.map((part) => part.id));
|
|
11964
12214
|
const parts = allParts.filter((part) => visibility.isVisible(part.id));
|
|
11965
12215
|
const total = parts.reduce((sum, s) => sum + s.value, 0);
|
|
11966
|
-
if (parts.length === 0 || total <= 0) return /* @__PURE__ */ (0,
|
|
12216
|
+
if (parts.length === 0 || total <= 0) return /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(import_jsx_runtime123.Fragment, { children: empty ?? null });
|
|
11967
12217
|
const cx = size / 2;
|
|
11968
12218
|
const cy = size / 2;
|
|
11969
12219
|
const outer = size / 2 - 2;
|
|
@@ -11989,13 +12239,13 @@ function DonutChart({
|
|
|
11989
12239
|
return next === void 0 ? current : next;
|
|
11990
12240
|
});
|
|
11991
12241
|
};
|
|
11992
|
-
return /* @__PURE__ */ (0,
|
|
12242
|
+
return /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(
|
|
11993
12243
|
ChartFrame,
|
|
11994
12244
|
{
|
|
11995
12245
|
...head,
|
|
11996
12246
|
label,
|
|
11997
12247
|
className,
|
|
11998
|
-
legend: /* @__PURE__ */ (0,
|
|
12248
|
+
legend: /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(
|
|
11999
12249
|
ChartLegend,
|
|
12000
12250
|
{
|
|
12001
12251
|
items: allParts.map((part) => ({
|
|
@@ -12014,7 +12264,7 @@ function DonutChart({
|
|
|
12014
12264
|
]
|
|
12015
12265
|
},
|
|
12016
12266
|
announcement: activePart ? `${activePart.label}: ${formatValue(activePart.value)}, ${share(activePart.value)}` : void 0,
|
|
12017
|
-
children: /* @__PURE__ */ (0,
|
|
12267
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(
|
|
12018
12268
|
"div",
|
|
12019
12269
|
{
|
|
12020
12270
|
role: "group",
|
|
@@ -12025,8 +12275,8 @@ function DonutChart({
|
|
|
12025
12275
|
onBlur: () => setActive(null),
|
|
12026
12276
|
onPointerLeave: () => setActive(null),
|
|
12027
12277
|
className: `${plotClass} flex justify-center py-4`,
|
|
12028
|
-
children: /* @__PURE__ */ (0,
|
|
12029
|
-
arcs.map(({ part, start, end }, index) => /* @__PURE__ */ (0,
|
|
12278
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime123.jsxs)("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, "aria-hidden": "true", className: "block max-w-full", children: [
|
|
12279
|
+
arcs.map(({ part, start, end }, index) => /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(
|
|
12030
12280
|
"path",
|
|
12031
12281
|
{
|
|
12032
12282
|
"data-segment": part.id,
|
|
@@ -12037,7 +12287,7 @@ function DonutChart({
|
|
|
12037
12287
|
},
|
|
12038
12288
|
part.id
|
|
12039
12289
|
)),
|
|
12040
|
-
/* @__PURE__ */ (0,
|
|
12290
|
+
/* @__PURE__ */ (0, import_jsx_runtime123.jsx)(
|
|
12041
12291
|
"text",
|
|
12042
12292
|
{
|
|
12043
12293
|
x: cx,
|
|
@@ -12049,7 +12299,7 @@ function DonutChart({
|
|
|
12049
12299
|
children: formatValue(activePart ? activePart.value : total)
|
|
12050
12300
|
}
|
|
12051
12301
|
),
|
|
12052
|
-
/* @__PURE__ */ (0,
|
|
12302
|
+
/* @__PURE__ */ (0, import_jsx_runtime123.jsx)("text", { x: cx, y: cy + 16, textAnchor: "middle", fontSize: 11, fill: "var(--muted-foreground)", children: activePart ? `${activePart.label} \xB7 ${share(activePart.value)}` : totalLabel })
|
|
12053
12303
|
] })
|
|
12054
12304
|
}
|
|
12055
12305
|
)
|
|
@@ -12059,7 +12309,7 @@ function DonutChart({
|
|
|
12059
12309
|
|
|
12060
12310
|
// src/web/components/charts/scatter-chart.tsx
|
|
12061
12311
|
var import_react38 = require("react");
|
|
12062
|
-
var
|
|
12312
|
+
var import_jsx_runtime124 = require("react/jsx-runtime");
|
|
12063
12313
|
var MARGIN4 = { top: 12, right: 16, bottom: 40, left: 8 };
|
|
12064
12314
|
var HIT_RADIUS = 12;
|
|
12065
12315
|
function ScatterChart({
|
|
@@ -12085,7 +12335,7 @@ function ScatterChart({
|
|
|
12085
12335
|
);
|
|
12086
12336
|
}
|
|
12087
12337
|
const points = series.flatMap((s) => s.points.map((p) => ({ ...p, slot: slotOf(s.id), seriesLabel: s.label }))).sort((a, b) => a.x - b.x);
|
|
12088
|
-
if (points.length === 0) return /* @__PURE__ */ (0,
|
|
12338
|
+
if (points.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(import_jsx_runtime124.Fragment, { children: empty ?? null });
|
|
12089
12339
|
const xMax = Math.max(0, ...points.map((p) => p.x));
|
|
12090
12340
|
const yMax = Math.max(0, ...points.map((p) => p.y));
|
|
12091
12341
|
const xTicks = chartValueTicks(xMax);
|
|
@@ -12124,14 +12374,14 @@ function ScatterChart({
|
|
|
12124
12374
|
};
|
|
12125
12375
|
const activePoint = active === null ? null : points[active];
|
|
12126
12376
|
const describe = (p) => `${p.label ?? p.seriesLabel}: ${xLabel} ${formatX(p.x)}, ${yLabel} ${formatY(p.y)}`;
|
|
12127
|
-
return /* @__PURE__ */ (0,
|
|
12377
|
+
return /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
|
|
12128
12378
|
ChartFrame,
|
|
12129
12379
|
{
|
|
12130
12380
|
...head,
|
|
12131
12381
|
label,
|
|
12132
12382
|
className,
|
|
12133
12383
|
scale: `${yLabel} against ${xLabel} \xB7 both linear, from 0`,
|
|
12134
|
-
legend: allSeries.length > 1 ? /* @__PURE__ */ (0,
|
|
12384
|
+
legend: allSeries.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
|
|
12135
12385
|
ChartLegend,
|
|
12136
12386
|
{
|
|
12137
12387
|
keyShape: "dot",
|
|
@@ -12144,7 +12394,7 @@ function ScatterChart({
|
|
|
12144
12394
|
rows: points.map((p) => [p.label ?? p.id, p.seriesLabel, formatX(p.x), formatY(p.y)])
|
|
12145
12395
|
},
|
|
12146
12396
|
announcement: activePoint ? describe(activePoint) : void 0,
|
|
12147
|
-
children: /* @__PURE__ */ (0,
|
|
12397
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime124.jsxs)(
|
|
12148
12398
|
"div",
|
|
12149
12399
|
{
|
|
12150
12400
|
ref: containerRef,
|
|
@@ -12156,7 +12406,7 @@ function ScatterChart({
|
|
|
12156
12406
|
onBlur: () => setActive(null),
|
|
12157
12407
|
className: plotClass,
|
|
12158
12408
|
children: [
|
|
12159
|
-
/* @__PURE__ */ (0,
|
|
12409
|
+
/* @__PURE__ */ (0, import_jsx_runtime124.jsxs)(
|
|
12160
12410
|
"svg",
|
|
12161
12411
|
{
|
|
12162
12412
|
width: "100%",
|
|
@@ -12167,13 +12417,13 @@ function ScatterChart({
|
|
|
12167
12417
|
onPointerMove,
|
|
12168
12418
|
onPointerLeave: () => setActive(null),
|
|
12169
12419
|
children: [
|
|
12170
|
-
/* @__PURE__ */ (0,
|
|
12171
|
-
/* @__PURE__ */ (0,
|
|
12172
|
-
/* @__PURE__ */ (0,
|
|
12420
|
+
/* @__PURE__ */ (0, import_jsx_runtime124.jsx)("g", { "data-slot": "chart-y-axis", children: yTicks.map((tick, index) => /* @__PURE__ */ (0, import_jsx_runtime124.jsxs)("g", { children: [
|
|
12421
|
+
/* @__PURE__ */ (0, import_jsx_runtime124.jsx)("line", { x1: plotLeft, x2: plotRight, y1: sy(tick), y2: sy(tick), stroke: "var(--border)" }),
|
|
12422
|
+
/* @__PURE__ */ (0, import_jsx_runtime124.jsx)("text", { x: plotLeft - 8, y: sy(tick), dy: "0.32em", textAnchor: "end", fontSize: TICK_FONT, fill: "var(--muted-foreground)", style: { fontVariantNumeric: "tabular-nums" }, children: yTickLabels[index] })
|
|
12173
12423
|
] }, tick)) }),
|
|
12174
|
-
/* @__PURE__ */ (0,
|
|
12175
|
-
/* @__PURE__ */ (0,
|
|
12176
|
-
xTicks.map((tick, index) => /* @__PURE__ */ (0,
|
|
12424
|
+
/* @__PURE__ */ (0, import_jsx_runtime124.jsxs)("g", { "data-slot": "chart-x-axis", children: [
|
|
12425
|
+
/* @__PURE__ */ (0, import_jsx_runtime124.jsx)("line", { x1: plotLeft, x2: plotRight, y1: plotBottom, y2: plotBottom, stroke: "var(--border)" }),
|
|
12426
|
+
xTicks.map((tick, index) => /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
|
|
12177
12427
|
"text",
|
|
12178
12428
|
{
|
|
12179
12429
|
x: sx(tick),
|
|
@@ -12186,12 +12436,12 @@ function ScatterChart({
|
|
|
12186
12436
|
},
|
|
12187
12437
|
tick
|
|
12188
12438
|
)),
|
|
12189
|
-
/* @__PURE__ */ (0,
|
|
12439
|
+
/* @__PURE__ */ (0, import_jsx_runtime124.jsxs)("text", { x: plotRight, y: plotBottom + 34, textAnchor: "end", fontSize: TICK_FONT, fill: "var(--muted-foreground)", children: [
|
|
12190
12440
|
xLabel,
|
|
12191
12441
|
" \u2192"
|
|
12192
12442
|
] })
|
|
12193
12443
|
] }),
|
|
12194
|
-
/* @__PURE__ */ (0,
|
|
12444
|
+
/* @__PURE__ */ (0, import_jsx_runtime124.jsx)("g", { "data-slot": "chart-points", children: points.map((p, index) => /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
|
|
12195
12445
|
"circle",
|
|
12196
12446
|
{
|
|
12197
12447
|
"data-series": allSeries[p.slot].id,
|
|
@@ -12208,7 +12458,7 @@ function ScatterChart({
|
|
|
12208
12458
|
]
|
|
12209
12459
|
}
|
|
12210
12460
|
),
|
|
12211
|
-
activePoint && /* @__PURE__ */ (0,
|
|
12461
|
+
activePoint && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
|
|
12212
12462
|
ChartTooltip,
|
|
12213
12463
|
{
|
|
12214
12464
|
title: activePoint.label ?? activePoint.seriesLabel,
|
|
@@ -12230,7 +12480,7 @@ function ScatterChart({
|
|
|
12230
12480
|
|
|
12231
12481
|
// src/web/components/charts/sparkline.tsx
|
|
12232
12482
|
var import_react39 = require("react");
|
|
12233
|
-
var
|
|
12483
|
+
var import_jsx_runtime125 = require("react/jsx-runtime");
|
|
12234
12484
|
function Sparkline({ values, label, width = 96, height = 28, pulse = false, tone = "default", className }) {
|
|
12235
12485
|
const fill = height === "fill";
|
|
12236
12486
|
const boxRef = (0, import_react39.useRef)(null);
|
|
@@ -12250,13 +12500,13 @@ function Sparkline({ values, label, width = 96, height = 28, pulse = false, tone
|
|
|
12250
12500
|
const min = Math.min(...values);
|
|
12251
12501
|
const max = Math.max(...values);
|
|
12252
12502
|
const span = max - min || 1;
|
|
12253
|
-
const
|
|
12254
|
-
const x = (index) =>
|
|
12255
|
-
const y = (value) => h -
|
|
12503
|
+
const pad2 = 4;
|
|
12504
|
+
const x = (index) => pad2 + index / (values.length - 1) * (width - pad2 * 2);
|
|
12505
|
+
const y = (value) => h - pad2 - (value - min) / span * (h - pad2 * 2);
|
|
12256
12506
|
const d = values.map((value, index) => `${index === 0 ? "M" : "L"}${x(index).toFixed(1)},${y(value).toFixed(1)}`).join("");
|
|
12257
12507
|
const last = values.length - 1;
|
|
12258
12508
|
const dot = tone === "negative" ? "var(--color-danger)" : "var(--series-1)";
|
|
12259
|
-
const svg = /* @__PURE__ */ (0,
|
|
12509
|
+
const svg = /* @__PURE__ */ (0, import_jsx_runtime125.jsxs)(
|
|
12260
12510
|
"svg",
|
|
12261
12511
|
{
|
|
12262
12512
|
"data-slot": "sparkline",
|
|
@@ -12267,8 +12517,8 @@ function Sparkline({ values, label, width = 96, height = 28, pulse = false, tone
|
|
|
12267
12517
|
viewBox: `0 0 ${width} ${h}`,
|
|
12268
12518
|
className: cn("block shrink-0 overflow-visible", !fill && className, fill && "absolute inset-y-0 right-0"),
|
|
12269
12519
|
children: [
|
|
12270
|
-
/* @__PURE__ */ (0,
|
|
12271
|
-
pulse && /* @__PURE__ */ (0,
|
|
12520
|
+
/* @__PURE__ */ (0, import_jsx_runtime125.jsx)("path", { d, fill: "none", stroke: "var(--muted-foreground)", strokeWidth: 1.5, strokeLinejoin: "round", strokeLinecap: "round" }),
|
|
12521
|
+
pulse && /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(
|
|
12272
12522
|
"circle",
|
|
12273
12523
|
{
|
|
12274
12524
|
"data-slot": "sparkline-pulse",
|
|
@@ -12281,16 +12531,16 @@ function Sparkline({ values, label, width = 96, height = 28, pulse = false, tone
|
|
|
12281
12531
|
style: { transformBox: "fill-box", transformOrigin: "center" }
|
|
12282
12532
|
}
|
|
12283
12533
|
),
|
|
12284
|
-
/* @__PURE__ */ (0,
|
|
12534
|
+
/* @__PURE__ */ (0, import_jsx_runtime125.jsx)("circle", { cx: x(last), cy: y(values[last]), r: 4, fill: dot, stroke: "var(--card)", strokeWidth: 2 })
|
|
12285
12535
|
]
|
|
12286
12536
|
}
|
|
12287
12537
|
);
|
|
12288
12538
|
if (!fill) return svg;
|
|
12289
|
-
return /* @__PURE__ */ (0,
|
|
12539
|
+
return /* @__PURE__ */ (0, import_jsx_runtime125.jsx)("span", { ref: boxRef, className: cn("relative block h-full", className), style: { width }, children: svg });
|
|
12290
12540
|
}
|
|
12291
12541
|
|
|
12292
12542
|
// src/web/components/charts/meter.tsx
|
|
12293
|
-
var
|
|
12543
|
+
var import_jsx_runtime126 = require("react/jsx-runtime");
|
|
12294
12544
|
function Meter({
|
|
12295
12545
|
label,
|
|
12296
12546
|
value,
|
|
@@ -12305,19 +12555,19 @@ function Meter({
|
|
|
12305
12555
|
const fill = { normal: "bg-primary bg-gradient-primary", warning: "bg-warning bg-gradient-warning", danger: "bg-danger bg-gradient-danger" }[state];
|
|
12306
12556
|
const track = { normal: "bg-primary/15", warning: "bg-warning/15", danger: "bg-danger/15" }[state];
|
|
12307
12557
|
const percent = Math.round(ratio * 100);
|
|
12308
|
-
return /* @__PURE__ */ (0,
|
|
12309
|
-
/* @__PURE__ */ (0,
|
|
12310
|
-
/* @__PURE__ */ (0,
|
|
12311
|
-
/* @__PURE__ */ (0,
|
|
12558
|
+
return /* @__PURE__ */ (0, import_jsx_runtime126.jsxs)("div", { "data-slot": "meter", "data-state": state, className: cn("space-y-1.5", className), children: [
|
|
12559
|
+
/* @__PURE__ */ (0, import_jsx_runtime126.jsxs)("div", { className: "flex items-baseline justify-between gap-3 text-caption", children: [
|
|
12560
|
+
/* @__PURE__ */ (0, import_jsx_runtime126.jsx)("span", { className: "text-muted-foreground", children: label }),
|
|
12561
|
+
/* @__PURE__ */ (0, import_jsx_runtime126.jsxs)("span", { className: "font-semibold tabular-nums text-foreground", children: [
|
|
12312
12562
|
formatValue(value),
|
|
12313
12563
|
" ",
|
|
12314
|
-
/* @__PURE__ */ (0,
|
|
12564
|
+
/* @__PURE__ */ (0, import_jsx_runtime126.jsxs)("span", { className: "font-normal text-muted-foreground", children: [
|
|
12315
12565
|
"/ ",
|
|
12316
12566
|
formatValue(max)
|
|
12317
12567
|
] })
|
|
12318
12568
|
] })
|
|
12319
12569
|
] }),
|
|
12320
|
-
/* @__PURE__ */ (0,
|
|
12570
|
+
/* @__PURE__ */ (0, import_jsx_runtime126.jsx)(
|
|
12321
12571
|
"div",
|
|
12322
12572
|
{
|
|
12323
12573
|
role: "meter",
|
|
@@ -12327,18 +12577,18 @@ function Meter({
|
|
|
12327
12577
|
"aria-valuetext": `${formatValue(value)} of ${formatValue(max)}, ${percent}%`,
|
|
12328
12578
|
"aria-label": typeof label === "string" ? label : void 0,
|
|
12329
12579
|
className: cn("h-2 overflow-hidden rounded-full shadow-inner", track),
|
|
12330
|
-
children: /* @__PURE__ */ (0,
|
|
12580
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime126.jsx)("div", { className: cn("h-full rounded-full transition-[width] duration-300 motion-reduce:transition-none", fill), style: { width: `${ratio * 100}%` } })
|
|
12331
12581
|
}
|
|
12332
12582
|
),
|
|
12333
|
-
state !== "normal" && /* @__PURE__ */ (0,
|
|
12334
|
-
/* @__PURE__ */ (0,
|
|
12583
|
+
state !== "normal" && /* @__PURE__ */ (0, import_jsx_runtime126.jsxs)("p", { className: cn("m-0 flex items-center gap-1 text-caption", state === "danger" ? "text-danger-fg" : "text-warning-fg"), children: [
|
|
12584
|
+
/* @__PURE__ */ (0, import_jsx_runtime126.jsx)(IconGlyph, { glyph: state === "danger" ? Error2 : Warning, className: "text-icon-sm" }),
|
|
12335
12585
|
state === "danger" ? `Almost full \xB7 ${percent}%` : `Getting full \xB7 ${percent}%`
|
|
12336
12586
|
] })
|
|
12337
12587
|
] });
|
|
12338
12588
|
}
|
|
12339
12589
|
|
|
12340
12590
|
// src/web/components/activity-row.tsx
|
|
12341
|
-
var
|
|
12591
|
+
var import_jsx_runtime127 = require("react/jsx-runtime");
|
|
12342
12592
|
var directionUi = {
|
|
12343
12593
|
inbound: { icon: "south_west", iconClass: "bg-primary/20 text-brand", amountClass: "text-brand", sign: "+" },
|
|
12344
12594
|
outbound: { icon: "north_east", iconClass: "bg-foreground/10 text-muted-foreground", amountClass: "text-foreground", sign: "-" },
|
|
@@ -12358,29 +12608,29 @@ function ActivityRow({
|
|
|
12358
12608
|
className
|
|
12359
12609
|
}) {
|
|
12360
12610
|
const ui = directionUi[direction];
|
|
12361
|
-
const content = /* @__PURE__ */ (0,
|
|
12362
|
-
/* @__PURE__ */ (0,
|
|
12363
|
-
/* @__PURE__ */ (0,
|
|
12611
|
+
const content = /* @__PURE__ */ (0, import_jsx_runtime127.jsxs)(import_jsx_runtime127.Fragment, { children: [
|
|
12612
|
+
/* @__PURE__ */ (0, import_jsx_runtime127.jsxs)("div", { className: "flex min-w-0 items-center gap-3", children: [
|
|
12613
|
+
/* @__PURE__ */ (0, import_jsx_runtime127.jsx)(
|
|
12364
12614
|
StatusIconBadge,
|
|
12365
12615
|
{
|
|
12366
12616
|
status,
|
|
12367
|
-
icon: /* @__PURE__ */ (0,
|
|
12617
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime127.jsx)("div", { className: cn("flex size-10 items-center justify-center rounded-xl shadow-inner", ui.iconClass), children: typeof icon === "string" || !icon ? /* @__PURE__ */ (0, import_jsx_runtime127.jsx)(Icon, { name: icon ?? ui.icon, className: "text-icon-xl" }) : icon })
|
|
12368
12618
|
}
|
|
12369
12619
|
),
|
|
12370
|
-
/* @__PURE__ */ (0,
|
|
12371
|
-
/* @__PURE__ */ (0,
|
|
12372
|
-
/* @__PURE__ */ (0,
|
|
12620
|
+
/* @__PURE__ */ (0, import_jsx_runtime127.jsxs)("div", { className: "flex min-w-0 flex-col", children: [
|
|
12621
|
+
/* @__PURE__ */ (0, import_jsx_runtime127.jsxs)("div", { className: "flex min-w-0 items-center gap-1.5", children: [
|
|
12622
|
+
/* @__PURE__ */ (0, import_jsx_runtime127.jsx)("span", { className: "truncate text-body font-bold tracking-wide text-foreground", children: title }),
|
|
12373
12623
|
networkBadge
|
|
12374
12624
|
] }),
|
|
12375
|
-
timestamp && /* @__PURE__ */ (0,
|
|
12625
|
+
timestamp && /* @__PURE__ */ (0, import_jsx_runtime127.jsx)("div", { className: "mt-1 flex items-center gap-2", children: /* @__PURE__ */ (0, import_jsx_runtime127.jsx)("span", { className: "text-xxs text-muted-foreground", children: timestamp }) })
|
|
12376
12626
|
] })
|
|
12377
12627
|
] }),
|
|
12378
|
-
/* @__PURE__ */ (0,
|
|
12379
|
-
/* @__PURE__ */ (0,
|
|
12628
|
+
/* @__PURE__ */ (0, import_jsx_runtime127.jsxs)("div", { className: "shrink-0 text-right", children: [
|
|
12629
|
+
/* @__PURE__ */ (0, import_jsx_runtime127.jsxs)("p", { className: cn("text-body font-bold tracking-wide", ui.amountClass), children: [
|
|
12380
12630
|
ui.sign,
|
|
12381
12631
|
amount
|
|
12382
12632
|
] }),
|
|
12383
|
-
unit && /* @__PURE__ */ (0,
|
|
12633
|
+
unit && /* @__PURE__ */ (0, import_jsx_runtime127.jsx)("p", { className: cn("mt-0.5 text-muted-foreground", eyebrow), children: unit })
|
|
12384
12634
|
] })
|
|
12385
12635
|
] });
|
|
12386
12636
|
const rowClassName = cn(
|
|
@@ -12389,13 +12639,13 @@ function ActivityRow({
|
|
|
12389
12639
|
className
|
|
12390
12640
|
);
|
|
12391
12641
|
if (onClick) {
|
|
12392
|
-
return /* @__PURE__ */ (0,
|
|
12642
|
+
return /* @__PURE__ */ (0, import_jsx_runtime127.jsx)("button", { type: "button", onClick, className: rowClassName, children: content });
|
|
12393
12643
|
}
|
|
12394
|
-
return /* @__PURE__ */ (0,
|
|
12644
|
+
return /* @__PURE__ */ (0, import_jsx_runtime127.jsx)("div", { className: rowClassName, children: content });
|
|
12395
12645
|
}
|
|
12396
12646
|
|
|
12397
12647
|
// src/web/components/secret-reveal-card.tsx
|
|
12398
|
-
var
|
|
12648
|
+
var import_jsx_runtime128 = require("react/jsx-runtime");
|
|
12399
12649
|
function SecretRevealCard({
|
|
12400
12650
|
value,
|
|
12401
12651
|
revealed,
|
|
@@ -12414,9 +12664,9 @@ function SecretRevealCard({
|
|
|
12414
12664
|
const selfCopy = !onCopy && copyValue !== void 0;
|
|
12415
12665
|
const handleCopy = onCopy ?? (selfCopy ? () => void clipboard.copy(copyValue) : void 0);
|
|
12416
12666
|
const copied = selfCopy && clipboard.state === "copied";
|
|
12417
|
-
return /* @__PURE__ */ (0,
|
|
12418
|
-
/* @__PURE__ */ (0,
|
|
12419
|
-
/* @__PURE__ */ (0,
|
|
12667
|
+
return /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)("div", { className: cn("space-y-3", className), children: [
|
|
12668
|
+
/* @__PURE__ */ (0, import_jsx_runtime128.jsxs)("div", { className: "relative", children: [
|
|
12669
|
+
/* @__PURE__ */ (0, import_jsx_runtime128.jsx)("div", { className: "rounded-xl bg-card/55 bg-gradient-card px-3 py-3 shadow-inner ring-1 ring-inset ring-secondary/15 backdrop-blur-xl backdrop-saturate-150", children: /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(
|
|
12420
12670
|
"p",
|
|
12421
12671
|
{
|
|
12422
12672
|
className: cn(
|
|
@@ -12428,17 +12678,17 @@ function SecretRevealCard({
|
|
|
12428
12678
|
children: value
|
|
12429
12679
|
}
|
|
12430
12680
|
) }),
|
|
12431
|
-
!revealed && /* @__PURE__ */ (0,
|
|
12432
|
-
/* @__PURE__ */ (0,
|
|
12681
|
+
!revealed && /* @__PURE__ */ (0, import_jsx_runtime128.jsx)("div", { className: "absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)(Button, { type: "button", variant: "surface", size: "sm", onClick: () => onRevealChange(true), children: [
|
|
12682
|
+
/* @__PURE__ */ (0, import_jsx_runtime128.jsx)(IconGlyph, { glyph: Visibility, className: "text-icon-lg" }),
|
|
12433
12683
|
revealLabel
|
|
12434
12684
|
] }) })
|
|
12435
12685
|
] }),
|
|
12436
|
-
revealed && /* @__PURE__ */ (0,
|
|
12437
|
-
/* @__PURE__ */ (0,
|
|
12438
|
-
/* @__PURE__ */ (0,
|
|
12686
|
+
revealed && /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)("div", { className: "flex gap-2", children: [
|
|
12687
|
+
/* @__PURE__ */ (0, import_jsx_runtime128.jsxs)(Button, { type: "button", variant: "surface", className: "flex-1", onClick: () => onRevealChange(false), children: [
|
|
12688
|
+
/* @__PURE__ */ (0, import_jsx_runtime128.jsx)(IconGlyph, { glyph: VisibilityOff, className: "text-icon-lg" }),
|
|
12439
12689
|
hideLabel
|
|
12440
12690
|
] }),
|
|
12441
|
-
handleCopy && /* @__PURE__ */ (0,
|
|
12691
|
+
handleCopy && /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)(
|
|
12442
12692
|
Button,
|
|
12443
12693
|
{
|
|
12444
12694
|
type: "button",
|
|
@@ -12446,19 +12696,19 @@ function SecretRevealCard({
|
|
|
12446
12696
|
onClick: handleCopy,
|
|
12447
12697
|
className: cn("flex-1", copied && "bg-primary/10 bg-gradient-active text-brand ring-primary/40 hover:ring-primary/50"),
|
|
12448
12698
|
children: [
|
|
12449
|
-
/* @__PURE__ */ (0,
|
|
12699
|
+
/* @__PURE__ */ (0, import_jsx_runtime128.jsx)(IconGlyph, { glyph: copied ? Check : ContentCopy, className: "text-icon-lg" }),
|
|
12450
12700
|
copied ? copiedLabel : copyLabel
|
|
12451
12701
|
]
|
|
12452
12702
|
}
|
|
12453
12703
|
)
|
|
12454
12704
|
] }),
|
|
12455
|
-
selfCopy && clipboard.state === "failed" && /* @__PURE__ */ (0,
|
|
12456
|
-
selfCopy && /* @__PURE__ */ (0,
|
|
12705
|
+
selfCopy && clipboard.state === "failed" && /* @__PURE__ */ (0, import_jsx_runtime128.jsx)("p", { role: "alert", className: "m-0 text-caption text-danger-fg", children: copyFailedMessage }),
|
|
12706
|
+
selfCopy && /* @__PURE__ */ (0, import_jsx_runtime128.jsx)("span", { "aria-live": "polite", className: "sr-only", children: copied ? copiedLabel : "" })
|
|
12457
12707
|
] });
|
|
12458
12708
|
}
|
|
12459
12709
|
|
|
12460
12710
|
// src/web/components/settings-section-card.tsx
|
|
12461
|
-
var
|
|
12711
|
+
var import_jsx_runtime129 = require("react/jsx-runtime");
|
|
12462
12712
|
function SettingsSectionCard({
|
|
12463
12713
|
icon,
|
|
12464
12714
|
title,
|
|
@@ -12468,18 +12718,18 @@ function SettingsSectionCard({
|
|
|
12468
12718
|
className,
|
|
12469
12719
|
bodyClassName
|
|
12470
12720
|
}) {
|
|
12471
|
-
return /* @__PURE__ */ (0,
|
|
12472
|
-
/* @__PURE__ */ (0,
|
|
12473
|
-
/* @__PURE__ */ (0,
|
|
12474
|
-
icon && /* @__PURE__ */ (0,
|
|
12475
|
-
/* @__PURE__ */ (0,
|
|
12476
|
-
/* @__PURE__ */ (0,
|
|
12477
|
-
description && /* @__PURE__ */ (0,
|
|
12721
|
+
return /* @__PURE__ */ (0, import_jsx_runtime129.jsxs)("section", { className: cn("space-y-4 rounded-xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card p-4 shadow-card-secondary", className), children: [
|
|
12722
|
+
/* @__PURE__ */ (0, import_jsx_runtime129.jsxs)("div", { className: "flex items-start justify-between gap-4", children: [
|
|
12723
|
+
/* @__PURE__ */ (0, import_jsx_runtime129.jsxs)("div", { className: "flex min-w-0 flex-1 items-start gap-3", children: [
|
|
12724
|
+
icon && /* @__PURE__ */ (0, import_jsx_runtime129.jsx)("div", { className: "flex size-10 shrink-0 items-center justify-center rounded-xl bg-secondary/15 text-secondary-content", children: icon }),
|
|
12725
|
+
/* @__PURE__ */ (0, import_jsx_runtime129.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
12726
|
+
/* @__PURE__ */ (0, import_jsx_runtime129.jsx)("h2", { className: "text-body font-bold text-foreground", children: title }),
|
|
12727
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime129.jsx)("p", { className: "mt-1 text-caption text-muted-foreground", children: description })
|
|
12478
12728
|
] })
|
|
12479
12729
|
] }),
|
|
12480
12730
|
badge
|
|
12481
12731
|
] }),
|
|
12482
|
-
/* @__PURE__ */ (0,
|
|
12732
|
+
/* @__PURE__ */ (0, import_jsx_runtime129.jsx)("div", { className: bodyClassName, children })
|
|
12483
12733
|
] });
|
|
12484
12734
|
}
|
|
12485
12735
|
var badgeToneClass = {
|
|
@@ -12496,7 +12746,7 @@ var badgeToneClass = {
|
|
|
12496
12746
|
outline: "border border-border bg-transparent text-foreground"
|
|
12497
12747
|
};
|
|
12498
12748
|
function ToneBadge({ children, tone = "muted", case: letterCase = "upper", className }) {
|
|
12499
|
-
return /* @__PURE__ */ (0,
|
|
12749
|
+
return /* @__PURE__ */ (0, import_jsx_runtime129.jsx)(
|
|
12500
12750
|
"span",
|
|
12501
12751
|
{
|
|
12502
12752
|
"data-slot": "tone-badge",
|
|
@@ -12512,7 +12762,7 @@ function ToneBadge({ children, tone = "muted", case: letterCase = "upper", class
|
|
|
12512
12762
|
}
|
|
12513
12763
|
|
|
12514
12764
|
// src/web/components/selectable-card.tsx
|
|
12515
|
-
var
|
|
12765
|
+
var import_jsx_runtime130 = require("react/jsx-runtime");
|
|
12516
12766
|
function SelectableCard({
|
|
12517
12767
|
selected,
|
|
12518
12768
|
onClick,
|
|
@@ -12524,28 +12774,28 @@ function SelectableCard({
|
|
|
12524
12774
|
children,
|
|
12525
12775
|
className
|
|
12526
12776
|
}) {
|
|
12527
|
-
const content = /* @__PURE__ */ (0,
|
|
12528
|
-
/* @__PURE__ */ (0,
|
|
12529
|
-
indicator && /* @__PURE__ */ (0,
|
|
12777
|
+
const content = /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("div", { className: "flex items-start justify-between gap-3", children: [
|
|
12778
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("div", { className: "flex min-w-0 flex-1 items-start gap-3", children: [
|
|
12779
|
+
indicator && /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
|
|
12530
12780
|
"div",
|
|
12531
12781
|
{
|
|
12532
12782
|
className: cn(
|
|
12533
12783
|
"mt-0.5 flex size-5 shrink-0 items-center justify-center rounded-full border-2 transition-colors",
|
|
12534
12784
|
selected ? "border-primary bg-primary bg-gradient-primary shadow-glow-primary-soft" : "border-secondary/40"
|
|
12535
12785
|
),
|
|
12536
|
-
children: selected && /* @__PURE__ */ (0,
|
|
12786
|
+
children: selected && /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("div", { className: "size-2 rounded-full bg-white" })
|
|
12537
12787
|
}
|
|
12538
12788
|
),
|
|
12539
|
-
/* @__PURE__ */ (0,
|
|
12540
|
-
/* @__PURE__ */ (0,
|
|
12541
|
-
/* @__PURE__ */ (0,
|
|
12789
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
12790
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("div", { className: "flex flex-wrap items-center gap-2", children: [
|
|
12791
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsx)("span", { className: "text-body font-bold text-foreground", children: title }),
|
|
12542
12792
|
badge
|
|
12543
12793
|
] }),
|
|
12544
|
-
description && /* @__PURE__ */ (0,
|
|
12794
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("p", { className: "mt-0.5 text-caption leading-relaxed text-muted-foreground", children: description }),
|
|
12545
12795
|
children
|
|
12546
12796
|
] })
|
|
12547
12797
|
] }),
|
|
12548
|
-
preview && /* @__PURE__ */ (0,
|
|
12798
|
+
preview && /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("div", { className: "shrink-0 text-right", children: preview })
|
|
12549
12799
|
] });
|
|
12550
12800
|
const cardClassName = cn(
|
|
12551
12801
|
"w-full rounded-2xl border border-transparent bg-card p-4 text-left transition-all duration-200",
|
|
@@ -12553,14 +12803,14 @@ function SelectableCard({
|
|
|
12553
12803
|
className
|
|
12554
12804
|
);
|
|
12555
12805
|
if (onClick) {
|
|
12556
|
-
return /* @__PURE__ */ (0,
|
|
12806
|
+
return /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("button", { type: "button", onClick, className: cardClassName, children: content });
|
|
12557
12807
|
}
|
|
12558
|
-
return /* @__PURE__ */ (0,
|
|
12808
|
+
return /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("div", { className: cardClassName, children: content });
|
|
12559
12809
|
}
|
|
12560
12810
|
|
|
12561
12811
|
// src/web/components/mobile-hero-animation.tsx
|
|
12562
12812
|
var import_react40 = require("react");
|
|
12563
|
-
var
|
|
12813
|
+
var import_jsx_runtime131 = require("react/jsx-runtime");
|
|
12564
12814
|
var PROTOCOLS = [
|
|
12565
12815
|
{ name: "Bitcoin", network: "Bitcoin", iconSuffix: "bitcoin/bitcoin-logo.svg" },
|
|
12566
12816
|
{ name: "Lightning", network: "LN", iconSuffix: "lightning/lightning.svg" },
|
|
@@ -12619,15 +12869,15 @@ var MobileHeroAnimation = ({
|
|
|
12619
12869
|
}, []);
|
|
12620
12870
|
const anim = !reducedMotion && isVisible;
|
|
12621
12871
|
const scale = size / 280;
|
|
12622
|
-
return /* @__PURE__ */ (0,
|
|
12872
|
+
return /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)(
|
|
12623
12873
|
"div",
|
|
12624
12874
|
{
|
|
12625
12875
|
ref: containerRef,
|
|
12626
12876
|
className,
|
|
12627
12877
|
style: { position: "relative", width: size, height: size },
|
|
12628
12878
|
children: [
|
|
12629
|
-
/* @__PURE__ */ (0,
|
|
12630
|
-
/* @__PURE__ */ (0,
|
|
12879
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("style", { children: KEYFRAMES }),
|
|
12880
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("div", { style: {
|
|
12631
12881
|
position: "absolute",
|
|
12632
12882
|
top: 0,
|
|
12633
12883
|
left: 0,
|
|
@@ -12636,7 +12886,7 @@ var MobileHeroAnimation = ({
|
|
|
12636
12886
|
transformOrigin: "top left",
|
|
12637
12887
|
transform: scale !== 1 ? `scale(${scale})` : void 0
|
|
12638
12888
|
}, children: [
|
|
12639
|
-
/* @__PURE__ */ (0,
|
|
12889
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsxs)(
|
|
12640
12890
|
"svg",
|
|
12641
12891
|
{
|
|
12642
12892
|
viewBox: "0 0 280 280",
|
|
@@ -12645,34 +12895,34 @@ var MobileHeroAnimation = ({
|
|
|
12645
12895
|
style: { position: "absolute", inset: 0 },
|
|
12646
12896
|
xmlns: "http://www.w3.org/2000/svg",
|
|
12647
12897
|
children: [
|
|
12648
|
-
/* @__PURE__ */ (0,
|
|
12649
|
-
/* @__PURE__ */ (0,
|
|
12650
|
-
/* @__PURE__ */ (0,
|
|
12651
|
-
/* @__PURE__ */ (0,
|
|
12652
|
-
/* @__PURE__ */ (0,
|
|
12898
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("defs", { children: [
|
|
12899
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("radialGradient", { id: "mh-center-glow", cx: "50%", cy: "50%", r: "50%", children: [
|
|
12900
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "0%", stopColor: "#0e9dff", stopOpacity: "0.3" }),
|
|
12901
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "40%", stopColor: "#8a5cf6", stopOpacity: "0.15" }),
|
|
12902
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "100%", stopColor: "transparent", stopOpacity: "0" })
|
|
12653
12903
|
] }),
|
|
12654
|
-
/* @__PURE__ */ (0,
|
|
12655
|
-
/* @__PURE__ */ (0,
|
|
12656
|
-
/* @__PURE__ */ (0,
|
|
12904
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("linearGradient", { id: "mh-gp", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
|
|
12905
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "0%", stopColor: "#22c55e" }),
|
|
12906
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "100%", stopColor: "#8a5cf6" })
|
|
12657
12907
|
] }),
|
|
12658
|
-
/* @__PURE__ */ (0,
|
|
12659
|
-
/* @__PURE__ */ (0,
|
|
12660
|
-
/* @__PURE__ */ (0,
|
|
12908
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("linearGradient", { id: "mh-bp", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
|
|
12909
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "0%", stopColor: "#0e9dff" }),
|
|
12910
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "100%", stopColor: "#8a5cf6" })
|
|
12661
12911
|
] }),
|
|
12662
|
-
/* @__PURE__ */ (0,
|
|
12663
|
-
/* @__PURE__ */ (0,
|
|
12664
|
-
/* @__PURE__ */ (0,
|
|
12665
|
-
/* @__PURE__ */ (0,
|
|
12666
|
-
/* @__PURE__ */ (0,
|
|
12912
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("filter", { id: "mh-glow", x: "-50%", y: "-50%", width: "200%", height: "200%", children: [
|
|
12913
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("feGaussianBlur", { stdDeviation: "2.5", result: "blur" }),
|
|
12914
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("feMerge", { children: [
|
|
12915
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("feMergeNode", { in: "blur" }),
|
|
12916
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("feMergeNode", { in: "SourceGraphic" })
|
|
12667
12917
|
] })
|
|
12668
12918
|
] })
|
|
12669
12919
|
] }),
|
|
12670
|
-
/* @__PURE__ */ (0,
|
|
12671
|
-
/* @__PURE__ */ (0,
|
|
12672
|
-
/* @__PURE__ */ (0,
|
|
12920
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("circle", { cx: C, cy: C, r: ORBIT_R, fill: "none", stroke: "#0e9dff", strokeWidth: "1", strokeOpacity: "0.25", opacity: "0.4", children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)(import_jsx_runtime131.Fragment, { children: [
|
|
12921
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "r", values: `${ORBIT_R};${Math.round(ORBIT_R * 1.12)};${ORBIT_R}`, dur: "2.5s", repeatCount: "indefinite" }),
|
|
12922
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0.4;0;0.4", dur: "2.5s", repeatCount: "indefinite" })
|
|
12673
12923
|
] }) }),
|
|
12674
|
-
/* @__PURE__ */ (0,
|
|
12675
|
-
/* @__PURE__ */ (0,
|
|
12924
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("circle", { cx: C, cy: C, r: 80, fill: "none", stroke: "rgba(255,255,255,0.1)", strokeWidth: "1", strokeDasharray: "4 4" }),
|
|
12925
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
|
|
12676
12926
|
"g",
|
|
12677
12927
|
{
|
|
12678
12928
|
style: {
|
|
@@ -12690,8 +12940,8 @@ var MobileHeroAnimation = ({
|
|
|
12690
12940
|
const y2 = C + dy * (ORBIT_R - BADGE_HALF);
|
|
12691
12941
|
const color = PROTOCOL_COLORS[protocol.network] ?? "#ffffff";
|
|
12692
12942
|
const dur = `${2 + i * 0.3}s`;
|
|
12693
|
-
return /* @__PURE__ */ (0,
|
|
12694
|
-
/* @__PURE__ */ (0,
|
|
12943
|
+
return /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("g", { children: [
|
|
12944
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
|
|
12695
12945
|
"line",
|
|
12696
12946
|
{
|
|
12697
12947
|
x1,
|
|
@@ -12702,30 +12952,30 @@ var MobileHeroAnimation = ({
|
|
|
12702
12952
|
strokeWidth: "0.8",
|
|
12703
12953
|
strokeDasharray: "2 4",
|
|
12704
12954
|
opacity: "0.25",
|
|
12705
|
-
children: anim && /* @__PURE__ */ (0,
|
|
12955
|
+
children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "stroke-dashoffset", from: "0", to: "-12", dur: `${1.5 + i * 0.2}s`, repeatCount: "indefinite" })
|
|
12706
12956
|
}
|
|
12707
12957
|
),
|
|
12708
|
-
/* @__PURE__ */ (0,
|
|
12709
|
-
/* @__PURE__ */ (0,
|
|
12710
|
-
/* @__PURE__ */ (0,
|
|
12711
|
-
/* @__PURE__ */ (0,
|
|
12712
|
-
/* @__PURE__ */ (0,
|
|
12958
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("circle", { r: "2", fill: color, opacity: "0", children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)(import_jsx_runtime131.Fragment, { children: [
|
|
12959
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "cx", values: `${x1};${x2}`, dur, repeatCount: "indefinite" }),
|
|
12960
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "cy", values: `${y1};${y2}`, dur, repeatCount: "indefinite" }),
|
|
12961
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0;0.85;0", dur, repeatCount: "indefinite" }),
|
|
12962
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "r", values: "1.5;2.5;1.5", dur, repeatCount: "indefinite" })
|
|
12713
12963
|
] }) })
|
|
12714
12964
|
] }, `line-${i}`);
|
|
12715
12965
|
})
|
|
12716
12966
|
}
|
|
12717
12967
|
),
|
|
12718
|
-
/* @__PURE__ */ (0,
|
|
12719
|
-
/* @__PURE__ */ (0,
|
|
12720
|
-
/* @__PURE__ */ (0,
|
|
12721
|
-
/* @__PURE__ */ (0,
|
|
12968
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("circle", { cx: C, cy: C, r: "42", fill: "url(#mh-center-glow)", children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "r", values: "38;46;38", dur: "4s", repeatCount: "indefinite" }) }),
|
|
12969
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("circle", { cx: C, cy: C, r: "29", fill: "none", stroke: "url(#mh-bp)", strokeWidth: "1", opacity: "0", children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)(import_jsx_runtime131.Fragment, { children: [
|
|
12970
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "r", values: "27;38", dur: "3s", repeatCount: "indefinite" }),
|
|
12971
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0.4;0", dur: "3s", repeatCount: "indefinite" })
|
|
12722
12972
|
] }) }),
|
|
12723
|
-
/* @__PURE__ */ (0,
|
|
12724
|
-
/* @__PURE__ */ (0,
|
|
12725
|
-
/* @__PURE__ */ (0,
|
|
12973
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("circle", { cx: C, cy: C, r: "27", fill: "none", stroke: "url(#mh-gp)", strokeWidth: "0.8", opacity: "0", children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)(import_jsx_runtime131.Fragment, { children: [
|
|
12974
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "r", values: "27;36", dur: "3s", repeatCount: "indefinite", begin: "1.5s" }),
|
|
12975
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0.3;0", dur: "3s", repeatCount: "indefinite", begin: "1.5s" })
|
|
12726
12976
|
] }) }),
|
|
12727
|
-
/* @__PURE__ */ (0,
|
|
12728
|
-
anim && /* @__PURE__ */ (0,
|
|
12977
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("g", { transform: `translate(${C},${C})`, children: /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("g", { children: [
|
|
12978
|
+
anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
|
|
12729
12979
|
"animateTransform",
|
|
12730
12980
|
{
|
|
12731
12981
|
attributeName: "transform",
|
|
@@ -12737,13 +12987,13 @@ var MobileHeroAnimation = ({
|
|
|
12737
12987
|
additive: "sum"
|
|
12738
12988
|
}
|
|
12739
12989
|
),
|
|
12740
|
-
/* @__PURE__ */ (0,
|
|
12741
|
-
/* @__PURE__ */ (0,
|
|
12742
|
-
/* @__PURE__ */ (0,
|
|
12990
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: hexPath(34), fill: "none", stroke: "url(#mh-gp)", strokeWidth: "1.5", opacity: "0.4", filter: "url(#mh-glow)", children: anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)(import_jsx_runtime131.Fragment, { children: [
|
|
12991
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0.3;0.65;0.3", dur: "3s", repeatCount: "indefinite" }),
|
|
12992
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "stroke-width", values: "1.5;2.5;1.5", dur: "3s", repeatCount: "indefinite" })
|
|
12743
12993
|
] }) })
|
|
12744
12994
|
] }) }),
|
|
12745
|
-
/* @__PURE__ */ (0,
|
|
12746
|
-
anim && /* @__PURE__ */ (0,
|
|
12995
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("g", { transform: `translate(${C},${C})`, children: /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("g", { children: [
|
|
12996
|
+
anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
|
|
12747
12997
|
"animateTransform",
|
|
12748
12998
|
{
|
|
12749
12999
|
attributeName: "transform",
|
|
@@ -12755,19 +13005,19 @@ var MobileHeroAnimation = ({
|
|
|
12755
13005
|
additive: "sum"
|
|
12756
13006
|
}
|
|
12757
13007
|
),
|
|
12758
|
-
/* @__PURE__ */ (0,
|
|
13008
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: hexPath(32), fill: "rgba(10,15,30,0.75)", stroke: "rgba(255,255,255,0.08)", strokeWidth: "0.5" })
|
|
12759
13009
|
] }) }),
|
|
12760
|
-
/* @__PURE__ */ (0,
|
|
12761
|
-
/* @__PURE__ */ (0,
|
|
12762
|
-
/* @__PURE__ */ (0,
|
|
12763
|
-
/* @__PURE__ */ (0,
|
|
12764
|
-
/* @__PURE__ */ (0,
|
|
12765
|
-
/* @__PURE__ */ (0,
|
|
13010
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("g", { transform: `translate(${C - 18.8},${C - 18.8}) scale(0.0912)`, children: [
|
|
13011
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: "M137.306 411.865H0.000244141L68.6795 343.29L137.306 411.865Z", fill: "#6F32FF" }),
|
|
13012
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: "M0 0H137.306L68.6267 68.574L0 0Z", fill: "#6F32FF" }),
|
|
13013
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: "M137.148 274.559H274.455L411.708 411.866H274.401L137.148 274.559Z", fill: "#17B581" }),
|
|
13014
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: "M137.149 274.559L68.6274 205.933L137.201 137.306L274.455 137.411L205.776 206.038L274.456 274.559H137.149Z", fill: "#15E99A" }),
|
|
13015
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: "M274.479 0.104797H411.786L274.533 137.411H137.226L274.479 0.104797Z", fill: "#17B581" })
|
|
12766
13016
|
] })
|
|
12767
13017
|
]
|
|
12768
13018
|
}
|
|
12769
13019
|
),
|
|
12770
|
-
/* @__PURE__ */ (0,
|
|
13020
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("div", { style: {
|
|
12771
13021
|
position: "absolute",
|
|
12772
13022
|
inset: 0,
|
|
12773
13023
|
width: 280,
|
|
@@ -12778,7 +13028,7 @@ var MobileHeroAnimation = ({
|
|
|
12778
13028
|
const x = C + Math.cos(angle) * ORBIT_R - BADGE_HALF;
|
|
12779
13029
|
const y = C + Math.sin(angle) * ORBIT_R - BADGE_HALF;
|
|
12780
13030
|
const color = PROTOCOL_COLORS[protocol.network] ?? "#ffffff";
|
|
12781
|
-
return /* @__PURE__ */ (0,
|
|
13031
|
+
return /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
|
|
12782
13032
|
"div",
|
|
12783
13033
|
{
|
|
12784
13034
|
style: {
|
|
@@ -12789,7 +13039,7 @@ var MobileHeroAnimation = ({
|
|
|
12789
13039
|
height: BADGE_SIZE,
|
|
12790
13040
|
animation: anim ? "mha-counter-spin 20s linear infinite" : "none"
|
|
12791
13041
|
},
|
|
12792
|
-
children: /* @__PURE__ */ (0,
|
|
13042
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("div", { style: {
|
|
12793
13043
|
width: "100%",
|
|
12794
13044
|
height: "100%",
|
|
12795
13045
|
borderRadius: "50%",
|
|
@@ -12800,7 +13050,7 @@ var MobileHeroAnimation = ({
|
|
|
12800
13050
|
display: "flex",
|
|
12801
13051
|
alignItems: "center",
|
|
12802
13052
|
justifyContent: "center"
|
|
12803
|
-
}, children: /* @__PURE__ */ (0,
|
|
13053
|
+
}, children: /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
|
|
12804
13054
|
"img",
|
|
12805
13055
|
{
|
|
12806
13056
|
src: iconBasePath ? `${iconBasePath}/${protocol.iconSuffix}` : protocolIcons[protocol.network] ?? protocol.iconSuffix,
|
|
@@ -12821,7 +13071,7 @@ var MobileHeroAnimation = ({
|
|
|
12821
13071
|
|
|
12822
13072
|
// src/web/components/kaleidoscope-hero-animation.tsx
|
|
12823
13073
|
var import_react41 = require("react");
|
|
12824
|
-
var
|
|
13074
|
+
var import_jsx_runtime132 = require("react/jsx-runtime");
|
|
12825
13075
|
var PROTOCOLS2 = [
|
|
12826
13076
|
{ name: "Bitcoin L1", network: "L1", color: "#F7931A", glowColor: "rgba(247,147,26,0.5)" },
|
|
12827
13077
|
{ name: "Lightning", network: "LN", color: "#fbbf24", glowColor: "rgba(251,191,36,0.5)" },
|
|
@@ -12926,13 +13176,13 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
12926
13176
|
const angle = Math.PI * 2 * i / 7 - Math.PI / 2;
|
|
12927
13177
|
return { x: c + orbitR * Math.cos(angle), y: c + orbitR * Math.sin(angle) };
|
|
12928
13178
|
});
|
|
12929
|
-
return /* @__PURE__ */ (0,
|
|
13179
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
12930
13180
|
"div",
|
|
12931
13181
|
{
|
|
12932
13182
|
ref: containerRef,
|
|
12933
13183
|
className: `relative ${className}`,
|
|
12934
13184
|
style: size ? { width: size, height: size } : void 0,
|
|
12935
|
-
children: /* @__PURE__ */ (0,
|
|
13185
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(
|
|
12936
13186
|
"svg",
|
|
12937
13187
|
{
|
|
12938
13188
|
viewBox: "0 0 500 500",
|
|
@@ -12941,60 +13191,60 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
12941
13191
|
xmlns: "http://www.w3.org/2000/svg",
|
|
12942
13192
|
className: "overflow-visible",
|
|
12943
13193
|
children: [
|
|
12944
|
-
/* @__PURE__ */ (0,
|
|
12945
|
-
/* @__PURE__ */ (0,
|
|
12946
|
-
/* @__PURE__ */ (0,
|
|
12947
|
-
/* @__PURE__ */ (0,
|
|
13194
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("defs", { children: [
|
|
13195
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("linearGradient", { id: "kh-grad-a", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
|
|
13196
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "0%", children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "stop-color", values: "#22c55e;#8a5cf6;#06b6d4;#F7931A;#22c55e", dur: "10s", repeatCount: "indefinite" }) }),
|
|
13197
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "100%", children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "stop-color", values: "#8a5cf6;#F7931A;#22c55e;#06b6d4;#8a5cf6", dur: "10s", repeatCount: "indefinite" }) })
|
|
12948
13198
|
] }),
|
|
12949
|
-
/* @__PURE__ */ (0,
|
|
12950
|
-
/* @__PURE__ */ (0,
|
|
12951
|
-
/* @__PURE__ */ (0,
|
|
13199
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("linearGradient", { id: "kh-grad-b", x1: "100%", y1: "0%", x2: "0%", y2: "100%", children: [
|
|
13200
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "0%", children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "stop-color", values: "#06b6d4;#22c55e;#F7931A;#8a5cf6;#06b6d4", dur: "8s", repeatCount: "indefinite" }) }),
|
|
13201
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "100%", children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "stop-color", values: "#F7931A;#06b6d4;#8a5cf6;#22c55e;#F7931A", dur: "8s", repeatCount: "indefinite" }) })
|
|
12952
13202
|
] }),
|
|
12953
|
-
/* @__PURE__ */ (0,
|
|
12954
|
-
/* @__PURE__ */ (0,
|
|
12955
|
-
/* @__PURE__ */ (0,
|
|
13203
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("linearGradient", { id: "kh-grad-c", x1: "50%", y1: "0%", x2: "50%", y2: "100%", children: [
|
|
13204
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "0%", children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "stop-color", values: "#0e9dff;#8a5cf6;#15E99A;#0e9dff", dur: "6s", repeatCount: "indefinite" }) }),
|
|
13205
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "100%", children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "stop-color", values: "#8a5cf6;#15E99A;#0e9dff;#8a5cf6", dur: "6s", repeatCount: "indefinite" }) })
|
|
12956
13206
|
] }),
|
|
12957
|
-
/* @__PURE__ */ (0,
|
|
12958
|
-
/* @__PURE__ */ (0,
|
|
12959
|
-
/* @__PURE__ */ (0,
|
|
13207
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("linearGradient", { id: "kh-gp", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
|
|
13208
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "0%", stopColor: "#22c55e" }),
|
|
13209
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "100%", stopColor: "#8a5cf6" })
|
|
12960
13210
|
] }),
|
|
12961
|
-
/* @__PURE__ */ (0,
|
|
12962
|
-
/* @__PURE__ */ (0,
|
|
12963
|
-
/* @__PURE__ */ (0,
|
|
13211
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("linearGradient", { id: "kh-oc", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
|
|
13212
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "0%", stopColor: "#F7931A" }),
|
|
13213
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "100%", stopColor: "#06b6d4" })
|
|
12964
13214
|
] }),
|
|
12965
|
-
/* @__PURE__ */ (0,
|
|
12966
|
-
/* @__PURE__ */ (0,
|
|
12967
|
-
/* @__PURE__ */ (0,
|
|
13215
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("linearGradient", { id: "kh-bp", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
|
|
13216
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "0%", stopColor: "#0e9dff" }),
|
|
13217
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "100%", stopColor: "#8a5cf6" })
|
|
12968
13218
|
] }),
|
|
12969
|
-
/* @__PURE__ */ (0,
|
|
12970
|
-
/* @__PURE__ */ (0,
|
|
12971
|
-
/* @__PURE__ */ (0,
|
|
12972
|
-
/* @__PURE__ */ (0,
|
|
13219
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("radialGradient", { id: "kh-center-glow", cx: "50%", cy: "50%", r: "50%", children: [
|
|
13220
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "0%", stopColor: "#0e9dff", stopOpacity: "0.3" }),
|
|
13221
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "40%", stopColor: "#8a5cf6", stopOpacity: "0.15" }),
|
|
13222
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "100%", stopColor: "transparent", stopOpacity: "0" })
|
|
12973
13223
|
] }),
|
|
12974
|
-
/* @__PURE__ */ (0,
|
|
12975
|
-
/* @__PURE__ */ (0,
|
|
12976
|
-
/* @__PURE__ */ (0,
|
|
12977
|
-
/* @__PURE__ */ (0,
|
|
13224
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("radialGradient", { id: "kh-haze", cx: "50%", cy: "50%", r: "50%", children: [
|
|
13225
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "0%", stopColor: "transparent", stopOpacity: "0" }),
|
|
13226
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "60%", stopColor: "#0e9dff", stopOpacity: "0.03" }),
|
|
13227
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "100%", stopColor: "#8a5cf6", stopOpacity: "0.06" })
|
|
12978
13228
|
] }),
|
|
12979
|
-
/* @__PURE__ */ (0,
|
|
12980
|
-
/* @__PURE__ */ (0,
|
|
12981
|
-
/* @__PURE__ */ (0,
|
|
12982
|
-
/* @__PURE__ */ (0,
|
|
12983
|
-
/* @__PURE__ */ (0,
|
|
13229
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("filter", { id: "kh-glow", x: "-50%", y: "-50%", width: "200%", height: "200%", children: [
|
|
13230
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("feGaussianBlur", { stdDeviation: "3", result: "blur" }),
|
|
13231
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("feMerge", { children: [
|
|
13232
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("feMergeNode", { in: "blur" }),
|
|
13233
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("feMergeNode", { in: "SourceGraphic" })
|
|
12984
13234
|
] })
|
|
12985
13235
|
] }),
|
|
12986
|
-
/* @__PURE__ */ (0,
|
|
12987
|
-
/* @__PURE__ */ (0,
|
|
12988
|
-
/* @__PURE__ */ (0,
|
|
12989
|
-
/* @__PURE__ */ (0,
|
|
12990
|
-
/* @__PURE__ */ (0,
|
|
13236
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("filter", { id: "kh-glow-lg", x: "-50%", y: "-50%", width: "200%", height: "200%", children: [
|
|
13237
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("feGaussianBlur", { stdDeviation: "8", result: "blur" }),
|
|
13238
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("feMerge", { children: [
|
|
13239
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("feMergeNode", { in: "blur" }),
|
|
13240
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("feMergeNode", { in: "SourceGraphic" })
|
|
12991
13241
|
] })
|
|
12992
13242
|
] })
|
|
12993
13243
|
] }),
|
|
12994
|
-
/* @__PURE__ */ (0,
|
|
12995
|
-
/* @__PURE__ */ (0,
|
|
12996
|
-
/* @__PURE__ */ (0,
|
|
12997
|
-
anim && /* @__PURE__ */ (0,
|
|
13244
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("circle", { cx: c, cy: c, r: "248", fill: "url(#kh-haze)" }),
|
|
13245
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { transform: px(20), children: [
|
|
13246
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { children: [
|
|
13247
|
+
anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
12998
13248
|
"animateTransform",
|
|
12999
13249
|
{
|
|
13000
13250
|
attributeName: "transform",
|
|
@@ -13007,14 +13257,14 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13007
13257
|
),
|
|
13008
13258
|
Array.from({ length: 6 }, (_, i) => {
|
|
13009
13259
|
const a = Math.PI / 3 * i;
|
|
13010
|
-
return /* @__PURE__ */ (0,
|
|
13011
|
-
/* @__PURE__ */ (0,
|
|
13012
|
-
/* @__PURE__ */ (0,
|
|
13260
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { transform: `translate(${c + outerR1 * Math.cos(a)},${c + outerR1 * Math.sin(a)})`, children: [
|
|
13261
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: hexPath2(40), fill: "url(#kh-grad-a)", opacity: 0.08 + i % 3 * 0.04 }),
|
|
13262
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: hexPath2(40), fill: "none", stroke: "url(#kh-grad-a)", strokeWidth: "0.5", opacity: 0.15, children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.1;0.25;0.1", dur: `${4 + i * 0.3}s`, repeatCount: "indefinite" }) })
|
|
13013
13263
|
] }, `ha-${i}`);
|
|
13014
13264
|
}),
|
|
13015
13265
|
Array.from({ length: 6 }, (_, i) => {
|
|
13016
13266
|
const a = Math.PI / 3 * i + Math.PI / 6;
|
|
13017
|
-
return /* @__PURE__ */ (0,
|
|
13267
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13018
13268
|
"path",
|
|
13019
13269
|
{
|
|
13020
13270
|
d: triPath(14),
|
|
@@ -13027,7 +13277,7 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13027
13277
|
}),
|
|
13028
13278
|
Array.from({ length: 12 }, (_, i) => {
|
|
13029
13279
|
const a = Math.PI / 6 * i;
|
|
13030
|
-
return /* @__PURE__ */ (0,
|
|
13280
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13031
13281
|
"circle",
|
|
13032
13282
|
{
|
|
13033
13283
|
cx: c + outerR1 * 0.92 * Math.cos(a),
|
|
@@ -13035,14 +13285,14 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13035
13285
|
r: "1.5",
|
|
13036
13286
|
fill: "url(#kh-grad-a)",
|
|
13037
13287
|
opacity: "0.15",
|
|
13038
|
-
children: anim && /* @__PURE__ */ (0,
|
|
13288
|
+
children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.08;0.25;0.08", dur: `${2 + i % 3 * 0.7}s`, repeatCount: "indefinite" })
|
|
13039
13289
|
},
|
|
13040
13290
|
`od-${i}`
|
|
13041
13291
|
);
|
|
13042
13292
|
})
|
|
13043
13293
|
] }),
|
|
13044
|
-
/* @__PURE__ */ (0,
|
|
13045
|
-
anim && /* @__PURE__ */ (0,
|
|
13294
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { children: [
|
|
13295
|
+
anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13046
13296
|
"animateTransform",
|
|
13047
13297
|
{
|
|
13048
13298
|
attributeName: "transform",
|
|
@@ -13055,28 +13305,28 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13055
13305
|
),
|
|
13056
13306
|
Array.from({ length: 6 }, (_, i) => {
|
|
13057
13307
|
const a = Math.PI / 3 * i + Math.PI / 6;
|
|
13058
|
-
return /* @__PURE__ */ (0,
|
|
13059
|
-
/* @__PURE__ */ (0,
|
|
13060
|
-
/* @__PURE__ */ (0,
|
|
13308
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { transform: `translate(${c + outerR2 * Math.cos(a)},${c + outerR2 * Math.sin(a)})`, children: [
|
|
13309
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: hexPath2(30), fill: "url(#kh-grad-b)", opacity: 0.06 + i % 2 * 0.04 }),
|
|
13310
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: hexPath2(30), fill: "none", stroke: "url(#kh-grad-b)", strokeWidth: "0.5", opacity: 0.12 })
|
|
13061
13311
|
] }, `hb-${i}`);
|
|
13062
13312
|
}),
|
|
13063
13313
|
Array.from({ length: 6 }, (_, i) => {
|
|
13064
13314
|
const a = Math.PI / 3 * i;
|
|
13065
|
-
return /* @__PURE__ */ (0,
|
|
13315
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13066
13316
|
"path",
|
|
13067
13317
|
{
|
|
13068
13318
|
d: diamondPath(8, 16),
|
|
13069
13319
|
transform: `translate(${c + outerR2 * 0.85 * Math.cos(a)},${c + outerR2 * 0.85 * Math.sin(a)}) rotate(${i * 60})`,
|
|
13070
13320
|
fill: "url(#kh-grad-b)",
|
|
13071
13321
|
opacity: "0.08",
|
|
13072
|
-
children: anim && /* @__PURE__ */ (0,
|
|
13322
|
+
children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.05;0.15;0.05", dur: `${3.5 + i * 0.4}s`, repeatCount: "indefinite" })
|
|
13073
13323
|
},
|
|
13074
13324
|
`db-${i}`
|
|
13075
13325
|
);
|
|
13076
13326
|
})
|
|
13077
13327
|
] }),
|
|
13078
|
-
/* @__PURE__ */ (0,
|
|
13079
|
-
anim && /* @__PURE__ */ (0,
|
|
13328
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { children: [
|
|
13329
|
+
anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13080
13330
|
"animateTransform",
|
|
13081
13331
|
{
|
|
13082
13332
|
attributeName: "transform",
|
|
@@ -13090,23 +13340,23 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13090
13340
|
Array.from({ length: 12 }, (_, i) => {
|
|
13091
13341
|
const a = Math.PI / 6 * i;
|
|
13092
13342
|
const r = outerR1 * (0.6 + i % 2 * 0.15);
|
|
13093
|
-
return /* @__PURE__ */ (0,
|
|
13343
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13094
13344
|
"path",
|
|
13095
13345
|
{
|
|
13096
13346
|
d: triPath(10),
|
|
13097
13347
|
transform: `translate(${c + r * Math.cos(a)},${c + r * Math.sin(a)}) rotate(${i * 30 + 15})`,
|
|
13098
13348
|
fill: "url(#kh-grad-c)",
|
|
13099
13349
|
opacity: "0.05",
|
|
13100
|
-
children: anim && /* @__PURE__ */ (0,
|
|
13350
|
+
children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.03;0.1;0.03", dur: `${5 + i % 4 * 0.8}s`, repeatCount: "indefinite" })
|
|
13101
13351
|
},
|
|
13102
13352
|
`tc-${i}`
|
|
13103
13353
|
);
|
|
13104
13354
|
})
|
|
13105
13355
|
] })
|
|
13106
13356
|
] }),
|
|
13107
|
-
/* @__PURE__ */ (0,
|
|
13108
|
-
/* @__PURE__ */ (0,
|
|
13109
|
-
anim && /* @__PURE__ */ (0,
|
|
13357
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { transform: px(14), children: [
|
|
13358
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { children: [
|
|
13359
|
+
anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13110
13360
|
"animateTransform",
|
|
13111
13361
|
{
|
|
13112
13362
|
attributeName: "transform",
|
|
@@ -13119,9 +13369,9 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13119
13369
|
),
|
|
13120
13370
|
Array.from({ length: 12 }, (_, i) => {
|
|
13121
13371
|
const a = Math.PI / 6 * i;
|
|
13122
|
-
return /* @__PURE__ */ (0,
|
|
13123
|
-
/* @__PURE__ */ (0,
|
|
13124
|
-
/* @__PURE__ */ (0,
|
|
13372
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { transform: `translate(${c + midR * Math.cos(a)},${c + midR * Math.sin(a)})`, children: [
|
|
13373
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: hexPath2(12), fill: "url(#kh-grad-c)", opacity: 0.08 + i % 3 * 0.03 }),
|
|
13374
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: hexPath2(12), fill: "none", stroke: "url(#kh-grad-c)", strokeWidth: "0.4", opacity: "0.12", children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.08;0.2;0.08", dur: `${3 + i % 4 * 0.5}s`, repeatCount: "indefinite" }) })
|
|
13125
13375
|
] }, `mh-${i}`);
|
|
13126
13376
|
})
|
|
13127
13377
|
] }),
|
|
@@ -13132,7 +13382,7 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13132
13382
|
const y1 = c + midR * Math.sin(a1);
|
|
13133
13383
|
const x2 = c + midR * Math.cos(a2);
|
|
13134
13384
|
const y2 = c + midR * Math.sin(a2);
|
|
13135
|
-
return /* @__PURE__ */ (0,
|
|
13385
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13136
13386
|
"path",
|
|
13137
13387
|
{
|
|
13138
13388
|
d: `M${x1},${y1} Q${c},${c} ${x2},${y2}`,
|
|
@@ -13141,17 +13391,17 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13141
13391
|
strokeWidth: "0.5",
|
|
13142
13392
|
strokeDasharray: "3 5",
|
|
13143
13393
|
opacity: "0.1",
|
|
13144
|
-
children: anim && /* @__PURE__ */ (0,
|
|
13394
|
+
children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "stroke-dashoffset", from: "0", to: "-16", dur: `${3 + i * 0.2}s`, repeatCount: "indefinite" })
|
|
13145
13395
|
},
|
|
13146
13396
|
`arc-${i}`
|
|
13147
13397
|
);
|
|
13148
13398
|
})
|
|
13149
13399
|
] }),
|
|
13150
|
-
/* @__PURE__ */ (0,
|
|
13151
|
-
/* @__PURE__ */ (0,
|
|
13152
|
-
/* @__PURE__ */ (0,
|
|
13153
|
-
/* @__PURE__ */ (0,
|
|
13154
|
-
anim && /* @__PURE__ */ (0,
|
|
13400
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { transform: px(10), children: [
|
|
13401
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("circle", { cx: c, cy: c, r: orbitR, fill: "none", stroke: "rgba(255,255,255,0.05)", strokeWidth: "1", strokeDasharray: "3 5", children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animateTransform", { attributeName: "transform", type: "rotate", from: `0 ${c} ${c}`, to: `360 ${c} ${c}`, dur: "90s", repeatCount: "indefinite" }) }),
|
|
13402
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("circle", { cx: c, cy: c, r: orbitR + 4, fill: "none", stroke: "rgba(255,255,255,0.03)", strokeWidth: "0.5" }),
|
|
13403
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { children: [
|
|
13404
|
+
anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13155
13405
|
"animateTransform",
|
|
13156
13406
|
{
|
|
13157
13407
|
attributeName: "transform",
|
|
@@ -13166,8 +13416,8 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13166
13416
|
const angle = Math.atan2(pos.y - c, pos.x - c);
|
|
13167
13417
|
const dx = Math.cos(angle);
|
|
13168
13418
|
const dy = Math.sin(angle);
|
|
13169
|
-
return /* @__PURE__ */ (0,
|
|
13170
|
-
/* @__PURE__ */ (0,
|
|
13419
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { children: [
|
|
13420
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13171
13421
|
"line",
|
|
13172
13422
|
{
|
|
13173
13423
|
x1: c + dx * 52,
|
|
@@ -13178,14 +13428,14 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13178
13428
|
strokeWidth: "0.8",
|
|
13179
13429
|
strokeDasharray: "2 4",
|
|
13180
13430
|
opacity: "0.2",
|
|
13181
|
-
children: anim && /* @__PURE__ */ (0,
|
|
13431
|
+
children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "stroke-dashoffset", from: "0", to: "-12", dur: `${1.5 + i * 0.2}s`, repeatCount: "indefinite" })
|
|
13182
13432
|
}
|
|
13183
13433
|
),
|
|
13184
|
-
/* @__PURE__ */ (0,
|
|
13185
|
-
/* @__PURE__ */ (0,
|
|
13186
|
-
/* @__PURE__ */ (0,
|
|
13187
|
-
/* @__PURE__ */ (0,
|
|
13188
|
-
/* @__PURE__ */ (0,
|
|
13434
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("circle", { r: "2.5", fill: PROTOCOLS2[i].color, opacity: "0", children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(import_jsx_runtime132.Fragment, { children: [
|
|
13435
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "cx", values: `${c + dx * 52};${pos.x}`, dur: `${2 + i * 0.3}s`, repeatCount: "indefinite" }),
|
|
13436
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "cy", values: `${c + dy * 52};${pos.y}`, dur: `${2 + i * 0.3}s`, repeatCount: "indefinite" }),
|
|
13437
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0;0.8;0", dur: `${2 + i * 0.3}s`, repeatCount: "indefinite" }),
|
|
13438
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "r", values: "1.5;3;1.5", dur: `${2 + i * 0.3}s`, repeatCount: "indefinite" })
|
|
13189
13439
|
] }) })
|
|
13190
13440
|
] }, `conn-${i}`);
|
|
13191
13441
|
}),
|
|
@@ -13193,14 +13443,14 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13193
13443
|
const pos = iconPositions[i];
|
|
13194
13444
|
const labelWidth = Math.max(proto.name.length * 5.5 + 10, 32);
|
|
13195
13445
|
const isHovered = hoveredProtocol === proto.name;
|
|
13196
|
-
return /* @__PURE__ */ (0,
|
|
13446
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("g", { transform: `translate(${pos.x},${pos.y})`, children: /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(
|
|
13197
13447
|
"g",
|
|
13198
13448
|
{
|
|
13199
13449
|
onMouseEnter: () => setHoveredProtocol(proto.name),
|
|
13200
13450
|
onMouseLeave: () => setHoveredProtocol(null),
|
|
13201
13451
|
style: { cursor: "pointer" },
|
|
13202
13452
|
children: [
|
|
13203
|
-
anim && /* @__PURE__ */ (0,
|
|
13453
|
+
anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13204
13454
|
"animateTransform",
|
|
13205
13455
|
{
|
|
13206
13456
|
attributeName: "transform",
|
|
@@ -13211,7 +13461,7 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13211
13461
|
repeatCount: "indefinite"
|
|
13212
13462
|
}
|
|
13213
13463
|
),
|
|
13214
|
-
/* @__PURE__ */ (0,
|
|
13464
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13215
13465
|
"circle",
|
|
13216
13466
|
{
|
|
13217
13467
|
cx: "0",
|
|
@@ -13221,13 +13471,13 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13221
13471
|
stroke: proto.color,
|
|
13222
13472
|
strokeWidth: "1",
|
|
13223
13473
|
opacity: "0",
|
|
13224
|
-
children: anim && /* @__PURE__ */ (0,
|
|
13225
|
-
/* @__PURE__ */ (0,
|
|
13226
|
-
/* @__PURE__ */ (0,
|
|
13474
|
+
children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(import_jsx_runtime132.Fragment, { children: [
|
|
13475
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "r", values: `${iconR};${iconR + 12}`, dur: `${3 + i * 0.5}s`, repeatCount: "indefinite", begin: `${i * 0.4}s` }),
|
|
13476
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.5;0", dur: `${3 + i * 0.5}s`, repeatCount: "indefinite", begin: `${i * 0.4}s` })
|
|
13227
13477
|
] })
|
|
13228
13478
|
}
|
|
13229
13479
|
),
|
|
13230
|
-
/* @__PURE__ */ (0,
|
|
13480
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13231
13481
|
"circle",
|
|
13232
13482
|
{
|
|
13233
13483
|
cx: "0",
|
|
@@ -13237,10 +13487,10 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13237
13487
|
stroke: proto.color,
|
|
13238
13488
|
strokeWidth: "1",
|
|
13239
13489
|
opacity: "0.15",
|
|
13240
|
-
children: anim && /* @__PURE__ */ (0,
|
|
13490
|
+
children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.15;0.4;0.15", dur: `${3 + i * 0.4}s`, repeatCount: "indefinite" })
|
|
13241
13491
|
}
|
|
13242
13492
|
),
|
|
13243
|
-
/* @__PURE__ */ (0,
|
|
13493
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13244
13494
|
"circle",
|
|
13245
13495
|
{
|
|
13246
13496
|
cx: "0",
|
|
@@ -13250,10 +13500,10 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13250
13500
|
stroke: proto.color,
|
|
13251
13501
|
strokeWidth: "1.5",
|
|
13252
13502
|
opacity: "0.25",
|
|
13253
|
-
children: anim && /* @__PURE__ */ (0,
|
|
13503
|
+
children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.2;0.5;0.2", dur: `${2.5 + i * 0.3}s`, repeatCount: "indefinite" })
|
|
13254
13504
|
}
|
|
13255
13505
|
),
|
|
13256
|
-
/* @__PURE__ */ (0,
|
|
13506
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13257
13507
|
"circle",
|
|
13258
13508
|
{
|
|
13259
13509
|
cx: "0",
|
|
@@ -13264,8 +13514,8 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13264
13514
|
strokeWidth: "1"
|
|
13265
13515
|
}
|
|
13266
13516
|
),
|
|
13267
|
-
/* @__PURE__ */ (0,
|
|
13268
|
-
/* @__PURE__ */ (0,
|
|
13517
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("circle", { cx: "0", cy: "0", r: iconR - 2, fill: proto.color, opacity: "0.06" }),
|
|
13518
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("foreignObject", { x: -iconR, y: -iconR, width: iconR * 2, height: iconR * 2, children: /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13269
13519
|
NetworkBadge,
|
|
13270
13520
|
{
|
|
13271
13521
|
network: proto.network,
|
|
@@ -13273,8 +13523,8 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13273
13523
|
className: "w-full h-full"
|
|
13274
13524
|
}
|
|
13275
13525
|
) }),
|
|
13276
|
-
/* @__PURE__ */ (0,
|
|
13277
|
-
/* @__PURE__ */ (0,
|
|
13526
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { opacity: isHovered ? 1 : 0, style: { transition: "opacity 0.2s ease" }, children: [
|
|
13527
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13278
13528
|
"rect",
|
|
13279
13529
|
{
|
|
13280
13530
|
x: -labelWidth / 2,
|
|
@@ -13288,7 +13538,7 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13288
13538
|
strokeOpacity: 0.4
|
|
13289
13539
|
}
|
|
13290
13540
|
),
|
|
13291
|
-
/* @__PURE__ */ (0,
|
|
13541
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13292
13542
|
"text",
|
|
13293
13543
|
{
|
|
13294
13544
|
x: "0",
|
|
@@ -13308,9 +13558,9 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13308
13558
|
})
|
|
13309
13559
|
] })
|
|
13310
13560
|
] }),
|
|
13311
|
-
/* @__PURE__ */ (0,
|
|
13312
|
-
/* @__PURE__ */ (0,
|
|
13313
|
-
anim && /* @__PURE__ */ (0,
|
|
13561
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { transform: px(5), children: [
|
|
13562
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { children: [
|
|
13563
|
+
anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13314
13564
|
"animateTransform",
|
|
13315
13565
|
{
|
|
13316
13566
|
attributeName: "transform",
|
|
@@ -13323,28 +13573,28 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13323
13573
|
),
|
|
13324
13574
|
Array.from({ length: 6 }, (_, i) => {
|
|
13325
13575
|
const a = Math.PI / 3 * i;
|
|
13326
|
-
return /* @__PURE__ */ (0,
|
|
13576
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13327
13577
|
"path",
|
|
13328
13578
|
{
|
|
13329
13579
|
d: diamondPath(10, 22),
|
|
13330
13580
|
transform: `translate(${c + innerR * Math.cos(a)},${c + innerR * Math.sin(a)}) rotate(${i * 60})`,
|
|
13331
13581
|
fill: "url(#kh-gp)",
|
|
13332
13582
|
opacity: "0.15",
|
|
13333
|
-
children: anim && /* @__PURE__ */ (0,
|
|
13583
|
+
children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.1;0.28;0.1", dur: `${2.8 + i * 0.35}s`, repeatCount: "indefinite" })
|
|
13334
13584
|
},
|
|
13335
13585
|
`d-${i}`
|
|
13336
13586
|
);
|
|
13337
13587
|
}),
|
|
13338
13588
|
Array.from({ length: 6 }, (_, i) => {
|
|
13339
13589
|
const a = Math.PI / 3 * i + Math.PI / 6;
|
|
13340
|
-
return /* @__PURE__ */ (0,
|
|
13590
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13341
13591
|
"path",
|
|
13342
13592
|
{
|
|
13343
13593
|
d: triPath(8),
|
|
13344
13594
|
transform: `translate(${c + innerR * 0.75 * Math.cos(a)},${c + innerR * 0.75 * Math.sin(a)}) rotate(${i * 60 + 30})`,
|
|
13345
13595
|
fill: "url(#kh-oc)",
|
|
13346
13596
|
opacity: "0.1",
|
|
13347
|
-
children: anim && /* @__PURE__ */ (0,
|
|
13597
|
+
children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.06;0.18;0.06", dur: `${3.2 + i * 0.3}s`, repeatCount: "indefinite" })
|
|
13348
13598
|
},
|
|
13349
13599
|
`it-${i}`
|
|
13350
13600
|
);
|
|
@@ -13352,7 +13602,7 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13352
13602
|
Array.from({ length: 12 }, (_, i) => {
|
|
13353
13603
|
const a = Math.PI / 6 * i;
|
|
13354
13604
|
const r = innerR * (i % 2 === 0 ? 0.55 : 0.65);
|
|
13355
|
-
return /* @__PURE__ */ (0,
|
|
13605
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13356
13606
|
"circle",
|
|
13357
13607
|
{
|
|
13358
13608
|
cx: c + r * Math.cos(a),
|
|
@@ -13360,14 +13610,14 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13360
13610
|
r: i % 2 === 0 ? 2 : 1.5,
|
|
13361
13611
|
fill: "url(#kh-oc)",
|
|
13362
13612
|
opacity: "0.2",
|
|
13363
|
-
children: anim && /* @__PURE__ */ (0,
|
|
13613
|
+
children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.1;0.35;0.1", dur: `${2 + i % 4 * 0.5}s`, repeatCount: "indefinite" })
|
|
13364
13614
|
},
|
|
13365
13615
|
`id-${i}`
|
|
13366
13616
|
);
|
|
13367
13617
|
})
|
|
13368
13618
|
] }),
|
|
13369
|
-
/* @__PURE__ */ (0,
|
|
13370
|
-
anim && /* @__PURE__ */ (0,
|
|
13619
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { children: [
|
|
13620
|
+
anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13371
13621
|
"animateTransform",
|
|
13372
13622
|
{
|
|
13373
13623
|
attributeName: "transform",
|
|
@@ -13380,27 +13630,27 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13380
13630
|
),
|
|
13381
13631
|
Array.from({ length: 6 }, (_, i) => {
|
|
13382
13632
|
const a = Math.PI / 3 * i + Math.PI / 6;
|
|
13383
|
-
return /* @__PURE__ */ (0,
|
|
13633
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13384
13634
|
"path",
|
|
13385
13635
|
{
|
|
13386
13636
|
d: hexPath2(6),
|
|
13387
13637
|
transform: `translate(${c + innerR * 0.42 * Math.cos(a)},${c + innerR * 0.42 * Math.sin(a)})`,
|
|
13388
13638
|
fill: "url(#kh-bp)",
|
|
13389
13639
|
opacity: "0.1",
|
|
13390
|
-
children: anim && /* @__PURE__ */ (0,
|
|
13640
|
+
children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.06;0.18;0.06", dur: `${2.5 + i * 0.3}s`, repeatCount: "indefinite" })
|
|
13391
13641
|
},
|
|
13392
13642
|
`ih-${i}`
|
|
13393
13643
|
);
|
|
13394
13644
|
})
|
|
13395
13645
|
] })
|
|
13396
13646
|
] }),
|
|
13397
|
-
/* @__PURE__ */ (0,
|
|
13647
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("g", { transform: px(18), children: Array.from({ length: 16 }, (_, i) => {
|
|
13398
13648
|
const a = Math.PI * 2 * i / 16;
|
|
13399
13649
|
const baseR = 60 + i % 4 * 45;
|
|
13400
13650
|
const x = c + baseR * Math.cos(a);
|
|
13401
13651
|
const y = c + baseR * Math.sin(a);
|
|
13402
13652
|
const colors2 = ["#0e9dff", "#8a5cf6", "#22c55e", "#F7931A", "#06b6d4", "#15E99A"];
|
|
13403
|
-
return /* @__PURE__ */ (0,
|
|
13653
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13404
13654
|
"circle",
|
|
13405
13655
|
{
|
|
13406
13656
|
cx: x,
|
|
@@ -13408,26 +13658,26 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13408
13658
|
r: 1 + i % 3 * 0.5,
|
|
13409
13659
|
fill: colors2[i % colors2.length],
|
|
13410
13660
|
opacity: "0",
|
|
13411
|
-
children: anim && /* @__PURE__ */ (0,
|
|
13412
|
-
/* @__PURE__ */ (0,
|
|
13413
|
-
/* @__PURE__ */ (0,
|
|
13414
|
-
/* @__PURE__ */ (0,
|
|
13661
|
+
children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(import_jsx_runtime132.Fragment, { children: [
|
|
13662
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0;0.6;0", dur: `${3 + i % 5 * 0.8}s`, repeatCount: "indefinite", begin: `${i % 7 * 0.5}s` }),
|
|
13663
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "cx", values: `${x};${x + Math.cos(a) * 15}`, dur: `${4 + i % 3 * 1.5}s`, repeatCount: "indefinite", begin: `${i % 7 * 0.5}s` }),
|
|
13664
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "cy", values: `${y};${y + Math.sin(a) * 15}`, dur: `${4 + i % 3 * 1.5}s`, repeatCount: "indefinite", begin: `${i % 7 * 0.5}s` })
|
|
13415
13665
|
] })
|
|
13416
13666
|
},
|
|
13417
13667
|
`p-${i}`
|
|
13418
13668
|
);
|
|
13419
13669
|
}) }),
|
|
13420
|
-
/* @__PURE__ */ (0,
|
|
13421
|
-
/* @__PURE__ */ (0,
|
|
13422
|
-
/* @__PURE__ */ (0,
|
|
13423
|
-
/* @__PURE__ */ (0,
|
|
13424
|
-
/* @__PURE__ */ (0,
|
|
13670
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { children: [
|
|
13671
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("circle", { cx: c, cy: c, r: "75", fill: "url(#kh-center-glow)", children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "r", values: "70;80;70", dur: "4s", repeatCount: "indefinite" }) }),
|
|
13672
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("circle", { cx: c, cy: c, r: "52", fill: "none", stroke: "url(#kh-bp)", strokeWidth: "1", opacity: "0", children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(import_jsx_runtime132.Fragment, { children: [
|
|
13673
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "r", values: "48;65", dur: "3s", repeatCount: "indefinite" }),
|
|
13674
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.4;0", dur: "3s", repeatCount: "indefinite" })
|
|
13425
13675
|
] }) }),
|
|
13426
|
-
/* @__PURE__ */ (0,
|
|
13427
|
-
/* @__PURE__ */ (0,
|
|
13428
|
-
/* @__PURE__ */ (0,
|
|
13676
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("circle", { cx: c, cy: c, r: "48", fill: "none", stroke: "url(#kh-gp)", strokeWidth: "0.8", opacity: "0", children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(import_jsx_runtime132.Fragment, { children: [
|
|
13677
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "r", values: "48;60", dur: "3s", repeatCount: "indefinite", begin: "1.5s" }),
|
|
13678
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.3;0", dur: "3s", repeatCount: "indefinite", begin: "1.5s" })
|
|
13429
13679
|
] }) }),
|
|
13430
|
-
/* @__PURE__ */ (0,
|
|
13680
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13431
13681
|
"path",
|
|
13432
13682
|
{
|
|
13433
13683
|
d: hexPath2(50),
|
|
@@ -13437,13 +13687,13 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13437
13687
|
strokeWidth: "1.5",
|
|
13438
13688
|
opacity: "0.4",
|
|
13439
13689
|
filter: "url(#kh-glow)",
|
|
13440
|
-
children: anim && /* @__PURE__ */ (0,
|
|
13441
|
-
/* @__PURE__ */ (0,
|
|
13442
|
-
/* @__PURE__ */ (0,
|
|
13690
|
+
children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(import_jsx_runtime132.Fragment, { children: [
|
|
13691
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.3;0.65;0.3", dur: "3s", repeatCount: "indefinite" }),
|
|
13692
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "stroke-width", values: "1.5;2.5;1.5", dur: "3s", repeatCount: "indefinite" })
|
|
13443
13693
|
] })
|
|
13444
13694
|
}
|
|
13445
13695
|
),
|
|
13446
|
-
/* @__PURE__ */ (0,
|
|
13696
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13447
13697
|
"path",
|
|
13448
13698
|
{
|
|
13449
13699
|
d: hexPath2(46),
|
|
@@ -13453,21 +13703,21 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13453
13703
|
strokeWidth: "0.5"
|
|
13454
13704
|
}
|
|
13455
13705
|
),
|
|
13456
|
-
/* @__PURE__ */ (0,
|
|
13457
|
-
/* @__PURE__ */ (0,
|
|
13458
|
-
/* @__PURE__ */ (0,
|
|
13459
|
-
/* @__PURE__ */ (0,
|
|
13460
|
-
/* @__PURE__ */ (0,
|
|
13461
|
-
/* @__PURE__ */ (0,
|
|
13462
|
-
/* @__PURE__ */ (0,
|
|
13463
|
-
/* @__PURE__ */ (0,
|
|
13464
|
-
/* @__PURE__ */ (0,
|
|
13465
|
-
/* @__PURE__ */ (0,
|
|
13466
|
-
/* @__PURE__ */ (0,
|
|
13467
|
-
/* @__PURE__ */ (0,
|
|
13468
|
-
/* @__PURE__ */ (0,
|
|
13469
|
-
/* @__PURE__ */ (0,
|
|
13470
|
-
/* @__PURE__ */ (0,
|
|
13706
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { transform: `translate(${c - 34},${c - 34}) scale(0.325)`, children: [
|
|
13707
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M69.7141 207.3H0.908203L35.3243 172.936L69.7141 207.3Z", fill: "#6F32FF" }),
|
|
13708
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M138.441 0.96106V69.767L104.078 35.3508L138.441 0.96106Z", fill: "#17B581" }),
|
|
13709
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M138.415 138.547V207.352L104.051 172.936L138.415 138.547Z", fill: "#17B581" }),
|
|
13710
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M138.441 69.7406V0.96106L172.804 35.3772L138.441 69.767V69.7406Z", fill: "#17B581" }),
|
|
13711
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M69.6614 138.494V69.6879L104.025 104.104L69.6614 138.494Z", fill: "#15E99A" }),
|
|
13712
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M69.6615 69.7142V138.52L35.2981 104.104L69.6615 69.7142Z", fill: "#15E99A" }),
|
|
13713
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M138.467 207.379V138.573L172.831 172.989L138.467 207.379Z", fill: "#17B581" }),
|
|
13714
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M0.908203 0.908325H69.7141L35.298 35.2718L0.908203 0.908325Z", fill: "#6F32FF" }),
|
|
13715
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M207.22 207.3H138.415L172.831 172.936L207.22 207.3Z", fill: "#17B581" }),
|
|
13716
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M138.415 0.987427H207.22L172.804 35.3509L138.415 0.987427Z", fill: "#17B581" }),
|
|
13717
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M138.467 69.7143H69.6614L104.078 35.3508L138.467 69.7143Z", fill: "#17B581" }),
|
|
13718
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M69.635 138.494H138.441L104.025 172.857L69.635 138.494Z", fill: "#17B581" }),
|
|
13719
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M138.415 138.494H69.635L104.025 104.157L138.388 138.494H138.415Z", fill: "#15E99A" }),
|
|
13720
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M138.415 69.7142L104.051 104.051L69.6614 69.7142H138.441H138.415Z", fill: "#15E99A" })
|
|
13471
13721
|
] })
|
|
13472
13722
|
] })
|
|
13473
13723
|
]
|
|
@@ -13478,7 +13728,7 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13478
13728
|
};
|
|
13479
13729
|
|
|
13480
13730
|
// src/web/components/deposit-success-screen.tsx
|
|
13481
|
-
var
|
|
13731
|
+
var import_jsx_runtime133 = require("react/jsx-runtime");
|
|
13482
13732
|
function DepositSuccessScreen({
|
|
13483
13733
|
handleDone,
|
|
13484
13734
|
displayTicker,
|
|
@@ -13491,20 +13741,20 @@ function DepositSuccessScreen({
|
|
|
13491
13741
|
const isInstant = network === "lightning" || network === "spark";
|
|
13492
13742
|
const title = isInstant ? "Payment Received!" : "Deposit Detected!";
|
|
13493
13743
|
const subtitle = isInstant ? `Your ${displayTicker} has arrived via ${networkLabel}.` : `Incoming deposit detected via ${networkLabel}. Funds will be available after confirmation.`;
|
|
13494
|
-
return /* @__PURE__ */ (0,
|
|
13495
|
-
/* @__PURE__ */ (0,
|
|
13496
|
-
/* @__PURE__ */ (0,
|
|
13497
|
-
/* @__PURE__ */ (0,
|
|
13744
|
+
return /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("div", { className: "flex h-screen flex-col overflow-hidden bg-background bg-page-radial font-display text-foreground", children: /* @__PURE__ */ (0, import_jsx_runtime133.jsxs)("div", { className: "flex flex-1 flex-col items-center justify-center p-6 text-center", children: [
|
|
13745
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsxs)("div", { className: "relative mb-8", children: [
|
|
13746
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsx)("div", { className: "absolute inset-0 scale-150 animate-pulse rounded-full bg-secondary/25 blur-2xl" }),
|
|
13747
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsx)("div", { className: "relative flex size-20 items-center justify-center rounded-full bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card-hero shadow-glow-brand", children: /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(IconGlyph, { glyph: CheckCircle, className: "size-12 text-brand animate-in zoom-in-50 duration-500" }) })
|
|
13498
13748
|
] }),
|
|
13499
|
-
/* @__PURE__ */ (0,
|
|
13500
|
-
/* @__PURE__ */ (0,
|
|
13501
|
-
/* @__PURE__ */ (0,
|
|
13502
|
-
/* @__PURE__ */ (0,
|
|
13503
|
-
/* @__PURE__ */ (0,
|
|
13504
|
-
/* @__PURE__ */ (0,
|
|
13505
|
-
/* @__PURE__ */ (0,
|
|
13749
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsx)("h1", { className: "mb-2 text-headline font-bold text-gradient-brand", children: title }),
|
|
13750
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsx)("p", { className: "mb-8 max-w-[260px] text-caption leading-relaxed text-muted-foreground", children: subtitle }),
|
|
13751
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsxs)("div", { className: "mb-10 flex items-center gap-3 rounded-2xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card-hero px-4 py-3 shadow-card", children: [
|
|
13752
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsx)(AssetIcon, { ticker: displayTicker, size: 36 }),
|
|
13753
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsxs)("div", { className: "text-left", children: [
|
|
13754
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsx)("p", { className: "text-body font-bold text-foreground", children: displayTicker }),
|
|
13755
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsx)("p", { className: "text-caption text-foreground/55", children: selectedAsset?.name ?? displayTicker })
|
|
13506
13756
|
] }),
|
|
13507
|
-
/* @__PURE__ */ (0,
|
|
13757
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsxs)(
|
|
13508
13758
|
"div",
|
|
13509
13759
|
{
|
|
13510
13760
|
className: cn(
|
|
@@ -13514,27 +13764,27 @@ function DepositSuccessScreen({
|
|
|
13514
13764
|
),
|
|
13515
13765
|
children: [
|
|
13516
13766
|
net.icon,
|
|
13517
|
-
/* @__PURE__ */ (0,
|
|
13767
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsx)("span", { children: networkLabel })
|
|
13518
13768
|
]
|
|
13519
13769
|
}
|
|
13520
13770
|
)
|
|
13521
13771
|
] }),
|
|
13522
|
-
/* @__PURE__ */ (0,
|
|
13523
|
-
/* @__PURE__ */ (0,
|
|
13772
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsxs)(Button, { variant: "cta", size: "cta", onClick: handleDone, children: [
|
|
13773
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsx)(IconGlyph, { glyph: AccountBalanceWallet, className: "text-icon-lg" }),
|
|
13524
13774
|
"Back to Wallet"
|
|
13525
13775
|
] })
|
|
13526
13776
|
] }) });
|
|
13527
13777
|
}
|
|
13528
13778
|
|
|
13529
13779
|
// src/web/components/deposit-network-default-modal.tsx
|
|
13530
|
-
var
|
|
13780
|
+
var import_jsx_runtime134 = require("react/jsx-runtime");
|
|
13531
13781
|
var NETWORK_OPTIONS = {
|
|
13532
13782
|
RGB: {
|
|
13533
13783
|
network: "onchain",
|
|
13534
13784
|
account: "RGB",
|
|
13535
13785
|
label: "On-chain / Lightning",
|
|
13536
13786
|
description: "Classic Bitcoin address or Lightning invoice via the RLN node.",
|
|
13537
|
-
icon: /* @__PURE__ */ (0,
|
|
13787
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(OnchainNetworkIcon, { className: "size-5" }),
|
|
13538
13788
|
accentBg: "bg-network-bitcoin/10",
|
|
13539
13789
|
accentBorder: "border-network-bitcoin/30",
|
|
13540
13790
|
accentText: "text-network-bitcoin-fg"
|
|
@@ -13544,7 +13794,7 @@ var NETWORK_OPTIONS = {
|
|
|
13544
13794
|
account: "SPARK",
|
|
13545
13795
|
label: "Spark",
|
|
13546
13796
|
description: "Receive directly into your Spark account. Fast and free.",
|
|
13547
|
-
icon: /* @__PURE__ */ (0,
|
|
13797
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime134.jsx)("img", { src: "/icons/spark/Asterisk/Spark Asterisk White.svg", alt: "", className: "kui-mono-icon h-[18px]" }),
|
|
13548
13798
|
accentBg: "bg-info/10",
|
|
13549
13799
|
accentBorder: "border-info/30",
|
|
13550
13800
|
accentText: "text-info-fg"
|
|
@@ -13554,7 +13804,7 @@ var NETWORK_OPTIONS = {
|
|
|
13554
13804
|
account: "ARKADE",
|
|
13555
13805
|
label: "Arkade",
|
|
13556
13806
|
description: "Receive directly into your Arkade account. Low fees, near-instant settlement.",
|
|
13557
|
-
icon: /* @__PURE__ */ (0,
|
|
13807
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime134.jsx)("img", { src: "/icons/arkade/arkade-icon.svg", alt: "", className: "h-[18px]" }),
|
|
13558
13808
|
accentBg: "bg-network-arkade/10",
|
|
13559
13809
|
accentBorder: "border-network-arkade/30",
|
|
13560
13810
|
accentText: "text-network-arkade-fg"
|
|
@@ -13566,7 +13816,7 @@ var NETWORK_OPTIONS = {
|
|
|
13566
13816
|
account: "LIQUID",
|
|
13567
13817
|
label: "Liquid",
|
|
13568
13818
|
description: "Receive L-BTC or a Liquid asset (USDt) via a confidential Liquid address.",
|
|
13569
|
-
icon: /* @__PURE__ */ (0,
|
|
13819
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(LiquidNetworkIcon, { className: "h-[18px] w-[18px]" }),
|
|
13570
13820
|
accentBg: "bg-network-liquid/10",
|
|
13571
13821
|
accentBorder: "border-network-liquid/30",
|
|
13572
13822
|
accentText: "text-network-liquid-fg"
|
|
@@ -13581,20 +13831,20 @@ function DepositNetworkDefaultModal({
|
|
|
13581
13831
|
}) {
|
|
13582
13832
|
if (!open) return null;
|
|
13583
13833
|
const options = availableAccounts.map((id) => NETWORK_OPTIONS[id]).filter(Boolean);
|
|
13584
|
-
return /* @__PURE__ */ (0,
|
|
13585
|
-
/* @__PURE__ */ (0,
|
|
13586
|
-
/* @__PURE__ */ (0,
|
|
13587
|
-
/* @__PURE__ */ (0,
|
|
13588
|
-
/* @__PURE__ */ (0,
|
|
13834
|
+
return /* @__PURE__ */ (0, import_jsx_runtime134.jsx)("div", { className: "fixed inset-0 z-50 flex items-end justify-center bg-background/80 backdrop-blur-lg", children: /* @__PURE__ */ (0, import_jsx_runtime134.jsxs)("div", { className: "w-full space-y-4 rounded-t-2xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card-hero px-4 pb-7 pt-5 shadow-popover animate-in slide-in-from-bottom-4 duration-200", children: [
|
|
13835
|
+
/* @__PURE__ */ (0, import_jsx_runtime134.jsx)("div", { className: "-mt-1 mb-1 flex justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime134.jsx)("div", { className: "h-1 w-10 rounded-full bg-secondary/40" }) }),
|
|
13836
|
+
/* @__PURE__ */ (0, import_jsx_runtime134.jsxs)("div", { children: [
|
|
13837
|
+
/* @__PURE__ */ (0, import_jsx_runtime134.jsx)("p", { className: "text-body font-bold text-foreground", children: "Choose your default network" }),
|
|
13838
|
+
/* @__PURE__ */ (0, import_jsx_runtime134.jsxs)("p", { className: "mt-0.5 text-tiny text-foreground/55", children: [
|
|
13589
13839
|
"Pick how you would like to receive",
|
|
13590
13840
|
" ",
|
|
13591
|
-
/* @__PURE__ */ (0,
|
|
13841
|
+
/* @__PURE__ */ (0, import_jsx_runtime134.jsx)("span", { className: "font-semibold text-muted-foreground", children: assetTicker }),
|
|
13592
13842
|
" by default. You can always switch in the deposit screen."
|
|
13593
13843
|
] })
|
|
13594
13844
|
] }),
|
|
13595
|
-
/* @__PURE__ */ (0,
|
|
13845
|
+
/* @__PURE__ */ (0, import_jsx_runtime134.jsx)("div", { className: "space-y-2", children: options.map((option) => {
|
|
13596
13846
|
const isSuggested = option.account === suggestedAccount;
|
|
13597
|
-
return /* @__PURE__ */ (0,
|
|
13847
|
+
return /* @__PURE__ */ (0, import_jsx_runtime134.jsxs)(
|
|
13598
13848
|
"button",
|
|
13599
13849
|
{
|
|
13600
13850
|
type: "button",
|
|
@@ -13604,7 +13854,7 @@ function DepositNetworkDefaultModal({
|
|
|
13604
13854
|
isSuggested ? cn(option.accentBg, "shadow-glow-violet-soft ring-1 ring-inset ring-secondary/50") : "bg-muted/40 shadow-raised hover-gradient-violet"
|
|
13605
13855
|
),
|
|
13606
13856
|
children: [
|
|
13607
|
-
/* @__PURE__ */ (0,
|
|
13857
|
+
/* @__PURE__ */ (0, import_jsx_runtime134.jsx)(
|
|
13608
13858
|
"div",
|
|
13609
13859
|
{
|
|
13610
13860
|
className: cn(
|
|
@@ -13615,10 +13865,10 @@ function DepositNetworkDefaultModal({
|
|
|
13615
13865
|
children: option.icon
|
|
13616
13866
|
}
|
|
13617
13867
|
),
|
|
13618
|
-
/* @__PURE__ */ (0,
|
|
13619
|
-
/* @__PURE__ */ (0,
|
|
13620
|
-
/* @__PURE__ */ (0,
|
|
13621
|
-
isSuggested && /* @__PURE__ */ (0,
|
|
13868
|
+
/* @__PURE__ */ (0, import_jsx_runtime134.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
13869
|
+
/* @__PURE__ */ (0, import_jsx_runtime134.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
13870
|
+
/* @__PURE__ */ (0, import_jsx_runtime134.jsx)("span", { className: cn("text-caption font-bold", isSuggested ? option.accentText : "text-foreground"), children: option.label }),
|
|
13871
|
+
isSuggested && /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(
|
|
13622
13872
|
"span",
|
|
13623
13873
|
{
|
|
13624
13874
|
className: cn(
|
|
@@ -13631,9 +13881,9 @@ function DepositNetworkDefaultModal({
|
|
|
13631
13881
|
}
|
|
13632
13882
|
)
|
|
13633
13883
|
] }),
|
|
13634
|
-
/* @__PURE__ */ (0,
|
|
13884
|
+
/* @__PURE__ */ (0, import_jsx_runtime134.jsx)("p", { className: "mt-0.5 text-xxs leading-snug text-foreground/55", children: option.description })
|
|
13635
13885
|
] }),
|
|
13636
|
-
/* @__PURE__ */ (0,
|
|
13886
|
+
/* @__PURE__ */ (0, import_jsx_runtime134.jsx)(
|
|
13637
13887
|
IconGlyph,
|
|
13638
13888
|
{
|
|
13639
13889
|
glyph: ChevronRight,
|
|
@@ -13653,7 +13903,7 @@ function DepositNetworkDefaultModal({
|
|
|
13653
13903
|
|
|
13654
13904
|
// src/web/components/btc-unified-receive.tsx
|
|
13655
13905
|
var import_react42 = require("react");
|
|
13656
|
-
var
|
|
13906
|
+
var import_jsx_runtime135 = require("react/jsx-runtime");
|
|
13657
13907
|
function formatSatsForRow(value) {
|
|
13658
13908
|
if (!value || value <= 0 || !Number.isFinite(value)) return null;
|
|
13659
13909
|
return `${value.toLocaleString("en-US")} sats`;
|
|
@@ -13687,14 +13937,14 @@ function BtcUnifiedReceive({
|
|
|
13687
13937
|
setInvoiceStatus(null);
|
|
13688
13938
|
setAccountReceiveResult(null);
|
|
13689
13939
|
};
|
|
13690
|
-
return /* @__PURE__ */ (0,
|
|
13691
|
-
/* @__PURE__ */ (0,
|
|
13692
|
-
/* @__PURE__ */ (0,
|
|
13693
|
-
/* @__PURE__ */ (0,
|
|
13694
|
-
isInvoicePaid && /* @__PURE__ */ (0,
|
|
13940
|
+
return /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "space-y-3 animate-in fade-in zoom-in-95 duration-300", children: [
|
|
13941
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "flex flex-col items-center gap-3", children: [
|
|
13942
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "relative flex flex-col items-center p-2", children: [
|
|
13943
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsx)(QrCode, { value: accountReceiveResult.qrValue, size: 200, tone: "onDark" }),
|
|
13944
|
+
isInvoicePaid && /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(PaidOverlay, {})
|
|
13695
13945
|
] }),
|
|
13696
|
-
/* @__PURE__ */ (0,
|
|
13697
|
-
/* @__PURE__ */ (0,
|
|
13946
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "flex items-center justify-center gap-2.5", children: [
|
|
13947
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsx)(
|
|
13698
13948
|
GlyphButton,
|
|
13699
13949
|
{
|
|
13700
13950
|
label: `Copy ${accountReceiveResult.qrLabel}`,
|
|
@@ -13704,8 +13954,8 @@ function BtcUnifiedReceive({
|
|
|
13704
13954
|
onClick: () => void copyToClipboard(accountReceiveResult.qrValue)
|
|
13705
13955
|
}
|
|
13706
13956
|
),
|
|
13707
|
-
showRegenerate && /* @__PURE__ */ (0,
|
|
13708
|
-
/* @__PURE__ */ (0,
|
|
13957
|
+
showRegenerate && /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(GlyphButton, { label: "New address", variant: "surface", size: "lg", icon: Refresh, onClick: handleNewAddress }),
|
|
13958
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsx)(
|
|
13709
13959
|
GlyphButton,
|
|
13710
13960
|
{
|
|
13711
13961
|
label: "Edit amount and description",
|
|
@@ -13717,7 +13967,7 @@ function BtcUnifiedReceive({
|
|
|
13717
13967
|
)
|
|
13718
13968
|
] })
|
|
13719
13969
|
] }),
|
|
13720
|
-
invoiceStatus && /* @__PURE__ */ (0,
|
|
13970
|
+
invoiceStatus && /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(
|
|
13721
13971
|
InvoiceStatusBanner,
|
|
13722
13972
|
{
|
|
13723
13973
|
isInvoicePending,
|
|
@@ -13726,11 +13976,11 @@ function BtcUnifiedReceive({
|
|
|
13726
13976
|
invoiceStatus
|
|
13727
13977
|
}
|
|
13728
13978
|
),
|
|
13729
|
-
/* @__PURE__ */ (0,
|
|
13730
|
-
/* @__PURE__ */ (0,
|
|
13979
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "space-y-1.5", children: [
|
|
13980
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsx)("p", { className: cn("text-muted-foreground", eyebrow), children: "Available Addresses" }),
|
|
13731
13981
|
accountReceiveResult.addresses.map((address) => {
|
|
13732
13982
|
const network = NETWORK_CONFIG[address.network];
|
|
13733
|
-
return /* @__PURE__ */ (0,
|
|
13983
|
+
return /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)(
|
|
13734
13984
|
"div",
|
|
13735
13985
|
{
|
|
13736
13986
|
className: cn(
|
|
@@ -13740,35 +13990,35 @@ function BtcUnifiedReceive({
|
|
|
13740
13990
|
style: { borderLeftWidth: 3, borderLeftColor: network.color },
|
|
13741
13991
|
onClick: () => void copyToClipboard(address.value),
|
|
13742
13992
|
children: [
|
|
13743
|
-
/* @__PURE__ */ (0,
|
|
13744
|
-
/* @__PURE__ */ (0,
|
|
13745
|
-
/* @__PURE__ */ (0,
|
|
13746
|
-
/* @__PURE__ */ (0,
|
|
13993
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsx)("div", { className: cn("flex size-5 flex-shrink-0 items-center justify-center rounded-md", network.bg), children: network.icon }),
|
|
13994
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
13995
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "flex items-center gap-1.5", children: [
|
|
13996
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsx)("p", { className: cn(eyebrow, network.text), children: address.label }),
|
|
13747
13997
|
(() => {
|
|
13748
13998
|
const amountLabel = formatSatsForRow(address.amountSats);
|
|
13749
|
-
return amountLabel ? /* @__PURE__ */ (0,
|
|
13999
|
+
return amountLabel ? /* @__PURE__ */ (0, import_jsx_runtime135.jsx)("span", { className: "rounded-full bg-secondary/15 px-1.5 py-0.5 text-tiny font-bold tabular-nums text-secondary-content", children: amountLabel }) : null;
|
|
13750
14000
|
})()
|
|
13751
14001
|
] }),
|
|
13752
|
-
/* @__PURE__ */ (0,
|
|
14002
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsx)("p", { className: "mt-0.5 truncate font-mono text-tiny text-muted-foreground", children: address.value.length > 50 ? `${address.value.slice(0, 18)}...${address.value.slice(-14)}` : address.value })
|
|
13753
14003
|
] }),
|
|
13754
|
-
/* @__PURE__ */ (0,
|
|
14004
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsx)(CopyIcon, { copied: copied === address.value })
|
|
13755
14005
|
]
|
|
13756
14006
|
},
|
|
13757
14007
|
address.network
|
|
13758
14008
|
);
|
|
13759
14009
|
})
|
|
13760
14010
|
] }),
|
|
13761
|
-
/* @__PURE__ */ (0,
|
|
14011
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsx)(
|
|
13762
14012
|
BottomSheet,
|
|
13763
14013
|
{
|
|
13764
14014
|
open: showEdit,
|
|
13765
14015
|
title: "Edit request",
|
|
13766
|
-
icon: /* @__PURE__ */ (0,
|
|
14016
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(IconGlyph, { glyph: Edit, size: "md" }),
|
|
13767
14017
|
onClose: () => setShowEdit(false),
|
|
13768
|
-
children: /* @__PURE__ */ (0,
|
|
13769
|
-
/* @__PURE__ */ (0,
|
|
13770
|
-
/* @__PURE__ */ (0,
|
|
13771
|
-
/* @__PURE__ */ (0,
|
|
14018
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "space-y-4", children: [
|
|
14019
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "flex flex-col gap-2", children: [
|
|
14020
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsx)(Label3, { htmlFor: amountId, children: "Amount (optional)" }),
|
|
14021
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsx)(
|
|
13772
14022
|
"input",
|
|
13773
14023
|
{
|
|
13774
14024
|
id: amountId,
|
|
@@ -13780,14 +14030,14 @@ function BtcUnifiedReceive({
|
|
|
13780
14030
|
inputMode: "decimal"
|
|
13781
14031
|
}
|
|
13782
14032
|
),
|
|
13783
|
-
amount && loading && /* @__PURE__ */ (0,
|
|
13784
|
-
/* @__PURE__ */ (0,
|
|
14033
|
+
amount && loading && /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("p", { className: "flex items-center gap-1 text-xxs text-warning-fg/70", children: [
|
|
14034
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsx)(IconGlyph, { glyph: ProgressActivity, className: "animate-spin text-icon-xxs" }),
|
|
13785
14035
|
"Updating invoice..."
|
|
13786
14036
|
] })
|
|
13787
14037
|
] }),
|
|
13788
|
-
onDescriptionChange && /* @__PURE__ */ (0,
|
|
13789
|
-
/* @__PURE__ */ (0,
|
|
13790
|
-
/* @__PURE__ */ (0,
|
|
14038
|
+
onDescriptionChange && /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "flex flex-col gap-2", children: [
|
|
14039
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsx)(Label3, { htmlFor: descriptionId, children: "Description (optional)" }),
|
|
14040
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsx)(
|
|
13791
14041
|
"input",
|
|
13792
14042
|
{
|
|
13793
14043
|
id: descriptionId,
|
|
@@ -13799,7 +14049,7 @@ function BtcUnifiedReceive({
|
|
|
13799
14049
|
}
|
|
13800
14050
|
)
|
|
13801
14051
|
] }),
|
|
13802
|
-
/* @__PURE__ */ (0,
|
|
14052
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsx)(Button, { variant: "cta", className: "w-full", onClick: () => setShowEdit(false), children: "Done" })
|
|
13803
14053
|
] })
|
|
13804
14054
|
}
|
|
13805
14055
|
)
|
|
@@ -13808,7 +14058,7 @@ function BtcUnifiedReceive({
|
|
|
13808
14058
|
|
|
13809
14059
|
// src/web/components/deposit-generated-view.tsx
|
|
13810
14060
|
var import_react43 = require("react");
|
|
13811
|
-
var
|
|
14061
|
+
var import_jsx_runtime136 = require("react/jsx-runtime");
|
|
13812
14062
|
function parseAssetAmount(amountString, asset) {
|
|
13813
14063
|
const value = Number(amountString);
|
|
13814
14064
|
if (!Number.isFinite(value)) return 0;
|
|
@@ -13851,10 +14101,10 @@ function DepositGeneratedView({
|
|
|
13851
14101
|
}) {
|
|
13852
14102
|
const btcAmountId = (0, import_react43.useId)();
|
|
13853
14103
|
const assetAmountId = (0, import_react43.useId)();
|
|
13854
|
-
return /* @__PURE__ */ (0,
|
|
13855
|
-
(network === "lightning" || network === "arkade" && arkSubMode === "ark") && isBtc && /* @__PURE__ */ (0,
|
|
13856
|
-
/* @__PURE__ */ (0,
|
|
13857
|
-
/* @__PURE__ */ (0,
|
|
14104
|
+
return /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "space-y-3 animate-in fade-in zoom-in-95 duration-300", children: [
|
|
14105
|
+
(network === "lightning" || network === "arkade" && arkSubMode === "ark") && isBtc && /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "flex flex-col gap-2 rounded-xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card p-2.5 shadow-card", children: [
|
|
14106
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsx)("div", { className: "flex items-center justify-between px-1", children: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(Label3, { htmlFor: btcAmountId, children: "Specify amount (optional)" }) }),
|
|
14107
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsx)(
|
|
13858
14108
|
"input",
|
|
13859
14109
|
{
|
|
13860
14110
|
id: btcAmountId,
|
|
@@ -13866,16 +14116,16 @@ function DepositGeneratedView({
|
|
|
13866
14116
|
inputMode: "decimal"
|
|
13867
14117
|
}
|
|
13868
14118
|
),
|
|
13869
|
-
amount && /* @__PURE__ */ (0,
|
|
13870
|
-
/* @__PURE__ */ (0,
|
|
14119
|
+
amount && /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("p", { className: "text-xxs text-warning-fg/70", children: loading ? /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("span", { className: "flex items-center gap-1", children: [
|
|
14120
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsx)(IconGlyph, { glyph: ProgressActivity, className: "animate-spin text-icon-xxs" }),
|
|
13871
14121
|
"Updating ",
|
|
13872
14122
|
network === "arkade" ? "URI" : "invoice",
|
|
13873
14123
|
"..."
|
|
13874
14124
|
] }) : network === "arkade" ? `Unified URI for ${amount} ${getUnitLabel()}` : `Invoice for ${amount} ${getUnitLabel()}` })
|
|
13875
14125
|
] }),
|
|
13876
|
-
network === "lightning" && !isBtc && /* @__PURE__ */ (0,
|
|
13877
|
-
/* @__PURE__ */ (0,
|
|
13878
|
-
/* @__PURE__ */ (0,
|
|
14126
|
+
network === "lightning" && !isBtc && /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "flex flex-col gap-2 rounded-xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card p-2.5 shadow-card", children: [
|
|
14127
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsx)("div", { className: "flex items-center justify-between px-1", children: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(Label3, { htmlFor: assetAmountId, children: "Specify amount (optional)" }) }),
|
|
14128
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsx)(
|
|
13879
14129
|
"input",
|
|
13880
14130
|
{
|
|
13881
14131
|
id: assetAmountId,
|
|
@@ -13887,25 +14137,25 @@ function DepositGeneratedView({
|
|
|
13887
14137
|
inputMode: "decimal"
|
|
13888
14138
|
}
|
|
13889
14139
|
),
|
|
13890
|
-
amount && /* @__PURE__ */ (0,
|
|
13891
|
-
/* @__PURE__ */ (0,
|
|
14140
|
+
amount && /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("p", { className: "text-xxs text-warning-fg/70", children: loading ? /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("span", { className: "flex items-center gap-1", children: [
|
|
14141
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsx)(IconGlyph, { glyph: ProgressActivity, className: "animate-spin text-icon-xxs" }),
|
|
13892
14142
|
"Updating invoice..."
|
|
13893
14143
|
] }) : `Invoice for ${amount} ${getUnitLabel()}` }),
|
|
13894
|
-
amount && maxDepositAmount > 0 && parseAssetAmount(amount, selectedAsset) > maxDepositAmount && /* @__PURE__ */ (0,
|
|
14144
|
+
amount && maxDepositAmount > 0 && parseAssetAmount(amount, selectedAsset) > maxDepositAmount && /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("p", { className: "rounded-lg bg-danger/10 px-2.5 py-1.5 text-xxs text-danger-fg", children: [
|
|
13895
14145
|
"Exceeds max: ",
|
|
13896
14146
|
formatAssetAmount(maxDepositAmount, selectedAsset),
|
|
13897
14147
|
" ",
|
|
13898
14148
|
getUnitLabel()
|
|
13899
14149
|
] })
|
|
13900
14150
|
] }),
|
|
13901
|
-
/* @__PURE__ */ (0,
|
|
13902
|
-
/* @__PURE__ */ (0,
|
|
14151
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "flex flex-col items-center gap-3", children: [
|
|
14152
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsxs)(
|
|
13903
14153
|
"div",
|
|
13904
14154
|
{
|
|
13905
14155
|
className: "relative flex flex-col items-center rounded-2xl bg-white p-3.5 transition-all",
|
|
13906
14156
|
style: net.qrGlow,
|
|
13907
14157
|
children: [
|
|
13908
|
-
showQrNetworkBadge && network !== "spark" && network !== "arkade" && /* @__PURE__ */ (0,
|
|
14158
|
+
showQrNetworkBadge && network !== "spark" && network !== "arkade" && /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)(
|
|
13909
14159
|
"div",
|
|
13910
14160
|
{
|
|
13911
14161
|
className: cn(
|
|
@@ -13914,21 +14164,21 @@ function DepositGeneratedView({
|
|
|
13914
14164
|
),
|
|
13915
14165
|
children: [
|
|
13916
14166
|
net.icon,
|
|
13917
|
-
/* @__PURE__ */ (0,
|
|
14167
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsx)("span", { children: net.label })
|
|
13918
14168
|
]
|
|
13919
14169
|
}
|
|
13920
14170
|
),
|
|
13921
|
-
/* @__PURE__ */ (0,
|
|
13922
|
-
isInvoicePaid && /* @__PURE__ */ (0,
|
|
14171
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsx)(QrCode, { value: address, size: 188 }),
|
|
14172
|
+
isInvoicePaid && /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(PaidOverlay, {}),
|
|
13923
14173
|
loading && !isInvoicePaid && // Loading scrim — sits over the QR while a fresh address/invoice
|
|
13924
14174
|
// is being fetched (e.g. after the New Address button).
|
|
13925
|
-
/* @__PURE__ */ (0,
|
|
14175
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsx)("div", { className: "absolute inset-0 flex items-center justify-center rounded-2xl bg-foreground/80 backdrop-blur-sm", children: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(IconGlyph, { glyph: ProgressActivity, className: "animate-spin text-icon-3xl text-network-bitcoin-fg" }) })
|
|
13926
14176
|
]
|
|
13927
14177
|
}
|
|
13928
14178
|
),
|
|
13929
14179
|
(() => {
|
|
13930
14180
|
const isAddressCopied = copied === address;
|
|
13931
|
-
return /* @__PURE__ */ (0,
|
|
14181
|
+
return /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)(
|
|
13932
14182
|
"button",
|
|
13933
14183
|
{
|
|
13934
14184
|
type: "button",
|
|
@@ -13942,14 +14192,14 @@ function DepositGeneratedView({
|
|
|
13942
14192
|
void copyToClipboard(address);
|
|
13943
14193
|
},
|
|
13944
14194
|
children: [
|
|
13945
|
-
/* @__PURE__ */ (0,
|
|
14195
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsx)(IconGlyph, { glyph: isAddressCopied ? Check : ContentCopy, size: "xs" }),
|
|
13946
14196
|
isAddressCopied ? "Copied" : network === "lightning" ? "Copy Invoice" : "Copy Address"
|
|
13947
14197
|
]
|
|
13948
14198
|
}
|
|
13949
14199
|
);
|
|
13950
14200
|
})()
|
|
13951
14201
|
] }),
|
|
13952
|
-
network === "lightning" && invoiceStatus && /* @__PURE__ */ (0,
|
|
14202
|
+
network === "lightning" && invoiceStatus && /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(
|
|
13953
14203
|
InvoiceStatusBanner,
|
|
13954
14204
|
{
|
|
13955
14205
|
isInvoicePending,
|
|
@@ -13958,7 +14208,7 @@ function DepositGeneratedView({
|
|
|
13958
14208
|
invoiceStatus
|
|
13959
14209
|
}
|
|
13960
14210
|
),
|
|
13961
|
-
/* @__PURE__ */ (0,
|
|
14211
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsxs)(
|
|
13962
14212
|
"div",
|
|
13963
14213
|
{
|
|
13964
14214
|
"data-testid": "deposit-generated-address",
|
|
@@ -13969,16 +14219,16 @@ function DepositGeneratedView({
|
|
|
13969
14219
|
),
|
|
13970
14220
|
onClick: () => void copyToClipboard(address),
|
|
13971
14221
|
children: [
|
|
13972
|
-
/* @__PURE__ */ (0,
|
|
13973
|
-
/* @__PURE__ */ (0,
|
|
13974
|
-
/* @__PURE__ */ (0,
|
|
13975
|
-
/* @__PURE__ */ (0,
|
|
14222
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsx)("div", { className: cn("flex size-5 flex-shrink-0 items-center justify-center rounded-md", net.bg), children: net.icon }),
|
|
14223
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
14224
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsx)("p", { className: cn(eyebrow, net.text), children: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("span", { "data-testid": "deposit-address-label", children: addressLabel }) }),
|
|
14225
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsx)("p", { className: "mt-0.5 truncate font-mono text-tiny text-muted-foreground", children: address.length > 50 ? `${address.slice(0, 18)}...${address.slice(-14)}` : address })
|
|
13976
14226
|
] }),
|
|
13977
|
-
/* @__PURE__ */ (0,
|
|
14227
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsx)(CopyIcon, { copied: copied === address })
|
|
13978
14228
|
]
|
|
13979
14229
|
}
|
|
13980
14230
|
),
|
|
13981
|
-
recipientId && /* @__PURE__ */ (0,
|
|
14231
|
+
recipientId && /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)(
|
|
13982
14232
|
"div",
|
|
13983
14233
|
{
|
|
13984
14234
|
className: cn(
|
|
@@ -13987,16 +14237,16 @@ function DepositGeneratedView({
|
|
|
13987
14237
|
),
|
|
13988
14238
|
onClick: () => void copyToClipboard(recipientId),
|
|
13989
14239
|
children: [
|
|
13990
|
-
/* @__PURE__ */ (0,
|
|
13991
|
-
/* @__PURE__ */ (0,
|
|
13992
|
-
/* @__PURE__ */ (0,
|
|
13993
|
-
/* @__PURE__ */ (0,
|
|
14240
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsx)("div", { className: "flex size-5 flex-shrink-0 items-center justify-center rounded-md bg-primary/15", children: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(IconGlyph, { glyph: Person, size: "xs", className: "text-brand" }) }),
|
|
14241
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
14242
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsx)("p", { className: cn("text-brand", eyebrow), children: "Recipient ID" }),
|
|
14243
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsx)("p", { className: "mt-0.5 truncate font-mono text-tiny text-muted-foreground", children: recipientId.length > 50 ? `${recipientId.slice(0, 18)}...${recipientId.slice(-14)}` : recipientId })
|
|
13994
14244
|
] }),
|
|
13995
|
-
/* @__PURE__ */ (0,
|
|
14245
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsx)(CopyIcon, { copied: copied === recipientId })
|
|
13996
14246
|
]
|
|
13997
14247
|
}
|
|
13998
14248
|
),
|
|
13999
|
-
showRegenerate && /* @__PURE__ */ (0,
|
|
14249
|
+
showRegenerate && /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("div", { className: "flex justify-center pt-1", children: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(
|
|
14000
14250
|
GlyphButton,
|
|
14001
14251
|
{
|
|
14002
14252
|
label: `New ${network === "lightning" ? "invoice" : "address"}`,
|
|
@@ -14012,7 +14262,7 @@ function DepositGeneratedView({
|
|
|
14012
14262
|
setAmount("");
|
|
14013
14263
|
setInvoiceStatus(null);
|
|
14014
14264
|
},
|
|
14015
|
-
icon: /* @__PURE__ */ (0,
|
|
14265
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(IconGlyph, { glyph: Refresh, "aria-hidden": "true", className: cn(loading && "animate-spin motion-reduce:animate-none") })
|
|
14016
14266
|
}
|
|
14017
14267
|
) })
|
|
14018
14268
|
] });
|
|
@@ -14020,7 +14270,7 @@ function DepositGeneratedView({
|
|
|
14020
14270
|
|
|
14021
14271
|
// src/web/components/deposit-pre-generation.tsx
|
|
14022
14272
|
var import_react44 = require("react");
|
|
14023
|
-
var
|
|
14273
|
+
var import_jsx_runtime137 = require("react/jsx-runtime");
|
|
14024
14274
|
var ACCOUNT_TITLES = {
|
|
14025
14275
|
RGB: "RGB & Lightning",
|
|
14026
14276
|
SPARK: "Spark",
|
|
@@ -14068,58 +14318,58 @@ function DepositPreGeneration({
|
|
|
14068
14318
|
const amountId = (0, import_react44.useId)();
|
|
14069
14319
|
const method = METHOD_META2[currentMethod];
|
|
14070
14320
|
const isRgbOnchain = network === "onchain" && !isBtc;
|
|
14071
|
-
return /* @__PURE__ */ (0,
|
|
14072
|
-
showReceiveSummary && /* @__PURE__ */ (0,
|
|
14073
|
-
/* @__PURE__ */ (0,
|
|
14074
|
-
/* @__PURE__ */ (0,
|
|
14075
|
-
/* @__PURE__ */ (0,
|
|
14076
|
-
/* @__PURE__ */ (0,
|
|
14077
|
-
/* @__PURE__ */ (0,
|
|
14321
|
+
return /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "space-y-3", children: [
|
|
14322
|
+
showReceiveSummary && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "rounded-2xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card p-3 shadow-card", children: [
|
|
14323
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: cn("text-muted-foreground", eyebrow), children: "Receive Summary" }),
|
|
14324
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "mt-2 grid grid-cols-1 gap-2 text-caption", children: [
|
|
14325
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [
|
|
14326
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "text-foreground/55", children: "Asset" }),
|
|
14327
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "font-bold text-foreground", children: selectedAsset?.ticker ?? (isBtc ? "BTC" : "Asset") })
|
|
14078
14328
|
] }),
|
|
14079
|
-
/* @__PURE__ */ (0,
|
|
14080
|
-
/* @__PURE__ */ (0,
|
|
14081
|
-
/* @__PURE__ */ (0,
|
|
14329
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [
|
|
14330
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "text-foreground/55", children: "Destination account" }),
|
|
14331
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "font-bold text-foreground", children: ACCOUNT_TITLES[selectedAccount] })
|
|
14082
14332
|
] }),
|
|
14083
|
-
/* @__PURE__ */ (0,
|
|
14084
|
-
/* @__PURE__ */ (0,
|
|
14085
|
-
/* @__PURE__ */ (0,
|
|
14333
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [
|
|
14334
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "text-foreground/55", children: "Transfer method" }),
|
|
14335
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "font-bold text-foreground", children: method.label })
|
|
14086
14336
|
] }),
|
|
14087
|
-
/* @__PURE__ */ (0,
|
|
14337
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: "text-tiny text-foreground/55", children: method.summary })
|
|
14088
14338
|
] })
|
|
14089
14339
|
] }),
|
|
14090
|
-
channelsLoading && selectedAccount === "RGB" && currentMethod === "lightning" && !isBtc && /* @__PURE__ */ (0,
|
|
14091
|
-
/* @__PURE__ */ (0,
|
|
14092
|
-
/* @__PURE__ */ (0,
|
|
14340
|
+
channelsLoading && selectedAccount === "RGB" && currentMethod === "lightning" && !isBtc && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex items-center gap-2.5 rounded-xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card p-3 shadow-card", children: [
|
|
14341
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(IconGlyph, { glyph: ProgressActivity, className: "animate-spin text-icon-lg text-secondary-content" }),
|
|
14342
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "text-caption font-medium text-foreground/60", children: "Checking channel availability..." })
|
|
14093
14343
|
] }),
|
|
14094
|
-
showChannelWarning && /* @__PURE__ */ (0,
|
|
14095
|
-
/* @__PURE__ */ (0,
|
|
14096
|
-
/* @__PURE__ */ (0,
|
|
14344
|
+
showChannelWarning && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(AlertBanner, { variant: "warning", children: [
|
|
14345
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: "mb-0.5 text-caption font-bold text-warning-fg", children: "No Lightning Channels" }),
|
|
14346
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: "text-tiny text-warning-fg/70", children: "Only on-chain deposits are available." })
|
|
14097
14347
|
] }),
|
|
14098
|
-
showLiquidityWarning && /* @__PURE__ */ (0,
|
|
14099
|
-
/* @__PURE__ */ (0,
|
|
14100
|
-
/* @__PURE__ */ (0,
|
|
14348
|
+
showLiquidityWarning && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(AlertBanner, { variant: "warning", children: [
|
|
14349
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: "mb-0.5 text-caption font-bold text-warning-fg", children: "No Inbound Liquidity" }),
|
|
14350
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("p", { className: "text-tiny text-warning-fg/70", children: [
|
|
14101
14351
|
"No channels with inbound capacity for ",
|
|
14102
14352
|
selectedAsset?.ticker ?? "this asset",
|
|
14103
14353
|
"."
|
|
14104
14354
|
] })
|
|
14105
14355
|
] }),
|
|
14106
|
-
isAutoGenerate && loading && /* @__PURE__ */ (0,
|
|
14107
|
-
/* @__PURE__ */ (0,
|
|
14108
|
-
/* @__PURE__ */ (0,
|
|
14109
|
-
/* @__PURE__ */ (0,
|
|
14356
|
+
isAutoGenerate && loading && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex flex-col items-center gap-4 py-10", children: [
|
|
14357
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("div", { className: cn("flex size-16 items-center justify-center rounded-2xl shadow-raised", net.bg), children: /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(IconGlyph, { glyph: ProgressActivity, className: cn("animate-spin text-icon-4xl", net.text) }) }),
|
|
14358
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "space-y-1 text-center", children: [
|
|
14359
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("p", { className: "text-caption font-bold text-muted-foreground", children: [
|
|
14110
14360
|
"Generating ",
|
|
14111
14361
|
network === "lightning" ? "invoice" : "address",
|
|
14112
14362
|
"..."
|
|
14113
14363
|
] }),
|
|
14114
|
-
/* @__PURE__ */ (0,
|
|
14364
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("p", { className: "text-caption text-foreground/55", children: [
|
|
14115
14365
|
net.label,
|
|
14116
14366
|
" network"
|
|
14117
14367
|
] })
|
|
14118
14368
|
] })
|
|
14119
14369
|
] }),
|
|
14120
|
-
isRgbOnchain && isNewRgbAsset && setNewAssetId && /* @__PURE__ */ (0,
|
|
14121
|
-
/* @__PURE__ */ (0,
|
|
14122
|
-
/* @__PURE__ */ (0,
|
|
14370
|
+
isRgbOnchain && isNewRgbAsset && setNewAssetId && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex flex-col gap-2", children: [
|
|
14371
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(Label3, { htmlFor: assetIdInputId, children: "RGB Asset ID - Optional" }),
|
|
14372
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(
|
|
14123
14373
|
"input",
|
|
14124
14374
|
{
|
|
14125
14375
|
id: assetIdInputId,
|
|
@@ -14132,15 +14382,15 @@ function DepositPreGeneration({
|
|
|
14132
14382
|
className: "w-full rounded-xl bg-card/55 bg-gradient-card ring-1 ring-inset ring-secondary/15 hover:ring-secondary/35 px-3 py-2.5 font-mono text-caption text-foreground shadow-inner transition-all placeholder:text-muted-foreground focus:ring-primary/50 focus:shadow-glow-primary-soft focus:outline-none"
|
|
14133
14383
|
}
|
|
14134
14384
|
),
|
|
14135
|
-
/* @__PURE__ */ (0,
|
|
14385
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: "text-xxs text-foreground/55", children: "Enter a specific asset ID to receive it, or leave empty to accept any RGB asset to this invoice." })
|
|
14136
14386
|
] }),
|
|
14137
|
-
isRgbOnchain && /* @__PURE__ */ (0,
|
|
14138
|
-
/* @__PURE__ */ (0,
|
|
14139
|
-
/* @__PURE__ */ (0,
|
|
14140
|
-
/* @__PURE__ */ (0,
|
|
14141
|
-
/* @__PURE__ */ (0,
|
|
14387
|
+
isRgbOnchain && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "space-y-2.5 rounded-xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card p-3 shadow-card", children: [
|
|
14388
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [
|
|
14389
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
14390
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("h4", { className: "text-caption font-bold text-foreground", children: usePrivacy ? "Blinded receive" : "Witness receive" }),
|
|
14391
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: "mt-0.5 text-xxs text-muted-foreground", children: usePrivacy ? "Private - recommended" : "Simpler - less private" })
|
|
14142
14392
|
] }),
|
|
14143
|
-
/* @__PURE__ */ (0,
|
|
14393
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(
|
|
14144
14394
|
"button",
|
|
14145
14395
|
{
|
|
14146
14396
|
type: "button",
|
|
@@ -14150,7 +14400,7 @@ function DepositPreGeneration({
|
|
|
14150
14400
|
usePrivacy ? "bg-primary bg-gradient-primary shadow-glow-primary-soft" : "bg-foreground/10"
|
|
14151
14401
|
),
|
|
14152
14402
|
onClick: () => setUsePrivacy(!usePrivacy),
|
|
14153
|
-
children: /* @__PURE__ */ (0,
|
|
14403
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(
|
|
14154
14404
|
"span",
|
|
14155
14405
|
{
|
|
14156
14406
|
className: cn(
|
|
@@ -14162,8 +14412,8 @@ function DepositPreGeneration({
|
|
|
14162
14412
|
}
|
|
14163
14413
|
)
|
|
14164
14414
|
] }),
|
|
14165
|
-
/* @__PURE__ */ (0,
|
|
14166
|
-
usePrivacy && colorableUtxoCount !== void 0 && /* @__PURE__ */ (0,
|
|
14415
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: "text-tiny leading-relaxed text-foreground/55", children: usePrivacy ? "Blinded: the sender never sees which UTXO you receive into. Spends one of your colorable UTXOs as the receiving slot." : "Witness: the sender creates the receiving UTXO for you. No colorable UTXO needed, but the sender sees the receiving output." }),
|
|
14416
|
+
usePrivacy && colorableUtxoCount !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(
|
|
14167
14417
|
"div",
|
|
14168
14418
|
{
|
|
14169
14419
|
className: cn(
|
|
@@ -14171,26 +14421,26 @@ function DepositPreGeneration({
|
|
|
14171
14421
|
colorableUtxoCount > 0 ? "bg-success/10 text-success-fg/80" : "bg-warning/10 text-warning-fg/80"
|
|
14172
14422
|
),
|
|
14173
14423
|
children: [
|
|
14174
|
-
/* @__PURE__ */ (0,
|
|
14175
|
-
/* @__PURE__ */ (0,
|
|
14424
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "font-medium", children: "Available colorable UTXOs" }),
|
|
14425
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "font-bold tabular-nums", children: colorableUtxoCount })
|
|
14176
14426
|
]
|
|
14177
14427
|
}
|
|
14178
14428
|
),
|
|
14179
|
-
usePrivacy && colorableUtxoCount === 0 && /* @__PURE__ */ (0,
|
|
14429
|
+
usePrivacy && colorableUtxoCount === 0 && /* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: "text-tiny text-warning-fg/70", children: "None available \u2014 create a colorable UTXO below to receive privately, or switch off privacy to use a witness receive." })
|
|
14180
14430
|
] }),
|
|
14181
|
-
network === "onchain" && !isBtc && /* @__PURE__ */ (0,
|
|
14182
|
-
/* @__PURE__ */ (0,
|
|
14183
|
-
/* @__PURE__ */ (0,
|
|
14431
|
+
network === "onchain" && !isBtc && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex flex-col gap-2", children: [
|
|
14432
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex items-center justify-between", children: [
|
|
14433
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(Label3, { htmlFor: amountId, children: [
|
|
14184
14434
|
"Amount (",
|
|
14185
14435
|
getUnitLabel(),
|
|
14186
14436
|
") - Optional"
|
|
14187
14437
|
] }),
|
|
14188
|
-
selectedAsset && /* @__PURE__ */ (0,
|
|
14438
|
+
selectedAsset && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("span", { className: "text-xxs text-foreground/55", children: [
|
|
14189
14439
|
selectedAsset.precision ?? 0,
|
|
14190
14440
|
" decimals"
|
|
14191
14441
|
] })
|
|
14192
14442
|
] }),
|
|
14193
|
-
/* @__PURE__ */ (0,
|
|
14443
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(
|
|
14194
14444
|
"input",
|
|
14195
14445
|
{
|
|
14196
14446
|
id: amountId,
|
|
@@ -14203,18 +14453,18 @@ function DepositPreGeneration({
|
|
|
14203
14453
|
}
|
|
14204
14454
|
)
|
|
14205
14455
|
] }),
|
|
14206
|
-
needsColorableUtxos && /* @__PURE__ */ (0,
|
|
14207
|
-
/* @__PURE__ */ (0,
|
|
14208
|
-
/* @__PURE__ */ (0,
|
|
14456
|
+
needsColorableUtxos && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(AlertBanner, { variant: "warning", children: [
|
|
14457
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: "mb-0.5 text-caption font-bold text-warning-fg", children: "Colorable UTXOs Required" }),
|
|
14458
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: "text-tiny text-warning-fg/70", children: "To receive RGB assets on-chain you need at least one uncolored UTXO. Create some now and the invoice will be generated automatically." })
|
|
14209
14459
|
] }),
|
|
14210
|
-
!isAutoGenerate && ((needsColorableUtxos || isRgbOnchain && usePrivacy && colorableUtxoCount === 0) && onOpenCreateUtxos ? /* @__PURE__ */ (0,
|
|
14211
|
-
/* @__PURE__ */ (0,
|
|
14460
|
+
!isAutoGenerate && ((needsColorableUtxos || isRgbOnchain && usePrivacy && colorableUtxoCount === 0) && onOpenCreateUtxos ? /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(Button, { variant: "cta", size: "cta", onClick: onOpenCreateUtxos, disabled: loading, children: /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("span", { className: "flex items-center justify-center gap-2", children: [
|
|
14461
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(IconGlyph, { glyph: AddCircle, className: "text-icon-md" }),
|
|
14212
14462
|
"Create Colorable UTXOs"
|
|
14213
|
-
] }) }) : /* @__PURE__ */ (0,
|
|
14214
|
-
/* @__PURE__ */ (0,
|
|
14463
|
+
] }) }) : /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(Button, { variant: "cta", size: "cta", onClick: generateInvoice, disabled: loading, children: loading ? /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("span", { className: "flex items-center justify-center gap-2", children: [
|
|
14464
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(IconGlyph, { glyph: ProgressActivity, className: "animate-spin text-icon-md" }),
|
|
14215
14465
|
"Generating..."
|
|
14216
|
-
] }) : /* @__PURE__ */ (0,
|
|
14217
|
-
/* @__PURE__ */ (0,
|
|
14466
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("span", { className: "flex items-center justify-center gap-2", children: [
|
|
14467
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(IconGlyph, { glyph: QrCode_2, className: "text-icon-md" }),
|
|
14218
14468
|
"Generate Address"
|
|
14219
14469
|
] }) }))
|
|
14220
14470
|
] });
|
|
@@ -14222,7 +14472,7 @@ function DepositPreGeneration({
|
|
|
14222
14472
|
|
|
14223
14473
|
// src/web/components/deposit-asset-selection.tsx
|
|
14224
14474
|
var import_react45 = require("react");
|
|
14225
|
-
var
|
|
14475
|
+
var import_jsx_runtime138 = require("react/jsx-runtime");
|
|
14226
14476
|
var ADD_ASSET_SUBTITLE = {
|
|
14227
14477
|
RGB: "RGB asset on Bitcoin",
|
|
14228
14478
|
SPARK: "Spark-native asset",
|
|
@@ -14311,9 +14561,9 @@ function DepositAssetSelection({
|
|
|
14311
14561
|
titleHoverClass: "group-hover:text-network-liquid-fg"
|
|
14312
14562
|
}
|
|
14313
14563
|
].filter((option) => option.enabled);
|
|
14314
|
-
return /* @__PURE__ */ (0,
|
|
14315
|
-
/* @__PURE__ */ (0,
|
|
14316
|
-
/* @__PURE__ */ (0,
|
|
14564
|
+
return /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "relative flex h-screen flex-col overflow-hidden bg-background bg-page-radial pt-16 font-display text-foreground", children: [
|
|
14565
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "absolute left-4 top-4 z-30", children: /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(GlyphButton, { icon: ArrowBack, label: "Go back", size: "lg", onClick: () => setCurrentView("dashboard") }) }),
|
|
14566
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "flex-shrink-0 px-5 pb-3 pt-4", children: /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(
|
|
14317
14567
|
DotPagination,
|
|
14318
14568
|
{
|
|
14319
14569
|
count: 2,
|
|
@@ -14321,8 +14571,8 @@ function DepositAssetSelection({
|
|
|
14321
14571
|
ariaLabel: "Deposit step 1 of 2: select asset"
|
|
14322
14572
|
}
|
|
14323
14573
|
) }),
|
|
14324
|
-
/* @__PURE__ */ (0,
|
|
14325
|
-
/* @__PURE__ */ (0,
|
|
14574
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "flex-shrink-0 px-5 pb-3", children: /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "relative", children: [
|
|
14575
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)(
|
|
14326
14576
|
IconGlyph,
|
|
14327
14577
|
{
|
|
14328
14578
|
glyph: Search,
|
|
@@ -14330,7 +14580,7 @@ function DepositAssetSelection({
|
|
|
14330
14580
|
className: "absolute left-3 top-1/2 -translate-y-1/2 text-secondary-content"
|
|
14331
14581
|
}
|
|
14332
14582
|
),
|
|
14333
|
-
/* @__PURE__ */ (0,
|
|
14583
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)(
|
|
14334
14584
|
"input",
|
|
14335
14585
|
{
|
|
14336
14586
|
autoFocus: true,
|
|
@@ -14343,8 +14593,8 @@ function DepositAssetSelection({
|
|
|
14343
14593
|
}
|
|
14344
14594
|
)
|
|
14345
14595
|
] }) }),
|
|
14346
|
-
/* @__PURE__ */ (0,
|
|
14347
|
-
btcAsset && /* @__PURE__ */ (0,
|
|
14596
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsxs)(ScrollArea, { className: "min-h-0 flex-1", viewportClassName: "space-y-1.5 px-5 pb-3", children: [
|
|
14597
|
+
btcAsset && /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)(
|
|
14348
14598
|
"button",
|
|
14349
14599
|
{
|
|
14350
14600
|
type: "button",
|
|
@@ -14352,28 +14602,28 @@ function DepositAssetSelection({
|
|
|
14352
14602
|
className: "group flex w-full min-w-0 items-center gap-3 overflow-hidden rounded-2xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card px-4 py-3 text-body shadow-card transition-all duration-200 hover-gradient-violet hover:shadow-card-hover",
|
|
14353
14603
|
onClick: () => onSelectAsset(btcAsset),
|
|
14354
14604
|
children: [
|
|
14355
|
-
/* @__PURE__ */ (0,
|
|
14356
|
-
/* @__PURE__ */ (0,
|
|
14357
|
-
/* @__PURE__ */ (0,
|
|
14358
|
-
/* @__PURE__ */ (0,
|
|
14605
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)(AssetIcon, { ticker: "BTC", size: 40, className: "flex-shrink-0" }),
|
|
14606
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "min-w-0 flex-1 text-left", children: [
|
|
14607
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "font-bold tracking-wide text-foreground transition-colors group-hover:text-secondary-content", children: "Bitcoin" }),
|
|
14608
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "mt-0.5 text-caption text-foreground/55", children: "Choose destination account next" })
|
|
14359
14609
|
] }),
|
|
14360
|
-
/* @__PURE__ */ (0,
|
|
14361
|
-
/* @__PURE__ */ (0,
|
|
14362
|
-
/* @__PURE__ */ (0,
|
|
14363
|
-
isSparkConnected && /* @__PURE__ */ (0,
|
|
14364
|
-
isArkadeConnected && /* @__PURE__ */ (0,
|
|
14365
|
-
isLiquidConnected && /* @__PURE__ */ (0,
|
|
14610
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "hidden min-w-0 max-w-[42%] flex-shrink flex-wrap justify-end gap-1 min-[380px]:flex", children: [
|
|
14611
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)(NetworkBadge, { network: "L1", size: "sm" }),
|
|
14612
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)(NetworkBadge, { network: "LN", size: "sm" }),
|
|
14613
|
+
isSparkConnected && /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(NetworkBadge, { network: "Spark", size: "sm" }),
|
|
14614
|
+
isArkadeConnected && /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(NetworkBadge, { network: "Arkade", size: "sm" }),
|
|
14615
|
+
isLiquidConnected && /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(NetworkBadge, { network: "Liquid", size: "sm" })
|
|
14366
14616
|
] }),
|
|
14367
|
-
/* @__PURE__ */ (0,
|
|
14617
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)(IconGlyph, { glyph: ArrowForward, className: "flex-shrink-0 text-icon-md text-foreground/20 transition-colors group-hover:text-secondary-content" })
|
|
14368
14618
|
]
|
|
14369
14619
|
}
|
|
14370
14620
|
),
|
|
14371
|
-
noResults ? /* @__PURE__ */ (0,
|
|
14621
|
+
noResults ? /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "py-8 text-center text-caption text-foreground/55", children: [
|
|
14372
14622
|
'No assets match "',
|
|
14373
14623
|
searchQuery,
|
|
14374
14624
|
'"'
|
|
14375
|
-
] }) : ownedAssetsCount > 0 ? /* @__PURE__ */ (0,
|
|
14376
|
-
/* @__PURE__ */ (0,
|
|
14625
|
+
] }) : ownedAssetsCount > 0 ? /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "space-y-1.5 pt-1", children: [
|
|
14626
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsxs)(
|
|
14377
14627
|
"button",
|
|
14378
14628
|
{
|
|
14379
14629
|
type: "button",
|
|
@@ -14386,17 +14636,17 @@ function DepositAssetSelection({
|
|
|
14386
14636
|
isSearching && "cursor-default"
|
|
14387
14637
|
),
|
|
14388
14638
|
children: [
|
|
14389
|
-
/* @__PURE__ */ (0,
|
|
14390
|
-
/* @__PURE__ */ (0,
|
|
14391
|
-
/* @__PURE__ */ (0,
|
|
14392
|
-
!isSearching && /* @__PURE__ */ (0,
|
|
14639
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)("span", { className: cn("text-muted-foreground", eyebrow), children: "Your assets" }),
|
|
14640
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)("span", { className: "inline-flex size-5 items-center justify-center rounded-full bg-secondary bg-gradient-violet text-tiny font-bold text-white shadow-button-violet", children: ownedAssetsCount }),
|
|
14641
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "flex-1" }),
|
|
14642
|
+
!isSearching && /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(IconGlyph, { glyph: showOwnedAssets ? ExpandLess : ExpandMore, size: "md", className: "text-secondary-content" })
|
|
14393
14643
|
]
|
|
14394
14644
|
}
|
|
14395
14645
|
),
|
|
14396
|
-
showOwnedAssets && /* @__PURE__ */ (0,
|
|
14646
|
+
showOwnedAssets && /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "space-y-1.5 duration-200 animate-in fade-in slide-in-from-top-1", children: ownedAssets.map((asset) => {
|
|
14397
14647
|
const protocolBadge = asset.accountId ? PROTOCOL_BADGE[asset.accountId] : null;
|
|
14398
14648
|
const balance = asset.balance ?? 0;
|
|
14399
|
-
return /* @__PURE__ */ (0,
|
|
14649
|
+
return /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)(
|
|
14400
14650
|
"button",
|
|
14401
14651
|
{
|
|
14402
14652
|
type: "button",
|
|
@@ -14404,11 +14654,11 @@ function DepositAssetSelection({
|
|
|
14404
14654
|
className: "group flex w-full min-w-0 items-center gap-3 overflow-hidden rounded-2xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card px-4 py-3 text-body shadow-card transition-all duration-200 hover-gradient-violet hover:shadow-card-hover",
|
|
14405
14655
|
onClick: () => onSelectAsset(asset),
|
|
14406
14656
|
children: [
|
|
14407
|
-
/* @__PURE__ */ (0,
|
|
14408
|
-
/* @__PURE__ */ (0,
|
|
14409
|
-
/* @__PURE__ */ (0,
|
|
14410
|
-
/* @__PURE__ */ (0,
|
|
14411
|
-
protocolBadge && /* @__PURE__ */ (0,
|
|
14657
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)(AssetIcon, { ticker: asset.ticker, size: 40, className: "flex-shrink-0" }),
|
|
14658
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "min-w-0 flex-1 text-left", children: [
|
|
14659
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "flex min-w-0 items-center gap-1.5", children: [
|
|
14660
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)("span", { className: "truncate font-bold tracking-wide text-foreground transition-colors group-hover:text-secondary-content", children: asset.ticker }),
|
|
14661
|
+
protocolBadge && /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(
|
|
14412
14662
|
"span",
|
|
14413
14663
|
{
|
|
14414
14664
|
className: cn(
|
|
@@ -14420,36 +14670,36 @@ function DepositAssetSelection({
|
|
|
14420
14670
|
}
|
|
14421
14671
|
)
|
|
14422
14672
|
] }),
|
|
14423
|
-
/* @__PURE__ */ (0,
|
|
14673
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "mt-0.5 truncate text-caption text-foreground/55", children: asset.name ?? "Asset" })
|
|
14424
14674
|
] }),
|
|
14425
|
-
balance > 0 && /* @__PURE__ */ (0,
|
|
14426
|
-
/* @__PURE__ */ (0,
|
|
14427
|
-
/* @__PURE__ */ (0,
|
|
14675
|
+
balance > 0 && /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "flex-shrink-0 text-right", children: [
|
|
14676
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "text-caption font-bold tabular-nums text-foreground", children: formatAssetBalance(asset) }),
|
|
14677
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: cn("mt-0.5 text-foreground/55", eyebrow), children: asset.ticker })
|
|
14428
14678
|
] }),
|
|
14429
|
-
/* @__PURE__ */ (0,
|
|
14679
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)(IconGlyph, { glyph: ArrowForward, className: "flex-shrink-0 text-icon-sm text-foreground/20 transition-colors group-hover:text-secondary-content" })
|
|
14430
14680
|
]
|
|
14431
14681
|
},
|
|
14432
14682
|
asset.asset_id
|
|
14433
14683
|
);
|
|
14434
14684
|
}) })
|
|
14435
14685
|
] }) : null,
|
|
14436
|
-
!searchQuery && /* @__PURE__ */ (0,
|
|
14686
|
+
!searchQuery && /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "pb-1 pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)(
|
|
14437
14687
|
"button",
|
|
14438
14688
|
{
|
|
14439
14689
|
type: "button",
|
|
14440
14690
|
onClick: () => setCurrentView("bridge"),
|
|
14441
14691
|
className: "group flex w-full items-center gap-3 rounded-2xl bg-gradient-to-r from-secondary/20 to-primary/10 p-3 shadow-card transition-all duration-200 hover:from-secondary/30 hover:to-primary/15 hover:shadow-card-hover",
|
|
14442
14692
|
children: [
|
|
14443
|
-
/* @__PURE__ */ (0,
|
|
14444
|
-
/* @__PURE__ */ (0,
|
|
14445
|
-
/* @__PURE__ */ (0,
|
|
14446
|
-
/* @__PURE__ */ (0,
|
|
14693
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "flex size-10 shrink-0 items-center justify-center rounded-xl bg-secondary bg-gradient-violet text-white shadow-button-violet", children: /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(IconGlyph, { glyph: SwapCalls, className: "text-icon-lg" }) }),
|
|
14694
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "flex-1 text-left", children: [
|
|
14695
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)("p", { className: "text-body font-semibold text-foreground transition-colors group-hover:text-secondary-content", children: "Bridge from another chain" }),
|
|
14696
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)("p", { className: "text-xxs leading-tight text-foreground/55", children: "USDC, USDT, ETH, SOL via Flashnet" })
|
|
14447
14697
|
] }),
|
|
14448
|
-
/* @__PURE__ */ (0,
|
|
14698
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)(IconGlyph, { glyph: ArrowForward, className: "text-icon-lg text-foreground/55 transition-colors group-hover:text-secondary-content" })
|
|
14449
14699
|
]
|
|
14450
14700
|
}
|
|
14451
14701
|
) }),
|
|
14452
|
-
!searchQuery && newAssetOptions.length > 0 && /* @__PURE__ */ (0,
|
|
14702
|
+
!searchQuery && newAssetOptions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "pb-1 pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)(
|
|
14453
14703
|
"button",
|
|
14454
14704
|
{
|
|
14455
14705
|
type: "button",
|
|
@@ -14457,27 +14707,27 @@ function DepositAssetSelection({
|
|
|
14457
14707
|
onClick: () => setShowAddAssetModal(true),
|
|
14458
14708
|
className: "group flex w-full items-center gap-3 rounded-2xl bg-card/55 backdrop-blur-xl backdrop-saturate-150 bg-gradient-card p-3 shadow-card transition-all duration-200 hover-gradient-violet hover:shadow-card-hover",
|
|
14459
14709
|
children: [
|
|
14460
|
-
/* @__PURE__ */ (0,
|
|
14461
|
-
/* @__PURE__ */ (0,
|
|
14462
|
-
/* @__PURE__ */ (0,
|
|
14463
|
-
/* @__PURE__ */ (0,
|
|
14710
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "flex size-10 shrink-0 items-center justify-center rounded-xl bg-secondary/15 text-secondary-content", children: /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(IconGlyph, { glyph: Add, size: "md" }) }),
|
|
14711
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "flex-1 text-left", children: [
|
|
14712
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)("p", { className: "text-body font-semibold text-foreground transition-colors group-hover:text-secondary-content", children: "Add an asset" }),
|
|
14713
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("p", { className: "text-xxs leading-tight text-foreground/55", children: [
|
|
14464
14714
|
"Receive a new ",
|
|
14465
14715
|
newAssetOptions.map((o) => o.ticker).join(", "),
|
|
14466
14716
|
" asset"
|
|
14467
14717
|
] })
|
|
14468
14718
|
] }),
|
|
14469
|
-
/* @__PURE__ */ (0,
|
|
14719
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)(IconGlyph, { glyph: ArrowForward, className: "text-icon-lg text-foreground/55 transition-colors group-hover:text-secondary-content" })
|
|
14470
14720
|
]
|
|
14471
14721
|
}
|
|
14472
14722
|
) })
|
|
14473
14723
|
] }),
|
|
14474
|
-
/* @__PURE__ */ (0,
|
|
14724
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)(
|
|
14475
14725
|
BottomSheet,
|
|
14476
14726
|
{
|
|
14477
14727
|
open: showAddAssetModal,
|
|
14478
14728
|
title: "Add an asset",
|
|
14479
14729
|
onClose: () => setShowAddAssetModal(false),
|
|
14480
|
-
children: /* @__PURE__ */ (0,
|
|
14730
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "space-y-2", children: newAssetOptions.map((option) => /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)(
|
|
14481
14731
|
"button",
|
|
14482
14732
|
{
|
|
14483
14733
|
type: "button",
|
|
@@ -14491,12 +14741,12 @@ function DepositAssetSelection({
|
|
|
14491
14741
|
handleAddNewAsset(option.account);
|
|
14492
14742
|
},
|
|
14493
14743
|
children: [
|
|
14494
|
-
option.account === "LIQUID" ? /* @__PURE__ */ (0,
|
|
14495
|
-
/* @__PURE__ */ (0,
|
|
14496
|
-
/* @__PURE__ */ (0,
|
|
14497
|
-
/* @__PURE__ */ (0,
|
|
14744
|
+
option.account === "LIQUID" ? /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("span", { className: "flex size-9 shrink-0 items-center justify-center rounded-full bg-network-liquid/10", children: /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(LiquidNetworkIcon, { className: "size-5" }) }) : /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(AssetIcon, { ticker: option.ticker, size: 36, className: "flex-shrink-0" }),
|
|
14745
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
14746
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: cn("text-body font-bold tracking-wide text-foreground", option.titleHoverClass), children: option.title }),
|
|
14747
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "mt-0.5 text-xxs text-foreground/55", children: ADD_ASSET_SUBTITLE[option.account] })
|
|
14498
14748
|
] }),
|
|
14499
|
-
/* @__PURE__ */ (0,
|
|
14749
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)(IconGlyph, { glyph: Add, size: "sm", className: "text-foreground/55 transition-colors group-hover:text-foreground/60" })
|
|
14500
14750
|
]
|
|
14501
14751
|
},
|
|
14502
14752
|
option.account
|
|
@@ -14507,7 +14757,7 @@ function DepositAssetSelection({
|
|
|
14507
14757
|
}
|
|
14508
14758
|
|
|
14509
14759
|
// src/web/components/deposit-invoice-generation.tsx
|
|
14510
|
-
var
|
|
14760
|
+
var import_jsx_runtime139 = require("react/jsx-runtime");
|
|
14511
14761
|
var ACCOUNT_TITLES2 = {
|
|
14512
14762
|
RGB: "RGB & Lightning",
|
|
14513
14763
|
SPARK: "Spark",
|
|
@@ -14666,7 +14916,7 @@ function DepositInvoiceGeneration({
|
|
|
14666
14916
|
if (nextMethod) applyMethodSelection(account, nextMethod);
|
|
14667
14917
|
};
|
|
14668
14918
|
if (depositDetected) {
|
|
14669
|
-
return /* @__PURE__ */ (0,
|
|
14919
|
+
return /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(
|
|
14670
14920
|
DepositSuccessScreen,
|
|
14671
14921
|
{
|
|
14672
14922
|
handleDone,
|
|
@@ -14683,15 +14933,15 @@ function DepositInvoiceGeneration({
|
|
|
14683
14933
|
const showChannelWarning = selectedAccount === "RGB" && network === "lightning" && !channelsLoading && channels.length === 0 && !isSparkConnected;
|
|
14684
14934
|
const showLiquidityWarning = !isSparkLightning && network === "lightning" && maxDepositAmount === 0 && !channelsLoading && !isBtc;
|
|
14685
14935
|
const isNewRgbAsset = isNewAsset && assetFamily === "RGB";
|
|
14686
|
-
return /* @__PURE__ */ (0,
|
|
14687
|
-
/* @__PURE__ */ (0,
|
|
14936
|
+
return /* @__PURE__ */ (0, import_jsx_runtime139.jsxs)("div", { className: "relative flex h-screen flex-col overflow-hidden bg-background bg-page-radial pt-16 font-display text-foreground", children: [
|
|
14937
|
+
/* @__PURE__ */ (0, import_jsx_runtime139.jsx)("div", { className: "absolute left-4 top-4 z-30", children: /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(GlyphButton, { icon: ArrowBack, label: "Go back", size: "lg", onClick: handleBack }) }),
|
|
14688
14938
|
(() => {
|
|
14689
14939
|
const hideDestinationRail = isNewAsset && (network === "spark" || network === "arkade");
|
|
14690
14940
|
if (hideDestinationRail) return null;
|
|
14691
|
-
return /* @__PURE__ */ (0,
|
|
14692
|
-
/* @__PURE__ */ (0,
|
|
14693
|
-
/* @__PURE__ */ (0,
|
|
14694
|
-
/* @__PURE__ */ (0,
|
|
14941
|
+
return /* @__PURE__ */ (0, import_jsx_runtime139.jsx)("div", { className: "flex-shrink-0 px-4 py-2", children: /* @__PURE__ */ (0, import_jsx_runtime139.jsxs)("div", { className: "space-y-2", children: [
|
|
14942
|
+
/* @__PURE__ */ (0, import_jsx_runtime139.jsxs)("div", { children: [
|
|
14943
|
+
/* @__PURE__ */ (0, import_jsx_runtime139.jsx)("p", { className: cn("text-muted-foreground", eyebrow), children: "Destination Account" }),
|
|
14944
|
+
/* @__PURE__ */ (0, import_jsx_runtime139.jsx)("div", { className: "mt-1.5 flex gap-1.5 overflow-x-auto no-scrollbar", children: availableAccounts.map((account) => /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(
|
|
14695
14945
|
AccountChoiceChip,
|
|
14696
14946
|
{
|
|
14697
14947
|
account,
|
|
@@ -14716,9 +14966,9 @@ function DepositInvoiceGeneration({
|
|
|
14716
14966
|
account
|
|
14717
14967
|
)) })
|
|
14718
14968
|
] }),
|
|
14719
|
-
!isBtc && !(isNewAsset && (network === "spark" || network === "arkade")) && /* @__PURE__ */ (0,
|
|
14720
|
-
/* @__PURE__ */ (0,
|
|
14721
|
-
/* @__PURE__ */ (0,
|
|
14969
|
+
!isBtc && !(isNewAsset && (network === "spark" || network === "arkade")) && /* @__PURE__ */ (0, import_jsx_runtime139.jsxs)("div", { children: [
|
|
14970
|
+
/* @__PURE__ */ (0, import_jsx_runtime139.jsx)("p", { className: cn("text-muted-foreground", eyebrow), children: "Transfer Method" }),
|
|
14971
|
+
/* @__PURE__ */ (0, import_jsx_runtime139.jsx)("div", { className: "mt-1.5 flex gap-1.5 overflow-x-auto no-scrollbar", children: methodOptions.map(({ method, enabled, disabledReason }) => /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(
|
|
14722
14972
|
MethodChoiceChip,
|
|
14723
14973
|
{
|
|
14724
14974
|
method,
|
|
@@ -14732,7 +14982,7 @@ function DepositInvoiceGeneration({
|
|
|
14732
14982
|
] })
|
|
14733
14983
|
] }) });
|
|
14734
14984
|
})(),
|
|
14735
|
-
/* @__PURE__ */ (0,
|
|
14985
|
+
/* @__PURE__ */ (0, import_jsx_runtime139.jsx)(ScrollArea, { className: "flex-1", viewportAs: "main", viewportClassName: "space-y-2.5 px-4 py-2.5", children: isBtc && accountReceiveResult ? /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(
|
|
14736
14986
|
BtcUnifiedReceive,
|
|
14737
14987
|
{
|
|
14738
14988
|
btcSelectedAccount,
|
|
@@ -14752,15 +15002,15 @@ function DepositInvoiceGeneration({
|
|
|
14752
15002
|
setAccountReceiveResult,
|
|
14753
15003
|
handleDone
|
|
14754
15004
|
}
|
|
14755
|
-
) : isBtc && !accountReceiveResult && loading ? /* @__PURE__ */ (0,
|
|
14756
|
-
/* @__PURE__ */ (0,
|
|
15005
|
+
) : isBtc && !accountReceiveResult && loading ? /* @__PURE__ */ (0, import_jsx_runtime139.jsxs)("div", { className: "flex flex-col items-center gap-4 py-10", children: [
|
|
15006
|
+
/* @__PURE__ */ (0, import_jsx_runtime139.jsx)(
|
|
14757
15007
|
"div",
|
|
14758
15008
|
{
|
|
14759
15009
|
className: cn(
|
|
14760
15010
|
"flex size-16 items-center justify-center rounded-2xl shadow-raised",
|
|
14761
15011
|
NETWORK_CONFIG[btcSelectedAccount === "SPARK" ? "spark" : btcSelectedAccount === "ARKADE" ? "arkade" : "onchain"].bg
|
|
14762
15012
|
),
|
|
14763
|
-
children: /* @__PURE__ */ (0,
|
|
15013
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(
|
|
14764
15014
|
IconGlyph,
|
|
14765
15015
|
{
|
|
14766
15016
|
glyph: ProgressActivity,
|
|
@@ -14772,11 +15022,11 @@ function DepositInvoiceGeneration({
|
|
|
14772
15022
|
)
|
|
14773
15023
|
}
|
|
14774
15024
|
),
|
|
14775
|
-
/* @__PURE__ */ (0,
|
|
14776
|
-
/* @__PURE__ */ (0,
|
|
14777
|
-
/* @__PURE__ */ (0,
|
|
15025
|
+
/* @__PURE__ */ (0, import_jsx_runtime139.jsxs)("div", { className: "space-y-1 text-center", children: [
|
|
15026
|
+
/* @__PURE__ */ (0, import_jsx_runtime139.jsx)("p", { className: "text-caption font-bold text-muted-foreground", children: "Generating addresses..." }),
|
|
15027
|
+
/* @__PURE__ */ (0, import_jsx_runtime139.jsx)("p", { className: "text-caption text-foreground/55", children: ACCOUNT_TITLES2[btcSelectedAccount] })
|
|
14778
15028
|
] })
|
|
14779
|
-
] }) : !address ? /* @__PURE__ */ (0,
|
|
15029
|
+
] }) : !address ? /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(
|
|
14780
15030
|
DepositPreGeneration,
|
|
14781
15031
|
{
|
|
14782
15032
|
selectedAsset,
|
|
@@ -14800,7 +15050,7 @@ function DepositInvoiceGeneration({
|
|
|
14800
15050
|
onOpenCreateUtxos,
|
|
14801
15051
|
showReceiveSummary: !isNewRgbAsset
|
|
14802
15052
|
}
|
|
14803
|
-
) : /* @__PURE__ */ (0,
|
|
15053
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(
|
|
14804
15054
|
DepositGeneratedView,
|
|
14805
15055
|
{
|
|
14806
15056
|
network,
|
|
@@ -14896,6 +15146,7 @@ function DepositInvoiceGeneration({
|
|
|
14896
15146
|
CopyIcon,
|
|
14897
15147
|
Copyable,
|
|
14898
15148
|
DEFAULT_AMOUNT_LOCALE,
|
|
15149
|
+
DatePicker,
|
|
14899
15150
|
DateRangeFilter,
|
|
14900
15151
|
DepositAssetSelection,
|
|
14901
15152
|
DepositGeneratedView,
|