arc402-cli 1.0.0-rc.1 → 1.1.0
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 +43 -2
- package/dist/abis.d.ts +1 -0
- package/dist/abis.d.ts.map +1 -1
- package/dist/abis.js +29 -1
- package/dist/abis.js.map +1 -1
- package/dist/commands/backup.d.ts +3 -0
- package/dist/commands/backup.d.ts.map +1 -0
- package/dist/commands/backup.js +106 -0
- package/dist/commands/backup.js.map +1 -0
- package/dist/commands/compute.d.ts +14 -0
- package/dist/commands/compute.d.ts.map +1 -0
- package/dist/commands/compute.js +466 -0
- package/dist/commands/compute.js.map +1 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +11 -1
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/daemon.d.ts.map +1 -1
- package/dist/commands/daemon.js +67 -0
- package/dist/commands/daemon.js.map +1 -1
- package/dist/commands/discover.d.ts.map +1 -1
- package/dist/commands/discover.js +60 -15
- package/dist/commands/discover.js.map +1 -1
- package/dist/commands/doctor.d.ts +3 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +205 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/tunnel.d.ts +3 -0
- package/dist/commands/tunnel.d.ts.map +1 -0
- package/dist/commands/tunnel.js +281 -0
- package/dist/commands/tunnel.js.map +1 -0
- package/dist/commands/wallet.d.ts.map +1 -1
- package/dist/commands/wallet.js +299 -65
- package/dist/commands/wallet.js.map +1 -1
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +146 -9
- package/dist/commands/watch.js.map +1 -1
- package/dist/commands/workroom.d.ts.map +1 -1
- package/dist/commands/workroom.js +112 -6
- package/dist/commands/workroom.js.map +1 -1
- package/dist/config.d.ts +13 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +41 -4
- package/dist/config.js.map +1 -1
- package/dist/daemon/compute-metering.d.ts +61 -0
- package/dist/daemon/compute-metering.d.ts.map +1 -0
- package/dist/daemon/compute-metering.js +299 -0
- package/dist/daemon/compute-metering.js.map +1 -0
- package/dist/daemon/compute-session.d.ts +100 -0
- package/dist/daemon/compute-session.d.ts.map +1 -0
- package/dist/daemon/compute-session.js +231 -0
- package/dist/daemon/compute-session.js.map +1 -0
- package/dist/daemon/config.d.ts +33 -1
- package/dist/daemon/config.d.ts.map +1 -1
- package/dist/daemon/config.js +69 -0
- package/dist/daemon/config.js.map +1 -1
- package/dist/daemon/credentials.d.ts +24 -0
- package/dist/daemon/credentials.d.ts.map +1 -0
- package/dist/daemon/credentials.js +80 -0
- package/dist/daemon/credentials.js.map +1 -0
- package/dist/daemon/delivery-client.d.ts +35 -0
- package/dist/daemon/delivery-client.d.ts.map +1 -0
- package/dist/daemon/delivery-client.js +231 -0
- package/dist/daemon/delivery-client.js.map +1 -0
- package/dist/daemon/file-delivery.d.ts +98 -0
- package/dist/daemon/file-delivery.d.ts.map +1 -0
- package/dist/daemon/file-delivery.js +461 -0
- package/dist/daemon/file-delivery.js.map +1 -0
- package/dist/daemon/index.d.ts +1 -0
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +793 -227
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/notify.d.ts +35 -6
- package/dist/daemon/notify.d.ts.map +1 -1
- package/dist/daemon/notify.js +176 -48
- package/dist/daemon/notify.js.map +1 -1
- package/dist/daemon/worker-executor.d.ts +71 -0
- package/dist/daemon/worker-executor.d.ts.map +1 -0
- package/dist/daemon/worker-executor.js +382 -0
- package/dist/daemon/worker-executor.js.map +1 -0
- package/dist/drain-v4.js +2 -2
- package/dist/drain-v4.js.map +1 -1
- package/dist/endpoint-notify.d.ts +9 -1
- package/dist/endpoint-notify.d.ts.map +1 -1
- package/dist/endpoint-notify.js +116 -3
- package/dist/endpoint-notify.js.map +1 -1
- package/dist/index.js +81 -1
- package/dist/index.js.map +1 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +8 -0
- package/dist/program.js.map +1 -1
- package/dist/repl.d.ts.map +1 -1
- package/dist/repl.js +69 -486
- package/dist/repl.js.map +1 -1
- package/dist/tui/App.d.ts +12 -0
- package/dist/tui/App.d.ts.map +1 -0
- package/dist/tui/App.js +154 -0
- package/dist/tui/App.js.map +1 -0
- package/dist/tui/Footer.d.ts +11 -0
- package/dist/tui/Footer.d.ts.map +1 -0
- package/dist/tui/Footer.js +13 -0
- package/dist/tui/Footer.js.map +1 -0
- package/dist/tui/Header.d.ts +14 -0
- package/dist/tui/Header.d.ts.map +1 -0
- package/dist/tui/Header.js +19 -0
- package/dist/tui/Header.js.map +1 -0
- package/dist/tui/InputLine.d.ts +11 -0
- package/dist/tui/InputLine.d.ts.map +1 -0
- package/dist/tui/InputLine.js +145 -0
- package/dist/tui/InputLine.js.map +1 -0
- package/dist/tui/Viewport.d.ts +14 -0
- package/dist/tui/Viewport.d.ts.map +1 -0
- package/dist/tui/Viewport.js +48 -0
- package/dist/tui/Viewport.js.map +1 -0
- package/dist/tui/WalletConnectPairing.d.ts +23 -0
- package/dist/tui/WalletConnectPairing.d.ts.map +1 -0
- package/dist/tui/WalletConnectPairing.js +61 -0
- package/dist/tui/WalletConnectPairing.js.map +1 -0
- package/dist/tui/components/Button.d.ts +7 -0
- package/dist/tui/components/Button.d.ts.map +1 -0
- package/dist/tui/components/Button.js +21 -0
- package/dist/tui/components/Button.js.map +1 -0
- package/dist/tui/components/CeremonyView.d.ts +13 -0
- package/dist/tui/components/CeremonyView.d.ts.map +1 -0
- package/dist/tui/components/CeremonyView.js +10 -0
- package/dist/tui/components/CeremonyView.js.map +1 -0
- package/dist/tui/components/CompletionDropdown.d.ts +7 -0
- package/dist/tui/components/CompletionDropdown.d.ts.map +1 -0
- package/dist/tui/components/CompletionDropdown.js +23 -0
- package/dist/tui/components/CompletionDropdown.js.map +1 -0
- package/dist/tui/components/ConfirmPrompt.d.ts +9 -0
- package/dist/tui/components/ConfirmPrompt.d.ts.map +1 -0
- package/dist/tui/components/ConfirmPrompt.js +10 -0
- package/dist/tui/components/ConfirmPrompt.js.map +1 -0
- package/dist/tui/components/CustomTextInput.d.ts +15 -0
- package/dist/tui/components/CustomTextInput.d.ts.map +1 -0
- package/dist/tui/components/CustomTextInput.js +99 -0
- package/dist/tui/components/CustomTextInput.js.map +1 -0
- package/dist/tui/components/InteractiveTable.d.ts +14 -0
- package/dist/tui/components/InteractiveTable.d.ts.map +1 -0
- package/dist/tui/components/InteractiveTable.js +61 -0
- package/dist/tui/components/InteractiveTable.js.map +1 -0
- package/dist/tui/components/StepSpinner.d.ts +11 -0
- package/dist/tui/components/StepSpinner.d.ts.map +1 -0
- package/dist/tui/components/StepSpinner.js +32 -0
- package/dist/tui/components/StepSpinner.js.map +1 -0
- package/dist/tui/components/Toast.d.ts +18 -0
- package/dist/tui/components/Toast.d.ts.map +1 -0
- package/dist/tui/components/Toast.js +29 -0
- package/dist/tui/components/Toast.js.map +1 -0
- package/dist/tui/index.d.ts +2 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +55 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/useChat.d.ts +11 -0
- package/dist/tui/useChat.d.ts.map +1 -0
- package/dist/tui/useChat.js +91 -0
- package/dist/tui/useChat.js.map +1 -0
- package/dist/tui/useCommand.d.ts +12 -0
- package/dist/tui/useCommand.d.ts.map +1 -0
- package/dist/tui/useCommand.js +137 -0
- package/dist/tui/useCommand.js.map +1 -0
- package/dist/tui/useNotifications.d.ts +9 -0
- package/dist/tui/useNotifications.d.ts.map +1 -0
- package/dist/tui/useNotifications.js +17 -0
- package/dist/tui/useNotifications.js.map +1 -0
- package/dist/tui/useScroll.d.ts +17 -0
- package/dist/tui/useScroll.d.ts.map +1 -0
- package/dist/tui/useScroll.js +46 -0
- package/dist/tui/useScroll.js.map +1 -0
- package/dist/ui/format.d.ts.map +1 -1
- package/dist/ui/format.js +2 -0
- package/dist/ui/format.js.map +1 -1
- package/dist/ui/qr-render.d.ts +25 -0
- package/dist/ui/qr-render.d.ts.map +1 -0
- package/dist/ui/qr-render.js +90 -0
- package/dist/ui/qr-render.js.map +1 -0
- package/dist/ui/rpc-fallback.d.ts +11 -0
- package/dist/ui/rpc-fallback.d.ts.map +1 -0
- package/dist/ui/rpc-fallback.js +58 -0
- package/dist/ui/rpc-fallback.js.map +1 -0
- package/dist/walletconnect.d.ts +4 -0
- package/dist/walletconnect.d.ts.map +1 -1
- package/dist/walletconnect.js.map +1 -1
- package/package.json +11 -3
- package/scripts/authorize-machine-key.ts +0 -43
- package/scripts/drain-wallet.ts +0 -149
- package/scripts/execute-spend-only.ts +0 -81
- package/scripts/register-agent-userop.ts +0 -186
- package/src/abis.ts +0 -187
- package/src/bundler.ts +0 -235
- package/src/client.ts +0 -36
- package/src/coinbase-smart-wallet.ts +0 -51
- package/src/commands/accept.ts +0 -64
- package/src/commands/agent-handshake.ts +0 -72
- package/src/commands/agent.ts +0 -691
- package/src/commands/agreements.ts +0 -350
- package/src/commands/arbitrator.ts +0 -180
- package/src/commands/arena-handshake.ts +0 -257
- package/src/commands/arena.ts +0 -122
- package/src/commands/cancel.ts +0 -35
- package/src/commands/channel.ts +0 -218
- package/src/commands/coldstart.ts +0 -165
- package/src/commands/config.ts +0 -58
- package/src/commands/contract-interaction.ts +0 -166
- package/src/commands/daemon.ts +0 -978
- package/src/commands/deliver.ts +0 -148
- package/src/commands/discover.ts +0 -297
- package/src/commands/dispute.ts +0 -375
- package/src/commands/endpoint.ts +0 -620
- package/src/commands/feed.ts +0 -229
- package/src/commands/hire.ts +0 -245
- package/src/commands/migrate.ts +0 -177
- package/src/commands/negotiate.ts +0 -271
- package/src/commands/openshell.ts +0 -1055
- package/src/commands/owner.ts +0 -35
- package/src/commands/policy.ts +0 -263
- package/src/commands/relay.ts +0 -273
- package/src/commands/remediate.ts +0 -24
- package/src/commands/reputation.ts +0 -79
- package/src/commands/setup.ts +0 -343
- package/src/commands/trust.ts +0 -27
- package/src/commands/verify.ts +0 -91
- package/src/commands/wallet.ts +0 -3280
- package/src/commands/watch.ts +0 -23
- package/src/commands/watchtower.ts +0 -248
- package/src/commands/workroom.ts +0 -959
- package/src/config.ts +0 -174
- package/src/daemon/config.ts +0 -308
- package/src/daemon/hire-listener.ts +0 -226
- package/src/daemon/index.ts +0 -955
- package/src/daemon/job-lifecycle.ts +0 -215
- package/src/daemon/notify.ts +0 -157
- package/src/daemon/token-metering.ts +0 -183
- package/src/daemon/userops.ts +0 -119
- package/src/daemon/wallet-monitor.ts +0 -90
- package/src/drain-v4.ts +0 -159
- package/src/endpoint-config.ts +0 -83
- package/src/endpoint-notify.ts +0 -46
- package/src/index.ts +0 -26
- package/src/openshell-runtime.ts +0 -277
- package/src/program.ts +0 -83
- package/src/repl.ts +0 -680
- package/src/signing.ts +0 -28
- package/src/telegram-notify.ts +0 -88
- package/src/ui/banner.ts +0 -51
- package/src/ui/colors.ts +0 -30
- package/src/ui/format.ts +0 -77
- package/src/ui/spinner.ts +0 -56
- package/src/ui/tree.ts +0 -16
- package/src/utils/format.ts +0 -48
- package/src/utils/hash.ts +0 -5
- package/src/utils/time.ts +0 -15
- package/src/wallet-router.ts +0 -178
- package/src/walletconnect-session.ts +0 -27
- package/src/walletconnect.ts +0 -294
- package/test/time.test.js +0 -11
- package/tsconfig.json +0 -19
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WalletConnectPairing = WalletConnectPairing;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const ink_1 = require("ink");
|
|
7
|
+
const qr_render_js_1 = require("../ui/qr-render.js");
|
|
8
|
+
/**
|
|
9
|
+
* Renders WalletConnect pairing inside the Ink TUI viewport:
|
|
10
|
+
* - ASCII QR code
|
|
11
|
+
* - Deep links for MetaMask, Rainbow, Trust, etc.
|
|
12
|
+
* - Status transitions: connecting → connected → chain-switching → ready
|
|
13
|
+
*/
|
|
14
|
+
function WalletConnectPairing({ onComplete, onError, connect, }) {
|
|
15
|
+
const [stage, setStage] = (0, react_1.useState)("connecting");
|
|
16
|
+
const [uri, setUri] = (0, react_1.useState)(null);
|
|
17
|
+
const [links, setLinks] = (0, react_1.useState)({});
|
|
18
|
+
const [account, setAccount] = (0, react_1.useState)(null);
|
|
19
|
+
const [qrLines, setQrLines] = (0, react_1.useState)([]);
|
|
20
|
+
const [detail, setDetail] = (0, react_1.useState)("");
|
|
21
|
+
const handleUri = (0, react_1.useCallback)((wcUri, wcLinks) => {
|
|
22
|
+
setUri(wcUri);
|
|
23
|
+
setLinks(wcLinks);
|
|
24
|
+
// Generate ASCII QR using our compact renderer
|
|
25
|
+
try {
|
|
26
|
+
const lines = (0, qr_render_js_1.renderQR)(wcUri);
|
|
27
|
+
setQrLines(lines);
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// QR rendering is best-effort
|
|
31
|
+
}
|
|
32
|
+
}, []);
|
|
33
|
+
const handleStatus = (0, react_1.useCallback)((status, statusDetail) => {
|
|
34
|
+
setStage(status);
|
|
35
|
+
if (statusDetail)
|
|
36
|
+
setDetail(statusDetail);
|
|
37
|
+
if (status === "connected" && statusDetail) {
|
|
38
|
+
setAccount(statusDetail);
|
|
39
|
+
}
|
|
40
|
+
}, []);
|
|
41
|
+
(0, react_1.useEffect)(() => {
|
|
42
|
+
const callbacks = {
|
|
43
|
+
onUri: handleUri,
|
|
44
|
+
onStatus: handleStatus,
|
|
45
|
+
};
|
|
46
|
+
connect(callbacks)
|
|
47
|
+
.then((result) => onComplete(result))
|
|
48
|
+
.catch((err) => onError(err instanceof Error ? err.message : String(err)));
|
|
49
|
+
}, [connect, handleUri, handleStatus, onComplete, onError]);
|
|
50
|
+
const statusIcon = stage === "error" ? "✗" : stage === "ready" ? "✓" : "◈";
|
|
51
|
+
const statusColor = stage === "error" ? "red" : stage === "ready" ? "green" : "cyan";
|
|
52
|
+
const statusMessages = {
|
|
53
|
+
connecting: "Waiting for wallet approval...",
|
|
54
|
+
connected: `Connected: ${account ?? ""}`,
|
|
55
|
+
"chain-switching": `Switching chain${detail ? `: ${detail}` : ""}...`,
|
|
56
|
+
ready: `Ready — ${account ?? ""}`,
|
|
57
|
+
error: detail || "Connection failed",
|
|
58
|
+
};
|
|
59
|
+
return ((0, jsx_runtime_1.jsxs)(ink_1.Box, { flexDirection: "column", paddingLeft: 1, children: [(0, jsx_runtime_1.jsx)(ink_1.Text, { color: "cyan", bold: true, children: "WalletConnect Pairing" }), (0, jsx_runtime_1.jsx)(ink_1.Text, { children: " " }), (0, jsx_runtime_1.jsxs)(ink_1.Box, { children: [(0, jsx_runtime_1.jsxs)(ink_1.Text, { color: statusColor, children: [statusIcon, " "] }), (0, jsx_runtime_1.jsx)(ink_1.Text, { children: statusMessages[stage] })] }), (0, jsx_runtime_1.jsx)(ink_1.Text, { children: " " }), uri && stage === "connecting" && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(ink_1.Text, { dimColor: true, children: "Tap a link for your wallet app:" }), (0, jsx_runtime_1.jsx)(ink_1.Text, { children: " " }), Object.entries(links).map(([name, link]) => ((0, jsx_runtime_1.jsxs)(ink_1.Box, { flexDirection: "column", children: [(0, jsx_runtime_1.jsxs)(ink_1.Text, { color: "white", children: [name, ":"] }), (0, jsx_runtime_1.jsx)(ink_1.Text, { dimColor: true, children: link }), (0, jsx_runtime_1.jsx)(ink_1.Text, { children: " " })] }, name))), qrLines.length > 0 && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(ink_1.Text, { dimColor: true, children: "Or scan QR:" }), qrLines.map((line, i) => ((0, jsx_runtime_1.jsx)(ink_1.Text, { children: line }, i)))] }))] }))] }));
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=WalletConnectPairing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WalletConnectPairing.js","sourceRoot":"","sources":["../../src/tui/WalletConnectPairing.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface ButtonProps {
|
|
2
|
+
label: string;
|
|
3
|
+
onPress: () => void;
|
|
4
|
+
variant?: "primary" | "danger" | "dim";
|
|
5
|
+
}
|
|
6
|
+
export declare function Button({ label, onPress, variant }: ButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=Button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/tui/components/Button.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,KAAK,CAAC;CACxC;AAQD,wBAAgB,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAmB,EAAE,EAAE,WAAW,2CAsB1E"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Button = Button;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const ink_1 = require("ink");
|
|
6
|
+
const VARIANT_COLORS = {
|
|
7
|
+
primary: "cyan",
|
|
8
|
+
danger: "red",
|
|
9
|
+
dim: "gray",
|
|
10
|
+
};
|
|
11
|
+
function Button({ label, onPress, variant = "primary" }) {
|
|
12
|
+
const { isFocused } = (0, ink_1.useFocus)();
|
|
13
|
+
(0, ink_1.useInput)((_input, key) => {
|
|
14
|
+
if (key.return) {
|
|
15
|
+
onPress();
|
|
16
|
+
}
|
|
17
|
+
}, { isActive: isFocused });
|
|
18
|
+
const color = isFocused ? VARIANT_COLORS[variant] ?? "cyan" : "white";
|
|
19
|
+
return ((0, jsx_runtime_1.jsx)(ink_1.Box, { children: (0, jsx_runtime_1.jsxs)(ink_1.Text, { color: color, bold: isFocused, children: [isFocused ? "▸ " : " ", label] }) }));
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=Button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../../src/tui/components/Button.tsx"],"names":[],"mappings":";;AAeA,wBAsBC;;AApCD,6BAAoD;AAQpD,MAAM,cAAc,GAA2B;IAC7C,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,KAAK;IACb,GAAG,EAAE,MAAM;CACZ,CAAC;AAEF,SAAgB,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,EAAe;IACzE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,cAAQ,GAAE,CAAC;IAEjC,IAAA,cAAQ,EACN,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QACd,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,EACD,EAAE,QAAQ,EAAE,SAAS,EAAE,CACxB,CAAC;IAEF,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAEtE,OAAO,CACL,uBAAC,SAAG,cACF,wBAAC,UAAI,IAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,aAChC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EACvB,KAAK,IACD,GACH,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { StepStatus } from "./StepSpinner.js";
|
|
2
|
+
export interface CeremonyStep {
|
|
3
|
+
label: string;
|
|
4
|
+
status: StepStatus;
|
|
5
|
+
detail?: string;
|
|
6
|
+
error?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface CeremonyViewProps {
|
|
9
|
+
title: string;
|
|
10
|
+
steps: CeremonyStep[];
|
|
11
|
+
}
|
|
12
|
+
export declare function CeremonyView({ title, steps }: CeremonyViewProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
//# sourceMappingURL=CeremonyView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CeremonyView.d.ts","sourceRoot":"","sources":["../../../src/tui/components/CeremonyView.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,iBAAiB,2CAqB/D"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CeremonyView = CeremonyView;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const ink_1 = require("ink");
|
|
6
|
+
const StepSpinner_js_1 = require("./StepSpinner.js");
|
|
7
|
+
function CeremonyView({ title, steps }) {
|
|
8
|
+
return ((0, jsx_runtime_1.jsxs)(ink_1.Box, { flexDirection: "column", children: [(0, jsx_runtime_1.jsx)(ink_1.Box, { marginBottom: 1, children: (0, jsx_runtime_1.jsxs)(ink_1.Text, { bold: true, color: "cyan", children: ["\u25C8 ", title] }) }), steps.map((step, i) => ((0, jsx_runtime_1.jsx)(StepSpinner_js_1.StepSpinner, { step: i + 1, total: steps.length, label: step.label, status: step.status, detail: step.detail, error: step.error }, i)))] }));
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=CeremonyView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CeremonyView.js","sourceRoot":"","sources":["../../../src/tui/components/CeremonyView.tsx"],"names":[],"mappings":";;AAiBA,oCAqBC;;AArCD,6BAAgC;AAChC,qDAA+C;AAe/C,SAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAqB;IAC9D,OAAO,CACL,wBAAC,SAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,uBAAC,SAAG,IAAC,YAAY,EAAE,CAAC,YAClB,wBAAC,UAAI,IAAC,IAAI,QAAC,KAAK,EAAC,MAAM,wBAClB,KAAK,IACH,GACH,EACL,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,uBAAC,4BAAW,IAEV,IAAI,EAAE,CAAC,GAAG,CAAC,EACX,KAAK,EAAE,KAAK,CAAC,MAAM,EACnB,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,KAAK,EAAE,IAAI,CAAC,KAAK,IANZ,CAAC,CAON,CACH,CAAC,IACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface CompletionDropdownProps {
|
|
2
|
+
candidates: string[];
|
|
3
|
+
selectedIndex: number;
|
|
4
|
+
visible: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function CompletionDropdown({ candidates, selectedIndex, visible, }: CompletionDropdownProps): import("react/jsx-runtime").JSX.Element | null;
|
|
7
|
+
//# sourceMappingURL=CompletionDropdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CompletionDropdown.d.ts","sourceRoot":"","sources":["../../../src/tui/components/CompletionDropdown.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;CAClB;AAID,wBAAgB,kBAAkB,CAAC,EACjC,UAAU,EACV,aAAa,EACb,OAAO,GACR,EAAE,uBAAuB,kDAwCzB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CompletionDropdown = CompletionDropdown;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const ink_1 = require("ink");
|
|
6
|
+
const MAX_VISIBLE = 8;
|
|
7
|
+
function CompletionDropdown({ candidates, selectedIndex, visible, }) {
|
|
8
|
+
if (!visible || candidates.length === 0)
|
|
9
|
+
return null;
|
|
10
|
+
// Window the list if there are too many candidates
|
|
11
|
+
let startIdx = 0;
|
|
12
|
+
if (candidates.length > MAX_VISIBLE) {
|
|
13
|
+
startIdx = Math.max(0, selectedIndex - Math.floor(MAX_VISIBLE / 2));
|
|
14
|
+
startIdx = Math.min(startIdx, candidates.length - MAX_VISIBLE);
|
|
15
|
+
}
|
|
16
|
+
const visibleCandidates = candidates.slice(startIdx, startIdx + MAX_VISIBLE);
|
|
17
|
+
return ((0, jsx_runtime_1.jsxs)(ink_1.Box, { flexDirection: "column", marginLeft: 4, children: [(0, jsx_runtime_1.jsx)(ink_1.Box, { children: (0, jsx_runtime_1.jsx)(ink_1.Text, { dimColor: true, children: "┌─ completions ─" }) }), visibleCandidates.map((candidate, i) => {
|
|
18
|
+
const actualIdx = startIdx + i;
|
|
19
|
+
const isSelected = actualIdx === selectedIndex;
|
|
20
|
+
return ((0, jsx_runtime_1.jsxs)(ink_1.Box, { children: [(0, jsx_runtime_1.jsx)(ink_1.Text, { dimColor: true, children: "│" }), (0, jsx_runtime_1.jsxs)(ink_1.Text, { color: isSelected ? "cyan" : "white", bold: isSelected, children: [isSelected ? " ▸ " : " ", candidate] })] }, candidate));
|
|
21
|
+
}), (0, jsx_runtime_1.jsxs)(ink_1.Box, { children: [(0, jsx_runtime_1.jsx)(ink_1.Text, { dimColor: true, children: "└─" }), candidates.length > MAX_VISIBLE && ((0, jsx_runtime_1.jsxs)(ink_1.Text, { dimColor: true, children: [" ", "(", candidates.length, " total)"] }))] })] }));
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=CompletionDropdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CompletionDropdown.js","sourceRoot":"","sources":["../../../src/tui/components/CompletionDropdown.tsx"],"names":[],"mappings":";;AAWA,gDA4CC;;AAtDD,6BAAgC;AAQhC,MAAM,WAAW,GAAG,CAAC,CAAC;AAEtB,SAAgB,kBAAkB,CAAC,EACjC,UAAU,EACV,aAAa,EACb,OAAO,GACiB;IACxB,IAAI,CAAC,OAAO,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAErD,mDAAmD;IACnD,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,UAAU,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;QACpC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC;QACpE,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,iBAAiB,GAAG,UAAU,CAAC,KAAK,CACxC,QAAQ,EACR,QAAQ,GAAG,WAAW,CACvB,CAAC;IAEF,OAAO,CACL,wBAAC,SAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,UAAU,EAAE,CAAC,aACvC,uBAAC,SAAG,cACF,uBAAC,UAAI,IAAC,QAAQ,kBAAE,kBAAkB,GAAQ,GACtC,EACL,iBAAiB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE;gBACtC,MAAM,SAAS,GAAG,QAAQ,GAAG,CAAC,CAAC;gBAC/B,MAAM,UAAU,GAAG,SAAS,KAAK,aAAa,CAAC;gBAC/C,OAAO,CACL,wBAAC,SAAG,eACF,uBAAC,UAAI,IAAC,QAAQ,kBAAE,GAAG,GAAQ,EAC3B,wBAAC,UAAI,IAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,aACzD,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAC1B,SAAS,IACL,KALC,SAAS,CAMb,CACP,CAAC;YACJ,CAAC,CAAC,EACF,wBAAC,SAAG,eACF,uBAAC,UAAI,IAAC,QAAQ,kBAAE,IAAI,GAAQ,EAC3B,UAAU,CAAC,MAAM,GAAG,WAAW,IAAI,CAClC,wBAAC,UAAI,IAAC,QAAQ,mBAAE,GAAG,OAAG,UAAU,CAAC,MAAM,eAAe,CACvD,IACG,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface ConfirmPromptProps {
|
|
2
|
+
message: string;
|
|
3
|
+
onConfirm: () => void;
|
|
4
|
+
onCancel: () => void;
|
|
5
|
+
confirmLabel?: string;
|
|
6
|
+
cancelLabel?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function ConfirmPrompt({ message, onConfirm, onCancel, confirmLabel, cancelLabel, }: ConfirmPromptProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=ConfirmPrompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfirmPrompt.d.ts","sourceRoot":"","sources":["../../../src/tui/components/ConfirmPrompt.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,SAAS,EACT,QAAQ,EACR,YAAwB,EACxB,WAAsB,GACvB,EAAE,kBAAkB,2CAiBpB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConfirmPrompt = ConfirmPrompt;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const ink_1 = require("ink");
|
|
6
|
+
const Button_js_1 = require("./Button.js");
|
|
7
|
+
function ConfirmPrompt({ message, onConfirm, onCancel, confirmLabel = "Confirm", cancelLabel = "Cancel", }) {
|
|
8
|
+
return ((0, jsx_runtime_1.jsxs)(ink_1.Box, { flexDirection: "column", children: [(0, jsx_runtime_1.jsx)(ink_1.Box, { marginBottom: 1, children: (0, jsx_runtime_1.jsxs)(ink_1.Text, { bold: true, color: "cyan", children: ["\u25C8 ", message] }) }), (0, jsx_runtime_1.jsxs)(ink_1.Box, { gap: 2, children: [(0, jsx_runtime_1.jsx)(Button_js_1.Button, { label: confirmLabel, onPress: onConfirm, variant: "primary" }), (0, jsx_runtime_1.jsx)(Button_js_1.Button, { label: cancelLabel, onPress: onCancel, variant: "dim" })] }), (0, jsx_runtime_1.jsx)(ink_1.Box, { marginTop: 1, children: (0, jsx_runtime_1.jsx)(ink_1.Text, { dimColor: true, children: "Tab to switch \u00B7 Enter to select" }) })] }));
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=ConfirmPrompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfirmPrompt.js","sourceRoot":"","sources":["../../../src/tui/components/ConfirmPrompt.tsx"],"names":[],"mappings":";;AAYA,sCAuBC;;AAlCD,6BAAgC;AAChC,2CAAqC;AAUrC,SAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,SAAS,EACT,QAAQ,EACR,YAAY,GAAG,SAAS,EACxB,WAAW,GAAG,QAAQ,GACH;IACnB,OAAO,CACL,wBAAC,SAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,uBAAC,SAAG,IAAC,YAAY,EAAE,CAAC,YAClB,wBAAC,UAAI,IAAC,IAAI,QAAC,KAAK,EAAC,MAAM,wBAClB,OAAO,IACL,GACH,EACN,wBAAC,SAAG,IAAC,GAAG,EAAE,CAAC,aACT,uBAAC,kBAAM,IAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAC,SAAS,GAAG,EACrE,uBAAC,kBAAM,IAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAC,KAAK,GAAG,IAC3D,EACN,uBAAC,SAAG,IAAC,SAAS,EAAE,CAAC,YACf,uBAAC,UAAI,IAAC,QAAQ,2DAAuC,GACjD,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
interface CustomTextInputProps {
|
|
2
|
+
value: string;
|
|
3
|
+
onChange: (value: string) => void;
|
|
4
|
+
onSubmit?: (value: string) => void;
|
|
5
|
+
focus?: boolean;
|
|
6
|
+
/** When true, Enter key is NOT handled — let parent handle it (e.g. dropdown selection) */
|
|
7
|
+
suppressEnter?: boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Minimal text input that does NOT intercept Tab, Up, Down, Escape, or Ctrl+C,
|
|
11
|
+
* allowing parent useInput handlers to receive those keys.
|
|
12
|
+
*/
|
|
13
|
+
export declare function CustomTextInput({ value, onChange, onSubmit, focus, suppressEnter, }: CustomTextInputProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=CustomTextInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CustomTextInput.d.ts","sourceRoot":"","sources":["../../../src/tui/components/CustomTextInput.tsx"],"names":[],"mappings":"AAGA,UAAU,oBAAoB;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2FAA2F;IAC3F,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,KAAY,EACZ,aAAqB,GACtB,EAAE,oBAAoB,2CA6GtB"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CustomTextInput = CustomTextInput;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const ink_1 = require("ink");
|
|
7
|
+
/**
|
|
8
|
+
* Minimal text input that does NOT intercept Tab, Up, Down, Escape, or Ctrl+C,
|
|
9
|
+
* allowing parent useInput handlers to receive those keys.
|
|
10
|
+
*/
|
|
11
|
+
function CustomTextInput({ value, onChange, onSubmit, focus = true, suppressEnter = false, }) {
|
|
12
|
+
const [cursorPos, setCursorPos] = (0, react_1.useState)(value.length);
|
|
13
|
+
const [cursorVisible, setCursorVisible] = (0, react_1.useState)(true);
|
|
14
|
+
// Keep cursor within bounds when value changes externally
|
|
15
|
+
(0, react_1.useEffect)(() => {
|
|
16
|
+
setCursorPos((pos) => Math.min(pos, value.length));
|
|
17
|
+
}, [value]);
|
|
18
|
+
// Blink cursor
|
|
19
|
+
(0, react_1.useEffect)(() => {
|
|
20
|
+
if (!focus)
|
|
21
|
+
return;
|
|
22
|
+
const timer = setInterval(() => {
|
|
23
|
+
setCursorVisible((v) => !v);
|
|
24
|
+
}, 530);
|
|
25
|
+
return () => clearInterval(timer);
|
|
26
|
+
}, [focus]);
|
|
27
|
+
(0, ink_1.useInput)((input, key) => {
|
|
28
|
+
// Keys we explicitly do NOT handle — let parent see them:
|
|
29
|
+
// Tab, Up, Down, Escape, Ctrl+C
|
|
30
|
+
if (key.tab || key.upArrow || key.downArrow || key.escape)
|
|
31
|
+
return;
|
|
32
|
+
if (input === "\x03")
|
|
33
|
+
return; // Ctrl+C
|
|
34
|
+
// Enter/Return — submit (unless suppressed for dropdown selection)
|
|
35
|
+
if (key.return) {
|
|
36
|
+
if (!suppressEnter) {
|
|
37
|
+
onSubmit?.(value);
|
|
38
|
+
}
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
// Backspace
|
|
42
|
+
if (key.backspace || key.delete) {
|
|
43
|
+
if (cursorPos > 0) {
|
|
44
|
+
const next = value.slice(0, cursorPos - 1) + value.slice(cursorPos);
|
|
45
|
+
setCursorPos(cursorPos - 1);
|
|
46
|
+
onChange(next);
|
|
47
|
+
}
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
// Left arrow
|
|
51
|
+
if (key.leftArrow) {
|
|
52
|
+
setCursorPos((p) => Math.max(0, p - 1));
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
// Right arrow
|
|
56
|
+
if (key.rightArrow) {
|
|
57
|
+
setCursorPos((p) => Math.min(value.length, p + 1));
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
// Home (Ctrl+A)
|
|
61
|
+
if (input === "\x01") {
|
|
62
|
+
setCursorPos(0);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
// End (Ctrl+E)
|
|
66
|
+
if (input === "\x05") {
|
|
67
|
+
setCursorPos(value.length);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
// Ctrl+U — clear line
|
|
71
|
+
if (input === "\x15") {
|
|
72
|
+
setCursorPos(0);
|
|
73
|
+
onChange("");
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
// Ctrl+K — kill to end of line
|
|
77
|
+
if (input === "\x0B") {
|
|
78
|
+
onChange(value.slice(0, cursorPos));
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
// Ignore other control characters
|
|
82
|
+
if (input.length > 0 && input.charCodeAt(0) < 32)
|
|
83
|
+
return;
|
|
84
|
+
// Regular character input (including paste)
|
|
85
|
+
if (input.length > 0) {
|
|
86
|
+
const next = value.slice(0, cursorPos) + input + value.slice(cursorPos);
|
|
87
|
+
setCursorPos(cursorPos + input.length);
|
|
88
|
+
onChange(next);
|
|
89
|
+
}
|
|
90
|
+
}, { isActive: focus });
|
|
91
|
+
if (!focus) {
|
|
92
|
+
return (0, jsx_runtime_1.jsx)(ink_1.Text, { dimColor: true, children: value });
|
|
93
|
+
}
|
|
94
|
+
const before = value.slice(0, cursorPos);
|
|
95
|
+
const cursorChar = cursorPos < value.length ? value[cursorPos] : " ";
|
|
96
|
+
const after = value.slice(cursorPos + 1);
|
|
97
|
+
return ((0, jsx_runtime_1.jsxs)(ink_1.Text, { children: [before, (0, jsx_runtime_1.jsx)(ink_1.Text, { inverse: cursorVisible, children: cursorChar }), after] }));
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=CustomTextInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CustomTextInput.js","sourceRoot":"","sources":["../../../src/tui/components/CustomTextInput.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface Column {
|
|
2
|
+
header: string;
|
|
3
|
+
key: string;
|
|
4
|
+
width?: number;
|
|
5
|
+
align?: "left" | "right";
|
|
6
|
+
}
|
|
7
|
+
export interface InteractiveTableProps {
|
|
8
|
+
columns: Column[];
|
|
9
|
+
rows: Record<string, string>[];
|
|
10
|
+
onSelect?: (row: Record<string, string>, index: number) => void;
|
|
11
|
+
selectedIndex?: number;
|
|
12
|
+
}
|
|
13
|
+
export declare function InteractiveTable({ columns, rows, onSelect, selectedIndex: controlledIdx, }: InteractiveTableProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=InteractiveTable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InteractiveTable.d.ts","sourceRoot":"","sources":["../../../src/tui/components/InteractiveTable.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAID,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,aAAa,EAAE,aAAa,GAC7B,EAAE,qBAAqB,2CAiFvB"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InteractiveTable = InteractiveTable;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const ink_1 = require("ink");
|
|
7
|
+
const MAX_VISIBLE_ROWS = 15;
|
|
8
|
+
function InteractiveTable({ columns, rows, onSelect, selectedIndex: controlledIdx, }) {
|
|
9
|
+
const [internalIdx, setInternalIdx] = (0, react_1.useState)(0);
|
|
10
|
+
const selectedIndex = controlledIdx ?? internalIdx;
|
|
11
|
+
(0, ink_1.useInput)((_input, key) => {
|
|
12
|
+
if (key.upArrow) {
|
|
13
|
+
setInternalIdx((i) => Math.max(0, i - 1));
|
|
14
|
+
}
|
|
15
|
+
if (key.downArrow) {
|
|
16
|
+
setInternalIdx((i) => Math.min(rows.length - 1, i + 1));
|
|
17
|
+
}
|
|
18
|
+
if (key.return && onSelect && rows[selectedIndex]) {
|
|
19
|
+
onSelect(rows[selectedIndex], selectedIndex);
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
// Compute column widths
|
|
23
|
+
const colWidths = columns.map((col) => {
|
|
24
|
+
if (col.width)
|
|
25
|
+
return col.width;
|
|
26
|
+
let max = col.header.length;
|
|
27
|
+
for (const row of rows) {
|
|
28
|
+
const val = row[col.key] ?? "";
|
|
29
|
+
if (val.length > max)
|
|
30
|
+
max = val.length;
|
|
31
|
+
}
|
|
32
|
+
return Math.min(max + 2, 30);
|
|
33
|
+
});
|
|
34
|
+
const pad = (text, width, align = "left") => {
|
|
35
|
+
const truncated = text.length > width ? text.slice(0, width - 1) + "…" : text;
|
|
36
|
+
if (align === "right")
|
|
37
|
+
return truncated.padStart(width);
|
|
38
|
+
return truncated.padEnd(width);
|
|
39
|
+
};
|
|
40
|
+
// Window visible rows
|
|
41
|
+
let startRow = 0;
|
|
42
|
+
if (rows.length > MAX_VISIBLE_ROWS) {
|
|
43
|
+
startRow = Math.max(0, selectedIndex - Math.floor(MAX_VISIBLE_ROWS / 2));
|
|
44
|
+
startRow = Math.min(startRow, rows.length - MAX_VISIBLE_ROWS);
|
|
45
|
+
}
|
|
46
|
+
const visibleRows = rows.slice(startRow, startRow + MAX_VISIBLE_ROWS);
|
|
47
|
+
// Header
|
|
48
|
+
const headerLine = columns
|
|
49
|
+
.map((col, i) => pad(col.header, colWidths[i], col.align))
|
|
50
|
+
.join(" ");
|
|
51
|
+
const separatorLine = "─".repeat(headerLine.length);
|
|
52
|
+
return ((0, jsx_runtime_1.jsxs)(ink_1.Box, { flexDirection: "column", children: [(0, jsx_runtime_1.jsx)(ink_1.Box, { children: (0, jsx_runtime_1.jsxs)(ink_1.Text, { bold: true, color: "white", children: [" ", headerLine] }) }), (0, jsx_runtime_1.jsx)(ink_1.Box, { children: (0, jsx_runtime_1.jsxs)(ink_1.Text, { dimColor: true, children: [" ", separatorLine] }) }), visibleRows.map((row, vi) => {
|
|
53
|
+
const actualIdx = startRow + vi;
|
|
54
|
+
const isSelected = actualIdx === selectedIndex;
|
|
55
|
+
const line = columns
|
|
56
|
+
.map((col, i) => pad(row[col.key] ?? "", colWidths[i], col.align))
|
|
57
|
+
.join(" ");
|
|
58
|
+
return ((0, jsx_runtime_1.jsx)(ink_1.Box, { children: (0, jsx_runtime_1.jsxs)(ink_1.Text, { color: isSelected ? "cyan" : "white", bold: isSelected, children: [isSelected ? "▸" : " ", " ", line] }) }, actualIdx));
|
|
59
|
+
}), rows.length > MAX_VISIBLE_ROWS && ((0, jsx_runtime_1.jsx)(ink_1.Box, { children: (0, jsx_runtime_1.jsxs)(ink_1.Text, { dimColor: true, children: [" ", "(", rows.length, " rows \u00B7 \u2191\u2193 navigate \u00B7 Enter select)"] }) })), rows.length <= MAX_VISIBLE_ROWS && rows.length > 0 && ((0, jsx_runtime_1.jsx)(ink_1.Box, { children: (0, jsx_runtime_1.jsx)(ink_1.Text, { dimColor: true, children: " (\u2191\u2193 navigate \u00B7 Enter select)" }) }))] }));
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=InteractiveTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InteractiveTable.js","sourceRoot":"","sources":["../../../src/tui/components/InteractiveTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type StepStatus = "pending" | "running" | "done" | "error";
|
|
2
|
+
export interface StepSpinnerProps {
|
|
3
|
+
step: number;
|
|
4
|
+
total: number;
|
|
5
|
+
label: string;
|
|
6
|
+
status: StepStatus;
|
|
7
|
+
detail?: string;
|
|
8
|
+
error?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function StepSpinner({ step, total, label, status, detail, error, }: StepSpinnerProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
//# sourceMappingURL=StepSpinner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StepSpinner.d.ts","sourceRoot":"","sources":["../../../src/tui/components/StepSpinner.tsx"],"names":[],"mappings":"AAMA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAElE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,KAAK,EACL,KAAK,EACL,MAAM,EACN,MAAM,EACN,KAAK,GACN,EAAE,gBAAgB,2CA2DlB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StepSpinner = StepSpinner;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const ink_1 = require("ink");
|
|
7
|
+
const SPINNER_FRAMES = ["◈", "◇", "◆", "◇"];
|
|
8
|
+
const SPINNER_INTERVAL = 120;
|
|
9
|
+
function StepSpinner({ step, total, label, status, detail, error, }) {
|
|
10
|
+
const [frame, setFrame] = (0, react_1.useState)(0);
|
|
11
|
+
(0, react_1.useEffect)(() => {
|
|
12
|
+
if (status !== "running")
|
|
13
|
+
return;
|
|
14
|
+
const timer = setInterval(() => {
|
|
15
|
+
setFrame((f) => (f + 1) % SPINNER_FRAMES.length);
|
|
16
|
+
}, SPINNER_INTERVAL);
|
|
17
|
+
return () => clearInterval(timer);
|
|
18
|
+
}, [status]);
|
|
19
|
+
const prefix = `Step ${step}/${total}`;
|
|
20
|
+
if (status === "pending") {
|
|
21
|
+
return ((0, jsx_runtime_1.jsx)(ink_1.Box, { children: (0, jsx_runtime_1.jsxs)(ink_1.Text, { dimColor: true, children: [" ", prefix, " \u2014 ", label] }) }));
|
|
22
|
+
}
|
|
23
|
+
if (status === "running") {
|
|
24
|
+
return ((0, jsx_runtime_1.jsx)(ink_1.Box, { flexDirection: "column", children: (0, jsx_runtime_1.jsx)(ink_1.Box, { children: (0, jsx_runtime_1.jsxs)(ink_1.Text, { color: "cyan", children: [" ", SPINNER_FRAMES[frame], " ", prefix, " \u2014 ", label, "..."] }) }) }));
|
|
25
|
+
}
|
|
26
|
+
if (status === "done") {
|
|
27
|
+
return ((0, jsx_runtime_1.jsxs)(ink_1.Box, { flexDirection: "column", children: [(0, jsx_runtime_1.jsx)(ink_1.Box, { children: (0, jsx_runtime_1.jsxs)(ink_1.Text, { color: "green", children: [" \u2713 ", prefix, " \u2014 ", label] }) }), detail && ((0, jsx_runtime_1.jsx)(ink_1.Box, { children: (0, jsx_runtime_1.jsxs)(ink_1.Text, { dimColor: true, children: [" \u2514 ", detail] }) }))] }));
|
|
28
|
+
}
|
|
29
|
+
// error
|
|
30
|
+
return ((0, jsx_runtime_1.jsxs)(ink_1.Box, { flexDirection: "column", children: [(0, jsx_runtime_1.jsx)(ink_1.Box, { children: (0, jsx_runtime_1.jsxs)(ink_1.Text, { color: "red", children: [" \u2717 ", prefix, " \u2014 ", label] }) }), error && ((0, jsx_runtime_1.jsx)(ink_1.Box, { children: (0, jsx_runtime_1.jsxs)(ink_1.Text, { color: "red", children: [" \u2514 ", error] }) }))] }));
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=StepSpinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StepSpinner.js","sourceRoot":"","sources":["../../../src/tui/components/StepSpinner.tsx"],"names":[],"mappings":";;AAiBA,kCAkEC;;AAnFD,iCAAmD;AACnD,6BAAgC;AAEhC,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC5C,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAa7B,SAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,KAAK,EACL,KAAK,EACL,MAAM,EACN,MAAM,EACN,KAAK,GACY;IACjB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAC,CAAC,CAAC,CAAC;IAEtC,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO;QACjC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC7B,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC,EAAE,gBAAgB,CAAC,CAAC;QACrB,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,MAAM,MAAM,GAAG,QAAQ,IAAI,IAAI,KAAK,EAAE,CAAC;IAEvC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,CACL,uBAAC,SAAG,cACF,wBAAC,UAAI,IAAC,QAAQ,yBAAI,MAAM,cAAK,KAAK,IAAQ,GACtC,CACP,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,CACL,uBAAC,SAAG,IAAC,aAAa,EAAC,QAAQ,YACzB,uBAAC,SAAG,cACF,wBAAC,UAAI,IAAC,KAAK,EAAC,MAAM,kBAAG,cAAc,CAAC,KAAK,CAAC,OAAG,MAAM,cAAK,KAAK,WAAW,GACpE,GACF,CACP,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,CACL,wBAAC,SAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,uBAAC,SAAG,cACF,wBAAC,UAAI,IAAC,KAAK,EAAC,OAAO,yBAAK,MAAM,cAAK,KAAK,IAAQ,GAC5C,EACL,MAAM,IAAI,CACT,uBAAC,SAAG,cACF,wBAAC,UAAI,IAAC,QAAQ,iCAAO,MAAM,IAAQ,GAC/B,CACP,IACG,CACP,CAAC;IACJ,CAAC;IAED,QAAQ;IACR,OAAO,CACL,wBAAC,SAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,uBAAC,SAAG,cACF,wBAAC,UAAI,IAAC,KAAK,EAAC,KAAK,yBAAK,MAAM,cAAK,KAAK,IAAQ,GAC1C,EACL,KAAK,IAAI,CACR,uBAAC,SAAG,cACF,wBAAC,UAAI,IAAC,KAAK,EAAC,KAAK,2BAAO,KAAK,IAAQ,GACjC,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type ToastVariant = "info" | "success" | "warning" | "error";
|
|
2
|
+
export interface ToastData {
|
|
3
|
+
id: string;
|
|
4
|
+
message: string;
|
|
5
|
+
variant: ToastVariant;
|
|
6
|
+
duration?: number;
|
|
7
|
+
}
|
|
8
|
+
export interface ToastProps {
|
|
9
|
+
toast: ToastData;
|
|
10
|
+
onDismiss: (id: string) => void;
|
|
11
|
+
}
|
|
12
|
+
export declare function Toast({ toast, onDismiss }: ToastProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export interface ToastContainerProps {
|
|
14
|
+
toasts: ToastData[];
|
|
15
|
+
onDismiss: (id: string) => void;
|
|
16
|
+
}
|
|
17
|
+
export declare function ToastContainer({ toasts, onDismiss }: ToastContainerProps): import("react/jsx-runtime").JSX.Element | null;
|
|
18
|
+
//# sourceMappingURL=Toast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Toast.d.ts","sourceRoot":"","sources":["../../../src/tui/components/Toast.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAEpE,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AASD,wBAAgB,KAAK,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,UAAU,2CAiBrD;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,wBAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,mBAAmB,kDAUxE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Toast = Toast;
|
|
4
|
+
exports.ToastContainer = ToastContainer;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
const ink_1 = require("ink");
|
|
8
|
+
const VARIANT_CONFIG = {
|
|
9
|
+
info: { icon: "◈", color: "cyan" },
|
|
10
|
+
success: { icon: "✓", color: "green" },
|
|
11
|
+
warning: { icon: "⚠", color: "yellow" },
|
|
12
|
+
error: { icon: "✗", color: "red" },
|
|
13
|
+
};
|
|
14
|
+
function Toast({ toast, onDismiss }) {
|
|
15
|
+
const { icon, color } = VARIANT_CONFIG[toast.variant];
|
|
16
|
+
(0, react_1.useEffect)(() => {
|
|
17
|
+
const timer = setTimeout(() => {
|
|
18
|
+
onDismiss(toast.id);
|
|
19
|
+
}, toast.duration ?? 5000);
|
|
20
|
+
return () => clearTimeout(timer);
|
|
21
|
+
}, [toast.id, toast.duration, onDismiss]);
|
|
22
|
+
return ((0, jsx_runtime_1.jsx)(ink_1.Box, { children: (0, jsx_runtime_1.jsxs)(ink_1.Text, { color: color, children: [icon, " ", toast.message] }) }));
|
|
23
|
+
}
|
|
24
|
+
function ToastContainer({ toasts, onDismiss }) {
|
|
25
|
+
if (toasts.length === 0)
|
|
26
|
+
return null;
|
|
27
|
+
return ((0, jsx_runtime_1.jsx)(ink_1.Box, { flexDirection: "column", children: toasts.map((toast) => ((0, jsx_runtime_1.jsx)(Toast, { toast: toast, onDismiss: onDismiss }, toast.id))) }));
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=Toast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Toast.js","sourceRoot":"","sources":["../../../src/tui/components/Toast.tsx"],"names":[],"mappings":";;AAwBA,sBAiBC;AAOD,wCAUC;;AA1DD,iCAAyC;AACzC,6BAAgC;AAgBhC,MAAM,cAAc,GAA0D;IAC5E,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE;IAClC,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE;IACtC,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE;IACvC,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE;CACnC,CAAC;AAEF,SAAgB,KAAK,CAAC,EAAE,KAAK,EAAE,SAAS,EAAc;IACpD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAEtD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACtB,CAAC,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC;QAC3B,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;IAE1C,OAAO,CACL,uBAAC,SAAG,cACF,wBAAC,UAAI,IAAC,KAAK,EAAE,KAAK,aACf,IAAI,OAAG,KAAK,CAAC,OAAO,IAChB,GACH,CACP,CAAC;AACJ,CAAC;AAOD,SAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAuB;IACvE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,OAAO,CACL,uBAAC,SAAG,IAAC,aAAa,EAAC,QAAQ,YACxB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACrB,uBAAC,KAAK,IAAgB,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,IAA5C,KAAK,CAAC,EAAE,CAAwC,CAC7D,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tui/index.tsx"],"names":[],"mappings":"AA+CA,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAwB/C"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.launchTUI = launchTUI;
|
|
7
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
+
const ink_1 = require("ink");
|
|
9
|
+
const App_1 = require("./App");
|
|
10
|
+
const fs_1 = __importDefault(require("fs"));
|
|
11
|
+
const path_1 = __importDefault(require("path"));
|
|
12
|
+
const os_1 = __importDefault(require("os"));
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
14
|
+
const pkg = require("../../package.json");
|
|
15
|
+
const CONFIG_PATH = path_1.default.join(os_1.default.homedir(), ".arc402", "config.json");
|
|
16
|
+
async function loadConfig() {
|
|
17
|
+
if (!fs_1.default.existsSync(CONFIG_PATH))
|
|
18
|
+
return {};
|
|
19
|
+
try {
|
|
20
|
+
return JSON.parse(fs_1.default.readFileSync(CONFIG_PATH, "utf-8"));
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return {};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
async function getBalance(rpcUrl, address) {
|
|
27
|
+
try {
|
|
28
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
29
|
+
const ethersLib = require("ethers");
|
|
30
|
+
const provider = new ethersLib.ethers.JsonRpcProvider(rpcUrl);
|
|
31
|
+
const bal = await Promise.race([
|
|
32
|
+
provider.getBalance(address),
|
|
33
|
+
new Promise((_, r) => setTimeout(() => r(new Error("timeout")), 2000)),
|
|
34
|
+
]);
|
|
35
|
+
return `${parseFloat(ethersLib.ethers.formatEther(bal)).toFixed(4)} ETH`;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async function launchTUI() {
|
|
42
|
+
const config = await loadConfig();
|
|
43
|
+
let walletDisplay;
|
|
44
|
+
if (config.walletContractAddress) {
|
|
45
|
+
const w = config.walletContractAddress;
|
|
46
|
+
walletDisplay = `${w.slice(0, 6)}...${w.slice(-4)}`;
|
|
47
|
+
}
|
|
48
|
+
let balance;
|
|
49
|
+
if (config.rpcUrl && config.walletContractAddress) {
|
|
50
|
+
balance = await getBalance(config.rpcUrl, config.walletContractAddress);
|
|
51
|
+
}
|
|
52
|
+
const { waitUntilExit } = (0, ink_1.render)((0, jsx_runtime_1.jsx)(App_1.App, { version: pkg.version, network: config.network, wallet: walletDisplay, balance: balance }));
|
|
53
|
+
await waitUntilExit();
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=index.js.map
|