@zezosoft/zezo-ott-react-native-ui-kit 1.0.8 → 1.1.0

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.
Files changed (211) hide show
  1. package/README.md +1 -1
  2. package/lib/module/components/Account/Account.js +1 -1
  3. package/lib/module/components/Account/Account.js.map +1 -1
  4. package/lib/module/components/Auth/AuthProvider/AuthProvider.js +48 -19
  5. package/lib/module/components/Auth/AuthProvider/AuthProvider.js.map +1 -1
  6. package/lib/module/components/Auth/Login/LoginWithEmail.js +4 -2
  7. package/lib/module/components/Auth/Login/LoginWithEmail.js.map +1 -1
  8. package/lib/module/components/Auth/OTP/OTP.js +15 -1
  9. package/lib/module/components/Auth/OTP/OTP.js.map +1 -1
  10. package/lib/module/components/Auth/SignUp/SignUp.js +4 -2
  11. package/lib/module/components/Auth/SignUp/SignUp.js.map +1 -1
  12. package/lib/module/components/BlurView/BlurView.js +171 -0
  13. package/lib/module/components/BlurView/BlurView.js.map +1 -0
  14. package/lib/module/components/BlurView/index.js +9 -0
  15. package/lib/module/components/BlurView/index.js.map +1 -0
  16. package/lib/module/components/Content/Card/NowWatching/NowWatching.js.map +1 -1
  17. package/lib/module/components/Content/Card/Sliders/Styles/One.js.map +1 -1
  18. package/lib/module/components/Content/Card/Sliders/Styles/Two.js.map +1 -1
  19. package/lib/module/components/Content/Card/Styles/Five.js.map +1 -1
  20. package/lib/module/components/Content/Card/Styles/Four.js +2 -3
  21. package/lib/module/components/Content/Card/Styles/Four.js.map +1 -1
  22. package/lib/module/components/Content/Card/Styles/One.js +1 -2
  23. package/lib/module/components/Content/Card/Styles/One.js.map +1 -1
  24. package/lib/module/components/Content/Card/Styles/RotateInOut.js.map +1 -1
  25. package/lib/module/components/Content/Card/Styles/Six.js.map +1 -1
  26. package/lib/module/components/Content/Card/Styles/Three.js.map +1 -1
  27. package/lib/module/components/Content/Card/Styles/TopTen.js.map +1 -1
  28. package/lib/module/components/Content/Card/Styles/Two.js +1 -2
  29. package/lib/module/components/Content/Card/Styles/Two.js.map +1 -1
  30. package/lib/module/components/Content/Card/components/CardPoster.js.map +1 -1
  31. package/lib/module/components/Content/Content.js +4 -2
  32. package/lib/module/components/Content/Content.js.map +1 -1
  33. package/lib/module/components/Content/Sections.js.map +1 -1
  34. package/lib/module/components/ContentView/ContentView.js +4 -2
  35. package/lib/module/components/ContentView/ContentView.js.map +1 -1
  36. package/lib/module/components/ContentView/MoreContentList.js.map +1 -1
  37. package/lib/module/components/ContentView/components/CastCard.js +2 -1
  38. package/lib/module/components/ContentView/components/CastCard.js.map +1 -1
  39. package/lib/module/components/ContentView/components/EpisodeCard.js +3 -3
  40. package/lib/module/components/ContentView/components/EpisodeCard.js.map +1 -1
  41. package/lib/module/components/ContentView/components/GenreTags.js.map +1 -1
  42. package/lib/module/components/ContentView/components/MiniInfo.js +64 -19
  43. package/lib/module/components/ContentView/components/MiniInfo.js.map +1 -1
  44. package/lib/module/components/ContentView/components/Title.js.map +1 -1
  45. package/lib/module/components/Search/One.js.map +1 -1
  46. package/lib/module/components/Settings/AppSettings.js +1 -1
  47. package/lib/module/components/Settings/AppSettings.js.map +1 -1
  48. package/lib/module/components/Subscription/SubOne.js +340 -14
  49. package/lib/module/components/Subscription/SubOne.js.map +1 -1
  50. package/lib/module/components/TabBar/One.js +71 -108
  51. package/lib/module/components/TabBar/One.js.map +1 -1
  52. package/lib/module/components/TabBar/Three.js +63 -78
  53. package/lib/module/components/TabBar/Three.js.map +1 -1
  54. package/lib/module/components/TabBar/Two.js +110 -106
  55. package/lib/module/components/TabBar/Two.js.map +1 -1
  56. package/lib/module/components/User/PurchaseHistory/PurchaseHistory.js +324 -0
  57. package/lib/module/components/User/PurchaseHistory/PurchaseHistory.js.map +1 -0
  58. package/lib/module/components/User/WatchHistory/WatchHistory.js.map +1 -1
  59. package/lib/module/components/User/WatchLater/WatchLater.js.map +1 -1
  60. package/lib/module/components/User/index.js +2 -1
  61. package/lib/module/components/User/index.js.map +1 -1
  62. package/lib/module/components/index.js +1 -0
  63. package/lib/module/components/index.js.map +1 -1
  64. package/lib/module/hooks/useNavigationMode.js +34 -0
  65. package/lib/module/hooks/useNavigationMode.js.map +1 -0
  66. package/lib/module/utils/Spacing.js +26 -0
  67. package/lib/module/utils/Spacing.js.map +1 -0
  68. package/lib/typescript/src/components/Auth/AuthProvider/AuthProvider.d.ts +1 -0
  69. package/lib/typescript/src/components/Auth/AuthProvider/AuthProvider.d.ts.map +1 -1
  70. package/lib/typescript/src/components/Auth/Login/LoginWithEmail.d.ts.map +1 -1
  71. package/lib/typescript/src/components/Auth/OTP/OTP.d.ts +2 -0
  72. package/lib/typescript/src/components/Auth/OTP/OTP.d.ts.map +1 -1
  73. package/lib/typescript/src/components/Auth/SignUp/SignUp.d.ts.map +1 -1
  74. package/lib/typescript/src/components/Auth/index.d.ts +2 -0
  75. package/lib/typescript/src/components/Auth/index.d.ts.map +1 -1
  76. package/lib/typescript/src/components/BlurView/BlurView.d.ts +48 -0
  77. package/lib/typescript/src/components/BlurView/BlurView.d.ts.map +1 -0
  78. package/lib/typescript/src/components/BlurView/index.d.ts +7 -0
  79. package/lib/typescript/src/components/BlurView/index.d.ts.map +1 -0
  80. package/lib/typescript/src/components/Content/Card/NowWatching/NowWatching.d.ts +2 -1
  81. package/lib/typescript/src/components/Content/Card/NowWatching/NowWatching.d.ts.map +1 -1
  82. package/lib/typescript/src/components/Content/Card/Sliders/Styles/One.d.ts +2 -1
  83. package/lib/typescript/src/components/Content/Card/Sliders/Styles/One.d.ts.map +1 -1
  84. package/lib/typescript/src/components/Content/Card/Sliders/Styles/Two.d.ts +2 -1
  85. package/lib/typescript/src/components/Content/Card/Sliders/Styles/Two.d.ts.map +1 -1
  86. package/lib/typescript/src/components/Content/Card/Sliders/index.d.ts +2 -2
  87. package/lib/typescript/src/components/Content/Card/Styles/Five.d.ts +2 -1
  88. package/lib/typescript/src/components/Content/Card/Styles/Five.d.ts.map +1 -1
  89. package/lib/typescript/src/components/Content/Card/Styles/Four.d.ts +2 -1
  90. package/lib/typescript/src/components/Content/Card/Styles/Four.d.ts.map +1 -1
  91. package/lib/typescript/src/components/Content/Card/Styles/One.d.ts +2 -1
  92. package/lib/typescript/src/components/Content/Card/Styles/One.d.ts.map +1 -1
  93. package/lib/typescript/src/components/Content/Card/Styles/RotateInOut.d.ts +2 -1
  94. package/lib/typescript/src/components/Content/Card/Styles/RotateInOut.d.ts.map +1 -1
  95. package/lib/typescript/src/components/Content/Card/Styles/Six.d.ts +2 -1
  96. package/lib/typescript/src/components/Content/Card/Styles/Six.d.ts.map +1 -1
  97. package/lib/typescript/src/components/Content/Card/Styles/Three.d.ts +2 -1
  98. package/lib/typescript/src/components/Content/Card/Styles/Three.d.ts.map +1 -1
  99. package/lib/typescript/src/components/Content/Card/Styles/TopTen.d.ts +2 -1
  100. package/lib/typescript/src/components/Content/Card/Styles/TopTen.d.ts.map +1 -1
  101. package/lib/typescript/src/components/Content/Card/Styles/Two.d.ts +2 -1
  102. package/lib/typescript/src/components/Content/Card/Styles/Two.d.ts.map +1 -1
  103. package/lib/typescript/src/components/Content/Card/components/CardPoster.d.ts +1 -1
  104. package/lib/typescript/src/components/Content/Card/components/CardPoster.d.ts.map +1 -1
  105. package/lib/typescript/src/components/Content/Card/components/RentOrBuyIcon.d.ts +1 -1
  106. package/lib/typescript/src/components/Content/Card/components/RentOrBuyIcon.d.ts.map +1 -1
  107. package/lib/typescript/src/components/Content/Card/index.d.ts +24 -24
  108. package/lib/typescript/src/components/Content/Content.d.ts +2 -1
  109. package/lib/typescript/src/components/Content/Content.d.ts.map +1 -1
  110. package/lib/typescript/src/components/Content/Sections.d.ts +2 -1
  111. package/lib/typescript/src/components/Content/Sections.d.ts.map +1 -1
  112. package/lib/typescript/src/components/ContentView/ContentView.d.ts +1 -1
  113. package/lib/typescript/src/components/ContentView/ContentView.d.ts.map +1 -1
  114. package/lib/typescript/src/components/ContentView/MoreContentList.d.ts +1 -1
  115. package/lib/typescript/src/components/ContentView/MoreContentList.d.ts.map +1 -1
  116. package/lib/typescript/src/components/ContentView/components/AboutSection.d.ts +1 -1
  117. package/lib/typescript/src/components/ContentView/components/AboutSection.d.ts.map +1 -1
  118. package/lib/typescript/src/components/ContentView/components/CastCard.d.ts +1 -1
  119. package/lib/typescript/src/components/ContentView/components/CastCard.d.ts.map +1 -1
  120. package/lib/typescript/src/components/ContentView/components/EpisodeCard.d.ts +1 -1
  121. package/lib/typescript/src/components/ContentView/components/EpisodeCard.d.ts.map +1 -1
  122. package/lib/typescript/src/components/ContentView/components/GenreTags.d.ts +1 -1
  123. package/lib/typescript/src/components/ContentView/components/GenreTags.d.ts.map +1 -1
  124. package/lib/typescript/src/components/ContentView/components/MiniInfo.d.ts +18 -2
  125. package/lib/typescript/src/components/ContentView/components/MiniInfo.d.ts.map +1 -1
  126. package/lib/typescript/src/components/ContentView/components/Title.d.ts +1 -1
  127. package/lib/typescript/src/components/ContentView/components/Title.d.ts.map +1 -1
  128. package/lib/typescript/src/components/Search/One.d.ts +2 -1
  129. package/lib/typescript/src/components/Search/One.d.ts.map +1 -1
  130. package/lib/typescript/src/components/Subscription/SubOne.d.ts +6 -0
  131. package/lib/typescript/src/components/Subscription/SubOne.d.ts.map +1 -1
  132. package/lib/typescript/src/components/Subscription/index.d.ts.map +1 -1
  133. package/lib/typescript/src/components/TabBar/One.d.ts +2 -2
  134. package/lib/typescript/src/components/TabBar/One.d.ts.map +1 -1
  135. package/lib/typescript/src/components/TabBar/Three.d.ts +3 -2
  136. package/lib/typescript/src/components/TabBar/Three.d.ts.map +1 -1
  137. package/lib/typescript/src/components/TabBar/Two.d.ts +13 -4
  138. package/lib/typescript/src/components/TabBar/Two.d.ts.map +1 -1
  139. package/lib/typescript/src/components/TabBar/index.d.ts +1 -1
  140. package/lib/typescript/src/components/User/PurchaseHistory/PurchaseHistory.d.ts +50 -0
  141. package/lib/typescript/src/components/User/PurchaseHistory/PurchaseHistory.d.ts.map +1 -0
  142. package/lib/typescript/src/components/User/WatchHistory/WatchHistory.d.ts +1 -1
  143. package/lib/typescript/src/components/User/WatchHistory/WatchHistory.d.ts.map +1 -1
  144. package/lib/typescript/src/components/User/WatchLater/WatchLater.d.ts +1 -1
  145. package/lib/typescript/src/components/User/WatchLater/WatchLater.d.ts.map +1 -1
  146. package/lib/typescript/src/components/User/index.d.ts +2 -1
  147. package/lib/typescript/src/components/User/index.d.ts.map +1 -1
  148. package/lib/typescript/src/components/index.d.ts +1 -0
  149. package/lib/typescript/src/components/index.d.ts.map +1 -1
  150. package/lib/typescript/src/hooks/useNavigationMode.d.ts +14 -0
  151. package/lib/typescript/src/hooks/useNavigationMode.d.ts.map +1 -0
  152. package/lib/typescript/src/types/content/content-view.types.d.ts +3 -1
  153. package/lib/typescript/src/types/content/content-view.types.d.ts.map +1 -1
  154. package/lib/typescript/src/types/index.d.ts +1 -1
  155. package/lib/typescript/src/types/index.d.ts.map +1 -1
  156. package/lib/typescript/src/types/sections/index.d.ts +1 -1
  157. package/lib/typescript/src/types/sections/index.d.ts.map +1 -1
  158. package/lib/typescript/src/utils/Spacing.d.ts +16 -0
  159. package/lib/typescript/src/utils/Spacing.d.ts.map +1 -0
  160. package/package.json +10 -5
  161. package/src/components/Account/Account.tsx +1 -1
  162. package/src/components/Auth/AuthProvider/AuthProvider.tsx +82 -37
  163. package/src/components/Auth/Login/LoginWithEmail.tsx +9 -2
  164. package/src/components/Auth/OTP/OTP.tsx +37 -1
  165. package/src/components/Auth/SignUp/SignUp.tsx +9 -2
  166. package/src/components/BlurView/BlurView.tsx +199 -0
  167. package/src/components/BlurView/index.ts +7 -0
  168. package/src/components/Content/Card/NowWatching/NowWatching.tsx +2 -5
  169. package/src/components/Content/Card/Sliders/Styles/One.tsx +2 -1
  170. package/src/components/Content/Card/Sliders/Styles/Two.tsx +2 -1
  171. package/src/components/Content/Card/Styles/Five.tsx +1 -1
  172. package/src/components/Content/Card/Styles/Four.tsx +4 -2
  173. package/src/components/Content/Card/Styles/One.tsx +1 -1
  174. package/src/components/Content/Card/Styles/RotateInOut.tsx +1 -1
  175. package/src/components/Content/Card/Styles/Six.tsx +1 -1
  176. package/src/components/Content/Card/Styles/Three.tsx +1 -1
  177. package/src/components/Content/Card/Styles/TopTen.tsx +1 -1
  178. package/src/components/Content/Card/Styles/Two.tsx +1 -1
  179. package/src/components/Content/Card/components/CardPoster.tsx +1 -1
  180. package/src/components/Content/Card/components/RentOrBuyIcon.tsx +1 -1
  181. package/src/components/Content/Content.tsx +7 -5
  182. package/src/components/Content/Sections.tsx +2 -1
  183. package/src/components/ContentView/ContentView.tsx +8 -1
  184. package/src/components/ContentView/MoreContentList.tsx +1 -1
  185. package/src/components/ContentView/components/AboutSection.tsx +1 -1
  186. package/src/components/ContentView/components/CastCard.tsx +2 -1
  187. package/src/components/ContentView/components/EpisodeCard.tsx +5 -1
  188. package/src/components/ContentView/components/GenreTags.tsx +1 -1
  189. package/src/components/ContentView/components/MiniInfo.tsx +100 -23
  190. package/src/components/ContentView/components/Title.tsx +1 -1
  191. package/src/components/Search/One.tsx +2 -6
  192. package/src/components/Settings/AppSettings.tsx +1 -1
  193. package/src/components/Subscription/SubOne.tsx +422 -12
  194. package/src/components/TabBar/One.tsx +79 -141
  195. package/src/components/TabBar/Three.tsx +84 -99
  196. package/src/components/TabBar/Two.tsx +139 -110
  197. package/src/components/User/PurchaseHistory/PurchaseHistory.tsx +439 -0
  198. package/src/components/User/WatchHistory/WatchHistory.tsx +1 -1
  199. package/src/components/User/WatchLater/WatchLater.tsx +1 -1
  200. package/src/components/User/index.ts +8 -1
  201. package/src/components/index.ts +1 -0
  202. package/src/hooks/useNavigationMode.ts +35 -0
  203. package/src/types/content/content-view.types.ts +6 -1
  204. package/src/types/index.ts +1 -1
  205. package/src/types/sections/index.ts +1 -1
  206. package/src/utils/Spacing.ts +27 -0
  207. package/lib/module/types/content/index.js +0 -2
  208. package/lib/module/types/content/index.js.map +0 -1
  209. package/lib/typescript/src/types/content/index.d.ts +0 -174
  210. package/lib/typescript/src/types/content/index.d.ts.map +0 -1
  211. package/src/types/content/index.ts +0 -194
@@ -3,18 +3,22 @@
3
3
  * @lastModified Mon 21 Jul 2025 at 04:55 PM
4
4
  */
5
5
 
6
- import React, { memo, useCallback, useMemo } from 'react';
6
+ import React, { memo, useCallback, useMemo, useState } from 'react';
7
7
  import {
8
8
  View,
9
9
  StyleSheet,
10
10
  TouchableOpacity,
11
11
  ActivityIndicator,
12
+ ScrollView,
13
+ Dimensions,
12
14
  } from 'react-native';
13
15
  import Carousel from 'react-native-reanimated-carousel';
14
- import { scale, verticalScale } from 'react-native-size-matters';
16
+ import { scale, verticalScale, moderateScale } from 'react-native-size-matters';
15
17
  import LinearGradient from 'react-native-linear-gradient';
16
18
  import SkeletonPlaceholder from 'react-native-skeleton-placeholder';
17
19
  import Animated, { FadeIn, FadeOut } from 'react-native-reanimated';
20
+ import Modal from 'react-native-modal';
21
+ import { X } from 'lucide-react-native';
18
22
  import { Text } from '../Text';
19
23
  import AppHeader from '../Headers/AppHeader';
20
24
  import { useInternalTheme } from '../../theme/hook/useInternalTheme';
@@ -30,6 +34,12 @@ export type Plan = {
30
34
  platforms: string;
31
35
  benefits?: string[];
32
36
  isPopular?: boolean;
37
+ extraDetails?: {
38
+ description?: string;
39
+ features?: string[];
40
+ terms?: string;
41
+ [key: string]: any;
42
+ };
33
43
  };
34
44
 
35
45
  type SubscriptionSliderOneProps = {
@@ -71,6 +81,8 @@ const SubscriptionSliderOne = ({
71
81
  }: SubscriptionSliderOneProps) => {
72
82
  const { theme: appliedTheme } = useInternalTheme(theme);
73
83
  const colors = appliedTheme.colors;
84
+ const [selectedPlan, setSelectedPlan] = useState<Plan | null>(null);
85
+ const [isModalVisible, setIsModalVisible] = useState(false);
74
86
  const parsePrice = (price: string) =>
75
87
  parseFloat(price.replace(/[^\d.]/g, '')) || 0;
76
88
  const sortedPlans = useMemo(() => {
@@ -113,6 +125,16 @@ const SubscriptionSliderOne = ({
113
125
  [colors.skeletonBaseColor, colors.skeletonHighlightColor]
114
126
  );
115
127
 
128
+ const openDetailsModal = useCallback((plan: Plan) => {
129
+ setSelectedPlan(plan);
130
+ setIsModalVisible(true);
131
+ }, []);
132
+
133
+ const closeDetailsModal = useCallback(() => {
134
+ setIsModalVisible(false);
135
+ setSelectedPlan(null);
136
+ }, []);
137
+
116
138
  const renderPlan = useCallback(
117
139
  ({ item }: { item: Plan }) => (
118
140
  <View style={styles.cardContainer}>
@@ -133,7 +155,10 @@ const SubscriptionSliderOne = ({
133
155
  </View>
134
156
  )}
135
157
 
136
- <Text style={[styles.cardTitle, { color: colors.white }]}>
158
+ <Text
159
+ numberOfLines={1}
160
+ style={[styles.cardTitle, { color: colors.white }]}
161
+ >
137
162
  {item.title}
138
163
  </Text>
139
164
  <Text style={[styles.price, { color: colors.white }]}>
@@ -147,13 +172,30 @@ const SubscriptionSliderOne = ({
147
172
  </Text>
148
173
  {!!item.benefits?.length && (
149
174
  <View style={styles.benefitsContainer}>
150
- {item.benefits.map((benefit, i) => (
151
- <Text key={i} style={[styles.benefit, { color: colors.white }]}>
175
+ {item.benefits.slice(0, 4).map((benefit, i) => (
176
+ <Text
177
+ key={i}
178
+ numberOfLines={1}
179
+ style={[styles.benefit, { color: colors.white }]}
180
+ >
152
181
  • {benefit}
153
182
  </Text>
154
183
  ))}
155
184
  </View>
156
185
  )}
186
+ {(item.benefits?.length || item.extraDetails) && (
187
+ <TouchableOpacity
188
+ style={styles.viewDetailsButton}
189
+ onPress={() => openDetailsModal(item)}
190
+ activeOpacity={0.7}
191
+ >
192
+ <Text style={[styles.viewDetailsText, { color: colors.white }]}>
193
+ {item.benefits && item.benefits.length > 4
194
+ ? 'View More Details'
195
+ : 'View Details'}
196
+ </Text>
197
+ </TouchableOpacity>
198
+ )}
157
199
  <TouchableOpacity
158
200
  style={[styles.subscribeButton, { backgroundColor: colors.button }]}
159
201
  onPress={() => onSubscribe?.(item)}
@@ -182,6 +224,7 @@ const SubscriptionSliderOne = ({
182
224
  onSubscribe,
183
225
  subscribeButtonText,
184
226
  subscribeLoadingId,
227
+ openDetailsModal,
185
228
  ]
186
229
  );
187
230
 
@@ -247,6 +290,228 @@ const SubscriptionSliderOne = ({
247
290
  )}
248
291
  </View>
249
292
  )}
293
+
294
+ {/* Details Modal */}
295
+ <Modal
296
+ isVisible={isModalVisible}
297
+ onBackdropPress={closeDetailsModal}
298
+ onBackButtonPress={closeDetailsModal}
299
+ backdropOpacity={0.35}
300
+ useNativeDriver={true}
301
+ onSwipeComplete={closeDetailsModal}
302
+ propagateSwipe
303
+ style={styles.modal}
304
+ >
305
+ <View
306
+ style={[styles.modalContent, { backgroundColor: colors.surface }]}
307
+ >
308
+ <View style={styles.modalHeader}>
309
+ <Text style={[styles.modalTitle, { color: colors.textPrimary }]}>
310
+ {selectedPlan?.title || 'Plan Details'}
311
+ </Text>
312
+ <TouchableOpacity
313
+ onPress={closeDetailsModal}
314
+ style={[
315
+ styles.modalCloseButton,
316
+ { backgroundColor: colors.background },
317
+ ]}
318
+ activeOpacity={0.7}
319
+ >
320
+ <X size={scale(20)} color={colors.textPrimary} />
321
+ </TouchableOpacity>
322
+ </View>
323
+
324
+ <ScrollView
325
+ style={styles.modalScrollView}
326
+ contentContainerStyle={styles.modalScrollContent}
327
+ showsVerticalScrollIndicator={false}
328
+ bounces={false}
329
+ scrollEventThrottle={16}
330
+ keyboardShouldPersistTaps="handled"
331
+ removeClippedSubviews={false}
332
+ nestedScrollEnabled={true}
333
+ >
334
+ {selectedPlan && (
335
+ <>
336
+ <View style={[styles.modalSection, styles.modalFirstSection]}>
337
+ <View
338
+ style={[
339
+ styles.priceHighlightBox,
340
+ { backgroundColor: colors.background },
341
+ ]}
342
+ >
343
+ <Text
344
+ style={[
345
+ styles.modalPriceLabel,
346
+ { color: colors.textSecondary },
347
+ ]}
348
+ >
349
+ PRICING
350
+ </Text>
351
+ <Text
352
+ style={[
353
+ styles.modalPriceValue,
354
+ { color: colors.primary },
355
+ ]}
356
+ >
357
+ {selectedPlan.price}
358
+ </Text>
359
+ <Text
360
+ style={[
361
+ styles.modalPriceDuration,
362
+ { color: colors.textSecondary },
363
+ ]}
364
+ >
365
+ per {selectedPlan.duration}
366
+ </Text>
367
+ </View>
368
+ </View>
369
+
370
+ <View style={[styles.modalSection]}>
371
+ <Text
372
+ style={[
373
+ styles.modalSectionTitle,
374
+ { color: colors.textPrimary },
375
+ ]}
376
+ >
377
+ Available On
378
+ </Text>
379
+ <View
380
+ style={[
381
+ styles.platformBadge,
382
+ {
383
+ backgroundColor: colors.surface,
384
+ borderColor: colors.primary,
385
+ },
386
+ ]}
387
+ >
388
+ <Text
389
+ style={[
390
+ styles.platformBadgeText,
391
+ { color: colors.textPrimary },
392
+ ]}
393
+ >
394
+ {selectedPlan.platforms}
395
+ </Text>
396
+ </View>
397
+ </View>
398
+
399
+ {selectedPlan.benefits &&
400
+ selectedPlan.benefits.length > 0 && (
401
+ <View style={styles.modalSection}>
402
+ <Text
403
+ style={[
404
+ styles.modalSectionTitle,
405
+ { color: colors.textPrimary },
406
+ ]}
407
+ >
408
+ Benefits
409
+ </Text>
410
+ {selectedPlan.benefits.map((benefit, index) => (
411
+ <View key={index} style={styles.benefitRow}>
412
+ <Text
413
+ style={[
414
+ styles.benefitBullet,
415
+ { color: colors.primary },
416
+ ]}
417
+ >
418
+
419
+ </Text>
420
+ <Text
421
+ style={[
422
+ styles.benefitText,
423
+ { color: colors.textSecondary },
424
+ ]}
425
+ >
426
+ {benefit}
427
+ </Text>
428
+ </View>
429
+ ))}
430
+ </View>
431
+ )}
432
+
433
+ {selectedPlan.extraDetails?.description && (
434
+ <View style={styles.modalSection}>
435
+ <Text
436
+ style={[
437
+ styles.modalSectionTitle,
438
+ { color: colors.textPrimary },
439
+ ]}
440
+ >
441
+ Description
442
+ </Text>
443
+ <Text
444
+ style={[
445
+ styles.modalSectionValue,
446
+ { color: colors.textSecondary },
447
+ ]}
448
+ >
449
+ {selectedPlan.extraDetails.description}
450
+ </Text>
451
+ </View>
452
+ )}
453
+
454
+ {selectedPlan.extraDetails?.features &&
455
+ selectedPlan.extraDetails.features.length > 0 && (
456
+ <View style={styles.modalSection}>
457
+ <Text
458
+ style={[
459
+ styles.modalSectionTitle,
460
+ { color: colors.textPrimary },
461
+ ]}
462
+ >
463
+ Features
464
+ </Text>
465
+ {selectedPlan.extraDetails.features.map(
466
+ (feature, index) => (
467
+ <View key={index} style={styles.benefitRow}>
468
+ <Text
469
+ style={[
470
+ styles.benefitBullet,
471
+ { color: colors.primary },
472
+ ]}
473
+ >
474
+
475
+ </Text>
476
+ <Text
477
+ style={[
478
+ styles.benefitText,
479
+ { color: colors.textSecondary },
480
+ ]}
481
+ >
482
+ {feature}
483
+ </Text>
484
+ </View>
485
+ )
486
+ )}
487
+ </View>
488
+ )}
489
+
490
+ {selectedPlan.extraDetails?.terms && (
491
+ <View style={styles.modalSection}>
492
+ <Text
493
+ style={[
494
+ styles.modalSectionTitle,
495
+ { color: colors.textPrimary },
496
+ ]}
497
+ >
498
+ Terms & Conditions
499
+ </Text>
500
+ <Text
501
+ style={[
502
+ styles.modalSectionValue,
503
+ { color: colors.textSecondary },
504
+ ]}
505
+ >
506
+ {selectedPlan.extraDetails.terms}
507
+ </Text>
508
+ </View>
509
+ )}
510
+ </>
511
+ )}
512
+ </ScrollView>
513
+ </View>
514
+ </Modal>
250
515
  </View>
251
516
  </View>
252
517
  );
@@ -306,7 +571,10 @@ const styles = StyleSheet.create({
306
571
  cardTitle: {
307
572
  fontSize: RFValue(17),
308
573
  fontWeight: '700',
574
+ maxWidth: '50%',
575
+ marginHorizontal: 'auto',
309
576
  marginBottom: verticalScale(8),
577
+ textAlign: 'center',
310
578
  },
311
579
  price: {
312
580
  fontSize: RFValue(43),
@@ -328,7 +596,8 @@ const styles = StyleSheet.create({
328
596
  marginTop: verticalScale(8),
329
597
  alignItems: 'flex-start',
330
598
  justifyContent: 'center',
331
- paddingHorizontal: scale(16),
599
+ width: '60%',
600
+ marginHorizontal: 'auto',
332
601
  },
333
602
  benefit: {
334
603
  fontSize: RFValue(12),
@@ -338,7 +607,7 @@ const styles = StyleSheet.create({
338
607
  paddingHorizontal: scale(60),
339
608
  borderRadius: scale(30),
340
609
  alignItems: 'center',
341
- marginTop: verticalScale(15),
610
+ marginTop: verticalScale(5),
342
611
  },
343
612
  subscribeText: {
344
613
  fontSize: RFValue(14),
@@ -372,16 +641,157 @@ const styles = StyleSheet.create({
372
641
  },
373
642
  popularBadge: {
374
643
  position: 'absolute',
375
- top: verticalScale(12),
376
- right: scale(12),
377
- paddingHorizontal: scale(10),
378
- paddingVertical: verticalScale(4),
644
+ top: verticalScale(10),
645
+ right: scale(10),
646
+ paddingHorizontal: scale(6),
647
+ paddingVertical: verticalScale(3),
379
648
  borderRadius: scale(12),
380
649
  zIndex: 10,
381
650
  },
382
651
  popularText: {
383
- fontSize: RFValue(12),
652
+ fontSize: RFValue(9),
384
653
  textTransform: 'uppercase',
385
654
  fontWeight: '700',
386
655
  },
656
+ viewDetailsButton: {
657
+ paddingVertical: verticalScale(6),
658
+ paddingHorizontal: scale(20),
659
+ alignItems: 'center',
660
+ justifyContent: 'center',
661
+ },
662
+ viewDetailsText: {
663
+ fontSize: RFValue(12),
664
+ fontWeight: '600',
665
+ textDecorationLine: 'underline',
666
+ },
667
+ modal: {
668
+ margin: 0,
669
+ justifyContent: 'flex-end',
670
+ zIndex: 1000,
671
+ },
672
+
673
+ modalContent: {
674
+ borderTopLeftRadius: moderateScale(24),
675
+ borderTopRightRadius: moderateScale(24),
676
+ maxHeight: Dimensions.get('window').height * 0.85,
677
+ minHeight: Dimensions.get('window').height * 0.4,
678
+ paddingBottom: verticalScale(20),
679
+ shadowColor: '#000',
680
+ shadowOffset: { width: 0, height: -4 },
681
+ shadowOpacity: 0.15,
682
+ shadowRadius: 12,
683
+ elevation: 8,
684
+ overflow: 'hidden',
685
+ },
686
+ modalHeader: {
687
+ flexDirection: 'row',
688
+ justifyContent: 'space-between',
689
+ alignItems: 'center',
690
+ paddingHorizontal: scale(20),
691
+ paddingTop: verticalScale(16),
692
+ paddingBottom: verticalScale(5),
693
+ borderBottomWidth: StyleSheet.hairlineWidth,
694
+ borderBottomColor: 'rgba(0,0,0,0.08)',
695
+ },
696
+ modalTitle: {
697
+ fontSize: RFValue(17),
698
+ fontWeight: '700',
699
+ flex: 1,
700
+ letterSpacing: 0.2,
701
+ },
702
+ modalCloseButton: {
703
+ width: scale(30),
704
+ height: scale(30),
705
+ borderRadius: scale(20),
706
+ justifyContent: 'center',
707
+ alignItems: 'center',
708
+ marginLeft: scale(12),
709
+ },
710
+ modalScrollView: {
711
+ paddingHorizontal: scale(20),
712
+ paddingTop: verticalScale(16),
713
+ },
714
+ modalScrollContent: {
715
+ paddingBottom: verticalScale(24),
716
+ flexGrow: 1,
717
+ },
718
+ modalSection: {
719
+ marginBottom: verticalScale(10),
720
+ paddingBottom: verticalScale(16),
721
+ borderBottomWidth: StyleSheet.hairlineWidth,
722
+ borderBottomColor: 'rgba(0,0,0,0.06)',
723
+ },
724
+ modalFirstSection: {
725
+ marginTop: 0,
726
+ },
727
+ modalSectionTitle: {
728
+ fontSize: RFValue(15),
729
+ fontWeight: '700',
730
+ marginBottom: verticalScale(10),
731
+ letterSpacing: 0.3,
732
+ opacity: 0.9,
733
+ },
734
+ modalSectionValue: {
735
+ fontSize: RFValue(15),
736
+ lineHeight: RFValue(20),
737
+ letterSpacing: 0.2,
738
+ opacity: 0.85,
739
+ },
740
+ benefitRow: {
741
+ flexDirection: 'row',
742
+ alignItems: 'center',
743
+ marginBottom: verticalScale(10),
744
+ paddingRight: scale(8),
745
+ paddingLeft: scale(4),
746
+ },
747
+ benefitBullet: {
748
+ fontSize: RFValue(16),
749
+ marginRight: scale(10),
750
+ fontWeight: '600',
751
+ },
752
+ benefitText: {
753
+ fontSize: RFValue(12),
754
+ flex: 1,
755
+ letterSpacing: 0.2,
756
+ textTransform: 'capitalize',
757
+ opacity: 0.85,
758
+ },
759
+ priceHighlightBox: {
760
+ borderRadius: scale(16),
761
+ padding: scale(20),
762
+ alignItems: 'center',
763
+ justifyContent: 'center',
764
+ },
765
+ modalPriceLabel: {
766
+ fontSize: RFValue(12),
767
+ fontWeight: '700',
768
+ letterSpacing: 1.2,
769
+ marginBottom: verticalScale(8),
770
+ opacity: 0.7,
771
+ },
772
+ modalPriceValue: {
773
+ fontSize: RFValue(36),
774
+ fontWeight: '800',
775
+ marginBottom: verticalScale(4),
776
+ letterSpacing: -0.5,
777
+ },
778
+ modalPriceDuration: {
779
+ fontSize: RFValue(14),
780
+ fontWeight: '500',
781
+ opacity: 0.7,
782
+ },
783
+ platformBadge: {
784
+ alignSelf: 'flex-start',
785
+ paddingHorizontal: scale(12),
786
+ paddingVertical: verticalScale(8),
787
+ borderRadius: scale(12),
788
+ borderWidth: 1,
789
+ borderColor: 'rgba(0,0,0,0.08)',
790
+ },
791
+ platformBadgeText: {
792
+ fontSize: RFValue(12),
793
+ fontWeight: '600',
794
+ letterSpacing: 0.3,
795
+ textTransform: 'capitalize',
796
+ },
387
797
  });