import SwiftUI import WaterfallGrid struct ThumbnailGridView: View { let items: [Item] let columnCount: Int let useAlternativeGrid: Bool let columnsData: [[Item]] let content: (Item) -> Content private var resolvedColumnCount: Int { max(columnCount, 1) } private var resolvedColumnsData: [[Item]] { let clippedColumnsData = Array(columnsData.prefix(resolvedColumnCount)) let missingColumnCount = resolvedColumnCount - clippedColumnsData.count if missingColumnCount <= 0 { return clippedColumnsData } return clippedColumnsData + Array(repeating: [], count: missingColumnCount) } var body: some View { if useAlternativeGrid { HStack(alignment: .top) { ForEach(Array(resolvedColumnsData.enumerated()), id: \.offset) { _, columnItems in LazyVStack { ForEach(columnItems, id: \.id) { item in content(item) .id(item.id) } } .transaction { $0.animation = nil } } } #if os(macOS) .padding(8) #else .padding(.horizontal) #endif .transition(.opacity) } else { WaterfallGrid(items, id: \.id) { item in content(item) .id(item.id) } .gridStyle(columns: resolvedColumnCount) .transaction { $0.animation = nil } #if os(macOS) .padding(8) #else .padding(.horizontal) #endif .transition(.opacity) } } }