@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,479 +0,0 @@
1
- /**
2
- * @author Naresh Dhamu
3
- * @lastModified Mon 16 Jun 2025 at 03:05 PM
4
- */
5
- import React, { useCallback, useMemo } from 'react';
6
- import {
7
- StyleSheet,
8
- View,
9
- Platform,
10
- Keyboard,
11
- SafeAreaView,
12
- type ViewStyle,
13
- type TextStyle,
14
- } from 'react-native';
15
- import { useForm, Controller } from 'react-hook-form';
16
- import { scale, verticalScale } from 'react-native-size-matters';
17
- import { Input } from '../../../Input/Input';
18
- import { Button } from '../../../Button';
19
- import { BackgroundLayout } from '../../../BackgroundLayout/BackgroundLayout';
20
- import { Logo } from '../../../Logo/Logo';
21
- import TextButton from '../../../Button/TextButton';
22
- import { useInternalTheme } from '../../../../theme/hook/useInternalTheme';
23
- import { useKeyboard } from '../../../../hooks/useKeyboard';
24
- import HideKeyboard from '../../../Keyboard/HideKeyboard';
25
- import BackBtn from '../../../Button/BackBtn';
26
- import { Text } from '../../../Text';
27
- import type { ThemeOverride } from '../../../../theme/themes';
28
- import { RFValue } from 'react-native-responsive-fontsize';
29
- import { getResponsiveBottomSpacing } from '../../../../utils/Spacing';
30
-
31
- type FormValues = {
32
- username: string;
33
- email: string;
34
- password: string;
35
- confirmPassword: string;
36
- };
37
-
38
- export interface SignupProps {
39
- title: string;
40
- onSubmit?: (values: FormValues) => void;
41
- onLogin?: () => void;
42
- onTopBackBtnPress?: () => void;
43
- containerStyle?: ViewStyle;
44
- titleStyle?: TextStyle;
45
- formStyle?: ViewStyle;
46
- inputStyle?: TextStyle;
47
- inputContainerStyle?: ViewStyle;
48
- topBackBtnStyle?: ViewStyle;
49
- minPasswordLength?: number;
50
- backgroundImage?: {
51
- source?: string | null;
52
- onImageError?: (error: Error) => void;
53
- gradientSplitBackground?: number;
54
- resizeMode?: 'cover' | 'contain' | 'stretch' | 'repeat';
55
- };
56
- logoUri?: string;
57
- theme?: ThemeOverride;
58
- loadingSubmitBtn?: boolean;
59
- text?: {
60
- usernameLabel?: string;
61
- usernamePlaceholder?: string;
62
- emailLabel?: string;
63
- emailPlaceholder?: string;
64
- passwordLabel?: string;
65
- loadingSubmitBtnText?: string;
66
- passwordPlaceholder?: string;
67
- confirmPasswordLabel?: string;
68
- confirmPasswordPlaceholder?: string;
69
- loginPrompt?: string;
70
- loginLink?: string;
71
- signupButton?: string;
72
- };
73
- loginTextProps?: TextStyle;
74
- loginLinkTextProps?: TextStyle;
75
- renderLogo?: () => React.ReactNode;
76
- renderSingUpHeader?: () => React.ReactNode;
77
- renderLoginPrompt?: () => React.ReactNode;
78
- renderSubmitButton?: (props: {
79
- onPress: () => void;
80
- disabled: boolean;
81
- loading: boolean;
82
- }) => React.ReactNode;
83
- renderTopBackBtn?: (props: { onPress: () => void }) => React.ReactNode;
84
- }
85
-
86
- const Signup: React.FC<SignupProps> = React.memo(
87
- ({
88
- title = 'Sign Up',
89
- onSubmit,
90
- onLogin,
91
- onTopBackBtnPress,
92
- containerStyle,
93
- titleStyle,
94
- formStyle,
95
- inputStyle,
96
- inputContainerStyle,
97
- topBackBtnStyle,
98
- minPasswordLength = 6,
99
- loadingSubmitBtn,
100
- backgroundImage,
101
- logoUri,
102
- theme: overrideTheme,
103
- text,
104
- loginTextProps,
105
- loginLinkTextProps,
106
- renderLogo,
107
- renderSingUpHeader,
108
- renderLoginPrompt,
109
- renderSubmitButton,
110
- renderTopBackBtn,
111
- }) => {
112
- const {
113
- control,
114
- handleSubmit,
115
- formState: { errors, isValid, touchedFields },
116
- getValues,
117
- } = useForm<FormValues>({
118
- defaultValues: {
119
- username: '',
120
- email: '',
121
- password: '',
122
- confirmPassword: '',
123
- },
124
- mode: 'onChange',
125
- });
126
- const { theme: resolvedTheme } = useInternalTheme(overrideTheme);
127
- const { isKeyboardOpen } = useKeyboard();
128
- const [isLoading, setIsLoading] = React.useState(false);
129
-
130
- const handleFormSubmit = useCallback(
131
- async (data: FormValues) => {
132
- if (!onSubmit) return;
133
- setIsLoading(true);
134
- try {
135
- await onSubmit(data);
136
- } catch (error) {
137
- console.error('Form submission error:', error);
138
- } finally {
139
- setIsLoading(false);
140
- }
141
- },
142
- [onSubmit]
143
- );
144
-
145
- const shouldRender = useMemo(
146
- () =>
147
- (condition?: boolean | unknown): boolean =>
148
- typeof condition === 'function' || !!condition,
149
- []
150
- );
151
-
152
- // Memoize gradient split background
153
- const gradientSplitBackground = useMemo(
154
- () => (isKeyboardOpen ? (Platform.OS === 'ios' ? 0.19 : 0.14) : 0.3),
155
- [isKeyboardOpen]
156
- );
157
-
158
- // Memoize disabled state
159
- const isDisabled = useMemo(
160
- () => loadingSubmitBtn || isLoading,
161
- [loadingSubmitBtn, isLoading]
162
- );
163
-
164
- return (
165
- <BackgroundLayout
166
- theme={overrideTheme}
167
- backgroundImage={backgroundImage?.source}
168
- gradientSplitBackground={gradientSplitBackground}
169
- >
170
- <SafeAreaView style={styles.safeArea}>
171
- <View style={[styles.container, containerStyle]}>
172
- {/* Top Back Button */}
173
- {shouldRender(renderTopBackBtn || onTopBackBtnPress) && (
174
- <View style={styles.topBackBtnWrapper}>
175
- {renderTopBackBtn ? (
176
- renderTopBackBtn({
177
- onPress: onTopBackBtnPress ?? (() => {}),
178
- })
179
- ) : (
180
- <BackBtn
181
- theme={overrideTheme}
182
- style={topBackBtnStyle}
183
- onPress={onTopBackBtnPress}
184
- />
185
- )}
186
- </View>
187
- )}
188
- <HideKeyboard keyboardVerticalOffset={scale(-50)}>
189
- <View style={styles.centerContent}>
190
- {/* Logo */}
191
- {renderLogo ? (
192
- renderLogo()
193
- ) : logoUri ? (
194
- <Logo logoUri={logoUri} width={100} height={100} />
195
- ) : null}
196
-
197
- {/* Title */}
198
- {renderSingUpHeader ? (
199
- renderSingUpHeader()
200
- ) : (
201
- <Text style={[styles.title, titleStyle]}>{title}</Text>
202
- )}
203
-
204
- {/* Form */}
205
- <View style={[styles.form, formStyle]}>
206
- {/* Username */}
207
- <Controller
208
- control={control}
209
- name="username"
210
- rules={{
211
- required: 'Username is required',
212
- minLength: { value: 3, message: 'At least 3 characters' },
213
- }}
214
- render={({ field: { onChange, onBlur, value } }) => (
215
- <Input.One
216
- placeholder={text?.usernamePlaceholder || 'Username'}
217
- label={text?.usernameLabel || 'Username'}
218
- value={value}
219
- onChangeText={onChange}
220
- onBlur={onBlur}
221
- disabled={isDisabled}
222
- error={!!touchedFields.username && !!errors.username}
223
- errorMessage={errors.username?.message}
224
- inputStyle={inputStyle}
225
- containerStyle={inputContainerStyle}
226
- theme={overrideTheme}
227
- />
228
- )}
229
- />
230
-
231
- {/* Email */}
232
- <Controller
233
- control={control}
234
- name="email"
235
- rules={{
236
- required: 'Email is required',
237
- pattern: {
238
- value: /^\S+@\S+\.\S+$/,
239
- message: 'Enter a valid email address',
240
- },
241
- }}
242
- render={({ field: { onChange, onBlur, value } }) => (
243
- <Input.One
244
- placeholder={text?.emailPlaceholder || 'Email'}
245
- label={text?.emailLabel || 'Email'}
246
- value={value}
247
- onChangeText={(inputText) => {
248
- const sanitized = inputText.replace(
249
- /[^\w@.\-+]/g,
250
- ''
251
- );
252
- onChange(sanitized);
253
- }}
254
- onBlur={onBlur}
255
- disabled={isDisabled}
256
- error={!!touchedFields.email && !!errors.email}
257
- errorMessage={errors.email?.message}
258
- inputStyle={inputStyle}
259
- containerStyle={inputContainerStyle}
260
- theme={overrideTheme}
261
- textContentType="emailAddress"
262
- autoCapitalize="none"
263
- keyboardType="email-address"
264
- autoCorrect={false}
265
- />
266
- )}
267
- />
268
-
269
- {/* Password */}
270
- <Controller
271
- control={control}
272
- name="password"
273
- rules={{
274
- required: 'Password is required',
275
- minLength: {
276
- value: minPasswordLength,
277
- message: `Minimum ${minPasswordLength} characters`,
278
- },
279
- }}
280
- render={({ field: { onChange, onBlur, value } }) => (
281
- <Input.One
282
- placeholder={text?.passwordPlaceholder || 'Password'}
283
- label={text?.passwordLabel || 'Password'}
284
- value={value}
285
- secureTextEntry
286
- onChangeText={(inputText) => {
287
- const sanitized = inputText.replace(
288
- /[^\w@.\-+]/g,
289
- ''
290
- );
291
- onChange(sanitized);
292
- }}
293
- onBlur={onBlur}
294
- disabled={isDisabled}
295
- inputStyle={inputStyle}
296
- error={!!touchedFields.password && !!errors.password}
297
- errorMessage={errors.password?.message}
298
- containerStyle={inputContainerStyle}
299
- textContentType="none"
300
- autoCapitalize="none"
301
- spellCheck={false}
302
- autoCorrect={false}
303
- autoComplete="off"
304
- theme={overrideTheme}
305
- />
306
- )}
307
- />
308
-
309
- {/* Confirm Password */}
310
- <Controller
311
- control={control}
312
- name="confirmPassword"
313
- rules={{
314
- required: 'Confirm password is required',
315
- validate: (value) =>
316
- value === getValues('password') ||
317
- 'Passwords do not match',
318
- }}
319
- render={({ field: { onChange, onBlur, value } }) => (
320
- <Input.One
321
- placeholder={
322
- text?.confirmPasswordPlaceholder || 'Confirm Password'
323
- }
324
- label={text?.confirmPasswordLabel || 'Confirm Password'}
325
- value={value}
326
- secureTextEntry
327
- onChangeText={(inputText) => {
328
- const sanitized = inputText.replace(
329
- /[^\w@.\-+]/g,
330
- ''
331
- );
332
- onChange(sanitized);
333
- }}
334
- onBlur={onBlur}
335
- error={
336
- !!touchedFields.confirmPassword &&
337
- !!errors.confirmPassword
338
- }
339
- disabled={isDisabled}
340
- errorMessage={errors.confirmPassword?.message}
341
- inputStyle={inputStyle}
342
- containerStyle={inputContainerStyle}
343
- theme={overrideTheme}
344
- textContentType="none"
345
- autoCapitalize="none"
346
- spellCheck={false}
347
- autoCorrect={false}
348
- autoComplete="off"
349
- />
350
- )}
351
- />
352
-
353
- {/* Submit Button */}
354
- {!isKeyboardOpen &&
355
- (renderSubmitButton ? (
356
- renderSubmitButton({
357
- onPress: handleSubmit(handleFormSubmit),
358
- disabled: !isValid || isDisabled,
359
- loading: isDisabled,
360
- })
361
- ) : (
362
- <Button.Primary
363
- title={text?.signupButton || 'Sign up'}
364
- disabled={!isValid || isDisabled}
365
- theme={overrideTheme}
366
- loading={isDisabled}
367
- loadingText={
368
- text?.loadingSubmitBtnText || 'Signing up...'
369
- }
370
- onPress={handleSubmit(handleFormSubmit)}
371
- />
372
- ))}
373
- </View>
374
- </View>
375
-
376
- {/* Login Prompt */}
377
- {!isKeyboardOpen &&
378
- shouldRender(renderLoginPrompt || onLogin) &&
379
- (renderLoginPrompt ? (
380
- renderLoginPrompt()
381
- ) : (
382
- <View
383
- style={[
384
- styles.loginContainerWrapper,
385
- {
386
- bottom: getResponsiveBottomSpacing(35),
387
- },
388
- ]}
389
- >
390
- <View style={styles.loginContainer}>
391
- <View style={styles.loginRow}>
392
- <Text
393
- style={[styles.loginPrompt, loginTextProps]}
394
- color={resolvedTheme?.colors?.textPrimary}
395
- >
396
- {text?.loginPrompt || `Already have an account?`}
397
- </Text>
398
- <TextButton
399
- title={text?.loginLink || 'Login'}
400
- onPress={() => {
401
- Keyboard.dismiss();
402
- requestAnimationFrame(() => {
403
- onLogin?.();
404
- });
405
- }}
406
- bold
407
- underline
408
- color={resolvedTheme?.colors?.button}
409
- style={loginLinkTextProps}
410
- />
411
- </View>
412
- </View>
413
- </View>
414
- ))}
415
- </HideKeyboard>
416
- </View>
417
- </SafeAreaView>
418
- </BackgroundLayout>
419
- );
420
- }
421
- );
422
-
423
- export default Signup;
424
-
425
- const styles = StyleSheet.create({
426
- safeArea: {
427
- flex: 1,
428
- width: '100%',
429
- paddingBottom: verticalScale(12),
430
- },
431
- container: {
432
- flex: 1,
433
- width: '100%',
434
- paddingHorizontal: scale(16),
435
- justifyContent: 'center',
436
- alignItems: 'center',
437
- },
438
- topBackBtnWrapper: {
439
- position: 'absolute',
440
- top: verticalScale(6),
441
- left: 0,
442
- zIndex: 10,
443
- },
444
- centerContent: {
445
- flex: 1,
446
- width: '100%',
447
- alignItems: 'center',
448
- justifyContent: 'center',
449
- },
450
- title: {
451
- fontSize: RFValue(21),
452
- fontWeight: '700',
453
- marginTop: verticalScale(5),
454
- marginBottom: verticalScale(20),
455
- },
456
- form: {
457
- width: '100%',
458
- gap: verticalScale(6),
459
- },
460
- loginContainerWrapper: {
461
- position: 'absolute',
462
- left: 0,
463
- right: 0,
464
- alignItems: 'center',
465
- },
466
- loginRow: {
467
- flexDirection: 'row',
468
- alignItems: 'center',
469
- justifyContent: 'center',
470
- flexWrap: 'wrap',
471
- },
472
- loginPrompt: {
473
- textAlign: 'center',
474
- marginRight: 4,
475
- },
476
- loginContainer: {
477
- alignItems: 'center',
478
- },
479
- });