@umituz/react-native-subscription 3.1.29 → 3.1.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@umituz/react-native-subscription",
3
- "version": "3.1.29",
3
+ "version": "3.1.31",
4
4
  "description": "Complete subscription management with RevenueCat, paywall UI, and credits system for React Native apps",
5
5
  "main": "./src/index.ts",
6
6
  "types": "./src/index.ts",
@@ -89,8 +89,8 @@ export const PaywallFooter: React.FC<PaywallFooterProps> = React.memo(({
89
89
  </TouchableOpacity>
90
90
  )}
91
91
 
92
- {/* Footer Links - Premium inline layout */}
93
- <View style={[footerStyles.legalContainer, { marginTop: spacing / 2 }]}>
92
+ {/* Footer Links - Stacked layout (Restore on top, Legal on bottom) */}
93
+ <View style={{ marginTop: spacing, alignItems: 'center', gap: 12 }}>
94
94
  {onRestore && (
95
95
  <TouchableOpacity
96
96
  onPress={onRestore}
@@ -104,34 +104,32 @@ export const PaywallFooter: React.FC<PaywallFooterProps> = React.memo(({
104
104
  </TouchableOpacity>
105
105
  )}
106
106
 
107
- {(onRestore && legalUrls.termsUrl) && (
108
- <AtomicText style={footerStyles.legalSeparator}> </AtomicText>
109
- )}
110
-
111
- {legalUrls.termsUrl && (
112
- <TouchableOpacity
113
- onPress={() => onLegalClick(legalUrls.termsUrl)}
114
- activeOpacity={0.6}
115
- >
116
- <AtomicText style={[footerStyles.legalText, { color: tokens.colors.textTertiary }]}>
117
- {translations.termsOfServiceText}
118
- </AtomicText>
119
- </TouchableOpacity>
120
- )}
121
-
122
- {legalUrls.privacyUrl && (
123
- <>
124
- <AtomicText style={footerStyles.legalSeparator}> • </AtomicText>
107
+ <View style={footerStyles.legalContainer}>
108
+ {legalUrls.termsUrl && (
125
109
  <TouchableOpacity
126
- onPress={() => onLegalClick(legalUrls.privacyUrl)}
110
+ onPress={() => onLegalClick(legalUrls.termsUrl)}
127
111
  activeOpacity={0.6}
128
112
  >
129
113
  <AtomicText style={[footerStyles.legalText, { color: tokens.colors.textTertiary }]}>
130
- {translations.privacyText}
114
+ {translations.termsOfServiceText}
131
115
  </AtomicText>
132
116
  </TouchableOpacity>
133
- </>
134
- )}
117
+ )}
118
+
119
+ {legalUrls.privacyUrl && (
120
+ <>
121
+ <AtomicText style={footerStyles.legalSeparator}> • </AtomicText>
122
+ <TouchableOpacity
123
+ onPress={() => onLegalClick(legalUrls.privacyUrl)}
124
+ activeOpacity={0.6}
125
+ >
126
+ <AtomicText style={[footerStyles.legalText, { color: tokens.colors.textTertiary }]}>
127
+ {translations.privacyText}
128
+ </AtomicText>
129
+ </TouchableOpacity>
130
+ </>
131
+ )}
132
+ </View>
135
133
  </View>
136
134
  </View>
137
135
  );
@@ -144,6 +144,8 @@ interface FeedbackSubmitButtonProps {
144
144
  canSubmit: boolean;
145
145
  backgroundColor: string;
146
146
  textColor: string;
147
+ containerBackgroundColor?: string;
148
+ borderColor?: string;
147
149
  onPress: () => void;
148
150
  bottomInset: number;
149
151
  }
@@ -153,6 +155,8 @@ export const FeedbackSubmitButton: React.FC<FeedbackSubmitButtonProps> = ({
153
155
  canSubmit,
154
156
  backgroundColor,
155
157
  textColor,
158
+ containerBackgroundColor = 'rgba(255,255,255,0.98)',
159
+ borderColor = 'rgba(0,0,0,0.1)',
156
160
  onPress,
157
161
  bottomInset,
158
162
  }) => (
@@ -165,8 +169,8 @@ export const FeedbackSubmitButton: React.FC<FeedbackSubmitButtonProps> = ({
165
169
  paddingTop: 18,
166
170
  paddingBottom: Math.max(bottomInset, 18),
167
171
  borderTopWidth: 1,
168
- borderTopColor: 'rgba(0,0,0,0.1)',
169
- }, { backgroundColor: 'rgba(255,255,255,0.98)' }]}>
172
+ borderTopColor: borderColor,
173
+ }, { backgroundColor: containerBackgroundColor }]}>
170
174
  <TouchableOpacity
171
175
  style={[{
172
176
  borderRadius: 16,
@@ -178,7 +182,7 @@ export const FeedbackSubmitButton: React.FC<FeedbackSubmitButtonProps> = ({
178
182
  shadowRadius: 4,
179
183
  elevation: 3,
180
184
  }, {
181
- backgroundColor: canSubmit ? backgroundColor : 'rgba(0,0,0,0.1)',
185
+ backgroundColor: canSubmit ? backgroundColor : 'rgba(255,255,255,0.1)',
182
186
  opacity: canSubmit ? 1 : 0.6,
183
187
  }]}
184
188
  onPress={onPress}
@@ -191,7 +195,7 @@ export const FeedbackSubmitButton: React.FC<FeedbackSubmitButtonProps> = ({
191
195
  fontWeight: "700",
192
196
  fontSize: 17,
193
197
  letterSpacing: 0.3,
194
- }, { color: canSubmit ? textColor : 'rgba(0,0,0,0.3)' }]}
198
+ }, { color: canSubmit ? textColor : 'rgba(255,255,255,0.4)' }]}
195
199
  >
196
200
  {title}
197
201
  </AtomicText>
@@ -85,6 +85,8 @@ export const PaywallFeedbackScreen: React.FC<PaywallFeedbackScreenProps> = React
85
85
  canSubmit={canSubmit}
86
86
  backgroundColor={tokens.colors.primary}
87
87
  textColor={tokens.colors.textPrimary}
88
+ containerBackgroundColor={tokens.colors.backgroundPrimary}
89
+ borderColor="rgba(255, 255, 255, 0.1)"
88
90
  onPress={handleSubmit}
89
91
  bottomInset={insets.bottom}
90
92
  />
@@ -8,6 +8,7 @@ export interface PremiumStatus {
8
8
  isPremium: boolean;
9
9
  credits: UserCredits | null;
10
10
  isSyncing: boolean;
11
+ isLoading: boolean;
11
12
  }
12
13
 
13
14
  /**
@@ -34,5 +35,6 @@ export function usePremiumStatus(): PremiumStatus {
34
35
  isPremium,
35
36
  credits,
36
37
  isSyncing,
37
- }), [isPremium, credits, isSyncing]);
38
+ isLoading: statusLoading || creditsLoading,
39
+ }), [isPremium, credits, isSyncing, statusLoading, creditsLoading]);
38
40
  }