Two related Settings-sheet defects, both rooted in how macOS Form treats TextField labels:
Clipping: the Verification thresholds shared one non-wrapping HStack and drew past the sheet's right edge.
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.
- 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
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
- 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 develop2026-09-14 07:57:01 +01:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Fixes #165.
Two related Settings-sheet defects, both rooted in how macOS
FormtreatsTextFieldlabels:HStackand drew past the sheet's right edge.TextFieldlabel, which renders inline — rows read "Stale after 30 [30] days" / "Good ΔE ≤ 2.0 [2.0]".Fix: each numeric field is now a direct
Formchild 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.settingsCalStaleDaysadded for the stale-days row;docs/21roster updated (358).UI tests: new label-duplication coverage plus frame-containment assertions on real sheet geometry.
- 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 #165fix(ui): settings ΔE threshold rows no longer clip the sheet edge (#165)to fix(ui): settings sheet — ΔE clip + duplicated numeric-field labels (#165)- 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