diff --git a/Kanban/UI/Board/LaneView.swift b/Kanban/UI/Board/LaneView.swift index 47a754b..c32cae4 100644 --- a/Kanban/UI/Board/LaneView.swift +++ b/Kanban/UI/Board/LaneView.swift @@ -657,7 +657,13 @@ struct LaneView: View { } private var scrollableCards: some View { - ScrollView(.vertical) { + // Evaluated ONCE per body, deliberately: the per-element `.accessibilitySortPriority` + // below reads `slots.count`, and reading the computed property from inside the `ForEach` + // closure re-runs the whole chain (`slots` → `renderedCards` → the O(n) card filter and + // the session's hidden-member resolution) once per element — O(n²) per lane body, which + // a drag pickup's synchronous whole-board layout multiplied into a visible stall. + let slots = self.slots + return ScrollView(.vertical) { // Cards stay standard width whatever the lane spans: at a slot width of // `units × standard + (units - 1) × gap`, `MasonryLayout` divides back into exactly // `units` columns of `standard` (03-board-ui.md § Layout — full visibility).