import NetworkImage import SwiftUI struct PostGridThumbnailView: View { @EnvironmentObject var settings: SettingsManager @EnvironmentObject var manager: BooruManager let post: BooruPost let posts: [BooruPost] private var thumbnailURL: URL? { switch settings.thumbnailQuality { case .preview: post.previewURL case .sample: post.sampleURL case .original: post.fileURL } } @ViewBuilder private func imageContent(image: Image) -> some View { let isFiltered = settings.blurRatings.contains(post.rating) && manager.selectedPost?.id != post.id image .resizable() .aspectRatio(contentMode: .fit) .blur(radius: isFiltered ? 8 : 0) .clipped() .animation(.default, value: isFiltered) .clipShape(RoundedRectangle(cornerRadius: 8)) } var body: some View { VStack { NetworkImage( url: thumbnailURL, transaction: Transaction(animation: .default) ) { image in if #available(iOS 18.0, macOS 15.0, *) { imageContent(image: image) .onScrollVisibilityChange { visible in if post == posts.last, !manager.endOfData, visible { Task(priority: .utility) { await manager.loadNextPage() } } } } else { imageContent(image: image) } } placeholder: { PostGridThumbnailPlaceholderView() } } } }