@umituz/react-native-subscription 3.1.28 → 3.1.30

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.28",
3
+ "version": "3.1.30",
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,45 +89,47 @@ export const PaywallFooter: React.FC<PaywallFooterProps> = React.memo(({
89
89
  </TouchableOpacity>
90
90
  )}
91
91
 
92
- {/* Restore Link - Responsive spacing */}
93
- {onRestore && (
94
- <TouchableOpacity
95
- onPress={onRestore}
96
- disabled={isProcessing}
97
- activeOpacity={0.6}
98
- style={[footerStyles.restoreButton, { marginTop: spacing / 2 }]}
99
- >
100
- <AtomicText style={[footerStyles.restoreText, { color: tokens.colors.textSecondary }]}>
101
- {translations.restoreButtonText}
102
- </AtomicText>
103
- </TouchableOpacity>
104
- )}
105
-
106
- {/* Legal Links - Responsive spacing */}
107
- <View style={footerStyles.legalContainer}>
108
- {legalUrls.termsUrl && (
92
+ {/* Footer Links - Stacked layout (Restore on top, Legal on bottom) */}
93
+ <View style={{ marginTop: spacing, alignItems: 'center', gap: 12 }}>
94
+ {onRestore && (
109
95
  <TouchableOpacity
110
- onPress={() => onLegalClick(legalUrls.termsUrl)}
96
+ onPress={onRestore}
97
+ disabled={isProcessing}
111
98
  activeOpacity={0.6}
99
+ style={footerStyles.restoreButton}
112
100
  >
113
- <AtomicText style={[footerStyles.legalText, { color: tokens.colors.textTertiary }]}>
114
- {translations.termsOfServiceText}
101
+ <AtomicText style={[footerStyles.legalText, { color: tokens.colors.textSecondary, fontWeight: '600' }]}>
102
+ {translations.restoreButtonText}
115
103
  </AtomicText>
116
104
  </TouchableOpacity>
117
105
  )}
118
- {legalUrls.privacyUrl && (
119
- <>
120
- <AtomicText style={footerStyles.legalSeparator}> </AtomicText>
106
+
107
+ <View style={footerStyles.legalContainer}>
108
+ {legalUrls.termsUrl && (
121
109
  <TouchableOpacity
122
- onPress={() => onLegalClick(legalUrls.privacyUrl)}
110
+ onPress={() => onLegalClick(legalUrls.termsUrl)}
123
111
  activeOpacity={0.6}
124
112
  >
125
113
  <AtomicText style={[footerStyles.legalText, { color: tokens.colors.textTertiary }]}>
126
- {translations.privacyText}
114
+ {translations.termsOfServiceText}
127
115
  </AtomicText>
128
116
  </TouchableOpacity>
129
- </>
130
- )}
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>
131
133
  </View>
132
134
  </View>
133
135
  );
@@ -45,9 +45,9 @@ export const PaywallRenderItem: React.FC<PaywallRenderItemProps> = React.memo(({
45
45
  [responsive]
46
46
  );
47
47
 
48
- // Responsive feature icon size
48
+ // Responsive feature icon size - use spacing multiplier directly to avoid max/min constraints from getIconSize
49
49
  const featureIconSize = React.useMemo(
50
- () => responsive.getIconSize(30),
50
+ () => Math.round(30 * responsive.spacingMultiplier),
51
51
  [responsive]
52
52
  );
53
53
 
@@ -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
  />