fix(ui): Calibrate Printer view overflows window pushing sidebar off-screen; no Escape exit #163

Closed
opened 2026-09-13 21:23:00 +01:00 by gronod · 0 comments
Owner

Description

Opening "Calibrate Printer" (#btnCalibratePrinter) overflows the window: the 270 pt sidebar is pushed beyond the left edge. The Stage 0 dashboard also has no Escape / cancel-action shortcut; the only exit is "Return to Profiling" (#btnCalReturn).

Root cause

  1. CalibrationView.swift uses a macOS Form with Spacer() inside row HStacks → unbounded ideal width.
  2. RootView.swift right content column lacks .frame(maxWidth: .infinity, maxHeight: .infinity), so the HStack widens beyond the window; macOS centers the oversized root and the sidebar lands at negative X.
  3. No ScrollView around the dashboard; only exit has no .cancelAction shortcut.

Acceptance criteria

  • Sidebar stays fully on-screen when Stage 0 opens (btnCalibratePrinter.frame.minX >= 0).
  • RootView right column constrained with .frame(maxWidth: .infinity, maxHeight: .infinity).
  • CalibrationView uses ScrollView + section cards matching Stages 1–5 (no Form).
  • #btnCalReturn has .keyboardShortcut(.cancelAction) (Escape exits).
  • Log uses shared ProcessLogView (calLogContainer / calLog).
  • docs/21-ui-reference.md Stage 0 id list updated (btnCalReturn, calNeutralEmphasis).
  • UI tests cover sidebar position and dismissal.
### Description Opening "Calibrate Printer" (`#btnCalibratePrinter`) overflows the window: the 270 pt sidebar is pushed beyond the left edge. The Stage 0 dashboard also has no Escape / cancel-action shortcut; the only exit is "Return to Profiling" (#btnCalReturn). ### Root cause 1. `CalibrationView.swift` uses a macOS `Form` with `Spacer()` inside row HStacks → unbounded ideal width. 2. `RootView.swift` right content column lacks `.frame(maxWidth: .infinity, maxHeight: .infinity)`, so the HStack widens beyond the window; macOS centers the oversized root and the sidebar lands at negative X. 3. No `ScrollView` around the dashboard; only exit has no `.cancelAction` shortcut. ### Acceptance criteria - [x] Sidebar stays fully on-screen when Stage 0 opens (`btnCalibratePrinter.frame.minX >= 0`). - [x] RootView right column constrained with `.frame(maxWidth: .infinity, maxHeight: .infinity)`. - [x] `CalibrationView` uses `ScrollView` + section cards matching Stages 1–5 (no `Form`). - [x] `#btnCalReturn` has `.keyboardShortcut(.cancelAction)` (Escape exits). - [x] Log uses shared `ProcessLogView` (`calLogContainer` / `calLog`). - [x] `docs/21-ui-reference.md` Stage 0 id list updated (`btnCalReturn`, `calNeutralEmphasis`). - [x] UI tests cover sidebar position and dismissal.
gronod added the Kind/Bug
Priority
High
2
Project/ICCery-v2Bug/UI
labels 2026-09-13 21:23:00 +01:00
gronod self-assigned this 2026-09-13 21:23:00 +01:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: gronod/iccery-v2-mac#163