bandkit 1.0.5 → 1.0.6
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/README.md +14 -9
- package/dist/AnimatedNumber.d.ts +10 -0
- package/dist/AnimatedNumber.d.ts.map +1 -0
- package/dist/AnimatedNumber.js +35 -0
- package/dist/AnimatedNumber.js.map +1 -0
- package/dist/BotDecisionPanel.d.ts.map +1 -1
- package/dist/BotDecisionPanel.js +15 -3
- package/dist/BotDecisionPanel.js.map +1 -1
- package/dist/ContractEventFeed.d.ts.map +1 -1
- package/dist/ContractEventFeed.js +14 -1
- package/dist/ContractEventFeed.js.map +1 -1
- package/dist/GasBadge.d.ts.map +1 -1
- package/dist/GasBadge.js +10 -2
- package/dist/GasBadge.js.map +1 -1
- package/dist/OrderBookWidget.d.ts.map +1 -1
- package/dist/OrderBookWidget.js +27 -3
- package/dist/OrderBookWidget.js.map +1 -1
- package/dist/RegimeBadge.d.ts.map +1 -1
- package/dist/RegimeBadge.js +3 -1
- package/dist/RegimeBadge.js.map +1 -1
- package/dist/Skeleton.d.ts +15 -0
- package/dist/Skeleton.d.ts.map +1 -0
- package/dist/Skeleton.js +26 -0
- package/dist/Skeleton.js.map +1 -0
- package/dist/StrategyValueSparkline.d.ts +9 -0
- package/dist/StrategyValueSparkline.d.ts.map +1 -0
- package/dist/StrategyValueSparkline.js +99 -0
- package/dist/StrategyValueSparkline.js.map +1 -0
- package/dist/TradeTape.d.ts.map +1 -1
- package/dist/TradeTape.js +20 -7
- package/dist/TradeTape.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/useStrategyValueHistory.d.ts +24 -0
- package/dist/useStrategyValueHistory.d.ts.map +1 -0
- package/dist/useStrategyValueHistory.js +112 -0
- package/dist/useStrategyValueHistory.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -47,14 +47,17 @@ max-width 1100px, gap 20px, system font stack:
|
|
|
47
47
|
│ (height 420px, dark theme) │ dark theme
|
|
48
48
|
│ │
|
|
49
49
|
├──────────────────────┬──────────────────────────────┤
|
|
50
|
+
│ │ <StrategyValueSparkline │
|
|
51
|
+
│ <BandPanel /> │ strategyContractAddress= │
|
|
52
|
+
│ (the bot UI: it │ {deployedAddress} /> │
|
|
53
|
+
│ has its own deploy,├──────────────────────────────┤
|
|
54
|
+
│ fund, start, stop, │ <BotDecisionPanel /> │ ← two-column split
|
|
55
|
+
│ withdraw buttons. │ │ on >=900px wide,
|
|
56
|
+
│ Default title is ├──────────────────────────────┤ stacked below
|
|
57
|
+
│ "Get started") │ <OrderBookWidget /> │
|
|
50
58
|
│ │ │
|
|
51
|
-
│
|
|
52
|
-
│
|
|
53
|
-
│ has its own deploy,├──────────────────────────────┤ stacked below
|
|
54
|
-
│ fund, start, stop, │ <OrderBookWidget /> │
|
|
55
|
-
│ withdraw buttons. │ │
|
|
56
|
-
│ Default title is ├──────────────────────────────┤
|
|
57
|
-
│ "Get started") │ <TradeTape /> │
|
|
59
|
+
│ ├──────────────────────────────┤
|
|
60
|
+
│ │ <TradeTape /> │
|
|
58
61
|
│ │ │
|
|
59
62
|
│ ├──────────────────────────────┤
|
|
60
63
|
│ │ <ContractEventFeed │
|
|
@@ -64,7 +67,8 @@ max-width 1100px, gap 20px, system font stack:
|
|
|
64
67
|
|
|
65
68
|
Components to import from bandkit:
|
|
66
69
|
- BandPanel (the main staged UI)
|
|
67
|
-
-
|
|
70
|
+
- StrategyValueSparkline (capital under management over time, with sparkline)
|
|
71
|
+
- BotDecisionPanel (live BUY/SELL/WAIT decision preview)
|
|
68
72
|
- OrderBookWidget (live Binance ETH/USDT depth)
|
|
69
73
|
- TradeTape (live recent trades)
|
|
70
74
|
- ContractEventFeed (on-chain events from the deployed strategy)
|
|
@@ -128,6 +132,7 @@ export function App() {
|
|
|
128
132
|
<div style={{ display: "grid", gap: 20, gridTemplateColumns: "minmax(0, 1fr) 360px" }}>
|
|
129
133
|
<BandPanel onStrategyContractDeployed={setStrategy} />
|
|
130
134
|
<div style={{ display: "grid", gap: 20 }}>
|
|
135
|
+
<StrategyValueSparkline strategyContractAddress={strategy} />
|
|
131
136
|
<OrderBookWidget />
|
|
132
137
|
<TradeTape />
|
|
133
138
|
<ContractEventFeed strategyContractAddress={strategy} />
|
|
@@ -229,7 +234,7 @@ type RegimeBadgeProps = {
|
|
|
229
234
|
|
|
230
235
|
### `<BotDecisionPanel />`
|
|
231
236
|
|
|
232
|
-
Live decision proxy. Combines Binance order book imbalance + recent trade flow + volatility regime + Coinbase cross-venue divergence into a `BUY` / `SELL` / `WAIT` / `STAND DOWN` decision with a 0–100 confidence score and human-readable reasons.
|
|
237
|
+
Live decision proxy. Combines Binance order book imbalance + recent trade flow + volatility regime + Coinbase cross-venue divergence into a `BUY` / `SELL` / `WAIT` / `STAND DOWN` decision with a 0–100 confidence score and human-readable reasons.
|
|
233
238
|
|
|
234
239
|
```ts
|
|
235
240
|
type BotDecisionPanelProps = {
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type CSSProperties } from "react";
|
|
2
|
+
export type AnimatedNumberProps = {
|
|
3
|
+
value: number;
|
|
4
|
+
format?: (n: number) => string;
|
|
5
|
+
durationMs?: number;
|
|
6
|
+
className?: string;
|
|
7
|
+
style?: CSSProperties;
|
|
8
|
+
};
|
|
9
|
+
export declare function AnimatedNumber({ value, format, durationMs, className, style }: AnimatedNumberProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=AnimatedNumber.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AnimatedNumber.d.ts","sourceRoot":"","sources":["../src/AnimatedNumber.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAExE,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB,CAAC;AAEF,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,MAAM,EACN,UAAgB,EAChB,SAAS,EACT,KAAK,EACN,EAAE,mBAAmB,2CAsCrB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef, useState } from "react";
|
|
3
|
+
export function AnimatedNumber({ value, format, durationMs = 500, className, style }) {
|
|
4
|
+
const [display, setDisplay] = useState(value);
|
|
5
|
+
const fromRef = useRef(value);
|
|
6
|
+
const targetRef = useRef(value);
|
|
7
|
+
useEffect(() => {
|
|
8
|
+
if (!Number.isFinite(value)) {
|
|
9
|
+
setDisplay(value);
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
if (value === targetRef.current)
|
|
13
|
+
return;
|
|
14
|
+
fromRef.current = display;
|
|
15
|
+
targetRef.current = value;
|
|
16
|
+
const startedAt = performance.now();
|
|
17
|
+
let raf = 0;
|
|
18
|
+
function step(now) {
|
|
19
|
+
const t = Math.min(1, (now - startedAt) / durationMs);
|
|
20
|
+
const eased = 1 - Math.pow(1 - t, 3);
|
|
21
|
+
const next = fromRef.current + (targetRef.current - fromRef.current) * eased;
|
|
22
|
+
setDisplay(next);
|
|
23
|
+
if (t < 1)
|
|
24
|
+
raf = requestAnimationFrame(step);
|
|
25
|
+
}
|
|
26
|
+
raf = requestAnimationFrame(step);
|
|
27
|
+
return () => cancelAnimationFrame(raf);
|
|
28
|
+
// We intentionally do not include `display` in deps — it would restart
|
|
29
|
+
// the animation on every tick. fromRef captures the live display once.
|
|
30
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
31
|
+
}, [value, durationMs]);
|
|
32
|
+
const text = format ? format(display) : display.toFixed(2);
|
|
33
|
+
return (_jsx("span", { className: className, style: { fontVariantNumeric: "tabular-nums", ...style }, children: text }));
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=AnimatedNumber.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AnimatedNumber.js","sourceRoot":"","sources":["../src/AnimatedNumber.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAsB,MAAM,OAAO,CAAC;AAUxE,MAAM,UAAU,cAAc,CAAC,EAC7B,KAAK,EACL,MAAM,EACN,UAAU,GAAG,GAAG,EAChB,SAAS,EACT,KAAK,EACe;IACpB,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEhC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,UAAU,CAAC,KAAK,CAAC,CAAC;YAClB,OAAO;QACT,CAAC;QACD,IAAI,KAAK,KAAK,SAAS,CAAC,OAAO;YAAE,OAAO;QAExC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;QAC1B,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;QAC1B,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACpC,IAAI,GAAG,GAAG,CAAC,CAAC;QAEZ,SAAS,IAAI,CAAC,GAAW;YACvB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,UAAU,CAAC,CAAC;YACtD,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YACrC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,GAAG,CAAC,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;YAC7E,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,IAAI,CAAC,GAAG,CAAC;gBAAE,GAAG,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC;QAED,GAAG,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAClC,OAAO,GAAG,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACvC,uEAAuE;QACvE,uEAAuE;QACvE,uDAAuD;IACzD,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IAExB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3D,OAAO,CACL,eAAM,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,kBAAkB,EAAE,cAAc,EAAE,GAAG,KAAK,EAAE,YAChF,IAAI,GACA,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BotDecisionPanel.d.ts","sourceRoot":"","sources":["../src/BotDecisionPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAGjF,MAAM,MAAM,qBAAqB,GAAG,qBAAqB,GAAG;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAsCF,wBAAgB,gBAAgB,CAAC,EAAE,SAAS,EAAE,KAA6B,EAAE,GAAG,WAAW,EAAE,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"BotDecisionPanel.d.ts","sourceRoot":"","sources":["../src/BotDecisionPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAGjF,MAAM,MAAM,qBAAqB,GAAG,qBAAqB,GAAG;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAsCF,wBAAgB,gBAAgB,CAAC,EAAE,SAAS,EAAE,KAA6B,EAAE,GAAG,WAAW,EAAE,EAAE,qBAAqB,2CAoInH"}
|
package/dist/BotDecisionPanel.js
CHANGED
|
@@ -58,14 +58,21 @@ export function BotDecisionPanel({ className, title = "Bot Decision (live)", ...
|
|
|
58
58
|
borderRadius: 10,
|
|
59
59
|
display: "flex",
|
|
60
60
|
gap: 12,
|
|
61
|
-
padding: "12px 14px"
|
|
61
|
+
padding: "12px 14px",
|
|
62
|
+
transition: "border-color 320ms ease"
|
|
62
63
|
}, children: [_jsx("span", { "aria-hidden": true, style: {
|
|
63
64
|
color: meta.color,
|
|
64
65
|
fontSize: 22,
|
|
65
66
|
fontWeight: 800,
|
|
66
67
|
lineHeight: 1,
|
|
67
68
|
width: 22
|
|
68
|
-
}, children: meta.arrow }), _jsxs("div", { style: { display: "grid", flex: 1, gap: 2 }, children: [_jsx("strong", { style: {
|
|
69
|
+
}, children: meta.arrow }), _jsxs("div", { style: { display: "grid", flex: 1, gap: 2 }, children: [_jsx("strong", { style: {
|
|
70
|
+
color: meta.color,
|
|
71
|
+
fontSize: 15,
|
|
72
|
+
fontWeight: 700,
|
|
73
|
+
letterSpacing: "0.04em",
|
|
74
|
+
transition: "color 320ms ease"
|
|
75
|
+
}, children: meta.label }), _jsxs("span", { style: { color: palette.textMuted, fontSize: 11 }, children: ["confidence ", result.confidence, "%"] })] }), _jsx(ConfidenceBar, { value: result.confidence, color: meta.color })] }), _jsx("ul", { style: { display: "grid", gap: 4, listStyle: "none", margin: 0, padding: 0 }, children: result.reasons.map((reason, idx) => (_jsxs("li", { style: {
|
|
69
76
|
alignItems: "baseline",
|
|
70
77
|
color: palette.text,
|
|
71
78
|
display: "grid",
|
|
@@ -113,7 +120,12 @@ function ConfidenceBar({ value, color }) {
|
|
|
113
120
|
height: 6,
|
|
114
121
|
overflow: "hidden",
|
|
115
122
|
width: 72
|
|
116
|
-
}, children: _jsx("div", { style: {
|
|
123
|
+
}, children: _jsx("div", { style: {
|
|
124
|
+
background: color,
|
|
125
|
+
height: "100%",
|
|
126
|
+
transition: "width 380ms cubic-bezier(0.4, 0, 0.2, 1), background 280ms ease",
|
|
127
|
+
width: `${safe}%`
|
|
128
|
+
} }) }));
|
|
117
129
|
}
|
|
118
130
|
function timeAgoShort(ts) {
|
|
119
131
|
const seconds = Math.max(0, (Date.now() - ts) / 1000);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BotDecisionPanel.js","sourceRoot":"","sources":["../src/BotDecisionPanel.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"BotDecisionPanel.js","sourceRoot":"","sources":["../src/BotDecisionPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContractEventFeed.d.ts","sourceRoot":"","sources":["../src/ContractEventFeed.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,gCAAgC,EACtC,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"ContractEventFeed.d.ts","sourceRoot":"","sources":["../src/ContractEventFeed.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,gCAAgC,EACtC,MAAM,gCAAgC,CAAC;AAQxC,MAAM,MAAM,sBAAsB,GAAG,gCAAgC,GAAG;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAmCF,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,EAAE,KAA2B,EAAE,GAAG,WAAW,EAAE,EAAE,sBAAsB,2CA6DnH"}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useStrategyContractEvents } from "./useStrategyContractEvents.js";
|
|
3
|
+
import { Skeleton } from "./Skeleton.js";
|
|
4
|
+
const ROW_FADE_KEYFRAMES = `@keyframes bandkitEventRow {
|
|
5
|
+
from { opacity: 0; transform: translateY(-3px); }
|
|
6
|
+
to { opacity: 1; transform: translateY(0); }
|
|
7
|
+
}`;
|
|
3
8
|
const palette = {
|
|
4
9
|
bg: "#0a0a0a",
|
|
5
10
|
surface: "#111113",
|
|
@@ -45,7 +50,14 @@ export function ContractEventFeed({ className, title = "Contract Activity", ...h
|
|
|
45
50
|
gap: 12,
|
|
46
51
|
maxWidth: 420,
|
|
47
52
|
padding: 18
|
|
48
|
-
}, children: [_jsxs("header", { style: { alignItems: "center", display: "flex", justifyContent: "space-between" }, children: [_jsx("h3", { style: { fontSize: 14, fontWeight: 700, letterSpacing: "0.02em", margin: 0 }, children: title }), _jsx("span", { style: { color: palette.textDim, fontSize: 11 }, children: hookOptions.strategyContractAddress ? "Watching contract" : "No contract" })] }), !hookOptions.strategyContractAddress ? (_jsx(Empty, { text: "Deploy a strategy contract to start watching events." })) : events.length === 0 ? (_jsx(
|
|
53
|
+
}, children: [_jsxs("header", { style: { alignItems: "center", display: "flex", justifyContent: "space-between" }, children: [_jsx("h3", { style: { fontSize: 14, fontWeight: 700, letterSpacing: "0.02em", margin: 0 }, children: title }), _jsx("span", { style: { color: palette.textDim, fontSize: 11 }, children: hookOptions.strategyContractAddress ? "Watching contract" : "No contract" })] }), _jsx("style", { children: ROW_FADE_KEYFRAMES }), !hookOptions.strategyContractAddress ? (_jsx(Empty, { text: "Deploy a strategy contract to start watching events." })) : events.length === 0 ? (_jsx("ul", { style: { display: "grid", gap: 6, listStyle: "none", margin: 0, padding: 0 }, children: Array.from({ length: 3 }).map((_, i) => (_jsxs("li", { style: {
|
|
54
|
+
background: palette.surface,
|
|
55
|
+
border: `1px solid ${palette.border}`,
|
|
56
|
+
borderRadius: 8,
|
|
57
|
+
display: "grid",
|
|
58
|
+
gap: 6,
|
|
59
|
+
padding: "10px 12px"
|
|
60
|
+
}, children: [_jsxs("div", { style: { display: "flex", justifyContent: "space-between" }, children: [_jsx(Skeleton, { width: 64, height: 12 }), _jsx(Skeleton, { width: 48, height: 10 })] }), _jsx(Skeleton, { width: "70%", height: 11 }), _jsx(Skeleton, { width: "50%", height: 10 })] }, `sk-${i}`))) })) : (_jsx("ul", { style: { display: "grid", gap: 6, listStyle: "none", margin: 0, padding: 0 }, children: events.map((event) => (_jsx(EventRow, { event: event }, event.id))) }))] }));
|
|
49
61
|
}
|
|
50
62
|
function EventRow({ event }) {
|
|
51
63
|
const meta = kindMeta[event.kind];
|
|
@@ -53,6 +65,7 @@ function EventRow({ event }) {
|
|
|
53
65
|
? `${meta.verb} ${Number(event.amountEth).toFixed(6)} ETH`
|
|
54
66
|
: meta.verb;
|
|
55
67
|
return (_jsxs("li", { style: {
|
|
68
|
+
animation: "bandkitEventRow 320ms ease-out",
|
|
56
69
|
background: palette.surface,
|
|
57
70
|
border: `1px solid ${palette.border}`,
|
|
58
71
|
borderRadius: 8,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContractEventFeed.js","sourceRoot":"","sources":["../src/ContractEventFeed.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,yBAAyB,EAI1B,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"ContractEventFeed.js","sourceRoot":"","sources":["../src/ContractEventFeed.tsx"],"names":[],"mappings":"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"}
|
package/dist/GasBadge.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GasBadge.d.ts","sourceRoot":"","sources":["../src/GasBadge.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"GasBadge.d.ts","sourceRoot":"","sources":["../src/GasBadge.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAGtF,MAAM,MAAM,aAAa,GAAG,kBAAkB,GAAG;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAsBF,wBAAgB,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,WAAW,EAAE,EAAE,aAAa,2CAyCpE"}
|
package/dist/GasBadge.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useGasPrice } from "./useGasPrice.js";
|
|
3
|
+
import { Skeleton } from "./Skeleton.js";
|
|
3
4
|
const palette = {
|
|
4
5
|
bg: "#111113",
|
|
5
6
|
border: "#1f1f23",
|
|
@@ -19,8 +20,9 @@ const tierColor = {
|
|
|
19
20
|
unknown: palette.unknown
|
|
20
21
|
};
|
|
21
22
|
export function GasBadge({ className, ...hookOptions }) {
|
|
22
|
-
const { gweiText, tier } = useGasPrice(hookOptions);
|
|
23
|
+
const { gwei, gweiText, tier } = useGasPrice(hookOptions);
|
|
23
24
|
const color = tierColor[tier];
|
|
25
|
+
const isLoading = gwei === null;
|
|
24
26
|
return (_jsxs("div", { className: className, style: {
|
|
25
27
|
alignItems: "center",
|
|
26
28
|
background: palette.bg,
|
|
@@ -32,6 +34,12 @@ export function GasBadge({ className, ...hookOptions }) {
|
|
|
32
34
|
fontSize: 12,
|
|
33
35
|
gap: 8,
|
|
34
36
|
padding: "4px 12px"
|
|
35
|
-
}, children: [_jsx("span", { "aria-hidden": true, style: {
|
|
37
|
+
}, children: [_jsx("span", { "aria-hidden": true, style: {
|
|
38
|
+
background: color,
|
|
39
|
+
borderRadius: 999,
|
|
40
|
+
height: 6,
|
|
41
|
+
transition: "background 320ms ease",
|
|
42
|
+
width: 6
|
|
43
|
+
} }), _jsx("span", { style: { color: palette.textDim, fontSize: 10, fontWeight: 600, letterSpacing: "0.06em" }, children: "GAS" }), isLoading ? (_jsx(Skeleton, { width: 56, height: 10, borderRadius: 2 })) : (_jsx("strong", { style: { color, fontSize: 12, fontVariantNumeric: "tabular-nums" }, children: gweiText }))] }));
|
|
36
44
|
}
|
|
37
45
|
//# sourceMappingURL=GasBadge.js.map
|
package/dist/GasBadge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GasBadge.js","sourceRoot":"","sources":["../src/GasBadge.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAyC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"GasBadge.js","sourceRoot":"","sources":["../src/GasBadge.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAyC,MAAM,kBAAkB,CAAC;AACtF,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAMzC,MAAM,OAAO,GAAG;IACd,EAAE,EAAE,SAAS;IACb,MAAM,EAAE,SAAS;IACjB,SAAS,EAAE,SAAS;IACpB,OAAO,EAAE,SAAS;IAClB,GAAG,EAAE,SAAS;IACd,MAAM,EAAE,SAAS;IACjB,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,MAAM,SAAS,GAAwC;IACrD,GAAG,EAAE,OAAO,CAAC,GAAG;IAChB,MAAM,EAAE,OAAO,CAAC,MAAM;IACtB,IAAI,EAAE,OAAO,CAAC,IAAI;IAClB,KAAK,EAAE,OAAO,CAAC,KAAK;IACpB,OAAO,EAAE,OAAO,CAAC,OAAO;CACzB,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,WAAW,EAAiB;IACnE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;IAEhC,OAAO,CACL,eACE,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE;YACL,UAAU,EAAE,QAAQ;YACpB,UAAU,EAAE,OAAO,CAAC,EAAE;YACtB,MAAM,EAAE,aAAa,OAAO,CAAC,MAAM,EAAE;YACrC,YAAY,EAAE,GAAG;YACjB,KAAK,EAAE,OAAO,CAAC,SAAS;YACxB,OAAO,EAAE,aAAa;YACtB,UAAU,EAAE,0DAA0D;YACtE,QAAQ,EAAE,EAAE;YACZ,GAAG,EAAE,CAAC;YACN,OAAO,EAAE,UAAU;SACpB,aAED,oCAEE,KAAK,EAAE;oBACL,UAAU,EAAE,KAAK;oBACjB,YAAY,EAAE,GAAG;oBACjB,MAAM,EAAE,CAAC;oBACT,UAAU,EAAE,uBAAuB;oBACnC,KAAK,EAAE,CAAC;iBACT,GACD,EACF,eAAM,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,oBAExF,EACN,SAAS,CAAC,CAAC,CAAC,CACX,KAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,GAAI,CACrD,CAAC,CAAC,CAAC,CACF,iBAAQ,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,kBAAkB,EAAE,cAAc,EAAE,YAAG,QAAQ,GAAU,CAChG,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrderBookWidget.d.ts","sourceRoot":"","sources":["../src/OrderBookWidget.tsx"],"names":[],"mappings":"AACA,OAAO,EAAuB,KAAK,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"OrderBookWidget.d.ts","sourceRoot":"","sources":["../src/OrderBookWidget.tsx"],"names":[],"mappings":"AACA,OAAO,EAAuB,KAAK,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAIhG,MAAM,MAAM,oBAAoB,GAAG,0BAA0B,GAAG;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAyBF,wBAAgB,eAAe,CAAC,EAC9B,SAAS,EACT,KAAoB,EACpB,IAAS,EACT,GAAG,WAAW,EACf,EAAE,oBAAoB,2CAuDtB"}
|
package/dist/OrderBookWidget.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useBinanceOrderBook } from "./useBinanceOrderBook.js";
|
|
3
|
+
import { Skeleton } from "./Skeleton.js";
|
|
4
|
+
import { AnimatedNumber } from "./AnimatedNumber.js";
|
|
3
5
|
const palette = {
|
|
4
6
|
bg: "#0a0a0a",
|
|
5
7
|
surface: "#111113",
|
|
@@ -36,7 +38,11 @@ export function OrderBookWidget({ className, title = "Order Book", rows = 10, ..
|
|
|
36
38
|
gap: 12,
|
|
37
39
|
maxWidth: 360,
|
|
38
40
|
padding: 18
|
|
39
|
-
}, children: [_jsxs("header", { style: { alignItems: "center", display: "flex", justifyContent: "space-between" }, children: [_jsx("h3", { style: { fontSize: 14, fontWeight: 700, letterSpacing: "0.02em", margin: 0 }, children: title }), _jsx(StatusDot, { status: book.status, symbol: book.symbol })] }), _jsx(HeaderRow, {}), _jsx("div", { style: { display: "grid", gap: 1 }, children: visibleAsks.
|
|
41
|
+
}, children: [_jsxs("header", { style: { alignItems: "center", display: "flex", justifyContent: "space-between" }, children: [_jsx("h3", { style: { fontSize: 14, fontWeight: 700, letterSpacing: "0.02em", margin: 0 }, children: title }), _jsx(StatusDot, { status: book.status, symbol: book.symbol })] }), _jsx(HeaderRow, {}), _jsx("div", { style: { display: "grid", gap: 1 }, children: visibleAsks.length > 0
|
|
42
|
+
? visibleAsks.map((level) => (_jsx(Row, { side: "ask", level: level, maxTotal: maxTotal }, `ask-${level.price}`)))
|
|
43
|
+
: Array.from({ length: rows }).map((_, i) => _jsx(SkeletonBookRow, {}, `ask-sk-${i}`)) }), _jsx(SpreadRow, { midPrice: book.midPrice, spread: book.spread, spreadPercent: book.spreadPercent }), _jsx("div", { style: { display: "grid", gap: 1 }, children: visibleBids.length > 0
|
|
44
|
+
? visibleBids.map((level) => (_jsx(Row, { side: "bid", level: level, maxTotal: maxTotal }, `bid-${level.price}`)))
|
|
45
|
+
: Array.from({ length: rows }).map((_, i) => _jsx(SkeletonBookRow, {}, `bid-sk-${i}`)) }), book.error ? (_jsx("div", { style: { color: palette.ask, fontSize: 12 }, children: book.error })) : null] }));
|
|
40
46
|
}
|
|
41
47
|
function HeaderRow() {
|
|
42
48
|
const cell = {
|
|
@@ -58,6 +64,7 @@ function Row({ side, level, maxTotal }) {
|
|
|
58
64
|
position: "absolute",
|
|
59
65
|
right: 0,
|
|
60
66
|
top: 0,
|
|
67
|
+
transition: "width 180ms ease-out",
|
|
61
68
|
width: `${widthPct}%`
|
|
62
69
|
} }), _jsxs("div", { style: {
|
|
63
70
|
display: "grid",
|
|
@@ -68,9 +75,26 @@ function Row({ side, level, maxTotal }) {
|
|
|
68
75
|
position: "relative"
|
|
69
76
|
}, children: [_jsx("span", { style: { color, fontWeight: 600 }, children: priceFormatter.format(level.price) }), _jsx("span", { style: { color: palette.text, textAlign: "right" }, children: sizeFormatter.format(level.size) }), _jsx("span", { style: { color: palette.textMuted, textAlign: "right" }, children: sizeFormatter.format(level.total) })] })] }));
|
|
70
77
|
}
|
|
78
|
+
function SkeletonBookRow() {
|
|
79
|
+
return (_jsxs("div", { style: {
|
|
80
|
+
display: "grid",
|
|
81
|
+
gap: 6,
|
|
82
|
+
gridTemplateColumns: "1fr 1fr 1fr",
|
|
83
|
+
padding: "3px 4px"
|
|
84
|
+
}, children: [_jsx(Skeleton, { height: 10 }), _jsx(Skeleton, { height: 10 }), _jsx(Skeleton, { height: 10 })] }));
|
|
85
|
+
}
|
|
71
86
|
function SpreadRow({ midPrice, spread, spreadPercent }) {
|
|
72
87
|
if (midPrice === null) {
|
|
73
|
-
return (
|
|
88
|
+
return (_jsxs("div", { style: {
|
|
89
|
+
alignItems: "center",
|
|
90
|
+
background: palette.surface,
|
|
91
|
+
border: `1px solid ${palette.border}`,
|
|
92
|
+
borderRadius: 6,
|
|
93
|
+
display: "flex",
|
|
94
|
+
gap: 8,
|
|
95
|
+
justifyContent: "space-between",
|
|
96
|
+
padding: "4px 8px"
|
|
97
|
+
}, children: [_jsx(Skeleton, { width: 64, height: 10 }), _jsx(Skeleton, { width: 80, height: 12 }), _jsx(Skeleton, { width: 48, height: 10 })] }));
|
|
74
98
|
}
|
|
75
99
|
return (_jsxs("div", { style: {
|
|
76
100
|
alignItems: "center",
|
|
@@ -83,7 +107,7 @@ function SpreadRow({ midPrice, spread, spreadPercent }) {
|
|
|
83
107
|
fontVariantNumeric: "tabular-nums",
|
|
84
108
|
justifyContent: "space-between",
|
|
85
109
|
padding: "4px 8px"
|
|
86
|
-
}, children: [_jsxs("span", { children: ["Spread ", spread !== null ? `$${spread.toFixed(2)}` : "—"] }), _jsxs("strong", { style: { color: palette.text, fontSize: 12 }, children: ["$", priceFormatter.format(
|
|
110
|
+
}, children: [_jsxs("span", { children: ["Spread ", spread !== null ? `$${spread.toFixed(2)}` : "—"] }), _jsxs("strong", { style: { color: palette.text, fontSize: 12 }, children: ["$", _jsx(AnimatedNumber, { value: midPrice, format: (n) => priceFormatter.format(n) })] }), _jsx("span", { children: spreadPercent !== null ? `${spreadPercent.toFixed(3)}%` : "—" })] }));
|
|
87
111
|
}
|
|
88
112
|
function StatusDot({ status, symbol }) {
|
|
89
113
|
const color = status === "live" ? palette.bid : status === "connecting" ? "#fbbf24" : palette.ask;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrderBookWidget.js","sourceRoot":"","sources":["../src/OrderBookWidget.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,mBAAmB,EAAmC,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"OrderBookWidget.js","sourceRoot":"","sources":["../src/OrderBookWidget.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RegimeBadge.d.ts","sourceRoot":"","sources":["../src/RegimeBadge.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAE7G,MAAM,MAAM,gBAAgB,GAAG,0BAA0B,GAAG;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAoBF,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,WAAW,EAAE,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"RegimeBadge.d.ts","sourceRoot":"","sources":["../src/RegimeBadge.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAE7G,MAAM,MAAM,gBAAgB,GAAG,0BAA0B,GAAG;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAoBF,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,WAAW,EAAE,EAAE,gBAAgB,2CAwC1E"}
|
package/dist/RegimeBadge.js
CHANGED
|
@@ -27,12 +27,14 @@ export function RegimeBadge({ className, ...hookOptions }) {
|
|
|
27
27
|
display: "inline-flex",
|
|
28
28
|
fontFamily: "system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif",
|
|
29
29
|
gap: 10,
|
|
30
|
-
padding: "6px 12px"
|
|
30
|
+
padding: "6px 12px",
|
|
31
|
+
transition: "border-color 320ms ease"
|
|
31
32
|
}, children: [_jsx("span", { "aria-hidden": true, style: {
|
|
32
33
|
background: m.color,
|
|
33
34
|
borderRadius: 999,
|
|
34
35
|
boxShadow: regime === "RANGING" ? `0 0 8px ${m.color}88` : "none",
|
|
35
36
|
height: 8,
|
|
37
|
+
transition: "background 320ms ease, box-shadow 320ms ease",
|
|
36
38
|
width: 8
|
|
37
39
|
} }), _jsxs("div", { style: { display: "grid", gap: 2 }, children: [_jsx("strong", { style: { color: m.color, fontSize: 11, fontWeight: 700, letterSpacing: "0.08em" }, children: m.label }), _jsxs("span", { style: { color: palette.textDim, fontSize: 10, fontVariantNumeric: "tabular-nums" }, children: [stddevPct !== null ? `σ ${stddevPct.toFixed(2)}%` : "σ —", driftPct !== null ? ` · Δ ${driftPct >= 0 ? "+" : ""}${driftPct.toFixed(2)}%` : "", ` · n=${sampleCount}`] })] })] }));
|
|
38
40
|
}
|
package/dist/RegimeBadge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RegimeBadge.js","sourceRoot":"","sources":["../src/RegimeBadge.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,mBAAmB,EAAgD,MAAM,0BAA0B,CAAC;AAM7G,MAAM,OAAO,GAAG;IACd,EAAE,EAAE,SAAS;IACb,MAAM,EAAE,SAAS;IACjB,SAAS,EAAE,SAAS;IACpB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,SAAS;IACnB,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,MAAM,IAAI,GAAmE;IAC3E,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,0BAA0B,EAAE;IACvF,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE;IAChE,QAAQ,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,oBAAoB,EAAE;IACpF,OAAO,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE;CACrF,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,WAAW,EAAoB;IACzE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACtF,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAEvB,OAAO,CACL,eACE,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE;YACL,UAAU,EAAE,QAAQ;YACpB,UAAU,EAAE,OAAO,CAAC,EAAE;YACtB,MAAM,EAAE,aAAa,OAAO,CAAC,MAAM,EAAE;YACrC,YAAY,EAAE,EAAE;YAChB,OAAO,EAAE,aAAa;YACtB,UAAU,EAAE,0DAA0D;YACtE,GAAG,EAAE,EAAE;YACP,OAAO,EAAE,UAAU;
|
|
1
|
+
{"version":3,"file":"RegimeBadge.js","sourceRoot":"","sources":["../src/RegimeBadge.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,mBAAmB,EAAgD,MAAM,0BAA0B,CAAC;AAM7G,MAAM,OAAO,GAAG;IACd,EAAE,EAAE,SAAS;IACb,MAAM,EAAE,SAAS;IACjB,SAAS,EAAE,SAAS;IACpB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,SAAS;IACnB,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,MAAM,IAAI,GAAmE;IAC3E,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,0BAA0B,EAAE;IACvF,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE;IAChE,QAAQ,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,oBAAoB,EAAE;IACpF,OAAO,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE;CACrF,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,WAAW,EAAoB;IACzE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACtF,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAEvB,OAAO,CACL,eACE,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE;YACL,UAAU,EAAE,QAAQ;YACpB,UAAU,EAAE,OAAO,CAAC,EAAE;YACtB,MAAM,EAAE,aAAa,OAAO,CAAC,MAAM,EAAE;YACrC,YAAY,EAAE,EAAE;YAChB,OAAO,EAAE,aAAa;YACtB,UAAU,EAAE,0DAA0D;YACtE,GAAG,EAAE,EAAE;YACP,OAAO,EAAE,UAAU;YACnB,UAAU,EAAE,yBAAyB;SACtC,aAED,oCAEE,KAAK,EAAE;oBACL,UAAU,EAAE,CAAC,CAAC,KAAK;oBACnB,YAAY,EAAE,GAAG;oBACjB,SAAS,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM;oBACjE,MAAM,EAAE,CAAC;oBACT,UAAU,EAAE,8CAA8C;oBAC1D,KAAK,EAAE,CAAC;iBACT,GACD,EACF,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,aACrC,iBAAQ,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAG,CAAC,CAAC,KAAK,GAAU,EAC7G,gBAAM,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,kBAAkB,EAAE,cAAc,EAAE,aACtF,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EACzD,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAClF,QAAQ,WAAW,EAAE,IACjB,IACH,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { CSSProperties } from "react";
|
|
2
|
+
export type SkeletonProps = {
|
|
3
|
+
width?: number | string;
|
|
4
|
+
height?: number | string;
|
|
5
|
+
borderRadius?: number;
|
|
6
|
+
className?: string;
|
|
7
|
+
style?: CSSProperties;
|
|
8
|
+
};
|
|
9
|
+
export declare function Skeleton({ width, height, borderRadius, className, style }: SkeletonProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export declare function SkeletonRow({ columns, gap, height }: {
|
|
11
|
+
columns?: number;
|
|
12
|
+
gap?: number;
|
|
13
|
+
height?: number;
|
|
14
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
//# sourceMappingURL=Skeleton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Skeleton.d.ts","sourceRoot":"","sources":["../src/Skeleton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB,CAAC;AAOF,wBAAgB,QAAQ,CAAC,EACvB,KAAc,EACd,MAAW,EACX,YAAgB,EAChB,SAAS,EACT,KAAK,EACN,EAAE,aAAa,2CAqBf;AAED,wBAAgB,WAAW,CAAC,EAC1B,OAAW,EACX,GAAO,EACP,MAAW,EACZ,EAAE;IACD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,2CAeA"}
|
package/dist/Skeleton.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
const SHIMMER_KEYFRAMES = `@keyframes bandkitShimmer {
|
|
3
|
+
0% { background-position: 200% 0; }
|
|
4
|
+
100% { background-position: -200% 0; }
|
|
5
|
+
}`;
|
|
6
|
+
export function Skeleton({ width = "100%", height = 12, borderRadius = 4, className, style }) {
|
|
7
|
+
return (_jsxs(_Fragment, { children: [_jsx("style", { children: SHIMMER_KEYFRAMES }), _jsx("span", { "aria-hidden": true, className: className, style: {
|
|
8
|
+
animation: "bandkitShimmer 1.6s ease-in-out infinite",
|
|
9
|
+
background: "linear-gradient(90deg, #131316 0%, #1e1e22 50%, #131316 100%)",
|
|
10
|
+
backgroundSize: "200% 100%",
|
|
11
|
+
borderRadius,
|
|
12
|
+
display: "block",
|
|
13
|
+
height,
|
|
14
|
+
width,
|
|
15
|
+
...style
|
|
16
|
+
} })] }));
|
|
17
|
+
}
|
|
18
|
+
export function SkeletonRow({ columns = 3, gap = 8, height = 12 }) {
|
|
19
|
+
return (_jsx("div", { style: {
|
|
20
|
+
display: "grid",
|
|
21
|
+
gap,
|
|
22
|
+
gridTemplateColumns: `repeat(${columns}, 1fr)`,
|
|
23
|
+
padding: "4px 2px"
|
|
24
|
+
}, children: Array.from({ length: columns }).map((_, i) => (_jsx(Skeleton, { height: height }, i))) }));
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=Skeleton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Skeleton.js","sourceRoot":"","sources":["../src/Skeleton.tsx"],"names":[],"mappings":";AAUA,MAAM,iBAAiB,GAAG;;;EAGxB,CAAC;AAEH,MAAM,UAAU,QAAQ,CAAC,EACvB,KAAK,GAAG,MAAM,EACd,MAAM,GAAG,EAAE,EACX,YAAY,GAAG,CAAC,EAChB,SAAS,EACT,KAAK,EACS;IACd,OAAO,CACL,8BACE,0BAAQ,iBAAiB,GAAS,EAClC,oCAEE,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE;oBACL,SAAS,EAAE,0CAA0C;oBACrD,UAAU,EACR,+DAA+D;oBACjE,cAAc,EAAE,WAAW;oBAC3B,YAAY;oBACZ,OAAO,EAAE,OAAO;oBAChB,MAAM;oBACN,KAAK;oBACL,GAAG,KAAK;iBACT,GACD,IACD,CACJ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAC1B,OAAO,GAAG,CAAC,EACX,GAAG,GAAG,CAAC,EACP,MAAM,GAAG,EAAE,EAKZ;IACC,OAAO,CACL,cACE,KAAK,EAAE;YACL,OAAO,EAAE,MAAM;YACf,GAAG;YACH,mBAAmB,EAAE,UAAU,OAAO,QAAQ;YAC9C,OAAO,EAAE,SAAS;SACnB,YAEA,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAC7C,KAAC,QAAQ,IAAS,MAAM,EAAE,MAAM,IAAjB,CAAC,CAAoB,CACrC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type UseStrategyValueHistoryOptions } from "./useStrategyValueHistory.js";
|
|
2
|
+
export type StrategyValueSparklineProps = UseStrategyValueHistoryOptions & {
|
|
3
|
+
className?: string;
|
|
4
|
+
title?: string;
|
|
5
|
+
width?: number;
|
|
6
|
+
height?: number;
|
|
7
|
+
};
|
|
8
|
+
export declare function StrategyValueSparkline({ className, title, width, height, ...hookOptions }: StrategyValueSparklineProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=StrategyValueSparkline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StrategyValueSparkline.d.ts","sourceRoot":"","sources":["../src/StrategyValueSparkline.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,8BAA8B,EACpC,MAAM,8BAA8B,CAAC;AAItC,MAAM,MAAM,2BAA2B,GAAG,8BAA8B,GAAG;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAqBF,wBAAgB,sBAAsB,CAAC,EACrC,SAAS,EACT,KAAwB,EACxB,KAAW,EACX,MAAW,EACX,GAAG,WAAW,EACf,EAAE,2BAA2B,2CA+I7B"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo } from "react";
|
|
3
|
+
import { useEthPriceTicker } from "./useEthPriceTicker.js";
|
|
4
|
+
import { useStrategyValueHistory } from "./useStrategyValueHistory.js";
|
|
5
|
+
import { AnimatedNumber } from "./AnimatedNumber.js";
|
|
6
|
+
import { Skeleton } from "./Skeleton.js";
|
|
7
|
+
const palette = {
|
|
8
|
+
bg: "#0a0a0a",
|
|
9
|
+
surface: "#111113",
|
|
10
|
+
border: "#1f1f23",
|
|
11
|
+
text: "#f5f5f7",
|
|
12
|
+
textMuted: "#9ca3af",
|
|
13
|
+
textDim: "#52525b",
|
|
14
|
+
up: "#10b981",
|
|
15
|
+
down: "#ef4444",
|
|
16
|
+
flat: "#9ca3af"
|
|
17
|
+
};
|
|
18
|
+
const usdFormatter = new Intl.NumberFormat("en-US", {
|
|
19
|
+
currency: "USD",
|
|
20
|
+
maximumFractionDigits: 2,
|
|
21
|
+
minimumFractionDigits: 2,
|
|
22
|
+
style: "currency"
|
|
23
|
+
});
|
|
24
|
+
export function StrategyValueSparkline({ className, title = "Strategy Value", width = 220, height = 64, ...hookOptions }) {
|
|
25
|
+
const history = useStrategyValueHistory(hookOptions);
|
|
26
|
+
const ethPrice = useEthPriceTicker();
|
|
27
|
+
const hasContract = Boolean(hookOptions.strategyContractAddress);
|
|
28
|
+
const hasData = history.samples.length >= 2;
|
|
29
|
+
const tone = history.changeEth > 0.0000005
|
|
30
|
+
? palette.up
|
|
31
|
+
: history.changeEth < -0.0000005
|
|
32
|
+
? palette.down
|
|
33
|
+
: palette.flat;
|
|
34
|
+
const currentUsd = ethPrice.price && Number.isFinite(ethPrice.price)
|
|
35
|
+
? history.currentTotalEth * ethPrice.price
|
|
36
|
+
: null;
|
|
37
|
+
const changeUsd = ethPrice.price && Number.isFinite(ethPrice.price) ? history.changeEth * ethPrice.price : null;
|
|
38
|
+
const path = useMemo(() => buildPath(history.samples.map((s) => s.totalEth), width, height), [
|
|
39
|
+
history.samples,
|
|
40
|
+
width,
|
|
41
|
+
height
|
|
42
|
+
]);
|
|
43
|
+
const areaPath = useMemo(() => buildAreaPath(history.samples.map((s) => s.totalEth), width, height), [history.samples, width, height]);
|
|
44
|
+
return (_jsxs("section", { className: className, style: {
|
|
45
|
+
background: palette.bg,
|
|
46
|
+
border: `1px solid ${palette.border}`,
|
|
47
|
+
borderRadius: 14,
|
|
48
|
+
boxShadow: "0 20px 60px rgba(0, 0, 0, 0.55)",
|
|
49
|
+
color: palette.text,
|
|
50
|
+
display: "grid",
|
|
51
|
+
fontFamily: "system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif",
|
|
52
|
+
gap: 14,
|
|
53
|
+
maxWidth: 420,
|
|
54
|
+
padding: 18
|
|
55
|
+
}, children: [_jsxs("header", { style: { alignItems: "center", display: "flex", justifyContent: "space-between" }, children: [_jsx("h3", { style: { fontSize: 14, fontWeight: 700, letterSpacing: "0.02em", margin: 0 }, children: title }), _jsx("span", { style: { color: palette.textDim, fontSize: 11 }, children: hasData ? `${history.samples.length} pts` : hasContract ? "collecting" : "no contract" })] }), !hasContract ? (_jsx("div", { style: {
|
|
56
|
+
color: palette.textDim,
|
|
57
|
+
fontSize: 12,
|
|
58
|
+
padding: "20px 4px",
|
|
59
|
+
textAlign: "center"
|
|
60
|
+
}, children: "Deploy a strategy contract to start tracking value." })) : !hasData ? (_jsxs("div", { style: { display: "grid", gap: 10 }, children: [_jsx(Skeleton, { width: 140, height: 22 }), _jsx(Skeleton, { width: 80, height: 12 }), _jsx(Skeleton, { width: "100%", height: height, borderRadius: 8 })] })) : (_jsxs(_Fragment, { children: [_jsxs("div", { style: { alignItems: "baseline", display: "flex", gap: 10, justifyContent: "space-between" }, children: [_jsxs("div", { style: { display: "grid", gap: 2 }, children: [_jsx("strong", { style: { fontSize: 22, fontWeight: 700, lineHeight: 1.1 }, children: _jsx(AnimatedNumber, { value: history.currentTotalEth, format: (n) => `${n.toFixed(6)} ETH` }) }), currentUsd !== null ? (_jsx("span", { style: { color: palette.textMuted, fontSize: 12 }, children: _jsx(AnimatedNumber, { value: currentUsd, format: (n) => usdFormatter.format(n) }) })) : null] }), _jsxs("div", { style: { display: "grid", gap: 2, textAlign: "right" }, children: [_jsxs("strong", { style: { color: tone, fontSize: 13, fontWeight: 700 }, children: [history.changeEth >= 0 ? "+" : "", history.changeEth.toFixed(6), " ETH"] }), _jsxs("span", { style: { color: palette.textDim, fontSize: 11 }, children: [history.changePct === null
|
|
61
|
+
? "—"
|
|
62
|
+
: `${history.changePct >= 0 ? "+" : ""}${history.changePct.toFixed(2)}% since start`, changeUsd !== null
|
|
63
|
+
? ` · ${changeUsd >= 0 ? "+" : ""}${usdFormatter.format(changeUsd)}`
|
|
64
|
+
: ""] })] })] }), _jsxs("svg", { "aria-hidden": true, height: height, style: {
|
|
65
|
+
background: palette.surface,
|
|
66
|
+
border: `1px solid ${palette.border}`,
|
|
67
|
+
borderRadius: 8,
|
|
68
|
+
display: "block",
|
|
69
|
+
width: "100%"
|
|
70
|
+
}, viewBox: `0 0 ${width} ${height}`, width: "100%", children: [areaPath ? _jsx("path", { d: areaPath, fill: `${tone}1f` }) : null, path ? (_jsx("path", { d: path, fill: "none", stroke: tone, strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, style: { transition: "stroke 320ms ease" } })) : null] }), _jsx("div", { style: {
|
|
71
|
+
color: palette.textDim,
|
|
72
|
+
fontSize: 10,
|
|
73
|
+
lineHeight: 1.4
|
|
74
|
+
}, children: "Tracks contract balance + allocated value over time. Not realised PnL \u2014 actual trade outcomes occur off-chain at the strategyWallet." })] }))] }));
|
|
75
|
+
}
|
|
76
|
+
function buildPath(values, width, height) {
|
|
77
|
+
if (values.length < 2)
|
|
78
|
+
return null;
|
|
79
|
+
const min = Math.min(...values);
|
|
80
|
+
const max = Math.max(...values);
|
|
81
|
+
const range = max - min || max || 1;
|
|
82
|
+
const stepX = width / (values.length - 1);
|
|
83
|
+
const points = values.map((v, i) => {
|
|
84
|
+
const x = i * stepX;
|
|
85
|
+
const norm = (v - min) / range;
|
|
86
|
+
const y = height - norm * (height - 8) - 4;
|
|
87
|
+
return `${x.toFixed(2)},${y.toFixed(2)}`;
|
|
88
|
+
});
|
|
89
|
+
return `M${points.join(" L")}`;
|
|
90
|
+
}
|
|
91
|
+
function buildAreaPath(values, width, height) {
|
|
92
|
+
if (values.length < 2)
|
|
93
|
+
return null;
|
|
94
|
+
const line = buildPath(values, width, height);
|
|
95
|
+
if (!line)
|
|
96
|
+
return null;
|
|
97
|
+
return `${line} L${width},${height} L0,${height} Z`;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=StrategyValueSparkline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StrategyValueSparkline.js","sourceRoot":"","sources":["../src/StrategyValueSparkline.tsx"],"names":[],"mappings":"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"}
|
package/dist/TradeTape.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TradeTape.d.ts","sourceRoot":"","sources":["../src/TradeTape.tsx"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"TradeTape.d.ts","sourceRoot":"","sources":["../src/TradeTape.tsx"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAQvF,MAAM,MAAM,cAAc,GAAG,uBAAuB,GAAG;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AA8BF,wBAAgB,SAAS,CAAC,EAAE,SAAS,EAAE,KAAuB,EAAE,IAAS,EAAE,GAAG,WAAW,EAAE,EAAE,cAAc,2CAmE1G"}
|
package/dist/TradeTape.js
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useBinanceTrades } from "./useBinanceTrades.js";
|
|
3
|
+
import { Skeleton } from "./Skeleton.js";
|
|
4
|
+
const ROW_FADE_KEYFRAMES = `@keyframes bandkitTradeRow {
|
|
5
|
+
from { opacity: 0; transform: translateY(-4px); }
|
|
6
|
+
to { opacity: 1; transform: translateY(0); }
|
|
7
|
+
}`;
|
|
3
8
|
const palette = {
|
|
4
9
|
bg: "#0a0a0a",
|
|
5
10
|
border: "#1f1f23",
|
|
@@ -39,16 +44,24 @@ export function TradeTape({ className, title = "Recent Trades", rows = 20, ...ho
|
|
|
39
44
|
gap: 10,
|
|
40
45
|
maxWidth: 360,
|
|
41
46
|
padding: 18
|
|
42
|
-
}, children: [_jsxs("header", { style: { alignItems: "center", display: "flex", justifyContent: "space-between" }, children: [_jsx("h3", { style: { fontSize: 14, fontWeight: 700, letterSpacing: "0.02em", margin: 0 }, children: title }), _jsx(StatusDot, { status: status, symbol: symbol })] }), _jsx(HeaderRow, {}), _jsx("
|
|
43
|
-
|
|
44
|
-
return (_jsxs("div", { style: {
|
|
47
|
+
}, children: [_jsxs("header", { style: { alignItems: "center", display: "flex", justifyContent: "space-between" }, children: [_jsx("h3", { style: { fontSize: 14, fontWeight: 700, letterSpacing: "0.02em", margin: 0 }, children: title }), _jsx(StatusDot, { status: status, symbol: symbol })] }), _jsx(HeaderRow, {}), _jsx("style", { children: ROW_FADE_KEYFRAMES }), _jsx("div", { style: { display: "grid", gap: 1, maxHeight: 360, overflow: "hidden" }, children: trades.length === 0
|
|
48
|
+
? Array.from({ length: Math.min(rows, 12) }).map((_, i) => (_jsxs("div", { style: {
|
|
45
49
|
display: "grid",
|
|
46
|
-
|
|
47
|
-
fontVariantNumeric: "tabular-nums",
|
|
50
|
+
gap: 6,
|
|
48
51
|
gridTemplateColumns: "1fr 1fr 56px",
|
|
49
52
|
padding: "3px 4px"
|
|
50
|
-
}, children: [_jsx(
|
|
51
|
-
|
|
53
|
+
}, children: [_jsx(Skeleton, { height: 10 }), _jsx(Skeleton, { height: 10 }), _jsx(Skeleton, { height: 10 })] }, `sk-${i}`)))
|
|
54
|
+
: trades.map((trade) => {
|
|
55
|
+
const color = trade.side === "buy" ? palette.buy : palette.sell;
|
|
56
|
+
return (_jsxs("div", { style: {
|
|
57
|
+
animation: "bandkitTradeRow 280ms ease-out",
|
|
58
|
+
display: "grid",
|
|
59
|
+
fontSize: 12,
|
|
60
|
+
fontVariantNumeric: "tabular-nums",
|
|
61
|
+
gridTemplateColumns: "1fr 1fr 56px",
|
|
62
|
+
padding: "3px 4px"
|
|
63
|
+
}, children: [_jsx("span", { style: { color, fontWeight: 600 }, children: priceFormatter.format(trade.price) }), _jsx("span", { style: { color: palette.text, textAlign: "right" }, children: sizeFormatter.format(trade.size) }), _jsx("span", { style: { color: palette.textDim, textAlign: "right" }, children: timeAgo(trade.timestamp) })] }, trade.id));
|
|
64
|
+
}) })] }));
|
|
52
65
|
}
|
|
53
66
|
function HeaderRow() {
|
|
54
67
|
const cell = {
|
package/dist/TradeTape.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TradeTape.js","sourceRoot":"","sources":["../src/TradeTape.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,gBAAgB,EAAgC,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"TradeTape.js","sourceRoot":"","sources":["../src/TradeTape.tsx"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -25,6 +25,10 @@ export { useCoinbaseTicker, type CoinbaseTickerStatus, type CoinbaseTickerMessag
|
|
|
25
25
|
export { useBotDecision, type BotDecision, type DecisionResult, type DecisionThresholds, type DecisionHistoryEntry, type UseBotDecisionOptions, type UseBotDecisionResult } from "./useBotDecision.js";
|
|
26
26
|
export { computeBotDecision, computeBookImbalance, computeBookDepth, computeTradeImbalance, DEFAULT_DECISION_THRESHOLDS, type DecisionInputs, type DecisionReason, type BookLevel } from "./decisionEngine.js";
|
|
27
27
|
export { BotDecisionPanel, type BotDecisionPanelProps } from "./BotDecisionPanel.js";
|
|
28
|
+
export { useStrategyValueHistory, type ValueSample, type UseStrategyValueHistoryOptions, type UseStrategyValueHistoryResult } from "./useStrategyValueHistory.js";
|
|
29
|
+
export { StrategyValueSparkline, type StrategyValueSparklineProps } from "./StrategyValueSparkline.js";
|
|
30
|
+
export { Skeleton, SkeletonRow, type SkeletonProps } from "./Skeleton.js";
|
|
31
|
+
export { AnimatedNumber, type AnimatedNumberProps } from "./AnimatedNumber.js";
|
|
28
32
|
/** @deprecated Use BAND_STRATEGY_ABI. Will be removed in v1.0. */
|
|
29
33
|
export { BAND_STRATEGY_ABI as ETH_BOT_VAULT_ABI } from "./bandStrategyAbi.js";
|
|
30
34
|
/** @deprecated Use BAND_STRATEGY_BYTECODE. Will be removed in v1.0. */
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -29,6 +29,12 @@ export { useCoinbaseTicker } from "./useCoinbaseTicker.js";
|
|
|
29
29
|
export { useBotDecision } from "./useBotDecision.js";
|
|
30
30
|
export { computeBotDecision, computeBookImbalance, computeBookDepth, computeTradeImbalance, DEFAULT_DECISION_THRESHOLDS } from "./decisionEngine.js";
|
|
31
31
|
export { BotDecisionPanel } from "./BotDecisionPanel.js";
|
|
32
|
+
// --- Strategy value tracking --------------------------------------------
|
|
33
|
+
export { useStrategyValueHistory } from "./useStrategyValueHistory.js";
|
|
34
|
+
export { StrategyValueSparkline } from "./StrategyValueSparkline.js";
|
|
35
|
+
// --- UI primitives -------------------------------------------------------
|
|
36
|
+
export { Skeleton, SkeletonRow } from "./Skeleton.js";
|
|
37
|
+
export { AnimatedNumber } from "./AnimatedNumber.js";
|
|
32
38
|
/** @deprecated Use BAND_STRATEGY_ABI. Will be removed in v1.0. */
|
|
33
39
|
export { BAND_STRATEGY_ABI as ETH_BOT_VAULT_ABI } from "./bandStrategyAbi.js";
|
|
34
40
|
/** @deprecated Use BAND_STRATEGY_BYTECODE. Will be removed in v1.0. */
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Address } from "viem";
|
|
2
|
+
import { type UseStrategyContractOptions } from "./useStrategyContract.js";
|
|
3
|
+
export type ValueSample = {
|
|
4
|
+
at: number;
|
|
5
|
+
contractEth: number;
|
|
6
|
+
allocatedEth: number;
|
|
7
|
+
totalEth: number;
|
|
8
|
+
};
|
|
9
|
+
export type UseStrategyValueHistoryOptions = UseStrategyContractOptions & {
|
|
10
|
+
enabled?: boolean;
|
|
11
|
+
sampleIntervalMs?: number;
|
|
12
|
+
maxSamples?: number;
|
|
13
|
+
storageKey?: (address: Address) => string;
|
|
14
|
+
};
|
|
15
|
+
export type UseStrategyValueHistoryResult = {
|
|
16
|
+
samples: ValueSample[];
|
|
17
|
+
currentTotalEth: number;
|
|
18
|
+
firstTotalEth: number;
|
|
19
|
+
changeEth: number;
|
|
20
|
+
changePct: number | null;
|
|
21
|
+
clear: () => void;
|
|
22
|
+
};
|
|
23
|
+
export declare function useStrategyValueHistory(options: UseStrategyValueHistoryOptions): UseStrategyValueHistoryResult;
|
|
24
|
+
//# sourceMappingURL=useStrategyValueHistory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useStrategyValueHistory.d.ts","sourceRoot":"","sources":["../src/useStrategyValueHistory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAuB,KAAK,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEhG,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG,0BAA0B,GAAG;IACxE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC;AAkCF,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,8BAA8B,GACtC,6BAA6B,CA8E/B"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { useEffect, useMemo, useRef, useState } from "react";
|
|
2
|
+
import { useStrategyContract } from "./useStrategyContract.js";
|
|
3
|
+
const DEFAULT_INTERVAL_MS = 10_000;
|
|
4
|
+
const DEFAULT_MAX_SAMPLES = 360; // ~1 hour at 10s
|
|
5
|
+
const STORAGE_PREFIX = "bandkit:value-history:";
|
|
6
|
+
function defaultStorageKey(address) {
|
|
7
|
+
return `${STORAGE_PREFIX}${address.toLowerCase()}`;
|
|
8
|
+
}
|
|
9
|
+
function readStored(key) {
|
|
10
|
+
if (typeof window === "undefined")
|
|
11
|
+
return [];
|
|
12
|
+
try {
|
|
13
|
+
const raw = window.localStorage.getItem(key);
|
|
14
|
+
if (!raw)
|
|
15
|
+
return [];
|
|
16
|
+
const parsed = JSON.parse(raw);
|
|
17
|
+
if (!Array.isArray(parsed))
|
|
18
|
+
return [];
|
|
19
|
+
return parsed.filter((s) => typeof s.at === "number" && typeof s.totalEth === "number" && Number.isFinite(s.totalEth));
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function writeStored(key, samples) {
|
|
26
|
+
if (typeof window === "undefined")
|
|
27
|
+
return;
|
|
28
|
+
try {
|
|
29
|
+
window.localStorage.setItem(key, JSON.stringify(samples));
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// quota or disabled — ignore
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export function useStrategyValueHistory(options) {
|
|
36
|
+
const enabled = options.enabled ?? true;
|
|
37
|
+
const intervalMs = options.sampleIntervalMs ?? DEFAULT_INTERVAL_MS;
|
|
38
|
+
const maxSamples = options.maxSamples ?? DEFAULT_MAX_SAMPLES;
|
|
39
|
+
const storageKeyFn = options.storageKey ?? defaultStorageKey;
|
|
40
|
+
const strategy = useStrategyContract(options);
|
|
41
|
+
const address = options.strategyContractAddress;
|
|
42
|
+
const [samples, setSamples] = useState([]);
|
|
43
|
+
const lastWriteAtRef = useRef(0);
|
|
44
|
+
// Hydrate from storage when address changes
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
if (!address) {
|
|
47
|
+
setSamples([]);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const stored = readStored(storageKeyFn(address));
|
|
51
|
+
setSamples(stored);
|
|
52
|
+
}, [address, storageKeyFn]);
|
|
53
|
+
useEffect(() => {
|
|
54
|
+
if (!enabled || !address)
|
|
55
|
+
return;
|
|
56
|
+
if (typeof window === "undefined")
|
|
57
|
+
return;
|
|
58
|
+
function sample() {
|
|
59
|
+
const contractEth = Number(strategy.balanceEth);
|
|
60
|
+
const allocatedEth = Number(strategy.allocatedToStrategyEth);
|
|
61
|
+
if (!Number.isFinite(contractEth) || !Number.isFinite(allocatedEth))
|
|
62
|
+
return;
|
|
63
|
+
const totalEth = contractEth + allocatedEth;
|
|
64
|
+
const now = Date.now();
|
|
65
|
+
if (now - lastWriteAtRef.current < intervalMs - 250)
|
|
66
|
+
return;
|
|
67
|
+
lastWriteAtRef.current = now;
|
|
68
|
+
setSamples((prev) => {
|
|
69
|
+
const next = [...prev, { at: now, contractEth, allocatedEth, totalEth }].slice(-maxSamples);
|
|
70
|
+
if (address)
|
|
71
|
+
writeStored(storageKeyFn(address), next);
|
|
72
|
+
return next;
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
sample();
|
|
76
|
+
const id = window.setInterval(sample, intervalMs);
|
|
77
|
+
return () => window.clearInterval(id);
|
|
78
|
+
}, [
|
|
79
|
+
address,
|
|
80
|
+
enabled,
|
|
81
|
+
intervalMs,
|
|
82
|
+
maxSamples,
|
|
83
|
+
storageKeyFn,
|
|
84
|
+
strategy.allocatedToStrategyEth,
|
|
85
|
+
strategy.balanceEth
|
|
86
|
+
]);
|
|
87
|
+
return useMemo(() => {
|
|
88
|
+
const currentTotalEth = samples.length > 0 ? samples[samples.length - 1].totalEth : 0;
|
|
89
|
+
const firstTotalEth = samples.length > 0 ? samples[0].totalEth : 0;
|
|
90
|
+
const changeEth = currentTotalEth - firstTotalEth;
|
|
91
|
+
const changePct = firstTotalEth > 0 ? (changeEth / firstTotalEth) * 100 : null;
|
|
92
|
+
return {
|
|
93
|
+
samples,
|
|
94
|
+
currentTotalEth,
|
|
95
|
+
firstTotalEth,
|
|
96
|
+
changeEth,
|
|
97
|
+
changePct,
|
|
98
|
+
clear: () => {
|
|
99
|
+
if (address) {
|
|
100
|
+
try {
|
|
101
|
+
window.localStorage.removeItem(storageKeyFn(address));
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
// ignore
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
setSamples([]);
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
}, [address, samples, storageKeyFn]);
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=useStrategyValueHistory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useStrategyValueHistory.js","sourceRoot":"","sources":["../src/useStrategyValueHistory.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bandkit",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6",
|
|
4
4
|
"description": "Open-source scaffolding for Ethereum range-bound trading strategies: strategy contract deployment, restricted executor, and React hooks. Strategy logic is not included.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|