'use client'; import { useShapeStore } from '@/store/shape-store'; import { useToolStore } from '@/store/tool-store'; import { useColorStore } from '@/store/color-store'; import type { ShapeType } from '@/types/shape'; import { Square, Circle, Minus, ArrowRight, Pentagon, Star, Triangle, Paintbrush, PenTool, } from 'lucide-react'; import { cn } from '@/lib/utils'; const SHAPES: Array<{ type: ShapeType; label: string; icon: React.ComponentType<{ className?: string }>; }> = [ { type: 'rectangle', label: 'Rectangle', icon: Square }, { type: 'ellipse', label: 'Ellipse', icon: Circle }, { type: 'line', label: 'Line', icon: Minus }, { type: 'arrow', label: 'Arrow', icon: ArrowRight }, { type: 'polygon', label: 'Polygon', icon: Pentagon }, { type: 'star', label: 'Star', icon: Star }, { type: 'triangle', label: 'Triangle', icon: Triangle }, ]; export function ShapePanel() { const { settings, setShapeType, setFill, setStroke, setStrokeWidth, setCornerRadius, setSides, setInnerRadius, setArrowHeadSize, setArrowHeadAngle, } = useShapeStore(); const { setActiveTool } = useToolStore(); const { primaryColor, setPrimaryColor } = useColorStore(); const handleShapeSelect = (type: ShapeType) => { setShapeType(type); setActiveTool('shape'); }; const handleFillColorChange = (color: string) => { setPrimaryColor(color); useShapeStore.getState().setFillColor(color); }; const handleStrokeColorChange = (color: string) => { useShapeStore.getState().setStrokeColor(color); }; return (
{/* Shape Types */}

Type

{SHAPES.map((shape) => ( ))}
{/* Fill and Stroke */}

Style

{/* Fill */}
setFill(e.target.checked)} className="rounded" />
{settings.fill && ( handleFillColorChange(e.target.value)} className="w-full h-8 rounded cursor-pointer" /> )}
{/* Stroke */}
setStroke(e.target.checked)} className="rounded" />
{settings.stroke && ( <> handleStrokeColorChange(e.target.value)} className="w-full h-8 rounded cursor-pointer" />
setStrokeWidth(Number(e.target.value))} className="w-full" />
{settings.strokeWidth}px
)}
{/* Shape-specific settings */}

Properties

{/* Rectangle: Corner Radius */} {settings.type === 'rectangle' && (
setCornerRadius(Number(e.target.value))} className="w-full" />
{settings.cornerRadius}px
)} {/* Polygon: Sides */} {settings.type === 'polygon' && (
setSides(Number(e.target.value))} className="w-full" />
{settings.sides}
)} {/* Star: Points and Inner Radius */} {settings.type === 'star' && ( <>
setSides(Number(e.target.value))} className="w-full" />
{settings.sides}
setInnerRadius(Number(e.target.value) / 100)} className="w-full" />
{Math.round(settings.innerRadius * 100)}%
)} {/* Arrow: Head Size and Angle */} {settings.type === 'arrow' && ( <>
setArrowHeadSize(Number(e.target.value))} className="w-full" />
{settings.arrowHeadSize}px
setArrowHeadAngle(Number(e.target.value))} className="w-full" />
{settings.arrowHeadAngle}°
)}
); }