@zezosoft/zezo-ott-react-native-ui-kit 1.1.5 → 1.1.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/lib/module/components/Content/Card/Sliders/Styles/Three.js +5 -4
  2. package/lib/module/components/Content/Card/Sliders/Styles/Three.js.map +1 -1
  3. package/lib/module/components/Headers/Four.js +1 -1
  4. package/lib/module/components/Headers/Three.js +2 -1
  5. package/lib/module/components/Headers/Three.js.map +1 -1
  6. package/lib/typescript/src/components/Content/Card/Sliders/Styles/Three.d.ts.map +1 -1
  7. package/package.json +2 -14
  8. package/src/Styles/globalStyles.ts +0 -70
  9. package/src/assets/animations/135037-payment-processing-error.json +0 -1347
  10. package/src/assets/animations/7227-vui-animation.json +0 -3377
  11. package/src/assets/animations/Failed.json +0 -2103
  12. package/src/assets/animations/Pending.json +0 -522
  13. package/src/assets/animations/Successful.json +0 -2289
  14. package/src/assets/animations/heart.json +0 -788
  15. package/src/assets/animations/succesfull-payment.json +0 -2379
  16. package/src/assets/animations/voice-icon.json +0 -542
  17. package/src/assets/img/back.png +0 -0
  18. package/src/assets/img/bottom-panel.png +0 -0
  19. package/src/assets/img/camera.png +0 -0
  20. package/src/assets/img/camera2.png +0 -0
  21. package/src/assets/img/home.png +0 -0
  22. package/src/assets/img/lock.png +0 -0
  23. package/src/assets/img/play.png +0 -0
  24. package/src/assets/img/profile.jpg +0 -0
  25. package/src/assets/img/qr-code.png +0 -0
  26. package/src/assets/img/shadow.png +0 -0
  27. package/src/assets/img/shadow2.png +0 -0
  28. package/src/assets/img/user.png +0 -0
  29. package/src/assets/svg/Account.svg +0 -4
  30. package/src/assets/svg/Favourite.svg +0 -14
  31. package/src/assets/svg/Upcoming.svg +0 -4
  32. package/src/assets/svg/content-error.svg +0 -28
  33. package/src/assets/svg/download.svg +0 -3
  34. package/src/assets/svg/eye-off.svg +0 -10
  35. package/src/assets/svg/favorites.svg +0 -3
  36. package/src/assets/svg/h.svg +0 -4
  37. package/src/assets/svg/home.svg +0 -5
  38. package/src/assets/svg/home1.svg +0 -3
  39. package/src/assets/svg/menu-bar.svg +0 -4
  40. package/src/assets/svg/my-space.svg +0 -14
  41. package/src/assets/svg/play-icon-with-bg.svg +0 -5
  42. package/src/assets/svg/profile.svg +0 -4
  43. package/src/assets/svg/search.svg +0 -5
  44. package/src/assets/svg/search1.svg +0 -4
  45. package/src/assets/svg/server-error.svg +0 -139
  46. package/src/components/Account/Account.tsx +0 -367
  47. package/src/components/Account/index.ts +0 -1
  48. package/src/components/Alert/AlertDialog.tsx +0 -247
  49. package/src/components/Alert/UAAlert.tsx +0 -170
  50. package/src/components/Alert/index.ts +0 -2
  51. package/src/components/Auth/AuthProvider/AuthProvider.tsx +0 -419
  52. package/src/components/Auth/One/ForgotPassword/ForgotPassword.tsx +0 -324
  53. package/src/components/Auth/One/Login/LoginWithEmail.tsx +0 -455
  54. package/src/components/Auth/One/Login/LoginWithPhone.tsx +0 -306
  55. package/src/components/Auth/One/OTP/OTP.tsx +0 -465
  56. package/src/components/Auth/One/QrLogin/QrLogin.tsx +0 -602
  57. package/src/components/Auth/One/QrLogin/components/QrViewArea.tsx +0 -423
  58. package/src/components/Auth/One/SignUp/SignUp.tsx +0 -479
  59. package/src/components/Auth/One/SplashScreen/SplashScreen.tsx +0 -249
  60. package/src/components/Auth/One/SplashScreen/components/SplashImage/SplashImage.tsx +0 -103
  61. package/src/components/Auth/One/SplashScreen/components/SplashLottie/SplashLottie.tsx +0 -77
  62. package/src/components/Auth/One/SplashScreen/components/SplashVideo/SplashVideo.tsx +0 -174
  63. package/src/components/Auth/One/index.ts +0 -24
  64. package/src/components/Auth/Two/AuthHeader/AuthHeader.tsx +0 -108
  65. package/src/components/Auth/Two/ForgotPassword/ForgotPassword.tsx +0 -335
  66. package/src/components/Auth/Two/Login/AuthLoginShell.tsx +0 -173
  67. package/src/components/Auth/Two/Login/LoginWithEmail.tsx +0 -279
  68. package/src/components/Auth/Two/Login/LoginWithPhone.tsx +0 -188
  69. package/src/components/Auth/Two/OTP/OTP.tsx +0 -465
  70. package/src/components/Auth/Two/QrLogin/QrLogin.tsx +0 -602
  71. package/src/components/Auth/Two/QrLogin/components/QrViewArea.tsx +0 -423
  72. package/src/components/Auth/Two/SignUp/SignUp.tsx +0 -472
  73. package/src/components/Auth/Two/SplashScreen/SplashScreen.tsx +0 -248
  74. package/src/components/Auth/Two/SplashScreen/components/SplashImage/SplashImage.tsx +0 -92
  75. package/src/components/Auth/Two/SplashScreen/components/SplashLottie/SplashLottie.tsx +0 -77
  76. package/src/components/Auth/Two/SplashScreen/components/SplashVideo/SplashVideo.tsx +0 -178
  77. package/src/components/Auth/Two/index.ts +0 -28
  78. package/src/components/Auth/index.ts +0 -11
  79. package/src/components/BackgroundLayout/BackgroundLayout.tsx +0 -174
  80. package/src/components/BackgroundLayout/BackgroundLayoutOne.tsx +0 -56
  81. package/src/components/BlogView/BlogView.tsx +0 -276
  82. package/src/components/BlogView/index.ts +0 -8
  83. package/src/components/BlurView/BlurView.tsx +0 -199
  84. package/src/components/BlurView/index.ts +0 -7
  85. package/src/components/BottomSheet/BottomSheet.tsx +0 -200
  86. package/src/components/BottomSheet/BottomSheetOne.tsx +0 -220
  87. package/src/components/BottomSheet/index.ts +0 -4
  88. package/src/components/Button/BackBtn.tsx +0 -168
  89. package/src/components/Button/MenuBtn.tsx +0 -229
  90. package/src/components/Button/PrimaryBtn.tsx +0 -134
  91. package/src/components/Button/SecondaryBtn.tsx +0 -132
  92. package/src/components/Button/TextButton.tsx +0 -145
  93. package/src/components/Button/index.ts +0 -18
  94. package/src/components/Content/Card/Category/Category.tsx +0 -436
  95. package/src/components/Content/Card/Category/CategroyTwo.tsx +0 -429
  96. package/src/components/Content/Card/NowWatching/NowWatching.tsx +0 -624
  97. package/src/components/Content/Card/Sliders/Styles/One.tsx +0 -490
  98. package/src/components/Content/Card/Sliders/Styles/Three.tsx +0 -935
  99. package/src/components/Content/Card/Sliders/Styles/Two.tsx +0 -391
  100. package/src/components/Content/Card/Sliders/index.ts +0 -17
  101. package/src/components/Content/Card/Styles/Five.tsx +0 -385
  102. package/src/components/Content/Card/Styles/Four.tsx +0 -379
  103. package/src/components/Content/Card/Styles/One.tsx +0 -386
  104. package/src/components/Content/Card/Styles/RotateInOut.tsx +0 -413
  105. package/src/components/Content/Card/Styles/Six.tsx +0 -392
  106. package/src/components/Content/Card/Styles/Three.tsx +0 -314
  107. package/src/components/Content/Card/Styles/TopTen.tsx +0 -412
  108. package/src/components/Content/Card/Styles/Two.tsx +0 -416
  109. package/src/components/Content/Card/components/AdsPoster.tsx +0 -202
  110. package/src/components/Content/Card/components/CardPoster.tsx +0 -377
  111. package/src/components/Content/Card/components/NavigateToMore.tsx +0 -97
  112. package/src/components/Content/Card/components/RentOrBuyIcon.tsx +0 -129
  113. package/src/components/Content/Card/components/ShowAllButton.tsx +0 -92
  114. package/src/components/Content/Card/components/ThumbnailCard.tsx +0 -234
  115. package/src/components/Content/Card/components/index.ts +0 -1
  116. package/src/components/Content/Card/index.ts +0 -30
  117. package/src/components/Content/Content.tsx +0 -315
  118. package/src/components/Content/Sections.tsx +0 -238
  119. package/src/components/Content/types.ts +0 -176
  120. package/src/components/ContentView/MoreContentList.tsx +0 -327
  121. package/src/components/ContentView/One/ContentViewOne.tsx +0 -243
  122. package/src/components/ContentView/One/components/AboutSection.tsx +0 -216
  123. package/src/components/ContentView/One/components/CastCard.tsx +0 -265
  124. package/src/components/ContentView/One/components/EpisodeCard.tsx +0 -535
  125. package/src/components/ContentView/One/components/GenreTags.tsx +0 -132
  126. package/src/components/ContentView/One/components/HeroBanner.tsx +0 -357
  127. package/src/components/ContentView/One/components/MiniInfo.tsx +0 -356
  128. package/src/components/ContentView/One/components/PlayButton.tsx +0 -56
  129. package/src/components/ContentView/One/components/Title.tsx +0 -149
  130. package/src/components/ContentView/One/components/TrailerButton.tsx +0 -76
  131. package/src/components/ContentView/Two/ContentViewTwo.tsx +0 -343
  132. package/src/components/ContentView/Two/components/AboutSection.tsx +0 -216
  133. package/src/components/ContentView/Two/components/Details.tsx +0 -193
  134. package/src/components/ContentView/Two/components/EpisodeCard.tsx +0 -602
  135. package/src/components/ContentView/Two/components/GenreTags.tsx +0 -123
  136. package/src/components/ContentView/Two/components/HeroBanner.tsx +0 -402
  137. package/src/components/ContentView/Two/components/LikeShareActions.tsx +0 -125
  138. package/src/components/ContentView/Two/components/MoreLikeThisContentList .tsx +0 -305
  139. package/src/components/ContentView/Two/components/PlayOrTrailer.tsx +0 -133
  140. package/src/components/ContentView/Two/components/SectionTabs.tsx +0 -177
  141. package/src/components/ContentView/Two/components/Title.tsx +0 -226
  142. package/src/components/ContentView/Two/components/index.ts +0 -15
  143. package/src/components/ContentView/index.ts +0 -13
  144. package/src/components/Fallbacks/NoContentFallback.tsx +0 -176
  145. package/src/components/Fallbacks/NotFoundFallback.tsx +0 -94
  146. package/src/components/Fallbacks/index.ts +0 -2
  147. package/src/components/Headers/AppHeader.tsx +0 -150
  148. package/src/components/Headers/Four.tsx +0 -83
  149. package/src/components/Headers/One.tsx +0 -115
  150. package/src/components/Headers/Three.tsx +0 -135
  151. package/src/components/Headers/Two.tsx +0 -100
  152. package/src/components/Headers/index.ts +0 -18
  153. package/src/components/Input/Input.ts +0 -20
  154. package/src/components/Input/InputOne.tsx +0 -259
  155. package/src/components/Input/InputThree.tsx +0 -212
  156. package/src/components/Input/InputTwo.tsx +0 -212
  157. package/src/components/Input/PhoneNumberInput.tsx +0 -431
  158. package/src/components/Input/PhoneNumberInputTwo.tsx +0 -418
  159. package/src/components/Keyboard/HideKeyboard.tsx +0 -88
  160. package/src/components/Loader/Loader.tsx +0 -44
  161. package/src/components/Logo/Logo.tsx +0 -145
  162. package/src/components/NewRelease/NewReleaseSheet.tsx +0 -250
  163. package/src/components/NewRelease/index.ts +0 -1
  164. package/src/components/Reels/ReelsSeries/MediaControls/BottomControls.tsx +0 -221
  165. package/src/components/Reels/ReelsSeries/MediaControls/MediaControlsProvider.tsx +0 -314
  166. package/src/components/Reels/ReelsSeries/MediaControls/MiddleControls.tsx +0 -196
  167. package/src/components/Reels/ReelsSeries/MediaControls/RightControls.tsx +0 -95
  168. package/src/components/Reels/ReelsSeries/MediaControls/TopControls.tsx +0 -163
  169. package/src/components/Reels/ReelsSeries/Model/DetailsModal.tsx +0 -210
  170. package/src/components/Reels/ReelsSeries/Model/SettingModal.tsx +0 -146
  171. package/src/components/Reels/ReelsSeries/Model/UnlockModal.tsx +0 -154
  172. package/src/components/Reels/ReelsSeries/ReelsSeries.tsx +0 -264
  173. package/src/components/Reels/ReelsSeries/ReelsSeriesItem.tsx +0 -494
  174. package/src/components/Reels/ReelsSeries/components/AnimatedThreeLines.tsx +0 -184
  175. package/src/components/Reels/ReelsSeries/components/Episodes.tsx +0 -154
  176. package/src/components/Reels/ReelsSeries/components/GradientOverlay.tsx +0 -41
  177. package/src/components/Reels/ReelsSeries/components/Like.tsx +0 -40
  178. package/src/components/Reels/ReelsSeries/components/RotatingLoader.tsx +0 -79
  179. package/src/components/Reels/ReelsSeries/components/Synopsis.tsx +0 -332
  180. package/src/components/Reels/ReelsSeries/components/VideoControls/QualityControl.tsx +0 -187
  181. package/src/components/Reels/ReelsSeries/components/VideoControls/SpeedControl.tsx +0 -80
  182. package/src/components/Reels/ReelsSeries/components/VideoControls/index.ts +0 -2
  183. package/src/components/Reels/ReelsSeries/types.ts +0 -54
  184. package/src/components/Reels/ReelsSeries/useReelsWatchProgress.ts +0 -85
  185. package/src/components/Reels/ReelsSeries/utils/quality.ts +0 -48
  186. package/src/components/Reels/index.ts +0 -9
  187. package/src/components/Reels/utils/Controls/gestureUtils.ts +0 -42
  188. package/src/components/Reels/utils/Controls/index.ts +0 -4
  189. package/src/components/Reels/utils/Controls/overlayUtils.ts +0 -35
  190. package/src/components/Reels/utils/Controls/videoControlsConstants.ts +0 -25
  191. package/src/components/Reels/utils/Controls/videoRef.ts +0 -4
  192. package/src/components/Reels/utils/index.ts +0 -1
  193. package/src/components/Reels/utils/timeoutUtils.ts +0 -29
  194. package/src/components/Search/One.tsx +0 -256
  195. package/src/components/Search/components/RecentSearchesSection.tsx +0 -181
  196. package/src/components/Search/components/SearchCard.tsx +0 -275
  197. package/src/components/Search/index.ts +0 -16
  198. package/src/components/Settings/AppSettings.tsx +0 -428
  199. package/src/components/Settings/index.ts +0 -1
  200. package/src/components/Subscription/SubOne.tsx +0 -874
  201. package/src/components/Subscription/index.ts +0 -12
  202. package/src/components/TabBar/One.tsx +0 -148
  203. package/src/components/TabBar/Three.tsx +0 -169
  204. package/src/components/TabBar/Two.tsx +0 -189
  205. package/src/components/TabBar/index.ts +0 -20
  206. package/src/components/Text/Text.tsx +0 -85
  207. package/src/components/Text/index.ts +0 -5
  208. package/src/components/User/DeviceSessions/DeviceSessions.tsx +0 -468
  209. package/src/components/User/ProfileUpdate/ProfileUpdate.tsx +0 -278
  210. package/src/components/User/PurchaseHistory/PurchaseHistory.tsx +0 -494
  211. package/src/components/User/WatchHistory/WatchHistory.tsx +0 -227
  212. package/src/components/User/WatchLater/WatchLater.tsx +0 -397
  213. package/src/components/User/components/UserAvatar.tsx +0 -120
  214. package/src/components/User/components/UserSection.tsx +0 -228
  215. package/src/components/User/index.ts +0 -18
  216. package/src/components/View/View.tsx +0 -37
  217. package/src/components/View/index.ts +0 -5
  218. package/src/components/common/AppStatusBar.tsx +0 -57
  219. package/src/components/index.ts +0 -29
  220. package/src/components/layout/SafeAreaWrapper.tsx +0 -45
  221. package/src/components/layout/index.ts +0 -1
  222. package/src/constants/dummySections.ts +0 -98
  223. package/src/hooks/Images/index.ts +0 -2
  224. package/src/hooks/Images/useImageLoader.ts +0 -206
  225. package/src/hooks/Images/useImageValidation.ts +0 -36
  226. package/src/hooks/index.ts +0 -17
  227. package/src/hooks/useAdTracking.ts +0 -349
  228. package/src/hooks/useCards.ts +0 -228
  229. package/src/hooks/useDebounce.ts +0 -35
  230. package/src/hooks/useKeyboard.ts +0 -43
  231. package/src/hooks/useNavigationMode.ts +0 -46
  232. package/src/hooks/usePaginatedSection.ts +0 -101
  233. package/src/hooks/usePrevious.ts +0 -28
  234. package/src/hooks/useSafeCallback.ts +0 -43
  235. package/src/hooks/useSkeletonItems.ts +0 -30
  236. package/src/hooks/useSplashCache.ts +0 -186
  237. package/src/hooks/useThemeColors.ts +0 -51
  238. package/src/index.tsx +0 -8
  239. package/src/store/RecentSearchesStore.ts +0 -78
  240. package/src/store/splashStore.ts +0 -91
  241. package/src/store/themeStore.ts +0 -43
  242. package/src/theme/ThemeProvider.tsx +0 -112
  243. package/src/theme/hook/index.ts +0 -1
  244. package/src/theme/hook/useInternalTheme.ts +0 -98
  245. package/src/theme/index.ts +0 -7
  246. package/src/theme/themes.ts +0 -336
  247. package/src/theme/utils/validateColor.ts +0 -127
  248. package/src/types/content/content-view.types.ts +0 -206
  249. package/src/types/hook/index.ts +0 -5
  250. package/src/types/hook/usePaginatedSetion.ts +0 -19
  251. package/src/types/index.ts +0 -7
  252. package/src/types/sections/index.ts +0 -84
  253. package/src/utils/Display.ts +0 -14
  254. package/src/utils/Formater.ts +0 -14
  255. package/src/utils/PlatformSelector.ts +0 -29
  256. package/src/utils/SizeMatters.ts +0 -7
  257. package/src/utils/Spacing.ts +0 -27
  258. package/src/utils/colorUtils.ts +0 -70
@@ -1,108 +0,0 @@
1
- import React from 'react';
2
- import {
3
- View,
4
- Pressable,
5
- StyleSheet,
6
- type ViewStyle,
7
- Text,
8
- } from 'react-native';
9
- import { useSafeAreaInsets } from 'react-native-safe-area-context';
10
- import { scale, verticalScale } from 'react-native-size-matters';
11
- import type { ThemeOverride } from '../../../../theme';
12
- import { useInternalTheme } from '../../../../theme/hook';
13
- import Logo from '../../../Logo/Logo';
14
- import TextButton from '../../../Button/TextButton';
15
-
16
- type Props = {
17
- logoUri?: string;
18
- onLogoPress?: () => void;
19
- rightTitle?: string;
20
- onRightPress?: () => void;
21
- rightComponent?: React.ReactNode;
22
- containerStyle?: ViewStyle;
23
- theme?: ThemeOverride;
24
- headerTitle?: string;
25
- };
26
-
27
- const AuthHeader: React.FC<Props> = ({
28
- logoUri,
29
- onLogoPress,
30
- rightTitle,
31
- onRightPress,
32
- rightComponent,
33
- containerStyle,
34
- theme: overrideTheme,
35
- headerTitle,
36
- }) => {
37
- const insets = useSafeAreaInsets();
38
- const { theme } = useInternalTheme(overrideTheme);
39
-
40
- return (
41
- <View
42
- style={[styles.container, { paddingTop: insets.top }, containerStyle]}
43
- >
44
- <View style={styles.row}>
45
- <View style={styles.left}>
46
- {logoUri && (
47
- <Pressable onPress={onLogoPress} style={styles.logoWrapper}>
48
- <Logo logoUri={logoUri} resizeMode="contain" />
49
- </Pressable>
50
- )}
51
- {headerTitle && (
52
- <Text style={[styles.title, { color: theme.colors.textPrimary }]}>
53
- {headerTitle}
54
- </Text>
55
- )}
56
- </View>
57
-
58
- <View style={styles.right}>
59
- {rightComponent ? (
60
- rightComponent
61
- ) : rightTitle && onRightPress ? (
62
- <TextButton
63
- title={rightTitle}
64
- onPress={onRightPress}
65
- color={theme.colors.textPrimary}
66
- />
67
- ) : null}
68
- </View>
69
- </View>
70
- </View>
71
- );
72
- };
73
-
74
- export default React.memo(AuthHeader);
75
-
76
- const styles = StyleSheet.create({
77
- container: {
78
- marginTop: verticalScale(0),
79
- width: '100%',
80
- zIndex: 100,
81
- },
82
- row: {
83
- flexDirection: 'row',
84
- justifyContent: 'space-between',
85
- alignItems: 'flex-start',
86
- paddingTop: verticalScale(8),
87
- },
88
- left: {
89
- flex: 1,
90
- justifyContent: 'flex-start',
91
- alignItems: 'flex-start',
92
- },
93
- logoWrapper: {
94
- width: scale(100),
95
- height: scale(10),
96
- transform: [{ scale: 0.6 }],
97
- },
98
- right: {
99
- justifyContent: 'flex-start',
100
- alignItems: 'flex-end',
101
- },
102
- title: {
103
- fontSize: 18,
104
- fontWeight: '700',
105
- marginTop: verticalScale(8),
106
- textAlign: 'left',
107
- },
108
- });
@@ -1,335 +0,0 @@
1
- /**
2
- * @author Naresh Dhamu
3
- * @lastModified Wed 18 Jun 2025 at 10:45 AM
4
- **/
5
- import React, { useCallback, useMemo, useState } from 'react';
6
- import {
7
- StyleSheet,
8
- View,
9
- Alert,
10
- type ViewStyle,
11
- type TextStyle,
12
- } from 'react-native';
13
- import { useForm, Controller } from 'react-hook-form';
14
- import { scale, verticalScale } from 'react-native-size-matters';
15
- import { Input } from '../../../Input/Input';
16
- import { Button } from '../../../Button';
17
- import { Logo } from '../../../Logo/Logo';
18
- import { useKeyboard } from '../../../../hooks/useKeyboard';
19
- import HideKeyboard from '../../../Keyboard/HideKeyboard';
20
- import BackBtn from '../../../Button/BackBtn';
21
- import { Text } from '../../../Text';
22
- import { RFValue } from 'react-native-responsive-fontsize';
23
- import type { ThemeOverride } from '../../../../theme/themes';
24
- import { Mail } from 'lucide-react-native';
25
- import BackgroundLayoutOne from '../../../BackgroundLayout/BackgroundLayoutOne';
26
- import { useInternalTheme } from '../../../../theme/hook';
27
-
28
- type FormValues = {
29
- email: string;
30
- };
31
-
32
- type TextConfig = {
33
- emailLabel?: string;
34
- emailPlaceholder?: string;
35
- loadingSubmitBtnText?: string;
36
- forgetPasswordButton?: string;
37
- bottomInfoText?: string;
38
- };
39
-
40
- type ForgetPasswordProps = {
41
- title?: string;
42
- subtitle?: string;
43
- onSubmit?: ({ email }: { email: string }) => Promise<void> | void;
44
- onTopBackBtnPress?: () => void;
45
- containerStyle?: ViewStyle;
46
- titleStyle?: TextStyle;
47
- subtitleStyle?: TextStyle;
48
- formStyle?: ViewStyle;
49
- inputStyle?: TextStyle;
50
- inputContainerStyle?: ViewStyle;
51
- topBackBtnStyle?: ViewStyle;
52
- backgroundImage?: {
53
- source?: string | null;
54
- onImageError?: (error: Error) => void;
55
- gradientSplitBackground?: number;
56
- resizeMode?: 'cover' | 'contain' | 'stretch' | 'repeat';
57
- };
58
- logoUri?: string;
59
- theme?: ThemeOverride;
60
- loadingSubmitBtn?: boolean;
61
- text?: TextConfig;
62
- renderLogo?: () => React.ReactNode;
63
- renderForgetPasswordHeader?: () => React.ReactNode;
64
- renderSubmitButton?: (props: {
65
- onPress: () => void;
66
- disabled: boolean;
67
- loading: boolean;
68
- }) => React.ReactNode;
69
- renderTopBackBtn?: (props: { onPress: () => void }) => React.ReactNode;
70
- renderBottomInfoText?: () => React.ReactNode;
71
- };
72
-
73
- const ForgetPassword: React.FC<ForgetPasswordProps> = ({
74
- title = 'Forgot Password',
75
- subtitle = 'Enter your email account to reset password',
76
- onSubmit,
77
- onTopBackBtnPress,
78
- containerStyle,
79
- titleStyle,
80
- subtitleStyle,
81
- formStyle,
82
- inputStyle,
83
- inputContainerStyle,
84
- topBackBtnStyle,
85
- loadingSubmitBtn = false,
86
- // backgroundImage,
87
- logoUri,
88
- theme: overrideTheme,
89
- text = {
90
- emailLabel: 'Email',
91
- emailPlaceholder: 'Enter your email',
92
- loadingSubmitBtnText: 'Processing...',
93
- forgetPasswordButton: 'Send Reset Link',
94
- },
95
- renderLogo,
96
- renderForgetPasswordHeader,
97
- renderSubmitButton,
98
- renderTopBackBtn,
99
- renderBottomInfoText,
100
- }) => {
101
- const {
102
- control,
103
- handleSubmit,
104
- formState: { errors, isValid, touchedFields },
105
- } = useForm<FormValues>({
106
- defaultValues: { email: '' },
107
- mode: 'onChange',
108
- });
109
-
110
- const { isKeyboardOpen } = useKeyboard();
111
- const [isLoading, setIsLoading] = useState(false);
112
- const { theme } = useInternalTheme(overrideTheme);
113
- const textPrimaryColor = theme.colors.textPrimary;
114
-
115
- const handleFormSubmit = useCallback(
116
- async (data: FormValues) => {
117
- if (!onSubmit) return;
118
- setIsLoading(true);
119
- try {
120
- await onSubmit(data);
121
- } catch (error) {
122
- console.error('Form submission error:', error);
123
- Alert.alert('Error', 'Failed to process request. Please try again.');
124
- } finally {
125
- setIsLoading(false);
126
- }
127
- },
128
- [onSubmit]
129
- );
130
-
131
- const shouldRender = useMemo(
132
- () => (condition?: boolean | unknown) =>
133
- typeof condition === 'function' || !!condition,
134
- []
135
- );
136
-
137
- const isSubmitDisabled = useMemo(
138
- () => loadingSubmitBtn || isLoading,
139
- [loadingSubmitBtn, isLoading]
140
- );
141
-
142
- // Memoize gradient split background
143
- // const gradientSplitBackground = useMemo(
144
- // () => (isKeyboardOpen ? (Platform.OS === 'ios' ? 0.19 : 0.14) : 0.3),
145
- // [isKeyboardOpen]
146
- // );
147
-
148
- return (
149
- <BackgroundLayoutOne>
150
- <View style={[styles.container, containerStyle]}>
151
- {shouldRender(renderTopBackBtn || onTopBackBtnPress) && (
152
- <View style={styles.topBackBtnWrapper}>
153
- {renderTopBackBtn ? (
154
- renderTopBackBtn({
155
- onPress: onTopBackBtnPress ?? (() => {}),
156
- })
157
- ) : (
158
- <BackBtn
159
- theme={overrideTheme}
160
- style={topBackBtnStyle}
161
- onPress={onTopBackBtnPress}
162
- />
163
- )}
164
- </View>
165
- )}
166
- <HideKeyboard>
167
- <View style={styles.centerContent}>
168
- {renderLogo ? (
169
- renderLogo()
170
- ) : logoUri ? (
171
- <Logo logoUri={logoUri} />
172
- ) : null}
173
-
174
- {renderForgetPasswordHeader ? (
175
- renderForgetPasswordHeader()
176
- ) : (
177
- <>
178
- <Text
179
- style={[
180
- styles.title,
181
- { color: textPrimaryColor },
182
- titleStyle,
183
- ]}
184
- >
185
- {title}
186
- </Text>
187
-
188
- {subtitle ? (
189
- <Text
190
- style={[
191
- styles.subtitle,
192
- { color: textPrimaryColor },
193
- subtitleStyle,
194
- ]}
195
- >
196
- {subtitle}
197
- </Text>
198
- ) : null}
199
- </>
200
- )}
201
-
202
- {/* Form */}
203
- <View style={[styles.form, formStyle]} testID="form">
204
- <Controller
205
- control={control}
206
- name="email"
207
- rules={{
208
- required: 'Email is required',
209
- pattern: {
210
- value: /^\S+@\S+\.\S+$/,
211
- message: 'Enter a valid email address',
212
- },
213
- }}
214
- render={({ field: { onChange, onBlur, value } }) => (
215
- <Input.Three
216
- placeholder={text.emailPlaceholder || 'Enter your email'}
217
- label={text.emailLabel || 'Email'}
218
- value={value}
219
- onChangeText={(inputText) => {
220
- const sanitized = inputText.replace(/[^\w@.\-+]/g, '');
221
- onChange(sanitized);
222
- }}
223
- onBlur={onBlur}
224
- disabled={isSubmitDisabled}
225
- error={!!touchedFields.email && !!errors.email}
226
- errorMessage={errors.email?.message}
227
- inputStyle={inputStyle}
228
- containerStyle={inputContainerStyle}
229
- theme={overrideTheme}
230
- textContentType="emailAddress"
231
- autoCapitalize="none"
232
- keyboardType="email-address"
233
- autoCorrect={false}
234
- testID="email-input"
235
- leftIcon={<Mail size={25} />}
236
- />
237
- )}
238
- />
239
-
240
- {renderSubmitButton ? (
241
- renderSubmitButton({
242
- onPress: handleSubmit(handleFormSubmit),
243
- disabled: isSubmitDisabled || !isValid,
244
- loading: loadingSubmitBtn || isLoading,
245
- })
246
- ) : (
247
- <Button.Primary
248
- title={text.forgetPasswordButton || 'Continue'}
249
- disabled={isSubmitDisabled || !isValid}
250
- theme={overrideTheme}
251
- loading={loadingSubmitBtn || isLoading}
252
- loadingText={text.loadingSubmitBtnText || 'Please wait...'}
253
- onPress={handleSubmit(handleFormSubmit)}
254
- />
255
- )}
256
- </View>
257
-
258
- {/* Bottom Info Text */}
259
- {!isKeyboardOpen && (
260
- <>
261
- {renderBottomInfoText ? (
262
- renderBottomInfoText()
263
- ) : text.bottomInfoText ? (
264
- <Text
265
- style={[
266
- styles.bottomInfo,
267
- { color: theme.colors.textSecondary },
268
- ]}
269
- accessibilityRole="text"
270
- testID="bottom-info-text"
271
- >
272
- {text.bottomInfoText}
273
- </Text>
274
- ) : null}
275
- </>
276
- )}
277
- </View>
278
- </HideKeyboard>
279
- </View>
280
- </BackgroundLayoutOne>
281
- );
282
- };
283
-
284
- export default React.memo(ForgetPassword);
285
-
286
- const styles = StyleSheet.create({
287
- container: {
288
- flex: 1,
289
- width: '100%',
290
- paddingHorizontal: scale(20),
291
- paddingTop: verticalScale(24),
292
- paddingBottom: verticalScale(32),
293
- justifyContent: 'center',
294
- alignItems: 'center',
295
- },
296
- topBackBtnWrapper: {
297
- position: 'absolute',
298
- top: verticalScale(6),
299
- left: 0,
300
- zIndex: 10,
301
- },
302
- centerContent: {
303
- flex: 1,
304
- width: '100%',
305
- alignItems: 'center',
306
- justifyContent: 'center',
307
- gap: verticalScale(6),
308
- marginBottom: verticalScale(100),
309
- },
310
- title: {
311
- fontSize: RFValue(23),
312
- fontWeight: '700',
313
- textAlign: 'center',
314
- marginTop: verticalScale(12),
315
- },
316
- subtitle: {
317
- fontSize: RFValue(13),
318
- fontWeight: '400',
319
- textAlign: 'center',
320
- marginBottom: verticalScale(80),
321
- },
322
-
323
- form: {
324
- width: '100%',
325
- gap: verticalScale(14),
326
- marginTop: verticalScale(8),
327
- },
328
- bottomInfo: {
329
- marginTop: verticalScale(15),
330
- fontSize: RFValue(10),
331
- fontWeight: '500',
332
- textAlign: 'center',
333
- opacity: 0.7,
334
- },
335
- });
@@ -1,173 +0,0 @@
1
- import React from 'react';
2
- import { View, StyleSheet, Pressable } from 'react-native';
3
- import { verticalScale } from 'react-native-size-matters';
4
- import { RFValue } from 'react-native-responsive-fontsize';
5
- import { Text } from '../../../Text';
6
- import { useInternalTheme } from '../../../../theme/hook/useInternalTheme';
7
- import type { ThemeOverride } from '../../../../theme/themes';
8
- import AuthHeader from '../AuthHeader/AuthHeader';
9
-
10
- type Props = {
11
- activeTab: 'phone' | 'email';
12
- onPhonePress?: () => void;
13
- onEmailPress?: () => void;
14
- onSignup?: () => void;
15
- logoUri?: string;
16
- title?: string;
17
- description?: string;
18
- bottomTitle?: string;
19
- children: React.ReactNode;
20
- theme?: ThemeOverride;
21
- };
22
-
23
- const AuthLoginShell: React.FC<Props> = ({
24
- activeTab,
25
- onPhonePress,
26
- onEmailPress,
27
- onSignup,
28
- logoUri,
29
- title,
30
- description,
31
- bottomTitle,
32
- children,
33
- theme: overrideTheme,
34
- }) => {
35
- const { theme } = useInternalTheme(overrideTheme);
36
-
37
- return (
38
- <View style={styles.wrapper}>
39
- {/* ✅ Reusable Auth Header */}
40
- <AuthHeader
41
- logoUri={logoUri}
42
- rightTitle="Sign Up"
43
- onRightPress={onSignup}
44
- theme={overrideTheme}
45
- />
46
-
47
- {/* ===== Title ===== */}
48
- <View style={styles.titleBlock}>
49
- {title && (
50
- <Text style={[styles.title, { color: theme.colors.textPrimary }]}>
51
- {title}
52
- </Text>
53
- )}
54
- {description && (
55
- <Text style={[styles.subtitle, { color: theme.colors.textPrimary }]}>
56
- {description}
57
- </Text>
58
- )}
59
- </View>
60
-
61
- {/* ===== Tabs ===== */}
62
- <View style={styles.tabRow}>
63
- <Pressable style={styles.tab} onPress={onPhonePress}>
64
- <Text
65
- style={[
66
- styles.tabText,
67
- {
68
- color: theme.colors.textPrimary,
69
- opacity: activeTab === 'phone' ? 1 : 0.6,
70
- },
71
- ]}
72
- >
73
- Phone number
74
- </Text>
75
-
76
- {activeTab === 'phone' && (
77
- <View
78
- style={[
79
- styles.activeLine,
80
- { backgroundColor: theme.colors.button },
81
- ]}
82
- />
83
- )}
84
- </Pressable>
85
-
86
- <Pressable style={styles.tab} onPress={onEmailPress}>
87
- <Text
88
- style={[
89
- styles.tabText,
90
- {
91
- color: theme.colors.textPrimary,
92
- opacity: activeTab === 'email' ? 1 : 0.6,
93
- },
94
- ]}
95
- >
96
- Email address
97
- </Text>
98
-
99
- {activeTab === 'email' && (
100
- <View
101
- style={[
102
- styles.activeLine,
103
- { backgroundColor: theme.colors.button },
104
- ]}
105
- />
106
- )}
107
- </Pressable>
108
- </View>
109
-
110
- {/* ===== Content ===== */}
111
- <View style={styles.center}>{children}</View>
112
-
113
- {/* ===== Bottom Text ===== */}
114
- {bottomTitle && (
115
- <Text style={[styles.disclaimer, { color: theme.colors.textPrimary }]}>
116
- {bottomTitle}
117
- </Text>
118
- )}
119
- </View>
120
- );
121
- };
122
-
123
- export default AuthLoginShell;
124
-
125
- const styles = StyleSheet.create({
126
- wrapper: {
127
- flex: 1,
128
- width: '100%',
129
- alignItems: 'center',
130
- },
131
- titleBlock: {
132
- alignItems: 'center',
133
- marginBottom: verticalScale(28),
134
- marginTop: verticalScale(110), // ⬅ header ke liye thoda space
135
- },
136
- title: {
137
- fontSize: RFValue(22),
138
- fontWeight: '700',
139
- marginBottom: verticalScale(6),
140
- },
141
- subtitle: {
142
- fontSize: RFValue(12),
143
- textAlign: 'center',
144
- },
145
- tabRow: {
146
- flexDirection: 'row',
147
- width: '100%',
148
- marginBottom: verticalScale(20),
149
- },
150
- tab: {
151
- flex: 1,
152
- alignItems: 'center',
153
- marginTop: verticalScale(30),
154
- },
155
- tabText: {
156
- fontSize: RFValue(14.5),
157
- fontWeight: '600',
158
- },
159
- activeLine: {
160
- marginTop: verticalScale(6),
161
- height: 2,
162
- width: '70%',
163
- },
164
- center: {
165
- width: '100%',
166
- flexGrow: 1,
167
- },
168
- disclaimer: {
169
- marginBottom: verticalScale(45),
170
- fontSize: RFValue(12.5),
171
- textAlign: 'center',
172
- },
173
- });