@zezosoft/zezo-ott-react-native-ui-kit 1.1.5 → 1.1.6

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 (252) hide show
  1. package/package.json +1 -14
  2. package/src/Styles/globalStyles.ts +0 -70
  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 -367
  41. package/src/components/Account/index.ts +0 -1
  42. package/src/components/Alert/AlertDialog.tsx +0 -247
  43. package/src/components/Alert/UAAlert.tsx +0 -170
  44. package/src/components/Alert/index.ts +0 -2
  45. package/src/components/Auth/AuthProvider/AuthProvider.tsx +0 -419
  46. package/src/components/Auth/One/ForgotPassword/ForgotPassword.tsx +0 -324
  47. package/src/components/Auth/One/Login/LoginWithEmail.tsx +0 -455
  48. package/src/components/Auth/One/Login/LoginWithPhone.tsx +0 -306
  49. package/src/components/Auth/One/OTP/OTP.tsx +0 -465
  50. package/src/components/Auth/One/QrLogin/QrLogin.tsx +0 -602
  51. package/src/components/Auth/One/QrLogin/components/QrViewArea.tsx +0 -423
  52. package/src/components/Auth/One/SignUp/SignUp.tsx +0 -479
  53. package/src/components/Auth/One/SplashScreen/SplashScreen.tsx +0 -249
  54. package/src/components/Auth/One/SplashScreen/components/SplashImage/SplashImage.tsx +0 -103
  55. package/src/components/Auth/One/SplashScreen/components/SplashLottie/SplashLottie.tsx +0 -77
  56. package/src/components/Auth/One/SplashScreen/components/SplashVideo/SplashVideo.tsx +0 -174
  57. package/src/components/Auth/One/index.ts +0 -24
  58. package/src/components/Auth/Two/AuthHeader/AuthHeader.tsx +0 -108
  59. package/src/components/Auth/Two/ForgotPassword/ForgotPassword.tsx +0 -335
  60. package/src/components/Auth/Two/Login/AuthLoginShell.tsx +0 -173
  61. package/src/components/Auth/Two/Login/LoginWithEmail.tsx +0 -279
  62. package/src/components/Auth/Two/Login/LoginWithPhone.tsx +0 -188
  63. package/src/components/Auth/Two/OTP/OTP.tsx +0 -465
  64. package/src/components/Auth/Two/QrLogin/QrLogin.tsx +0 -602
  65. package/src/components/Auth/Two/QrLogin/components/QrViewArea.tsx +0 -423
  66. package/src/components/Auth/Two/SignUp/SignUp.tsx +0 -472
  67. package/src/components/Auth/Two/SplashScreen/SplashScreen.tsx +0 -248
  68. package/src/components/Auth/Two/SplashScreen/components/SplashImage/SplashImage.tsx +0 -92
  69. package/src/components/Auth/Two/SplashScreen/components/SplashLottie/SplashLottie.tsx +0 -77
  70. package/src/components/Auth/Two/SplashScreen/components/SplashVideo/SplashVideo.tsx +0 -178
  71. package/src/components/Auth/Two/index.ts +0 -28
  72. package/src/components/Auth/index.ts +0 -11
  73. package/src/components/BackgroundLayout/BackgroundLayout.tsx +0 -174
  74. package/src/components/BackgroundLayout/BackgroundLayoutOne.tsx +0 -56
  75. package/src/components/BlogView/BlogView.tsx +0 -276
  76. package/src/components/BlogView/index.ts +0 -8
  77. package/src/components/BlurView/BlurView.tsx +0 -199
  78. package/src/components/BlurView/index.ts +0 -7
  79. package/src/components/BottomSheet/BottomSheet.tsx +0 -200
  80. package/src/components/BottomSheet/BottomSheetOne.tsx +0 -220
  81. package/src/components/BottomSheet/index.ts +0 -4
  82. package/src/components/Button/BackBtn.tsx +0 -168
  83. package/src/components/Button/MenuBtn.tsx +0 -229
  84. package/src/components/Button/PrimaryBtn.tsx +0 -134
  85. package/src/components/Button/SecondaryBtn.tsx +0 -132
  86. package/src/components/Button/TextButton.tsx +0 -145
  87. package/src/components/Button/index.ts +0 -18
  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 -624
  91. package/src/components/Content/Card/Sliders/Styles/One.tsx +0 -490
  92. package/src/components/Content/Card/Sliders/Styles/Three.tsx +0 -935
  93. package/src/components/Content/Card/Sliders/Styles/Two.tsx +0 -391
  94. package/src/components/Content/Card/Sliders/index.ts +0 -17
  95. package/src/components/Content/Card/Styles/Five.tsx +0 -385
  96. package/src/components/Content/Card/Styles/Four.tsx +0 -379
  97. package/src/components/Content/Card/Styles/One.tsx +0 -386
  98. package/src/components/Content/Card/Styles/RotateInOut.tsx +0 -413
  99. package/src/components/Content/Card/Styles/Six.tsx +0 -392
  100. package/src/components/Content/Card/Styles/Three.tsx +0 -314
  101. package/src/components/Content/Card/Styles/TopTen.tsx +0 -412
  102. package/src/components/Content/Card/Styles/Two.tsx +0 -416
  103. package/src/components/Content/Card/components/AdsPoster.tsx +0 -202
  104. package/src/components/Content/Card/components/CardPoster.tsx +0 -377
  105. package/src/components/Content/Card/components/NavigateToMore.tsx +0 -97
  106. package/src/components/Content/Card/components/RentOrBuyIcon.tsx +0 -129
  107. package/src/components/Content/Card/components/ShowAllButton.tsx +0 -92
  108. package/src/components/Content/Card/components/ThumbnailCard.tsx +0 -234
  109. package/src/components/Content/Card/components/index.ts +0 -1
  110. package/src/components/Content/Card/index.ts +0 -30
  111. package/src/components/Content/Content.tsx +0 -315
  112. package/src/components/Content/Sections.tsx +0 -238
  113. package/src/components/Content/types.ts +0 -176
  114. package/src/components/ContentView/MoreContentList.tsx +0 -327
  115. package/src/components/ContentView/One/ContentViewOne.tsx +0 -243
  116. package/src/components/ContentView/One/components/AboutSection.tsx +0 -216
  117. package/src/components/ContentView/One/components/CastCard.tsx +0 -265
  118. package/src/components/ContentView/One/components/EpisodeCard.tsx +0 -535
  119. package/src/components/ContentView/One/components/GenreTags.tsx +0 -132
  120. package/src/components/ContentView/One/components/HeroBanner.tsx +0 -357
  121. package/src/components/ContentView/One/components/MiniInfo.tsx +0 -356
  122. package/src/components/ContentView/One/components/PlayButton.tsx +0 -56
  123. package/src/components/ContentView/One/components/Title.tsx +0 -149
  124. package/src/components/ContentView/One/components/TrailerButton.tsx +0 -76
  125. package/src/components/ContentView/Two/ContentViewTwo.tsx +0 -343
  126. package/src/components/ContentView/Two/components/AboutSection.tsx +0 -216
  127. package/src/components/ContentView/Two/components/Details.tsx +0 -193
  128. package/src/components/ContentView/Two/components/EpisodeCard.tsx +0 -602
  129. package/src/components/ContentView/Two/components/GenreTags.tsx +0 -123
  130. package/src/components/ContentView/Two/components/HeroBanner.tsx +0 -402
  131. package/src/components/ContentView/Two/components/LikeShareActions.tsx +0 -125
  132. package/src/components/ContentView/Two/components/MoreLikeThisContentList .tsx +0 -305
  133. package/src/components/ContentView/Two/components/PlayOrTrailer.tsx +0 -133
  134. package/src/components/ContentView/Two/components/SectionTabs.tsx +0 -177
  135. package/src/components/ContentView/Two/components/Title.tsx +0 -226
  136. package/src/components/ContentView/Two/components/index.ts +0 -15
  137. package/src/components/ContentView/index.ts +0 -13
  138. package/src/components/Fallbacks/NoContentFallback.tsx +0 -176
  139. package/src/components/Fallbacks/NotFoundFallback.tsx +0 -94
  140. package/src/components/Fallbacks/index.ts +0 -2
  141. package/src/components/Headers/AppHeader.tsx +0 -150
  142. package/src/components/Headers/Four.tsx +0 -83
  143. package/src/components/Headers/One.tsx +0 -115
  144. package/src/components/Headers/Three.tsx +0 -135
  145. package/src/components/Headers/Two.tsx +0 -100
  146. package/src/components/Headers/index.ts +0 -18
  147. package/src/components/Input/Input.ts +0 -20
  148. package/src/components/Input/InputOne.tsx +0 -259
  149. package/src/components/Input/InputThree.tsx +0 -212
  150. package/src/components/Input/InputTwo.tsx +0 -212
  151. package/src/components/Input/PhoneNumberInput.tsx +0 -431
  152. package/src/components/Input/PhoneNumberInputTwo.tsx +0 -418
  153. package/src/components/Keyboard/HideKeyboard.tsx +0 -88
  154. package/src/components/Loader/Loader.tsx +0 -44
  155. package/src/components/Logo/Logo.tsx +0 -145
  156. package/src/components/NewRelease/NewReleaseSheet.tsx +0 -250
  157. package/src/components/NewRelease/index.ts +0 -1
  158. package/src/components/Reels/ReelsSeries/MediaControls/BottomControls.tsx +0 -221
  159. package/src/components/Reels/ReelsSeries/MediaControls/MediaControlsProvider.tsx +0 -314
  160. package/src/components/Reels/ReelsSeries/MediaControls/MiddleControls.tsx +0 -196
  161. package/src/components/Reels/ReelsSeries/MediaControls/RightControls.tsx +0 -95
  162. package/src/components/Reels/ReelsSeries/MediaControls/TopControls.tsx +0 -163
  163. package/src/components/Reels/ReelsSeries/Model/DetailsModal.tsx +0 -210
  164. package/src/components/Reels/ReelsSeries/Model/SettingModal.tsx +0 -146
  165. package/src/components/Reels/ReelsSeries/Model/UnlockModal.tsx +0 -154
  166. package/src/components/Reels/ReelsSeries/ReelsSeries.tsx +0 -264
  167. package/src/components/Reels/ReelsSeries/ReelsSeriesItem.tsx +0 -494
  168. package/src/components/Reels/ReelsSeries/components/AnimatedThreeLines.tsx +0 -184
  169. package/src/components/Reels/ReelsSeries/components/Episodes.tsx +0 -154
  170. package/src/components/Reels/ReelsSeries/components/GradientOverlay.tsx +0 -41
  171. package/src/components/Reels/ReelsSeries/components/Like.tsx +0 -40
  172. package/src/components/Reels/ReelsSeries/components/RotatingLoader.tsx +0 -79
  173. package/src/components/Reels/ReelsSeries/components/Synopsis.tsx +0 -332
  174. package/src/components/Reels/ReelsSeries/components/VideoControls/QualityControl.tsx +0 -187
  175. package/src/components/Reels/ReelsSeries/components/VideoControls/SpeedControl.tsx +0 -80
  176. package/src/components/Reels/ReelsSeries/components/VideoControls/index.ts +0 -2
  177. package/src/components/Reels/ReelsSeries/types.ts +0 -54
  178. package/src/components/Reels/ReelsSeries/useReelsWatchProgress.ts +0 -85
  179. package/src/components/Reels/ReelsSeries/utils/quality.ts +0 -48
  180. package/src/components/Reels/index.ts +0 -9
  181. package/src/components/Reels/utils/Controls/gestureUtils.ts +0 -42
  182. package/src/components/Reels/utils/Controls/index.ts +0 -4
  183. package/src/components/Reels/utils/Controls/overlayUtils.ts +0 -35
  184. package/src/components/Reels/utils/Controls/videoControlsConstants.ts +0 -25
  185. package/src/components/Reels/utils/Controls/videoRef.ts +0 -4
  186. package/src/components/Reels/utils/index.ts +0 -1
  187. package/src/components/Reels/utils/timeoutUtils.ts +0 -29
  188. package/src/components/Search/One.tsx +0 -256
  189. package/src/components/Search/components/RecentSearchesSection.tsx +0 -181
  190. package/src/components/Search/components/SearchCard.tsx +0 -275
  191. package/src/components/Search/index.ts +0 -16
  192. package/src/components/Settings/AppSettings.tsx +0 -428
  193. package/src/components/Settings/index.ts +0 -1
  194. package/src/components/Subscription/SubOne.tsx +0 -874
  195. package/src/components/Subscription/index.ts +0 -12
  196. package/src/components/TabBar/One.tsx +0 -148
  197. package/src/components/TabBar/Three.tsx +0 -169
  198. package/src/components/TabBar/Two.tsx +0 -189
  199. package/src/components/TabBar/index.ts +0 -20
  200. package/src/components/Text/Text.tsx +0 -85
  201. package/src/components/Text/index.ts +0 -5
  202. package/src/components/User/DeviceSessions/DeviceSessions.tsx +0 -468
  203. package/src/components/User/ProfileUpdate/ProfileUpdate.tsx +0 -278
  204. package/src/components/User/PurchaseHistory/PurchaseHistory.tsx +0 -494
  205. package/src/components/User/WatchHistory/WatchHistory.tsx +0 -227
  206. package/src/components/User/WatchLater/WatchLater.tsx +0 -397
  207. package/src/components/User/components/UserAvatar.tsx +0 -120
  208. package/src/components/User/components/UserSection.tsx +0 -228
  209. package/src/components/User/index.ts +0 -18
  210. package/src/components/View/View.tsx +0 -37
  211. package/src/components/View/index.ts +0 -5
  212. package/src/components/common/AppStatusBar.tsx +0 -57
  213. package/src/components/index.ts +0 -29
  214. package/src/components/layout/SafeAreaWrapper.tsx +0 -45
  215. package/src/components/layout/index.ts +0 -1
  216. package/src/constants/dummySections.ts +0 -98
  217. package/src/hooks/Images/index.ts +0 -2
  218. package/src/hooks/Images/useImageLoader.ts +0 -206
  219. package/src/hooks/Images/useImageValidation.ts +0 -36
  220. package/src/hooks/index.ts +0 -17
  221. package/src/hooks/useAdTracking.ts +0 -349
  222. package/src/hooks/useCards.ts +0 -228
  223. package/src/hooks/useDebounce.ts +0 -35
  224. package/src/hooks/useKeyboard.ts +0 -43
  225. package/src/hooks/useNavigationMode.ts +0 -46
  226. package/src/hooks/usePaginatedSection.ts +0 -101
  227. package/src/hooks/usePrevious.ts +0 -28
  228. package/src/hooks/useSafeCallback.ts +0 -43
  229. package/src/hooks/useSkeletonItems.ts +0 -30
  230. package/src/hooks/useSplashCache.ts +0 -186
  231. package/src/hooks/useThemeColors.ts +0 -51
  232. package/src/index.tsx +0 -8
  233. package/src/store/RecentSearchesStore.ts +0 -78
  234. package/src/store/splashStore.ts +0 -91
  235. package/src/store/themeStore.ts +0 -43
  236. package/src/theme/ThemeProvider.tsx +0 -112
  237. package/src/theme/hook/index.ts +0 -1
  238. package/src/theme/hook/useInternalTheme.ts +0 -98
  239. package/src/theme/index.ts +0 -7
  240. package/src/theme/themes.ts +0 -336
  241. package/src/theme/utils/validateColor.ts +0 -127
  242. package/src/types/content/content-view.types.ts +0 -206
  243. package/src/types/hook/index.ts +0 -5
  244. package/src/types/hook/usePaginatedSetion.ts +0 -19
  245. package/src/types/index.ts +0 -7
  246. package/src/types/sections/index.ts +0 -84
  247. package/src/utils/Display.ts +0 -14
  248. package/src/utils/Formater.ts +0 -14
  249. package/src/utils/PlatformSelector.ts +0 -29
  250. package/src/utils/SizeMatters.ts +0 -7
  251. package/src/utils/Spacing.ts +0 -27
  252. package/src/utils/colorUtils.ts +0 -70
@@ -1,163 +0,0 @@
1
- import React from 'react';
2
- import { View, TouchableOpacity, StyleSheet, Alert } from 'react-native';
3
- import { ArrowLeft, Search, Settings } from 'lucide-react-native';
4
- import { scale, verticalScale } from 'react-native-size-matters';
5
- import type { ITheme } from '../../../../theme';
6
- import { useSafeAreaInsets } from 'react-native-safe-area-context';
7
- import { Text } from '../../../Text';
8
-
9
- interface TopControlsProps {
10
- theme: ITheme;
11
- episodeLabel?: string;
12
- onBack?: () => void;
13
- onSearch?: () => void;
14
- onSettings?: () => void;
15
- }
16
-
17
- type BackBtnProps = {
18
- size?: number;
19
- color?: string;
20
- onPress?: () => void;
21
- theme: ITheme;
22
- enableBlur?: boolean;
23
- label?: string;
24
- };
25
- const BackBtn: React.FC<BackBtnProps> = ({
26
- size = scale(24),
27
- color,
28
- onPress,
29
- theme,
30
- label,
31
- }) => {
32
- const handlePress = () => {
33
- if (onPress) {
34
- onPress();
35
- } else {
36
- Alert.alert(
37
- 'Back Action Not Provided',
38
- 'Please define the back action using onPress prop.'
39
- );
40
- }
41
- };
42
- const hasLabel = !!label;
43
- return (
44
- <TouchableOpacity
45
- activeOpacity={0.8}
46
- style={styles.backButton}
47
- onPress={handlePress}
48
- >
49
- <ArrowLeft size={size} color={color || theme.colors.textPrimary} />
50
- {hasLabel && (
51
- <Text
52
- style={[styles.text, { color: color || theme.colors.textPrimary }]}
53
- color={color || theme.colors.textPrimary}
54
- >
55
- {label}
56
- </Text>
57
- )}
58
- </TouchableOpacity>
59
- );
60
- };
61
-
62
- const TopControls: React.FC<TopControlsProps> = ({
63
- theme,
64
- episodeLabel,
65
- onBack,
66
- onSearch,
67
- onSettings,
68
- }) => {
69
- const insets = useSafeAreaInsets();
70
- const top = insets.top;
71
- return (
72
- <View
73
- style={[
74
- styles.container,
75
- {
76
- top,
77
- paddingLeft: scale(16),
78
- paddingRight: scale(16),
79
- },
80
- ]}
81
- >
82
- {/* Back Button with Episode Number */}
83
- <View style={styles.leftContainer}>
84
- {onBack && (
85
- <BackBtn
86
- theme={theme}
87
- onPress={onBack}
88
- color={theme.colors.white}
89
- size={scale(20)}
90
- label={episodeLabel}
91
- />
92
- )}
93
- </View>
94
-
95
- {/* Right Side Controls Container */}
96
- <View style={styles.rightControlsContainer}>
97
- {/* Search Button */}
98
- {onSearch && (
99
- <TouchableOpacity
100
- style={styles.iconButton}
101
- onPress={onSearch}
102
- activeOpacity={0.7}
103
- >
104
- <Search color={theme.colors.white} size={verticalScale(22)} />
105
- </TouchableOpacity>
106
- )}
107
-
108
- {/* Video Controls Button */}
109
- <TouchableOpacity
110
- style={styles.iconButton}
111
- onPress={onSettings}
112
- activeOpacity={0.7}
113
- >
114
- <Settings color={theme.colors.white} size={verticalScale(22)} />
115
- </TouchableOpacity>
116
- </View>
117
- </View>
118
- );
119
- };
120
-
121
- export default TopControls;
122
-
123
- const styles = StyleSheet.create({
124
- container: {
125
- position: 'absolute',
126
- top: 0,
127
- left: 0,
128
- right: 0,
129
- flexDirection: 'row',
130
- justifyContent: 'space-between',
131
- alignItems: 'center',
132
- zIndex: 10,
133
- },
134
- leftContainer: {
135
- flex: 1,
136
- flexDirection: 'row',
137
- alignItems: 'center',
138
- },
139
- backButton: {
140
- flexDirection: 'row',
141
- alignItems: 'center',
142
- paddingVertical: verticalScale(8),
143
- paddingHorizontal: scale(4),
144
- },
145
- rightControlsContainer: {
146
- flexDirection: 'row',
147
- alignItems: 'center',
148
- justifyContent: 'flex-end',
149
- },
150
- iconButton: {
151
- padding: scale(8),
152
- justifyContent: 'center',
153
- alignItems: 'center',
154
- },
155
- text: {
156
- fontSize: scale(14),
157
- fontWeight: '600',
158
- marginLeft: scale(8),
159
- textShadowColor: 'rgba(0, 0, 0, 0.75)',
160
- textShadowOffset: { width: 0, height: verticalScale(1) },
161
- textShadowRadius: scale(3),
162
- },
163
- });
@@ -1,210 +0,0 @@
1
- import React, { useState } from 'react';
2
- import { View, Text, TouchableOpacity, Image, StyleSheet } from 'react-native';
3
- import { BottomSheet } from '../../../BottomSheet';
4
- import LinearGradient from 'react-native-linear-gradient';
5
- import { moderateScale, verticalScale } from 'react-native-size-matters';
6
- import { RFValue } from 'react-native-responsive-fontsize';
7
- import Episodes from '../../ReelsSeries/components/Episodes';
8
- import Synopsis from '../../ReelsSeries/components/Synopsis';
9
- import type { ILikeMoreData, ISeriesEpisode, ISeriesItem } from '../types';
10
- import { formatCount } from '../../../../utils/Formater';
11
- import type { ITheme } from '../../../../theme';
12
-
13
- interface DetailsModalProps {
14
- reel: ISeriesEpisode;
15
- data: ISeriesItem;
16
- activeEpisodeIndex: number;
17
- onEpisodeSelect?: (episode: ISeriesEpisode) => void;
18
- theme: ITheme;
19
- onLikeMorePress?: (item: ILikeMoreData) => void;
20
- isVisible: boolean;
21
- onClose?: () => void;
22
- }
23
-
24
- const DetailsModal: React.FC<DetailsModalProps> = ({
25
- reel,
26
- data,
27
- activeEpisodeIndex: _activeEpisodeIndex,
28
- onEpisodeSelect,
29
- theme,
30
- onLikeMorePress,
31
- isVisible,
32
- onClose,
33
- }) => {
34
- const [activeTab, setActiveTab] = useState<'synopsis' | 'episodes'>(
35
- 'synopsis'
36
- );
37
- const [routes] = useState<
38
- {
39
- key: string;
40
- title: string;
41
- }[]
42
- >([
43
- { key: 'synopsis', title: 'Synopsis' },
44
- { key: 'episodes', title: 'Episodes' },
45
- ]);
46
-
47
- return (
48
- <BottomSheet
49
- key={'detailsModal'}
50
- theme={theme}
51
- visible={isVisible}
52
- onClose={onClose}
53
- height="75%"
54
- showCloseButton
55
- scrollable={false}
56
- >
57
- <LinearGradient
58
- colors={[theme.colors.background, theme.colors.background]}
59
- style={styles.gradientContainer}
60
- >
61
- {/* Creator + Title */}
62
- <View style={styles.headerRow}>
63
- <Image
64
- source={{ uri: data.thumbnail }}
65
- style={[
66
- styles.reelPosterImage,
67
- { backgroundColor: theme.colors.surfaceDisabled },
68
- ]}
69
- />
70
- <View style={styles.titleContainer}>
71
- <Text
72
- style={[styles.reelTitleText, { color: theme.colors.onSurface }]}
73
- >
74
- {data.title}
75
- </Text>
76
- <Text
77
- style={[
78
- styles.reelDescriptionText,
79
- { color: theme.colors.textSecondary },
80
- ]}
81
- numberOfLines={3}
82
- >
83
- {data.description}
84
- </Text>
85
- <Text
86
- style={[
87
- styles.reelViewsText,
88
- { color: theme.colors.textSecondary },
89
- ]}
90
- >
91
- {formatCount(data.views || 0)} Views
92
- </Text>
93
- </View>
94
- </View>
95
- {/* Tab View */}
96
- <View style={styles.tabContainer}>
97
- {routes.map((item) => {
98
- const isActive =
99
- activeTab === routes.find((r) => r.key === item.key)?.key;
100
- return (
101
- <TouchableOpacity
102
- key={item.key}
103
- style={[
104
- styles.tab,
105
- {
106
- borderBottomColor: theme.colors.textPrimary,
107
- borderBottomWidth: isActive ? moderateScale(2) : 0,
108
- },
109
- ]}
110
- onPress={() => {
111
- const tab = routes.find((r) => r.key === item.key)?.key;
112
- tab && setActiveTab(tab as 'synopsis' | 'episodes');
113
- }}
114
- >
115
- <Text
116
- style={[
117
- styles.tabText,
118
- {
119
- color: theme.colors.textPrimary,
120
- opacity: isActive ? 1 : 0.6,
121
- },
122
- ]}
123
- >
124
- {item.title}
125
- </Text>
126
- </TouchableOpacity>
127
- );
128
- })}
129
- </View>
130
- {/* Tab View Content */}
131
- <View style={styles.contentContainer}>
132
- {activeTab === 'synopsis' && (
133
- <Synopsis
134
- theme={theme}
135
- description={data.description}
136
- likeMoreData={data.likeMoreData}
137
- onLikeMorePress={onLikeMorePress}
138
- />
139
- )}
140
- {activeTab === 'episodes' && (
141
- <Episodes
142
- theme={theme}
143
- reel={reel}
144
- data={data}
145
- onEpisodeSelect={(episode) => {
146
- onEpisodeSelect?.(episode);
147
- onClose?.();
148
- }}
149
- />
150
- )}
151
- </View>
152
- </LinearGradient>
153
- </BottomSheet>
154
- );
155
- };
156
-
157
- export default DetailsModal;
158
-
159
- const styles = StyleSheet.create({
160
- gradientContainer: {
161
- flex: 1,
162
- },
163
- headerRow: {
164
- flexDirection: 'row',
165
- marginHorizontal: moderateScale(5),
166
- marginBottom: verticalScale(10),
167
- },
168
- titleContainer: {
169
- flex: 1,
170
- },
171
- reelPosterImage: {
172
- width: moderateScale(80),
173
- aspectRatio: 1 / 1.5,
174
- borderRadius: moderateScale(8),
175
- marginRight: moderateScale(10),
176
- },
177
- reelTitleText: {
178
- fontSize: RFValue(13),
179
- fontWeight: '600',
180
- textAlign: 'justify',
181
- flexWrap: 'wrap',
182
- marginRight: moderateScale(33),
183
- },
184
- reelDescriptionText: {
185
- fontSize: RFValue(10),
186
- marginBottom: verticalScale(4),
187
- marginTop: verticalScale(3.5),
188
- },
189
- reelViewsText: {
190
- fontSize: RFValue(10),
191
- marginTop: verticalScale(2),
192
- },
193
- tabContainer: {
194
- flexDirection: 'row',
195
- marginTop: verticalScale(5),
196
- marginHorizontal: moderateScale(5),
197
- gap: moderateScale(15),
198
- },
199
- tab: {
200
- paddingBottom: verticalScale(6),
201
- },
202
- tabText: {
203
- fontSize: RFValue(11),
204
- fontWeight: '700',
205
- },
206
- contentContainer: {
207
- flex: 1,
208
- marginTop: verticalScale(8),
209
- },
210
- });
@@ -1,146 +0,0 @@
1
- import React, { useState } from 'react';
2
- import { View, Text, TouchableOpacity, StyleSheet } from 'react-native';
3
- import { BottomSheet } from '../../../../components/BottomSheet';
4
- import Animated, { FadeIn, FadeOut } from 'react-native-reanimated';
5
- import { moderateScale, verticalScale } from 'react-native-size-matters';
6
- import { RFValue } from 'react-native-responsive-fontsize';
7
- import type { ITheme } from '../../../../theme';
8
- import { QualityControl, SpeedControl } from '../components/VideoControls';
9
-
10
- interface SettingModalProps {
11
- theme: ITheme;
12
- speed: number;
13
- quality: string;
14
- qualities: string[];
15
- qualitiesLoading: boolean;
16
-
17
- onSpeedChange: (speed: number) => void;
18
- onQualityChange: (quality: string) => void;
19
-
20
- isVisible: boolean;
21
- onClose: () => void;
22
- }
23
-
24
- const SettingModal: React.FC<SettingModalProps> = ({
25
- theme,
26
- speed,
27
- quality,
28
- qualities,
29
- qualitiesLoading,
30
- onSpeedChange,
31
- onQualityChange,
32
- isVisible,
33
- onClose,
34
- }) => {
35
- const [activeTab, setActiveTab] = useState<'speed' | 'quality'>('speed');
36
-
37
- const handleSelect = (callback: any, value: any) => {
38
- callback(value);
39
- setTimeout(onClose, 200);
40
- };
41
-
42
- return (
43
- <BottomSheet
44
- theme={theme}
45
- title="Video Settings"
46
- height="50%"
47
- visible={isVisible}
48
- onClose={onClose}
49
- handleIndicatorStyle={{ backgroundColor: theme.colors.button }}
50
- >
51
- {/* Tabs */}
52
- <View style={styles.tabContainer}>
53
- {['speed', 'quality'].map((tab) => {
54
- const isActive = activeTab === tab;
55
- return (
56
- <TouchableOpacity
57
- key={tab}
58
- style={[
59
- styles.tab,
60
- isActive && {
61
- borderBottomWidth: 2,
62
- borderBottomColor: theme.colors.textPrimary,
63
- },
64
- ]}
65
- onPress={() => setActiveTab(tab as 'speed' | 'quality')}
66
- >
67
- <Text
68
- style={[
69
- styles.tabText,
70
- {
71
- color: theme.colors.textPrimary,
72
- opacity: isActive ? 1 : 0.5,
73
- },
74
- ]}
75
- >
76
- {tab === 'speed' ? 'Playback' : 'Quality'}
77
- </Text>
78
- </TouchableOpacity>
79
- );
80
- })}
81
- </View>
82
-
83
- {/* Content */}
84
- <View style={styles.contentContainer}>
85
- {activeTab === 'speed' && (
86
- <Animated.View
87
- entering={FadeIn.duration(150)}
88
- exiting={FadeOut.duration(150)}
89
- style={styles.animatedContent}
90
- >
91
- <SpeedControl
92
- activeSpeed={speed}
93
- theme={theme}
94
- onSpeedChange={(value) => handleSelect(onSpeedChange, value)}
95
- />
96
- </Animated.View>
97
- )}
98
-
99
- {activeTab === 'quality' && (
100
- <Animated.View
101
- entering={FadeIn.duration(150)}
102
- exiting={FadeOut.duration(150)}
103
- style={styles.animatedContent}
104
- >
105
- <QualityControl
106
- activeQuality={quality}
107
- theme={theme}
108
- qualities={qualities}
109
- loading={qualitiesLoading}
110
- onQualityChange={(value) => handleSelect(onQualityChange, value)}
111
- />
112
- </Animated.View>
113
- )}
114
- </View>
115
- </BottomSheet>
116
- );
117
- };
118
-
119
- export default SettingModal;
120
-
121
- const styles = StyleSheet.create({
122
- tabContainer: {
123
- flexDirection: 'row',
124
- paddingHorizontal: moderateScale(16),
125
- marginTop: verticalScale(10),
126
- },
127
- tab: {
128
- flex: 1,
129
- alignItems: 'center',
130
- paddingBottom: 8,
131
- marginHorizontal: moderateScale(12),
132
- },
133
- tabText: {
134
- fontSize: RFValue(14),
135
- fontWeight: '700',
136
- },
137
- contentContainer: {
138
- flex: 1,
139
- marginTop: verticalScale(20),
140
- paddingHorizontal: moderateScale(16),
141
- },
142
- animatedContent: {
143
- width: '100%',
144
- minHeight: verticalScale(200),
145
- },
146
- });
@@ -1,154 +0,0 @@
1
- import React from 'react';
2
- import { StyleSheet, View, Image } from 'react-native';
3
- import LinearGradient from 'react-native-linear-gradient';
4
- import { Button } from '../../../Button';
5
- import { Text } from '../../../Text';
6
- import { moderateScale, verticalScale } from 'react-native-size-matters';
7
- import { RFValue } from 'react-native-responsive-fontsize';
8
- import { BottomSheet } from '../../../BottomSheet';
9
-
10
- import type { ITheme } from '../../../../theme';
11
- import type { ISeriesEpisode, ISeriesItem } from '../types';
12
-
13
- interface UnLockModalProps {
14
- episode: ISeriesEpisode;
15
- data: ISeriesItem;
16
- theme: ITheme;
17
- isVisible: boolean;
18
- onClose?: () => void;
19
- onUnlockPress?: (ep: ISeriesEpisode) => void;
20
- }
21
-
22
- const UnLockModal: React.FC<UnLockModalProps> = ({
23
- episode,
24
- data,
25
- theme,
26
- isVisible,
27
- onClose,
28
- onUnlockPress,
29
- }) => {
30
- return (
31
- <BottomSheet
32
- key={'UnlockModal'}
33
- theme={theme}
34
- visible={isVisible}
35
- onClose={onClose}
36
- height="55%" // prevent overflow
37
- showCloseButton
38
- scrollable={false}
39
- >
40
- <LinearGradient
41
- colors={[theme.colors.background, theme.colors.background]}
42
- style={styles.gradientContainer}
43
- >
44
- <View style={styles.contentWrapper}>
45
- {/* Thumbnail */}
46
- {data.thumbnail ? (
47
- <Image
48
- source={{ uri: data.thumbnail }}
49
- style={styles.thumbnail}
50
- resizeMode="cover"
51
- />
52
- ) : null}
53
-
54
- {/* Title */}
55
- <Text
56
- numberOfLines={2}
57
- ellipsizeMode="tail"
58
- style={[styles.title, { color: theme.colors.textPrimary }]}
59
- >
60
- {data.title}
61
- </Text>
62
-
63
- {/* Description */}
64
- <Text
65
- numberOfLines={3}
66
- ellipsizeMode="tail"
67
- style={[styles.description, { color: theme.colors.textSecondary }]}
68
- >
69
- {data.description}
70
- </Text>
71
-
72
- {/* Unlock Button */}
73
- <Button.Primary
74
- theme={{
75
- dark: theme.colors,
76
- light: theme.colors,
77
- }}
78
- title="Unlock Now"
79
- onPress={() => onUnlockPress?.(episode)}
80
- containerStyle={styles.unlockButton}
81
- />
82
-
83
- {/* Tagline */}
84
- <Text
85
- numberOfLines={2}
86
- ellipsizeMode="tail"
87
- style={[styles.smallNote, { color: theme.colors.textSecondary }]}
88
- >
89
- Unlocking gives you full access to this and all future episodes.
90
- </Text>
91
- </View>
92
- </LinearGradient>
93
- </BottomSheet>
94
- );
95
- };
96
-
97
- export default UnLockModal;
98
-
99
- const styles = StyleSheet.create({
100
- gradientContainer: {
101
- flex: 1,
102
- paddingTop: verticalScale(10),
103
- marginHorizontal: moderateScale(15),
104
- },
105
-
106
- contentWrapper: {
107
- flex: 1,
108
- alignItems: 'center',
109
- justifyContent: 'flex-start',
110
- paddingTop: verticalScale(8),
111
- paddingHorizontal: moderateScale(8),
112
- },
113
-
114
- thumbnail: {
115
- width: moderateScale(110),
116
- height: moderateScale(150),
117
- borderRadius: moderateScale(10),
118
- marginBottom: verticalScale(10),
119
- flexShrink: 0, // Prevents image from shrinking
120
- },
121
-
122
- title: {
123
- fontSize: RFValue(17),
124
- fontWeight: '700',
125
- textAlign: 'center',
126
- marginBottom: verticalScale(5),
127
- paddingHorizontal: moderateScale(10),
128
- width: '95%',
129
- flexShrink: 1, // prevents overflow
130
- },
131
-
132
- description: {
133
- fontSize: RFValue(12),
134
- textAlign: 'center',
135
- marginBottom: verticalScale(15),
136
- paddingHorizontal: moderateScale(20),
137
- lineHeight: RFValue(16),
138
- width: '95%',
139
- flexShrink: 1, // prevents layout overflow
140
- },
141
-
142
- unlockButton: {
143
- width: '95%',
144
- marginBottom: verticalScale(10),
145
- },
146
-
147
- smallNote: {
148
- fontSize: RFValue(10),
149
- opacity: 0.7,
150
- textAlign: 'center',
151
- width: '95%',
152
- flexShrink: 1, // ensures it stays inside modal
153
- },
154
- });