import type { Color } from "@yaakapp-internal/plugins"; import { platform } from "@yaakapp-internal/platform"; import { settingsAtom } from "@yaakapp-internal/models"; import { HeaderSize, Heading, Icon, type IconProps, LoadingIcon } from "@yaakapp-internal/ui"; import classNames from "classnames"; import { useAtomValue } from "jotai"; import { useState } from "react"; import { openWorkspaceFromSyncDir } from "../commands/openWorkspaceFromSyncDir"; import { showDialog } from "../lib/dialog"; import { importData } from "../lib/importData"; import { createExampleWorkspace, createFreshWorkspace, type OnboardingChoice, recordOnboardingChoice, } from "../lib/onboarding"; import { showErrorToast } from "../lib/toast"; import { CloneGitRepositoryDialog } from "./CloneGitRepositoryDialog"; import { Button } from "./core/Button"; /** Shown instead of a workspace when there are none. */ export function Onboarding() { const settings = useAtomValue(settingsAtom); const { capabilities } = platform; const canImport = capabilities.plugins; const showAlreadyUsing = capabilities.localFiles || capabilities.git || canImport; const [busy, setBusy] = useState(null); const choose = (choice: OnboardingChoice, run: () => Promise | void) => async () => { recordOnboardingChoice(choice); setBusy(choice); try { await run(); } catch (err) { showErrorToast({ id: "onboarding-failed", title: "Something went wrong", message: String(err), }); } finally { setBusy(null); } }; return (
How would you like to get started?

{canImport ? "Bring over existing work, try a real API, or start fresh." : "Try a real API, or start fresh."}

{canImport && ( importData.mutateAsync())} /> )}
{showAlreadyUsing && (
Already using Yaak?
{capabilities.localFiles && ( )} {capabilities.git && ( )} {canImport && ( )}
)}
); } function StartOption({ color, icon, title, description, onClick, busy, disabled, }: { color: Color; icon: IconProps["icon"]; title: string; description: string; onClick: () => void; busy: boolean; disabled: boolean; }) { return ( ); }