Commit Graph

5 Commits

Author SHA1 Message Date
5f389c7b71 feat(phase-13): implement canvas resize dialog with multiple methods
Add comprehensive canvas resize functionality with three resize methods.

Features:
- Canvas Size dialog accessible from Image menu
- Three resize methods:
  * Scale: Stretch/shrink content to fit new size
  * Crop: Crop or center content without scaling
  * Expand: Expand canvas, center existing content
- Maintain aspect ratio toggle with link/unlink button
- Dimension validation (1-10000 pixels)
- Real-time preview of new dimensions
- Applies to all layers simultaneously
- Toast notifications for success/errors

Changes:
- Created components/modals/canvas-resize-dialog.tsx
- Added "Canvas Size..." menu item to Image menu
- Integrated with useLayerStore for layer updates
- Uses toast utility for user feedback
- Validates dimensions before applying
- Supports linked/unlinked aspect ratio

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-21 20:09:52 +01:00
c97ec454f7 feat: add comprehensive Filters & Adjustments dialog with live preview
Implements professional image filter system with real-time preview:

**Adjustments Dialog** (`components/modals/adjustments-dialog.tsx`):
- Live preview canvas (max 400x400px) with real-time filter updates
- Organized filter categories: Color Adjustments, Filters, Effects
- 10 filter types with adjustable parameters:
  - **Brightness**: -100 to +100 adjustment
  - **Contrast**: -100 to +100 adjustment
  - **Hue/Saturation**: Hue rotation (±180°), Saturation (±100%), Lightness (±100%)
  - **Blur**: Gaussian blur with radius 1-50px
  - **Sharpen**: Amount 0-100%
  - **Invert**: One-click color inversion
  - **Grayscale**: Convert to monochrome
  - **Sepia**: Vintage sepia tone effect
  - **Threshold**: Binary black/white with adjustable threshold
  - **Posterize**: Reduce colors to 2-256 levels
- Slider controls for all adjustable parameters
- Reset button to restore default values
- Apply/Cancel actions with undo support
- Uses FilterCommand for history integration

**Image Menu** (`components/editor/image-menu.tsx`):
- New "Image" menu in header bar next to "File"
- "Filters & Adjustments..." menu item opens dialog
- Organized location for image-related operations
- Extensible for future image operations

**Integration**:
- Added Image menu to editor layout header
- Positioned between title and controls
- Keyboard-accessible with proper ARIA labels

**Technical Features**:
- Async filter application using Web Workers for large images
- Non-destructive editing with undo/redo support
- Real-time preview updates as sliders adjust
- FilterCommand integration for history
- Canvas cloning for before/after states
- Optimized preview rendering (scaled to 400px max)

**User Experience**:
- Modal dialog with backdrop
- Sidebar filter list with hover states
- Large preview area showing filter results
- Smooth slider interactions
- Instant visual feedback
- Professional Photoshop-like interface

All filters tested and working with undo/redo support.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-21 19:36:38 +01:00
0142b31a38 fix: remove deprecated text-dialog component causing build errors
The text-dialog modal approach was replaced by the on-canvas text editor.
This file referenced old TextStore properties (isDialogOpen, clickPosition)
that no longer exist, causing TypeScript compilation errors.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-21 15:08:43 +01:00
fea87d3a1e feat: implement comprehensive text tool (Phase 11)
Add complete text rendering system with the following features:

**Text Tool Core:**
- TextTool class with click-to-place text functionality
- Text cursor and pointer event handling
- Integration with DrawCommand for undo/redo support

**Text Rendering:**
- Multi-line text support with line height control
- Custom letter spacing
- Text alignment (left/center/right)
- Font families: 13 web-safe fonts + 14 popular Google Fonts
- Dynamic Google Font loading via Web Font Loader API
- Font styles (normal/italic) and weights (100-900)

**Text Dialog UI:**
- Full-featured text editor dialog
- Live preview of text with all formatting
- Font family selection (web-safe + Google Fonts)
- Font size (8-500px), style, and weight controls
- Color picker with hex input
- Text alignment options
- Line height slider (0.5-3x)
- Letter spacing slider (-10 to 50px)
- Multi-line text input with textarea

**State Management:**
- text-store with Zustand + persist middleware
- All text settings preserved across sessions
- Dialog state management (open/close)
- Click position tracking

**Integration:**
- Added text tool to tool palette with Type icon
- Registered TextTool in canvas tool system
- Added TextDialog to editor layout
- Full type safety with TypeScript interfaces

**Undoable:**
- Text rendering fully integrated with command pattern
- Each text insertion creates single undo point
- Proper before/after state capture

This completes Phase 11 of the implementation plan, marking
the transition from MVP to a fully-featured image editor.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-21 09:45:05 +01:00
b93ae377d0 feat(phase-6): implement comprehensive file operations system
This commit completes Phase 6 of the paint-ui implementation, adding full
file import/export capabilities with drag-drop and clipboard support.

**New Files:**
- lib/file-utils.ts: Core file operations (open, save, export, project format)
- hooks/use-file-operations.ts: React hook for file operations
- hooks/use-drag-drop.ts: Drag & drop state management
- hooks/use-clipboard.ts: Clipboard paste event handling
- components/editor/file-menu.tsx: File menu dropdown component
- components/modals/export-dialog.tsx: Export dialog with format/quality options
- components/modals/new-image-dialog.tsx: New image dialog with presets
- components/modals/index.ts: Modals barrel export

**Updated Files:**
- components/editor/editor-layout.tsx: Integrated FileMenu, drag-drop overlay, clipboard paste
- components/editor/index.ts: Added file-menu export

**Features:**
-  Create new images with dimension presets (Full HD, HD, 800x600, custom)
-  Open image files (PNG, JPG, WEBP) as new layers
-  Save/load .paint project files (JSON with base64 layer data)
-  Export as PNG/JPEG/WEBP with quality control
-  Drag & drop file upload with visual overlay
-  Clipboard paste support (Ctrl+V)
-  File type validation and error handling
-  DataTransfer API integration for unified file handling

**Project File Format (.paint):**
- JSON structure with version, dimensions, layer metadata
- Base64-encoded PNG data for each layer
- Preserves layer properties (opacity, blend mode, order, visibility)

Build verified: ✓ Compiled successfully in 1233ms

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-21 02:06:49 +01:00