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

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 (276) hide show
  1. package/README.md +40 -36
  2. package/lib/module/components/Content/Card/components/AdsPoster.js +40 -55
  3. package/lib/module/components/Content/Card/components/AdsPoster.js.map +1 -1
  4. package/lib/module/components/Content/Card/components/CardPoster.js +81 -107
  5. package/lib/module/components/Content/Card/components/CardPoster.js.map +1 -1
  6. package/lib/module/components/Content/Card/components/ThumbnailCard.js +48 -70
  7. package/lib/module/components/Content/Card/components/ThumbnailCard.js.map +1 -1
  8. package/lib/module/components/Search/components/SearchCard.js +2 -2
  9. package/lib/module/components/Search/components/SearchCard.js.map +1 -1
  10. package/lib/typescript/src/components/Content/Card/components/AdsPoster.d.ts +1 -1
  11. package/lib/typescript/src/components/Content/Card/components/AdsPoster.d.ts.map +1 -1
  12. package/lib/typescript/src/components/Content/Card/components/CardPoster.d.ts.map +1 -1
  13. package/lib/typescript/src/components/Content/Card/components/ThumbnailCard.d.ts +1 -1
  14. package/lib/typescript/src/components/Content/Card/components/ThumbnailCard.d.ts.map +1 -1
  15. package/lib/typescript/src/components/Search/components/SearchCard.d.ts.map +1 -1
  16. package/package.json +1 -3
  17. package/lib/module/utils/colorUtils.js +0 -68
  18. package/lib/module/utils/colorUtils.js.map +0 -1
  19. package/lib/typescript/src/utils/colorUtils.d.ts +0 -19
  20. package/lib/typescript/src/utils/colorUtils.d.ts.map +0 -1
  21. package/src/assets/animations/135037-payment-processing-error.json +0 -1347
  22. package/src/assets/animations/7227-vui-animation.json +0 -3377
  23. package/src/assets/animations/Failed.json +0 -2103
  24. package/src/assets/animations/Pending.json +0 -522
  25. package/src/assets/animations/Successful.json +0 -2289
  26. package/src/assets/animations/heart.json +0 -788
  27. package/src/assets/animations/succesfull-payment.json +0 -2379
  28. package/src/assets/animations/voice-icon.json +0 -542
  29. package/src/assets/img/back.png +0 -0
  30. package/src/assets/img/bottom-panel.png +0 -0
  31. package/src/assets/img/camera.png +0 -0
  32. package/src/assets/img/camera2.png +0 -0
  33. package/src/assets/img/home.png +0 -0
  34. package/src/assets/img/lock.png +0 -0
  35. package/src/assets/img/play.png +0 -0
  36. package/src/assets/img/profile.jpg +0 -0
  37. package/src/assets/img/qr-code.png +0 -0
  38. package/src/assets/img/shadow.png +0 -0
  39. package/src/assets/img/shadow2.png +0 -0
  40. package/src/assets/img/user.png +0 -0
  41. package/src/assets/svg/Account.svg +0 -4
  42. package/src/assets/svg/Favourite.svg +0 -14
  43. package/src/assets/svg/Upcoming.svg +0 -4
  44. package/src/assets/svg/content-error.svg +0 -28
  45. package/src/assets/svg/download.svg +0 -3
  46. package/src/assets/svg/eye-off.svg +0 -10
  47. package/src/assets/svg/favorites.svg +0 -3
  48. package/src/assets/svg/h.svg +0 -4
  49. package/src/assets/svg/home.svg +0 -5
  50. package/src/assets/svg/home1.svg +0 -3
  51. package/src/assets/svg/menu-bar.svg +0 -4
  52. package/src/assets/svg/my-space.svg +0 -14
  53. package/src/assets/svg/play-icon-with-bg.svg +0 -5
  54. package/src/assets/svg/profile.svg +0 -4
  55. package/src/assets/svg/search.svg +0 -5
  56. package/src/assets/svg/search1.svg +0 -4
  57. package/src/assets/svg/server-error.svg +0 -139
  58. package/src/components/Account/Account.tsx +0 -354
  59. package/src/components/Account/index.ts +0 -6
  60. package/src/components/Alert/AlertDialog.tsx +0 -253
  61. package/src/components/Alert/UAAlert.tsx +0 -176
  62. package/src/components/Alert/index.ts +0 -7
  63. package/src/components/Auth/AuthProvider/AuthProvider.tsx +0 -412
  64. package/src/components/Auth/One/ForgotPassword/ForgotPassword.tsx +0 -333
  65. package/src/components/Auth/One/Login/LoginWithEmail.tsx +0 -449
  66. package/src/components/Auth/One/Login/LoginWithPhone.tsx +0 -309
  67. package/src/components/Auth/One/OTP/OTP.tsx +0 -539
  68. package/src/components/Auth/One/QrLogin/QrLogin.tsx +0 -329
  69. package/src/components/Auth/One/QrLogin/components/index.ts +0 -8
  70. package/src/components/Auth/One/QrLogin/components/qr-scanner-fallback.tsx +0 -158
  71. package/src/components/Auth/One/QrLogin/components/qr-scanner-frame.tsx +0 -207
  72. package/src/components/Auth/One/QrLogin/components/qr-scanner-header.tsx +0 -65
  73. package/src/components/Auth/One/QrLogin/components/qr-scanner-intro.tsx +0 -255
  74. package/src/components/Auth/One/QrLogin/components/qr-scanner-overlay.tsx +0 -291
  75. package/src/components/Auth/One/SignUp/SignUp.tsx +0 -470
  76. package/src/components/Auth/One/SplashScreen/SplashScreen.tsx +0 -229
  77. package/src/components/Auth/One/SplashScreen/components/SplashImage/SplashImage.tsx +0 -92
  78. package/src/components/Auth/One/SplashScreen/components/SplashLottie/SplashLottie.tsx +0 -129
  79. package/src/components/Auth/One/SplashScreen/components/SplashVideo/SplashVideo.tsx +0 -172
  80. package/src/components/Auth/One/SplashScreen/utils/splashUtils.ts +0 -23
  81. package/src/components/Auth/One/index.ts +0 -24
  82. package/src/components/Auth/Two/AuthHeader/AuthHeader.tsx +0 -130
  83. package/src/components/Auth/Two/ForgotPassword/ForgotPassword.tsx +0 -331
  84. package/src/components/Auth/Two/Login/EmailOrPhoneLogin.tsx +0 -612
  85. package/src/components/Auth/Two/OTP/OTP.tsx +0 -504
  86. package/src/components/Auth/Two/SignUp/SignUp.tsx +0 -439
  87. package/src/components/Auth/Two/index.ts +0 -20
  88. package/src/components/Auth/index.ts +0 -16
  89. package/src/components/BackgroundLayout/One/One.tsx +0 -184
  90. package/src/components/BackgroundLayout/Two/Two.tsx +0 -65
  91. package/src/components/BackgroundLayout/index.ts +0 -14
  92. package/src/components/BlogView/BlogView.tsx +0 -282
  93. package/src/components/BlogView/index.ts +0 -8
  94. package/src/components/BlurView/BlurView.tsx +0 -199
  95. package/src/components/BlurView/index.ts +0 -7
  96. package/src/components/BottomSheet/BottomSheet.tsx +0 -204
  97. package/src/components/BottomSheet/BottomSheetOne.tsx +0 -223
  98. package/src/components/BottomSheet/index.ts +0 -9
  99. package/src/components/Button/BackBtn.tsx +0 -149
  100. package/src/components/Button/MenuBtn.tsx +0 -220
  101. package/src/components/Button/PrimaryBtn.tsx +0 -123
  102. package/src/components/Button/SecondaryBtn.tsx +0 -123
  103. package/src/components/Button/TextButton.tsx +0 -150
  104. package/src/components/Button/index.ts +0 -18
  105. package/src/components/Button/types.ts +0 -33
  106. package/src/components/Content/Card/Category/Category.tsx +0 -436
  107. package/src/components/Content/Card/Category/CategroyTwo.tsx +0 -429
  108. package/src/components/Content/Card/NowWatching/NowWatching.tsx +0 -607
  109. package/src/components/Content/Card/Sliders/Styles/One.tsx +0 -490
  110. package/src/components/Content/Card/Sliders/Styles/Three.tsx +0 -1017
  111. package/src/components/Content/Card/Sliders/Styles/Two.tsx +0 -395
  112. package/src/components/Content/Card/Sliders/index.ts +0 -18
  113. package/src/components/Content/Card/Styles/Five.tsx +0 -367
  114. package/src/components/Content/Card/Styles/Four.tsx +0 -366
  115. package/src/components/Content/Card/Styles/One.tsx +0 -372
  116. package/src/components/Content/Card/Styles/RotateInOut.tsx +0 -413
  117. package/src/components/Content/Card/Styles/Six.tsx +0 -378
  118. package/src/components/Content/Card/Styles/Three.tsx +0 -312
  119. package/src/components/Content/Card/Styles/TopTen.tsx +0 -402
  120. package/src/components/Content/Card/Styles/Two.tsx +0 -404
  121. package/src/components/Content/Card/components/AdsPoster.tsx +0 -207
  122. package/src/components/Content/Card/components/CardPoster.tsx +0 -377
  123. package/src/components/Content/Card/components/LiveBadge.tsx +0 -125
  124. package/src/components/Content/Card/components/NavigateToMore.tsx +0 -97
  125. package/src/components/Content/Card/components/RentOrBuyIcon.tsx +0 -134
  126. package/src/components/Content/Card/components/ShowAllButton.tsx +0 -92
  127. package/src/components/Content/Card/components/ThumbnailCard.tsx +0 -219
  128. package/src/components/Content/Card/components/index.ts +0 -12
  129. package/src/components/Content/Card/index.ts +0 -31
  130. package/src/components/Content/Content.tsx +0 -338
  131. package/src/components/Content/Sections.tsx +0 -239
  132. package/src/components/Content/types.ts +0 -180
  133. package/src/components/ContentView/MoreContentList.tsx +0 -330
  134. package/src/components/ContentView/One/ContentViewOne.tsx +0 -251
  135. package/src/components/ContentView/One/components/CastCard.tsx +0 -266
  136. package/src/components/ContentView/One/components/HeroBanner.tsx +0 -413
  137. package/src/components/ContentView/One/components/MiniInfo.tsx +0 -343
  138. package/src/components/ContentView/One/components/Title.tsx +0 -149
  139. package/src/components/ContentView/Two/ContentViewTwo.tsx +0 -332
  140. package/src/components/ContentView/Two/components/Details.tsx +0 -196
  141. package/src/components/ContentView/Two/components/HeroBanner.tsx +0 -267
  142. package/src/components/ContentView/Two/components/LikeShareActions.tsx +0 -125
  143. package/src/components/ContentView/Two/components/MoreLikeThisContentList .tsx +0 -308
  144. package/src/components/ContentView/Two/components/PlayOrTrailer.tsx +0 -162
  145. package/src/components/ContentView/Two/components/SectionTabs.tsx +0 -181
  146. package/src/components/ContentView/Two/components/Title.tsx +0 -229
  147. package/src/components/ContentView/Two/components/index.ts +0 -12
  148. package/src/components/ContentView/index.ts +0 -13
  149. package/src/components/ContentView/shared/AboutSection.tsx +0 -226
  150. package/src/components/ContentView/shared/EpisodeCard.tsx +0 -600
  151. package/src/components/ContentView/shared/GenreTags.tsx +0 -189
  152. package/src/components/ContentView/shared/PlayButton.tsx +0 -52
  153. package/src/components/ContentView/shared/TrailerButton.tsx +0 -76
  154. package/src/components/Fallbacks/NoContentFallback.tsx +0 -175
  155. package/src/components/Fallbacks/NotFoundFallback.tsx +0 -94
  156. package/src/components/Fallbacks/index.ts +0 -7
  157. package/src/components/Headers/AppHeader.tsx +0 -151
  158. package/src/components/Headers/Four.tsx +0 -84
  159. package/src/components/Headers/One.tsx +0 -115
  160. package/src/components/Headers/Three.tsx +0 -137
  161. package/src/components/Headers/Two.tsx +0 -101
  162. package/src/components/Headers/index.ts +0 -34
  163. package/src/components/Input/Input.ts +0 -18
  164. package/src/components/Input/InputOne.tsx +0 -265
  165. package/src/components/Input/InputThree.tsx +0 -205
  166. package/src/components/Input/InputTwo.tsx +0 -217
  167. package/src/components/Input/PhoneInput/One/One.tsx +0 -415
  168. package/src/components/Input/PhoneInput/Two/Two.tsx +0 -406
  169. package/src/components/Input/PhoneInput/index.ts +0 -14
  170. package/src/components/Keyboard/HideKeyboard.tsx +0 -91
  171. package/src/components/Loader/Loader.tsx +0 -49
  172. package/src/components/Logo/Logo.tsx +0 -150
  173. package/src/components/NewRelease/NewReleaseSheet.tsx +0 -260
  174. package/src/components/NewRelease/index.ts +0 -6
  175. package/src/components/Reels/ReelsSeries/MediaControls/BottomControls.tsx +0 -226
  176. package/src/components/Reels/ReelsSeries/MediaControls/MediaControlsProvider.tsx +0 -324
  177. package/src/components/Reels/ReelsSeries/MediaControls/MiddleControls.tsx +0 -201
  178. package/src/components/Reels/ReelsSeries/MediaControls/RightControls.tsx +0 -100
  179. package/src/components/Reels/ReelsSeries/MediaControls/TopControls.tsx +0 -168
  180. package/src/components/Reels/ReelsSeries/Model/DetailsModal.tsx +0 -207
  181. package/src/components/Reels/ReelsSeries/Model/SettingModal.tsx +0 -151
  182. package/src/components/Reels/ReelsSeries/Model/UnlockModal.tsx +0 -159
  183. package/src/components/Reels/ReelsSeries/ReelsSeries.tsx +0 -278
  184. package/src/components/Reels/ReelsSeries/ReelsSeriesItem.tsx +0 -569
  185. package/src/components/Reels/ReelsSeries/components/AnimatedThreeLines.tsx +0 -189
  186. package/src/components/Reels/ReelsSeries/components/Episodes.tsx +0 -159
  187. package/src/components/Reels/ReelsSeries/components/GradientOverlay.tsx +0 -46
  188. package/src/components/Reels/ReelsSeries/components/Like.tsx +0 -45
  189. package/src/components/Reels/ReelsSeries/components/RotatingLoader.tsx +0 -84
  190. package/src/components/Reels/ReelsSeries/components/Synopsis.tsx +0 -338
  191. package/src/components/Reels/ReelsSeries/components/VideoControls/QualityControl.tsx +0 -185
  192. package/src/components/Reels/ReelsSeries/components/VideoControls/SpeedControl.tsx +0 -77
  193. package/src/components/Reels/ReelsSeries/components/VideoControls/index.ts +0 -7
  194. package/src/components/Reels/ReelsSeries/types.ts +0 -78
  195. package/src/components/Reels/ReelsSeries/useReelsWatchProgress.ts +0 -90
  196. package/src/components/Reels/ReelsSeries/utils/quality.ts +0 -72
  197. package/src/components/Reels/index.ts +0 -9
  198. package/src/components/Reels/utils/Controls/gestureUtils.ts +0 -46
  199. package/src/components/Reels/utils/Controls/index.ts +0 -9
  200. package/src/components/Reels/utils/Controls/overlayUtils.ts +0 -40
  201. package/src/components/Reels/utils/Controls/videoControlsConstants.ts +0 -30
  202. package/src/components/Reels/utils/Controls/videoRef.ts +0 -9
  203. package/src/components/Reels/utils/index.ts +0 -6
  204. package/src/components/Reels/utils/timeoutUtils.ts +0 -34
  205. package/src/components/Search/One.tsx +0 -262
  206. package/src/components/Search/components/RecentSearchesSection.tsx +0 -181
  207. package/src/components/Search/components/SearchCard.tsx +0 -285
  208. package/src/components/Search/index.ts +0 -16
  209. package/src/components/Settings/AppSettings.tsx +0 -442
  210. package/src/components/Settings/index.ts +0 -6
  211. package/src/components/Subscription/SubOne.tsx +0 -423
  212. package/src/components/Subscription/components/SubsDetailsModal.tsx +0 -347
  213. package/src/components/Subscription/components/SubscriptionCard.tsx +0 -342
  214. package/src/components/Subscription/index.ts +0 -12
  215. package/src/components/TabBar/One.tsx +0 -145
  216. package/src/components/TabBar/Three.tsx +0 -162
  217. package/src/components/TabBar/Two.tsx +0 -179
  218. package/src/components/TabBar/index.ts +0 -20
  219. package/src/components/Text/Text.tsx +0 -90
  220. package/src/components/Text/index.ts +0 -6
  221. package/src/components/User/DeviceSessions/DeviceSessions.tsx +0 -468
  222. package/src/components/User/ProfileUpdate/ProfileUpdate.tsx +0 -293
  223. package/src/components/User/PurchaseHistory/PurchaseHistory.tsx +0 -504
  224. package/src/components/User/WatchHistory/WatchHistory.tsx +0 -214
  225. package/src/components/User/WatchLater/WatchLater.tsx +0 -400
  226. package/src/components/User/components/UserAvatar.tsx +0 -121
  227. package/src/components/User/components/UserSection.tsx +0 -218
  228. package/src/components/User/index.ts +0 -18
  229. package/src/components/View/View.tsx +0 -38
  230. package/src/components/View/index.ts +0 -6
  231. package/src/components/common/AppStatusBar.tsx +0 -57
  232. package/src/components/common/index.ts +0 -1
  233. package/src/components/index.ts +0 -30
  234. package/src/components/layout/SafeAreaWrapper.tsx +0 -50
  235. package/src/components/layout/index.ts +0 -6
  236. package/src/constants/dummySections.ts +0 -103
  237. package/src/hooks/Images/index.ts +0 -6
  238. package/src/hooks/Images/useImageLoader.ts +0 -209
  239. package/src/hooks/index.ts +0 -16
  240. package/src/hooks/useAdTracking.ts +0 -354
  241. package/src/hooks/useCards.ts +0 -247
  242. package/src/hooks/useDebounce.ts +0 -40
  243. package/src/hooks/useKeyboard.ts +0 -43
  244. package/src/hooks/useNavigationMode.ts +0 -48
  245. package/src/hooks/usePaginatedSection.ts +0 -108
  246. package/src/hooks/usePrevious.ts +0 -28
  247. package/src/hooks/useSafeCallback.ts +0 -29
  248. package/src/hooks/useSkeletonItems.ts +0 -30
  249. package/src/hooks/useSplashCache.ts +0 -245
  250. package/src/index.tsx +0 -9
  251. package/src/store/RecentSearchesStore.ts +0 -72
  252. package/src/store/splashStore.ts +0 -86
  253. package/src/store/storage.ts +0 -29
  254. package/src/theme/ThemeContext.ts +0 -19
  255. package/src/theme/ThemeProvider.tsx +0 -87
  256. package/src/theme/hooks/index.ts +0 -6
  257. package/src/theme/hooks/useTheme.ts +0 -118
  258. package/src/theme/index.ts +0 -8
  259. package/src/theme/store/theme.ts +0 -50
  260. package/src/theme/themes.ts +0 -262
  261. package/src/theme/utils/cleanColors.ts +0 -71
  262. package/src/theme/utils/toRgba.ts +0 -150
  263. package/src/types/content/content-view.types.ts +0 -209
  264. package/src/types/hook/index.ts +0 -6
  265. package/src/types/hook/usePaginatedSection.ts +0 -20
  266. package/src/types/index.ts +0 -10
  267. package/src/types/navigation.ts +0 -17
  268. package/src/types/sections/index.ts +0 -87
  269. package/src/types/user.ts +0 -18
  270. package/src/utils/Display.ts +0 -15
  271. package/src/utils/Formater.ts +0 -33
  272. package/src/utils/SizeMatters.ts +0 -8
  273. package/src/utils/Spacing.ts +0 -27
  274. package/src/utils/colorUtils.ts +0 -70
  275. package/src/utils/imageValidation.ts +0 -36
  276. package/src/utils/interaction.ts +0 -19
@@ -1,347 +0,0 @@
1
- /**
2
- * @author Naresh Dhamu
3
- * @LastModified Mon 13 Jul 2026 at 10:13 AM
4
- */
5
-
6
- import React, { memo, useState } from 'react';
7
- import {
8
- View,
9
- StyleSheet,
10
- TouchableOpacity,
11
- ScrollView,
12
- type TouchableOpacityProps,
13
- type PressableProps,
14
- } from 'react-native';
15
- import Modal from 'react-native-modal';
16
- import { X } from 'lucide-react-native';
17
- import { Text } from '../../Text';
18
- import { scale, verticalScale, moderateScale } from 'react-native-size-matters';
19
- import { RFValue } from 'react-native-responsive-fontsize';
20
- import type { Plan } from './SubscriptionCard';
21
-
22
- type Props = {
23
- plan: Plan;
24
- colors: {
25
- surface: string;
26
- background: string;
27
- textPrimary: string;
28
- textSecondary: string;
29
- primary: string;
30
- };
31
- trigger?: React.ReactElement<PressableProps | TouchableOpacityProps>;
32
- };
33
-
34
- export const SubsDetailsModal = memo(({ plan, colors, trigger }: Props) => {
35
- const [visible, setVisible] = useState(false);
36
-
37
- const open = () => setVisible(true);
38
- const close = () => setVisible(false);
39
-
40
- const renderTrigger = () => {
41
- if (trigger) {
42
- return React.cloneElement(trigger, {
43
- onPress: open,
44
- });
45
- }
46
-
47
- // default button
48
- return (
49
- <TouchableOpacity onPress={open} style={styles.defaultBtn}>
50
- <Text style={[styles.defaultBtnText, { color: colors.primary }]}>
51
- View Details
52
- </Text>
53
- </TouchableOpacity>
54
- );
55
- };
56
-
57
- return (
58
- <View>
59
- {renderTrigger()}
60
-
61
- <Modal
62
- isVisible={visible}
63
- onBackdropPress={close}
64
- onBackButtonPress={close}
65
- onSwipeComplete={close}
66
- backdropOpacity={0.35}
67
- style={styles.modalWrapper}
68
- useNativeDriver
69
- useNativeDriverForBackdrop
70
- hideModalContentWhileAnimating
71
- animationIn="slideInUp"
72
- animationOut="slideOutDown"
73
- >
74
- <View style={[styles.container, { backgroundColor: colors.surface }]}>
75
- {/* Header */}
76
- <View style={styles.header}>
77
- <Text style={[styles.title, { color: colors.textPrimary }]}>
78
- {plan.title || 'Plan Details'}
79
- </Text>
80
-
81
- <TouchableOpacity
82
- onPress={close}
83
- style={[styles.closeBtn, { backgroundColor: colors.background }]}
84
- >
85
- <X size={scale(20)} color={colors.textPrimary} />
86
- </TouchableOpacity>
87
- </View>
88
-
89
- {/* Content */}
90
- <ScrollView
91
- showsVerticalScrollIndicator={false}
92
- contentContainerStyle={styles.scrollContent}
93
- >
94
- {/* Pricing */}
95
- <View style={styles.section}>
96
- <View
97
- style={[
98
- styles.priceCard,
99
- { backgroundColor: colors.background },
100
- ]}
101
- >
102
- <Text
103
- style={[styles.priceLabel, { color: colors.textSecondary }]}
104
- >
105
- PRICING
106
- </Text>
107
-
108
- <Text style={[styles.priceValue, { color: colors.primary }]}>
109
- {plan.price}
110
- </Text>
111
-
112
- <Text
113
- style={[
114
- styles.priceDuration,
115
- { color: colors.textSecondary },
116
- ]}
117
- >
118
- per {plan.duration}
119
- </Text>
120
- </View>
121
- </View>
122
-
123
- {/* Platform */}
124
- <View style={styles.section}>
125
- <Text
126
- style={[styles.sectionTitle, { color: colors.textPrimary }]}
127
- >
128
- Available On
129
- </Text>
130
-
131
- <View style={[styles.badge, { borderColor: colors.primary }]}>
132
- <Text style={[styles.badgeText, { color: colors.textPrimary }]}>
133
- {plan.platforms}
134
- </Text>
135
- </View>
136
- </View>
137
-
138
- {/* Benefits */}
139
- {!!plan.benefits?.length && (
140
- <View style={styles.section}>
141
- <Text
142
- style={[styles.sectionTitle, { color: colors.textPrimary }]}
143
- >
144
- Benefits
145
- </Text>
146
-
147
- {plan.benefits.map((item, i) => (
148
- <View key={i} style={styles.row}>
149
- <Text style={[styles.bullet, { color: colors.primary }]}>
150
-
151
- </Text>
152
- <Text
153
- style={[styles.rowText, { color: colors.textSecondary }]}
154
- >
155
- {item}
156
- </Text>
157
- </View>
158
- ))}
159
- </View>
160
- )}
161
-
162
- {/* Description */}
163
- {!!plan.extraDetails?.description && (
164
- <View style={styles.section}>
165
- <Text
166
- style={[styles.sectionTitle, { color: colors.textPrimary }]}
167
- >
168
- Description
169
- </Text>
170
-
171
- <Text
172
- style={[styles.description, { color: colors.textSecondary }]}
173
- >
174
- {plan.extraDetails.description}
175
- </Text>
176
- </View>
177
- )}
178
-
179
- {/* Features */}
180
- {!!plan.extraDetails?.features?.length && (
181
- <View style={styles.section}>
182
- <Text
183
- style={[styles.sectionTitle, { color: colors.textPrimary }]}
184
- >
185
- Features
186
- </Text>
187
-
188
- {plan.extraDetails.features.map((item, i) => (
189
- <View key={i} style={styles.row}>
190
- <Text style={[styles.bullet, { color: colors.primary }]}>
191
-
192
- </Text>
193
- <Text
194
- style={[styles.rowText, { color: colors.textSecondary }]}
195
- >
196
- {item}
197
- </Text>
198
- </View>
199
- ))}
200
- </View>
201
- )}
202
-
203
- {/* Terms */}
204
- {!!plan.extraDetails?.terms && (
205
- <View style={styles.section}>
206
- <Text
207
- style={[styles.sectionTitle, { color: colors.textPrimary }]}
208
- >
209
- Terms & Conditions
210
- </Text>
211
-
212
- <Text
213
- style={[styles.description, { color: colors.textSecondary }]}
214
- >
215
- {plan.extraDetails.terms}
216
- </Text>
217
- </View>
218
- )}
219
- </ScrollView>
220
- </View>
221
- </Modal>
222
- </View>
223
- );
224
- });
225
-
226
- const styles = StyleSheet.create({
227
- modalWrapper: {
228
- margin: 0,
229
- justifyContent: 'flex-end',
230
- },
231
-
232
- container: {
233
- borderTopLeftRadius: moderateScale(24),
234
- borderTopRightRadius: moderateScale(24),
235
- maxHeight: '85%',
236
- minHeight: '40%',
237
- paddingBottom: verticalScale(20),
238
- },
239
-
240
- header: {
241
- flexDirection: 'row',
242
- justifyContent: 'space-between',
243
- alignItems: 'center',
244
- paddingHorizontal: scale(20),
245
- paddingTop: verticalScale(16),
246
- },
247
-
248
- title: {
249
- fontSize: RFValue(18),
250
- lineHeight: RFValue(24),
251
- fontWeight: '700',
252
- flex: 1,
253
- },
254
-
255
- closeBtn: {
256
- width: scale(30),
257
- height: scale(30),
258
- borderRadius: scale(20),
259
- justifyContent: 'center',
260
- alignItems: 'center',
261
- },
262
-
263
- scrollContent: {
264
- paddingHorizontal: scale(20),
265
- paddingTop: verticalScale(16),
266
- paddingBottom: verticalScale(24),
267
- },
268
-
269
- section: {
270
- marginBottom: verticalScale(14),
271
- },
272
-
273
- sectionTitle: {
274
- fontSize: RFValue(15.5),
275
- lineHeight: RFValue(22),
276
- fontWeight: '600',
277
- marginBottom: verticalScale(8),
278
- },
279
-
280
- description: {
281
- fontSize: RFValue(14),
282
- lineHeight: RFValue(21),
283
- },
284
-
285
- row: {
286
- flexDirection: 'row',
287
- marginBottom: verticalScale(8),
288
- },
289
-
290
- bullet: {
291
- fontSize: RFValue(14),
292
- marginRight: scale(8),
293
- marginTop: 2,
294
- },
295
-
296
- rowText: {
297
- flex: 1,
298
- fontSize: RFValue(13.5),
299
- lineHeight: RFValue(20),
300
- },
301
-
302
- priceCard: {
303
- borderRadius: scale(16),
304
- padding: scale(20),
305
- alignItems: 'center',
306
- },
307
-
308
- priceLabel: {
309
- fontSize: RFValue(11),
310
- letterSpacing: 1,
311
- marginBottom: verticalScale(6),
312
- },
313
-
314
- priceValue: {
315
- fontSize: RFValue(34),
316
- fontWeight: '800',
317
- },
318
-
319
- priceDuration: {
320
- fontSize: RFValue(13),
321
- lineHeight: RFValue(18),
322
- },
323
-
324
- badge: {
325
- alignSelf: 'flex-start',
326
- paddingHorizontal: scale(12),
327
- paddingVertical: verticalScale(8),
328
- borderRadius: scale(12),
329
- borderWidth: 1,
330
- },
331
-
332
- badgeText: {
333
- fontSize: RFValue(12.5),
334
- lineHeight: RFValue(16),
335
- fontWeight: '600',
336
- },
337
-
338
- defaultBtn: {
339
- paddingVertical: verticalScale(8),
340
- paddingHorizontal: scale(12),
341
- },
342
-
343
- defaultBtnText: {
344
- fontSize: RFValue(13),
345
- fontWeight: '600',
346
- },
347
- });
@@ -1,342 +0,0 @@
1
- /**
2
- * @author Naresh Dhamu
3
- * @LastModified Mon 13 Jul 2026 at 10:13 AM
4
- */
5
-
6
- import { memo, useMemo } from 'react';
7
- import { ActivityIndicator, TouchableOpacity, StyleSheet } from 'react-native';
8
- import LinearGradient from 'react-native-linear-gradient';
9
- import SkeletonPlaceholder from 'react-native-skeleton-placeholder';
10
-
11
- import { View } from '../../View';
12
- import { Text } from '../../Text';
13
-
14
- import type { ITheme } from '../../../theme';
15
-
16
- import { scale, verticalScale } from 'react-native-size-matters';
17
- import { RFValue } from 'react-native-responsive-fontsize';
18
- import { SubsDetailsModal } from './SubsDetailsModal';
19
-
20
- export type Plan = {
21
- id: string;
22
- title: string;
23
- price: string;
24
- duration: string;
25
- platforms: string;
26
- benefits?: string[];
27
- isPopular?: boolean;
28
- extraDetails?: {
29
- description?: string;
30
- features?: string[];
31
- terms?: string;
32
- [key: string]: any;
33
- };
34
- };
35
-
36
- export const SubscriptionCard = memo(
37
- ({
38
- plan,
39
- colors,
40
- onSubscribe,
41
- isProcessing = false,
42
- isLoading = false,
43
- subscribeButtonText = 'Subscribe',
44
- }: {
45
- plan: Plan;
46
- isProcessing?: boolean;
47
- isLoading?: boolean;
48
- colors: ITheme['colors'];
49
- onSubscribe?: (plan: Plan) => void;
50
- subscribeButtonText?: string;
51
- }) => {
52
- const gradientConfig = useMemo(
53
- () => ({
54
- colors: colors.cardGradient,
55
- start: { x: 1, y: 0 },
56
- end: { x: 0, y: 1 },
57
- }),
58
- [colors.cardGradient]
59
- );
60
-
61
- const planBenefits = plan?.benefits ?? [];
62
- const hasPlanBenefits = planBenefits.length > 0;
63
- const hasPlanDetails = hasPlanBenefits || !!plan?.extraDetails;
64
-
65
- const textOnDark = colors.white
66
- ? { color: colors.white }
67
- : styles.textOnDark;
68
-
69
- if (isLoading) {
70
- return (
71
- <View>
72
- <SkeletonPlaceholder
73
- backgroundColor={colors.skeletonBaseColor}
74
- highlightColor={colors.skeletonHighlightColor}
75
- >
76
- <SkeletonPlaceholder.Item
77
- style={styles.cardContainer}
78
- borderRadius={20}
79
- />
80
- </SkeletonPlaceholder>
81
- </View>
82
- );
83
- }
84
-
85
- return (
86
- <View style={styles.cardContainer}>
87
- <LinearGradient {...gradientConfig} style={styles.cardGradient} />
88
- <View style={styles.cardOverlay} />
89
-
90
- {plan?.isPopular && (
91
- <View
92
- style={[styles.badgeContainer, { backgroundColor: colors.button }]}
93
- >
94
- <Text
95
- style={[styles.badgeText, { color: colors.buttonText }]}
96
- numberOfLines={1}
97
- ellipsizeMode="tail"
98
- >
99
- POPULAR
100
- </Text>
101
- </View>
102
- )}
103
-
104
- {/* Title */}
105
- <Text
106
- style={[styles.planTitle, textOnDark]}
107
- numberOfLines={1}
108
- ellipsizeMode="tail"
109
- >
110
- {plan.title}
111
- </Text>
112
-
113
- {/* Price */}
114
- <View style={styles.priceContainer}>
115
- <Text
116
- style={[styles.planPrice, textOnDark]}
117
- numberOfLines={1}
118
- ellipsizeMode="tail"
119
- >
120
- {plan.price}
121
- </Text>
122
-
123
- <Text
124
- style={[styles.planDuration, textOnDark]}
125
- numberOfLines={1}
126
- ellipsizeMode="tail"
127
- >
128
- /{plan.duration}
129
- </Text>
130
- </View>
131
-
132
- {/* Platform */}
133
- <Text
134
- style={[styles.planPlatform, textOnDark]}
135
- numberOfLines={2}
136
- ellipsizeMode="tail"
137
- >
138
- {plan.platforms}
139
- </Text>
140
-
141
- {/* Benefits */}
142
- {hasPlanBenefits && (
143
- <View style={styles.benefitsContainer}>
144
- {planBenefits.slice(0, 4).map((benefit, index) => (
145
- <Text
146
- key={index}
147
- style={[styles.benefitText, textOnDark]}
148
- numberOfLines={1}
149
- ellipsizeMode="tail"
150
- >
151
- • {benefit}
152
- </Text>
153
- ))}
154
- </View>
155
- )}
156
-
157
- {/* Details */}
158
- {hasPlanDetails && (
159
- <SubsDetailsModal
160
- colors={colors}
161
- plan={plan}
162
- trigger={
163
- <TouchableOpacity
164
- activeOpacity={0.7}
165
- style={styles.detailsButton}
166
- >
167
- <Text
168
- style={[styles.detailsText, textOnDark]}
169
- numberOfLines={1}
170
- ellipsizeMode="tail"
171
- >
172
- View More Details
173
- </Text>
174
- </TouchableOpacity>
175
- }
176
- />
177
- )}
178
-
179
- {/* Subscribe Button */}
180
- <TouchableOpacity
181
- style={[styles.subscribeButton, { backgroundColor: colors.button }]}
182
- onPress={() => onSubscribe?.(plan)}
183
- disabled={isProcessing}
184
- activeOpacity={0.85}
185
- >
186
- <View style={styles.buttonContent}>
187
- {isProcessing && (
188
- <ActivityIndicator
189
- size="small"
190
- color={colors.buttonText}
191
- style={styles.loader}
192
- />
193
- )}
194
-
195
- <Text
196
- style={[styles.subscribeButtonText, { color: colors.buttonText }]}
197
- numberOfLines={1}
198
- ellipsizeMode="tail"
199
- >
200
- {isProcessing ? 'Subscribing...' : subscribeButtonText}
201
- </Text>
202
- </View>
203
- </TouchableOpacity>
204
- </View>
205
- );
206
- }
207
- );
208
-
209
- const styles = StyleSheet.create({
210
- cardContainer: {
211
- width: '100%',
212
- borderRadius: scale(20),
213
- paddingVertical: verticalScale(20),
214
- paddingHorizontal: scale(16),
215
- alignItems: 'center',
216
- justifyContent: 'space-between',
217
- overflow: 'hidden',
218
- aspectRatio: 1,
219
- },
220
-
221
- cardGradient: {
222
- ...StyleSheet.absoluteFill,
223
- },
224
-
225
- cardOverlay: {
226
- ...StyleSheet.absoluteFill,
227
- backgroundColor: 'rgba(0,0,0,0.03)',
228
- },
229
-
230
- textOnDark: {
231
- color: '#FFFFFF',
232
- },
233
-
234
- planTitle: {
235
- fontSize: RFValue(20),
236
- lineHeight: RFValue(26),
237
- fontWeight: '800',
238
- textAlign: 'center',
239
- marginBottom: verticalScale(6),
240
- flexShrink: 1,
241
- },
242
-
243
- priceContainer: {
244
- flexDirection: 'row',
245
- alignItems: 'flex-end',
246
- marginBottom: verticalScale(4),
247
- },
248
-
249
- planPrice: {
250
- fontSize: RFValue(30),
251
- fontWeight: '900',
252
- flexShrink: 1,
253
- },
254
-
255
- planDuration: {
256
- fontSize: RFValue(16),
257
- fontWeight: '600',
258
- marginLeft: scale(4),
259
- marginBottom: verticalScale(3),
260
- opacity: 0.9,
261
- flexShrink: 1,
262
- },
263
-
264
- planPlatform: {
265
- fontSize: RFValue(13),
266
- lineHeight: RFValue(18),
267
- fontWeight: '500',
268
- textAlign: 'center',
269
- marginBottom: verticalScale(8),
270
- opacity: 0.9,
271
- flexShrink: 1,
272
- },
273
-
274
- benefitsContainer: {
275
- alignItems: 'center',
276
- marginBottom: verticalScale(8),
277
- paddingHorizontal: scale(10),
278
- },
279
-
280
- benefitText: {
281
- fontSize: RFValue(13),
282
- fontWeight: '500',
283
- lineHeight: RFValue(18),
284
- marginBottom: verticalScale(3),
285
- textAlign: 'center',
286
- flexShrink: 1,
287
- },
288
-
289
- detailsButton: {
290
- marginBottom: verticalScale(10),
291
- },
292
-
293
- detailsText: {
294
- fontSize: RFValue(12),
295
- lineHeight: RFValue(16),
296
- fontWeight: '500',
297
- textDecorationLine: 'underline',
298
- opacity: 0.95,
299
- flexShrink: 1,
300
- },
301
-
302
- subscribeButton: {
303
- width: '85%',
304
- paddingVertical: verticalScale(13),
305
- borderRadius: scale(24),
306
- alignItems: 'center',
307
- justifyContent: 'center',
308
- elevation: 3,
309
- },
310
-
311
- subscribeButtonText: {
312
- fontSize: RFValue(14),
313
- fontWeight: '700',
314
- letterSpacing: 0.3,
315
- flexShrink: 1,
316
- },
317
-
318
- badgeContainer: {
319
- position: 'absolute',
320
- top: 12,
321
- right: 12,
322
- paddingHorizontal: 10,
323
- paddingVertical: 4,
324
- borderRadius: 12,
325
- },
326
-
327
- badgeText: {
328
- fontSize: RFValue(9),
329
- fontWeight: '700',
330
- letterSpacing: 0.5,
331
- },
332
-
333
- buttonContent: {
334
- flexDirection: 'row',
335
- alignItems: 'center',
336
- justifyContent: 'center',
337
- },
338
-
339
- loader: {
340
- marginRight: scale(8),
341
- },
342
- });
@@ -1,12 +0,0 @@
1
- /**
2
- * @author Naresh Dhamu
3
- * @LastModified Mon 13 Jul 2026 at 10:13 AM
4
- */
5
-
6
- import SubscriptionOne from './SubOne';
7
-
8
- const Subscription = {
9
- One: SubscriptionOne,
10
- };
11
-
12
- export { Subscription };