import { useEffect } from "react"; import { AnimatePresence, motion } from "framer-motion"; import { useGalleryStore } from "../../store"; import { StepWelcome } from "./StepWelcome"; import { StepAddLibrary } from "./StepAddLibrary"; import { StepPipeline } from "./StepPipeline"; import { StepGalleryPreview } from "./StepGalleryPreview"; import { StepSearchDemo } from "./StepSearchDemo"; import { StepViews } from "./StepViews"; import { StepAiFeatures } from "./StepAiFeatures"; import { StepUpdates } from "./StepUpdates"; const STEPS: { id: string; title: string; component: () => React.ReactNode }[] = [ { id: "welcome", title: "Welcome", component: () => }, { id: "library", title: "Your library", component: () => }, { id: "pipeline", title: "Background work", component: () => }, { id: "gallery", title: "The gallery", component: () => }, { id: "search", title: "Search", component: () => }, { id: "views", title: "Views", component: () => }, { id: "ai", title: "AI features", component: () => }, { id: "updates", title: "Staying current", component: () => }, ]; export function OnboardingOverlay() { const onboardingOpen = useGalleryStore((s) => s.onboardingOpen); const onboardingStep = useGalleryStore((s) => s.onboardingStep); const setOnboardingStep = useGalleryStore((s) => s.setOnboardingStep); const completeOnboarding = useGalleryStore((s) => s.completeOnboarding); useEffect(() => { if (!onboardingOpen) return; const handleKeyDown = (event: KeyboardEvent) => { if (event.key === "Escape") completeOnboarding(); }; window.addEventListener("keydown", handleKeyDown); return () => window.removeEventListener("keydown", handleKeyDown); }, [onboardingOpen, completeOnboarding]); if (!onboardingOpen) return null; const step = STEPS[Math.min(onboardingStep, STEPS.length - 1)]; const isFirst = onboardingStep === 0; const isLast = onboardingStep >= STEPS.length - 1; return (
{/* Header */}

Step {onboardingStep + 1} of {STEPS.length}

{step.title}

{STEPS.map((s, i) => (
{/* Step body */}
{step.component()}
{/* Footer */}
); }