'use client'; import { useEffect } from 'react'; import { useCanvasStore, useLayerStore } from '@/store'; import { useHistoryStore } from '@/store/history-store'; import { CanvasWithTools } from '@/components/canvas/canvas-with-tools'; import { FileMenu } from './file-menu'; import { ToolOptions } from './tool-options'; import { PanelDock } from './panel-dock'; import { ToolPalette } from '@/components/tools'; import { useKeyboardShortcuts } from '@/hooks/use-keyboard-shortcuts'; import { useFileOperations } from '@/hooks/use-file-operations'; import { useDragDrop } from '@/hooks/use-drag-drop'; import { useClipboard } from '@/hooks/use-clipboard'; import { createLayerWithHistory } from '@/lib/layer-operations'; import { Plus, ZoomIn, ZoomOut, Maximize, Undo, Redo, Upload } from 'lucide-react'; import { cn } from '@/lib/utils'; export function EditorLayout() { const { zoom, zoomIn, zoomOut, zoomToFit } = useCanvasStore(); const { layers } = useLayerStore(); const { undo, redo, canUndo, canRedo } = useHistoryStore(); const { handleDataTransfer } = useFileOperations(); // Enable keyboard shortcuts useKeyboardShortcuts(); // Enable drag & drop const { isDragging, handleDragOver, handleDragLeave, handleDrop } = useDragDrop(handleDataTransfer); // Enable clipboard paste useClipboard(handleDataTransfer); // Initialize with a default layer (without history) useEffect(() => { if (layers.length === 0) { const { createLayer } = useLayerStore.getState(); createLayer({ name: 'Background', width: 800, height: 600, fillColor: '#ffffff', }); } }, []); const handleNewLayer = () => { createLayerWithHistory({ name: `Layer ${layers.length + 1}`, width: 800, height: 600, }); }; const handleZoomToFit = () => { // Approximate viewport size (accounting for panels) const viewportWidth = window.innerWidth - 344; // Subtract sidebar width (64px tools + 280px panels) const viewportHeight = window.innerHeight - 48; // Subtract toolbar height zoomToFit(viewportWidth, viewportHeight); }; return (
Drop image or project file
Supports: PNG, JPG, WEBP, .paint