@@ -41,72 +41,56 @@ struct AboutView: View {
4141 var body : some View {
4242 NavigationStack {
4343 List {
44- VStack ( spacing: 12 ) {
44+ VStack ( spacing: 8 ) {
4545 if let url = appIconURL {
4646 AsyncImage ( url: url) { phase in
4747 if let img = phase. image {
4848 img
4949 . resizable ( )
5050 . scaledToFit ( )
5151 . frame ( width: 120 , height: 120 )
52- . clipShape ( RoundedRectangle ( cornerRadius: 24 , style: . continuous) )
53- . shadow ( color: Color . black. opacity ( 0.2 ) , radius: 6 , x: 0 , y: 2 )
54- . background (
55- RoundedRectangle ( cornerRadius: 24 , style: . continuous)
56- . fill ( Color . blue. opacity ( 0.1 ) ) // Subtle background
57- )
58- . padding ( 4 )
52+ . clipShape ( RoundedRectangle ( cornerRadius: 20 , style: . continuous) )
53+ . shadow ( radius: 6 )
5954 } else if phase. error != nil {
6055 Image ( systemName: " app.fill " )
6156 . resizable ( )
6257 . scaledToFit ( )
6358 . frame ( width: 80 , height: 80 )
64- . foregroundColor ( . blue . opacity ( 0.6 ) ) // Tinted fallback
59+ . foregroundColor ( . secondary )
6560 } else {
6661 ProgressView ( )
67- . tint ( . blue) // Tinted spinner
6862 . frame ( width: 80 , height: 80 )
6963 }
7064 }
71- . animation ( . easeIn( duration: 0.3 ) , value: url) // Fade-in animation
7265 }
7366
7467 Text ( " ProStore " )
7568 . font ( . title2)
76- . fontWeight ( . bold) // Bolder for emphasis
77- . foregroundColor ( . primary)
69+ . fontWeight ( . semibold)
7870
7971 Text ( " Version \( versionString) " )
8072 . font ( . footnote)
8173 . foregroundColor ( . secondary)
8274 }
8375 . frame ( maxWidth: . infinity)
84- . padding ( . vertical, 24 ) // More spacing
76+ . padding ( . vertical, 20 )
8577 . listRowInsets ( EdgeInsets ( ) )
86- . background ( Color . blue. opacity ( 0.05 ) ) // Subtle list row background
8778
88- Section ( header: Text ( " Credits " )
89- . font ( . headline)
90- . foregroundColor ( . primary)
91- . padding ( . top, 8 ) ) {
79+ Section ( header: Text ( " Credits " ) ) {
9280 ForEach ( credits) { c in
9381 CreditRow ( credit: c)
9482 }
9583 }
9684 }
97- . listStyle ( . insetGrouped)
98- . background ( Color ( UIColor . systemBackground) ) // Clean background
99- . navigationTitle ( " About ProStore " )
100- . navigationBarTitleDisplayMode ( . inline)
101- . accentColor ( . blue) // Consistent blue accent
85+ . listStyle ( InsetGroupedListStyle ( ) )
86+ . navigationTitle ( " About " )
10287 }
10388 }
10489}
10590
10691struct CreditRow : View {
10792 let credit : Credit
10893 @Environment ( \. openURL) var openURL
109- @State private var isTapped = false // For button animation
11094
11195 var body : some View {
11296 HStack ( spacing: 12 ) {
@@ -115,31 +99,21 @@ struct CreditRow: View {
11599 img
116100 . resizable ( )
117101 . scaledToFill ( )
118- . frame ( width: 48 , height: 48 )
119- . clipShape ( Circle ( ) )
120- . overlay (
121- Circle ( )
122- . stroke ( Color . blue. opacity ( 0.3 ) , lineWidth: 1 ) // Modern border
123- )
124102 } else if phase. error != nil {
125103 Image ( systemName: " person.crop.circle.fill " )
126104 . resizable ( )
127105 . scaledToFill ( )
128- . frame ( width: 48 , height: 48 )
129- . foregroundColor ( . blue. opacity ( 0.6 ) ) // Tinted fallback
130106 } else {
131107 ProgressView ( )
132- . tint ( . blue) // Tinted spinner
133- . frame ( width: 48 , height: 48 )
134108 }
135109 }
136- . animation ( . easeIn( duration: 0.3 ) , value: credit. avatarURL) // Fade-in animation
110+ . frame ( width: 44 , height: 44 )
111+ . clipShape ( Circle ( ) )
112+ . overlay ( Circle ( ) . stroke ( Color ( UIColor . separator) , lineWidth: 0.5 ) )
137113
138- VStack ( alignment: . leading, spacing: 4 ) {
114+ VStack ( alignment: . leading, spacing: 2 ) {
139115 Text ( credit. name)
140116 . font ( . body)
141- . fontWeight ( . medium)
142- . foregroundColor ( . primary)
143117 Text ( credit. role)
144118 . font ( . subheadline)
145119 . foregroundColor ( . secondary)
@@ -148,29 +122,14 @@ struct CreditRow: View {
148122 Spacer ( )
149123
150124 Button {
151- isTapped = true
152125 openURL ( credit. profileURL)
153- DispatchQueue . main. asyncAfter ( deadline: . now( ) + 0.2 ) {
154- isTapped = false
155- }
156126 } label: {
157127 Image ( systemName: " arrow.up.right.square " )
158128 . imageScale ( . large)
159- . foregroundColor ( . blue)
160- . padding ( 8 )
161- . background ( Color . blue. opacity ( 0.1 ) ) // Subtle button background
162- . clipShape ( Circle ( ) )
163- . scaleEffect ( isTapped ? 0.9 : 1.0 ) // Tap animation
129+ . foregroundColor ( . primary) // Neutral color instead of blue
164130 }
165131 . buttonStyle ( BorderlessButtonStyle ( ) )
166- . animation ( . easeInOut( duration: 0.2 ) , value: isTapped) // Smooth tap animation
167132 }
168133 . padding ( . vertical, 8 )
169- . padding ( . horizontal, 8 )
170- . background (
171- RoundedRectangle ( cornerRadius: 12 )
172- . fill ( Color . blue. opacity ( 0.05 ) ) // Subtle row background
173- )
174- . padding ( . horizontal, 4 )
175134 }
176135}
0 commit comments