Workspace has no image rotate, flip, or crop UI — UploadedImage type has rotation field and the canvas honors it, but no controls #174
Labels
No labels
blocked:commit-ready-failed
blocked:gate-fetch
blocked:gate-lint
blocked:gate-plan
blocked:gate-research
blocked:needs-attention
blocked:needs-decision
blocked:needs-human
blocked:no-changes
blocked:verify-failed
bug
deferred
feature-request
in-progress
needs-decompose
needs-triage
quickfix
security/medium
triage-approved
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Mark/Kimi_Agent_Brother_10_Digitizing_App#174
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Finding
src/components/workspace/types.ts:93defines theUploadedImagetype with arotation: numberfield.src/components/workspace/canvasRenderer.ts:274honors it:ctx.rotate((image.rotation * Math.PI) / 180);.But there is no UI to set the rotation.
grep -rn 'Rotate\b\|RotateCw\|rotate.*90\|rotate.*45' src/components/workspace/returns zero matches. A user who uploads a sideways photo of their sketch can't fix it; they have to re-take the photo.The Help page at line 143 promises: "You can work on designs larger than your target hoop and crop or resize before exporting." The workspace has neither crop nor resize UI.
A power user wants:
Where
UploadedImagetype:src/components/workspace/types.ts:93(rotation is there)src/components/workspace/canvasRenderer.ts:274src/components/workspace/src/pages/Help.tsx:143Suggested fix shape
Add an image-editing toolbar that appears when an image is uploaded but not yet digitized. The toolbar can be a small floating overlay on the canvas (top-right of the image bounds) with 4 buttons:
For crop, the toolbar opens a selection rectangle mode: the user drags a rectangle on the image, clicks "Crop to selection", the
image.srcandimage.width/image.heightare updated.For resize, a simple slider that scales the image (0.5× to 2×) without changing the source.
The reducer needs a new
UPDATE_IMAGEaction that takes a partial update and applies it.Severity
Medium. A user with a sideways photo can't fix it without re-uploading. The Help page promise is unfulfilled.
Discovered by
Gap analysis (2026-10-02) of workspace image affordances.
Related
Fixed in
5fa763donmain.What landed
ImageEditToolbar(src/components/workspace/ImageEditToolbar.tsx) floating at the top of the canvas duringappState='image-uploaded'. Five controls:UPDATE_IMAGE { updates: Partial<UploadedImage> }that merges intostate.uploadedImage, wrapped inpushHistoryso every edit round-trips through undo/redo.id/srcare intentionally not patchable through this action — replacing the source remains aSET_IMAGE.HistoryStategained anuploadedImageslot; UNDO/REDO now copy it back alongside the rest of the workspace. The previous gap (image edits silently lost on undo) was the same shape as #158's History/UI mismatch.Scope explicitly deferred
width/height/src. Filed as a follow-up.Verification
tsc -b && vite build— exit 0.eslint src/— clean.vitest run— 776/779 (3 pre-existingEditorCanvas (#170)failures unrelated to this change). New tests:src/components/workspace/issue-174.test.tsx(16 tests) +src/pages/Help.test.tsx(+1 test).