The crop tool was previously not connected to the canvas component, preventing it
from receiving pointer events and displaying its overlay. Changes:
- Added cropOverlayNeedsUpdate state to trigger re-renders when crop changes
- Added crop tool overlay rendering in main canvas render effect
- Added crop tool pointer handlers in handlePointerDown, handlePointerMove, and
handlePointerUp
- Crop tool now creates temporary canvas contexts for state management while
drawing overlay on display canvas
- Crop overlay is properly transformed with zoom and pan transformations
The crop tool now works correctly: it displays the crop rectangle with handles,
responds to dragging to define/move/resize the crop area, and updates in real-time.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>