import { createMemo, For, Match, Switch } from "solid-js" import { Button } from "@opencode-ai/ui/button" import { Logo } from "@opencode-ai/ui/logo" import { useLayout } from "@/context/layout" import { useNavigate } from "@solidjs/router" import { base64Encode } from "@opencode-ai/util/encode" import { Icon } from "@opencode-ai/ui/icon" import { usePlatform } from "@/context/platform" import { DateTime } from "luxon" import { useDialog } from "@opencode-ai/ui/context/dialog" import { DialogSelectDirectory } from "@/components/dialog-select-directory" import { DialogSelectServer } from "@/components/dialog-select-server" import { useServer } from "@/context/server" import { useGlobalSync } from "@/context/global-sync" import { useLanguage } from "@/context/language" export default function Home() { const sync = useGlobalSync() const layout = useLayout() const platform = usePlatform() const dialog = useDialog() const navigate = useNavigate() const server = useServer() const language = useLanguage() const homedir = createMemo(() => sync.data.path.home) const recent = createMemo(() => { return sync.data.project .slice() .sort((a, b) => (b.time.updated ?? b.time.created) - (a.time.updated ?? a.time.created)) .slice(0, 5) }) const serverDotClass = createMemo(() => { const healthy = server.healthy() if (healthy === true) return "bg-icon-success-base" if (healthy === false) return "bg-icon-critical-base" return "bg-border-weak-base" }) function openProject(directory: string) { layout.projects.open(directory) server.projects.touch(directory) navigate(`/${base64Encode(directory)}`) } async function chooseProject() { function resolve(result: string | string[] | null) { if (Array.isArray(result)) { for (const directory of result) { openProject(directory) } } else if (result) { openProject(result) } } if (platform.openDirectoryPickerDialog && server.isLocal()) { const result = await platform.openDirectoryPickerDialog?.({ title: language.t("command.project.open"), multiple: true, }) resolve(result) } else { dialog.show( () => , () => resolve(null), ) } } return (
0}>
{language.t("home.recentProjects")}
    {(project) => ( )}
{language.t("home.empty.title")}
{language.t("home.empty.description")}
) }