Repository navigation
Editor: a Setup checklist for first-time setup; the camera picker moves to Camera (#168) - #182
Merged
Merged
Conversation
…es to Camera (#168) A Setup section at the top of the sidebar lists projector, output window, camera, framing, exposure and Scan, each with its state and the real control that does it (pressed, with its label and disabled reason, or a picker shown and focused). States come from status, the panel's last framing check and whether there's a scan; exposure is the engine's verdict. Framing and exposure are recommended: Scan stays enabled, and with a still camera and no exposure check the line beside Scan says so. Setup shows itself until there's a scan, then only when the projector, output window or camera needs doing again (it waits for the engine's answer about the scan, so it doesn't flash open). Camera opens by default until the first scan, and now holds the camera picker. Assisted-by: Claude Code:claude-opus-5-5
… starts; name the Choose buttons (#168) If the engine wasn't up when the Editor loaded, the latest-scan request failed and Setup's rules never engaged; the scan is now asked for again on reconnect until the engine answers. The camera panel tells the checklist when a check starts too (onChange), so its button shows the busy state. Choose buttons say what they choose to a screen reader. Assisted-by: Claude Code:claude-opus-5-5
…a reason names Camera (#168) Behind the Vite proxy an engine that's down answers /api/scan/latest with 502, which counted as "no scan": the reconnect never asked again, so a saved scan stayed hidden and Setup stayed open until a reload. Only 200 or 404 count now (scanAnswered), and a failed request doesn't. The no-camera scan blocker points at the Camera section, where the picker is now. Assisted-by: Claude Code:claude-opus-5-5
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #168
What changes
setupView.ts, pure;setupPanel.ts, the list). Steps in order: Projector, Output window, Camera, Framing, Exposure, Scan, each with its state and a button:#open-output,#check-framing,#calibrate,#scan), carrying its label, disabled state and Camera: say why buttons are disabled, disable them during a scan; Edge glow threshold and Smoothing hints (#173) #178 reason.outputOffProjector, now shared withdescribeStatus), the camera panel's last framing check (describeFraming), the engine's exposure verdict (camera.exposure.verdict), anddescribeStatus().scanReason. No thresholds copied.!, not blocking. Scan stays enabled. With a still camera and no exposure check, the line beside Scan says "Exposure not checked: the scan checks it first, and stops if it's wrong" (scanWarning), so it shows even after the checklist folds.setupNeeded). These rules wait for the engine's answer about the latest scan, so a returning user doesn't see Setup flash open; if the engine is down at load, the scan is asked for again on reconnect. Camera opens by default until the first scan; your saved choice still wins (foldOpen's newopenFirst). Folds follow scan messages, not only status.framing()and callsonChangewhen a framing or exposure check starts and ends, so the checklist's button shows the busy state and the result at once. (The exposure verdict also arrives with the status the engine broadcasts after calibrating.)Not done: no separate "Setup" link near Scan; the section's heading is how to reach it later. I left the "Before scanning" hint as it was.
Tests
setupView.test.ts: each step's states, order,setupNeeded,scanWarning.setupPanel.browser.test.ts(real markup): Setup is the first section; the picker sits with preview, checks and scan settings; steps press the real control and mirror its label, disabled state and reason; a picker step opens its section and focuses; rows update in place.folds.test.ts: Setup folded unless needed; Camera open by default before a scan, saved choice wins.cameraPanel.browser.test.ts:framing()andonChange(start and end); framing forgotten on camera change.main.tswiring (applyFolds, renderScanButton) has no test; no test mountsmain.ts. I checked the rendered list in a browser screenshot of the real page markup, not with the engine running.Behavior to know
#open-outputfrom its own click handler, so the user gesture should carry through to the window and the placement prompt, but I didn't run it with the engine.