import { Box, useApp, useInput } from "ink"; import { use, useState, type ComponentType, type ReactNode } from "react"; import { ListBox } from "./components/ui/ListBox.js"; import type { DbInterface } from "../db/types/DbInterface.js"; import { DbProvider } from "../react/contexts/Db.js"; import { UsersPanel } from "./components/panels/UsersPanel.js"; import { BgColorContext } from "./contexts/BgColor.js"; import { FocusManager, useActive } from "./contexts/FocusManager.js"; import { Provider } from "../react/store/react.js"; import { createStore, type Store } from "../react/store/store.js"; import { AbodesPanel } from "./components/panels/AbodesPanel.js"; import { LoginPanel } from "./components/panels/LoginPanel.js"; import { PopupManager } from "../react/contexts/PopupManager.js"; function AppWrapper({ children, db, store, bgColor, }: { children: ReactNode; db: DbInterface; store: Store; bgColor?: string; }) { return ( {children} ); } export type CollectionType = "users" | "abodes" | "apikeys" | "notes"; const collectionTypes: CollectionType[] = [ "users", "abodes", "apikeys", "notes", ]; const collectionTypeDisplay: Record = { users: "Users", abodes: "Abodes", apikeys: "API Keys", notes: "Notes", }; const collections: Record = { users: UsersPanel, abodes: AbodesPanel, apikeys: () => null, notes: () => null, }; function App() { const app = useApp(); const isActive = useActive(); useInput( (input, key) => { if (input === "q" || key.escape) app.exit(); }, { isActive } ); const [activeCollection, setActiveCollection] = useState("users"); const CollectionPanel = collections[activeCollection]; return ( ); } export function app({ db, bgColor, store = createStore(), }: { db: DbInterface; bgColor?: string; store?: Store; }) { return ( ); }