@zezosoft/zezo-ott-react-native-ui-kit 1.1.1 → 1.1.3

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 (437) hide show
  1. package/lib/module/Styles/globalStyles.js +0 -5
  2. package/lib/module/Styles/globalStyles.js.map +1 -1
  3. package/lib/module/components/Auth/AuthProvider/AuthProvider.js +64 -40
  4. package/lib/module/components/Auth/AuthProvider/AuthProvider.js.map +1 -1
  5. package/lib/module/components/Auth/ForgotPassword/ForgotPassword.js +5 -2
  6. package/lib/module/components/Auth/ForgotPassword/ForgotPassword.js.map +1 -1
  7. package/lib/module/components/Auth/Login/LoginWithEmail.js +17 -11
  8. package/lib/module/components/Auth/Login/LoginWithEmail.js.map +1 -1
  9. package/lib/module/components/Auth/Login/LoginWithPhone.js +12 -6
  10. package/lib/module/components/Auth/Login/LoginWithPhone.js.map +1 -1
  11. package/lib/module/components/Auth/OTP/OTP.js +7 -4
  12. package/lib/module/components/Auth/OTP/OTP.js.map +1 -1
  13. package/lib/module/components/Auth/QrLogin/QrLogin.js +357 -144
  14. package/lib/module/components/Auth/QrLogin/QrLogin.js.map +1 -1
  15. package/lib/module/components/Auth/QrLogin/components/QrViewArea.js +227 -110
  16. package/lib/module/components/Auth/QrLogin/components/QrViewArea.js.map +1 -1
  17. package/lib/module/components/Auth/SignUp/SignUp.js +19 -13
  18. package/lib/module/components/Auth/SignUp/SignUp.js.map +1 -1
  19. package/lib/module/components/Auth/SplashScreen/SplashScreen.js +54 -36
  20. package/lib/module/components/Auth/SplashScreen/SplashScreen.js.map +1 -1
  21. package/lib/module/components/Auth/SplashScreen/components/SplashImage/SplashImage.js +29 -11
  22. package/lib/module/components/Auth/SplashScreen/components/SplashImage/SplashImage.js.map +1 -1
  23. package/lib/module/components/Auth/SplashScreen/components/SplashLottie/SplashLottie.js +13 -7
  24. package/lib/module/components/Auth/SplashScreen/components/SplashLottie/SplashLottie.js.map +1 -1
  25. package/lib/module/components/Auth/SplashScreen/components/SplashVideo/SplashVideo.js +33 -21
  26. package/lib/module/components/Auth/SplashScreen/components/SplashVideo/SplashVideo.js.map +1 -1
  27. package/lib/module/components/BackgroundLayout/BackgroundLayout.js +26 -20
  28. package/lib/module/components/BackgroundLayout/BackgroundLayout.js.map +1 -1
  29. package/lib/module/components/BlogView/BlogView.js +36 -20
  30. package/lib/module/components/BlogView/BlogView.js.map +1 -1
  31. package/lib/module/components/Button/BackBtn.js +24 -20
  32. package/lib/module/components/Button/BackBtn.js.map +1 -1
  33. package/lib/module/components/Button/PrimaryBtn.js +19 -13
  34. package/lib/module/components/Button/PrimaryBtn.js.map +1 -1
  35. package/lib/module/components/Button/SecondaryBtn.js +19 -13
  36. package/lib/module/components/Button/SecondaryBtn.js.map +1 -1
  37. package/lib/module/components/Button/TextButton.js +19 -13
  38. package/lib/module/components/Button/TextButton.js.map +1 -1
  39. package/lib/module/components/Content/Card/Category/Category.js +151 -46
  40. package/lib/module/components/Content/Card/Category/Category.js.map +1 -1
  41. package/lib/module/components/Content/Card/NowWatching/NowWatching.js +237 -108
  42. package/lib/module/components/Content/Card/NowWatching/NowWatching.js.map +1 -1
  43. package/lib/module/components/Content/Card/Sliders/Styles/One.js +200 -133
  44. package/lib/module/components/Content/Card/Sliders/Styles/One.js.map +1 -1
  45. package/lib/module/components/Content/Card/Sliders/Styles/Two.js +192 -84
  46. package/lib/module/components/Content/Card/Sliders/Styles/Two.js.map +1 -1
  47. package/lib/module/components/Content/Card/Styles/Five.js +131 -48
  48. package/lib/module/components/Content/Card/Styles/Five.js.map +1 -1
  49. package/lib/module/components/Content/Card/Styles/Four.js +126 -59
  50. package/lib/module/components/Content/Card/Styles/Four.js.map +1 -1
  51. package/lib/module/components/Content/Card/Styles/One.js +125 -50
  52. package/lib/module/components/Content/Card/Styles/One.js.map +1 -1
  53. package/lib/module/components/Content/Card/Styles/RotateInOut.js +143 -65
  54. package/lib/module/components/Content/Card/Styles/RotateInOut.js.map +1 -1
  55. package/lib/module/components/Content/Card/Styles/Six.js +207 -115
  56. package/lib/module/components/Content/Card/Styles/Six.js.map +1 -1
  57. package/lib/module/components/Content/Card/Styles/Three.js +134 -79
  58. package/lib/module/components/Content/Card/Styles/Three.js.map +1 -1
  59. package/lib/module/components/Content/Card/Styles/TopTen.js +186 -171
  60. package/lib/module/components/Content/Card/Styles/TopTen.js.map +1 -1
  61. package/lib/module/components/Content/Card/Styles/Two.js +144 -64
  62. package/lib/module/components/Content/Card/Styles/Two.js.map +1 -1
  63. package/lib/module/components/Content/Card/components/AdsPoster.js +162 -0
  64. package/lib/module/components/Content/Card/components/AdsPoster.js.map +1 -0
  65. package/lib/module/components/Content/Card/components/CardPoster.js +139 -93
  66. package/lib/module/components/Content/Card/components/CardPoster.js.map +1 -1
  67. package/lib/module/components/Content/Card/components/RentOrBuyIcon.js +18 -17
  68. package/lib/module/components/Content/Card/components/RentOrBuyIcon.js.map +1 -1
  69. package/lib/module/components/Content/Card/components/ThumbnailCard.js +78 -28
  70. package/lib/module/components/Content/Card/components/ThumbnailCard.js.map +1 -1
  71. package/lib/module/components/Content/Card/components/index.js +4 -0
  72. package/lib/module/components/Content/Card/components/index.js.map +1 -0
  73. package/lib/module/components/Content/Content.js +99 -40
  74. package/lib/module/components/Content/Content.js.map +1 -1
  75. package/lib/module/components/Content/Sections.js +63 -34
  76. package/lib/module/components/Content/Sections.js.map +1 -1
  77. package/lib/module/components/ContentView/ContentView.js +70 -41
  78. package/lib/module/components/ContentView/ContentView.js.map +1 -1
  79. package/lib/module/components/ContentView/MoreContentList.js +74 -40
  80. package/lib/module/components/ContentView/MoreContentList.js.map +1 -1
  81. package/lib/module/components/ContentView/components/AboutSection.js +40 -19
  82. package/lib/module/components/ContentView/components/AboutSection.js.map +1 -1
  83. package/lib/module/components/ContentView/components/CastCard.js +6 -7
  84. package/lib/module/components/ContentView/components/CastCard.js.map +1 -1
  85. package/lib/module/components/ContentView/components/EpisodeCard.js +2 -2
  86. package/lib/module/components/ContentView/components/EpisodeCard.js.map +1 -1
  87. package/lib/module/components/ContentView/components/GenreTags.js +25 -13
  88. package/lib/module/components/ContentView/components/GenreTags.js.map +1 -1
  89. package/lib/module/components/ContentView/components/HeroBanner.js +39 -11
  90. package/lib/module/components/ContentView/components/HeroBanner.js.map +1 -1
  91. package/lib/module/components/ContentView/components/MiniInfo.js +84 -77
  92. package/lib/module/components/ContentView/components/MiniInfo.js.map +1 -1
  93. package/lib/module/components/ContentView/components/PlayButton.js +11 -7
  94. package/lib/module/components/ContentView/components/PlayButton.js.map +1 -1
  95. package/lib/module/components/ContentView/components/Title.js +12 -12
  96. package/lib/module/components/ContentView/components/Title.js.map +1 -1
  97. package/lib/module/components/ContentView/components/TrailerButton.js +12 -7
  98. package/lib/module/components/ContentView/components/TrailerButton.js.map +1 -1
  99. package/lib/module/components/Fallbacks/NoContentFallback.js +27 -22
  100. package/lib/module/components/Fallbacks/NoContentFallback.js.map +1 -1
  101. package/lib/module/components/Fallbacks/NotFoundFallback.js +6 -4
  102. package/lib/module/components/Fallbacks/NotFoundFallback.js.map +1 -1
  103. package/lib/module/components/Headers/AppHeader.js +22 -13
  104. package/lib/module/components/Headers/AppHeader.js.map +1 -1
  105. package/lib/module/components/Headers/Three.js +6 -5
  106. package/lib/module/components/Headers/Three.js.map +1 -1
  107. package/lib/module/components/Headers/Two.js +19 -14
  108. package/lib/module/components/Headers/Two.js.map +1 -1
  109. package/lib/module/components/Input/InputOne.js +46 -31
  110. package/lib/module/components/Input/InputOne.js.map +1 -1
  111. package/lib/module/components/Loader/Loader.js +2 -2
  112. package/lib/module/components/Loader/Loader.js.map +1 -1
  113. package/lib/module/components/Logo/Logo.js +17 -14
  114. package/lib/module/components/Logo/Logo.js.map +1 -1
  115. package/lib/module/components/Search/One.js +2 -1
  116. package/lib/module/components/Search/One.js.map +1 -1
  117. package/lib/module/components/Search/components/SearchCard.js +15 -19
  118. package/lib/module/components/Search/components/SearchCard.js.map +1 -1
  119. package/lib/module/components/Settings/AppSettings.js +97 -62
  120. package/lib/module/components/Settings/AppSettings.js.map +1 -1
  121. package/lib/module/components/Subscription/SubOne.js +313 -254
  122. package/lib/module/components/Subscription/SubOne.js.map +1 -1
  123. package/lib/module/components/Text/Text.js +15 -12
  124. package/lib/module/components/Text/Text.js.map +1 -1
  125. package/lib/module/components/User/DeviceSessions/DeviceSessions.js +25 -23
  126. package/lib/module/components/User/DeviceSessions/DeviceSessions.js.map +1 -1
  127. package/lib/module/components/User/ProfileUpdate/ProfileUpdate.js +23 -18
  128. package/lib/module/components/User/ProfileUpdate/ProfileUpdate.js.map +1 -1
  129. package/lib/module/components/User/PurchaseHistory/PurchaseHistory.js +38 -24
  130. package/lib/module/components/User/PurchaseHistory/PurchaseHistory.js.map +1 -1
  131. package/lib/module/components/User/WatchHistory/WatchHistory.js +21 -14
  132. package/lib/module/components/User/WatchHistory/WatchHistory.js.map +1 -1
  133. package/lib/module/components/User/WatchLater/WatchLater.js +30 -21
  134. package/lib/module/components/User/WatchLater/WatchLater.js.map +1 -1
  135. package/lib/module/components/User/components/UserAvatar.js +38 -19
  136. package/lib/module/components/User/components/UserAvatar.js.map +1 -1
  137. package/lib/module/components/User/components/UserSection.js +37 -17
  138. package/lib/module/components/User/components/UserSection.js.map +1 -1
  139. package/lib/module/components/View/View.js +7 -4
  140. package/lib/module/components/View/View.js.map +1 -1
  141. package/lib/module/components/index.js +0 -1
  142. package/lib/module/components/index.js.map +1 -1
  143. package/lib/module/constants/dummySections.js +44 -4
  144. package/lib/module/constants/dummySections.js.map +1 -1
  145. package/lib/module/hooks/Images/index.js +5 -0
  146. package/lib/module/hooks/Images/index.js.map +1 -0
  147. package/lib/module/hooks/Images/useImageLoader.js +168 -0
  148. package/lib/module/hooks/Images/useImageLoader.js.map +1 -0
  149. package/lib/module/hooks/Images/useImageValidation.js +36 -0
  150. package/lib/module/hooks/Images/useImageValidation.js.map +1 -0
  151. package/lib/module/hooks/index.js +20 -0
  152. package/lib/module/hooks/index.js.map +1 -0
  153. package/lib/module/hooks/useAdTracking.js +270 -0
  154. package/lib/module/hooks/useAdTracking.js.map +1 -0
  155. package/lib/module/hooks/useCards.js +164 -0
  156. package/lib/module/hooks/useCards.js.map +1 -0
  157. package/lib/module/hooks/useDebounce.js +25 -6
  158. package/lib/module/hooks/useDebounce.js.map +1 -1
  159. package/lib/module/hooks/useKeyboard.js +7 -4
  160. package/lib/module/hooks/useKeyboard.js.map +1 -1
  161. package/lib/module/hooks/useNavigationMode.js +10 -4
  162. package/lib/module/hooks/useNavigationMode.js.map +1 -1
  163. package/lib/module/hooks/usePaginatedSection.js +12 -7
  164. package/lib/module/hooks/usePaginatedSection.js.map +1 -1
  165. package/lib/module/hooks/usePrevious.js +30 -0
  166. package/lib/module/hooks/usePrevious.js.map +1 -0
  167. package/lib/module/hooks/useSafeCallback.js +33 -0
  168. package/lib/module/hooks/useSafeCallback.js.map +1 -0
  169. package/lib/module/hooks/useSkeletonItems.js +33 -0
  170. package/lib/module/hooks/useSkeletonItems.js.map +1 -0
  171. package/lib/module/hooks/useSplashCache.js +2 -1
  172. package/lib/module/hooks/useSplashCache.js.map +1 -1
  173. package/lib/module/hooks/useThemeColors.js +33 -0
  174. package/lib/module/hooks/useThemeColors.js.map +1 -0
  175. package/lib/module/theme/ThemeProvider.js +17 -11
  176. package/lib/module/theme/ThemeProvider.js.map +1 -1
  177. package/lib/module/theme/hook/useInternalTheme.js +18 -11
  178. package/lib/module/theme/hook/useInternalTheme.js.map +1 -1
  179. package/lib/module/theme/hook/useThemeStatusBar.js +10 -4
  180. package/lib/module/theme/hook/useThemeStatusBar.js.map +1 -1
  181. package/lib/typescript/src/Styles/globalStyles.d.ts +0 -5
  182. package/lib/typescript/src/Styles/globalStyles.d.ts.map +1 -1
  183. package/lib/typescript/src/components/Auth/AuthProvider/AuthProvider.d.ts.map +1 -1
  184. package/lib/typescript/src/components/Auth/ForgotPassword/ForgotPassword.d.ts.map +1 -1
  185. package/lib/typescript/src/components/Auth/Login/LoginWithEmail.d.ts.map +1 -1
  186. package/lib/typescript/src/components/Auth/Login/LoginWithPhone.d.ts.map +1 -1
  187. package/lib/typescript/src/components/Auth/OTP/OTP.d.ts.map +1 -1
  188. package/lib/typescript/src/components/Auth/QrLogin/QrLogin.d.ts +2 -15
  189. package/lib/typescript/src/components/Auth/QrLogin/QrLogin.d.ts.map +1 -1
  190. package/lib/typescript/src/components/Auth/QrLogin/components/QrViewArea.d.ts +0 -1
  191. package/lib/typescript/src/components/Auth/QrLogin/components/QrViewArea.d.ts.map +1 -1
  192. package/lib/typescript/src/components/Auth/SignUp/SignUp.d.ts.map +1 -1
  193. package/lib/typescript/src/components/Auth/SplashScreen/SplashScreen.d.ts.map +1 -1
  194. package/lib/typescript/src/components/Auth/SplashScreen/components/SplashImage/SplashImage.d.ts.map +1 -1
  195. package/lib/typescript/src/components/Auth/SplashScreen/components/SplashLottie/SplashLottie.d.ts.map +1 -1
  196. package/lib/typescript/src/components/Auth/SplashScreen/components/SplashVideo/SplashVideo.d.ts.map +1 -1
  197. package/lib/typescript/src/components/Auth/index.d.ts.map +1 -1
  198. package/lib/typescript/src/components/BackgroundLayout/BackgroundLayout.d.ts +1 -1
  199. package/lib/typescript/src/components/BackgroundLayout/BackgroundLayout.d.ts.map +1 -1
  200. package/lib/typescript/src/components/BlogView/BlogView.d.ts +2 -1
  201. package/lib/typescript/src/components/BlogView/BlogView.d.ts.map +1 -1
  202. package/lib/typescript/src/components/Button/BackBtn.d.ts +2 -2
  203. package/lib/typescript/src/components/Button/BackBtn.d.ts.map +1 -1
  204. package/lib/typescript/src/components/Button/PrimaryBtn.d.ts +2 -1
  205. package/lib/typescript/src/components/Button/PrimaryBtn.d.ts.map +1 -1
  206. package/lib/typescript/src/components/Button/SecondaryBtn.d.ts +2 -1
  207. package/lib/typescript/src/components/Button/SecondaryBtn.d.ts.map +1 -1
  208. package/lib/typescript/src/components/Button/TextButton.d.ts +2 -2
  209. package/lib/typescript/src/components/Button/TextButton.d.ts.map +1 -1
  210. package/lib/typescript/src/components/Button/index.d.ts +2 -2
  211. package/lib/typescript/src/components/Content/Card/Category/Category.d.ts.map +1 -1
  212. package/lib/typescript/src/components/Content/Card/NowWatching/NowWatching.d.ts.map +1 -1
  213. package/lib/typescript/src/components/Content/Card/Sliders/Styles/One.d.ts.map +1 -1
  214. package/lib/typescript/src/components/Content/Card/Sliders/Styles/Two.d.ts.map +1 -1
  215. package/lib/typescript/src/components/Content/Card/Styles/Five.d.ts +13 -1
  216. package/lib/typescript/src/components/Content/Card/Styles/Five.d.ts.map +1 -1
  217. package/lib/typescript/src/components/Content/Card/Styles/Four.d.ts +13 -1
  218. package/lib/typescript/src/components/Content/Card/Styles/Four.d.ts.map +1 -1
  219. package/lib/typescript/src/components/Content/Card/Styles/One.d.ts +15 -3
  220. package/lib/typescript/src/components/Content/Card/Styles/One.d.ts.map +1 -1
  221. package/lib/typescript/src/components/Content/Card/Styles/RotateInOut.d.ts +13 -1
  222. package/lib/typescript/src/components/Content/Card/Styles/RotateInOut.d.ts.map +1 -1
  223. package/lib/typescript/src/components/Content/Card/Styles/Six.d.ts +1 -0
  224. package/lib/typescript/src/components/Content/Card/Styles/Six.d.ts.map +1 -1
  225. package/lib/typescript/src/components/Content/Card/Styles/Three.d.ts +13 -5
  226. package/lib/typescript/src/components/Content/Card/Styles/Three.d.ts.map +1 -1
  227. package/lib/typescript/src/components/Content/Card/Styles/TopTen.d.ts +1 -0
  228. package/lib/typescript/src/components/Content/Card/Styles/TopTen.d.ts.map +1 -1
  229. package/lib/typescript/src/components/Content/Card/Styles/Two.d.ts +13 -1
  230. package/lib/typescript/src/components/Content/Card/Styles/Two.d.ts.map +1 -1
  231. package/lib/typescript/src/components/Content/Card/components/AdsPoster.d.ts +26 -0
  232. package/lib/typescript/src/components/Content/Card/components/AdsPoster.d.ts.map +1 -0
  233. package/lib/typescript/src/components/Content/Card/components/CardPoster.d.ts +3 -1
  234. package/lib/typescript/src/components/Content/Card/components/CardPoster.d.ts.map +1 -1
  235. package/lib/typescript/src/components/Content/Card/components/RentOrBuyIcon.d.ts +2 -2
  236. package/lib/typescript/src/components/Content/Card/components/RentOrBuyIcon.d.ts.map +1 -1
  237. package/lib/typescript/src/components/Content/Card/components/ThumbnailCard.d.ts +2 -0
  238. package/lib/typescript/src/components/Content/Card/components/ThumbnailCard.d.ts.map +1 -1
  239. package/lib/typescript/src/components/Content/Card/components/index.d.ts +2 -0
  240. package/lib/typescript/src/components/Content/Card/components/index.d.ts.map +1 -0
  241. package/lib/typescript/src/components/Content/Card/index.d.ts +76 -6
  242. package/lib/typescript/src/components/Content/Card/index.d.ts.map +1 -1
  243. package/lib/typescript/src/components/Content/Content.d.ts +6 -3
  244. package/lib/typescript/src/components/Content/Content.d.ts.map +1 -1
  245. package/lib/typescript/src/components/Content/Sections.d.ts +22 -8
  246. package/lib/typescript/src/components/Content/Sections.d.ts.map +1 -1
  247. package/lib/typescript/src/components/ContentView/ContentView.d.ts +6 -1
  248. package/lib/typescript/src/components/ContentView/ContentView.d.ts.map +1 -1
  249. package/lib/typescript/src/components/ContentView/MoreContentList.d.ts.map +1 -1
  250. package/lib/typescript/src/components/ContentView/components/AboutSection.d.ts +2 -1
  251. package/lib/typescript/src/components/ContentView/components/AboutSection.d.ts.map +1 -1
  252. package/lib/typescript/src/components/ContentView/components/CastCard.d.ts +6 -1
  253. package/lib/typescript/src/components/ContentView/components/CastCard.d.ts.map +1 -1
  254. package/lib/typescript/src/components/ContentView/components/EpisodeCard.d.ts +2 -1
  255. package/lib/typescript/src/components/ContentView/components/EpisodeCard.d.ts.map +1 -1
  256. package/lib/typescript/src/components/ContentView/components/GenreTags.d.ts +1 -1
  257. package/lib/typescript/src/components/ContentView/components/GenreTags.d.ts.map +1 -1
  258. package/lib/typescript/src/components/ContentView/components/HeroBanner.d.ts +2 -1
  259. package/lib/typescript/src/components/ContentView/components/HeroBanner.d.ts.map +1 -1
  260. package/lib/typescript/src/components/ContentView/components/MiniInfo.d.ts +1 -1
  261. package/lib/typescript/src/components/ContentView/components/MiniInfo.d.ts.map +1 -1
  262. package/lib/typescript/src/components/ContentView/components/PlayButton.d.ts +2 -1
  263. package/lib/typescript/src/components/ContentView/components/PlayButton.d.ts.map +1 -1
  264. package/lib/typescript/src/components/ContentView/components/Title.d.ts +1 -1
  265. package/lib/typescript/src/components/ContentView/components/Title.d.ts.map +1 -1
  266. package/lib/typescript/src/components/ContentView/components/TrailerButton.d.ts +2 -1
  267. package/lib/typescript/src/components/ContentView/components/TrailerButton.d.ts.map +1 -1
  268. package/lib/typescript/src/components/Fallbacks/NoContentFallback.d.ts +2 -1
  269. package/lib/typescript/src/components/Fallbacks/NoContentFallback.d.ts.map +1 -1
  270. package/lib/typescript/src/components/Fallbacks/NotFoundFallback.d.ts +1 -1
  271. package/lib/typescript/src/components/Fallbacks/NotFoundFallback.d.ts.map +1 -1
  272. package/lib/typescript/src/components/Headers/AppHeader.d.ts +2 -2
  273. package/lib/typescript/src/components/Headers/AppHeader.d.ts.map +1 -1
  274. package/lib/typescript/src/components/Headers/Three.d.ts +2 -2
  275. package/lib/typescript/src/components/Headers/Three.d.ts.map +1 -1
  276. package/lib/typescript/src/components/Headers/Two.d.ts +2 -2
  277. package/lib/typescript/src/components/Headers/Two.d.ts.map +1 -1
  278. package/lib/typescript/src/components/Headers/index.d.ts +2 -2
  279. package/lib/typescript/src/components/Input/Input.d.ts +1 -1
  280. package/lib/typescript/src/components/Input/InputOne.d.ts +2 -2
  281. package/lib/typescript/src/components/Input/InputOne.d.ts.map +1 -1
  282. package/lib/typescript/src/components/Loader/Loader.d.ts.map +1 -1
  283. package/lib/typescript/src/components/Logo/Logo.d.ts +2 -1
  284. package/lib/typescript/src/components/Logo/Logo.d.ts.map +1 -1
  285. package/lib/typescript/src/components/Search/One.d.ts.map +1 -1
  286. package/lib/typescript/src/components/Search/components/SearchCard.d.ts +2 -5
  287. package/lib/typescript/src/components/Search/components/SearchCard.d.ts.map +1 -1
  288. package/lib/typescript/src/components/Search/index.d.ts +1 -1
  289. package/lib/typescript/src/components/Settings/AppSettings.d.ts +2 -2
  290. package/lib/typescript/src/components/Settings/AppSettings.d.ts.map +1 -1
  291. package/lib/typescript/src/components/Subscription/SubOne.d.ts.map +1 -1
  292. package/lib/typescript/src/components/Subscription/index.d.ts.map +1 -1
  293. package/lib/typescript/src/components/Text/Text.d.ts +2 -2
  294. package/lib/typescript/src/components/Text/Text.d.ts.map +1 -1
  295. package/lib/typescript/src/components/User/DeviceSessions/DeviceSessions.d.ts +1 -1
  296. package/lib/typescript/src/components/User/DeviceSessions/DeviceSessions.d.ts.map +1 -1
  297. package/lib/typescript/src/components/User/ProfileUpdate/ProfileUpdate.d.ts +1 -1
  298. package/lib/typescript/src/components/User/ProfileUpdate/ProfileUpdate.d.ts.map +1 -1
  299. package/lib/typescript/src/components/User/PurchaseHistory/PurchaseHistory.d.ts +1 -1
  300. package/lib/typescript/src/components/User/PurchaseHistory/PurchaseHistory.d.ts.map +1 -1
  301. package/lib/typescript/src/components/User/WatchHistory/WatchHistory.d.ts +1 -1
  302. package/lib/typescript/src/components/User/WatchHistory/WatchHistory.d.ts.map +1 -1
  303. package/lib/typescript/src/components/User/WatchLater/WatchLater.d.ts +1 -1
  304. package/lib/typescript/src/components/User/WatchLater/WatchLater.d.ts.map +1 -1
  305. package/lib/typescript/src/components/User/components/UserAvatar.d.ts +1 -1
  306. package/lib/typescript/src/components/User/components/UserAvatar.d.ts.map +1 -1
  307. package/lib/typescript/src/components/User/components/UserSection.d.ts +1 -1
  308. package/lib/typescript/src/components/User/components/UserSection.d.ts.map +1 -1
  309. package/lib/typescript/src/components/View/View.d.ts +2 -0
  310. package/lib/typescript/src/components/View/View.d.ts.map +1 -1
  311. package/lib/typescript/src/components/index.d.ts +0 -1
  312. package/lib/typescript/src/components/index.d.ts.map +1 -1
  313. package/lib/typescript/src/constants/dummySections.d.ts +5 -0
  314. package/lib/typescript/src/constants/dummySections.d.ts.map +1 -1
  315. package/lib/typescript/src/hooks/Images/index.d.ts +3 -0
  316. package/lib/typescript/src/hooks/Images/index.d.ts.map +1 -0
  317. package/lib/typescript/src/hooks/Images/useImageLoader.d.ts +36 -0
  318. package/lib/typescript/src/hooks/Images/useImageLoader.d.ts.map +1 -0
  319. package/lib/typescript/src/hooks/Images/useImageValidation.d.ts +17 -0
  320. package/lib/typescript/src/hooks/Images/useImageValidation.d.ts.map +1 -0
  321. package/lib/typescript/src/hooks/index.d.ts +17 -0
  322. package/lib/typescript/src/hooks/index.d.ts.map +1 -0
  323. package/lib/typescript/src/hooks/useAdTracking.d.ts +39 -0
  324. package/lib/typescript/src/hooks/useAdTracking.d.ts.map +1 -0
  325. package/lib/typescript/src/hooks/useCards.d.ts +36 -0
  326. package/lib/typescript/src/hooks/useCards.d.ts.map +1 -0
  327. package/lib/typescript/src/hooks/useDebounce.d.ts.map +1 -1
  328. package/lib/typescript/src/hooks/useKeyboard.d.ts.map +1 -1
  329. package/lib/typescript/src/hooks/useNavigationMode.d.ts.map +1 -1
  330. package/lib/typescript/src/hooks/usePaginatedSection.d.ts +12 -2
  331. package/lib/typescript/src/hooks/usePaginatedSection.d.ts.map +1 -1
  332. package/lib/typescript/src/hooks/usePrevious.d.ts +12 -0
  333. package/lib/typescript/src/hooks/usePrevious.d.ts.map +1 -0
  334. package/lib/typescript/src/hooks/useSafeCallback.d.ts +15 -0
  335. package/lib/typescript/src/hooks/useSafeCallback.d.ts.map +1 -0
  336. package/lib/typescript/src/hooks/useSkeletonItems.d.ts +11 -0
  337. package/lib/typescript/src/hooks/useSkeletonItems.d.ts.map +1 -0
  338. package/lib/typescript/src/hooks/useSplashCache.d.ts.map +1 -1
  339. package/lib/typescript/src/hooks/useThemeColors.d.ts +27 -0
  340. package/lib/typescript/src/hooks/useThemeColors.d.ts.map +1 -0
  341. package/lib/typescript/src/theme/ThemeProvider.d.ts.map +1 -1
  342. package/lib/typescript/src/theme/hook/useInternalTheme.d.ts.map +1 -1
  343. package/lib/typescript/src/theme/hook/useThemeStatusBar.d.ts.map +1 -1
  344. package/lib/typescript/src/types/sections/index.d.ts +7 -4
  345. package/lib/typescript/src/types/sections/index.d.ts.map +1 -1
  346. package/package.json +6 -3
  347. package/src/Styles/globalStyles.ts +0 -5
  348. package/src/components/Auth/AuthProvider/AuthProvider.tsx +288 -212
  349. package/src/components/Auth/ForgotPassword/ForgotPassword.tsx +11 -4
  350. package/src/components/Auth/Login/LoginWithEmail.tsx +266 -238
  351. package/src/components/Auth/Login/LoginWithPhone.tsx +18 -6
  352. package/src/components/Auth/OTP/OTP.tsx +21 -5
  353. package/src/components/Auth/QrLogin/QrLogin.tsx +477 -177
  354. package/src/components/Auth/QrLogin/components/QrViewArea.tsx +349 -139
  355. package/src/components/Auth/SignUp/SignUp.tsx +312 -293
  356. package/src/components/Auth/SplashScreen/SplashScreen.tsx +186 -131
  357. package/src/components/Auth/SplashScreen/components/SplashImage/SplashImage.tsx +32 -15
  358. package/src/components/Auth/SplashScreen/components/SplashLottie/SplashLottie.tsx +11 -5
  359. package/src/components/Auth/SplashScreen/components/SplashVideo/SplashVideo.tsx +34 -18
  360. package/src/components/BackgroundLayout/BackgroundLayout.tsx +43 -37
  361. package/src/components/BlogView/BlogView.tsx +66 -30
  362. package/src/components/Button/BackBtn.tsx +64 -34
  363. package/src/components/Button/PrimaryBtn.tsx +42 -25
  364. package/src/components/Button/SecondaryBtn.tsx +41 -25
  365. package/src/components/Button/TextButton.tsx +54 -32
  366. package/src/components/Content/Card/Category/Category.tsx +189 -64
  367. package/src/components/Content/Card/NowWatching/NowWatching.tsx +281 -136
  368. package/src/components/Content/Card/Sliders/Styles/One.tsx +270 -158
  369. package/src/components/Content/Card/Sliders/Styles/Two.tsx +239 -90
  370. package/src/components/Content/Card/Styles/Five.tsx +161 -62
  371. package/src/components/Content/Card/Styles/Four.tsx +164 -85
  372. package/src/components/Content/Card/Styles/One.tsx +161 -71
  373. package/src/components/Content/Card/Styles/RotateInOut.tsx +162 -67
  374. package/src/components/Content/Card/Styles/Six.tsx +242 -142
  375. package/src/components/Content/Card/Styles/Three.tsx +166 -133
  376. package/src/components/Content/Card/Styles/TopTen.tsx +230 -191
  377. package/src/components/Content/Card/Styles/Two.tsx +182 -79
  378. package/src/components/Content/Card/components/AdsPoster.tsx +202 -0
  379. package/src/components/Content/Card/components/CardPoster.tsx +166 -105
  380. package/src/components/Content/Card/components/RentOrBuyIcon.tsx +58 -38
  381. package/src/components/Content/Card/components/ThumbnailCard.tsx +122 -47
  382. package/src/components/Content/Card/components/index.ts +1 -0
  383. package/src/components/Content/Content.tsx +211 -106
  384. package/src/components/Content/Sections.tsx +148 -51
  385. package/src/components/ContentView/ContentView.tsx +194 -128
  386. package/src/components/ContentView/MoreContentList.tsx +215 -151
  387. package/src/components/ContentView/components/AboutSection.tsx +132 -93
  388. package/src/components/ContentView/components/CastCard.tsx +148 -138
  389. package/src/components/ContentView/components/EpisodeCard.tsx +160 -155
  390. package/src/components/ContentView/components/GenreTags.tsx +68 -53
  391. package/src/components/ContentView/components/HeroBanner.tsx +326 -284
  392. package/src/components/ContentView/components/MiniInfo.tsx +181 -159
  393. package/src/components/ContentView/components/PlayButton.tsx +27 -16
  394. package/src/components/ContentView/components/Title.tsx +89 -72
  395. package/src/components/ContentView/components/TrailerButton.tsx +35 -22
  396. package/src/components/Fallbacks/NoContentFallback.tsx +107 -103
  397. package/src/components/Fallbacks/NotFoundFallback.tsx +12 -4
  398. package/src/components/Headers/AppHeader.tsx +42 -26
  399. package/src/components/Headers/Three.tsx +12 -8
  400. package/src/components/Headers/Two.tsx +31 -10
  401. package/src/components/Input/InputOne.tsx +136 -108
  402. package/src/components/Loader/Loader.tsx +2 -2
  403. package/src/components/Logo/Logo.tsx +43 -27
  404. package/src/components/Search/One.tsx +2 -4
  405. package/src/components/Search/components/SearchCard.tsx +19 -13
  406. package/src/components/Settings/AppSettings.tsx +217 -128
  407. package/src/components/Subscription/SubOne.tsx +394 -317
  408. package/src/components/Text/Text.tsx +33 -22
  409. package/src/components/User/DeviceSessions/DeviceSessions.tsx +129 -102
  410. package/src/components/User/ProfileUpdate/ProfileUpdate.tsx +36 -17
  411. package/src/components/User/PurchaseHistory/PurchaseHistory.tsx +194 -140
  412. package/src/components/User/WatchHistory/WatchHistory.tsx +63 -36
  413. package/src/components/User/WatchLater/WatchLater.tsx +119 -81
  414. package/src/components/User/components/UserAvatar.tsx +49 -15
  415. package/src/components/User/components/UserSection.tsx +71 -37
  416. package/src/components/View/View.tsx +10 -2
  417. package/src/components/index.ts +0 -1
  418. package/src/constants/dummySections.ts +48 -1
  419. package/src/hooks/Images/index.ts +2 -0
  420. package/src/hooks/Images/useImageLoader.ts +206 -0
  421. package/src/hooks/Images/useImageValidation.ts +36 -0
  422. package/src/hooks/index.ts +17 -0
  423. package/src/hooks/useAdTracking.ts +349 -0
  424. package/src/hooks/useCards.ts +228 -0
  425. package/src/hooks/useDebounce.ts +25 -6
  426. package/src/hooks/useKeyboard.ts +12 -5
  427. package/src/hooks/useNavigationMode.ts +16 -5
  428. package/src/hooks/usePaginatedSection.ts +27 -8
  429. package/src/hooks/usePrevious.ts +28 -0
  430. package/src/hooks/useSafeCallback.ts +43 -0
  431. package/src/hooks/useSkeletonItems.ts +30 -0
  432. package/src/hooks/useSplashCache.ts +2 -1
  433. package/src/hooks/useThemeColors.ts +51 -0
  434. package/src/theme/ThemeProvider.tsx +25 -9
  435. package/src/theme/hook/useInternalTheme.ts +19 -13
  436. package/src/theme/hook/useThemeStatusBar.ts +14 -5
  437. package/src/types/sections/index.ts +7 -4
@@ -4,6 +4,7 @@
4
4
  */
5
5
 
6
6
  import React, { memo, useCallback, useMemo, useState } from 'react';
7
+ import { useSkeletonItems } from '../../../../../hooks/useSkeletonItems';
7
8
  import {
8
9
  View,
9
10
  TouchableOpacity,
@@ -22,16 +23,35 @@ import type { ISectionContent } from '../../../../../types';
22
23
  import { useInternalTheme } from '../../../../../theme/hook/useInternalTheme';
23
24
  import { RFValue } from 'react-native-responsive-fontsize';
24
25
  import RentOrBuyIcon from '../../components/RentOrBuyIcon';
26
+ import { ThumbnailCard } from '../../components/ThumbnailCard';
25
27
  import type { ThemeOverride } from '../../../../../theme/themes';
26
28
  import type { IContentData } from '@zezosoft/zezo-ott-api-client';
27
29
 
30
+ // ============================================================================
28
31
  // Constants
32
+ // ============================================================================
29
33
  const DEFAULT_SKELETON_COUNT = 3;
30
34
  const CAROUSEL_WIDTH = Display.fullWidth;
31
35
  const CAROUSEL_HEIGHT = verticalScale(180);
32
36
  const BORDER_RADIUS = scale(10);
37
+ const SCROLL_ANIMATION_DURATION = 1000;
38
+ const AUTO_PLAY_INTERVAL = 2500;
39
+ const PARALLAX_SCROLLING_OFFSET = 48;
40
+ const PARALLAX_SCROLLING_SCALE = 0.9;
41
+ const PAN_GESTURE_ACTIVE_OFFSET_X = [-10, 10];
42
+ const PAN_GESTURE_FAIL_OFFSET_Y = [-5, 5];
43
+ const GRADIENT_OVERLAY_COLORS = ['transparent', 'rgba(0,0,0,0.6)'];
44
+ const INDICATOR_WIDTH_ACTIVE = scale(18);
45
+ const INDICATOR_WIDTH_INACTIVE = scale(8);
46
+ const INDICATOR_HEIGHT = scale(8);
47
+ const INDICATOR_BORDER_RADIUS = scale(50);
48
+ const PLAY_ICON_SIZE = scale(25);
49
+ const PLAY_ICON_CONTAINER_SIZE = scale(40);
50
+ const PLAY_TEXT_MAX_WIDTH = scale(220);
33
51
 
34
- // Define props
52
+ // ============================================================================
53
+ // Types
54
+ // ============================================================================
35
55
  type SliderOneProps = {
36
56
  index: number;
37
57
  data: ISectionContent | null;
@@ -42,28 +62,34 @@ type SliderOneProps = {
42
62
  theme?: ThemeOverride;
43
63
  } & AccessibilityProps;
44
64
 
45
- // ImageTouchable component
46
65
  type ImageTouchableProps = {
47
66
  children: React.ReactNode;
48
67
  onImagePress?: () => void;
49
68
  };
50
69
 
51
- const ImageTouchable: React.FC<ImageTouchableProps> = ({
52
- children,
53
- onImagePress,
54
- }) => (
55
- <TouchableOpacity
56
- activeOpacity={0.8}
57
- style={styles.imageWrapper}
58
- onPress={onImagePress}
59
- accessibilityRole="button"
60
- accessibilityLabel="View content"
61
- >
62
- {children}
63
- </TouchableOpacity>
70
+ // ============================================================================
71
+ // Helper Components
72
+ // ============================================================================
73
+
74
+ const ImageTouchable = memo<ImageTouchableProps>(
75
+ ({ children, onImagePress }) => (
76
+ <TouchableOpacity
77
+ activeOpacity={0.8}
78
+ style={styles.imageWrapper}
79
+ onPress={onImagePress}
80
+ accessibilityRole="button"
81
+ accessibilityLabel="View content"
82
+ >
83
+ {children}
84
+ </TouchableOpacity>
85
+ )
64
86
  );
65
87
 
66
- // Main component
88
+ ImageTouchable.displayName = 'ImageTouchable';
89
+
90
+ // ============================================================================
91
+ // Main Component
92
+ // ============================================================================
67
93
  const SliderOne: React.FC<SliderOneProps> = ({
68
94
  index,
69
95
  data,
@@ -75,85 +101,162 @@ const SliderOne: React.FC<SliderOneProps> = ({
75
101
  accessibilityLabel = 'Content carousel',
76
102
  accessibilityHint = 'Swipe to view content',
77
103
  }) => {
104
+ // ========================================================================
105
+ // Hooks & State
106
+ // ========================================================================
78
107
  const { theme: appliedTheme } = useInternalTheme(theme);
79
- const contentData = useMemo(() => data?.data ?? [], [data]);
80
108
  const [activeIndex, setActiveIndex] = useState<number>(0);
81
109
 
110
+ // ========================================================================
111
+ // Data Processing
112
+ // ========================================================================
113
+ const contentData = useMemo(
114
+ () =>
115
+ (data?.data ?? []).filter(
116
+ (item): item is IContentData => !('type' in item && item.type === 'ads')
117
+ ),
118
+ [data]
119
+ );
120
+
121
+ const skeletonItems = useSkeletonItems(skeletonCount);
122
+
123
+ const indicatorArray = useMemo(
124
+ () =>
125
+ Array.from(
126
+ { length: isLoading ? skeletonItems.length : contentData.length },
127
+ (_, i) => i
128
+ ),
129
+ [isLoading, skeletonItems.length, contentData.length]
130
+ );
131
+
132
+ // ========================================================================
133
+ // Memoized Values
134
+ // ========================================================================
82
135
  const gradientColors = useMemo(
83
136
  () => [appliedTheme.colors.primary, appliedTheme.colors.primary],
84
137
  [appliedTheme.colors.primary]
85
138
  );
86
139
 
140
+ const playIconStyle = useMemo(
141
+ () => [styles.playIcon, { backgroundColor: appliedTheme.colors.button }],
142
+ [appliedTheme.colors.button]
143
+ );
144
+
145
+ const playTextStyle = useMemo(
146
+ () => [styles.playText, { color: appliedTheme.colors.white }],
147
+ [appliedTheme.colors.white]
148
+ );
149
+
150
+ const carouselProps = useMemo(
151
+ () => ({
152
+ width: CAROUSEL_WIDTH,
153
+ height: CAROUSEL_HEIGHT,
154
+ autoPlay: !isLoading && contentData.length > 1,
155
+ loop: !isLoading && contentData.length > 1,
156
+ scrollAnimationDuration: SCROLL_ANIMATION_DURATION,
157
+ autoPlayInterval: AUTO_PLAY_INTERVAL,
158
+ style: styles.carousel,
159
+ // Optimize rendering
160
+ windowSize: 3,
161
+ enabled: true,
162
+ }),
163
+ [isLoading, contentData.length]
164
+ );
165
+
166
+ const parallaxConfig = useMemo(
167
+ () => ({
168
+ parallaxScrollingOffset: PARALLAX_SCROLLING_OFFSET,
169
+ parallaxScrollingScale: PARALLAX_SCROLLING_SCALE,
170
+ }),
171
+ []
172
+ );
173
+
174
+ const panGestureConfig = useCallback(
175
+ (gesture: any) =>
176
+ gesture
177
+ .activeOffsetX(PAN_GESTURE_ACTIVE_OFFSET_X)
178
+ .failOffsetY(PAN_GESTURE_FAIL_OFFSET_Y),
179
+ []
180
+ );
181
+
182
+ // ========================================================================
183
+ // Event Handlers
184
+ // ========================================================================
87
185
  const handleSnapToItem = useCallback((i: number) => setActiveIndex(i), []);
88
186
 
89
- // Render carousel item
187
+ const handleItemPress = useCallback(
188
+ (item: IContentData) => {
189
+ onPressItem?.(item);
190
+ },
191
+ [onPressItem]
192
+ );
193
+
194
+ // ========================================================================
195
+ // Render Functions
196
+ // ========================================================================
90
197
  const renderCarouselItem = useCallback(
91
- ({ item }: { item: IContentData }) => (
92
- <View style={styles.sliderContainer}>
93
- <ImageTouchable onImagePress={() => onPressItem?.(item)}>
94
- <RentOrBuyIcon
95
- theme={appliedTheme}
96
- content_offering_type={item.content_offering_type}
97
- />
98
- <FastImage
99
- source={{
100
- uri: item.thumbnail,
101
- priority: FastImage.priority.normal,
102
- cache: FastImage.cacheControl.immutable,
103
- }}
104
- style={styles.sliderImage}
105
- resizeMode={FastImage.resizeMode.cover}
106
- accessibilityLabel={`Image of ${item.name || 'content'}`}
107
- />
108
- {showPlayIcon && (
109
- <LinearGradient
110
- colors={['transparent', 'rgba(0,0,0,0.6)']}
111
- style={styles.gradientOverlay}
112
- >
113
- <View style={styles.playOverlay}>
114
- <TouchableOpacity
115
- onPress={() => onPressItem?.(item)}
116
- style={[
117
- styles.playIcon,
118
- { backgroundColor: appliedTheme.colors.button },
119
- ]}
120
- activeOpacity={0.8}
121
- accessibilityRole="button"
122
- accessibilityLabel="Play content"
123
- >
124
- <Play
125
- size={scale(25)}
126
- color={appliedTheme.colors.black}
127
- fill={appliedTheme.colors.black}
128
- />
129
- </TouchableOpacity>
130
- <Text
131
- style={[
132
- styles.playText,
133
- { color: appliedTheme.colors.white },
134
- ]}
135
- numberOfLines={1}
136
- accessibilityLabel={item.name}
137
- >
138
- {item.name}
139
- </Text>
140
- </View>
141
- </LinearGradient>
142
- )}
143
- </ImageTouchable>
144
- </View>
145
- ),
146
- [appliedTheme, showPlayIcon, onPressItem]
198
+ ({ item }: { item: IContentData }) => {
199
+ const handlePress = () => handleItemPress(item);
200
+
201
+ return (
202
+ <View style={styles.sliderContainer}>
203
+ <ImageTouchable onImagePress={handlePress}>
204
+ <RentOrBuyIcon
205
+ theme={appliedTheme}
206
+ content_offering_type={item.content_offering_type}
207
+ />
208
+ <ThumbnailCard
209
+ thumbnailUri={item.thumbnail}
210
+ theme={appliedTheme}
211
+ isLoading={false}
212
+ borderRadius={BORDER_RADIUS}
213
+ wrapperStyle={styles.imageWrapper}
214
+ imageStyle={styles.sliderImage}
215
+ resizeMode={FastImage.resizeMode.cover}
216
+ />
217
+ {showPlayIcon && (
218
+ <LinearGradient
219
+ colors={GRADIENT_OVERLAY_COLORS}
220
+ style={styles.gradientOverlay}
221
+ >
222
+ <View style={styles.playOverlay}>
223
+ <TouchableOpacity
224
+ onPress={handlePress}
225
+ style={playIconStyle}
226
+ activeOpacity={0.8}
227
+ accessibilityRole="button"
228
+ accessibilityLabel="Play content"
229
+ >
230
+ <Play
231
+ size={PLAY_ICON_SIZE}
232
+ color={appliedTheme.colors.black}
233
+ fill={appliedTheme.colors.black}
234
+ />
235
+ </TouchableOpacity>
236
+ <Text
237
+ style={playTextStyle}
238
+ numberOfLines={1}
239
+ accessibilityLabel={item.name}
240
+ >
241
+ {item.name}
242
+ </Text>
243
+ </View>
244
+ </LinearGradient>
245
+ )}
246
+ </ImageTouchable>
247
+ </View>
248
+ );
249
+ },
250
+ [appliedTheme, showPlayIcon, handleItemPress, playIconStyle, playTextStyle]
147
251
  );
148
252
 
149
- // Render skeleton item
150
253
  const renderSkeletonItem = useCallback(
151
- () => (
254
+ ({ item: _item }: { item: any }) => (
152
255
  <View style={styles.sliderContainer}>
153
256
  <SkeletonPlaceholder
154
257
  backgroundColor={appliedTheme.colors.skeletonBaseColor}
155
258
  highlightColor={appliedTheme.colors.skeletonHighlightColor}
156
- speed={1000}
259
+ speed={SCROLL_ANIMATION_DURATION}
157
260
  >
158
261
  <SkeletonPlaceholder.Item
159
262
  width={CAROUSEL_WIDTH}
@@ -163,42 +266,48 @@ const SliderOne: React.FC<SliderOneProps> = ({
163
266
  </SkeletonPlaceholder>
164
267
  </View>
165
268
  ),
166
- [appliedTheme.colors]
269
+ [
270
+ appliedTheme.colors.skeletonBaseColor,
271
+ appliedTheme.colors.skeletonHighlightColor,
272
+ ]
167
273
  );
168
274
 
169
- // Render indicator
170
275
  const renderIndicator = useCallback(
171
- (_: number, i: number) => (
172
- <View key={i} style={styles.indicatorWrapper}>
173
- {isLoading ? (
174
- <SkeletonPlaceholder
175
- backgroundColor={appliedTheme.colors.skeletonBaseColor}
176
- highlightColor={appliedTheme.colors.skeletonHighlightColor}
177
- speed={2000}
178
- >
179
- <SkeletonPlaceholder.Item
180
- width={scale(18)}
181
- height={scale(8)}
182
- borderRadius={scale(50)}
276
+ (_: number, i: number) => {
277
+ const isActive = i === activeIndex;
278
+
279
+ return (
280
+ <View key={i} style={styles.indicatorWrapper}>
281
+ {isLoading ? (
282
+ <SkeletonPlaceholder
283
+ backgroundColor={appliedTheme.colors.skeletonBaseColor}
284
+ highlightColor={appliedTheme.colors.skeletonHighlightColor}
285
+ speed={AUTO_PLAY_INTERVAL}
286
+ >
287
+ <SkeletonPlaceholder.Item
288
+ width={INDICATOR_WIDTH_ACTIVE}
289
+ height={INDICATOR_HEIGHT}
290
+ borderRadius={INDICATOR_BORDER_RADIUS}
291
+ />
292
+ </SkeletonPlaceholder>
293
+ ) : isActive ? (
294
+ <LinearGradient
295
+ start={{ x: 0, y: 0 }}
296
+ end={{ x: 1, y: 0 }}
297
+ colors={gradientColors}
298
+ style={styles.activeIndicator}
183
299
  />
184
- </SkeletonPlaceholder>
185
- ) : i === activeIndex ? (
186
- <LinearGradient
187
- start={{ x: 0, y: 0 }}
188
- end={{ x: 1, y: 0 }}
189
- colors={gradientColors}
190
- style={styles.activeIndicator}
191
- />
192
- ) : (
193
- <View
194
- style={[
195
- styles.inactiveIndicator,
196
- { backgroundColor: appliedTheme.colors.onSurface },
197
- ]}
198
- />
199
- )}
200
- </View>
201
- ),
300
+ ) : (
301
+ <View
302
+ style={[
303
+ styles.inactiveIndicator,
304
+ { backgroundColor: appliedTheme.colors.onSurface },
305
+ ]}
306
+ />
307
+ )}
308
+ </View>
309
+ );
310
+ },
202
311
  [
203
312
  isLoading,
204
313
  appliedTheme.colors.skeletonBaseColor,
@@ -209,20 +318,21 @@ const SliderOne: React.FC<SliderOneProps> = ({
209
318
  ]
210
319
  );
211
320
 
212
- // Common carousel props
213
- const carouselProps = {
214
- width: CAROUSEL_WIDTH,
215
- height: CAROUSEL_HEIGHT,
216
- autoPlay: !isLoading && contentData.length > 1,
217
- loop: true,
218
- scrollAnimationDuration: 1000,
219
- autoPlayInterval: 2500,
220
- style: styles.carousel,
221
- };
222
- if (!data) {
223
- return null;
224
- }
225
- if (isLoading) {
321
+ // ========================================================================
322
+ // Early Returns & Loading State
323
+ // ========================================================================
324
+ // Show skeleton immediately if:
325
+ // 1. Loading is true, OR
326
+ // 2. Data is null/undefined (initial state), OR
327
+ // 3. No content data available
328
+ const shouldShowSkeleton =
329
+ isLoading ||
330
+ !data ||
331
+ !contentData.length ||
332
+ (skeletonItems.length > 0 && !contentData.length);
333
+
334
+ // Show skeleton immediately while data is loading or not available
335
+ if (shouldShowSkeleton && skeletonItems.length > 0) {
226
336
  return (
227
337
  <View
228
338
  style={styles.container}
@@ -231,31 +341,37 @@ const SliderOne: React.FC<SliderOneProps> = ({
231
341
  >
232
342
  <Carousel
233
343
  {...carouselProps}
234
- data={Array.from({ length: skeletonCount })}
344
+ data={skeletonItems}
235
345
  renderItem={renderSkeletonItem}
236
346
  mode="parallax"
237
- modeConfig={{
238
- parallaxScrollingOffset: 48,
239
- parallaxScrollingScale: 0.9,
240
- }}
241
- onConfigurePanGesture={(gesture) =>
242
- gesture.activeOffsetX([-10, 10]).failOffsetY([-5, 5])
243
- }
347
+ modeConfig={parallaxConfig}
348
+ onConfigurePanGesture={panGestureConfig}
244
349
  />
245
- <View style={styles.indicatorContainer}>
246
- <View style={styles.indicator}>
247
- {Array.from(
248
- { length: isLoading ? skeletonCount : contentData.length },
249
- renderIndicator
250
- )}
350
+ {indicatorArray.length > 0 && (
351
+ <View style={styles.indicatorContainer}>
352
+ <View style={styles.indicator}>
353
+ {indicatorArray.map((i) => renderIndicator(0, i))}
354
+ </View>
251
355
  </View>
252
- </View>
356
+ )}
253
357
  </View>
254
358
  );
255
359
  }
360
+
361
+ // If not loading and no data, return null
362
+ if (!isLoading && !data) {
363
+ return null;
364
+ }
365
+
256
366
  if (!isLoading && !contentData.length) {
257
367
  return null;
258
368
  }
369
+
370
+ // ========================================================================
371
+ // Render Main Content
372
+ // ========================================================================
373
+ const shouldShowIndicators = index === 0;
374
+
259
375
  return (
260
376
  <View
261
377
  style={styles.container}
@@ -268,18 +384,13 @@ const SliderOne: React.FC<SliderOneProps> = ({
268
384
  renderItem={renderCarouselItem}
269
385
  onSnapToItem={handleSnapToItem}
270
386
  mode="parallax"
271
- modeConfig={{
272
- parallaxScrollingOffset: 48,
273
- parallaxScrollingScale: 0.9,
274
- }}
275
- onConfigurePanGesture={(gesture) =>
276
- gesture.activeOffsetX([-10, 10]).failOffsetY([-5, 5])
277
- }
387
+ modeConfig={parallaxConfig}
388
+ onConfigurePanGesture={panGestureConfig}
278
389
  />
279
- {index === 0 && (
390
+ {shouldShowIndicators && (
280
391
  <View style={styles.indicatorContainer}>
281
392
  <View style={styles.indicator}>
282
- {Array.from({ length: contentData.length }, renderIndicator)}
393
+ {indicatorArray.map((i) => renderIndicator(0, i))}
283
394
  </View>
284
395
  </View>
285
396
  )}
@@ -287,7 +398,9 @@ const SliderOne: React.FC<SliderOneProps> = ({
287
398
  );
288
399
  };
289
400
 
401
+ // ============================================================================
290
402
  // Styles
403
+ // ============================================================================
291
404
  const styles = StyleSheet.create({
292
405
  container: {
293
406
  flex: 1,
@@ -312,7 +425,6 @@ const styles = StyleSheet.create({
312
425
  width: '100%',
313
426
  aspectRatio: 16 / 9,
314
427
  borderRadius: BORDER_RADIUS,
315
- backgroundColor: '#444',
316
428
  },
317
429
  gradientOverlay: {
318
430
  ...StyleSheet.absoluteFillObject,
@@ -326,16 +438,16 @@ const styles = StyleSheet.create({
326
438
  paddingHorizontal: scale(12),
327
439
  },
328
440
  playIcon: {
329
- width: scale(40),
330
- height: scale(40),
331
- borderRadius: scale(50),
441
+ width: PLAY_ICON_CONTAINER_SIZE,
442
+ height: PLAY_ICON_CONTAINER_SIZE,
443
+ borderRadius: INDICATOR_BORDER_RADIUS,
332
444
  alignItems: 'center',
333
445
  justifyContent: 'center',
334
446
  },
335
447
  playText: {
336
448
  fontSize: RFValue(15),
337
449
  fontWeight: 'bold',
338
- maxWidth: scale(220),
450
+ maxWidth: PLAY_TEXT_MAX_WIDTH,
339
451
  },
340
452
  indicatorContainer: {
341
453
  alignItems: 'center',
@@ -353,14 +465,14 @@ const styles = StyleSheet.create({
353
465
  justifyContent: 'center',
354
466
  },
355
467
  activeIndicator: {
356
- width: scale(18),
357
- height: scale(8),
358
- borderRadius: scale(50),
468
+ width: INDICATOR_WIDTH_ACTIVE,
469
+ height: INDICATOR_HEIGHT,
470
+ borderRadius: INDICATOR_BORDER_RADIUS,
359
471
  },
360
472
  inactiveIndicator: {
361
- width: scale(8),
362
- height: scale(8),
363
- borderRadius: scale(50),
473
+ width: INDICATOR_WIDTH_INACTIVE,
474
+ height: INDICATOR_HEIGHT,
475
+ borderRadius: INDICATOR_BORDER_RADIUS,
364
476
  },
365
477
  emptyState: {
366
478
  padding: scale(12),