@zezosoft/zezo-ott-react-native-ui-kit 1.3.6 → 1.3.7

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 (258) hide show
  1. package/README.md +40 -36
  2. package/package.json +1 -3
  3. package/src/assets/animations/135037-payment-processing-error.json +0 -1347
  4. package/src/assets/animations/7227-vui-animation.json +0 -3377
  5. package/src/assets/animations/Failed.json +0 -2103
  6. package/src/assets/animations/Pending.json +0 -522
  7. package/src/assets/animations/Successful.json +0 -2289
  8. package/src/assets/animations/heart.json +0 -788
  9. package/src/assets/animations/succesfull-payment.json +0 -2379
  10. package/src/assets/animations/voice-icon.json +0 -542
  11. package/src/assets/img/back.png +0 -0
  12. package/src/assets/img/bottom-panel.png +0 -0
  13. package/src/assets/img/camera.png +0 -0
  14. package/src/assets/img/camera2.png +0 -0
  15. package/src/assets/img/home.png +0 -0
  16. package/src/assets/img/lock.png +0 -0
  17. package/src/assets/img/play.png +0 -0
  18. package/src/assets/img/profile.jpg +0 -0
  19. package/src/assets/img/qr-code.png +0 -0
  20. package/src/assets/img/shadow.png +0 -0
  21. package/src/assets/img/shadow2.png +0 -0
  22. package/src/assets/img/user.png +0 -0
  23. package/src/assets/svg/Account.svg +0 -4
  24. package/src/assets/svg/Favourite.svg +0 -14
  25. package/src/assets/svg/Upcoming.svg +0 -4
  26. package/src/assets/svg/content-error.svg +0 -28
  27. package/src/assets/svg/download.svg +0 -3
  28. package/src/assets/svg/eye-off.svg +0 -10
  29. package/src/assets/svg/favorites.svg +0 -3
  30. package/src/assets/svg/h.svg +0 -4
  31. package/src/assets/svg/home.svg +0 -5
  32. package/src/assets/svg/home1.svg +0 -3
  33. package/src/assets/svg/menu-bar.svg +0 -4
  34. package/src/assets/svg/my-space.svg +0 -14
  35. package/src/assets/svg/play-icon-with-bg.svg +0 -5
  36. package/src/assets/svg/profile.svg +0 -4
  37. package/src/assets/svg/search.svg +0 -5
  38. package/src/assets/svg/search1.svg +0 -4
  39. package/src/assets/svg/server-error.svg +0 -139
  40. package/src/components/Account/Account.tsx +0 -354
  41. package/src/components/Account/index.ts +0 -6
  42. package/src/components/Alert/AlertDialog.tsx +0 -253
  43. package/src/components/Alert/UAAlert.tsx +0 -176
  44. package/src/components/Alert/index.ts +0 -7
  45. package/src/components/Auth/AuthProvider/AuthProvider.tsx +0 -412
  46. package/src/components/Auth/One/ForgotPassword/ForgotPassword.tsx +0 -333
  47. package/src/components/Auth/One/Login/LoginWithEmail.tsx +0 -449
  48. package/src/components/Auth/One/Login/LoginWithPhone.tsx +0 -309
  49. package/src/components/Auth/One/OTP/OTP.tsx +0 -539
  50. package/src/components/Auth/One/QrLogin/QrLogin.tsx +0 -329
  51. package/src/components/Auth/One/QrLogin/components/index.ts +0 -8
  52. package/src/components/Auth/One/QrLogin/components/qr-scanner-fallback.tsx +0 -158
  53. package/src/components/Auth/One/QrLogin/components/qr-scanner-frame.tsx +0 -207
  54. package/src/components/Auth/One/QrLogin/components/qr-scanner-header.tsx +0 -65
  55. package/src/components/Auth/One/QrLogin/components/qr-scanner-intro.tsx +0 -255
  56. package/src/components/Auth/One/QrLogin/components/qr-scanner-overlay.tsx +0 -291
  57. package/src/components/Auth/One/SignUp/SignUp.tsx +0 -470
  58. package/src/components/Auth/One/SplashScreen/SplashScreen.tsx +0 -229
  59. package/src/components/Auth/One/SplashScreen/components/SplashImage/SplashImage.tsx +0 -92
  60. package/src/components/Auth/One/SplashScreen/components/SplashLottie/SplashLottie.tsx +0 -129
  61. package/src/components/Auth/One/SplashScreen/components/SplashVideo/SplashVideo.tsx +0 -172
  62. package/src/components/Auth/One/SplashScreen/utils/splashUtils.ts +0 -23
  63. package/src/components/Auth/One/index.ts +0 -24
  64. package/src/components/Auth/Two/AuthHeader/AuthHeader.tsx +0 -130
  65. package/src/components/Auth/Two/ForgotPassword/ForgotPassword.tsx +0 -331
  66. package/src/components/Auth/Two/Login/EmailOrPhoneLogin.tsx +0 -612
  67. package/src/components/Auth/Two/OTP/OTP.tsx +0 -504
  68. package/src/components/Auth/Two/SignUp/SignUp.tsx +0 -439
  69. package/src/components/Auth/Two/index.ts +0 -20
  70. package/src/components/Auth/index.ts +0 -16
  71. package/src/components/BackgroundLayout/One/One.tsx +0 -184
  72. package/src/components/BackgroundLayout/Two/Two.tsx +0 -65
  73. package/src/components/BackgroundLayout/index.ts +0 -14
  74. package/src/components/BlogView/BlogView.tsx +0 -282
  75. package/src/components/BlogView/index.ts +0 -8
  76. package/src/components/BlurView/BlurView.tsx +0 -199
  77. package/src/components/BlurView/index.ts +0 -7
  78. package/src/components/BottomSheet/BottomSheet.tsx +0 -204
  79. package/src/components/BottomSheet/BottomSheetOne.tsx +0 -223
  80. package/src/components/BottomSheet/index.ts +0 -9
  81. package/src/components/Button/BackBtn.tsx +0 -149
  82. package/src/components/Button/MenuBtn.tsx +0 -220
  83. package/src/components/Button/PrimaryBtn.tsx +0 -123
  84. package/src/components/Button/SecondaryBtn.tsx +0 -123
  85. package/src/components/Button/TextButton.tsx +0 -150
  86. package/src/components/Button/index.ts +0 -18
  87. package/src/components/Button/types.ts +0 -33
  88. package/src/components/Content/Card/Category/Category.tsx +0 -436
  89. package/src/components/Content/Card/Category/CategroyTwo.tsx +0 -429
  90. package/src/components/Content/Card/NowWatching/NowWatching.tsx +0 -607
  91. package/src/components/Content/Card/Sliders/Styles/One.tsx +0 -490
  92. package/src/components/Content/Card/Sliders/Styles/Three.tsx +0 -1017
  93. package/src/components/Content/Card/Sliders/Styles/Two.tsx +0 -395
  94. package/src/components/Content/Card/Sliders/index.ts +0 -18
  95. package/src/components/Content/Card/Styles/Five.tsx +0 -367
  96. package/src/components/Content/Card/Styles/Four.tsx +0 -366
  97. package/src/components/Content/Card/Styles/One.tsx +0 -372
  98. package/src/components/Content/Card/Styles/RotateInOut.tsx +0 -413
  99. package/src/components/Content/Card/Styles/Six.tsx +0 -378
  100. package/src/components/Content/Card/Styles/Three.tsx +0 -312
  101. package/src/components/Content/Card/Styles/TopTen.tsx +0 -402
  102. package/src/components/Content/Card/Styles/Two.tsx +0 -404
  103. package/src/components/Content/Card/components/AdsPoster.tsx +0 -207
  104. package/src/components/Content/Card/components/CardPoster.tsx +0 -377
  105. package/src/components/Content/Card/components/LiveBadge.tsx +0 -125
  106. package/src/components/Content/Card/components/NavigateToMore.tsx +0 -97
  107. package/src/components/Content/Card/components/RentOrBuyIcon.tsx +0 -134
  108. package/src/components/Content/Card/components/ShowAllButton.tsx +0 -92
  109. package/src/components/Content/Card/components/ThumbnailCard.tsx +0 -219
  110. package/src/components/Content/Card/components/index.ts +0 -12
  111. package/src/components/Content/Card/index.ts +0 -31
  112. package/src/components/Content/Content.tsx +0 -338
  113. package/src/components/Content/Sections.tsx +0 -239
  114. package/src/components/Content/types.ts +0 -180
  115. package/src/components/ContentView/MoreContentList.tsx +0 -330
  116. package/src/components/ContentView/One/ContentViewOne.tsx +0 -251
  117. package/src/components/ContentView/One/components/CastCard.tsx +0 -266
  118. package/src/components/ContentView/One/components/HeroBanner.tsx +0 -413
  119. package/src/components/ContentView/One/components/MiniInfo.tsx +0 -343
  120. package/src/components/ContentView/One/components/Title.tsx +0 -149
  121. package/src/components/ContentView/Two/ContentViewTwo.tsx +0 -332
  122. package/src/components/ContentView/Two/components/Details.tsx +0 -196
  123. package/src/components/ContentView/Two/components/HeroBanner.tsx +0 -267
  124. package/src/components/ContentView/Two/components/LikeShareActions.tsx +0 -125
  125. package/src/components/ContentView/Two/components/MoreLikeThisContentList .tsx +0 -308
  126. package/src/components/ContentView/Two/components/PlayOrTrailer.tsx +0 -162
  127. package/src/components/ContentView/Two/components/SectionTabs.tsx +0 -181
  128. package/src/components/ContentView/Two/components/Title.tsx +0 -229
  129. package/src/components/ContentView/Two/components/index.ts +0 -12
  130. package/src/components/ContentView/index.ts +0 -13
  131. package/src/components/ContentView/shared/AboutSection.tsx +0 -226
  132. package/src/components/ContentView/shared/EpisodeCard.tsx +0 -600
  133. package/src/components/ContentView/shared/GenreTags.tsx +0 -189
  134. package/src/components/ContentView/shared/PlayButton.tsx +0 -52
  135. package/src/components/ContentView/shared/TrailerButton.tsx +0 -76
  136. package/src/components/Fallbacks/NoContentFallback.tsx +0 -175
  137. package/src/components/Fallbacks/NotFoundFallback.tsx +0 -94
  138. package/src/components/Fallbacks/index.ts +0 -7
  139. package/src/components/Headers/AppHeader.tsx +0 -151
  140. package/src/components/Headers/Four.tsx +0 -84
  141. package/src/components/Headers/One.tsx +0 -115
  142. package/src/components/Headers/Three.tsx +0 -137
  143. package/src/components/Headers/Two.tsx +0 -101
  144. package/src/components/Headers/index.ts +0 -34
  145. package/src/components/Input/Input.ts +0 -18
  146. package/src/components/Input/InputOne.tsx +0 -265
  147. package/src/components/Input/InputThree.tsx +0 -205
  148. package/src/components/Input/InputTwo.tsx +0 -217
  149. package/src/components/Input/PhoneInput/One/One.tsx +0 -415
  150. package/src/components/Input/PhoneInput/Two/Two.tsx +0 -406
  151. package/src/components/Input/PhoneInput/index.ts +0 -14
  152. package/src/components/Keyboard/HideKeyboard.tsx +0 -91
  153. package/src/components/Loader/Loader.tsx +0 -49
  154. package/src/components/Logo/Logo.tsx +0 -150
  155. package/src/components/NewRelease/NewReleaseSheet.tsx +0 -260
  156. package/src/components/NewRelease/index.ts +0 -6
  157. package/src/components/Reels/ReelsSeries/MediaControls/BottomControls.tsx +0 -226
  158. package/src/components/Reels/ReelsSeries/MediaControls/MediaControlsProvider.tsx +0 -324
  159. package/src/components/Reels/ReelsSeries/MediaControls/MiddleControls.tsx +0 -201
  160. package/src/components/Reels/ReelsSeries/MediaControls/RightControls.tsx +0 -100
  161. package/src/components/Reels/ReelsSeries/MediaControls/TopControls.tsx +0 -168
  162. package/src/components/Reels/ReelsSeries/Model/DetailsModal.tsx +0 -207
  163. package/src/components/Reels/ReelsSeries/Model/SettingModal.tsx +0 -151
  164. package/src/components/Reels/ReelsSeries/Model/UnlockModal.tsx +0 -159
  165. package/src/components/Reels/ReelsSeries/ReelsSeries.tsx +0 -278
  166. package/src/components/Reels/ReelsSeries/ReelsSeriesItem.tsx +0 -569
  167. package/src/components/Reels/ReelsSeries/components/AnimatedThreeLines.tsx +0 -189
  168. package/src/components/Reels/ReelsSeries/components/Episodes.tsx +0 -159
  169. package/src/components/Reels/ReelsSeries/components/GradientOverlay.tsx +0 -46
  170. package/src/components/Reels/ReelsSeries/components/Like.tsx +0 -45
  171. package/src/components/Reels/ReelsSeries/components/RotatingLoader.tsx +0 -84
  172. package/src/components/Reels/ReelsSeries/components/Synopsis.tsx +0 -338
  173. package/src/components/Reels/ReelsSeries/components/VideoControls/QualityControl.tsx +0 -185
  174. package/src/components/Reels/ReelsSeries/components/VideoControls/SpeedControl.tsx +0 -77
  175. package/src/components/Reels/ReelsSeries/components/VideoControls/index.ts +0 -7
  176. package/src/components/Reels/ReelsSeries/types.ts +0 -78
  177. package/src/components/Reels/ReelsSeries/useReelsWatchProgress.ts +0 -90
  178. package/src/components/Reels/ReelsSeries/utils/quality.ts +0 -72
  179. package/src/components/Reels/index.ts +0 -9
  180. package/src/components/Reels/utils/Controls/gestureUtils.ts +0 -46
  181. package/src/components/Reels/utils/Controls/index.ts +0 -9
  182. package/src/components/Reels/utils/Controls/overlayUtils.ts +0 -40
  183. package/src/components/Reels/utils/Controls/videoControlsConstants.ts +0 -30
  184. package/src/components/Reels/utils/Controls/videoRef.ts +0 -9
  185. package/src/components/Reels/utils/index.ts +0 -6
  186. package/src/components/Reels/utils/timeoutUtils.ts +0 -34
  187. package/src/components/Search/One.tsx +0 -262
  188. package/src/components/Search/components/RecentSearchesSection.tsx +0 -181
  189. package/src/components/Search/components/SearchCard.tsx +0 -285
  190. package/src/components/Search/index.ts +0 -16
  191. package/src/components/Settings/AppSettings.tsx +0 -442
  192. package/src/components/Settings/index.ts +0 -6
  193. package/src/components/Subscription/SubOne.tsx +0 -423
  194. package/src/components/Subscription/components/SubsDetailsModal.tsx +0 -347
  195. package/src/components/Subscription/components/SubscriptionCard.tsx +0 -342
  196. package/src/components/Subscription/index.ts +0 -12
  197. package/src/components/TabBar/One.tsx +0 -145
  198. package/src/components/TabBar/Three.tsx +0 -162
  199. package/src/components/TabBar/Two.tsx +0 -179
  200. package/src/components/TabBar/index.ts +0 -20
  201. package/src/components/Text/Text.tsx +0 -90
  202. package/src/components/Text/index.ts +0 -6
  203. package/src/components/User/DeviceSessions/DeviceSessions.tsx +0 -468
  204. package/src/components/User/ProfileUpdate/ProfileUpdate.tsx +0 -293
  205. package/src/components/User/PurchaseHistory/PurchaseHistory.tsx +0 -504
  206. package/src/components/User/WatchHistory/WatchHistory.tsx +0 -214
  207. package/src/components/User/WatchLater/WatchLater.tsx +0 -400
  208. package/src/components/User/components/UserAvatar.tsx +0 -121
  209. package/src/components/User/components/UserSection.tsx +0 -218
  210. package/src/components/User/index.ts +0 -18
  211. package/src/components/View/View.tsx +0 -38
  212. package/src/components/View/index.ts +0 -6
  213. package/src/components/common/AppStatusBar.tsx +0 -57
  214. package/src/components/common/index.ts +0 -1
  215. package/src/components/index.ts +0 -30
  216. package/src/components/layout/SafeAreaWrapper.tsx +0 -50
  217. package/src/components/layout/index.ts +0 -6
  218. package/src/constants/dummySections.ts +0 -103
  219. package/src/hooks/Images/index.ts +0 -6
  220. package/src/hooks/Images/useImageLoader.ts +0 -209
  221. package/src/hooks/index.ts +0 -16
  222. package/src/hooks/useAdTracking.ts +0 -354
  223. package/src/hooks/useCards.ts +0 -247
  224. package/src/hooks/useDebounce.ts +0 -40
  225. package/src/hooks/useKeyboard.ts +0 -43
  226. package/src/hooks/useNavigationMode.ts +0 -48
  227. package/src/hooks/usePaginatedSection.ts +0 -108
  228. package/src/hooks/usePrevious.ts +0 -28
  229. package/src/hooks/useSafeCallback.ts +0 -29
  230. package/src/hooks/useSkeletonItems.ts +0 -30
  231. package/src/hooks/useSplashCache.ts +0 -245
  232. package/src/index.tsx +0 -9
  233. package/src/store/RecentSearchesStore.ts +0 -72
  234. package/src/store/splashStore.ts +0 -86
  235. package/src/store/storage.ts +0 -29
  236. package/src/theme/ThemeContext.ts +0 -19
  237. package/src/theme/ThemeProvider.tsx +0 -87
  238. package/src/theme/hooks/index.ts +0 -6
  239. package/src/theme/hooks/useTheme.ts +0 -118
  240. package/src/theme/index.ts +0 -8
  241. package/src/theme/store/theme.ts +0 -50
  242. package/src/theme/themes.ts +0 -262
  243. package/src/theme/utils/cleanColors.ts +0 -71
  244. package/src/theme/utils/toRgba.ts +0 -150
  245. package/src/types/content/content-view.types.ts +0 -209
  246. package/src/types/hook/index.ts +0 -6
  247. package/src/types/hook/usePaginatedSection.ts +0 -20
  248. package/src/types/index.ts +0 -10
  249. package/src/types/navigation.ts +0 -17
  250. package/src/types/sections/index.ts +0 -87
  251. package/src/types/user.ts +0 -18
  252. package/src/utils/Display.ts +0 -15
  253. package/src/utils/Formater.ts +0 -33
  254. package/src/utils/SizeMatters.ts +0 -8
  255. package/src/utils/Spacing.ts +0 -27
  256. package/src/utils/colorUtils.ts +0 -70
  257. package/src/utils/imageValidation.ts +0 -36
  258. package/src/utils/interaction.ts +0 -19
@@ -1,423 +0,0 @@
1
- /**
2
- * @author Naresh Dhamu
3
- * @LastModified Mon 13 Jul 2026 at 10:13 AM
4
- */
5
-
6
- import { memo, useCallback } from 'react';
7
- import {
8
- View,
9
- StyleSheet,
10
- TouchableOpacity,
11
- ActivityIndicator,
12
- Dimensions,
13
- ScrollView,
14
- } from 'react-native';
15
- import Carousel from 'react-native-reanimated-carousel';
16
- import { scale, verticalScale } from 'react-native-size-matters';
17
- import { Text } from '../Text';
18
- import AppHeader from '../Headers/AppHeader';
19
- import { useTheme } from '../../theme';
20
- import { RFValue } from 'react-native-responsive-fontsize';
21
- import { SubscriptionCard, type Plan } from './components/SubscriptionCard';
22
- import type { ThemeOverride } from '../../theme';
23
-
24
- const { width: SCREEN_WIDTH, height: SCREEN_HEIGHT } = Dimensions.get('window');
25
- const CAROUSEL_HEIGHT = SCREEN_HEIGHT * 0.42;
26
-
27
- type Props = {
28
- theme?: ThemeOverride;
29
- plans: Plan[];
30
-
31
- onSubscribe?: (plan: Plan) => void;
32
- subscribeButtonText?: string;
33
- subscribeLoadingId?: string | null;
34
-
35
- isLoading?: boolean;
36
- errorMessage?: string;
37
-
38
- onBackPress?: () => void;
39
-
40
- onRestore?: () => void;
41
- restoreLoading?: boolean;
42
- restoreText?: string;
43
-
44
- restoreDescription?: string;
45
-
46
- onPressTerms?: () => void;
47
- onPressPrivacy?: () => void;
48
- termsText?: string;
49
- privacyText?: string;
50
-
51
- header: {
52
- topTitle: string;
53
- topTitleAlign?: 'center' | 'left';
54
- title: string;
55
- subTitle: string;
56
- };
57
-
58
- footer: {
59
- title: string;
60
- subTitle: string;
61
- };
62
- };
63
-
64
- const parsePrice = (price: string) =>
65
- parseFloat(price.replace(/[^\d.]/g, '')) || 0;
66
-
67
- const SubscriptionSliderOne = ({
68
- theme,
69
- onSubscribe,
70
- subscribeButtonText = 'Subscribe',
71
- subscribeLoadingId,
72
- plans = [],
73
- errorMessage = 'Something went wrong',
74
- isLoading = false,
75
- onBackPress,
76
- onRestore,
77
- restoreLoading = false,
78
- restoreText = 'Restore Purchase',
79
- restoreDescription = 'Already purchased? Restore your subscription here.',
80
- header,
81
- footer,
82
- onPressTerms,
83
- onPressPrivacy,
84
- termsText = 'Terms of Use',
85
- privacyText = 'Privacy Policy',
86
- }: Props) => {
87
- const { theme: appliedTheme } = useTheme(theme);
88
- const { colors } = appliedTheme;
89
-
90
- const sortedPlans = [...plans]?.sort?.((a, b) => {
91
- const aPopular = a?.isPopular ? 1 : 0;
92
- const bPopular = b?.isPopular ? 1 : 0;
93
-
94
- if (aPopular !== bPopular) return bPopular - aPopular;
95
- if (aPopular) return parsePrice(b.price) - parsePrice(a.price);
96
- return 0;
97
- });
98
-
99
- const placeholderData = new Array(plans.length || 3).fill({});
100
- const shouldLoop = sortedPlans?.length > 1 || placeholderData?.length > 1;
101
-
102
- const handleSubscribe = useCallback(
103
- (plan: Plan) => onSubscribe?.(plan),
104
- [onSubscribe]
105
- );
106
-
107
- const renderPlan = ({ item }: { item: Plan }) => {
108
- const isProcessing = subscribeLoadingId === item.id;
109
-
110
- return (
111
- <SubscriptionCard
112
- plan={item}
113
- colors={colors}
114
- onSubscribe={handleSubscribe}
115
- isLoading={isLoading}
116
- isProcessing={isProcessing}
117
- subscribeButtonText={
118
- isProcessing ? 'Subscribing...' : subscribeButtonText
119
- }
120
- />
121
- );
122
- };
123
-
124
- const dynamicRestoreBtnStyle = {
125
- backgroundColor: colors.primary,
126
- opacity: restoreLoading ? 0.7 : 1,
127
- };
128
- const dynamicRestoreTextStyle = {
129
- color: colors.onPrimary,
130
- };
131
-
132
- return (
133
- <View style={[styles.container, { backgroundColor: colors.background }]}>
134
- <AppHeader
135
- title={header.topTitle}
136
- onBackPress={onBackPress}
137
- titleAlign={header.topTitleAlign}
138
- theme={theme}
139
- />
140
-
141
- <ScrollView
142
- contentContainerStyle={styles.scrollContent}
143
- showsVerticalScrollIndicator={false}
144
- >
145
- {/* Header */}
146
- <View style={styles.headerContent}>
147
- <Text
148
- style={[styles.title, { color: colors.textPrimary }]}
149
- numberOfLines={2}
150
- ellipsizeMode="tail"
151
- >
152
- {header.title}
153
- </Text>
154
-
155
- <Text
156
- style={[styles.subtitle, { color: colors.onSurfaceVariant }]}
157
- numberOfLines={2}
158
- ellipsizeMode="tail"
159
- >
160
- {header.subTitle}
161
- </Text>
162
- </View>
163
-
164
- {/* Carousel */}
165
- <View style={styles.carouselWrapper}>
166
- {!plans.length && !isLoading ? (
167
- <View
168
- style={[
169
- styles.error,
170
- {
171
- borderRadius: scale(12),
172
- width: SCREEN_WIDTH,
173
- height: CAROUSEL_HEIGHT,
174
- },
175
- ]}
176
- >
177
- <Text
178
- style={{ color: colors.error }}
179
- numberOfLines={2}
180
- ellipsizeMode="tail"
181
- >
182
- {errorMessage}
183
- </Text>
184
- </View>
185
- ) : (
186
- <Carousel
187
- width={SCREEN_WIDTH}
188
- height={CAROUSEL_HEIGHT}
189
- data={isLoading ? placeholderData : sortedPlans}
190
- renderItem={renderPlan}
191
- loop={shouldLoop}
192
- autoPlay={false}
193
- scrollAnimationDuration={500}
194
- mode="parallax"
195
- modeConfig={{
196
- parallaxScrollingOffset: scale(60),
197
- parallaxAdjacentItemScale: 0.8,
198
- }}
199
- />
200
- )}
201
- </View>
202
-
203
- {/* Footer */}
204
- <View style={styles.footerContainer}>
205
- <Text
206
- style={[styles.footerTitle, { color: colors.textPrimary }]}
207
- numberOfLines={2}
208
- ellipsizeMode="tail"
209
- >
210
- {footer.title}
211
- </Text>
212
-
213
- <Text
214
- style={[styles.footerSub, { color: colors.onSurfaceVariant }]}
215
- numberOfLines={2}
216
- ellipsizeMode="tail"
217
- >
218
- {footer.subTitle}
219
- </Text>
220
- </View>
221
-
222
- {/* Terms + Privacy */}
223
- {(onPressTerms || onPressPrivacy) && (
224
- <View style={styles.legalContainer}>
225
- {onPressTerms && (
226
- <TouchableOpacity onPress={onPressTerms} activeOpacity={0.6}>
227
- <Text
228
- style={[styles.legalText, { color: colors.primary }]}
229
- numberOfLines={1}
230
- ellipsizeMode="tail"
231
- >
232
- {termsText}
233
- </Text>
234
- </TouchableOpacity>
235
- )}
236
-
237
- {onPressTerms && onPressPrivacy && (
238
- <Text style={styles.dot}> • </Text>
239
- )}
240
-
241
- {onPressPrivacy && (
242
- <TouchableOpacity onPress={onPressPrivacy} activeOpacity={0.6}>
243
- <Text
244
- style={[styles.legalText, { color: colors.primary }]}
245
- numberOfLines={1}
246
- ellipsizeMode="tail"
247
- >
248
- {privacyText}
249
- </Text>
250
- </TouchableOpacity>
251
- )}
252
- </View>
253
- )}
254
-
255
- {/* Restore */}
256
- {onRestore && (
257
- <View style={styles.restoreWrapper}>
258
- <TouchableOpacity
259
- onPress={onRestore}
260
- activeOpacity={0.8}
261
- disabled={restoreLoading}
262
- style={[styles.restoreButton, dynamicRestoreBtnStyle]}
263
- >
264
- {restoreLoading ? (
265
- <>
266
- <ActivityIndicator size="small" color={colors.onPrimary} />
267
- <Text
268
- style={[
269
- styles.restoreText,
270
- styles.restoreTextWithMargin,
271
- dynamicRestoreTextStyle,
272
- ]}
273
- numberOfLines={1}
274
- >
275
- Restoring...
276
- </Text>
277
- </>
278
- ) : (
279
- <Text
280
- style={[styles.restoreText, { color: colors.onPrimary }]}
281
- numberOfLines={1}
282
- >
283
- {restoreText}
284
- </Text>
285
- )}
286
- </TouchableOpacity>
287
-
288
- {restoreDescription && (
289
- <Text
290
- style={[
291
- styles.restoreDescription,
292
- { color: colors.onSurfaceVariant },
293
- ]}
294
- numberOfLines={2}
295
- ellipsizeMode="tail"
296
- >
297
- {restoreDescription}
298
- </Text>
299
- )}
300
- </View>
301
- )}
302
- </ScrollView>
303
- </View>
304
- );
305
- };
306
-
307
- export default memo(SubscriptionSliderOne);
308
-
309
- const styles = StyleSheet.create({
310
- container: { flex: 1 },
311
-
312
- scrollContent: {
313
- flexGrow: 1,
314
- paddingBottom: verticalScale(20),
315
- },
316
-
317
- headerContent: {
318
- paddingHorizontal: scale(20),
319
- marginTop: verticalScale(10),
320
- alignItems: 'center',
321
- },
322
-
323
- title: {
324
- fontSize: RFValue(20),
325
- fontWeight: '700',
326
- textAlign: 'center',
327
- flexShrink: 1,
328
- },
329
-
330
- subtitle: {
331
- fontSize: RFValue(13),
332
- textAlign: 'center',
333
- marginTop: verticalScale(6),
334
- lineHeight: scale(18),
335
- opacity: 0.85,
336
- flexShrink: 1,
337
- },
338
-
339
- carouselWrapper: {
340
- alignItems: 'center',
341
- },
342
-
343
- error: {
344
- height: verticalScale(200),
345
- justifyContent: 'center',
346
- alignItems: 'center',
347
- },
348
-
349
- footerContainer: {
350
- marginTop: verticalScale(10),
351
- paddingHorizontal: scale(20),
352
- alignItems: 'center',
353
- },
354
-
355
- footerTitle: {
356
- fontSize: RFValue(12),
357
- fontWeight: '600',
358
- textAlign: 'center',
359
- lineHeight: scale(16),
360
- opacity: 0.9,
361
- flexShrink: 1,
362
- },
363
-
364
- footerSub: {
365
- fontSize: RFValue(11),
366
- textAlign: 'center',
367
- marginTop: verticalScale(4),
368
- lineHeight: scale(16),
369
- opacity: 0.75,
370
- flexShrink: 1,
371
- },
372
-
373
- legalContainer: {
374
- flexDirection: 'row',
375
- justifyContent: 'center',
376
- alignItems: 'center',
377
- marginTop: verticalScale(10),
378
- },
379
-
380
- legalText: {
381
- fontSize: RFValue(11),
382
- fontWeight: '500',
383
- textDecorationLine: 'underline',
384
- },
385
-
386
- dot: {
387
- marginHorizontal: scale(6),
388
- fontSize: RFValue(10),
389
- opacity: 0.6,
390
- },
391
-
392
- restoreWrapper: {
393
- alignItems: 'center',
394
- flexDirection: 'column',
395
- gap: verticalScale(8),
396
- marginTop: verticalScale(15),
397
- },
398
-
399
- restoreDescription: {
400
- fontSize: RFValue(11),
401
- textAlign: 'center',
402
- marginBottom: verticalScale(8),
403
- maxWidth: '70%',
404
- opacity: 0.75,
405
- flexShrink: 1,
406
- },
407
-
408
- restoreButton: {
409
- paddingVertical: verticalScale(9),
410
- paddingHorizontal: scale(20),
411
- borderRadius: scale(14),
412
- flexDirection: 'row',
413
- alignItems: 'center',
414
- },
415
-
416
- restoreText: {
417
- fontSize: RFValue(12),
418
- fontWeight: '600',
419
- },
420
- restoreTextWithMargin: {
421
- marginLeft: scale(8),
422
- },
423
- });