"use client"; import { ArrowLeft, Command, FolderOpen, Moon, Search, Sun } from "lucide-react"; import Link from "next/link"; import Image from "next/image"; import { useEffect, useState } from "react"; import { useRouter } from "next/navigation"; import { motion } from "framer-motion"; import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/ui/primitives/tooltip"; import { Popover, PopoverContent, PopoverTrigger, } from "@/components/ui/primitives/popover"; import { Dialog, DialogContent, DialogHeader, DialogTitle, } from "@/components/ui/primitives/dialog"; import { cn } from "@/lib/utils"; import { useViewer } from "@pascal-app/viewer"; import { useProjectStore } from "@/features/community/lib/projects/store"; import { useCommandPalette } from "@/components/ui/command-palette"; function OpenProjectModal({ open, onOpenChange, }: { open: boolean; onOpenChange: (open: boolean) => void; }) { const router = useRouter(); const projects = useProjectStore((s) => s.projects); const activeProject = useProjectStore((s) => s.activeProject); const fetchProjects = useProjectStore((s) => s.fetchProjects); useEffect(() => { if (open && projects.length === 0) { fetchProjects(); } }, [open, projects.length, fetchProjects]); return ( Open project
{projects.length === 0 ? (

No projects found

) : ( projects.map((project) => { const isActive = project.id === activeProject?.id; return ( ); }) )}
); } export type PanelId = "site" | "settings"; interface IconRailProps { activePanel: PanelId; onPanelChange: (panel: PanelId) => void; className?: string; } const panels: { id: PanelId; iconSrc: string; label: string }[] = [ { id: "site", iconSrc: "/icons/level.png", label: "Site" }, { id: "settings", iconSrc: "/icons/settings.png", label: "Settings" }, ]; export function IconRail({ activePanel, onPanelChange, className, }: IconRailProps) { const theme = useViewer((state) => state.theme); const setTheme = useViewer((state) => state.setTheme); const [mounted, setMounted] = useState(false); const [isMenuOpen, setIsMenuOpen] = useState(false); const [isOpenProjectOpen, setIsSwitchProjectOpen] = useState(false); useEffect(() => { setMounted(true); }, []); const handleOpenProject = () => { setIsMenuOpen(false); setIsSwitchProjectOpen(true); }; return ( <>
{/* Pascal logo — app menu */} setIsMenuOpen(false)} > Back to community
{/* Divider */}
{panels.map((panel) => { const isActive = activePanel === panel.id; return ( {panel.label} ); })} {/* Spacer */}
{/* Theme Toggle */} {mounted && ( Toggle theme )}
); } export { panels };