"use client" import { useRef, useState } from "react" import { useEditorStore } from "@/lib/store" import { ComponentRenderer } from "./component-renderer" import { cn } from "@/lib/utils" export function Canvas() { const canvasRef = useRef(null) const [isDragging, setIsDragging] = useState(false) const [dragStart, setDragStart] = useState<{ x: number; y: number } | null>(null) const [selectedComponents, setSelectedComponents] = useState>(new Set()) const { components, selectedComponent, selectComponent, moveComponent, updateComponent } = useEditorStore() const handleMouseDown = (e: React.MouseEvent) => { if (e.target === canvasRef.current) { // Clicked on empty canvas, deselect all selectComponent(null) setSelectedComponents(new Set()) } } const handleComponentClick = (componentId: string, e: React.MouseEvent) => { e.stopPropagation() const component = components.find(c => c.id === componentId) if (component) { selectComponent(component) setSelectedComponents(new Set([componentId])) } } const handleComponentMouseDown = (componentId: string, e: React.MouseEvent) => { e.stopPropagation() const component = components.find(c => c.id === componentId) if (component) { selectComponent(component) setSelectedComponents(new Set([componentId])) // Start dragging setIsDragging(true) setDragStart({ x: e.clientX, y: e.clientY }) } } const handleMouseMove = (e: React.MouseEvent) => { if (isDragging && dragStart && selectedComponent) { const deltaX = e.clientX - dragStart.x const deltaY = e.clientY - dragStart.y const newPosition = { x: Math.max(0, selectedComponent.position.x + deltaX), y: Math.max(0, selectedComponent.position.y + deltaY) } moveComponent(selectedComponent.id, newPosition) setDragStart({ x: e.clientX, y: e.clientY }) } } const handleMouseUp = () => { setIsDragging(false) setDragStart(null) } return (
{/* Canvas Grid Background */}
{/* Components */} {components.map((component) => (
handleComponentClick(component.id, e)} onMouseDown={(e) => handleComponentMouseDown(component.id, e)} >
))} {/* Drop Zone Indicator */} {isDragging && (
)} {/* Empty State */} {components.length === 0 && (
🎨

No components yet

Drag components from the palette to get started

)}
) }