import { Popover, PopoverContent, PopoverTrigger } from "./ui/popover"; import { useGrimoire } from "@/core/state"; import type { LayoutConfig } from "@/types/app"; import { cn } from "@/lib/utils"; import { Sparkles, SplitSquareHorizontal, SplitSquareVertical, } from "lucide-react"; interface WorkspaceSettingsProps { open: boolean; onOpenChange: (open: boolean) => void; children: React.ReactNode; } export function WorkspaceSettings({ open, onOpenChange, children, }: WorkspaceSettingsProps) { const { state, updateLayoutConfig } = useGrimoire(); const config = state.layoutConfig; // Early return if no config available if (!config) { return null; } const setInsertionMode = (mode: LayoutConfig["insertionMode"]) => { updateLayoutConfig({ insertionMode: mode }); }; const setSplitPercentage = (value: number) => { updateLayoutConfig({ splitPercentage: value }); }; const modes: Array<{ id: LayoutConfig["insertionMode"]; label: string; icon: React.ComponentType<{ className?: string }>; }> = [ { id: "smart", label: "Balanced", icon: Sparkles }, { id: "row", label: "Horizontal", icon: SplitSquareHorizontal }, { id: "column", label: "Vertical", icon: SplitSquareVertical }, ]; return ( {children}
Insert Mode
{modes.map((mode) => { const Icon = mode.icon; const isActive = config.insertionMode === mode.id; return ( ); })}
Split {config.splitPercentage}/{100 - config.splitPercentage}
setSplitPercentage(Number(e.target.value))} className="w-full h-1.5 bg-muted rounded-lg appearance-none cursor-pointer accent-accent" />
); }