iOS client for Grain grain.social
ios photography atproto
7
fork

Configure Feed

Select the types of activity you want to include in your feed.

refactor: expose heart animation types for reuse

Remove private access from HeartAnimationState, DoubleTapHeartView, and
LikeParticleView so they can be reused in StoryViewer for story likes.

+3 -3
+3 -3
Grain/Views/Components/GalleryCardView.swift
··· 8 8 9 9 @Observable 10 10 @MainActor 11 - private final class HeartAnimationState: Identifiable { 11 + final class HeartAnimationState: Identifiable { 12 12 let id = UUID() 13 13 let position: CGPoint 14 14 let rotation: Double ··· 52 52 } 53 53 } 54 54 55 - private struct DoubleTapHeartView: View { 55 + struct DoubleTapHeartView: View { 56 56 let state: HeartAnimationState 57 57 58 58 var body: some View { ··· 94 94 95 95 // MARK: - Subtle like-button particle burst 96 96 97 - private struct LikeParticleView: View { 97 + struct LikeParticleView: View { 98 98 let index: Int 99 99 100 100 /// Deterministic per slot — no random state stored in parent