fix(ui): settings sheet — ΔE clip + duplicated numeric-field labels (#165) #166

Merged
gronod merged 5 commits from fix/165-settings-deltae-clip into develop 2026-09-14 07:57:01 +01:00
Owner

Fixes #165.

Two related Settings-sheet defects, both rooted in how macOS Form treats TextField labels:

  1. Clipping: the Verification thresholds shared one non-wrapping HStack and drew past the sheet's right edge.
  2. Duplicated labels: all three numeric fields passed their default value as the TextField label, which renders inline — rows read "Stale after 30 [30] days" / "Good ΔE ≤ 2.0 [2.0]".

Fix: each numeric field is now a direct Form child carrying its descriptive label, so the label renders once in the label column and the box fills the control column — same layout as the Pickers. settingsCalStaleDays added for the stale-days row; docs/21 roster updated (358).

UI tests: new label-duplication coverage plus frame-containment assertions on real sheet geometry.

Fixes #165. Two related Settings-sheet defects, both rooted in how macOS `Form` treats `TextField` labels: 1. **Clipping**: the Verification thresholds shared one non-wrapping `HStack` and drew past the sheet's right edge. 2. **Duplicated labels**: all three numeric fields passed their default value as the `TextField` label, which renders inline — rows read "Stale after 30 [30] days" / "Good ΔE ≤ 2.0 [2.0]". Fix: each numeric field is now a direct `Form` child carrying its descriptive label, so the label renders once in the label column and the box fills the control column — same layout as the Pickers. `settingsCalStaleDays` added for the stale-days row; `docs/21` roster updated (358). UI tests: new label-duplication coverage plus frame-containment assertions on real sheet geometry.
gronod added the Kind/Feature
Priority
Medium
3
Project/ICCery-v2Feature/UI
labels 2026-09-14 00:34:53 +01:00
gronod added 1 commit 2026-09-14 00:34:54 +01:00
fix(ui): settings ΔE threshold rows no longer clip the sheet edge (#165)
macOS CI / build-and-test (pull_request) Failing after 2m55s
macOS CI / package (pull_request) Skipped
8596f15d52
- Split Section("Verification") from one 4-across non-wrapping HStack into
  two adjacent label+field rows (#settingsDeltaEGood, #settingsDeltaEWarning).
- Add .padding(.leading, 45) to the Settings Form so the control column
  aligns at ~522 pt, matching develop, and all labels have 41–100 pt
  breathing room from the left boundary.
- Add SettingsUITests with frame-containment, control alignment, and
  validation/save round-trip coverage.
- Update docs/21-ui-reference.md Settings entry with new identifiers.

Refs #165
gronod added Kind/BugBug/UI and removed Kind/FeatureFeature/UI labels 2026-09-14 00:35:40 +01:00
gronod added 1 commit 2026-09-14 00:42:35 +01:00
test(settings): use abs diff instead of accuracy for Swift 5.7 compatibility
macOS CI / build-and-test (pull_request) Failing after 1m50s
macOS CI / package (pull_request) Skipped
4aa2815c6e
gronod added 1 commit 2026-09-14 00:46:35 +01:00
test(settings): add Foundation import and simplify column alignment assertion
macOS CI / build-and-test (pull_request) Failing after 1m40s
macOS CI / package (pull_request) Skipped
3bc0d14a34
gronod added 1 commit 2026-09-14 01:08:03 +01:00
test(settings): drop waitForNonExistence for Xcode 14.2 CI (#165)
macOS CI / build-and-test (pull_request) Failing after 4m12s
macOS CI / package (pull_request) Skipped
73b18dec5b
waitForNonExistence requires the macOS 14 SDK XCTest; the macos-12 runner toolchain has no such member on XCUIElement. Poll sheet.exists on the run loop instead, matching the waitForGone pattern in Milestone10GamutCompareUITests.
gronod changed title from fix(ui): settings ΔE threshold rows no longer clip the sheet edge (#165) to fix(ui): settings sheet — ΔE clip + duplicated numeric-field labels (#165) 2026-09-14 01:45:43 +01:00
gronod added 1 commit 2026-09-14 02:05:13 +01:00
fix(ui): settings numeric fields no longer render default value as inline label (#165)
macOS CI / build-and-test (pull_request) Successful in 37m40s
macOS CI / package (pull_request) Skipped
8b931e3625
- TextField("30"/"2.0"/"5.0") passed the default value as the label,
  which macOS draws inline next to the box — the rows read
  "Stale after 30 [30] days" / "Good ΔE ≤ 2.0 [2.0]".
- The three fields are now direct Form children carrying their
  descriptive label, so it renders once in the label column and the box
  fills the control column, matching the Pickers. The stale-days row
  folds "days" into the label ("Stale after (days)").
- New identifier settingsCalStaleDays; docs/21 roster 357→358.
- New testNumericFieldsCarryLabelsNotDuplicatedValues asserts each
  field's value, a single label-column staticText, and no staticText
  echoing the old label literal. testVerificationRowsStayInsideSheet
  updated for label-column geometry (fields end ~3.5 pt inside the
  sheet, same as the PopUpButtons — the 12 pt inset only applied to the
  old 60 pt boxes).

Refs #165
gronod merged commit ad7b91cf91 into develop 2026-09-14 07:57:01 +01:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: gronod/iccery-v2-mac#166