Give the trash column a full-height marquee backdrop

The trashed-side gesture surface was sized to the rows' fitted height, so
blank column space below the last row couldn't arm a marquee — a dead
zone the board side doesn't have (DESIGN/04 > The trash: the column's
gesture surface is full height). The rows content now takes
maxHeight: .infinity like LaneView's scrollableCards, the identical
structure in the identical position, so the band arms from anywhere in
the column.

Claude-Session: https://claude.ai/code/session_01SR4XGjmBE16ZUYWpfFHXwY
This commit is contained in:
2026-07-28 07:11:06 -04:00
parent cc4cc99c71
commit e6d3673891
+13 -4
View File
@@ -188,12 +188,21 @@ struct TrashLaneView: View {
.id(entry.id) .id(entry.id)
} }
} }
.frame(maxWidth: .infinity, alignment: .topLeading) // `maxHeight: .infinity` here, not just `maxWidth`, is what makes the gesture surface
// below reach the column's full height rather than stopping where the last row ends
// the same fix `LaneView.scrollableCards` applies to its masonry, and for the identical
// reason: a `ScrollView` proposes its content only the height that content asks for, so a
// view sized to fit its rows leaves the blank space beneath them un-hit-testable. "The
// column's gesture surface is full height" (04-interactions.md The trash, settled)
// needs that blank space to actually belong to the view the gesture below is on.
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
.padding(6) .padding(6)
.contentShape(Rectangle()) .contentShape(Rectangle())
// The band's trash-side surface. It only ever arms from the column's empty space a // The band's trash-side surface. It arms from the column's empty space, full height
// drag begun on a row is that row's drag-out and the begin guard makes that geometric // (above) included, so a drag can start from the blank area below the last row exactly
// rather than a matter of gesture priority (`MarqueeControl`). // as the board background allows on the live side a drag begun on a row instead is that
// row's drag-out, and the begin guard makes that geometric rather than a matter of
// gesture priority (`MarqueeControl`).
.simultaneousGesture(marquee.gesture(side: .trashed)) .simultaneousGesture(marquee.gesture(side: .trashed))
} }
} }