import React, { useState, useCallback } from "react"; import { render, Box, Text, useApp, useInput } from "ink"; import MainMenu from "./screens/MainMenu.jsx"; import FrpMenu from "./screens/FrpMenu.jsx"; import TokenPrompt from "./screens/TokenPrompt.jsx"; import ProxyForm from "./screens/ProxyForm.jsx"; import ProxyList from "./screens/ProxyList.jsx"; import PlanPreview from "./screens/PlanPreview.jsx"; import RunLog from "./screens/RunLog.jsx"; import FrpConfigForm from "./screens/FrpConfigForm.jsx"; import SshKeyPrompt from "./screens/SshKeyPrompt.jsx"; function App() { const { exit } = useApp(); const [stack, setStack] = useState([{ name: "main" }]); const screen = stack[stack.length - 1]; const push = useCallback((next) => { setStack((current) => [...current, next]); }, []); const replace = useCallback((next) => { setStack((current) => [...current.slice(0, -1), next]); }, []); const back = useCallback(() => { setStack((current) => (current.length > 1 ? current.slice(0, -1) : current)); }, []); const home = useCallback(() => { setStack([{ name: "main" }]); }, []); useInput((input, key) => { if (key.escape && stack.length > 1 && screen.name !== "run") { back(); } if (input === "q" && screen.name === "main") { exit(); } }); const nav = { push, replace, back, home, exit }; return (
{renderScreen(screen, nav)}