kaleido-ui 0.2.7 → 0.2.8
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-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 +11 -11
- 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/trend-chart.js +1 -1
- package/dist/web/index.cjs +1032 -822
- package/dist/web/index.d.cts +34 -1
- package/dist/web/index.d.ts +34 -1
- package/dist/web/index.js +50 -46
- package/dist/web/primitives/toaster.js +2 -2
- package/package.json +1 -1
- package/dist/web/{chunk-S2ICIIH2.js → chunk-STH4BGSE.js} +3 -3
- package/dist/web/{chunk-Z5LVT3BD.js → chunk-YCOP3ZRE.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",
|
|
@@ -10250,7 +10459,7 @@ function MetricCard({
|
|
|
10250
10459
|
const hasEnd = placement === "end" || !!trend;
|
|
10251
10460
|
const iconBox = comfortable ? "size-9 rounded-xl shadow-raised" : placement === "end" ? "size-7 rounded-lg" : "size-5 rounded-md";
|
|
10252
10461
|
const iconGlyph = comfortable ? "text-icon-lg" : placement === "end" ? "text-icon-md" : "text-icon-xs";
|
|
10253
|
-
const iconNode = icon ? /* @__PURE__ */ (0,
|
|
10462
|
+
const iconNode = icon ? /* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
|
|
10254
10463
|
"span",
|
|
10255
10464
|
{
|
|
10256
10465
|
"data-slot": "metric-card-icon",
|
|
@@ -10259,11 +10468,11 @@ function MetricCard({
|
|
|
10259
10468
|
iconBox,
|
|
10260
10469
|
toneClasses2[tone]
|
|
10261
10470
|
),
|
|
10262
|
-
children: typeof icon === "string" ? /* @__PURE__ */ (0,
|
|
10471
|
+
children: typeof icon === "string" ? /* @__PURE__ */ (0, import_jsx_runtime113.jsx)(Icon, { name: icon, className: iconGlyph }) : icon
|
|
10263
10472
|
}
|
|
10264
10473
|
) : null;
|
|
10265
|
-
const labelNode = /* @__PURE__ */ (0,
|
|
10266
|
-
return /* @__PURE__ */ (0,
|
|
10474
|
+
const labelNode = /* @__PURE__ */ (0, import_jsx_runtime113.jsx)("span", { id: labelId, "data-slot": "metric-card-label", className: cn(eyebrow, "text-muted-foreground"), children: label });
|
|
10475
|
+
return /* @__PURE__ */ (0, import_jsx_runtime113.jsxs)(
|
|
10267
10476
|
"div",
|
|
10268
10477
|
{
|
|
10269
10478
|
role: "group",
|
|
@@ -10277,13 +10486,13 @@ function MetricCard({
|
|
|
10277
10486
|
),
|
|
10278
10487
|
...rest,
|
|
10279
10488
|
children: [
|
|
10280
|
-
/* @__PURE__ */ (0,
|
|
10281
|
-
/* @__PURE__ */ (0,
|
|
10489
|
+
/* @__PURE__ */ (0, import_jsx_runtime113.jsxs)("div", { className: hasEnd ? "min-w-0 flex-1 space-y-1" : "contents", children: [
|
|
10490
|
+
/* @__PURE__ */ (0, import_jsx_runtime113.jsxs)("div", { className: "flex items-center gap-1.5", children: [
|
|
10282
10491
|
placement === "label" && iconNode,
|
|
10283
10492
|
labelNode
|
|
10284
10493
|
] }),
|
|
10285
|
-
definition && /* @__PURE__ */ (0,
|
|
10286
|
-
/* @__PURE__ */ (0,
|
|
10494
|
+
definition && /* @__PURE__ */ (0, import_jsx_runtime113.jsx)("p", { "data-slot": "metric-card-definition", className: "m-0 text-caption text-muted-foreground", children: definition }),
|
|
10495
|
+
/* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
|
|
10287
10496
|
"p",
|
|
10288
10497
|
{
|
|
10289
10498
|
"data-slot": "metric-card-value",
|
|
@@ -10294,8 +10503,8 @@ function MetricCard({
|
|
|
10294
10503
|
children: value
|
|
10295
10504
|
}
|
|
10296
10505
|
),
|
|
10297
|
-
change && /* @__PURE__ */ (0,
|
|
10298
|
-
description && /* @__PURE__ */ (0,
|
|
10506
|
+
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 }),
|
|
10507
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime113.jsx)(
|
|
10299
10508
|
"p",
|
|
10300
10509
|
{
|
|
10301
10510
|
"data-slot": "metric-card-description",
|
|
@@ -10304,9 +10513,9 @@ function MetricCard({
|
|
|
10304
10513
|
}
|
|
10305
10514
|
)
|
|
10306
10515
|
] }),
|
|
10307
|
-
hasEnd && /* @__PURE__ */ (0,
|
|
10516
|
+
hasEnd && /* @__PURE__ */ (0, import_jsx_runtime113.jsxs)("div", { className: "flex shrink-0 flex-col items-end justify-between gap-2", children: [
|
|
10308
10517
|
placement === "end" && iconNode,
|
|
10309
|
-
trend && /* @__PURE__ */ (0,
|
|
10518
|
+
trend && /* @__PURE__ */ (0, import_jsx_runtime113.jsx)("div", { "data-slot": "metric-card-trend", className: "min-h-0 flex-1", children: trend })
|
|
10310
10519
|
] })
|
|
10311
10520
|
]
|
|
10312
10521
|
}
|
|
@@ -10314,10 +10523,10 @@ function MetricCard({
|
|
|
10314
10523
|
}
|
|
10315
10524
|
|
|
10316
10525
|
// src/web/components/copyable.tsx
|
|
10317
|
-
var
|
|
10526
|
+
var import_jsx_runtime114 = require("react/jsx-runtime");
|
|
10318
10527
|
function Copyable({ value, label, children, mono = true, wrap = false, className }) {
|
|
10319
|
-
return /* @__PURE__ */ (0,
|
|
10320
|
-
/* @__PURE__ */ (0,
|
|
10528
|
+
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: [
|
|
10529
|
+
/* @__PURE__ */ (0, import_jsx_runtime114.jsx)(
|
|
10321
10530
|
"span",
|
|
10322
10531
|
{
|
|
10323
10532
|
title: value,
|
|
@@ -10325,29 +10534,29 @@ function Copyable({ value, label, children, mono = true, wrap = false, className
|
|
|
10325
10534
|
children: children ?? value
|
|
10326
10535
|
}
|
|
10327
10536
|
),
|
|
10328
|
-
/* @__PURE__ */ (0,
|
|
10537
|
+
/* @__PURE__ */ (0, import_jsx_runtime114.jsx)(CopyButton, { value, label })
|
|
10329
10538
|
] });
|
|
10330
10539
|
}
|
|
10331
10540
|
|
|
10332
10541
|
// src/web/components/code-block.tsx
|
|
10333
|
-
var
|
|
10542
|
+
var import_jsx_runtime115 = require("react/jsx-runtime");
|
|
10334
10543
|
function CodeBlock({ code, label = "code", language, className }) {
|
|
10335
|
-
return /* @__PURE__ */ (0,
|
|
10544
|
+
return /* @__PURE__ */ (0, import_jsx_runtime115.jsxs)(
|
|
10336
10545
|
"figure",
|
|
10337
10546
|
{
|
|
10338
10547
|
"data-slot": "code-block",
|
|
10339
10548
|
"aria-label": label,
|
|
10340
10549
|
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
10550
|
children: [
|
|
10342
|
-
language && /* @__PURE__ */ (0,
|
|
10343
|
-
/* @__PURE__ */ (0,
|
|
10344
|
-
/* @__PURE__ */ (0,
|
|
10551
|
+
language && /* @__PURE__ */ (0, import_jsx_runtime115.jsx)("figcaption", { className: cn("px-4 pt-3 text-muted-foreground", eyebrow), children: language }),
|
|
10552
|
+
/* @__PURE__ */ (0, import_jsx_runtime115.jsx)("div", { className: "absolute right-2 top-2", children: /* @__PURE__ */ (0, import_jsx_runtime115.jsx)(CopyButton, { value: code, label }) }),
|
|
10553
|
+
/* @__PURE__ */ (0, import_jsx_runtime115.jsx)(
|
|
10345
10554
|
HorizontalScrollArea,
|
|
10346
10555
|
{
|
|
10347
10556
|
className: "my-4 ml-4 mr-12",
|
|
10348
10557
|
viewportAs: "pre",
|
|
10349
10558
|
viewportClassName: "m-0 pb-3 font-mono text-caption text-foreground",
|
|
10350
|
-
children: /* @__PURE__ */ (0,
|
|
10559
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime115.jsx)("code", { children: code })
|
|
10351
10560
|
}
|
|
10352
10561
|
)
|
|
10353
10562
|
]
|
|
@@ -10372,7 +10581,7 @@ var chartScatterSeriesLimit = 3;
|
|
|
10372
10581
|
|
|
10373
10582
|
// src/web/components/filter-chip-group.tsx
|
|
10374
10583
|
var import_react31 = require("react");
|
|
10375
|
-
var
|
|
10584
|
+
var import_jsx_runtime116 = require("react/jsx-runtime");
|
|
10376
10585
|
function FilterChipGroup({
|
|
10377
10586
|
options,
|
|
10378
10587
|
value,
|
|
@@ -10399,7 +10608,7 @@ function FilterChipGroup({
|
|
|
10399
10608
|
onChange(target.option.value);
|
|
10400
10609
|
refs.current[target.index]?.focus();
|
|
10401
10610
|
};
|
|
10402
|
-
return /* @__PURE__ */ (0,
|
|
10611
|
+
return /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(
|
|
10403
10612
|
"div",
|
|
10404
10613
|
{
|
|
10405
10614
|
role: segmented ? "radiogroup" : void 0,
|
|
@@ -10413,7 +10622,7 @@ function FilterChipGroup({
|
|
|
10413
10622
|
children: options.map((option, index) => {
|
|
10414
10623
|
const active = option.value === value;
|
|
10415
10624
|
const iconOnly = option.label === void 0 || option.label === null;
|
|
10416
|
-
return /* @__PURE__ */ (0,
|
|
10625
|
+
return /* @__PURE__ */ (0, import_jsx_runtime116.jsxs)(
|
|
10417
10626
|
"button",
|
|
10418
10627
|
{
|
|
10419
10628
|
ref: (node) => {
|
|
@@ -10441,7 +10650,7 @@ function FilterChipGroup({
|
|
|
10441
10650
|
children: [
|
|
10442
10651
|
option.icon,
|
|
10443
10652
|
option.label,
|
|
10444
|
-
option.count !== void 0 && /* @__PURE__ */ (0,
|
|
10653
|
+
option.count !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(
|
|
10445
10654
|
"span",
|
|
10446
10655
|
{
|
|
10447
10656
|
className: cn(
|
|
@@ -10461,7 +10670,7 @@ function FilterChipGroup({
|
|
|
10461
10670
|
}
|
|
10462
10671
|
|
|
10463
10672
|
// src/web/components/charts/core.tsx
|
|
10464
|
-
var
|
|
10673
|
+
var import_jsx_runtime117 = require("react/jsx-runtime");
|
|
10465
10674
|
var BAR_GAP = 2;
|
|
10466
10675
|
var BAR_RADIUS = 4;
|
|
10467
10676
|
function barPath(x, y, w, h, end) {
|
|
@@ -10526,15 +10735,15 @@ function ChartLegend({
|
|
|
10526
10735
|
className
|
|
10527
10736
|
}) {
|
|
10528
10737
|
const visibleCount = items.filter((item) => !hidden?.has(item.id)).length;
|
|
10529
|
-
return /* @__PURE__ */ (0,
|
|
10738
|
+
return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
|
|
10530
10739
|
"ul",
|
|
10531
10740
|
{
|
|
10532
10741
|
"data-slot": "chart-legend",
|
|
10533
10742
|
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
10743
|
children: items.map((item) => {
|
|
10535
10744
|
const off = hidden?.has(item.id) ?? false;
|
|
10536
|
-
const key = item.swatch ?? /* @__PURE__ */ (0,
|
|
10537
|
-
return /* @__PURE__ */ (0,
|
|
10745
|
+
const key = item.swatch ?? /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(LegendSwatch, { color: item.color, shape: keyShape });
|
|
10746
|
+
return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("li", { className: "flex items-center", children: onToggle ? /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(
|
|
10538
10747
|
"button",
|
|
10539
10748
|
{
|
|
10540
10749
|
type: "button",
|
|
@@ -10551,7 +10760,7 @@ function ChartLegend({
|
|
|
10551
10760
|
item.label
|
|
10552
10761
|
]
|
|
10553
10762
|
}
|
|
10554
|
-
) : /* @__PURE__ */ (0,
|
|
10763
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("span", { className: "flex items-center gap-1.5 px-1.5 py-0.5", children: [
|
|
10555
10764
|
key,
|
|
10556
10765
|
item.label
|
|
10557
10766
|
] }) }, item.id);
|
|
@@ -10577,7 +10786,7 @@ function useSeriesVisibility(ids) {
|
|
|
10577
10786
|
};
|
|
10578
10787
|
}
|
|
10579
10788
|
function LegendSwatch({ color, shape = "rect" }) {
|
|
10580
|
-
return /* @__PURE__ */ (0,
|
|
10789
|
+
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
10790
|
}
|
|
10582
10791
|
function ChartTooltip({
|
|
10583
10792
|
title,
|
|
@@ -10588,7 +10797,7 @@ function ChartTooltip({
|
|
|
10588
10797
|
swatch = "line"
|
|
10589
10798
|
}) {
|
|
10590
10799
|
const flip = x > width * 0.6;
|
|
10591
|
-
return /* @__PURE__ */ (0,
|
|
10800
|
+
return /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(
|
|
10592
10801
|
"div",
|
|
10593
10802
|
{
|
|
10594
10803
|
"data-slot": "chart-tooltip",
|
|
@@ -10600,11 +10809,11 @@ function ChartTooltip({
|
|
|
10600
10809
|
top: Math.max(0, y - 8)
|
|
10601
10810
|
},
|
|
10602
10811
|
children: [
|
|
10603
|
-
/* @__PURE__ */ (0,
|
|
10604
|
-
/* @__PURE__ */ (0,
|
|
10605
|
-
/* @__PURE__ */ (0,
|
|
10606
|
-
/* @__PURE__ */ (0,
|
|
10607
|
-
/* @__PURE__ */ (0,
|
|
10812
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)("div", { className: "mb-1 font-semibold text-foreground", children: title }),
|
|
10813
|
+
/* @__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: [
|
|
10814
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(LegendSwatch, { color: row.color, shape: swatch }),
|
|
10815
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)("span", { className: "font-semibold tabular-nums text-foreground", children: row.value }),
|
|
10816
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)("span", { className: "text-muted-foreground", children: row.label })
|
|
10608
10817
|
] }, row.id)) })
|
|
10609
10818
|
]
|
|
10610
10819
|
}
|
|
@@ -10632,8 +10841,8 @@ function nextActiveIndex(key, current, count3, { vertical = false } = {}) {
|
|
|
10632
10841
|
}
|
|
10633
10842
|
}
|
|
10634
10843
|
var viewOptions = [
|
|
10635
|
-
{ value: "chart", ariaLabel: "Chart", icon: /* @__PURE__ */ (0,
|
|
10636
|
-
{ value: "table", ariaLabel: "Table", icon: /* @__PURE__ */ (0,
|
|
10844
|
+
{ value: "chart", ariaLabel: "Chart", icon: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(IconGlyph, { glyph: BarChart, size: "sm" }) },
|
|
10845
|
+
{ value: "table", ariaLabel: "Table", icon: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(IconGlyph, { glyph: TableRows, size: "sm" }) }
|
|
10637
10846
|
];
|
|
10638
10847
|
var tableOption = viewOptions[1];
|
|
10639
10848
|
function ChartViewToggle({
|
|
@@ -10643,9 +10852,9 @@ function ChartViewToggle({
|
|
|
10643
10852
|
chartView,
|
|
10644
10853
|
onChartViewChange
|
|
10645
10854
|
}) {
|
|
10646
|
-
const options = views && views.length > 0 ? [...views.map((v) => ({ value: v.value, ariaLabel: v.label, icon: /* @__PURE__ */ (0,
|
|
10855
|
+
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
10856
|
const value = view === "table" ? "table" : views && views.length > 0 ? chartView ?? views[0].value : "chart";
|
|
10648
|
-
return /* @__PURE__ */ (0,
|
|
10857
|
+
return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("div", { "data-slot": "chart-view-toggle", className: "shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
|
|
10649
10858
|
FilterChipGroup,
|
|
10650
10859
|
{
|
|
10651
10860
|
variant: "segmented",
|
|
@@ -10666,16 +10875,16 @@ function ChartTimeframeMenu({
|
|
|
10666
10875
|
onChange
|
|
10667
10876
|
}) {
|
|
10668
10877
|
const current = timeframes.find((t) => t.value === value) ?? timeframes[0];
|
|
10669
|
-
return /* @__PURE__ */ (0,
|
|
10670
|
-
/* @__PURE__ */ (0,
|
|
10671
|
-
/* @__PURE__ */ (0,
|
|
10878
|
+
return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("div", { "data-slot": "chart-timeframe", className: "shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(DropdownMenu, { children: [
|
|
10879
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(GlyphButton, { icon: Event2, label: `Timeframe: ${current.label}` }) }),
|
|
10880
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(DropdownMenuContent, { className: "min-w-28", children: timeframes.map((t) => /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(
|
|
10672
10881
|
DropdownMenuItem,
|
|
10673
10882
|
{
|
|
10674
10883
|
onSelect: () => onChange(t.value),
|
|
10675
|
-
icon: /* @__PURE__ */ (0,
|
|
10884
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(IconGlyph, { glyph: Check, className: t.value === current.value ? void 0 : "invisible" }),
|
|
10676
10885
|
children: [
|
|
10677
10886
|
t.label,
|
|
10678
|
-
t.value === current.value && /* @__PURE__ */ (0,
|
|
10887
|
+
t.value === current.value && /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("span", { className: "sr-only", children: " (current)" })
|
|
10679
10888
|
]
|
|
10680
10889
|
},
|
|
10681
10890
|
t.value
|
|
@@ -10689,8 +10898,8 @@ function ChartFiltersMenu({
|
|
|
10689
10898
|
}) {
|
|
10690
10899
|
const on = filters.filter((f) => active.includes(f.value));
|
|
10691
10900
|
const toggle = (value) => onChange(active.includes(value) ? active.filter((v) => v !== value) : [...active, value]);
|
|
10692
|
-
return /* @__PURE__ */ (0,
|
|
10693
|
-
/* @__PURE__ */ (0,
|
|
10901
|
+
return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("div", { "data-slot": "chart-filters", className: "shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(DropdownMenu, { children: [
|
|
10902
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
|
|
10694
10903
|
GlyphButton,
|
|
10695
10904
|
{
|
|
10696
10905
|
icon: Tune,
|
|
@@ -10698,9 +10907,9 @@ function ChartFiltersMenu({
|
|
|
10698
10907
|
label: on.length > 0 ? `Filters: ${on.length} on` : "Filters"
|
|
10699
10908
|
}
|
|
10700
10909
|
) }),
|
|
10701
|
-
/* @__PURE__ */ (0,
|
|
10910
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(DropdownMenuContent, { className: "min-w-44", children: filters.map((f) => {
|
|
10702
10911
|
const checked = active.includes(f.value);
|
|
10703
|
-
return /* @__PURE__ */ (0,
|
|
10912
|
+
return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
|
|
10704
10913
|
DropdownMenuItem,
|
|
10705
10914
|
{
|
|
10706
10915
|
role: "menuitemcheckbox",
|
|
@@ -10709,7 +10918,7 @@ function ChartFiltersMenu({
|
|
|
10709
10918
|
event.preventDefault();
|
|
10710
10919
|
toggle(f.value);
|
|
10711
10920
|
},
|
|
10712
|
-
icon: /* @__PURE__ */ (0,
|
|
10921
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(IconGlyph, { glyph: Check, className: checked ? void 0 : "invisible" }),
|
|
10713
10922
|
children: f.label
|
|
10714
10923
|
},
|
|
10715
10924
|
f.value
|
|
@@ -10735,20 +10944,20 @@ function ChartHeader({
|
|
|
10735
10944
|
const showTimeframes = timeframes && timeframes.length > 0 && onTimeframeChange;
|
|
10736
10945
|
const showFilters = filters && filters.length > 0 && onFiltersChange;
|
|
10737
10946
|
const hasText = Boolean(title || description);
|
|
10738
|
-
return /* @__PURE__ */ (0,
|
|
10947
|
+
return /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(
|
|
10739
10948
|
"div",
|
|
10740
10949
|
{
|
|
10741
10950
|
"data-slot": "chart-header",
|
|
10742
10951
|
className: cn("flex flex-wrap items-start gap-x-4 gap-y-2", hasText ? "justify-between" : "justify-end"),
|
|
10743
10952
|
children: [
|
|
10744
|
-
hasText && /* @__PURE__ */ (0,
|
|
10745
|
-
title && /* @__PURE__ */ (0,
|
|
10746
|
-
description && /* @__PURE__ */ (0,
|
|
10953
|
+
hasText && /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("div", { className: "flex min-w-0 flex-col gap-1", children: [
|
|
10954
|
+
title && /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("h3", { className: "m-0 text-subhead font-semibold leading-none tracking-tight text-foreground", children: title }),
|
|
10955
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("p", { className: "m-0 text-caption text-muted-foreground", children: description })
|
|
10747
10956
|
] }),
|
|
10748
|
-
/* @__PURE__ */ (0,
|
|
10749
|
-
(showTimeframes || showFilters) && /* @__PURE__ */ (0,
|
|
10750
|
-
showFilters && /* @__PURE__ */ (0,
|
|
10751
|
-
showTimeframes && /* @__PURE__ */ (0,
|
|
10957
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("div", { className: "flex shrink-0 items-center gap-1", children: [
|
|
10958
|
+
(showTimeframes || showFilters) && /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)("div", { className: "flex items-center gap-0.5", children: [
|
|
10959
|
+
showFilters && /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(ChartFiltersMenu, { filters, active: activeFilters ?? [], onChange: onFiltersChange }),
|
|
10960
|
+
showTimeframes && /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
|
|
10752
10961
|
ChartTimeframeMenu,
|
|
10753
10962
|
{
|
|
10754
10963
|
timeframes,
|
|
@@ -10757,7 +10966,7 @@ function ChartHeader({
|
|
|
10757
10966
|
}
|
|
10758
10967
|
)
|
|
10759
10968
|
] }),
|
|
10760
|
-
/* @__PURE__ */ (0,
|
|
10969
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(
|
|
10761
10970
|
ChartViewToggle,
|
|
10762
10971
|
{
|
|
10763
10972
|
view,
|
|
@@ -10773,13 +10982,13 @@ function ChartHeader({
|
|
|
10773
10982
|
);
|
|
10774
10983
|
}
|
|
10775
10984
|
function ChartLegendRow({ children }) {
|
|
10776
|
-
return /* @__PURE__ */ (0,
|
|
10985
|
+
return /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("div", { "data-slot": "chart-legend-row", children });
|
|
10777
10986
|
}
|
|
10778
10987
|
function ChartDataTable({ label, table }) {
|
|
10779
|
-
return /* @__PURE__ */ (0,
|
|
10780
|
-
/* @__PURE__ */ (0,
|
|
10781
|
-
/* @__PURE__ */ (0,
|
|
10782
|
-
/* @__PURE__ */ (0,
|
|
10988
|
+
return /* @__PURE__ */ (0, import_jsx_runtime117.jsxs)(Table, { children: [
|
|
10989
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)("caption", { className: "sr-only", children: label }),
|
|
10990
|
+
/* @__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)) }) }),
|
|
10991
|
+
/* @__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
10992
|
] });
|
|
10784
10993
|
}
|
|
10785
10994
|
function ChartFrame({
|
|
@@ -10793,18 +11002,18 @@ function ChartFrame({
|
|
|
10793
11002
|
...head
|
|
10794
11003
|
}) {
|
|
10795
11004
|
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,
|
|
11005
|
+
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: [
|
|
11006
|
+
scale && /* @__PURE__ */ (0, import_jsx_runtime117.jsx)("p", { "data-slot": "chart-scale", className: "sr-only", children: scale }),
|
|
11007
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)(ChartHeader, { ...head, view, onViewChange: setView }),
|
|
11008
|
+
view === "chart" ? children : /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(ChartDataTable, { label, table }),
|
|
11009
|
+
view === "chart" && legend && /* @__PURE__ */ (0, import_jsx_runtime117.jsx)(ChartLegendRow, { children: legend }),
|
|
11010
|
+
/* @__PURE__ */ (0, import_jsx_runtime117.jsx)("p", { "aria-live": "polite", className: "sr-only", children: announcement ?? "" })
|
|
10802
11011
|
] });
|
|
10803
11012
|
}
|
|
10804
11013
|
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
11014
|
|
|
10806
11015
|
// src/web/components/trend-chart.tsx
|
|
10807
|
-
var
|
|
11016
|
+
var import_jsx_runtime118 = require("react/jsx-runtime");
|
|
10808
11017
|
var toneFill = {
|
|
10809
11018
|
// The charts' green, so every chart draws the same one.
|
|
10810
11019
|
primary: "var(--series-1)",
|
|
@@ -10914,7 +11123,7 @@ function TrendChart({
|
|
|
10914
11123
|
},
|
|
10915
11124
|
[active, count3]
|
|
10916
11125
|
);
|
|
10917
|
-
if (count3 === 0) return /* @__PURE__ */ (0,
|
|
11126
|
+
if (count3 === 0) return /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(import_jsx_runtime118.Fragment, { children: empty ?? null });
|
|
10918
11127
|
const textures = series.map((s) => s.texture);
|
|
10919
11128
|
const totals = points.map(
|
|
10920
11129
|
(point) => series.reduce((sum, s) => sum + Math.max(0, point.values[s.id] ?? 0), 0)
|
|
@@ -10947,15 +11156,15 @@ function TrendChart({
|
|
|
10947
11156
|
const activeTitle = activePoint ? activePoint.detail ?? activePoint.label : "";
|
|
10948
11157
|
const containerWidth = containerRef.current?.clientWidth ?? width;
|
|
10949
11158
|
const toContainer = width > 0 ? containerWidth / width : 1;
|
|
10950
|
-
return /* @__PURE__ */ (0,
|
|
11159
|
+
return /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)(
|
|
10951
11160
|
"figure",
|
|
10952
11161
|
{
|
|
10953
11162
|
"data-slot": "trend-chart",
|
|
10954
11163
|
"aria-label": label,
|
|
10955
11164
|
className: cn("m-0 min-w-0 space-y-2", className),
|
|
10956
11165
|
children: [
|
|
10957
|
-
/* @__PURE__ */ (0,
|
|
10958
|
-
view === "table" && /* @__PURE__ */ (0,
|
|
11166
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)(ChartHeader, { ...head, view, onViewChange: setView }),
|
|
11167
|
+
view === "table" && /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
|
|
10959
11168
|
ChartDataTable,
|
|
10960
11169
|
{
|
|
10961
11170
|
label,
|
|
@@ -10969,8 +11178,8 @@ function TrendChart({
|
|
|
10969
11178
|
}
|
|
10970
11179
|
}
|
|
10971
11180
|
),
|
|
10972
|
-
/* @__PURE__ */ (0,
|
|
10973
|
-
/* @__PURE__ */ (0,
|
|
11181
|
+
/* @__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) : "" }),
|
|
11182
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsxs)(
|
|
10974
11183
|
"div",
|
|
10975
11184
|
{
|
|
10976
11185
|
ref: containerRef,
|
|
@@ -10985,7 +11194,7 @@ function TrendChart({
|
|
|
10985
11194
|
onBlur: () => setActive(null),
|
|
10986
11195
|
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
11196
|
children: [
|
|
10988
|
-
/* @__PURE__ */ (0,
|
|
11197
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsxs)(
|
|
10989
11198
|
"svg",
|
|
10990
11199
|
{
|
|
10991
11200
|
width: "100%",
|
|
@@ -10996,11 +11205,11 @@ function TrendChart({
|
|
|
10996
11205
|
onPointerLeave: () => setActive(null),
|
|
10997
11206
|
"aria-hidden": "true",
|
|
10998
11207
|
children: [
|
|
10999
|
-
/* @__PURE__ */ (0,
|
|
11000
|
-
(s, index) => textures[index] === "hatch" ? /* @__PURE__ */ (0,
|
|
11208
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)("defs", { children: series.map(
|
|
11209
|
+
(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
11210
|
) }),
|
|
11002
|
-
/* @__PURE__ */ (0,
|
|
11003
|
-
/* @__PURE__ */ (0,
|
|
11211
|
+
/* @__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: [
|
|
11212
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
|
|
11004
11213
|
"line",
|
|
11005
11214
|
{
|
|
11006
11215
|
x1: plotLeft,
|
|
@@ -11011,7 +11220,7 @@ function TrendChart({
|
|
|
11011
11220
|
strokeDasharray: tick === 0 ? void 0 : "2 3"
|
|
11012
11221
|
}
|
|
11013
11222
|
),
|
|
11014
|
-
/* @__PURE__ */ (0,
|
|
11223
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
|
|
11015
11224
|
"text",
|
|
11016
11225
|
{
|
|
11017
11226
|
x: plotLeft - 6,
|
|
@@ -11025,7 +11234,7 @@ function TrendChart({
|
|
|
11025
11234
|
}
|
|
11026
11235
|
)
|
|
11027
11236
|
] }, tick)) }),
|
|
11028
|
-
active !== null && /* @__PURE__ */ (0,
|
|
11237
|
+
active !== null && /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
|
|
11029
11238
|
"rect",
|
|
11030
11239
|
{
|
|
11031
11240
|
"data-slot": "trend-chart-active",
|
|
@@ -11037,9 +11246,9 @@ function TrendChart({
|
|
|
11037
11246
|
opacity: 0.14
|
|
11038
11247
|
}
|
|
11039
11248
|
),
|
|
11040
|
-
/* @__PURE__ */ (0,
|
|
11249
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)("g", { "data-slot": "trend-chart-bars", children: points.map((point, pointIndex) => {
|
|
11041
11250
|
let base = 0;
|
|
11042
|
-
return /* @__PURE__ */ (0,
|
|
11251
|
+
return /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)("g", { "data-period": point.key, children: [
|
|
11043
11252
|
series.map((s, seriesIndex) => {
|
|
11044
11253
|
const value = point.values[s.id] ?? 0;
|
|
11045
11254
|
if (value <= 0) return null;
|
|
@@ -11049,7 +11258,7 @@ function TrendChart({
|
|
|
11049
11258
|
base += value;
|
|
11050
11259
|
const isTop = series.slice(seriesIndex + 1).every((next) => (point.values[next.id] ?? 0) <= 0);
|
|
11051
11260
|
const hatched = textures[seriesIndex] === "hatch";
|
|
11052
|
-
return /* @__PURE__ */ (0,
|
|
11261
|
+
return /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
|
|
11053
11262
|
"path",
|
|
11054
11263
|
{
|
|
11055
11264
|
"data-series": s.id,
|
|
@@ -11067,7 +11276,7 @@ function TrendChart({
|
|
|
11067
11276
|
s.id
|
|
11068
11277
|
);
|
|
11069
11278
|
}),
|
|
11070
|
-
/* @__PURE__ */ (0,
|
|
11279
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
|
|
11071
11280
|
"rect",
|
|
11072
11281
|
{
|
|
11073
11282
|
x: plotLeft + pointIndex * band,
|
|
@@ -11080,7 +11289,7 @@ function TrendChart({
|
|
|
11080
11289
|
)
|
|
11081
11290
|
] }, point.key);
|
|
11082
11291
|
}) }),
|
|
11083
|
-
/* @__PURE__ */ (0,
|
|
11292
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)("g", { "data-slot": "trend-chart-x-axis", children: labelIndices.map((index) => /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
|
|
11084
11293
|
"text",
|
|
11085
11294
|
{
|
|
11086
11295
|
x: plotLeft + index * band + band / 2,
|
|
@@ -11095,7 +11304,7 @@ function TrendChart({
|
|
|
11095
11304
|
]
|
|
11096
11305
|
}
|
|
11097
11306
|
),
|
|
11098
|
-
activePoint && /* @__PURE__ */ (0,
|
|
11307
|
+
activePoint && /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
|
|
11099
11308
|
ChartTooltip,
|
|
11100
11309
|
{
|
|
11101
11310
|
title: activeTitle,
|
|
@@ -11109,16 +11318,16 @@ function TrendChart({
|
|
|
11109
11318
|
]
|
|
11110
11319
|
}
|
|
11111
11320
|
),
|
|
11112
|
-
view === "chart" && /* @__PURE__ */ (0,
|
|
11321
|
+
view === "chart" && /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(ChartLegendRow, { children: /* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
|
|
11113
11322
|
ChartLegend,
|
|
11114
11323
|
{
|
|
11115
11324
|
items: styledSeries.map((s, index) => ({
|
|
11116
11325
|
id: s.id,
|
|
11117
11326
|
label: s.label,
|
|
11118
11327
|
color: toneFill[s.tone],
|
|
11119
|
-
swatch: /* @__PURE__ */ (0,
|
|
11120
|
-
/* @__PURE__ */ (0,
|
|
11121
|
-
/* @__PURE__ */ (0,
|
|
11328
|
+
swatch: /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)("svg", { width: "12", height: "12", "aria-hidden": "true", className: "shrink-0", children: [
|
|
11329
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)(Texture, { id: `${idBase}-legend-${index}`, tone: s.tone, texture: s.texture }),
|
|
11330
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)(
|
|
11122
11331
|
"rect",
|
|
11123
11332
|
{
|
|
11124
11333
|
width: "12",
|
|
@@ -11133,7 +11342,7 @@ function TrendChart({
|
|
|
11133
11342
|
...visibility.legend
|
|
11134
11343
|
}
|
|
11135
11344
|
) }),
|
|
11136
|
-
/* @__PURE__ */ (0,
|
|
11345
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsxs)("p", { "data-slot": "trend-chart-scale", className: "sr-only", children: [
|
|
11137
11346
|
scaleLabel,
|
|
11138
11347
|
" \xB7 linear, from 0"
|
|
11139
11348
|
] })
|
|
@@ -11142,9 +11351,9 @@ function TrendChart({
|
|
|
11142
11351
|
);
|
|
11143
11352
|
}
|
|
11144
11353
|
function SolidFill({ id, tone }) {
|
|
11145
|
-
return /* @__PURE__ */ (0,
|
|
11146
|
-
/* @__PURE__ */ (0,
|
|
11147
|
-
/* @__PURE__ */ (0,
|
|
11354
|
+
return /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)("linearGradient", { id, x1: "0", y1: "0", x2: "0", y2: "1", children: [
|
|
11355
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)("stop", { offset: "0%", style: { stopColor: `color-mix(in oklab, ${toneFill[tone]}, white 35%)` } }),
|
|
11356
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)("stop", { offset: "100%", style: { stopColor: toneFill[tone] } })
|
|
11148
11357
|
] });
|
|
11149
11358
|
}
|
|
11150
11359
|
function Texture({
|
|
@@ -11153,15 +11362,15 @@ function Texture({
|
|
|
11153
11362
|
texture
|
|
11154
11363
|
}) {
|
|
11155
11364
|
if (texture !== "hatch") return null;
|
|
11156
|
-
return /* @__PURE__ */ (0,
|
|
11157
|
-
/* @__PURE__ */ (0,
|
|
11158
|
-
/* @__PURE__ */ (0,
|
|
11365
|
+
return /* @__PURE__ */ (0, import_jsx_runtime118.jsxs)("pattern", { id, width: "4", height: "4", patternUnits: "userSpaceOnUse", patternTransform: "rotate(45)", children: [
|
|
11366
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)("rect", { width: "4", height: "4", fill: toneFill[tone], opacity: 0.25 }),
|
|
11367
|
+
/* @__PURE__ */ (0, import_jsx_runtime118.jsx)("rect", { width: "2", height: "4", fill: toneFill[tone] })
|
|
11159
11368
|
] });
|
|
11160
11369
|
}
|
|
11161
11370
|
|
|
11162
11371
|
// src/web/components/charts/line-chart.tsx
|
|
11163
11372
|
var import_react34 = require("react");
|
|
11164
|
-
var
|
|
11373
|
+
var import_jsx_runtime119 = require("react/jsx-runtime");
|
|
11165
11374
|
var MARGIN2 = { top: 12, right: 16, bottom: 26, left: 8 };
|
|
11166
11375
|
function LineChart({
|
|
11167
11376
|
data,
|
|
@@ -11183,7 +11392,7 @@ function LineChart({
|
|
|
11183
11392
|
const series = allSeries.filter((s) => visibility.isVisible(s.id));
|
|
11184
11393
|
const slotOf = (id) => allSeries.findIndex((s) => s.id === id);
|
|
11185
11394
|
const count3 = data.length;
|
|
11186
|
-
if (count3 === 0 || series.length === 0) return /* @__PURE__ */ (0,
|
|
11395
|
+
if (count3 === 0 || series.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(import_jsx_runtime119.Fragment, { children: empty ?? null });
|
|
11187
11396
|
const max = Math.max(0, ...data.flatMap((d) => series.map((s) => d.values[s.id] ?? 0)));
|
|
11188
11397
|
const ticks = chartValueTicks(max, { integer });
|
|
11189
11398
|
const tickLabels = ticks.map(formatValue);
|
|
@@ -11220,14 +11429,14 @@ function LineChart({
|
|
|
11220
11429
|
});
|
|
11221
11430
|
};
|
|
11222
11431
|
const activeDatum = active === null ? null : data[active];
|
|
11223
|
-
return /* @__PURE__ */ (0,
|
|
11432
|
+
return /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
|
|
11224
11433
|
ChartFrame,
|
|
11225
11434
|
{
|
|
11226
11435
|
...head,
|
|
11227
11436
|
label,
|
|
11228
11437
|
className,
|
|
11229
11438
|
scale: `${scaleLabel} \xB7 linear, from 0`,
|
|
11230
|
-
legend: allSeries.length > 1 ? /* @__PURE__ */ (0,
|
|
11439
|
+
legend: allSeries.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
|
|
11231
11440
|
ChartLegend,
|
|
11232
11441
|
{
|
|
11233
11442
|
keyShape: "line",
|
|
@@ -11240,7 +11449,7 @@ function LineChart({
|
|
|
11240
11449
|
rows: data.map((d) => [d.detail ?? d.label, ...series.map((s) => formatValue(d.values[s.id] ?? 0))])
|
|
11241
11450
|
},
|
|
11242
11451
|
announcement: activeDatum ? tooltipText(activeDatum.detail ?? activeDatum.label, rowsAt(active)) : void 0,
|
|
11243
|
-
children: /* @__PURE__ */ (0,
|
|
11452
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)(
|
|
11244
11453
|
"div",
|
|
11245
11454
|
{
|
|
11246
11455
|
ref: containerRef,
|
|
@@ -11252,7 +11461,7 @@ function LineChart({
|
|
|
11252
11461
|
onBlur: () => setActive(null),
|
|
11253
11462
|
className: plotClass,
|
|
11254
11463
|
children: [
|
|
11255
|
-
/* @__PURE__ */ (0,
|
|
11464
|
+
/* @__PURE__ */ (0, import_jsx_runtime119.jsxs)(
|
|
11256
11465
|
"svg",
|
|
11257
11466
|
{
|
|
11258
11467
|
width: "100%",
|
|
@@ -11263,13 +11472,13 @@ function LineChart({
|
|
|
11263
11472
|
onPointerMove,
|
|
11264
11473
|
onPointerLeave: () => setActive(null),
|
|
11265
11474
|
children: [
|
|
11266
|
-
showArea && /* @__PURE__ */ (0,
|
|
11267
|
-
/* @__PURE__ */ (0,
|
|
11268
|
-
/* @__PURE__ */ (0,
|
|
11475
|
+
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: [
|
|
11476
|
+
/* @__PURE__ */ (0, import_jsx_runtime119.jsx)("stop", { offset: "0", stopColor: seriesColor(0), stopOpacity: "0.14" }),
|
|
11477
|
+
/* @__PURE__ */ (0, import_jsx_runtime119.jsx)("stop", { offset: "1", stopColor: seriesColor(0), stopOpacity: "0.04" })
|
|
11269
11478
|
] }) }),
|
|
11270
|
-
/* @__PURE__ */ (0,
|
|
11271
|
-
/* @__PURE__ */ (0,
|
|
11272
|
-
/* @__PURE__ */ (0,
|
|
11479
|
+
/* @__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: [
|
|
11480
|
+
/* @__PURE__ */ (0, import_jsx_runtime119.jsx)("line", { x1: plotLeft, x2: plotRight, y1: y(tick), y2: y(tick), stroke: "var(--border)" }),
|
|
11481
|
+
/* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
|
|
11273
11482
|
"text",
|
|
11274
11483
|
{
|
|
11275
11484
|
x: plotLeft - 8,
|
|
@@ -11283,7 +11492,7 @@ function LineChart({
|
|
|
11283
11492
|
}
|
|
11284
11493
|
)
|
|
11285
11494
|
] }, tick)) }),
|
|
11286
|
-
showArea && /* @__PURE__ */ (0,
|
|
11495
|
+
showArea && /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
|
|
11287
11496
|
"path",
|
|
11288
11497
|
{
|
|
11289
11498
|
"data-slot": "chart-area",
|
|
@@ -11291,7 +11500,7 @@ function LineChart({
|
|
|
11291
11500
|
fill: `url(#${idBase}-wash)`
|
|
11292
11501
|
}
|
|
11293
11502
|
),
|
|
11294
|
-
/* @__PURE__ */ (0,
|
|
11503
|
+
/* @__PURE__ */ (0, import_jsx_runtime119.jsx)("g", { "data-slot": "chart-lines", children: series.map((s, slot) => /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
|
|
11295
11504
|
"path",
|
|
11296
11505
|
{
|
|
11297
11506
|
"data-series": s.id,
|
|
@@ -11304,7 +11513,7 @@ function LineChart({
|
|
|
11304
11513
|
},
|
|
11305
11514
|
s.id
|
|
11306
11515
|
)) }),
|
|
11307
|
-
/* @__PURE__ */ (0,
|
|
11516
|
+
/* @__PURE__ */ (0, import_jsx_runtime119.jsx)("g", { "data-slot": "chart-end-markers", children: series.map((s, slot) => /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
|
|
11308
11517
|
"circle",
|
|
11309
11518
|
{
|
|
11310
11519
|
cx: x(count3 - 1),
|
|
@@ -11316,9 +11525,9 @@ function LineChart({
|
|
|
11316
11525
|
},
|
|
11317
11526
|
s.id
|
|
11318
11527
|
)) }),
|
|
11319
|
-
active !== null && /* @__PURE__ */ (0,
|
|
11320
|
-
/* @__PURE__ */ (0,
|
|
11321
|
-
series.map((s, slot) => /* @__PURE__ */ (0,
|
|
11528
|
+
active !== null && /* @__PURE__ */ (0, import_jsx_runtime119.jsxs)("g", { "data-slot": "chart-crosshair", children: [
|
|
11529
|
+
/* @__PURE__ */ (0, import_jsx_runtime119.jsx)("line", { x1: x(active), x2: x(active), y1: plotTop, y2: plotBottom, stroke: "var(--muted-foreground)", strokeWidth: 1 }),
|
|
11530
|
+
series.map((s, slot) => /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
|
|
11322
11531
|
"circle",
|
|
11323
11532
|
{
|
|
11324
11533
|
cx: x(active),
|
|
@@ -11331,7 +11540,7 @@ function LineChart({
|
|
|
11331
11540
|
s.id
|
|
11332
11541
|
))
|
|
11333
11542
|
] }),
|
|
11334
|
-
/* @__PURE__ */ (0,
|
|
11543
|
+
/* @__PURE__ */ (0, import_jsx_runtime119.jsx)("g", { "data-slot": "chart-x-axis", children: labelIndices.map((index) => /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
|
|
11335
11544
|
"text",
|
|
11336
11545
|
{
|
|
11337
11546
|
x: x(index),
|
|
@@ -11346,7 +11555,7 @@ function LineChart({
|
|
|
11346
11555
|
]
|
|
11347
11556
|
}
|
|
11348
11557
|
),
|
|
11349
|
-
activeDatum && /* @__PURE__ */ (0,
|
|
11558
|
+
activeDatum && /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(
|
|
11350
11559
|
ChartTooltip,
|
|
11351
11560
|
{
|
|
11352
11561
|
title: activeDatum.detail ?? activeDatum.label,
|
|
@@ -11363,12 +11572,12 @@ function LineChart({
|
|
|
11363
11572
|
);
|
|
11364
11573
|
}
|
|
11365
11574
|
function AreaChart2(props) {
|
|
11366
|
-
return /* @__PURE__ */ (0,
|
|
11575
|
+
return /* @__PURE__ */ (0, import_jsx_runtime119.jsx)(LineChart, { ...props, area: true, className: cn(props.className) });
|
|
11367
11576
|
}
|
|
11368
11577
|
|
|
11369
11578
|
// src/web/components/charts/bar-chart.tsx
|
|
11370
11579
|
var import_react35 = require("react");
|
|
11371
|
-
var
|
|
11580
|
+
var import_jsx_runtime120 = require("react/jsx-runtime");
|
|
11372
11581
|
var MAX_BAR = 24;
|
|
11373
11582
|
var GAP = BAR_GAP;
|
|
11374
11583
|
function BarChart2({
|
|
@@ -11391,7 +11600,7 @@ function BarChart2({
|
|
|
11391
11600
|
const series = allSeries.filter((s) => visibility.isVisible(s.id));
|
|
11392
11601
|
const slotOf = (id) => allSeries.findIndex((s) => s.id === id);
|
|
11393
11602
|
const count3 = data.length;
|
|
11394
|
-
if (count3 === 0 || series.length === 0) return /* @__PURE__ */ (0,
|
|
11603
|
+
if (count3 === 0 || series.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(import_jsx_runtime120.Fragment, { children: empty ?? null });
|
|
11395
11604
|
const stacked = layout === "stacked";
|
|
11396
11605
|
const horizontal = orientation === "horizontal";
|
|
11397
11606
|
const totals = data.map((d) => series.reduce((sum, s) => sum + Math.max(0, d.values[s.id] ?? 0), 0));
|
|
@@ -11444,11 +11653,11 @@ function BarChart2({
|
|
|
11444
11653
|
const across = stacked ? groupStart : groupStart + slot * (barThickness + GAP);
|
|
11445
11654
|
const seam = stacked && offset > 0 ? GAP : 0;
|
|
11446
11655
|
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,
|
|
11656
|
+
marks.push(/* @__PURE__ */ (0, import_jsx_runtime120.jsx)("path", { "data-series": s.id, d: path, fill: seriesColor(slotOf(s.id)) }, s.id));
|
|
11448
11657
|
});
|
|
11449
|
-
return /* @__PURE__ */ (0,
|
|
11658
|
+
return /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)("g", { "data-category": d.key, opacity: active !== null && active !== index ? 0.55 : 1, children: [
|
|
11450
11659
|
marks,
|
|
11451
|
-
/* @__PURE__ */ (0,
|
|
11660
|
+
/* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
|
|
11452
11661
|
"rect",
|
|
11453
11662
|
{
|
|
11454
11663
|
x: horizontal ? plotLeft : bandStart,
|
|
@@ -11464,14 +11673,14 @@ function BarChart2({
|
|
|
11464
11673
|
const labelIndices = horizontal ? data.map((_, index) => index) : chartLabelIndices(count3, plotWidth / 56);
|
|
11465
11674
|
const activeDatum = active === null ? null : data[active];
|
|
11466
11675
|
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,
|
|
11676
|
+
return /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
|
|
11468
11677
|
ChartFrame,
|
|
11469
11678
|
{
|
|
11470
11679
|
...head,
|
|
11471
11680
|
label,
|
|
11472
11681
|
className,
|
|
11473
11682
|
scale: `${scaleLabel} \xB7 linear, from 0`,
|
|
11474
|
-
legend: allSeries.length > 1 ? /* @__PURE__ */ (0,
|
|
11683
|
+
legend: allSeries.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
|
|
11475
11684
|
ChartLegend,
|
|
11476
11685
|
{
|
|
11477
11686
|
items: allSeries.map((s, slot) => ({ id: s.id, label: s.label, color: seriesColor(slot) })),
|
|
@@ -11491,7 +11700,7 @@ function BarChart2({
|
|
|
11491
11700
|
])
|
|
11492
11701
|
},
|
|
11493
11702
|
announcement: activeDatum ? tooltipText(activeDatum.detail ?? activeDatum.label, rowsAt(active)) : void 0,
|
|
11494
|
-
children: /* @__PURE__ */ (0,
|
|
11703
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)(
|
|
11495
11704
|
"div",
|
|
11496
11705
|
{
|
|
11497
11706
|
ref: containerRef,
|
|
@@ -11504,12 +11713,12 @@ function BarChart2({
|
|
|
11504
11713
|
onPointerLeave: () => setActive(null),
|
|
11505
11714
|
className: plotClass,
|
|
11506
11715
|
children: [
|
|
11507
|
-
/* @__PURE__ */ (0,
|
|
11508
|
-
/* @__PURE__ */ (0,
|
|
11716
|
+
/* @__PURE__ */ (0, import_jsx_runtime120.jsxs)("svg", { width: "100%", height: svgHeight, viewBox: `0 0 ${width} ${svgHeight}`, className: "block overflow-visible", "aria-hidden": "true", children: [
|
|
11717
|
+
/* @__PURE__ */ (0, import_jsx_runtime120.jsx)("g", { "data-slot": "chart-value-axis", children: ticks.map((tick, index) => {
|
|
11509
11718
|
const at = horizontal ? plotLeft + scale(tick) : plotBottom - scale(tick);
|
|
11510
|
-
return /* @__PURE__ */ (0,
|
|
11511
|
-
horizontal ? /* @__PURE__ */ (0,
|
|
11512
|
-
/* @__PURE__ */ (0,
|
|
11719
|
+
return /* @__PURE__ */ (0, import_jsx_runtime120.jsxs)("g", { children: [
|
|
11720
|
+
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)" }),
|
|
11721
|
+
/* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
|
|
11513
11722
|
"text",
|
|
11514
11723
|
{
|
|
11515
11724
|
x: horizontal ? at : plotLeft - 8,
|
|
@@ -11524,8 +11733,8 @@ function BarChart2({
|
|
|
11524
11733
|
)
|
|
11525
11734
|
] }, tick);
|
|
11526
11735
|
}) }),
|
|
11527
|
-
/* @__PURE__ */ (0,
|
|
11528
|
-
/* @__PURE__ */ (0,
|
|
11736
|
+
/* @__PURE__ */ (0, import_jsx_runtime120.jsx)("g", { "data-slot": "chart-bars", children: bars }),
|
|
11737
|
+
/* @__PURE__ */ (0, import_jsx_runtime120.jsx)("g", { "data-slot": "chart-category-axis", children: labelIndices.map((index) => /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
|
|
11529
11738
|
"text",
|
|
11530
11739
|
{
|
|
11531
11740
|
x: horizontal ? plotLeft - 8 : plotLeft + (index + 0.5) * bandSize,
|
|
@@ -11539,7 +11748,7 @@ function BarChart2({
|
|
|
11539
11748
|
data[index].key
|
|
11540
11749
|
)) })
|
|
11541
11750
|
] }),
|
|
11542
|
-
activeDatum && /* @__PURE__ */ (0,
|
|
11751
|
+
activeDatum && /* @__PURE__ */ (0, import_jsx_runtime120.jsx)(
|
|
11543
11752
|
ChartTooltip,
|
|
11544
11753
|
{
|
|
11545
11754
|
title: activeDatum.detail ?? activeDatum.label,
|
|
@@ -11558,7 +11767,7 @@ function BarChart2({
|
|
|
11558
11767
|
|
|
11559
11768
|
// src/web/components/charts/mixed-chart.tsx
|
|
11560
11769
|
var import_react36 = require("react");
|
|
11561
|
-
var
|
|
11770
|
+
var import_jsx_runtime121 = require("react/jsx-runtime");
|
|
11562
11771
|
var MARK_VIEWS = {
|
|
11563
11772
|
bar: { value: "bar", label: "Bars", icon: "bar_chart" },
|
|
11564
11773
|
stacked: { value: "stacked", label: "Stacked bars", icon: "stacked_bar_chart" },
|
|
@@ -11571,12 +11780,12 @@ var MAX_BAR_GROUP = 56;
|
|
|
11571
11780
|
var ALL_MARKS = ["bar", "stacked", "line", "area", "dots"];
|
|
11572
11781
|
function MarkSwatch({ mark, color }) {
|
|
11573
11782
|
if (mark === "area") {
|
|
11574
|
-
return /* @__PURE__ */ (0,
|
|
11575
|
-
/* @__PURE__ */ (0,
|
|
11576
|
-
/* @__PURE__ */ (0,
|
|
11783
|
+
return /* @__PURE__ */ (0, import_jsx_runtime121.jsxs)("svg", { width: "12", height: "12", "aria-hidden": "true", className: "shrink-0", children: [
|
|
11784
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)("rect", { width: "12", height: "12", rx: "3", fill: color, fillOpacity: "0.25" }),
|
|
11785
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)("line", { x1: "1", x2: "11", y1: "3", y2: "3", stroke: color, strokeWidth: "2", strokeLinecap: "round" })
|
|
11577
11786
|
] });
|
|
11578
11787
|
}
|
|
11579
|
-
return /* @__PURE__ */ (0,
|
|
11788
|
+
return /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(LegendSwatch, { color, shape: mark === "line" ? "line" : mark === "dots" ? "dot" : "rect" });
|
|
11580
11789
|
}
|
|
11581
11790
|
function MixedChart({
|
|
11582
11791
|
data,
|
|
@@ -11600,7 +11809,7 @@ function MixedChart({
|
|
|
11600
11809
|
const series = allSeries.filter((s) => visibility.isVisible(s.id));
|
|
11601
11810
|
const colorOf = (id) => seriesColor(allSeries.findIndex((s) => s.id === id));
|
|
11602
11811
|
const count3 = data.length;
|
|
11603
|
-
if (count3 === 0 || allSeries.length === 0) return /* @__PURE__ */ (0,
|
|
11812
|
+
if (count3 === 0 || allSeries.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(import_jsx_runtime121.Fragment, { children: empty ?? null });
|
|
11604
11813
|
const totals = data.map((d) => series.reduce((sum, s) => sum + Math.max(0, d.values[s.id] ?? 0), 0));
|
|
11605
11814
|
const max = mark === "stacked" ? Math.max(0, ...totals) : Math.max(0, ...data.flatMap((d) => series.map((s) => d.values[s.id] ?? 0)));
|
|
11606
11815
|
const ticks = chartValueTicks(max, { integer });
|
|
@@ -11639,7 +11848,7 @@ function MixedChart({
|
|
|
11639
11848
|
});
|
|
11640
11849
|
};
|
|
11641
11850
|
const activeDatum = active === null ? null : data[active];
|
|
11642
|
-
const strokeFor = (s) => /* @__PURE__ */ (0,
|
|
11851
|
+
const strokeFor = (s) => /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
|
|
11643
11852
|
"path",
|
|
11644
11853
|
{
|
|
11645
11854
|
"data-series": s.id,
|
|
@@ -11663,7 +11872,7 @@ function MixedChart({
|
|
|
11663
11872
|
const bottom = mark === "stacked" ? y(stackTop) : plotBottom;
|
|
11664
11873
|
if (mark === "stacked") stackTop += value;
|
|
11665
11874
|
const barTop = mark === "stacked" ? y(stackTop) : y(value);
|
|
11666
|
-
return /* @__PURE__ */ (0,
|
|
11875
|
+
return /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
|
|
11667
11876
|
"rect",
|
|
11668
11877
|
{
|
|
11669
11878
|
"data-series": s.id,
|
|
@@ -11681,11 +11890,11 @@ function MixedChart({
|
|
|
11681
11890
|
});
|
|
11682
11891
|
}
|
|
11683
11892
|
if (mark === "dots") {
|
|
11684
|
-
return series.map((s) => /* @__PURE__ */ (0,
|
|
11893
|
+
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
11894
|
}
|
|
11686
11895
|
if (mark === "area") {
|
|
11687
|
-
return /* @__PURE__ */ (0,
|
|
11688
|
-
series.map((s) => /* @__PURE__ */ (0,
|
|
11896
|
+
return /* @__PURE__ */ (0, import_jsx_runtime121.jsxs)(import_jsx_runtime121.Fragment, { children: [
|
|
11897
|
+
series.map((s) => /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
|
|
11689
11898
|
"path",
|
|
11690
11899
|
{
|
|
11691
11900
|
d: `${pathFor(s.id)}L${x(count3 - 1)},${plotBottom}L${x(0)},${plotBottom}Z`,
|
|
@@ -11698,7 +11907,7 @@ function MixedChart({
|
|
|
11698
11907
|
}
|
|
11699
11908
|
return series.map(strokeFor);
|
|
11700
11909
|
};
|
|
11701
|
-
return /* @__PURE__ */ (0,
|
|
11910
|
+
return /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
|
|
11702
11911
|
ChartFrame,
|
|
11703
11912
|
{
|
|
11704
11913
|
...head,
|
|
@@ -11708,14 +11917,14 @@ function MixedChart({
|
|
|
11708
11917
|
label,
|
|
11709
11918
|
className,
|
|
11710
11919
|
scale: `${scaleLabel} \xB7 linear, from 0`,
|
|
11711
|
-
legend: /* @__PURE__ */ (0,
|
|
11920
|
+
legend: /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
|
|
11712
11921
|
ChartLegend,
|
|
11713
11922
|
{
|
|
11714
11923
|
items: allSeries.map((s) => ({
|
|
11715
11924
|
id: s.id,
|
|
11716
11925
|
label: s.label,
|
|
11717
11926
|
color: colorOf(s.id),
|
|
11718
|
-
swatch: /* @__PURE__ */ (0,
|
|
11927
|
+
swatch: /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(MarkSwatch, { mark, color: colorOf(s.id) })
|
|
11719
11928
|
})),
|
|
11720
11929
|
...visibility.legend
|
|
11721
11930
|
}
|
|
@@ -11725,7 +11934,7 @@ function MixedChart({
|
|
|
11725
11934
|
rows: data.map((d) => [d.detail ?? d.label, ...allSeries.map((s) => formatValue(d.values[s.id] ?? 0))])
|
|
11726
11935
|
},
|
|
11727
11936
|
announcement: activeDatum ? tooltipText(activeDatum.detail ?? activeDatum.label, rowsAt(active)) : void 0,
|
|
11728
|
-
children: /* @__PURE__ */ (0,
|
|
11937
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime121.jsxs)(
|
|
11729
11938
|
"div",
|
|
11730
11939
|
{
|
|
11731
11940
|
ref: containerRef,
|
|
@@ -11737,7 +11946,7 @@ function MixedChart({
|
|
|
11737
11946
|
onBlur: () => setActive(null),
|
|
11738
11947
|
className: plotClass,
|
|
11739
11948
|
children: [
|
|
11740
|
-
/* @__PURE__ */ (0,
|
|
11949
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsxs)(
|
|
11741
11950
|
"svg",
|
|
11742
11951
|
{
|
|
11743
11952
|
width: "100%",
|
|
@@ -11748,13 +11957,13 @@ function MixedChart({
|
|
|
11748
11957
|
onPointerMove,
|
|
11749
11958
|
onPointerLeave: () => setActive(null),
|
|
11750
11959
|
children: [
|
|
11751
|
-
/* @__PURE__ */ (0,
|
|
11752
|
-
/* @__PURE__ */ (0,
|
|
11753
|
-
/* @__PURE__ */ (0,
|
|
11960
|
+
/* @__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: [
|
|
11961
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)("stop", { offset: "0", stopColor: colorOf(s.id), stopOpacity: "0.22" }),
|
|
11962
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)("stop", { offset: "1", stopColor: colorOf(s.id), stopOpacity: "0.03" })
|
|
11754
11963
|
] }, s.id)) }),
|
|
11755
|
-
/* @__PURE__ */ (0,
|
|
11756
|
-
/* @__PURE__ */ (0,
|
|
11757
|
-
/* @__PURE__ */ (0,
|
|
11964
|
+
/* @__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: [
|
|
11965
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)("line", { x1: plotLeft, x2: plotRight, y1: y(tick), y2: y(tick), stroke: "var(--border)" }),
|
|
11966
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
|
|
11758
11967
|
"text",
|
|
11759
11968
|
{
|
|
11760
11969
|
x: plotLeft - 8,
|
|
@@ -11768,7 +11977,7 @@ function MixedChart({
|
|
|
11768
11977
|
}
|
|
11769
11978
|
)
|
|
11770
11979
|
] }, tick)) }),
|
|
11771
|
-
active !== null && /* @__PURE__ */ (0,
|
|
11980
|
+
active !== null && /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
|
|
11772
11981
|
"rect",
|
|
11773
11982
|
{
|
|
11774
11983
|
"data-slot": "chart-active-band",
|
|
@@ -11780,8 +11989,8 @@ function MixedChart({
|
|
|
11780
11989
|
fillOpacity: 0.08
|
|
11781
11990
|
}
|
|
11782
11991
|
),
|
|
11783
|
-
/* @__PURE__ */ (0,
|
|
11784
|
-
active !== null && /* @__PURE__ */ (0,
|
|
11992
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)("g", { "data-slot": "chart-marks", "data-view": mark, children: marksLayer() }),
|
|
11993
|
+
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
11994
|
"circle",
|
|
11786
11995
|
{
|
|
11787
11996
|
cx: x(active),
|
|
@@ -11793,7 +12002,7 @@ function MixedChart({
|
|
|
11793
12002
|
},
|
|
11794
12003
|
s.id
|
|
11795
12004
|
)) }),
|
|
11796
|
-
/* @__PURE__ */ (0,
|
|
12005
|
+
/* @__PURE__ */ (0, import_jsx_runtime121.jsx)("g", { "data-slot": "chart-x-axis", children: labelIndices.map((index) => /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
|
|
11797
12006
|
"text",
|
|
11798
12007
|
{
|
|
11799
12008
|
x: x(index),
|
|
@@ -11808,7 +12017,7 @@ function MixedChart({
|
|
|
11808
12017
|
]
|
|
11809
12018
|
}
|
|
11810
12019
|
),
|
|
11811
|
-
activeDatum && /* @__PURE__ */ (0,
|
|
12020
|
+
activeDatum && /* @__PURE__ */ (0, import_jsx_runtime121.jsx)(
|
|
11812
12021
|
ChartTooltip,
|
|
11813
12022
|
{
|
|
11814
12023
|
title: activeDatum.detail ?? activeDatum.label,
|
|
@@ -11826,7 +12035,7 @@ function MixedChart({
|
|
|
11826
12035
|
}
|
|
11827
12036
|
|
|
11828
12037
|
// src/web/components/charts/bar-list.tsx
|
|
11829
|
-
var
|
|
12038
|
+
var import_jsx_runtime122 = require("react/jsx-runtime");
|
|
11830
12039
|
function BarList({
|
|
11831
12040
|
items,
|
|
11832
12041
|
label,
|
|
@@ -11839,7 +12048,7 @@ function BarList({
|
|
|
11839
12048
|
className,
|
|
11840
12049
|
...head
|
|
11841
12050
|
}) {
|
|
11842
|
-
if (items.length === 0) return /* @__PURE__ */ (0,
|
|
12051
|
+
if (items.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime122.jsx)(import_jsx_runtime122.Fragment, { children: empty ?? null });
|
|
11843
12052
|
const rows = sort === "desc" ? [...items].sort((a, b) => b.value - a.value) : items;
|
|
11844
12053
|
const top = Math.max(max ?? 0, ...rows.map((item) => item.value), 0) || 1;
|
|
11845
12054
|
const sum = rows.reduce((acc, item) => acc + Math.max(0, item.value), 0);
|
|
@@ -11847,7 +12056,7 @@ function BarList({
|
|
|
11847
12056
|
const framed = head.title !== void 0 || (head.timeframes?.length ?? 0) > 0;
|
|
11848
12057
|
const label_ = labelWidth ? `minmax(0,${labelWidth})` : "auto";
|
|
11849
12058
|
const wideColumns = showPercent ? `${label_} 1fr auto auto` : `${label_} 1fr auto`;
|
|
11850
|
-
const list = /* @__PURE__ */ (0,
|
|
12059
|
+
const list = /* @__PURE__ */ (0, import_jsx_runtime122.jsx)(
|
|
11851
12060
|
"ol",
|
|
11852
12061
|
{
|
|
11853
12062
|
"data-slot": "bar-list",
|
|
@@ -11862,7 +12071,7 @@ function BarList({
|
|
|
11862
12071
|
style: { "--bar-list-columns": wideColumns },
|
|
11863
12072
|
children: rows.map((item) => {
|
|
11864
12073
|
const share = Math.max(0, item.value) / top;
|
|
11865
|
-
return /* @__PURE__ */ (0,
|
|
12074
|
+
return /* @__PURE__ */ (0, import_jsx_runtime122.jsxs)(
|
|
11866
12075
|
"li",
|
|
11867
12076
|
{
|
|
11868
12077
|
"data-slot": "bar-list-row",
|
|
@@ -11873,13 +12082,13 @@ function BarList({
|
|
|
11873
12082
|
"sm:col-span-full sm:grid-cols-subgrid sm:items-center sm:gap-y-0"
|
|
11874
12083
|
),
|
|
11875
12084
|
children: [
|
|
11876
|
-
/* @__PURE__ */ (0,
|
|
11877
|
-
/* @__PURE__ */ (0,
|
|
12085
|
+
/* @__PURE__ */ (0, import_jsx_runtime122.jsx)("span", { className: cn("min-w-0 truncate text-muted-foreground", !labelWidth && "sm:max-w-[10rem]"), children: item.label }),
|
|
12086
|
+
/* @__PURE__ */ (0, import_jsx_runtime122.jsx)(
|
|
11878
12087
|
"span",
|
|
11879
12088
|
{
|
|
11880
12089
|
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
12090
|
"aria-hidden": "true",
|
|
11882
|
-
children: /* @__PURE__ */ (0,
|
|
12091
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime122.jsx)(
|
|
11883
12092
|
"span",
|
|
11884
12093
|
{
|
|
11885
12094
|
className: "block h-full rounded-full bg-primary bg-gradient-primary",
|
|
@@ -11892,8 +12101,8 @@ function BarList({
|
|
|
11892
12101
|
)
|
|
11893
12102
|
}
|
|
11894
12103
|
),
|
|
11895
|
-
/* @__PURE__ */ (0,
|
|
11896
|
-
showPercent && /* @__PURE__ */ (0,
|
|
12104
|
+
/* @__PURE__ */ (0, import_jsx_runtime122.jsx)("span", { className: "whitespace-nowrap text-right font-semibold tabular-nums text-foreground", children: item.valueText ?? formatValue(item.value) }),
|
|
12105
|
+
showPercent && /* @__PURE__ */ (0, import_jsx_runtime122.jsx)("span", { className: "text-right tabular-nums text-muted-foreground", children: percentOf(item) })
|
|
11897
12106
|
]
|
|
11898
12107
|
},
|
|
11899
12108
|
item.id
|
|
@@ -11902,7 +12111,7 @@ function BarList({
|
|
|
11902
12111
|
}
|
|
11903
12112
|
);
|
|
11904
12113
|
if (!framed) return list;
|
|
11905
|
-
return /* @__PURE__ */ (0,
|
|
12114
|
+
return /* @__PURE__ */ (0, import_jsx_runtime122.jsx)(
|
|
11906
12115
|
ChartFrame,
|
|
11907
12116
|
{
|
|
11908
12117
|
...head,
|
|
@@ -11925,7 +12134,7 @@ function formatPercent(fraction) {
|
|
|
11925
12134
|
|
|
11926
12135
|
// src/web/components/charts/donut-chart.tsx
|
|
11927
12136
|
var import_react37 = require("react");
|
|
11928
|
-
var
|
|
12137
|
+
var import_jsx_runtime123 = require("react/jsx-runtime");
|
|
11929
12138
|
var OTHER_ID = "__other";
|
|
11930
12139
|
function foldSegments(segments) {
|
|
11931
12140
|
const positive = segments.filter((s) => s.value > 0);
|
|
@@ -11963,7 +12172,7 @@ function DonutChart({
|
|
|
11963
12172
|
const visibility = useSeriesVisibility(allParts.map((part) => part.id));
|
|
11964
12173
|
const parts = allParts.filter((part) => visibility.isVisible(part.id));
|
|
11965
12174
|
const total = parts.reduce((sum, s) => sum + s.value, 0);
|
|
11966
|
-
if (parts.length === 0 || total <= 0) return /* @__PURE__ */ (0,
|
|
12175
|
+
if (parts.length === 0 || total <= 0) return /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(import_jsx_runtime123.Fragment, { children: empty ?? null });
|
|
11967
12176
|
const cx = size / 2;
|
|
11968
12177
|
const cy = size / 2;
|
|
11969
12178
|
const outer = size / 2 - 2;
|
|
@@ -11989,13 +12198,13 @@ function DonutChart({
|
|
|
11989
12198
|
return next === void 0 ? current : next;
|
|
11990
12199
|
});
|
|
11991
12200
|
};
|
|
11992
|
-
return /* @__PURE__ */ (0,
|
|
12201
|
+
return /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(
|
|
11993
12202
|
ChartFrame,
|
|
11994
12203
|
{
|
|
11995
12204
|
...head,
|
|
11996
12205
|
label,
|
|
11997
12206
|
className,
|
|
11998
|
-
legend: /* @__PURE__ */ (0,
|
|
12207
|
+
legend: /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(
|
|
11999
12208
|
ChartLegend,
|
|
12000
12209
|
{
|
|
12001
12210
|
items: allParts.map((part) => ({
|
|
@@ -12014,7 +12223,7 @@ function DonutChart({
|
|
|
12014
12223
|
]
|
|
12015
12224
|
},
|
|
12016
12225
|
announcement: activePart ? `${activePart.label}: ${formatValue(activePart.value)}, ${share(activePart.value)}` : void 0,
|
|
12017
|
-
children: /* @__PURE__ */ (0,
|
|
12226
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(
|
|
12018
12227
|
"div",
|
|
12019
12228
|
{
|
|
12020
12229
|
role: "group",
|
|
@@ -12025,8 +12234,8 @@ function DonutChart({
|
|
|
12025
12234
|
onBlur: () => setActive(null),
|
|
12026
12235
|
onPointerLeave: () => setActive(null),
|
|
12027
12236
|
className: `${plotClass} flex justify-center py-4`,
|
|
12028
|
-
children: /* @__PURE__ */ (0,
|
|
12029
|
-
arcs.map(({ part, start, end }, index) => /* @__PURE__ */ (0,
|
|
12237
|
+
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: [
|
|
12238
|
+
arcs.map(({ part, start, end }, index) => /* @__PURE__ */ (0, import_jsx_runtime123.jsx)(
|
|
12030
12239
|
"path",
|
|
12031
12240
|
{
|
|
12032
12241
|
"data-segment": part.id,
|
|
@@ -12037,7 +12246,7 @@ function DonutChart({
|
|
|
12037
12246
|
},
|
|
12038
12247
|
part.id
|
|
12039
12248
|
)),
|
|
12040
|
-
/* @__PURE__ */ (0,
|
|
12249
|
+
/* @__PURE__ */ (0, import_jsx_runtime123.jsx)(
|
|
12041
12250
|
"text",
|
|
12042
12251
|
{
|
|
12043
12252
|
x: cx,
|
|
@@ -12049,7 +12258,7 @@ function DonutChart({
|
|
|
12049
12258
|
children: formatValue(activePart ? activePart.value : total)
|
|
12050
12259
|
}
|
|
12051
12260
|
),
|
|
12052
|
-
/* @__PURE__ */ (0,
|
|
12261
|
+
/* @__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
12262
|
] })
|
|
12054
12263
|
}
|
|
12055
12264
|
)
|
|
@@ -12059,7 +12268,7 @@ function DonutChart({
|
|
|
12059
12268
|
|
|
12060
12269
|
// src/web/components/charts/scatter-chart.tsx
|
|
12061
12270
|
var import_react38 = require("react");
|
|
12062
|
-
var
|
|
12271
|
+
var import_jsx_runtime124 = require("react/jsx-runtime");
|
|
12063
12272
|
var MARGIN4 = { top: 12, right: 16, bottom: 40, left: 8 };
|
|
12064
12273
|
var HIT_RADIUS = 12;
|
|
12065
12274
|
function ScatterChart({
|
|
@@ -12085,7 +12294,7 @@ function ScatterChart({
|
|
|
12085
12294
|
);
|
|
12086
12295
|
}
|
|
12087
12296
|
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,
|
|
12297
|
+
if (points.length === 0) return /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(import_jsx_runtime124.Fragment, { children: empty ?? null });
|
|
12089
12298
|
const xMax = Math.max(0, ...points.map((p) => p.x));
|
|
12090
12299
|
const yMax = Math.max(0, ...points.map((p) => p.y));
|
|
12091
12300
|
const xTicks = chartValueTicks(xMax);
|
|
@@ -12124,14 +12333,14 @@ function ScatterChart({
|
|
|
12124
12333
|
};
|
|
12125
12334
|
const activePoint = active === null ? null : points[active];
|
|
12126
12335
|
const describe = (p) => `${p.label ?? p.seriesLabel}: ${xLabel} ${formatX(p.x)}, ${yLabel} ${formatY(p.y)}`;
|
|
12127
|
-
return /* @__PURE__ */ (0,
|
|
12336
|
+
return /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
|
|
12128
12337
|
ChartFrame,
|
|
12129
12338
|
{
|
|
12130
12339
|
...head,
|
|
12131
12340
|
label,
|
|
12132
12341
|
className,
|
|
12133
12342
|
scale: `${yLabel} against ${xLabel} \xB7 both linear, from 0`,
|
|
12134
|
-
legend: allSeries.length > 1 ? /* @__PURE__ */ (0,
|
|
12343
|
+
legend: allSeries.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
|
|
12135
12344
|
ChartLegend,
|
|
12136
12345
|
{
|
|
12137
12346
|
keyShape: "dot",
|
|
@@ -12144,7 +12353,7 @@ function ScatterChart({
|
|
|
12144
12353
|
rows: points.map((p) => [p.label ?? p.id, p.seriesLabel, formatX(p.x), formatY(p.y)])
|
|
12145
12354
|
},
|
|
12146
12355
|
announcement: activePoint ? describe(activePoint) : void 0,
|
|
12147
|
-
children: /* @__PURE__ */ (0,
|
|
12356
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime124.jsxs)(
|
|
12148
12357
|
"div",
|
|
12149
12358
|
{
|
|
12150
12359
|
ref: containerRef,
|
|
@@ -12156,7 +12365,7 @@ function ScatterChart({
|
|
|
12156
12365
|
onBlur: () => setActive(null),
|
|
12157
12366
|
className: plotClass,
|
|
12158
12367
|
children: [
|
|
12159
|
-
/* @__PURE__ */ (0,
|
|
12368
|
+
/* @__PURE__ */ (0, import_jsx_runtime124.jsxs)(
|
|
12160
12369
|
"svg",
|
|
12161
12370
|
{
|
|
12162
12371
|
width: "100%",
|
|
@@ -12167,13 +12376,13 @@ function ScatterChart({
|
|
|
12167
12376
|
onPointerMove,
|
|
12168
12377
|
onPointerLeave: () => setActive(null),
|
|
12169
12378
|
children: [
|
|
12170
|
-
/* @__PURE__ */ (0,
|
|
12171
|
-
/* @__PURE__ */ (0,
|
|
12172
|
-
/* @__PURE__ */ (0,
|
|
12379
|
+
/* @__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: [
|
|
12380
|
+
/* @__PURE__ */ (0, import_jsx_runtime124.jsx)("line", { x1: plotLeft, x2: plotRight, y1: sy(tick), y2: sy(tick), stroke: "var(--border)" }),
|
|
12381
|
+
/* @__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
12382
|
] }, tick)) }),
|
|
12174
|
-
/* @__PURE__ */ (0,
|
|
12175
|
-
/* @__PURE__ */ (0,
|
|
12176
|
-
xTicks.map((tick, index) => /* @__PURE__ */ (0,
|
|
12383
|
+
/* @__PURE__ */ (0, import_jsx_runtime124.jsxs)("g", { "data-slot": "chart-x-axis", children: [
|
|
12384
|
+
/* @__PURE__ */ (0, import_jsx_runtime124.jsx)("line", { x1: plotLeft, x2: plotRight, y1: plotBottom, y2: plotBottom, stroke: "var(--border)" }),
|
|
12385
|
+
xTicks.map((tick, index) => /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
|
|
12177
12386
|
"text",
|
|
12178
12387
|
{
|
|
12179
12388
|
x: sx(tick),
|
|
@@ -12186,12 +12395,12 @@ function ScatterChart({
|
|
|
12186
12395
|
},
|
|
12187
12396
|
tick
|
|
12188
12397
|
)),
|
|
12189
|
-
/* @__PURE__ */ (0,
|
|
12398
|
+
/* @__PURE__ */ (0, import_jsx_runtime124.jsxs)("text", { x: plotRight, y: plotBottom + 34, textAnchor: "end", fontSize: TICK_FONT, fill: "var(--muted-foreground)", children: [
|
|
12190
12399
|
xLabel,
|
|
12191
12400
|
" \u2192"
|
|
12192
12401
|
] })
|
|
12193
12402
|
] }),
|
|
12194
|
-
/* @__PURE__ */ (0,
|
|
12403
|
+
/* @__PURE__ */ (0, import_jsx_runtime124.jsx)("g", { "data-slot": "chart-points", children: points.map((p, index) => /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
|
|
12195
12404
|
"circle",
|
|
12196
12405
|
{
|
|
12197
12406
|
"data-series": allSeries[p.slot].id,
|
|
@@ -12208,7 +12417,7 @@ function ScatterChart({
|
|
|
12208
12417
|
]
|
|
12209
12418
|
}
|
|
12210
12419
|
),
|
|
12211
|
-
activePoint && /* @__PURE__ */ (0,
|
|
12420
|
+
activePoint && /* @__PURE__ */ (0, import_jsx_runtime124.jsx)(
|
|
12212
12421
|
ChartTooltip,
|
|
12213
12422
|
{
|
|
12214
12423
|
title: activePoint.label ?? activePoint.seriesLabel,
|
|
@@ -12230,7 +12439,7 @@ function ScatterChart({
|
|
|
12230
12439
|
|
|
12231
12440
|
// src/web/components/charts/sparkline.tsx
|
|
12232
12441
|
var import_react39 = require("react");
|
|
12233
|
-
var
|
|
12442
|
+
var import_jsx_runtime125 = require("react/jsx-runtime");
|
|
12234
12443
|
function Sparkline({ values, label, width = 96, height = 28, pulse = false, tone = "default", className }) {
|
|
12235
12444
|
const fill = height === "fill";
|
|
12236
12445
|
const boxRef = (0, import_react39.useRef)(null);
|
|
@@ -12250,13 +12459,13 @@ function Sparkline({ values, label, width = 96, height = 28, pulse = false, tone
|
|
|
12250
12459
|
const min = Math.min(...values);
|
|
12251
12460
|
const max = Math.max(...values);
|
|
12252
12461
|
const span = max - min || 1;
|
|
12253
|
-
const
|
|
12254
|
-
const x = (index) =>
|
|
12255
|
-
const y = (value) => h -
|
|
12462
|
+
const pad2 = 4;
|
|
12463
|
+
const x = (index) => pad2 + index / (values.length - 1) * (width - pad2 * 2);
|
|
12464
|
+
const y = (value) => h - pad2 - (value - min) / span * (h - pad2 * 2);
|
|
12256
12465
|
const d = values.map((value, index) => `${index === 0 ? "M" : "L"}${x(index).toFixed(1)},${y(value).toFixed(1)}`).join("");
|
|
12257
12466
|
const last = values.length - 1;
|
|
12258
12467
|
const dot = tone === "negative" ? "var(--color-danger)" : "var(--series-1)";
|
|
12259
|
-
const svg = /* @__PURE__ */ (0,
|
|
12468
|
+
const svg = /* @__PURE__ */ (0, import_jsx_runtime125.jsxs)(
|
|
12260
12469
|
"svg",
|
|
12261
12470
|
{
|
|
12262
12471
|
"data-slot": "sparkline",
|
|
@@ -12267,8 +12476,8 @@ function Sparkline({ values, label, width = 96, height = 28, pulse = false, tone
|
|
|
12267
12476
|
viewBox: `0 0 ${width} ${h}`,
|
|
12268
12477
|
className: cn("block shrink-0 overflow-visible", !fill && className, fill && "absolute inset-y-0 right-0"),
|
|
12269
12478
|
children: [
|
|
12270
|
-
/* @__PURE__ */ (0,
|
|
12271
|
-
pulse && /* @__PURE__ */ (0,
|
|
12479
|
+
/* @__PURE__ */ (0, import_jsx_runtime125.jsx)("path", { d, fill: "none", stroke: "var(--muted-foreground)", strokeWidth: 1.5, strokeLinejoin: "round", strokeLinecap: "round" }),
|
|
12480
|
+
pulse && /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(
|
|
12272
12481
|
"circle",
|
|
12273
12482
|
{
|
|
12274
12483
|
"data-slot": "sparkline-pulse",
|
|
@@ -12281,16 +12490,16 @@ function Sparkline({ values, label, width = 96, height = 28, pulse = false, tone
|
|
|
12281
12490
|
style: { transformBox: "fill-box", transformOrigin: "center" }
|
|
12282
12491
|
}
|
|
12283
12492
|
),
|
|
12284
|
-
/* @__PURE__ */ (0,
|
|
12493
|
+
/* @__PURE__ */ (0, import_jsx_runtime125.jsx)("circle", { cx: x(last), cy: y(values[last]), r: 4, fill: dot, stroke: "var(--card)", strokeWidth: 2 })
|
|
12285
12494
|
]
|
|
12286
12495
|
}
|
|
12287
12496
|
);
|
|
12288
12497
|
if (!fill) return svg;
|
|
12289
|
-
return /* @__PURE__ */ (0,
|
|
12498
|
+
return /* @__PURE__ */ (0, import_jsx_runtime125.jsx)("span", { ref: boxRef, className: cn("relative block h-full", className), style: { width }, children: svg });
|
|
12290
12499
|
}
|
|
12291
12500
|
|
|
12292
12501
|
// src/web/components/charts/meter.tsx
|
|
12293
|
-
var
|
|
12502
|
+
var import_jsx_runtime126 = require("react/jsx-runtime");
|
|
12294
12503
|
function Meter({
|
|
12295
12504
|
label,
|
|
12296
12505
|
value,
|
|
@@ -12305,19 +12514,19 @@ function Meter({
|
|
|
12305
12514
|
const fill = { normal: "bg-primary bg-gradient-primary", warning: "bg-warning bg-gradient-warning", danger: "bg-danger bg-gradient-danger" }[state];
|
|
12306
12515
|
const track = { normal: "bg-primary/15", warning: "bg-warning/15", danger: "bg-danger/15" }[state];
|
|
12307
12516
|
const percent = Math.round(ratio * 100);
|
|
12308
|
-
return /* @__PURE__ */ (0,
|
|
12309
|
-
/* @__PURE__ */ (0,
|
|
12310
|
-
/* @__PURE__ */ (0,
|
|
12311
|
-
/* @__PURE__ */ (0,
|
|
12517
|
+
return /* @__PURE__ */ (0, import_jsx_runtime126.jsxs)("div", { "data-slot": "meter", "data-state": state, className: cn("space-y-1.5", className), children: [
|
|
12518
|
+
/* @__PURE__ */ (0, import_jsx_runtime126.jsxs)("div", { className: "flex items-baseline justify-between gap-3 text-caption", children: [
|
|
12519
|
+
/* @__PURE__ */ (0, import_jsx_runtime126.jsx)("span", { className: "text-muted-foreground", children: label }),
|
|
12520
|
+
/* @__PURE__ */ (0, import_jsx_runtime126.jsxs)("span", { className: "font-semibold tabular-nums text-foreground", children: [
|
|
12312
12521
|
formatValue(value),
|
|
12313
12522
|
" ",
|
|
12314
|
-
/* @__PURE__ */ (0,
|
|
12523
|
+
/* @__PURE__ */ (0, import_jsx_runtime126.jsxs)("span", { className: "font-normal text-muted-foreground", children: [
|
|
12315
12524
|
"/ ",
|
|
12316
12525
|
formatValue(max)
|
|
12317
12526
|
] })
|
|
12318
12527
|
] })
|
|
12319
12528
|
] }),
|
|
12320
|
-
/* @__PURE__ */ (0,
|
|
12529
|
+
/* @__PURE__ */ (0, import_jsx_runtime126.jsx)(
|
|
12321
12530
|
"div",
|
|
12322
12531
|
{
|
|
12323
12532
|
role: "meter",
|
|
@@ -12327,18 +12536,18 @@ function Meter({
|
|
|
12327
12536
|
"aria-valuetext": `${formatValue(value)} of ${formatValue(max)}, ${percent}%`,
|
|
12328
12537
|
"aria-label": typeof label === "string" ? label : void 0,
|
|
12329
12538
|
className: cn("h-2 overflow-hidden rounded-full shadow-inner", track),
|
|
12330
|
-
children: /* @__PURE__ */ (0,
|
|
12539
|
+
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
12540
|
}
|
|
12332
12541
|
),
|
|
12333
|
-
state !== "normal" && /* @__PURE__ */ (0,
|
|
12334
|
-
/* @__PURE__ */ (0,
|
|
12542
|
+
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: [
|
|
12543
|
+
/* @__PURE__ */ (0, import_jsx_runtime126.jsx)(IconGlyph, { glyph: state === "danger" ? Error2 : Warning, className: "text-icon-sm" }),
|
|
12335
12544
|
state === "danger" ? `Almost full \xB7 ${percent}%` : `Getting full \xB7 ${percent}%`
|
|
12336
12545
|
] })
|
|
12337
12546
|
] });
|
|
12338
12547
|
}
|
|
12339
12548
|
|
|
12340
12549
|
// src/web/components/activity-row.tsx
|
|
12341
|
-
var
|
|
12550
|
+
var import_jsx_runtime127 = require("react/jsx-runtime");
|
|
12342
12551
|
var directionUi = {
|
|
12343
12552
|
inbound: { icon: "south_west", iconClass: "bg-primary/20 text-brand", amountClass: "text-brand", sign: "+" },
|
|
12344
12553
|
outbound: { icon: "north_east", iconClass: "bg-foreground/10 text-muted-foreground", amountClass: "text-foreground", sign: "-" },
|
|
@@ -12358,29 +12567,29 @@ function ActivityRow({
|
|
|
12358
12567
|
className
|
|
12359
12568
|
}) {
|
|
12360
12569
|
const ui = directionUi[direction];
|
|
12361
|
-
const content = /* @__PURE__ */ (0,
|
|
12362
|
-
/* @__PURE__ */ (0,
|
|
12363
|
-
/* @__PURE__ */ (0,
|
|
12570
|
+
const content = /* @__PURE__ */ (0, import_jsx_runtime127.jsxs)(import_jsx_runtime127.Fragment, { children: [
|
|
12571
|
+
/* @__PURE__ */ (0, import_jsx_runtime127.jsxs)("div", { className: "flex min-w-0 items-center gap-3", children: [
|
|
12572
|
+
/* @__PURE__ */ (0, import_jsx_runtime127.jsx)(
|
|
12364
12573
|
StatusIconBadge,
|
|
12365
12574
|
{
|
|
12366
12575
|
status,
|
|
12367
|
-
icon: /* @__PURE__ */ (0,
|
|
12576
|
+
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
12577
|
}
|
|
12369
12578
|
),
|
|
12370
|
-
/* @__PURE__ */ (0,
|
|
12371
|
-
/* @__PURE__ */ (0,
|
|
12372
|
-
/* @__PURE__ */ (0,
|
|
12579
|
+
/* @__PURE__ */ (0, import_jsx_runtime127.jsxs)("div", { className: "flex min-w-0 flex-col", children: [
|
|
12580
|
+
/* @__PURE__ */ (0, import_jsx_runtime127.jsxs)("div", { className: "flex min-w-0 items-center gap-1.5", children: [
|
|
12581
|
+
/* @__PURE__ */ (0, import_jsx_runtime127.jsx)("span", { className: "truncate text-body font-bold tracking-wide text-foreground", children: title }),
|
|
12373
12582
|
networkBadge
|
|
12374
12583
|
] }),
|
|
12375
|
-
timestamp && /* @__PURE__ */ (0,
|
|
12584
|
+
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
12585
|
] })
|
|
12377
12586
|
] }),
|
|
12378
|
-
/* @__PURE__ */ (0,
|
|
12379
|
-
/* @__PURE__ */ (0,
|
|
12587
|
+
/* @__PURE__ */ (0, import_jsx_runtime127.jsxs)("div", { className: "shrink-0 text-right", children: [
|
|
12588
|
+
/* @__PURE__ */ (0, import_jsx_runtime127.jsxs)("p", { className: cn("text-body font-bold tracking-wide", ui.amountClass), children: [
|
|
12380
12589
|
ui.sign,
|
|
12381
12590
|
amount
|
|
12382
12591
|
] }),
|
|
12383
|
-
unit && /* @__PURE__ */ (0,
|
|
12592
|
+
unit && /* @__PURE__ */ (0, import_jsx_runtime127.jsx)("p", { className: cn("mt-0.5 text-muted-foreground", eyebrow), children: unit })
|
|
12384
12593
|
] })
|
|
12385
12594
|
] });
|
|
12386
12595
|
const rowClassName = cn(
|
|
@@ -12389,13 +12598,13 @@ function ActivityRow({
|
|
|
12389
12598
|
className
|
|
12390
12599
|
);
|
|
12391
12600
|
if (onClick) {
|
|
12392
|
-
return /* @__PURE__ */ (0,
|
|
12601
|
+
return /* @__PURE__ */ (0, import_jsx_runtime127.jsx)("button", { type: "button", onClick, className: rowClassName, children: content });
|
|
12393
12602
|
}
|
|
12394
|
-
return /* @__PURE__ */ (0,
|
|
12603
|
+
return /* @__PURE__ */ (0, import_jsx_runtime127.jsx)("div", { className: rowClassName, children: content });
|
|
12395
12604
|
}
|
|
12396
12605
|
|
|
12397
12606
|
// src/web/components/secret-reveal-card.tsx
|
|
12398
|
-
var
|
|
12607
|
+
var import_jsx_runtime128 = require("react/jsx-runtime");
|
|
12399
12608
|
function SecretRevealCard({
|
|
12400
12609
|
value,
|
|
12401
12610
|
revealed,
|
|
@@ -12414,9 +12623,9 @@ function SecretRevealCard({
|
|
|
12414
12623
|
const selfCopy = !onCopy && copyValue !== void 0;
|
|
12415
12624
|
const handleCopy = onCopy ?? (selfCopy ? () => void clipboard.copy(copyValue) : void 0);
|
|
12416
12625
|
const copied = selfCopy && clipboard.state === "copied";
|
|
12417
|
-
return /* @__PURE__ */ (0,
|
|
12418
|
-
/* @__PURE__ */ (0,
|
|
12419
|
-
/* @__PURE__ */ (0,
|
|
12626
|
+
return /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)("div", { className: cn("space-y-3", className), children: [
|
|
12627
|
+
/* @__PURE__ */ (0, import_jsx_runtime128.jsxs)("div", { className: "relative", children: [
|
|
12628
|
+
/* @__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
12629
|
"p",
|
|
12421
12630
|
{
|
|
12422
12631
|
className: cn(
|
|
@@ -12428,17 +12637,17 @@ function SecretRevealCard({
|
|
|
12428
12637
|
children: value
|
|
12429
12638
|
}
|
|
12430
12639
|
) }),
|
|
12431
|
-
!revealed && /* @__PURE__ */ (0,
|
|
12432
|
-
/* @__PURE__ */ (0,
|
|
12640
|
+
!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: [
|
|
12641
|
+
/* @__PURE__ */ (0, import_jsx_runtime128.jsx)(IconGlyph, { glyph: Visibility, className: "text-icon-lg" }),
|
|
12433
12642
|
revealLabel
|
|
12434
12643
|
] }) })
|
|
12435
12644
|
] }),
|
|
12436
|
-
revealed && /* @__PURE__ */ (0,
|
|
12437
|
-
/* @__PURE__ */ (0,
|
|
12438
|
-
/* @__PURE__ */ (0,
|
|
12645
|
+
revealed && /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)("div", { className: "flex gap-2", children: [
|
|
12646
|
+
/* @__PURE__ */ (0, import_jsx_runtime128.jsxs)(Button, { type: "button", variant: "surface", className: "flex-1", onClick: () => onRevealChange(false), children: [
|
|
12647
|
+
/* @__PURE__ */ (0, import_jsx_runtime128.jsx)(IconGlyph, { glyph: VisibilityOff, className: "text-icon-lg" }),
|
|
12439
12648
|
hideLabel
|
|
12440
12649
|
] }),
|
|
12441
|
-
handleCopy && /* @__PURE__ */ (0,
|
|
12650
|
+
handleCopy && /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)(
|
|
12442
12651
|
Button,
|
|
12443
12652
|
{
|
|
12444
12653
|
type: "button",
|
|
@@ -12446,19 +12655,19 @@ function SecretRevealCard({
|
|
|
12446
12655
|
onClick: handleCopy,
|
|
12447
12656
|
className: cn("flex-1", copied && "bg-primary/10 bg-gradient-active text-brand ring-primary/40 hover:ring-primary/50"),
|
|
12448
12657
|
children: [
|
|
12449
|
-
/* @__PURE__ */ (0,
|
|
12658
|
+
/* @__PURE__ */ (0, import_jsx_runtime128.jsx)(IconGlyph, { glyph: copied ? Check : ContentCopy, className: "text-icon-lg" }),
|
|
12450
12659
|
copied ? copiedLabel : copyLabel
|
|
12451
12660
|
]
|
|
12452
12661
|
}
|
|
12453
12662
|
)
|
|
12454
12663
|
] }),
|
|
12455
|
-
selfCopy && clipboard.state === "failed" && /* @__PURE__ */ (0,
|
|
12456
|
-
selfCopy && /* @__PURE__ */ (0,
|
|
12664
|
+
selfCopy && clipboard.state === "failed" && /* @__PURE__ */ (0, import_jsx_runtime128.jsx)("p", { role: "alert", className: "m-0 text-caption text-danger-fg", children: copyFailedMessage }),
|
|
12665
|
+
selfCopy && /* @__PURE__ */ (0, import_jsx_runtime128.jsx)("span", { "aria-live": "polite", className: "sr-only", children: copied ? copiedLabel : "" })
|
|
12457
12666
|
] });
|
|
12458
12667
|
}
|
|
12459
12668
|
|
|
12460
12669
|
// src/web/components/settings-section-card.tsx
|
|
12461
|
-
var
|
|
12670
|
+
var import_jsx_runtime129 = require("react/jsx-runtime");
|
|
12462
12671
|
function SettingsSectionCard({
|
|
12463
12672
|
icon,
|
|
12464
12673
|
title,
|
|
@@ -12468,18 +12677,18 @@ function SettingsSectionCard({
|
|
|
12468
12677
|
className,
|
|
12469
12678
|
bodyClassName
|
|
12470
12679
|
}) {
|
|
12471
|
-
return /* @__PURE__ */ (0,
|
|
12472
|
-
/* @__PURE__ */ (0,
|
|
12473
|
-
/* @__PURE__ */ (0,
|
|
12474
|
-
icon && /* @__PURE__ */ (0,
|
|
12475
|
-
/* @__PURE__ */ (0,
|
|
12476
|
-
/* @__PURE__ */ (0,
|
|
12477
|
-
description && /* @__PURE__ */ (0,
|
|
12680
|
+
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: [
|
|
12681
|
+
/* @__PURE__ */ (0, import_jsx_runtime129.jsxs)("div", { className: "flex items-start justify-between gap-4", children: [
|
|
12682
|
+
/* @__PURE__ */ (0, import_jsx_runtime129.jsxs)("div", { className: "flex min-w-0 flex-1 items-start gap-3", children: [
|
|
12683
|
+
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 }),
|
|
12684
|
+
/* @__PURE__ */ (0, import_jsx_runtime129.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
12685
|
+
/* @__PURE__ */ (0, import_jsx_runtime129.jsx)("h2", { className: "text-body font-bold text-foreground", children: title }),
|
|
12686
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime129.jsx)("p", { className: "mt-1 text-caption text-muted-foreground", children: description })
|
|
12478
12687
|
] })
|
|
12479
12688
|
] }),
|
|
12480
12689
|
badge
|
|
12481
12690
|
] }),
|
|
12482
|
-
/* @__PURE__ */ (0,
|
|
12691
|
+
/* @__PURE__ */ (0, import_jsx_runtime129.jsx)("div", { className: bodyClassName, children })
|
|
12483
12692
|
] });
|
|
12484
12693
|
}
|
|
12485
12694
|
var badgeToneClass = {
|
|
@@ -12496,7 +12705,7 @@ var badgeToneClass = {
|
|
|
12496
12705
|
outline: "border border-border bg-transparent text-foreground"
|
|
12497
12706
|
};
|
|
12498
12707
|
function ToneBadge({ children, tone = "muted", case: letterCase = "upper", className }) {
|
|
12499
|
-
return /* @__PURE__ */ (0,
|
|
12708
|
+
return /* @__PURE__ */ (0, import_jsx_runtime129.jsx)(
|
|
12500
12709
|
"span",
|
|
12501
12710
|
{
|
|
12502
12711
|
"data-slot": "tone-badge",
|
|
@@ -12512,7 +12721,7 @@ function ToneBadge({ children, tone = "muted", case: letterCase = "upper", class
|
|
|
12512
12721
|
}
|
|
12513
12722
|
|
|
12514
12723
|
// src/web/components/selectable-card.tsx
|
|
12515
|
-
var
|
|
12724
|
+
var import_jsx_runtime130 = require("react/jsx-runtime");
|
|
12516
12725
|
function SelectableCard({
|
|
12517
12726
|
selected,
|
|
12518
12727
|
onClick,
|
|
@@ -12524,28 +12733,28 @@ function SelectableCard({
|
|
|
12524
12733
|
children,
|
|
12525
12734
|
className
|
|
12526
12735
|
}) {
|
|
12527
|
-
const content = /* @__PURE__ */ (0,
|
|
12528
|
-
/* @__PURE__ */ (0,
|
|
12529
|
-
indicator && /* @__PURE__ */ (0,
|
|
12736
|
+
const content = /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("div", { className: "flex items-start justify-between gap-3", children: [
|
|
12737
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("div", { className: "flex min-w-0 flex-1 items-start gap-3", children: [
|
|
12738
|
+
indicator && /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
|
|
12530
12739
|
"div",
|
|
12531
12740
|
{
|
|
12532
12741
|
className: cn(
|
|
12533
12742
|
"mt-0.5 flex size-5 shrink-0 items-center justify-center rounded-full border-2 transition-colors",
|
|
12534
12743
|
selected ? "border-primary bg-primary bg-gradient-primary shadow-glow-primary-soft" : "border-secondary/40"
|
|
12535
12744
|
),
|
|
12536
|
-
children: selected && /* @__PURE__ */ (0,
|
|
12745
|
+
children: selected && /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("div", { className: "size-2 rounded-full bg-white" })
|
|
12537
12746
|
}
|
|
12538
12747
|
),
|
|
12539
|
-
/* @__PURE__ */ (0,
|
|
12540
|
-
/* @__PURE__ */ (0,
|
|
12541
|
-
/* @__PURE__ */ (0,
|
|
12748
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
12749
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("div", { className: "flex flex-wrap items-center gap-2", children: [
|
|
12750
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsx)("span", { className: "text-body font-bold text-foreground", children: title }),
|
|
12542
12751
|
badge
|
|
12543
12752
|
] }),
|
|
12544
|
-
description && /* @__PURE__ */ (0,
|
|
12753
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("p", { className: "mt-0.5 text-caption leading-relaxed text-muted-foreground", children: description }),
|
|
12545
12754
|
children
|
|
12546
12755
|
] })
|
|
12547
12756
|
] }),
|
|
12548
|
-
preview && /* @__PURE__ */ (0,
|
|
12757
|
+
preview && /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("div", { className: "shrink-0 text-right", children: preview })
|
|
12549
12758
|
] });
|
|
12550
12759
|
const cardClassName = cn(
|
|
12551
12760
|
"w-full rounded-2xl border border-transparent bg-card p-4 text-left transition-all duration-200",
|
|
@@ -12553,14 +12762,14 @@ function SelectableCard({
|
|
|
12553
12762
|
className
|
|
12554
12763
|
);
|
|
12555
12764
|
if (onClick) {
|
|
12556
|
-
return /* @__PURE__ */ (0,
|
|
12765
|
+
return /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("button", { type: "button", onClick, className: cardClassName, children: content });
|
|
12557
12766
|
}
|
|
12558
|
-
return /* @__PURE__ */ (0,
|
|
12767
|
+
return /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("div", { className: cardClassName, children: content });
|
|
12559
12768
|
}
|
|
12560
12769
|
|
|
12561
12770
|
// src/web/components/mobile-hero-animation.tsx
|
|
12562
12771
|
var import_react40 = require("react");
|
|
12563
|
-
var
|
|
12772
|
+
var import_jsx_runtime131 = require("react/jsx-runtime");
|
|
12564
12773
|
var PROTOCOLS = [
|
|
12565
12774
|
{ name: "Bitcoin", network: "Bitcoin", iconSuffix: "bitcoin/bitcoin-logo.svg" },
|
|
12566
12775
|
{ name: "Lightning", network: "LN", iconSuffix: "lightning/lightning.svg" },
|
|
@@ -12619,15 +12828,15 @@ var MobileHeroAnimation = ({
|
|
|
12619
12828
|
}, []);
|
|
12620
12829
|
const anim = !reducedMotion && isVisible;
|
|
12621
12830
|
const scale = size / 280;
|
|
12622
|
-
return /* @__PURE__ */ (0,
|
|
12831
|
+
return /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)(
|
|
12623
12832
|
"div",
|
|
12624
12833
|
{
|
|
12625
12834
|
ref: containerRef,
|
|
12626
12835
|
className,
|
|
12627
12836
|
style: { position: "relative", width: size, height: size },
|
|
12628
12837
|
children: [
|
|
12629
|
-
/* @__PURE__ */ (0,
|
|
12630
|
-
/* @__PURE__ */ (0,
|
|
12838
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("style", { children: KEYFRAMES }),
|
|
12839
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("div", { style: {
|
|
12631
12840
|
position: "absolute",
|
|
12632
12841
|
top: 0,
|
|
12633
12842
|
left: 0,
|
|
@@ -12636,7 +12845,7 @@ var MobileHeroAnimation = ({
|
|
|
12636
12845
|
transformOrigin: "top left",
|
|
12637
12846
|
transform: scale !== 1 ? `scale(${scale})` : void 0
|
|
12638
12847
|
}, children: [
|
|
12639
|
-
/* @__PURE__ */ (0,
|
|
12848
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsxs)(
|
|
12640
12849
|
"svg",
|
|
12641
12850
|
{
|
|
12642
12851
|
viewBox: "0 0 280 280",
|
|
@@ -12645,34 +12854,34 @@ var MobileHeroAnimation = ({
|
|
|
12645
12854
|
style: { position: "absolute", inset: 0 },
|
|
12646
12855
|
xmlns: "http://www.w3.org/2000/svg",
|
|
12647
12856
|
children: [
|
|
12648
|
-
/* @__PURE__ */ (0,
|
|
12649
|
-
/* @__PURE__ */ (0,
|
|
12650
|
-
/* @__PURE__ */ (0,
|
|
12651
|
-
/* @__PURE__ */ (0,
|
|
12652
|
-
/* @__PURE__ */ (0,
|
|
12857
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("defs", { children: [
|
|
12858
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("radialGradient", { id: "mh-center-glow", cx: "50%", cy: "50%", r: "50%", children: [
|
|
12859
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "0%", stopColor: "#0e9dff", stopOpacity: "0.3" }),
|
|
12860
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "40%", stopColor: "#8a5cf6", stopOpacity: "0.15" }),
|
|
12861
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "100%", stopColor: "transparent", stopOpacity: "0" })
|
|
12653
12862
|
] }),
|
|
12654
|
-
/* @__PURE__ */ (0,
|
|
12655
|
-
/* @__PURE__ */ (0,
|
|
12656
|
-
/* @__PURE__ */ (0,
|
|
12863
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("linearGradient", { id: "mh-gp", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
|
|
12864
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "0%", stopColor: "#22c55e" }),
|
|
12865
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "100%", stopColor: "#8a5cf6" })
|
|
12657
12866
|
] }),
|
|
12658
|
-
/* @__PURE__ */ (0,
|
|
12659
|
-
/* @__PURE__ */ (0,
|
|
12660
|
-
/* @__PURE__ */ (0,
|
|
12867
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("linearGradient", { id: "mh-bp", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
|
|
12868
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "0%", stopColor: "#0e9dff" }),
|
|
12869
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("stop", { offset: "100%", stopColor: "#8a5cf6" })
|
|
12661
12870
|
] }),
|
|
12662
|
-
/* @__PURE__ */ (0,
|
|
12663
|
-
/* @__PURE__ */ (0,
|
|
12664
|
-
/* @__PURE__ */ (0,
|
|
12665
|
-
/* @__PURE__ */ (0,
|
|
12666
|
-
/* @__PURE__ */ (0,
|
|
12871
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("filter", { id: "mh-glow", x: "-50%", y: "-50%", width: "200%", height: "200%", children: [
|
|
12872
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("feGaussianBlur", { stdDeviation: "2.5", result: "blur" }),
|
|
12873
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("feMerge", { children: [
|
|
12874
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("feMergeNode", { in: "blur" }),
|
|
12875
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("feMergeNode", { in: "SourceGraphic" })
|
|
12667
12876
|
] })
|
|
12668
12877
|
] })
|
|
12669
12878
|
] }),
|
|
12670
|
-
/* @__PURE__ */ (0,
|
|
12671
|
-
/* @__PURE__ */ (0,
|
|
12672
|
-
/* @__PURE__ */ (0,
|
|
12879
|
+
/* @__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: [
|
|
12880
|
+
/* @__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" }),
|
|
12881
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0.4;0;0.4", dur: "2.5s", repeatCount: "indefinite" })
|
|
12673
12882
|
] }) }),
|
|
12674
|
-
/* @__PURE__ */ (0,
|
|
12675
|
-
/* @__PURE__ */ (0,
|
|
12883
|
+
/* @__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" }),
|
|
12884
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
|
|
12676
12885
|
"g",
|
|
12677
12886
|
{
|
|
12678
12887
|
style: {
|
|
@@ -12690,8 +12899,8 @@ var MobileHeroAnimation = ({
|
|
|
12690
12899
|
const y2 = C + dy * (ORBIT_R - BADGE_HALF);
|
|
12691
12900
|
const color = PROTOCOL_COLORS[protocol.network] ?? "#ffffff";
|
|
12692
12901
|
const dur = `${2 + i * 0.3}s`;
|
|
12693
|
-
return /* @__PURE__ */ (0,
|
|
12694
|
-
/* @__PURE__ */ (0,
|
|
12902
|
+
return /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("g", { children: [
|
|
12903
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
|
|
12695
12904
|
"line",
|
|
12696
12905
|
{
|
|
12697
12906
|
x1,
|
|
@@ -12702,30 +12911,30 @@ var MobileHeroAnimation = ({
|
|
|
12702
12911
|
strokeWidth: "0.8",
|
|
12703
12912
|
strokeDasharray: "2 4",
|
|
12704
12913
|
opacity: "0.25",
|
|
12705
|
-
children: anim && /* @__PURE__ */ (0,
|
|
12914
|
+
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
12915
|
}
|
|
12707
12916
|
),
|
|
12708
|
-
/* @__PURE__ */ (0,
|
|
12709
|
-
/* @__PURE__ */ (0,
|
|
12710
|
-
/* @__PURE__ */ (0,
|
|
12711
|
-
/* @__PURE__ */ (0,
|
|
12712
|
-
/* @__PURE__ */ (0,
|
|
12917
|
+
/* @__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: [
|
|
12918
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "cx", values: `${x1};${x2}`, dur, repeatCount: "indefinite" }),
|
|
12919
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "cy", values: `${y1};${y2}`, dur, repeatCount: "indefinite" }),
|
|
12920
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0;0.85;0", dur, repeatCount: "indefinite" }),
|
|
12921
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "r", values: "1.5;2.5;1.5", dur, repeatCount: "indefinite" })
|
|
12713
12922
|
] }) })
|
|
12714
12923
|
] }, `line-${i}`);
|
|
12715
12924
|
})
|
|
12716
12925
|
}
|
|
12717
12926
|
),
|
|
12718
|
-
/* @__PURE__ */ (0,
|
|
12719
|
-
/* @__PURE__ */ (0,
|
|
12720
|
-
/* @__PURE__ */ (0,
|
|
12721
|
-
/* @__PURE__ */ (0,
|
|
12927
|
+
/* @__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" }) }),
|
|
12928
|
+
/* @__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: [
|
|
12929
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "r", values: "27;38", dur: "3s", repeatCount: "indefinite" }),
|
|
12930
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0.4;0", dur: "3s", repeatCount: "indefinite" })
|
|
12722
12931
|
] }) }),
|
|
12723
|
-
/* @__PURE__ */ (0,
|
|
12724
|
-
/* @__PURE__ */ (0,
|
|
12725
|
-
/* @__PURE__ */ (0,
|
|
12932
|
+
/* @__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: [
|
|
12933
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "r", values: "27;36", dur: "3s", repeatCount: "indefinite", begin: "1.5s" }),
|
|
12934
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0.3;0", dur: "3s", repeatCount: "indefinite", begin: "1.5s" })
|
|
12726
12935
|
] }) }),
|
|
12727
|
-
/* @__PURE__ */ (0,
|
|
12728
|
-
anim && /* @__PURE__ */ (0,
|
|
12936
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("g", { transform: `translate(${C},${C})`, children: /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("g", { children: [
|
|
12937
|
+
anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
|
|
12729
12938
|
"animateTransform",
|
|
12730
12939
|
{
|
|
12731
12940
|
attributeName: "transform",
|
|
@@ -12737,13 +12946,13 @@ var MobileHeroAnimation = ({
|
|
|
12737
12946
|
additive: "sum"
|
|
12738
12947
|
}
|
|
12739
12948
|
),
|
|
12740
|
-
/* @__PURE__ */ (0,
|
|
12741
|
-
/* @__PURE__ */ (0,
|
|
12742
|
-
/* @__PURE__ */ (0,
|
|
12949
|
+
/* @__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: [
|
|
12950
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "opacity", values: "0.3;0.65;0.3", dur: "3s", repeatCount: "indefinite" }),
|
|
12951
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("animate", { attributeName: "stroke-width", values: "1.5;2.5;1.5", dur: "3s", repeatCount: "indefinite" })
|
|
12743
12952
|
] }) })
|
|
12744
12953
|
] }) }),
|
|
12745
|
-
/* @__PURE__ */ (0,
|
|
12746
|
-
anim && /* @__PURE__ */ (0,
|
|
12954
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("g", { transform: `translate(${C},${C})`, children: /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("g", { children: [
|
|
12955
|
+
anim && /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
|
|
12747
12956
|
"animateTransform",
|
|
12748
12957
|
{
|
|
12749
12958
|
attributeName: "transform",
|
|
@@ -12755,19 +12964,19 @@ var MobileHeroAnimation = ({
|
|
|
12755
12964
|
additive: "sum"
|
|
12756
12965
|
}
|
|
12757
12966
|
),
|
|
12758
|
-
/* @__PURE__ */ (0,
|
|
12967
|
+
/* @__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
12968
|
] }) }),
|
|
12760
|
-
/* @__PURE__ */ (0,
|
|
12761
|
-
/* @__PURE__ */ (0,
|
|
12762
|
-
/* @__PURE__ */ (0,
|
|
12763
|
-
/* @__PURE__ */ (0,
|
|
12764
|
-
/* @__PURE__ */ (0,
|
|
12765
|
-
/* @__PURE__ */ (0,
|
|
12969
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("g", { transform: `translate(${C - 18.8},${C - 18.8}) scale(0.0912)`, children: [
|
|
12970
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: "M137.306 411.865H0.000244141L68.6795 343.29L137.306 411.865Z", fill: "#6F32FF" }),
|
|
12971
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: "M0 0H137.306L68.6267 68.574L0 0Z", fill: "#6F32FF" }),
|
|
12972
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: "M137.148 274.559H274.455L411.708 411.866H274.401L137.148 274.559Z", fill: "#17B581" }),
|
|
12973
|
+
/* @__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" }),
|
|
12974
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("path", { d: "M274.479 0.104797H411.786L274.533 137.411H137.226L274.479 0.104797Z", fill: "#17B581" })
|
|
12766
12975
|
] })
|
|
12767
12976
|
]
|
|
12768
12977
|
}
|
|
12769
12978
|
),
|
|
12770
|
-
/* @__PURE__ */ (0,
|
|
12979
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("div", { style: {
|
|
12771
12980
|
position: "absolute",
|
|
12772
12981
|
inset: 0,
|
|
12773
12982
|
width: 280,
|
|
@@ -12778,7 +12987,7 @@ var MobileHeroAnimation = ({
|
|
|
12778
12987
|
const x = C + Math.cos(angle) * ORBIT_R - BADGE_HALF;
|
|
12779
12988
|
const y = C + Math.sin(angle) * ORBIT_R - BADGE_HALF;
|
|
12780
12989
|
const color = PROTOCOL_COLORS[protocol.network] ?? "#ffffff";
|
|
12781
|
-
return /* @__PURE__ */ (0,
|
|
12990
|
+
return /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
|
|
12782
12991
|
"div",
|
|
12783
12992
|
{
|
|
12784
12993
|
style: {
|
|
@@ -12789,7 +12998,7 @@ var MobileHeroAnimation = ({
|
|
|
12789
12998
|
height: BADGE_SIZE,
|
|
12790
12999
|
animation: anim ? "mha-counter-spin 20s linear infinite" : "none"
|
|
12791
13000
|
},
|
|
12792
|
-
children: /* @__PURE__ */ (0,
|
|
13001
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("div", { style: {
|
|
12793
13002
|
width: "100%",
|
|
12794
13003
|
height: "100%",
|
|
12795
13004
|
borderRadius: "50%",
|
|
@@ -12800,7 +13009,7 @@ var MobileHeroAnimation = ({
|
|
|
12800
13009
|
display: "flex",
|
|
12801
13010
|
alignItems: "center",
|
|
12802
13011
|
justifyContent: "center"
|
|
12803
|
-
}, children: /* @__PURE__ */ (0,
|
|
13012
|
+
}, children: /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
|
|
12804
13013
|
"img",
|
|
12805
13014
|
{
|
|
12806
13015
|
src: iconBasePath ? `${iconBasePath}/${protocol.iconSuffix}` : protocolIcons[protocol.network] ?? protocol.iconSuffix,
|
|
@@ -12821,7 +13030,7 @@ var MobileHeroAnimation = ({
|
|
|
12821
13030
|
|
|
12822
13031
|
// src/web/components/kaleidoscope-hero-animation.tsx
|
|
12823
13032
|
var import_react41 = require("react");
|
|
12824
|
-
var
|
|
13033
|
+
var import_jsx_runtime132 = require("react/jsx-runtime");
|
|
12825
13034
|
var PROTOCOLS2 = [
|
|
12826
13035
|
{ name: "Bitcoin L1", network: "L1", color: "#F7931A", glowColor: "rgba(247,147,26,0.5)" },
|
|
12827
13036
|
{ name: "Lightning", network: "LN", color: "#fbbf24", glowColor: "rgba(251,191,36,0.5)" },
|
|
@@ -12926,13 +13135,13 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
12926
13135
|
const angle = Math.PI * 2 * i / 7 - Math.PI / 2;
|
|
12927
13136
|
return { x: c + orbitR * Math.cos(angle), y: c + orbitR * Math.sin(angle) };
|
|
12928
13137
|
});
|
|
12929
|
-
return /* @__PURE__ */ (0,
|
|
13138
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
12930
13139
|
"div",
|
|
12931
13140
|
{
|
|
12932
13141
|
ref: containerRef,
|
|
12933
13142
|
className: `relative ${className}`,
|
|
12934
13143
|
style: size ? { width: size, height: size } : void 0,
|
|
12935
|
-
children: /* @__PURE__ */ (0,
|
|
13144
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(
|
|
12936
13145
|
"svg",
|
|
12937
13146
|
{
|
|
12938
13147
|
viewBox: "0 0 500 500",
|
|
@@ -12941,60 +13150,60 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
12941
13150
|
xmlns: "http://www.w3.org/2000/svg",
|
|
12942
13151
|
className: "overflow-visible",
|
|
12943
13152
|
children: [
|
|
12944
|
-
/* @__PURE__ */ (0,
|
|
12945
|
-
/* @__PURE__ */ (0,
|
|
12946
|
-
/* @__PURE__ */ (0,
|
|
12947
|
-
/* @__PURE__ */ (0,
|
|
13153
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("defs", { children: [
|
|
13154
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("linearGradient", { id: "kh-grad-a", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
|
|
13155
|
+
/* @__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" }) }),
|
|
13156
|
+
/* @__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
13157
|
] }),
|
|
12949
|
-
/* @__PURE__ */ (0,
|
|
12950
|
-
/* @__PURE__ */ (0,
|
|
12951
|
-
/* @__PURE__ */ (0,
|
|
13158
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("linearGradient", { id: "kh-grad-b", x1: "100%", y1: "0%", x2: "0%", y2: "100%", children: [
|
|
13159
|
+
/* @__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" }) }),
|
|
13160
|
+
/* @__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
13161
|
] }),
|
|
12953
|
-
/* @__PURE__ */ (0,
|
|
12954
|
-
/* @__PURE__ */ (0,
|
|
12955
|
-
/* @__PURE__ */ (0,
|
|
13162
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("linearGradient", { id: "kh-grad-c", x1: "50%", y1: "0%", x2: "50%", y2: "100%", children: [
|
|
13163
|
+
/* @__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" }) }),
|
|
13164
|
+
/* @__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
13165
|
] }),
|
|
12957
|
-
/* @__PURE__ */ (0,
|
|
12958
|
-
/* @__PURE__ */ (0,
|
|
12959
|
-
/* @__PURE__ */ (0,
|
|
13166
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("linearGradient", { id: "kh-gp", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
|
|
13167
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "0%", stopColor: "#22c55e" }),
|
|
13168
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "100%", stopColor: "#8a5cf6" })
|
|
12960
13169
|
] }),
|
|
12961
|
-
/* @__PURE__ */ (0,
|
|
12962
|
-
/* @__PURE__ */ (0,
|
|
12963
|
-
/* @__PURE__ */ (0,
|
|
13170
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("linearGradient", { id: "kh-oc", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
|
|
13171
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "0%", stopColor: "#F7931A" }),
|
|
13172
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "100%", stopColor: "#06b6d4" })
|
|
12964
13173
|
] }),
|
|
12965
|
-
/* @__PURE__ */ (0,
|
|
12966
|
-
/* @__PURE__ */ (0,
|
|
12967
|
-
/* @__PURE__ */ (0,
|
|
13174
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("linearGradient", { id: "kh-bp", x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
|
|
13175
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "0%", stopColor: "#0e9dff" }),
|
|
13176
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "100%", stopColor: "#8a5cf6" })
|
|
12968
13177
|
] }),
|
|
12969
|
-
/* @__PURE__ */ (0,
|
|
12970
|
-
/* @__PURE__ */ (0,
|
|
12971
|
-
/* @__PURE__ */ (0,
|
|
12972
|
-
/* @__PURE__ */ (0,
|
|
13178
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("radialGradient", { id: "kh-center-glow", cx: "50%", cy: "50%", r: "50%", children: [
|
|
13179
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "0%", stopColor: "#0e9dff", stopOpacity: "0.3" }),
|
|
13180
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "40%", stopColor: "#8a5cf6", stopOpacity: "0.15" }),
|
|
13181
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "100%", stopColor: "transparent", stopOpacity: "0" })
|
|
12973
13182
|
] }),
|
|
12974
|
-
/* @__PURE__ */ (0,
|
|
12975
|
-
/* @__PURE__ */ (0,
|
|
12976
|
-
/* @__PURE__ */ (0,
|
|
12977
|
-
/* @__PURE__ */ (0,
|
|
13183
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("radialGradient", { id: "kh-haze", cx: "50%", cy: "50%", r: "50%", children: [
|
|
13184
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "0%", stopColor: "transparent", stopOpacity: "0" }),
|
|
13185
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "60%", stopColor: "#0e9dff", stopOpacity: "0.03" }),
|
|
13186
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("stop", { offset: "100%", stopColor: "#8a5cf6", stopOpacity: "0.06" })
|
|
12978
13187
|
] }),
|
|
12979
|
-
/* @__PURE__ */ (0,
|
|
12980
|
-
/* @__PURE__ */ (0,
|
|
12981
|
-
/* @__PURE__ */ (0,
|
|
12982
|
-
/* @__PURE__ */ (0,
|
|
12983
|
-
/* @__PURE__ */ (0,
|
|
13188
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("filter", { id: "kh-glow", x: "-50%", y: "-50%", width: "200%", height: "200%", children: [
|
|
13189
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("feGaussianBlur", { stdDeviation: "3", result: "blur" }),
|
|
13190
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("feMerge", { children: [
|
|
13191
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("feMergeNode", { in: "blur" }),
|
|
13192
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("feMergeNode", { in: "SourceGraphic" })
|
|
12984
13193
|
] })
|
|
12985
13194
|
] }),
|
|
12986
|
-
/* @__PURE__ */ (0,
|
|
12987
|
-
/* @__PURE__ */ (0,
|
|
12988
|
-
/* @__PURE__ */ (0,
|
|
12989
|
-
/* @__PURE__ */ (0,
|
|
12990
|
-
/* @__PURE__ */ (0,
|
|
13195
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("filter", { id: "kh-glow-lg", x: "-50%", y: "-50%", width: "200%", height: "200%", children: [
|
|
13196
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("feGaussianBlur", { stdDeviation: "8", result: "blur" }),
|
|
13197
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("feMerge", { children: [
|
|
13198
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("feMergeNode", { in: "blur" }),
|
|
13199
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("feMergeNode", { in: "SourceGraphic" })
|
|
12991
13200
|
] })
|
|
12992
13201
|
] })
|
|
12993
13202
|
] }),
|
|
12994
|
-
/* @__PURE__ */ (0,
|
|
12995
|
-
/* @__PURE__ */ (0,
|
|
12996
|
-
/* @__PURE__ */ (0,
|
|
12997
|
-
anim && /* @__PURE__ */ (0,
|
|
13203
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("circle", { cx: c, cy: c, r: "248", fill: "url(#kh-haze)" }),
|
|
13204
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { transform: px(20), children: [
|
|
13205
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { children: [
|
|
13206
|
+
anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
12998
13207
|
"animateTransform",
|
|
12999
13208
|
{
|
|
13000
13209
|
attributeName: "transform",
|
|
@@ -13007,14 +13216,14 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13007
13216
|
),
|
|
13008
13217
|
Array.from({ length: 6 }, (_, i) => {
|
|
13009
13218
|
const a = Math.PI / 3 * i;
|
|
13010
|
-
return /* @__PURE__ */ (0,
|
|
13011
|
-
/* @__PURE__ */ (0,
|
|
13012
|
-
/* @__PURE__ */ (0,
|
|
13219
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { transform: `translate(${c + outerR1 * Math.cos(a)},${c + outerR1 * Math.sin(a)})`, children: [
|
|
13220
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: hexPath2(40), fill: "url(#kh-grad-a)", opacity: 0.08 + i % 3 * 0.04 }),
|
|
13221
|
+
/* @__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
13222
|
] }, `ha-${i}`);
|
|
13014
13223
|
}),
|
|
13015
13224
|
Array.from({ length: 6 }, (_, i) => {
|
|
13016
13225
|
const a = Math.PI / 3 * i + Math.PI / 6;
|
|
13017
|
-
return /* @__PURE__ */ (0,
|
|
13226
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13018
13227
|
"path",
|
|
13019
13228
|
{
|
|
13020
13229
|
d: triPath(14),
|
|
@@ -13027,7 +13236,7 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13027
13236
|
}),
|
|
13028
13237
|
Array.from({ length: 12 }, (_, i) => {
|
|
13029
13238
|
const a = Math.PI / 6 * i;
|
|
13030
|
-
return /* @__PURE__ */ (0,
|
|
13239
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13031
13240
|
"circle",
|
|
13032
13241
|
{
|
|
13033
13242
|
cx: c + outerR1 * 0.92 * Math.cos(a),
|
|
@@ -13035,14 +13244,14 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13035
13244
|
r: "1.5",
|
|
13036
13245
|
fill: "url(#kh-grad-a)",
|
|
13037
13246
|
opacity: "0.15",
|
|
13038
|
-
children: anim && /* @__PURE__ */ (0,
|
|
13247
|
+
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
13248
|
},
|
|
13040
13249
|
`od-${i}`
|
|
13041
13250
|
);
|
|
13042
13251
|
})
|
|
13043
13252
|
] }),
|
|
13044
|
-
/* @__PURE__ */ (0,
|
|
13045
|
-
anim && /* @__PURE__ */ (0,
|
|
13253
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { children: [
|
|
13254
|
+
anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13046
13255
|
"animateTransform",
|
|
13047
13256
|
{
|
|
13048
13257
|
attributeName: "transform",
|
|
@@ -13055,28 +13264,28 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13055
13264
|
),
|
|
13056
13265
|
Array.from({ length: 6 }, (_, i) => {
|
|
13057
13266
|
const a = Math.PI / 3 * i + Math.PI / 6;
|
|
13058
|
-
return /* @__PURE__ */ (0,
|
|
13059
|
-
/* @__PURE__ */ (0,
|
|
13060
|
-
/* @__PURE__ */ (0,
|
|
13267
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { transform: `translate(${c + outerR2 * Math.cos(a)},${c + outerR2 * Math.sin(a)})`, children: [
|
|
13268
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: hexPath2(30), fill: "url(#kh-grad-b)", opacity: 0.06 + i % 2 * 0.04 }),
|
|
13269
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: hexPath2(30), fill: "none", stroke: "url(#kh-grad-b)", strokeWidth: "0.5", opacity: 0.12 })
|
|
13061
13270
|
] }, `hb-${i}`);
|
|
13062
13271
|
}),
|
|
13063
13272
|
Array.from({ length: 6 }, (_, i) => {
|
|
13064
13273
|
const a = Math.PI / 3 * i;
|
|
13065
|
-
return /* @__PURE__ */ (0,
|
|
13274
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13066
13275
|
"path",
|
|
13067
13276
|
{
|
|
13068
13277
|
d: diamondPath(8, 16),
|
|
13069
13278
|
transform: `translate(${c + outerR2 * 0.85 * Math.cos(a)},${c + outerR2 * 0.85 * Math.sin(a)}) rotate(${i * 60})`,
|
|
13070
13279
|
fill: "url(#kh-grad-b)",
|
|
13071
13280
|
opacity: "0.08",
|
|
13072
|
-
children: anim && /* @__PURE__ */ (0,
|
|
13281
|
+
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
13282
|
},
|
|
13074
13283
|
`db-${i}`
|
|
13075
13284
|
);
|
|
13076
13285
|
})
|
|
13077
13286
|
] }),
|
|
13078
|
-
/* @__PURE__ */ (0,
|
|
13079
|
-
anim && /* @__PURE__ */ (0,
|
|
13287
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { children: [
|
|
13288
|
+
anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13080
13289
|
"animateTransform",
|
|
13081
13290
|
{
|
|
13082
13291
|
attributeName: "transform",
|
|
@@ -13090,23 +13299,23 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13090
13299
|
Array.from({ length: 12 }, (_, i) => {
|
|
13091
13300
|
const a = Math.PI / 6 * i;
|
|
13092
13301
|
const r = outerR1 * (0.6 + i % 2 * 0.15);
|
|
13093
|
-
return /* @__PURE__ */ (0,
|
|
13302
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13094
13303
|
"path",
|
|
13095
13304
|
{
|
|
13096
13305
|
d: triPath(10),
|
|
13097
13306
|
transform: `translate(${c + r * Math.cos(a)},${c + r * Math.sin(a)}) rotate(${i * 30 + 15})`,
|
|
13098
13307
|
fill: "url(#kh-grad-c)",
|
|
13099
13308
|
opacity: "0.05",
|
|
13100
|
-
children: anim && /* @__PURE__ */ (0,
|
|
13309
|
+
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
13310
|
},
|
|
13102
13311
|
`tc-${i}`
|
|
13103
13312
|
);
|
|
13104
13313
|
})
|
|
13105
13314
|
] })
|
|
13106
13315
|
] }),
|
|
13107
|
-
/* @__PURE__ */ (0,
|
|
13108
|
-
/* @__PURE__ */ (0,
|
|
13109
|
-
anim && /* @__PURE__ */ (0,
|
|
13316
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { transform: px(14), children: [
|
|
13317
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { children: [
|
|
13318
|
+
anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13110
13319
|
"animateTransform",
|
|
13111
13320
|
{
|
|
13112
13321
|
attributeName: "transform",
|
|
@@ -13119,9 +13328,9 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13119
13328
|
),
|
|
13120
13329
|
Array.from({ length: 12 }, (_, i) => {
|
|
13121
13330
|
const a = Math.PI / 6 * i;
|
|
13122
|
-
return /* @__PURE__ */ (0,
|
|
13123
|
-
/* @__PURE__ */ (0,
|
|
13124
|
-
/* @__PURE__ */ (0,
|
|
13331
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { transform: `translate(${c + midR * Math.cos(a)},${c + midR * Math.sin(a)})`, children: [
|
|
13332
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: hexPath2(12), fill: "url(#kh-grad-c)", opacity: 0.08 + i % 3 * 0.03 }),
|
|
13333
|
+
/* @__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
13334
|
] }, `mh-${i}`);
|
|
13126
13335
|
})
|
|
13127
13336
|
] }),
|
|
@@ -13132,7 +13341,7 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13132
13341
|
const y1 = c + midR * Math.sin(a1);
|
|
13133
13342
|
const x2 = c + midR * Math.cos(a2);
|
|
13134
13343
|
const y2 = c + midR * Math.sin(a2);
|
|
13135
|
-
return /* @__PURE__ */ (0,
|
|
13344
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13136
13345
|
"path",
|
|
13137
13346
|
{
|
|
13138
13347
|
d: `M${x1},${y1} Q${c},${c} ${x2},${y2}`,
|
|
@@ -13141,17 +13350,17 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13141
13350
|
strokeWidth: "0.5",
|
|
13142
13351
|
strokeDasharray: "3 5",
|
|
13143
13352
|
opacity: "0.1",
|
|
13144
|
-
children: anim && /* @__PURE__ */ (0,
|
|
13353
|
+
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
13354
|
},
|
|
13146
13355
|
`arc-${i}`
|
|
13147
13356
|
);
|
|
13148
13357
|
})
|
|
13149
13358
|
] }),
|
|
13150
|
-
/* @__PURE__ */ (0,
|
|
13151
|
-
/* @__PURE__ */ (0,
|
|
13152
|
-
/* @__PURE__ */ (0,
|
|
13153
|
-
/* @__PURE__ */ (0,
|
|
13154
|
-
anim && /* @__PURE__ */ (0,
|
|
13359
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { transform: px(10), children: [
|
|
13360
|
+
/* @__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" }) }),
|
|
13361
|
+
/* @__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" }),
|
|
13362
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { children: [
|
|
13363
|
+
anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13155
13364
|
"animateTransform",
|
|
13156
13365
|
{
|
|
13157
13366
|
attributeName: "transform",
|
|
@@ -13166,8 +13375,8 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13166
13375
|
const angle = Math.atan2(pos.y - c, pos.x - c);
|
|
13167
13376
|
const dx = Math.cos(angle);
|
|
13168
13377
|
const dy = Math.sin(angle);
|
|
13169
|
-
return /* @__PURE__ */ (0,
|
|
13170
|
-
/* @__PURE__ */ (0,
|
|
13378
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { children: [
|
|
13379
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13171
13380
|
"line",
|
|
13172
13381
|
{
|
|
13173
13382
|
x1: c + dx * 52,
|
|
@@ -13178,14 +13387,14 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13178
13387
|
strokeWidth: "0.8",
|
|
13179
13388
|
strokeDasharray: "2 4",
|
|
13180
13389
|
opacity: "0.2",
|
|
13181
|
-
children: anim && /* @__PURE__ */ (0,
|
|
13390
|
+
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
13391
|
}
|
|
13183
13392
|
),
|
|
13184
|
-
/* @__PURE__ */ (0,
|
|
13185
|
-
/* @__PURE__ */ (0,
|
|
13186
|
-
/* @__PURE__ */ (0,
|
|
13187
|
-
/* @__PURE__ */ (0,
|
|
13188
|
-
/* @__PURE__ */ (0,
|
|
13393
|
+
/* @__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: [
|
|
13394
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "cx", values: `${c + dx * 52};${pos.x}`, dur: `${2 + i * 0.3}s`, repeatCount: "indefinite" }),
|
|
13395
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "cy", values: `${c + dy * 52};${pos.y}`, dur: `${2 + i * 0.3}s`, repeatCount: "indefinite" }),
|
|
13396
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0;0.8;0", dur: `${2 + i * 0.3}s`, repeatCount: "indefinite" }),
|
|
13397
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "r", values: "1.5;3;1.5", dur: `${2 + i * 0.3}s`, repeatCount: "indefinite" })
|
|
13189
13398
|
] }) })
|
|
13190
13399
|
] }, `conn-${i}`);
|
|
13191
13400
|
}),
|
|
@@ -13193,14 +13402,14 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13193
13402
|
const pos = iconPositions[i];
|
|
13194
13403
|
const labelWidth = Math.max(proto.name.length * 5.5 + 10, 32);
|
|
13195
13404
|
const isHovered = hoveredProtocol === proto.name;
|
|
13196
|
-
return /* @__PURE__ */ (0,
|
|
13405
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)("g", { transform: `translate(${pos.x},${pos.y})`, children: /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(
|
|
13197
13406
|
"g",
|
|
13198
13407
|
{
|
|
13199
13408
|
onMouseEnter: () => setHoveredProtocol(proto.name),
|
|
13200
13409
|
onMouseLeave: () => setHoveredProtocol(null),
|
|
13201
13410
|
style: { cursor: "pointer" },
|
|
13202
13411
|
children: [
|
|
13203
|
-
anim && /* @__PURE__ */ (0,
|
|
13412
|
+
anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13204
13413
|
"animateTransform",
|
|
13205
13414
|
{
|
|
13206
13415
|
attributeName: "transform",
|
|
@@ -13211,7 +13420,7 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13211
13420
|
repeatCount: "indefinite"
|
|
13212
13421
|
}
|
|
13213
13422
|
),
|
|
13214
|
-
/* @__PURE__ */ (0,
|
|
13423
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13215
13424
|
"circle",
|
|
13216
13425
|
{
|
|
13217
13426
|
cx: "0",
|
|
@@ -13221,13 +13430,13 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13221
13430
|
stroke: proto.color,
|
|
13222
13431
|
strokeWidth: "1",
|
|
13223
13432
|
opacity: "0",
|
|
13224
|
-
children: anim && /* @__PURE__ */ (0,
|
|
13225
|
-
/* @__PURE__ */ (0,
|
|
13226
|
-
/* @__PURE__ */ (0,
|
|
13433
|
+
children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(import_jsx_runtime132.Fragment, { children: [
|
|
13434
|
+
/* @__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` }),
|
|
13435
|
+
/* @__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
13436
|
] })
|
|
13228
13437
|
}
|
|
13229
13438
|
),
|
|
13230
|
-
/* @__PURE__ */ (0,
|
|
13439
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13231
13440
|
"circle",
|
|
13232
13441
|
{
|
|
13233
13442
|
cx: "0",
|
|
@@ -13237,10 +13446,10 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13237
13446
|
stroke: proto.color,
|
|
13238
13447
|
strokeWidth: "1",
|
|
13239
13448
|
opacity: "0.15",
|
|
13240
|
-
children: anim && /* @__PURE__ */ (0,
|
|
13449
|
+
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
13450
|
}
|
|
13242
13451
|
),
|
|
13243
|
-
/* @__PURE__ */ (0,
|
|
13452
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13244
13453
|
"circle",
|
|
13245
13454
|
{
|
|
13246
13455
|
cx: "0",
|
|
@@ -13250,10 +13459,10 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13250
13459
|
stroke: proto.color,
|
|
13251
13460
|
strokeWidth: "1.5",
|
|
13252
13461
|
opacity: "0.25",
|
|
13253
|
-
children: anim && /* @__PURE__ */ (0,
|
|
13462
|
+
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
13463
|
}
|
|
13255
13464
|
),
|
|
13256
|
-
/* @__PURE__ */ (0,
|
|
13465
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13257
13466
|
"circle",
|
|
13258
13467
|
{
|
|
13259
13468
|
cx: "0",
|
|
@@ -13264,8 +13473,8 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13264
13473
|
strokeWidth: "1"
|
|
13265
13474
|
}
|
|
13266
13475
|
),
|
|
13267
|
-
/* @__PURE__ */ (0,
|
|
13268
|
-
/* @__PURE__ */ (0,
|
|
13476
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("circle", { cx: "0", cy: "0", r: iconR - 2, fill: proto.color, opacity: "0.06" }),
|
|
13477
|
+
/* @__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
13478
|
NetworkBadge,
|
|
13270
13479
|
{
|
|
13271
13480
|
network: proto.network,
|
|
@@ -13273,8 +13482,8 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13273
13482
|
className: "w-full h-full"
|
|
13274
13483
|
}
|
|
13275
13484
|
) }),
|
|
13276
|
-
/* @__PURE__ */ (0,
|
|
13277
|
-
/* @__PURE__ */ (0,
|
|
13485
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { opacity: isHovered ? 1 : 0, style: { transition: "opacity 0.2s ease" }, children: [
|
|
13486
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13278
13487
|
"rect",
|
|
13279
13488
|
{
|
|
13280
13489
|
x: -labelWidth / 2,
|
|
@@ -13288,7 +13497,7 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13288
13497
|
strokeOpacity: 0.4
|
|
13289
13498
|
}
|
|
13290
13499
|
),
|
|
13291
|
-
/* @__PURE__ */ (0,
|
|
13500
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13292
13501
|
"text",
|
|
13293
13502
|
{
|
|
13294
13503
|
x: "0",
|
|
@@ -13308,9 +13517,9 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13308
13517
|
})
|
|
13309
13518
|
] })
|
|
13310
13519
|
] }),
|
|
13311
|
-
/* @__PURE__ */ (0,
|
|
13312
|
-
/* @__PURE__ */ (0,
|
|
13313
|
-
anim && /* @__PURE__ */ (0,
|
|
13520
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { transform: px(5), children: [
|
|
13521
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { children: [
|
|
13522
|
+
anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13314
13523
|
"animateTransform",
|
|
13315
13524
|
{
|
|
13316
13525
|
attributeName: "transform",
|
|
@@ -13323,28 +13532,28 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13323
13532
|
),
|
|
13324
13533
|
Array.from({ length: 6 }, (_, i) => {
|
|
13325
13534
|
const a = Math.PI / 3 * i;
|
|
13326
|
-
return /* @__PURE__ */ (0,
|
|
13535
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13327
13536
|
"path",
|
|
13328
13537
|
{
|
|
13329
13538
|
d: diamondPath(10, 22),
|
|
13330
13539
|
transform: `translate(${c + innerR * Math.cos(a)},${c + innerR * Math.sin(a)}) rotate(${i * 60})`,
|
|
13331
13540
|
fill: "url(#kh-gp)",
|
|
13332
13541
|
opacity: "0.15",
|
|
13333
|
-
children: anim && /* @__PURE__ */ (0,
|
|
13542
|
+
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
13543
|
},
|
|
13335
13544
|
`d-${i}`
|
|
13336
13545
|
);
|
|
13337
13546
|
}),
|
|
13338
13547
|
Array.from({ length: 6 }, (_, i) => {
|
|
13339
13548
|
const a = Math.PI / 3 * i + Math.PI / 6;
|
|
13340
|
-
return /* @__PURE__ */ (0,
|
|
13549
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13341
13550
|
"path",
|
|
13342
13551
|
{
|
|
13343
13552
|
d: triPath(8),
|
|
13344
13553
|
transform: `translate(${c + innerR * 0.75 * Math.cos(a)},${c + innerR * 0.75 * Math.sin(a)}) rotate(${i * 60 + 30})`,
|
|
13345
13554
|
fill: "url(#kh-oc)",
|
|
13346
13555
|
opacity: "0.1",
|
|
13347
|
-
children: anim && /* @__PURE__ */ (0,
|
|
13556
|
+
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
13557
|
},
|
|
13349
13558
|
`it-${i}`
|
|
13350
13559
|
);
|
|
@@ -13352,7 +13561,7 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13352
13561
|
Array.from({ length: 12 }, (_, i) => {
|
|
13353
13562
|
const a = Math.PI / 6 * i;
|
|
13354
13563
|
const r = innerR * (i % 2 === 0 ? 0.55 : 0.65);
|
|
13355
|
-
return /* @__PURE__ */ (0,
|
|
13564
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13356
13565
|
"circle",
|
|
13357
13566
|
{
|
|
13358
13567
|
cx: c + r * Math.cos(a),
|
|
@@ -13360,14 +13569,14 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13360
13569
|
r: i % 2 === 0 ? 2 : 1.5,
|
|
13361
13570
|
fill: "url(#kh-oc)",
|
|
13362
13571
|
opacity: "0.2",
|
|
13363
|
-
children: anim && /* @__PURE__ */ (0,
|
|
13572
|
+
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
13573
|
},
|
|
13365
13574
|
`id-${i}`
|
|
13366
13575
|
);
|
|
13367
13576
|
})
|
|
13368
13577
|
] }),
|
|
13369
|
-
/* @__PURE__ */ (0,
|
|
13370
|
-
anim && /* @__PURE__ */ (0,
|
|
13578
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { children: [
|
|
13579
|
+
anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13371
13580
|
"animateTransform",
|
|
13372
13581
|
{
|
|
13373
13582
|
attributeName: "transform",
|
|
@@ -13380,27 +13589,27 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13380
13589
|
),
|
|
13381
13590
|
Array.from({ length: 6 }, (_, i) => {
|
|
13382
13591
|
const a = Math.PI / 3 * i + Math.PI / 6;
|
|
13383
|
-
return /* @__PURE__ */ (0,
|
|
13592
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13384
13593
|
"path",
|
|
13385
13594
|
{
|
|
13386
13595
|
d: hexPath2(6),
|
|
13387
13596
|
transform: `translate(${c + innerR * 0.42 * Math.cos(a)},${c + innerR * 0.42 * Math.sin(a)})`,
|
|
13388
13597
|
fill: "url(#kh-bp)",
|
|
13389
13598
|
opacity: "0.1",
|
|
13390
|
-
children: anim && /* @__PURE__ */ (0,
|
|
13599
|
+
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
13600
|
},
|
|
13392
13601
|
`ih-${i}`
|
|
13393
13602
|
);
|
|
13394
13603
|
})
|
|
13395
13604
|
] })
|
|
13396
13605
|
] }),
|
|
13397
|
-
/* @__PURE__ */ (0,
|
|
13606
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("g", { transform: px(18), children: Array.from({ length: 16 }, (_, i) => {
|
|
13398
13607
|
const a = Math.PI * 2 * i / 16;
|
|
13399
13608
|
const baseR = 60 + i % 4 * 45;
|
|
13400
13609
|
const x = c + baseR * Math.cos(a);
|
|
13401
13610
|
const y = c + baseR * Math.sin(a);
|
|
13402
13611
|
const colors2 = ["#0e9dff", "#8a5cf6", "#22c55e", "#F7931A", "#06b6d4", "#15E99A"];
|
|
13403
|
-
return /* @__PURE__ */ (0,
|
|
13612
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13404
13613
|
"circle",
|
|
13405
13614
|
{
|
|
13406
13615
|
cx: x,
|
|
@@ -13408,26 +13617,26 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13408
13617
|
r: 1 + i % 3 * 0.5,
|
|
13409
13618
|
fill: colors2[i % colors2.length],
|
|
13410
13619
|
opacity: "0",
|
|
13411
|
-
children: anim && /* @__PURE__ */ (0,
|
|
13412
|
-
/* @__PURE__ */ (0,
|
|
13413
|
-
/* @__PURE__ */ (0,
|
|
13414
|
-
/* @__PURE__ */ (0,
|
|
13620
|
+
children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(import_jsx_runtime132.Fragment, { children: [
|
|
13621
|
+
/* @__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` }),
|
|
13622
|
+
/* @__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` }),
|
|
13623
|
+
/* @__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
13624
|
] })
|
|
13416
13625
|
},
|
|
13417
13626
|
`p-${i}`
|
|
13418
13627
|
);
|
|
13419
13628
|
}) }),
|
|
13420
|
-
/* @__PURE__ */ (0,
|
|
13421
|
-
/* @__PURE__ */ (0,
|
|
13422
|
-
/* @__PURE__ */ (0,
|
|
13423
|
-
/* @__PURE__ */ (0,
|
|
13424
|
-
/* @__PURE__ */ (0,
|
|
13629
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { children: [
|
|
13630
|
+
/* @__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" }) }),
|
|
13631
|
+
/* @__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: [
|
|
13632
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "r", values: "48;65", dur: "3s", repeatCount: "indefinite" }),
|
|
13633
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.4;0", dur: "3s", repeatCount: "indefinite" })
|
|
13425
13634
|
] }) }),
|
|
13426
|
-
/* @__PURE__ */ (0,
|
|
13427
|
-
/* @__PURE__ */ (0,
|
|
13428
|
-
/* @__PURE__ */ (0,
|
|
13635
|
+
/* @__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: [
|
|
13636
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "r", values: "48;60", dur: "3s", repeatCount: "indefinite", begin: "1.5s" }),
|
|
13637
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.3;0", dur: "3s", repeatCount: "indefinite", begin: "1.5s" })
|
|
13429
13638
|
] }) }),
|
|
13430
|
-
/* @__PURE__ */ (0,
|
|
13639
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13431
13640
|
"path",
|
|
13432
13641
|
{
|
|
13433
13642
|
d: hexPath2(50),
|
|
@@ -13437,13 +13646,13 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13437
13646
|
strokeWidth: "1.5",
|
|
13438
13647
|
opacity: "0.4",
|
|
13439
13648
|
filter: "url(#kh-glow)",
|
|
13440
|
-
children: anim && /* @__PURE__ */ (0,
|
|
13441
|
-
/* @__PURE__ */ (0,
|
|
13442
|
-
/* @__PURE__ */ (0,
|
|
13649
|
+
children: anim && /* @__PURE__ */ (0, import_jsx_runtime132.jsxs)(import_jsx_runtime132.Fragment, { children: [
|
|
13650
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "opacity", values: "0.3;0.65;0.3", dur: "3s", repeatCount: "indefinite" }),
|
|
13651
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("animate", { attributeName: "stroke-width", values: "1.5;2.5;1.5", dur: "3s", repeatCount: "indefinite" })
|
|
13443
13652
|
] })
|
|
13444
13653
|
}
|
|
13445
13654
|
),
|
|
13446
|
-
/* @__PURE__ */ (0,
|
|
13655
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13447
13656
|
"path",
|
|
13448
13657
|
{
|
|
13449
13658
|
d: hexPath2(46),
|
|
@@ -13453,21 +13662,21 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13453
13662
|
strokeWidth: "0.5"
|
|
13454
13663
|
}
|
|
13455
13664
|
),
|
|
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,
|
|
13665
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsxs)("g", { transform: `translate(${c - 34},${c - 34}) scale(0.325)`, children: [
|
|
13666
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M69.7141 207.3H0.908203L35.3243 172.936L69.7141 207.3Z", fill: "#6F32FF" }),
|
|
13667
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M138.441 0.96106V69.767L104.078 35.3508L138.441 0.96106Z", fill: "#17B581" }),
|
|
13668
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M138.415 138.547V207.352L104.051 172.936L138.415 138.547Z", fill: "#17B581" }),
|
|
13669
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M138.441 69.7406V0.96106L172.804 35.3772L138.441 69.767V69.7406Z", fill: "#17B581" }),
|
|
13670
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M69.6614 138.494V69.6879L104.025 104.104L69.6614 138.494Z", fill: "#15E99A" }),
|
|
13671
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M69.6615 69.7142V138.52L35.2981 104.104L69.6615 69.7142Z", fill: "#15E99A" }),
|
|
13672
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M138.467 207.379V138.573L172.831 172.989L138.467 207.379Z", fill: "#17B581" }),
|
|
13673
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M0.908203 0.908325H69.7141L35.298 35.2718L0.908203 0.908325Z", fill: "#6F32FF" }),
|
|
13674
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M207.22 207.3H138.415L172.831 172.936L207.22 207.3Z", fill: "#17B581" }),
|
|
13675
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M138.415 0.987427H207.22L172.804 35.3509L138.415 0.987427Z", fill: "#17B581" }),
|
|
13676
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M138.467 69.7143H69.6614L104.078 35.3508L138.467 69.7143Z", fill: "#17B581" }),
|
|
13677
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M69.635 138.494H138.441L104.025 172.857L69.635 138.494Z", fill: "#17B581" }),
|
|
13678
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M138.415 138.494H69.635L104.025 104.157L138.388 138.494H138.415Z", fill: "#15E99A" }),
|
|
13679
|
+
/* @__PURE__ */ (0, import_jsx_runtime132.jsx)("path", { d: "M138.415 69.7142L104.051 104.051L69.6614 69.7142H138.441H138.415Z", fill: "#15E99A" })
|
|
13471
13680
|
] })
|
|
13472
13681
|
] })
|
|
13473
13682
|
]
|
|
@@ -13478,7 +13687,7 @@ var KaleidoScopeHeroAnimation = ({
|
|
|
13478
13687
|
};
|
|
13479
13688
|
|
|
13480
13689
|
// src/web/components/deposit-success-screen.tsx
|
|
13481
|
-
var
|
|
13690
|
+
var import_jsx_runtime133 = require("react/jsx-runtime");
|
|
13482
13691
|
function DepositSuccessScreen({
|
|
13483
13692
|
handleDone,
|
|
13484
13693
|
displayTicker,
|
|
@@ -13491,20 +13700,20 @@ function DepositSuccessScreen({
|
|
|
13491
13700
|
const isInstant = network === "lightning" || network === "spark";
|
|
13492
13701
|
const title = isInstant ? "Payment Received!" : "Deposit Detected!";
|
|
13493
13702
|
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,
|
|
13703
|
+
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: [
|
|
13704
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsxs)("div", { className: "relative mb-8", children: [
|
|
13705
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsx)("div", { className: "absolute inset-0 scale-150 animate-pulse rounded-full bg-secondary/25 blur-2xl" }),
|
|
13706
|
+
/* @__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
13707
|
] }),
|
|
13499
|
-
/* @__PURE__ */ (0,
|
|
13500
|
-
/* @__PURE__ */ (0,
|
|
13501
|
-
/* @__PURE__ */ (0,
|
|
13502
|
-
/* @__PURE__ */ (0,
|
|
13503
|
-
/* @__PURE__ */ (0,
|
|
13504
|
-
/* @__PURE__ */ (0,
|
|
13505
|
-
/* @__PURE__ */ (0,
|
|
13708
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsx)("h1", { className: "mb-2 text-headline font-bold text-gradient-brand", children: title }),
|
|
13709
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsx)("p", { className: "mb-8 max-w-[260px] text-caption leading-relaxed text-muted-foreground", children: subtitle }),
|
|
13710
|
+
/* @__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: [
|
|
13711
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsx)(AssetIcon, { ticker: displayTicker, size: 36 }),
|
|
13712
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsxs)("div", { className: "text-left", children: [
|
|
13713
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsx)("p", { className: "text-body font-bold text-foreground", children: displayTicker }),
|
|
13714
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsx)("p", { className: "text-caption text-foreground/55", children: selectedAsset?.name ?? displayTicker })
|
|
13506
13715
|
] }),
|
|
13507
|
-
/* @__PURE__ */ (0,
|
|
13716
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsxs)(
|
|
13508
13717
|
"div",
|
|
13509
13718
|
{
|
|
13510
13719
|
className: cn(
|
|
@@ -13514,27 +13723,27 @@ function DepositSuccessScreen({
|
|
|
13514
13723
|
),
|
|
13515
13724
|
children: [
|
|
13516
13725
|
net.icon,
|
|
13517
|
-
/* @__PURE__ */ (0,
|
|
13726
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsx)("span", { children: networkLabel })
|
|
13518
13727
|
]
|
|
13519
13728
|
}
|
|
13520
13729
|
)
|
|
13521
13730
|
] }),
|
|
13522
|
-
/* @__PURE__ */ (0,
|
|
13523
|
-
/* @__PURE__ */ (0,
|
|
13731
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsxs)(Button, { variant: "cta", size: "cta", onClick: handleDone, children: [
|
|
13732
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsx)(IconGlyph, { glyph: AccountBalanceWallet, className: "text-icon-lg" }),
|
|
13524
13733
|
"Back to Wallet"
|
|
13525
13734
|
] })
|
|
13526
13735
|
] }) });
|
|
13527
13736
|
}
|
|
13528
13737
|
|
|
13529
13738
|
// src/web/components/deposit-network-default-modal.tsx
|
|
13530
|
-
var
|
|
13739
|
+
var import_jsx_runtime134 = require("react/jsx-runtime");
|
|
13531
13740
|
var NETWORK_OPTIONS = {
|
|
13532
13741
|
RGB: {
|
|
13533
13742
|
network: "onchain",
|
|
13534
13743
|
account: "RGB",
|
|
13535
13744
|
label: "On-chain / Lightning",
|
|
13536
13745
|
description: "Classic Bitcoin address or Lightning invoice via the RLN node.",
|
|
13537
|
-
icon: /* @__PURE__ */ (0,
|
|
13746
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(OnchainNetworkIcon, { className: "size-5" }),
|
|
13538
13747
|
accentBg: "bg-network-bitcoin/10",
|
|
13539
13748
|
accentBorder: "border-network-bitcoin/30",
|
|
13540
13749
|
accentText: "text-network-bitcoin-fg"
|
|
@@ -13544,7 +13753,7 @@ var NETWORK_OPTIONS = {
|
|
|
13544
13753
|
account: "SPARK",
|
|
13545
13754
|
label: "Spark",
|
|
13546
13755
|
description: "Receive directly into your Spark account. Fast and free.",
|
|
13547
|
-
icon: /* @__PURE__ */ (0,
|
|
13756
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime134.jsx)("img", { src: "/icons/spark/Asterisk/Spark Asterisk White.svg", alt: "", className: "kui-mono-icon h-[18px]" }),
|
|
13548
13757
|
accentBg: "bg-info/10",
|
|
13549
13758
|
accentBorder: "border-info/30",
|
|
13550
13759
|
accentText: "text-info-fg"
|
|
@@ -13554,7 +13763,7 @@ var NETWORK_OPTIONS = {
|
|
|
13554
13763
|
account: "ARKADE",
|
|
13555
13764
|
label: "Arkade",
|
|
13556
13765
|
description: "Receive directly into your Arkade account. Low fees, near-instant settlement.",
|
|
13557
|
-
icon: /* @__PURE__ */ (0,
|
|
13766
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime134.jsx)("img", { src: "/icons/arkade/arkade-icon.svg", alt: "", className: "h-[18px]" }),
|
|
13558
13767
|
accentBg: "bg-network-arkade/10",
|
|
13559
13768
|
accentBorder: "border-network-arkade/30",
|
|
13560
13769
|
accentText: "text-network-arkade-fg"
|
|
@@ -13566,7 +13775,7 @@ var NETWORK_OPTIONS = {
|
|
|
13566
13775
|
account: "LIQUID",
|
|
13567
13776
|
label: "Liquid",
|
|
13568
13777
|
description: "Receive L-BTC or a Liquid asset (USDt) via a confidential Liquid address.",
|
|
13569
|
-
icon: /* @__PURE__ */ (0,
|
|
13778
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(LiquidNetworkIcon, { className: "h-[18px] w-[18px]" }),
|
|
13570
13779
|
accentBg: "bg-network-liquid/10",
|
|
13571
13780
|
accentBorder: "border-network-liquid/30",
|
|
13572
13781
|
accentText: "text-network-liquid-fg"
|
|
@@ -13581,20 +13790,20 @@ function DepositNetworkDefaultModal({
|
|
|
13581
13790
|
}) {
|
|
13582
13791
|
if (!open) return null;
|
|
13583
13792
|
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,
|
|
13793
|
+
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: [
|
|
13794
|
+
/* @__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" }) }),
|
|
13795
|
+
/* @__PURE__ */ (0, import_jsx_runtime134.jsxs)("div", { children: [
|
|
13796
|
+
/* @__PURE__ */ (0, import_jsx_runtime134.jsx)("p", { className: "text-body font-bold text-foreground", children: "Choose your default network" }),
|
|
13797
|
+
/* @__PURE__ */ (0, import_jsx_runtime134.jsxs)("p", { className: "mt-0.5 text-tiny text-foreground/55", children: [
|
|
13589
13798
|
"Pick how you would like to receive",
|
|
13590
13799
|
" ",
|
|
13591
|
-
/* @__PURE__ */ (0,
|
|
13800
|
+
/* @__PURE__ */ (0, import_jsx_runtime134.jsx)("span", { className: "font-semibold text-muted-foreground", children: assetTicker }),
|
|
13592
13801
|
" by default. You can always switch in the deposit screen."
|
|
13593
13802
|
] })
|
|
13594
13803
|
] }),
|
|
13595
|
-
/* @__PURE__ */ (0,
|
|
13804
|
+
/* @__PURE__ */ (0, import_jsx_runtime134.jsx)("div", { className: "space-y-2", children: options.map((option) => {
|
|
13596
13805
|
const isSuggested = option.account === suggestedAccount;
|
|
13597
|
-
return /* @__PURE__ */ (0,
|
|
13806
|
+
return /* @__PURE__ */ (0, import_jsx_runtime134.jsxs)(
|
|
13598
13807
|
"button",
|
|
13599
13808
|
{
|
|
13600
13809
|
type: "button",
|
|
@@ -13604,7 +13813,7 @@ function DepositNetworkDefaultModal({
|
|
|
13604
13813
|
isSuggested ? cn(option.accentBg, "shadow-glow-violet-soft ring-1 ring-inset ring-secondary/50") : "bg-muted/40 shadow-raised hover-gradient-violet"
|
|
13605
13814
|
),
|
|
13606
13815
|
children: [
|
|
13607
|
-
/* @__PURE__ */ (0,
|
|
13816
|
+
/* @__PURE__ */ (0, import_jsx_runtime134.jsx)(
|
|
13608
13817
|
"div",
|
|
13609
13818
|
{
|
|
13610
13819
|
className: cn(
|
|
@@ -13615,10 +13824,10 @@ function DepositNetworkDefaultModal({
|
|
|
13615
13824
|
children: option.icon
|
|
13616
13825
|
}
|
|
13617
13826
|
),
|
|
13618
|
-
/* @__PURE__ */ (0,
|
|
13619
|
-
/* @__PURE__ */ (0,
|
|
13620
|
-
/* @__PURE__ */ (0,
|
|
13621
|
-
isSuggested && /* @__PURE__ */ (0,
|
|
13827
|
+
/* @__PURE__ */ (0, import_jsx_runtime134.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
13828
|
+
/* @__PURE__ */ (0, import_jsx_runtime134.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
13829
|
+
/* @__PURE__ */ (0, import_jsx_runtime134.jsx)("span", { className: cn("text-caption font-bold", isSuggested ? option.accentText : "text-foreground"), children: option.label }),
|
|
13830
|
+
isSuggested && /* @__PURE__ */ (0, import_jsx_runtime134.jsx)(
|
|
13622
13831
|
"span",
|
|
13623
13832
|
{
|
|
13624
13833
|
className: cn(
|
|
@@ -13631,9 +13840,9 @@ function DepositNetworkDefaultModal({
|
|
|
13631
13840
|
}
|
|
13632
13841
|
)
|
|
13633
13842
|
] }),
|
|
13634
|
-
/* @__PURE__ */ (0,
|
|
13843
|
+
/* @__PURE__ */ (0, import_jsx_runtime134.jsx)("p", { className: "mt-0.5 text-xxs leading-snug text-foreground/55", children: option.description })
|
|
13635
13844
|
] }),
|
|
13636
|
-
/* @__PURE__ */ (0,
|
|
13845
|
+
/* @__PURE__ */ (0, import_jsx_runtime134.jsx)(
|
|
13637
13846
|
IconGlyph,
|
|
13638
13847
|
{
|
|
13639
13848
|
glyph: ChevronRight,
|
|
@@ -13653,7 +13862,7 @@ function DepositNetworkDefaultModal({
|
|
|
13653
13862
|
|
|
13654
13863
|
// src/web/components/btc-unified-receive.tsx
|
|
13655
13864
|
var import_react42 = require("react");
|
|
13656
|
-
var
|
|
13865
|
+
var import_jsx_runtime135 = require("react/jsx-runtime");
|
|
13657
13866
|
function formatSatsForRow(value) {
|
|
13658
13867
|
if (!value || value <= 0 || !Number.isFinite(value)) return null;
|
|
13659
13868
|
return `${value.toLocaleString("en-US")} sats`;
|
|
@@ -13687,14 +13896,14 @@ function BtcUnifiedReceive({
|
|
|
13687
13896
|
setInvoiceStatus(null);
|
|
13688
13897
|
setAccountReceiveResult(null);
|
|
13689
13898
|
};
|
|
13690
|
-
return /* @__PURE__ */ (0,
|
|
13691
|
-
/* @__PURE__ */ (0,
|
|
13692
|
-
/* @__PURE__ */ (0,
|
|
13693
|
-
/* @__PURE__ */ (0,
|
|
13694
|
-
isInvoicePaid && /* @__PURE__ */ (0,
|
|
13899
|
+
return /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "space-y-3 animate-in fade-in zoom-in-95 duration-300", children: [
|
|
13900
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "flex flex-col items-center gap-3", children: [
|
|
13901
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "relative flex flex-col items-center p-2", children: [
|
|
13902
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsx)(QrCode, { value: accountReceiveResult.qrValue, size: 200, tone: "onDark" }),
|
|
13903
|
+
isInvoicePaid && /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(PaidOverlay, {})
|
|
13695
13904
|
] }),
|
|
13696
|
-
/* @__PURE__ */ (0,
|
|
13697
|
-
/* @__PURE__ */ (0,
|
|
13905
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "flex items-center justify-center gap-2.5", children: [
|
|
13906
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsx)(
|
|
13698
13907
|
GlyphButton,
|
|
13699
13908
|
{
|
|
13700
13909
|
label: `Copy ${accountReceiveResult.qrLabel}`,
|
|
@@ -13704,8 +13913,8 @@ function BtcUnifiedReceive({
|
|
|
13704
13913
|
onClick: () => void copyToClipboard(accountReceiveResult.qrValue)
|
|
13705
13914
|
}
|
|
13706
13915
|
),
|
|
13707
|
-
showRegenerate && /* @__PURE__ */ (0,
|
|
13708
|
-
/* @__PURE__ */ (0,
|
|
13916
|
+
showRegenerate && /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(GlyphButton, { label: "New address", variant: "surface", size: "lg", icon: Refresh, onClick: handleNewAddress }),
|
|
13917
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsx)(
|
|
13709
13918
|
GlyphButton,
|
|
13710
13919
|
{
|
|
13711
13920
|
label: "Edit amount and description",
|
|
@@ -13717,7 +13926,7 @@ function BtcUnifiedReceive({
|
|
|
13717
13926
|
)
|
|
13718
13927
|
] })
|
|
13719
13928
|
] }),
|
|
13720
|
-
invoiceStatus && /* @__PURE__ */ (0,
|
|
13929
|
+
invoiceStatus && /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(
|
|
13721
13930
|
InvoiceStatusBanner,
|
|
13722
13931
|
{
|
|
13723
13932
|
isInvoicePending,
|
|
@@ -13726,11 +13935,11 @@ function BtcUnifiedReceive({
|
|
|
13726
13935
|
invoiceStatus
|
|
13727
13936
|
}
|
|
13728
13937
|
),
|
|
13729
|
-
/* @__PURE__ */ (0,
|
|
13730
|
-
/* @__PURE__ */ (0,
|
|
13938
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "space-y-1.5", children: [
|
|
13939
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsx)("p", { className: cn("text-muted-foreground", eyebrow), children: "Available Addresses" }),
|
|
13731
13940
|
accountReceiveResult.addresses.map((address) => {
|
|
13732
13941
|
const network = NETWORK_CONFIG[address.network];
|
|
13733
|
-
return /* @__PURE__ */ (0,
|
|
13942
|
+
return /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)(
|
|
13734
13943
|
"div",
|
|
13735
13944
|
{
|
|
13736
13945
|
className: cn(
|
|
@@ -13740,35 +13949,35 @@ function BtcUnifiedReceive({
|
|
|
13740
13949
|
style: { borderLeftWidth: 3, borderLeftColor: network.color },
|
|
13741
13950
|
onClick: () => void copyToClipboard(address.value),
|
|
13742
13951
|
children: [
|
|
13743
|
-
/* @__PURE__ */ (0,
|
|
13744
|
-
/* @__PURE__ */ (0,
|
|
13745
|
-
/* @__PURE__ */ (0,
|
|
13746
|
-
/* @__PURE__ */ (0,
|
|
13952
|
+
/* @__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 }),
|
|
13953
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
13954
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "flex items-center gap-1.5", children: [
|
|
13955
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsx)("p", { className: cn(eyebrow, network.text), children: address.label }),
|
|
13747
13956
|
(() => {
|
|
13748
13957
|
const amountLabel = formatSatsForRow(address.amountSats);
|
|
13749
|
-
return amountLabel ? /* @__PURE__ */ (0,
|
|
13958
|
+
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
13959
|
})()
|
|
13751
13960
|
] }),
|
|
13752
|
-
/* @__PURE__ */ (0,
|
|
13961
|
+
/* @__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
13962
|
] }),
|
|
13754
|
-
/* @__PURE__ */ (0,
|
|
13963
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsx)(CopyIcon, { copied: copied === address.value })
|
|
13755
13964
|
]
|
|
13756
13965
|
},
|
|
13757
13966
|
address.network
|
|
13758
13967
|
);
|
|
13759
13968
|
})
|
|
13760
13969
|
] }),
|
|
13761
|
-
/* @__PURE__ */ (0,
|
|
13970
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsx)(
|
|
13762
13971
|
BottomSheet,
|
|
13763
13972
|
{
|
|
13764
13973
|
open: showEdit,
|
|
13765
13974
|
title: "Edit request",
|
|
13766
|
-
icon: /* @__PURE__ */ (0,
|
|
13975
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime135.jsx)(IconGlyph, { glyph: Edit, size: "md" }),
|
|
13767
13976
|
onClose: () => setShowEdit(false),
|
|
13768
|
-
children: /* @__PURE__ */ (0,
|
|
13769
|
-
/* @__PURE__ */ (0,
|
|
13770
|
-
/* @__PURE__ */ (0,
|
|
13771
|
-
/* @__PURE__ */ (0,
|
|
13977
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "space-y-4", children: [
|
|
13978
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "flex flex-col gap-2", children: [
|
|
13979
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsx)(Label3, { htmlFor: amountId, children: "Amount (optional)" }),
|
|
13980
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsx)(
|
|
13772
13981
|
"input",
|
|
13773
13982
|
{
|
|
13774
13983
|
id: amountId,
|
|
@@ -13780,14 +13989,14 @@ function BtcUnifiedReceive({
|
|
|
13780
13989
|
inputMode: "decimal"
|
|
13781
13990
|
}
|
|
13782
13991
|
),
|
|
13783
|
-
amount && loading && /* @__PURE__ */ (0,
|
|
13784
|
-
/* @__PURE__ */ (0,
|
|
13992
|
+
amount && loading && /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("p", { className: "flex items-center gap-1 text-xxs text-warning-fg/70", children: [
|
|
13993
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsx)(IconGlyph, { glyph: ProgressActivity, className: "animate-spin text-icon-xxs" }),
|
|
13785
13994
|
"Updating invoice..."
|
|
13786
13995
|
] })
|
|
13787
13996
|
] }),
|
|
13788
|
-
onDescriptionChange && /* @__PURE__ */ (0,
|
|
13789
|
-
/* @__PURE__ */ (0,
|
|
13790
|
-
/* @__PURE__ */ (0,
|
|
13997
|
+
onDescriptionChange && /* @__PURE__ */ (0, import_jsx_runtime135.jsxs)("div", { className: "flex flex-col gap-2", children: [
|
|
13998
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsx)(Label3, { htmlFor: descriptionId, children: "Description (optional)" }),
|
|
13999
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsx)(
|
|
13791
14000
|
"input",
|
|
13792
14001
|
{
|
|
13793
14002
|
id: descriptionId,
|
|
@@ -13799,7 +14008,7 @@ function BtcUnifiedReceive({
|
|
|
13799
14008
|
}
|
|
13800
14009
|
)
|
|
13801
14010
|
] }),
|
|
13802
|
-
/* @__PURE__ */ (0,
|
|
14011
|
+
/* @__PURE__ */ (0, import_jsx_runtime135.jsx)(Button, { variant: "cta", className: "w-full", onClick: () => setShowEdit(false), children: "Done" })
|
|
13803
14012
|
] })
|
|
13804
14013
|
}
|
|
13805
14014
|
)
|
|
@@ -13808,7 +14017,7 @@ function BtcUnifiedReceive({
|
|
|
13808
14017
|
|
|
13809
14018
|
// src/web/components/deposit-generated-view.tsx
|
|
13810
14019
|
var import_react43 = require("react");
|
|
13811
|
-
var
|
|
14020
|
+
var import_jsx_runtime136 = require("react/jsx-runtime");
|
|
13812
14021
|
function parseAssetAmount(amountString, asset) {
|
|
13813
14022
|
const value = Number(amountString);
|
|
13814
14023
|
if (!Number.isFinite(value)) return 0;
|
|
@@ -13851,10 +14060,10 @@ function DepositGeneratedView({
|
|
|
13851
14060
|
}) {
|
|
13852
14061
|
const btcAmountId = (0, import_react43.useId)();
|
|
13853
14062
|
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,
|
|
14063
|
+
return /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "space-y-3 animate-in fade-in zoom-in-95 duration-300", children: [
|
|
14064
|
+
(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: [
|
|
14065
|
+
/* @__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)" }) }),
|
|
14066
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsx)(
|
|
13858
14067
|
"input",
|
|
13859
14068
|
{
|
|
13860
14069
|
id: btcAmountId,
|
|
@@ -13866,16 +14075,16 @@ function DepositGeneratedView({
|
|
|
13866
14075
|
inputMode: "decimal"
|
|
13867
14076
|
}
|
|
13868
14077
|
),
|
|
13869
|
-
amount && /* @__PURE__ */ (0,
|
|
13870
|
-
/* @__PURE__ */ (0,
|
|
14078
|
+
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: [
|
|
14079
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsx)(IconGlyph, { glyph: ProgressActivity, className: "animate-spin text-icon-xxs" }),
|
|
13871
14080
|
"Updating ",
|
|
13872
14081
|
network === "arkade" ? "URI" : "invoice",
|
|
13873
14082
|
"..."
|
|
13874
14083
|
] }) : network === "arkade" ? `Unified URI for ${amount} ${getUnitLabel()}` : `Invoice for ${amount} ${getUnitLabel()}` })
|
|
13875
14084
|
] }),
|
|
13876
|
-
network === "lightning" && !isBtc && /* @__PURE__ */ (0,
|
|
13877
|
-
/* @__PURE__ */ (0,
|
|
13878
|
-
/* @__PURE__ */ (0,
|
|
14085
|
+
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: [
|
|
14086
|
+
/* @__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)" }) }),
|
|
14087
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsx)(
|
|
13879
14088
|
"input",
|
|
13880
14089
|
{
|
|
13881
14090
|
id: assetAmountId,
|
|
@@ -13887,25 +14096,25 @@ function DepositGeneratedView({
|
|
|
13887
14096
|
inputMode: "decimal"
|
|
13888
14097
|
}
|
|
13889
14098
|
),
|
|
13890
|
-
amount && /* @__PURE__ */ (0,
|
|
13891
|
-
/* @__PURE__ */ (0,
|
|
14099
|
+
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: [
|
|
14100
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsx)(IconGlyph, { glyph: ProgressActivity, className: "animate-spin text-icon-xxs" }),
|
|
13892
14101
|
"Updating invoice..."
|
|
13893
14102
|
] }) : `Invoice for ${amount} ${getUnitLabel()}` }),
|
|
13894
|
-
amount && maxDepositAmount > 0 && parseAssetAmount(amount, selectedAsset) > maxDepositAmount && /* @__PURE__ */ (0,
|
|
14103
|
+
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
14104
|
"Exceeds max: ",
|
|
13896
14105
|
formatAssetAmount(maxDepositAmount, selectedAsset),
|
|
13897
14106
|
" ",
|
|
13898
14107
|
getUnitLabel()
|
|
13899
14108
|
] })
|
|
13900
14109
|
] }),
|
|
13901
|
-
/* @__PURE__ */ (0,
|
|
13902
|
-
/* @__PURE__ */ (0,
|
|
14110
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "flex flex-col items-center gap-3", children: [
|
|
14111
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsxs)(
|
|
13903
14112
|
"div",
|
|
13904
14113
|
{
|
|
13905
14114
|
className: "relative flex flex-col items-center rounded-2xl bg-white p-3.5 transition-all",
|
|
13906
14115
|
style: net.qrGlow,
|
|
13907
14116
|
children: [
|
|
13908
|
-
showQrNetworkBadge && network !== "spark" && network !== "arkade" && /* @__PURE__ */ (0,
|
|
14117
|
+
showQrNetworkBadge && network !== "spark" && network !== "arkade" && /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)(
|
|
13909
14118
|
"div",
|
|
13910
14119
|
{
|
|
13911
14120
|
className: cn(
|
|
@@ -13914,21 +14123,21 @@ function DepositGeneratedView({
|
|
|
13914
14123
|
),
|
|
13915
14124
|
children: [
|
|
13916
14125
|
net.icon,
|
|
13917
|
-
/* @__PURE__ */ (0,
|
|
14126
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsx)("span", { children: net.label })
|
|
13918
14127
|
]
|
|
13919
14128
|
}
|
|
13920
14129
|
),
|
|
13921
|
-
/* @__PURE__ */ (0,
|
|
13922
|
-
isInvoicePaid && /* @__PURE__ */ (0,
|
|
14130
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsx)(QrCode, { value: address, size: 188 }),
|
|
14131
|
+
isInvoicePaid && /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(PaidOverlay, {}),
|
|
13923
14132
|
loading && !isInvoicePaid && // Loading scrim — sits over the QR while a fresh address/invoice
|
|
13924
14133
|
// is being fetched (e.g. after the New Address button).
|
|
13925
|
-
/* @__PURE__ */ (0,
|
|
14134
|
+
/* @__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
14135
|
]
|
|
13927
14136
|
}
|
|
13928
14137
|
),
|
|
13929
14138
|
(() => {
|
|
13930
14139
|
const isAddressCopied = copied === address;
|
|
13931
|
-
return /* @__PURE__ */ (0,
|
|
14140
|
+
return /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)(
|
|
13932
14141
|
"button",
|
|
13933
14142
|
{
|
|
13934
14143
|
type: "button",
|
|
@@ -13942,14 +14151,14 @@ function DepositGeneratedView({
|
|
|
13942
14151
|
void copyToClipboard(address);
|
|
13943
14152
|
},
|
|
13944
14153
|
children: [
|
|
13945
|
-
/* @__PURE__ */ (0,
|
|
14154
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsx)(IconGlyph, { glyph: isAddressCopied ? Check : ContentCopy, size: "xs" }),
|
|
13946
14155
|
isAddressCopied ? "Copied" : network === "lightning" ? "Copy Invoice" : "Copy Address"
|
|
13947
14156
|
]
|
|
13948
14157
|
}
|
|
13949
14158
|
);
|
|
13950
14159
|
})()
|
|
13951
14160
|
] }),
|
|
13952
|
-
network === "lightning" && invoiceStatus && /* @__PURE__ */ (0,
|
|
14161
|
+
network === "lightning" && invoiceStatus && /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(
|
|
13953
14162
|
InvoiceStatusBanner,
|
|
13954
14163
|
{
|
|
13955
14164
|
isInvoicePending,
|
|
@@ -13958,7 +14167,7 @@ function DepositGeneratedView({
|
|
|
13958
14167
|
invoiceStatus
|
|
13959
14168
|
}
|
|
13960
14169
|
),
|
|
13961
|
-
/* @__PURE__ */ (0,
|
|
14170
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsxs)(
|
|
13962
14171
|
"div",
|
|
13963
14172
|
{
|
|
13964
14173
|
"data-testid": "deposit-generated-address",
|
|
@@ -13969,16 +14178,16 @@ function DepositGeneratedView({
|
|
|
13969
14178
|
),
|
|
13970
14179
|
onClick: () => void copyToClipboard(address),
|
|
13971
14180
|
children: [
|
|
13972
|
-
/* @__PURE__ */ (0,
|
|
13973
|
-
/* @__PURE__ */ (0,
|
|
13974
|
-
/* @__PURE__ */ (0,
|
|
13975
|
-
/* @__PURE__ */ (0,
|
|
14181
|
+
/* @__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 }),
|
|
14182
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
14183
|
+
/* @__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 }) }),
|
|
14184
|
+
/* @__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
14185
|
] }),
|
|
13977
|
-
/* @__PURE__ */ (0,
|
|
14186
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsx)(CopyIcon, { copied: copied === address })
|
|
13978
14187
|
]
|
|
13979
14188
|
}
|
|
13980
14189
|
),
|
|
13981
|
-
recipientId && /* @__PURE__ */ (0,
|
|
14190
|
+
recipientId && /* @__PURE__ */ (0, import_jsx_runtime136.jsxs)(
|
|
13982
14191
|
"div",
|
|
13983
14192
|
{
|
|
13984
14193
|
className: cn(
|
|
@@ -13987,16 +14196,16 @@ function DepositGeneratedView({
|
|
|
13987
14196
|
),
|
|
13988
14197
|
onClick: () => void copyToClipboard(recipientId),
|
|
13989
14198
|
children: [
|
|
13990
|
-
/* @__PURE__ */ (0,
|
|
13991
|
-
/* @__PURE__ */ (0,
|
|
13992
|
-
/* @__PURE__ */ (0,
|
|
13993
|
-
/* @__PURE__ */ (0,
|
|
14199
|
+
/* @__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" }) }),
|
|
14200
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
14201
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsx)("p", { className: cn("text-brand", eyebrow), children: "Recipient ID" }),
|
|
14202
|
+
/* @__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
14203
|
] }),
|
|
13995
|
-
/* @__PURE__ */ (0,
|
|
14204
|
+
/* @__PURE__ */ (0, import_jsx_runtime136.jsx)(CopyIcon, { copied: copied === recipientId })
|
|
13996
14205
|
]
|
|
13997
14206
|
}
|
|
13998
14207
|
),
|
|
13999
|
-
showRegenerate && /* @__PURE__ */ (0,
|
|
14208
|
+
showRegenerate && /* @__PURE__ */ (0, import_jsx_runtime136.jsx)("div", { className: "flex justify-center pt-1", children: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(
|
|
14000
14209
|
GlyphButton,
|
|
14001
14210
|
{
|
|
14002
14211
|
label: `New ${network === "lightning" ? "invoice" : "address"}`,
|
|
@@ -14012,7 +14221,7 @@ function DepositGeneratedView({
|
|
|
14012
14221
|
setAmount("");
|
|
14013
14222
|
setInvoiceStatus(null);
|
|
14014
14223
|
},
|
|
14015
|
-
icon: /* @__PURE__ */ (0,
|
|
14224
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime136.jsx)(IconGlyph, { glyph: Refresh, "aria-hidden": "true", className: cn(loading && "animate-spin motion-reduce:animate-none") })
|
|
14016
14225
|
}
|
|
14017
14226
|
) })
|
|
14018
14227
|
] });
|
|
@@ -14020,7 +14229,7 @@ function DepositGeneratedView({
|
|
|
14020
14229
|
|
|
14021
14230
|
// src/web/components/deposit-pre-generation.tsx
|
|
14022
14231
|
var import_react44 = require("react");
|
|
14023
|
-
var
|
|
14232
|
+
var import_jsx_runtime137 = require("react/jsx-runtime");
|
|
14024
14233
|
var ACCOUNT_TITLES = {
|
|
14025
14234
|
RGB: "RGB & Lightning",
|
|
14026
14235
|
SPARK: "Spark",
|
|
@@ -14068,58 +14277,58 @@ function DepositPreGeneration({
|
|
|
14068
14277
|
const amountId = (0, import_react44.useId)();
|
|
14069
14278
|
const method = METHOD_META2[currentMethod];
|
|
14070
14279
|
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,
|
|
14280
|
+
return /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "space-y-3", children: [
|
|
14281
|
+
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: [
|
|
14282
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: cn("text-muted-foreground", eyebrow), children: "Receive Summary" }),
|
|
14283
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "mt-2 grid grid-cols-1 gap-2 text-caption", children: [
|
|
14284
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [
|
|
14285
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "text-foreground/55", children: "Asset" }),
|
|
14286
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "font-bold text-foreground", children: selectedAsset?.ticker ?? (isBtc ? "BTC" : "Asset") })
|
|
14078
14287
|
] }),
|
|
14079
|
-
/* @__PURE__ */ (0,
|
|
14080
|
-
/* @__PURE__ */ (0,
|
|
14081
|
-
/* @__PURE__ */ (0,
|
|
14288
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [
|
|
14289
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "text-foreground/55", children: "Destination account" }),
|
|
14290
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "font-bold text-foreground", children: ACCOUNT_TITLES[selectedAccount] })
|
|
14082
14291
|
] }),
|
|
14083
|
-
/* @__PURE__ */ (0,
|
|
14084
|
-
/* @__PURE__ */ (0,
|
|
14085
|
-
/* @__PURE__ */ (0,
|
|
14292
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [
|
|
14293
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "text-foreground/55", children: "Transfer method" }),
|
|
14294
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "font-bold text-foreground", children: method.label })
|
|
14086
14295
|
] }),
|
|
14087
|
-
/* @__PURE__ */ (0,
|
|
14296
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: "text-tiny text-foreground/55", children: method.summary })
|
|
14088
14297
|
] })
|
|
14089
14298
|
] }),
|
|
14090
|
-
channelsLoading && selectedAccount === "RGB" && currentMethod === "lightning" && !isBtc && /* @__PURE__ */ (0,
|
|
14091
|
-
/* @__PURE__ */ (0,
|
|
14092
|
-
/* @__PURE__ */ (0,
|
|
14299
|
+
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: [
|
|
14300
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(IconGlyph, { glyph: ProgressActivity, className: "animate-spin text-icon-lg text-secondary-content" }),
|
|
14301
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "text-caption font-medium text-foreground/60", children: "Checking channel availability..." })
|
|
14093
14302
|
] }),
|
|
14094
|
-
showChannelWarning && /* @__PURE__ */ (0,
|
|
14095
|
-
/* @__PURE__ */ (0,
|
|
14096
|
-
/* @__PURE__ */ (0,
|
|
14303
|
+
showChannelWarning && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(AlertBanner, { variant: "warning", children: [
|
|
14304
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: "mb-0.5 text-caption font-bold text-warning-fg", children: "No Lightning Channels" }),
|
|
14305
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: "text-tiny text-warning-fg/70", children: "Only on-chain deposits are available." })
|
|
14097
14306
|
] }),
|
|
14098
|
-
showLiquidityWarning && /* @__PURE__ */ (0,
|
|
14099
|
-
/* @__PURE__ */ (0,
|
|
14100
|
-
/* @__PURE__ */ (0,
|
|
14307
|
+
showLiquidityWarning && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(AlertBanner, { variant: "warning", children: [
|
|
14308
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: "mb-0.5 text-caption font-bold text-warning-fg", children: "No Inbound Liquidity" }),
|
|
14309
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("p", { className: "text-tiny text-warning-fg/70", children: [
|
|
14101
14310
|
"No channels with inbound capacity for ",
|
|
14102
14311
|
selectedAsset?.ticker ?? "this asset",
|
|
14103
14312
|
"."
|
|
14104
14313
|
] })
|
|
14105
14314
|
] }),
|
|
14106
|
-
isAutoGenerate && loading && /* @__PURE__ */ (0,
|
|
14107
|
-
/* @__PURE__ */ (0,
|
|
14108
|
-
/* @__PURE__ */ (0,
|
|
14109
|
-
/* @__PURE__ */ (0,
|
|
14315
|
+
isAutoGenerate && loading && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex flex-col items-center gap-4 py-10", children: [
|
|
14316
|
+
/* @__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) }) }),
|
|
14317
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "space-y-1 text-center", children: [
|
|
14318
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("p", { className: "text-caption font-bold text-muted-foreground", children: [
|
|
14110
14319
|
"Generating ",
|
|
14111
14320
|
network === "lightning" ? "invoice" : "address",
|
|
14112
14321
|
"..."
|
|
14113
14322
|
] }),
|
|
14114
|
-
/* @__PURE__ */ (0,
|
|
14323
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("p", { className: "text-caption text-foreground/55", children: [
|
|
14115
14324
|
net.label,
|
|
14116
14325
|
" network"
|
|
14117
14326
|
] })
|
|
14118
14327
|
] })
|
|
14119
14328
|
] }),
|
|
14120
|
-
isRgbOnchain && isNewRgbAsset && setNewAssetId && /* @__PURE__ */ (0,
|
|
14121
|
-
/* @__PURE__ */ (0,
|
|
14122
|
-
/* @__PURE__ */ (0,
|
|
14329
|
+
isRgbOnchain && isNewRgbAsset && setNewAssetId && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex flex-col gap-2", children: [
|
|
14330
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(Label3, { htmlFor: assetIdInputId, children: "RGB Asset ID - Optional" }),
|
|
14331
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(
|
|
14123
14332
|
"input",
|
|
14124
14333
|
{
|
|
14125
14334
|
id: assetIdInputId,
|
|
@@ -14132,15 +14341,15 @@ function DepositPreGeneration({
|
|
|
14132
14341
|
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
14342
|
}
|
|
14134
14343
|
),
|
|
14135
|
-
/* @__PURE__ */ (0,
|
|
14344
|
+
/* @__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
14345
|
] }),
|
|
14137
|
-
isRgbOnchain && /* @__PURE__ */ (0,
|
|
14138
|
-
/* @__PURE__ */ (0,
|
|
14139
|
-
/* @__PURE__ */ (0,
|
|
14140
|
-
/* @__PURE__ */ (0,
|
|
14141
|
-
/* @__PURE__ */ (0,
|
|
14346
|
+
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: [
|
|
14347
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [
|
|
14348
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
14349
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("h4", { className: "text-caption font-bold text-foreground", children: usePrivacy ? "Blinded receive" : "Witness receive" }),
|
|
14350
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: "mt-0.5 text-xxs text-muted-foreground", children: usePrivacy ? "Private - recommended" : "Simpler - less private" })
|
|
14142
14351
|
] }),
|
|
14143
|
-
/* @__PURE__ */ (0,
|
|
14352
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(
|
|
14144
14353
|
"button",
|
|
14145
14354
|
{
|
|
14146
14355
|
type: "button",
|
|
@@ -14150,7 +14359,7 @@ function DepositPreGeneration({
|
|
|
14150
14359
|
usePrivacy ? "bg-primary bg-gradient-primary shadow-glow-primary-soft" : "bg-foreground/10"
|
|
14151
14360
|
),
|
|
14152
14361
|
onClick: () => setUsePrivacy(!usePrivacy),
|
|
14153
|
-
children: /* @__PURE__ */ (0,
|
|
14362
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime137.jsx)(
|
|
14154
14363
|
"span",
|
|
14155
14364
|
{
|
|
14156
14365
|
className: cn(
|
|
@@ -14162,8 +14371,8 @@ function DepositPreGeneration({
|
|
|
14162
14371
|
}
|
|
14163
14372
|
)
|
|
14164
14373
|
] }),
|
|
14165
|
-
/* @__PURE__ */ (0,
|
|
14166
|
-
usePrivacy && colorableUtxoCount !== void 0 && /* @__PURE__ */ (0,
|
|
14374
|
+
/* @__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." }),
|
|
14375
|
+
usePrivacy && colorableUtxoCount !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(
|
|
14167
14376
|
"div",
|
|
14168
14377
|
{
|
|
14169
14378
|
className: cn(
|
|
@@ -14171,26 +14380,26 @@ function DepositPreGeneration({
|
|
|
14171
14380
|
colorableUtxoCount > 0 ? "bg-success/10 text-success-fg/80" : "bg-warning/10 text-warning-fg/80"
|
|
14172
14381
|
),
|
|
14173
14382
|
children: [
|
|
14174
|
-
/* @__PURE__ */ (0,
|
|
14175
|
-
/* @__PURE__ */ (0,
|
|
14383
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "font-medium", children: "Available colorable UTXOs" }),
|
|
14384
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("span", { className: "font-bold tabular-nums", children: colorableUtxoCount })
|
|
14176
14385
|
]
|
|
14177
14386
|
}
|
|
14178
14387
|
),
|
|
14179
|
-
usePrivacy && colorableUtxoCount === 0 && /* @__PURE__ */ (0,
|
|
14388
|
+
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
14389
|
] }),
|
|
14181
|
-
network === "onchain" && !isBtc && /* @__PURE__ */ (0,
|
|
14182
|
-
/* @__PURE__ */ (0,
|
|
14183
|
-
/* @__PURE__ */ (0,
|
|
14390
|
+
network === "onchain" && !isBtc && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex flex-col gap-2", children: [
|
|
14391
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("div", { className: "flex items-center justify-between", children: [
|
|
14392
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(Label3, { htmlFor: amountId, children: [
|
|
14184
14393
|
"Amount (",
|
|
14185
14394
|
getUnitLabel(),
|
|
14186
14395
|
") - Optional"
|
|
14187
14396
|
] }),
|
|
14188
|
-
selectedAsset && /* @__PURE__ */ (0,
|
|
14397
|
+
selectedAsset && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("span", { className: "text-xxs text-foreground/55", children: [
|
|
14189
14398
|
selectedAsset.precision ?? 0,
|
|
14190
14399
|
" decimals"
|
|
14191
14400
|
] })
|
|
14192
14401
|
] }),
|
|
14193
|
-
/* @__PURE__ */ (0,
|
|
14402
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(
|
|
14194
14403
|
"input",
|
|
14195
14404
|
{
|
|
14196
14405
|
id: amountId,
|
|
@@ -14203,18 +14412,18 @@ function DepositPreGeneration({
|
|
|
14203
14412
|
}
|
|
14204
14413
|
)
|
|
14205
14414
|
] }),
|
|
14206
|
-
needsColorableUtxos && /* @__PURE__ */ (0,
|
|
14207
|
-
/* @__PURE__ */ (0,
|
|
14208
|
-
/* @__PURE__ */ (0,
|
|
14415
|
+
needsColorableUtxos && /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)(AlertBanner, { variant: "warning", children: [
|
|
14416
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)("p", { className: "mb-0.5 text-caption font-bold text-warning-fg", children: "Colorable UTXOs Required" }),
|
|
14417
|
+
/* @__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
14418
|
] }),
|
|
14210
|
-
!isAutoGenerate && ((needsColorableUtxos || isRgbOnchain && usePrivacy && colorableUtxoCount === 0) && onOpenCreateUtxos ? /* @__PURE__ */ (0,
|
|
14211
|
-
/* @__PURE__ */ (0,
|
|
14419
|
+
!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: [
|
|
14420
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(IconGlyph, { glyph: AddCircle, className: "text-icon-md" }),
|
|
14212
14421
|
"Create Colorable UTXOs"
|
|
14213
|
-
] }) }) : /* @__PURE__ */ (0,
|
|
14214
|
-
/* @__PURE__ */ (0,
|
|
14422
|
+
] }) }) : /* @__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: [
|
|
14423
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(IconGlyph, { glyph: ProgressActivity, className: "animate-spin text-icon-md" }),
|
|
14215
14424
|
"Generating..."
|
|
14216
|
-
] }) : /* @__PURE__ */ (0,
|
|
14217
|
-
/* @__PURE__ */ (0,
|
|
14425
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime137.jsxs)("span", { className: "flex items-center justify-center gap-2", children: [
|
|
14426
|
+
/* @__PURE__ */ (0, import_jsx_runtime137.jsx)(IconGlyph, { glyph: QrCode_2, className: "text-icon-md" }),
|
|
14218
14427
|
"Generate Address"
|
|
14219
14428
|
] }) }))
|
|
14220
14429
|
] });
|
|
@@ -14222,7 +14431,7 @@ function DepositPreGeneration({
|
|
|
14222
14431
|
|
|
14223
14432
|
// src/web/components/deposit-asset-selection.tsx
|
|
14224
14433
|
var import_react45 = require("react");
|
|
14225
|
-
var
|
|
14434
|
+
var import_jsx_runtime138 = require("react/jsx-runtime");
|
|
14226
14435
|
var ADD_ASSET_SUBTITLE = {
|
|
14227
14436
|
RGB: "RGB asset on Bitcoin",
|
|
14228
14437
|
SPARK: "Spark-native asset",
|
|
@@ -14311,9 +14520,9 @@ function DepositAssetSelection({
|
|
|
14311
14520
|
titleHoverClass: "group-hover:text-network-liquid-fg"
|
|
14312
14521
|
}
|
|
14313
14522
|
].filter((option) => option.enabled);
|
|
14314
|
-
return /* @__PURE__ */ (0,
|
|
14315
|
-
/* @__PURE__ */ (0,
|
|
14316
|
-
/* @__PURE__ */ (0,
|
|
14523
|
+
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: [
|
|
14524
|
+
/* @__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") }) }),
|
|
14525
|
+
/* @__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
14526
|
DotPagination,
|
|
14318
14527
|
{
|
|
14319
14528
|
count: 2,
|
|
@@ -14321,8 +14530,8 @@ function DepositAssetSelection({
|
|
|
14321
14530
|
ariaLabel: "Deposit step 1 of 2: select asset"
|
|
14322
14531
|
}
|
|
14323
14532
|
) }),
|
|
14324
|
-
/* @__PURE__ */ (0,
|
|
14325
|
-
/* @__PURE__ */ (0,
|
|
14533
|
+
/* @__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: [
|
|
14534
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)(
|
|
14326
14535
|
IconGlyph,
|
|
14327
14536
|
{
|
|
14328
14537
|
glyph: Search,
|
|
@@ -14330,7 +14539,7 @@ function DepositAssetSelection({
|
|
|
14330
14539
|
className: "absolute left-3 top-1/2 -translate-y-1/2 text-secondary-content"
|
|
14331
14540
|
}
|
|
14332
14541
|
),
|
|
14333
|
-
/* @__PURE__ */ (0,
|
|
14542
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)(
|
|
14334
14543
|
"input",
|
|
14335
14544
|
{
|
|
14336
14545
|
autoFocus: true,
|
|
@@ -14343,8 +14552,8 @@ function DepositAssetSelection({
|
|
|
14343
14552
|
}
|
|
14344
14553
|
)
|
|
14345
14554
|
] }) }),
|
|
14346
|
-
/* @__PURE__ */ (0,
|
|
14347
|
-
btcAsset && /* @__PURE__ */ (0,
|
|
14555
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsxs)(ScrollArea, { className: "min-h-0 flex-1", viewportClassName: "space-y-1.5 px-5 pb-3", children: [
|
|
14556
|
+
btcAsset && /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)(
|
|
14348
14557
|
"button",
|
|
14349
14558
|
{
|
|
14350
14559
|
type: "button",
|
|
@@ -14352,28 +14561,28 @@ function DepositAssetSelection({
|
|
|
14352
14561
|
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
14562
|
onClick: () => onSelectAsset(btcAsset),
|
|
14354
14563
|
children: [
|
|
14355
|
-
/* @__PURE__ */ (0,
|
|
14356
|
-
/* @__PURE__ */ (0,
|
|
14357
|
-
/* @__PURE__ */ (0,
|
|
14358
|
-
/* @__PURE__ */ (0,
|
|
14564
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)(AssetIcon, { ticker: "BTC", size: 40, className: "flex-shrink-0" }),
|
|
14565
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "min-w-0 flex-1 text-left", children: [
|
|
14566
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "font-bold tracking-wide text-foreground transition-colors group-hover:text-secondary-content", children: "Bitcoin" }),
|
|
14567
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "mt-0.5 text-caption text-foreground/55", children: "Choose destination account next" })
|
|
14359
14568
|
] }),
|
|
14360
|
-
/* @__PURE__ */ (0,
|
|
14361
|
-
/* @__PURE__ */ (0,
|
|
14362
|
-
/* @__PURE__ */ (0,
|
|
14363
|
-
isSparkConnected && /* @__PURE__ */ (0,
|
|
14364
|
-
isArkadeConnected && /* @__PURE__ */ (0,
|
|
14365
|
-
isLiquidConnected && /* @__PURE__ */ (0,
|
|
14569
|
+
/* @__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: [
|
|
14570
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)(NetworkBadge, { network: "L1", size: "sm" }),
|
|
14571
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)(NetworkBadge, { network: "LN", size: "sm" }),
|
|
14572
|
+
isSparkConnected && /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(NetworkBadge, { network: "Spark", size: "sm" }),
|
|
14573
|
+
isArkadeConnected && /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(NetworkBadge, { network: "Arkade", size: "sm" }),
|
|
14574
|
+
isLiquidConnected && /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(NetworkBadge, { network: "Liquid", size: "sm" })
|
|
14366
14575
|
] }),
|
|
14367
|
-
/* @__PURE__ */ (0,
|
|
14576
|
+
/* @__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
14577
|
]
|
|
14369
14578
|
}
|
|
14370
14579
|
),
|
|
14371
|
-
noResults ? /* @__PURE__ */ (0,
|
|
14580
|
+
noResults ? /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "py-8 text-center text-caption text-foreground/55", children: [
|
|
14372
14581
|
'No assets match "',
|
|
14373
14582
|
searchQuery,
|
|
14374
14583
|
'"'
|
|
14375
|
-
] }) : ownedAssetsCount > 0 ? /* @__PURE__ */ (0,
|
|
14376
|
-
/* @__PURE__ */ (0,
|
|
14584
|
+
] }) : ownedAssetsCount > 0 ? /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "space-y-1.5 pt-1", children: [
|
|
14585
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsxs)(
|
|
14377
14586
|
"button",
|
|
14378
14587
|
{
|
|
14379
14588
|
type: "button",
|
|
@@ -14386,17 +14595,17 @@ function DepositAssetSelection({
|
|
|
14386
14595
|
isSearching && "cursor-default"
|
|
14387
14596
|
),
|
|
14388
14597
|
children: [
|
|
14389
|
-
/* @__PURE__ */ (0,
|
|
14390
|
-
/* @__PURE__ */ (0,
|
|
14391
|
-
/* @__PURE__ */ (0,
|
|
14392
|
-
!isSearching && /* @__PURE__ */ (0,
|
|
14598
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)("span", { className: cn("text-muted-foreground", eyebrow), children: "Your assets" }),
|
|
14599
|
+
/* @__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 }),
|
|
14600
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "flex-1" }),
|
|
14601
|
+
!isSearching && /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(IconGlyph, { glyph: showOwnedAssets ? ExpandLess : ExpandMore, size: "md", className: "text-secondary-content" })
|
|
14393
14602
|
]
|
|
14394
14603
|
}
|
|
14395
14604
|
),
|
|
14396
|
-
showOwnedAssets && /* @__PURE__ */ (0,
|
|
14605
|
+
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
14606
|
const protocolBadge = asset.accountId ? PROTOCOL_BADGE[asset.accountId] : null;
|
|
14398
14607
|
const balance = asset.balance ?? 0;
|
|
14399
|
-
return /* @__PURE__ */ (0,
|
|
14608
|
+
return /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)(
|
|
14400
14609
|
"button",
|
|
14401
14610
|
{
|
|
14402
14611
|
type: "button",
|
|
@@ -14404,11 +14613,11 @@ function DepositAssetSelection({
|
|
|
14404
14613
|
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
14614
|
onClick: () => onSelectAsset(asset),
|
|
14406
14615
|
children: [
|
|
14407
|
-
/* @__PURE__ */ (0,
|
|
14408
|
-
/* @__PURE__ */ (0,
|
|
14409
|
-
/* @__PURE__ */ (0,
|
|
14410
|
-
/* @__PURE__ */ (0,
|
|
14411
|
-
protocolBadge && /* @__PURE__ */ (0,
|
|
14616
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)(AssetIcon, { ticker: asset.ticker, size: 40, className: "flex-shrink-0" }),
|
|
14617
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "min-w-0 flex-1 text-left", children: [
|
|
14618
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "flex min-w-0 items-center gap-1.5", children: [
|
|
14619
|
+
/* @__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 }),
|
|
14620
|
+
protocolBadge && /* @__PURE__ */ (0, import_jsx_runtime138.jsx)(
|
|
14412
14621
|
"span",
|
|
14413
14622
|
{
|
|
14414
14623
|
className: cn(
|
|
@@ -14420,36 +14629,36 @@ function DepositAssetSelection({
|
|
|
14420
14629
|
}
|
|
14421
14630
|
)
|
|
14422
14631
|
] }),
|
|
14423
|
-
/* @__PURE__ */ (0,
|
|
14632
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "mt-0.5 truncate text-caption text-foreground/55", children: asset.name ?? "Asset" })
|
|
14424
14633
|
] }),
|
|
14425
|
-
balance > 0 && /* @__PURE__ */ (0,
|
|
14426
|
-
/* @__PURE__ */ (0,
|
|
14427
|
-
/* @__PURE__ */ (0,
|
|
14634
|
+
balance > 0 && /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "flex-shrink-0 text-right", children: [
|
|
14635
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "text-caption font-bold tabular-nums text-foreground", children: formatAssetBalance(asset) }),
|
|
14636
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: cn("mt-0.5 text-foreground/55", eyebrow), children: asset.ticker })
|
|
14428
14637
|
] }),
|
|
14429
|
-
/* @__PURE__ */ (0,
|
|
14638
|
+
/* @__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
14639
|
]
|
|
14431
14640
|
},
|
|
14432
14641
|
asset.asset_id
|
|
14433
14642
|
);
|
|
14434
14643
|
}) })
|
|
14435
14644
|
] }) : null,
|
|
14436
|
-
!searchQuery && /* @__PURE__ */ (0,
|
|
14645
|
+
!searchQuery && /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "pb-1 pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)(
|
|
14437
14646
|
"button",
|
|
14438
14647
|
{
|
|
14439
14648
|
type: "button",
|
|
14440
14649
|
onClick: () => setCurrentView("bridge"),
|
|
14441
14650
|
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
14651
|
children: [
|
|
14443
|
-
/* @__PURE__ */ (0,
|
|
14444
|
-
/* @__PURE__ */ (0,
|
|
14445
|
-
/* @__PURE__ */ (0,
|
|
14446
|
-
/* @__PURE__ */ (0,
|
|
14652
|
+
/* @__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" }) }),
|
|
14653
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "flex-1 text-left", children: [
|
|
14654
|
+
/* @__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" }),
|
|
14655
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)("p", { className: "text-xxs leading-tight text-foreground/55", children: "USDC, USDT, ETH, SOL via Flashnet" })
|
|
14447
14656
|
] }),
|
|
14448
|
-
/* @__PURE__ */ (0,
|
|
14657
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)(IconGlyph, { glyph: ArrowForward, className: "text-icon-lg text-foreground/55 transition-colors group-hover:text-secondary-content" })
|
|
14449
14658
|
]
|
|
14450
14659
|
}
|
|
14451
14660
|
) }),
|
|
14452
|
-
!searchQuery && newAssetOptions.length > 0 && /* @__PURE__ */ (0,
|
|
14661
|
+
!searchQuery && newAssetOptions.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "pb-1 pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)(
|
|
14453
14662
|
"button",
|
|
14454
14663
|
{
|
|
14455
14664
|
type: "button",
|
|
@@ -14457,27 +14666,27 @@ function DepositAssetSelection({
|
|
|
14457
14666
|
onClick: () => setShowAddAssetModal(true),
|
|
14458
14667
|
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
14668
|
children: [
|
|
14460
|
-
/* @__PURE__ */ (0,
|
|
14461
|
-
/* @__PURE__ */ (0,
|
|
14462
|
-
/* @__PURE__ */ (0,
|
|
14463
|
-
/* @__PURE__ */ (0,
|
|
14669
|
+
/* @__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" }) }),
|
|
14670
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "flex-1 text-left", children: [
|
|
14671
|
+
/* @__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" }),
|
|
14672
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("p", { className: "text-xxs leading-tight text-foreground/55", children: [
|
|
14464
14673
|
"Receive a new ",
|
|
14465
14674
|
newAssetOptions.map((o) => o.ticker).join(", "),
|
|
14466
14675
|
" asset"
|
|
14467
14676
|
] })
|
|
14468
14677
|
] }),
|
|
14469
|
-
/* @__PURE__ */ (0,
|
|
14678
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)(IconGlyph, { glyph: ArrowForward, className: "text-icon-lg text-foreground/55 transition-colors group-hover:text-secondary-content" })
|
|
14470
14679
|
]
|
|
14471
14680
|
}
|
|
14472
14681
|
) })
|
|
14473
14682
|
] }),
|
|
14474
|
-
/* @__PURE__ */ (0,
|
|
14683
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)(
|
|
14475
14684
|
BottomSheet,
|
|
14476
14685
|
{
|
|
14477
14686
|
open: showAddAssetModal,
|
|
14478
14687
|
title: "Add an asset",
|
|
14479
14688
|
onClose: () => setShowAddAssetModal(false),
|
|
14480
|
-
children: /* @__PURE__ */ (0,
|
|
14689
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "space-y-2", children: newAssetOptions.map((option) => /* @__PURE__ */ (0, import_jsx_runtime138.jsxs)(
|
|
14481
14690
|
"button",
|
|
14482
14691
|
{
|
|
14483
14692
|
type: "button",
|
|
@@ -14491,12 +14700,12 @@ function DepositAssetSelection({
|
|
|
14491
14700
|
handleAddNewAsset(option.account);
|
|
14492
14701
|
},
|
|
14493
14702
|
children: [
|
|
14494
|
-
option.account === "LIQUID" ? /* @__PURE__ */ (0,
|
|
14495
|
-
/* @__PURE__ */ (0,
|
|
14496
|
-
/* @__PURE__ */ (0,
|
|
14497
|
-
/* @__PURE__ */ (0,
|
|
14703
|
+
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" }),
|
|
14704
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
14705
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: cn("text-body font-bold tracking-wide text-foreground", option.titleHoverClass), children: option.title }),
|
|
14706
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)("div", { className: "mt-0.5 text-xxs text-foreground/55", children: ADD_ASSET_SUBTITLE[option.account] })
|
|
14498
14707
|
] }),
|
|
14499
|
-
/* @__PURE__ */ (0,
|
|
14708
|
+
/* @__PURE__ */ (0, import_jsx_runtime138.jsx)(IconGlyph, { glyph: Add, size: "sm", className: "text-foreground/55 transition-colors group-hover:text-foreground/60" })
|
|
14500
14709
|
]
|
|
14501
14710
|
},
|
|
14502
14711
|
option.account
|
|
@@ -14507,7 +14716,7 @@ function DepositAssetSelection({
|
|
|
14507
14716
|
}
|
|
14508
14717
|
|
|
14509
14718
|
// src/web/components/deposit-invoice-generation.tsx
|
|
14510
|
-
var
|
|
14719
|
+
var import_jsx_runtime139 = require("react/jsx-runtime");
|
|
14511
14720
|
var ACCOUNT_TITLES2 = {
|
|
14512
14721
|
RGB: "RGB & Lightning",
|
|
14513
14722
|
SPARK: "Spark",
|
|
@@ -14666,7 +14875,7 @@ function DepositInvoiceGeneration({
|
|
|
14666
14875
|
if (nextMethod) applyMethodSelection(account, nextMethod);
|
|
14667
14876
|
};
|
|
14668
14877
|
if (depositDetected) {
|
|
14669
|
-
return /* @__PURE__ */ (0,
|
|
14878
|
+
return /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(
|
|
14670
14879
|
DepositSuccessScreen,
|
|
14671
14880
|
{
|
|
14672
14881
|
handleDone,
|
|
@@ -14683,15 +14892,15 @@ function DepositInvoiceGeneration({
|
|
|
14683
14892
|
const showChannelWarning = selectedAccount === "RGB" && network === "lightning" && !channelsLoading && channels.length === 0 && !isSparkConnected;
|
|
14684
14893
|
const showLiquidityWarning = !isSparkLightning && network === "lightning" && maxDepositAmount === 0 && !channelsLoading && !isBtc;
|
|
14685
14894
|
const isNewRgbAsset = isNewAsset && assetFamily === "RGB";
|
|
14686
|
-
return /* @__PURE__ */ (0,
|
|
14687
|
-
/* @__PURE__ */ (0,
|
|
14895
|
+
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: [
|
|
14896
|
+
/* @__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
14897
|
(() => {
|
|
14689
14898
|
const hideDestinationRail = isNewAsset && (network === "spark" || network === "arkade");
|
|
14690
14899
|
if (hideDestinationRail) return null;
|
|
14691
|
-
return /* @__PURE__ */ (0,
|
|
14692
|
-
/* @__PURE__ */ (0,
|
|
14693
|
-
/* @__PURE__ */ (0,
|
|
14694
|
-
/* @__PURE__ */ (0,
|
|
14900
|
+
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: [
|
|
14901
|
+
/* @__PURE__ */ (0, import_jsx_runtime139.jsxs)("div", { children: [
|
|
14902
|
+
/* @__PURE__ */ (0, import_jsx_runtime139.jsx)("p", { className: cn("text-muted-foreground", eyebrow), children: "Destination Account" }),
|
|
14903
|
+
/* @__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
14904
|
AccountChoiceChip,
|
|
14696
14905
|
{
|
|
14697
14906
|
account,
|
|
@@ -14716,9 +14925,9 @@ function DepositInvoiceGeneration({
|
|
|
14716
14925
|
account
|
|
14717
14926
|
)) })
|
|
14718
14927
|
] }),
|
|
14719
|
-
!isBtc && !(isNewAsset && (network === "spark" || network === "arkade")) && /* @__PURE__ */ (0,
|
|
14720
|
-
/* @__PURE__ */ (0,
|
|
14721
|
-
/* @__PURE__ */ (0,
|
|
14928
|
+
!isBtc && !(isNewAsset && (network === "spark" || network === "arkade")) && /* @__PURE__ */ (0, import_jsx_runtime139.jsxs)("div", { children: [
|
|
14929
|
+
/* @__PURE__ */ (0, import_jsx_runtime139.jsx)("p", { className: cn("text-muted-foreground", eyebrow), children: "Transfer Method" }),
|
|
14930
|
+
/* @__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
14931
|
MethodChoiceChip,
|
|
14723
14932
|
{
|
|
14724
14933
|
method,
|
|
@@ -14732,7 +14941,7 @@ function DepositInvoiceGeneration({
|
|
|
14732
14941
|
] })
|
|
14733
14942
|
] }) });
|
|
14734
14943
|
})(),
|
|
14735
|
-
/* @__PURE__ */ (0,
|
|
14944
|
+
/* @__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
14945
|
BtcUnifiedReceive,
|
|
14737
14946
|
{
|
|
14738
14947
|
btcSelectedAccount,
|
|
@@ -14752,15 +14961,15 @@ function DepositInvoiceGeneration({
|
|
|
14752
14961
|
setAccountReceiveResult,
|
|
14753
14962
|
handleDone
|
|
14754
14963
|
}
|
|
14755
|
-
) : isBtc && !accountReceiveResult && loading ? /* @__PURE__ */ (0,
|
|
14756
|
-
/* @__PURE__ */ (0,
|
|
14964
|
+
) : isBtc && !accountReceiveResult && loading ? /* @__PURE__ */ (0, import_jsx_runtime139.jsxs)("div", { className: "flex flex-col items-center gap-4 py-10", children: [
|
|
14965
|
+
/* @__PURE__ */ (0, import_jsx_runtime139.jsx)(
|
|
14757
14966
|
"div",
|
|
14758
14967
|
{
|
|
14759
14968
|
className: cn(
|
|
14760
14969
|
"flex size-16 items-center justify-center rounded-2xl shadow-raised",
|
|
14761
14970
|
NETWORK_CONFIG[btcSelectedAccount === "SPARK" ? "spark" : btcSelectedAccount === "ARKADE" ? "arkade" : "onchain"].bg
|
|
14762
14971
|
),
|
|
14763
|
-
children: /* @__PURE__ */ (0,
|
|
14972
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(
|
|
14764
14973
|
IconGlyph,
|
|
14765
14974
|
{
|
|
14766
14975
|
glyph: ProgressActivity,
|
|
@@ -14772,11 +14981,11 @@ function DepositInvoiceGeneration({
|
|
|
14772
14981
|
)
|
|
14773
14982
|
}
|
|
14774
14983
|
),
|
|
14775
|
-
/* @__PURE__ */ (0,
|
|
14776
|
-
/* @__PURE__ */ (0,
|
|
14777
|
-
/* @__PURE__ */ (0,
|
|
14984
|
+
/* @__PURE__ */ (0, import_jsx_runtime139.jsxs)("div", { className: "space-y-1 text-center", children: [
|
|
14985
|
+
/* @__PURE__ */ (0, import_jsx_runtime139.jsx)("p", { className: "text-caption font-bold text-muted-foreground", children: "Generating addresses..." }),
|
|
14986
|
+
/* @__PURE__ */ (0, import_jsx_runtime139.jsx)("p", { className: "text-caption text-foreground/55", children: ACCOUNT_TITLES2[btcSelectedAccount] })
|
|
14778
14987
|
] })
|
|
14779
|
-
] }) : !address ? /* @__PURE__ */ (0,
|
|
14988
|
+
] }) : !address ? /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(
|
|
14780
14989
|
DepositPreGeneration,
|
|
14781
14990
|
{
|
|
14782
14991
|
selectedAsset,
|
|
@@ -14800,7 +15009,7 @@ function DepositInvoiceGeneration({
|
|
|
14800
15009
|
onOpenCreateUtxos,
|
|
14801
15010
|
showReceiveSummary: !isNewRgbAsset
|
|
14802
15011
|
}
|
|
14803
|
-
) : /* @__PURE__ */ (0,
|
|
15012
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime139.jsx)(
|
|
14804
15013
|
DepositGeneratedView,
|
|
14805
15014
|
{
|
|
14806
15015
|
network,
|
|
@@ -14896,6 +15105,7 @@ function DepositInvoiceGeneration({
|
|
|
14896
15105
|
CopyIcon,
|
|
14897
15106
|
Copyable,
|
|
14898
15107
|
DEFAULT_AMOUNT_LOCALE,
|
|
15108
|
+
DatePicker,
|
|
14899
15109
|
DateRangeFilter,
|
|
14900
15110
|
DepositAssetSelection,
|
|
14901
15111
|
DepositGeneratedView,
|