File size: 1,826 Bytes
5448d8b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | import React, { useState } from "react";
import { render, Box, Text, useInput } from "ink";
import { MenuSelect } from "../tui-components/MenuSelect.jsx";
function InterfaceMenuApp({ version, baseUrl, hasUpdate, latestVersion, onChoice }) {
return (
<Box flexDirection="column" paddingX={2} paddingY={1}>
<Box borderStyle="double" borderColor="cyan" paddingX={2} paddingY={1} flexDirection="column">
<Text bold color="cyan">
β‘ OmniRoute {version ? `v${version}` : ""}
</Text>
<Text dimColor>{baseUrl}</Text>
</Box>
{hasUpdate && (
<Box marginTop={1}>
<Text color="yellow">
β Update available: v{latestVersion} (run `omniroute update --apply`)
</Text>
</Box>
)}
<Box marginTop={1}>
<MenuSelect
items={[
{ label: "π Open Web UI in Browser", hint: "(default)" },
{ label: "π» Interactive TUI Dashboard" },
{ label: "π Start in Background (daemon)" },
{ label: "π Show Live Logs" },
{ label: "πͺ Exit" },
]}
onSelect={(item) => onChoice(item.label)}
/>
</Box>
<Box marginTop={1}>
<Text dimColor>[ββ] navigate [Enter] select [1-5] shortcut [q] exit</Text>
</Box>
</Box>
);
}
export async function showInterfaceMenu({ version, baseUrl, hasUpdate, latestVersion } = {}) {
return new Promise((resolve) => {
const { unmount } = render(
<InterfaceMenuApp
version={version}
baseUrl={baseUrl}
hasUpdate={hasUpdate}
latestVersion={latestVersion}
onChoice={(choice) => {
unmount();
resolve(choice);
}}
/>
);
});
}
|