@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
@@ -2,7 +2,7 @@
2
2
  * @author Naresh Dhamu
3
3
  * @lastModified Tue 17 Jun 2025 at 11:20 AM
4
4
  */
5
- import React, { useState } from 'react';
5
+ import React, { useState, useMemo, useCallback } from 'react';
6
6
  import {
7
7
  StyleSheet,
8
8
  View,
@@ -45,9 +45,20 @@ const InputOne: React.FC<InputOneProps> = ({
45
45
  }) => {
46
46
  const { theme: appliedTheme } = useInternalTheme(theme);
47
47
  const [showPassword, setShowPassword] = useState(false);
48
- const [isFocused, setIsFocused] = useState(false); // 👈 focus state जोड़ी गई
49
- const isPasswordField = !!secureTextEntry;
50
- const inputSecure = isPasswordField && !showPassword;
48
+ const [isFocused, setIsFocused] = useState(false);
49
+
50
+ const isPasswordField = useMemo(() => !!secureTextEntry, [secureTextEntry]);
51
+ const inputSecure = useMemo(
52
+ () => isPasswordField && !showPassword,
53
+ [isPasswordField, showPassword]
54
+ );
55
+
56
+ const handleFocus = useCallback(() => setIsFocused(true), []);
57
+ const handleBlur = useCallback(() => setIsFocused(false), []);
58
+ const togglePassword = useCallback(
59
+ () => setShowPassword((prev) => !prev),
60
+ []
61
+ );
51
62
 
52
63
  const {
53
64
  textPrimary,
@@ -57,126 +68,143 @@ const InputOne: React.FC<InputOneProps> = ({
57
68
  outlineDisabled,
58
69
  error: inputErrorColor,
59
70
  background,
60
- primary, // अगर theme में primary color हो तो उसे भी use करेंगे
71
+ primary,
61
72
  } = appliedTheme?.colors || {};
62
73
 
74
+ const labelColor = useMemo(
75
+ () => (error ? inputErrorColor : disabled ? textDisabled : textPrimary),
76
+ [error, disabled, inputErrorColor, textDisabled, textPrimary]
77
+ );
78
+
79
+ const labelContainerStyle = useMemo(
80
+ () => [
81
+ styles.labelContainer,
82
+ { backgroundColor: background, borderRadius: scale(5) },
83
+ ],
84
+ [background]
85
+ );
86
+
87
+ const labelStyle = useMemo(
88
+ () => [styles.label, { color: labelColor }],
89
+ [labelColor]
90
+ );
91
+
92
+ const borderColor = useMemo(
93
+ () =>
94
+ disabled
95
+ ? outlineDisabled
96
+ : error
97
+ ? inputErrorColor
98
+ : isFocused
99
+ ? primary || '#007AFF'
100
+ : outline,
101
+ [
102
+ disabled,
103
+ error,
104
+ isFocused,
105
+ outlineDisabled,
106
+ inputErrorColor,
107
+ primary,
108
+ outline,
109
+ ]
110
+ );
111
+
112
+ const wrapperBackgroundColor = useMemo(
113
+ () =>
114
+ disabled
115
+ ? appliedTheme.colors.backgroundDisabled
116
+ : error
117
+ ? appliedTheme.colors.errorContainer
118
+ : appliedTheme.colors.background,
119
+ [disabled, error, appliedTheme.colors]
120
+ );
121
+
122
+ const inputWrapperStyle = useMemo(
123
+ () => [
124
+ styles.inputWrapper,
125
+ {
126
+ borderColor,
127
+ backgroundColor: wrapperBackgroundColor,
128
+ flexDirection: 'row' as const,
129
+ alignItems: 'center' as const,
130
+ },
131
+ ],
132
+ [borderColor, wrapperBackgroundColor]
133
+ );
134
+
135
+ const inputTextColor = useMemo(
136
+ () => (disabled ? textDisabled : error ? inputErrorColor : textPrimary),
137
+ [disabled, error, textDisabled, inputErrorColor, textPrimary]
138
+ );
139
+
140
+ const inputColorStyle = useMemo(
141
+ () => [styles.input, { color: inputTextColor }, inputStyle],
142
+ [inputTextColor, inputStyle]
143
+ );
144
+
145
+ const placeholderColor = useMemo(
146
+ () => placeholderTextColor || (disabled ? textDisabled : textSecondary),
147
+ [placeholderTextColor, disabled, textDisabled, textSecondary]
148
+ );
149
+
150
+ const cursorColor = useMemo(
151
+ () =>
152
+ disabled
153
+ ? textDisabled
154
+ : error
155
+ ? inputErrorColor
156
+ : isFocused
157
+ ? primary || '#007AFF'
158
+ : textPrimary,
159
+ [
160
+ disabled,
161
+ error,
162
+ isFocused,
163
+ textDisabled,
164
+ inputErrorColor,
165
+ primary,
166
+ textPrimary,
167
+ ]
168
+ );
169
+
170
+ const iconColor = useMemo(
171
+ () => (disabled ? textDisabled : error ? inputErrorColor : textPrimary),
172
+ [disabled, error, textDisabled, inputErrorColor, textPrimary]
173
+ );
174
+
175
+ const textContentType = useMemo(
176
+ () => (isPasswordField ? 'oneTimeCode' : props.textContentType || 'none'),
177
+ [isPasswordField, props.textContentType]
178
+ );
179
+
63
180
  return (
64
181
  <View style={[styles.container, containerStyle]}>
65
182
  {label && (
66
- <View
67
- style={[
68
- styles.labelContainer,
69
- { backgroundColor: background, borderRadius: scale(5) },
70
- ]}
71
- >
72
- <Text
73
- style={[
74
- styles.label,
75
- {
76
- color: error
77
- ? inputErrorColor
78
- : disabled
79
- ? textDisabled
80
- : textPrimary,
81
- },
82
- ]}
83
- >
84
- {label}
85
- </Text>
183
+ <View style={labelContainerStyle}>
184
+ <Text style={labelStyle}>{label}</Text>
86
185
  </View>
87
186
  )}
88
187
 
89
- <View
90
- style={[
91
- styles.inputWrapper,
92
- {
93
- borderColor: disabled
94
- ? outlineDisabled
95
- : error
96
- ? inputErrorColor
97
- : isFocused
98
- ? primary || '#007AFF'
99
- : outline,
100
- backgroundColor: disabled
101
- ? appliedTheme.colors.backgroundDisabled
102
- : error
103
- ? appliedTheme.colors.errorContainer
104
- : appliedTheme.colors.background,
105
- flexDirection: 'row',
106
- alignItems: 'center',
107
- },
108
- ]}
109
- >
188
+ <View style={inputWrapperStyle}>
110
189
  <TextInput
111
190
  {...props}
112
191
  editable={!disabled}
113
- onFocus={() => setIsFocused(true)}
114
- onBlur={() => setIsFocused(false)}
115
- placeholderTextColor={
116
- placeholderTextColor || (disabled ? textDisabled : textSecondary)
117
- }
192
+ onFocus={handleFocus}
193
+ onBlur={handleBlur}
194
+ placeholderTextColor={placeholderColor}
118
195
  secureTextEntry={inputSecure}
119
- textContentType={
120
- isPasswordField ? 'oneTimeCode' : props.textContentType || 'none'
121
- }
122
- cursorColor={
123
- disabled
124
- ? textDisabled
125
- : error
126
- ? inputErrorColor
127
- : isFocused
128
- ? primary || '#007AFF'
129
- : textPrimary
130
- }
131
- selectionColor={
132
- disabled
133
- ? textDisabled
134
- : error
135
- ? inputErrorColor
136
- : isFocused
137
- ? primary || '#007AFF'
138
- : textPrimary
139
- }
140
- style={[
141
- styles.input,
142
- {
143
- color: disabled
144
- ? textDisabled
145
- : error
146
- ? inputErrorColor
147
- : textPrimary,
148
- },
149
- inputStyle,
150
- ]}
196
+ textContentType={textContentType}
197
+ cursorColor={cursorColor}
198
+ selectionColor={cursorColor}
199
+ style={inputColorStyle}
151
200
  />
152
201
 
153
202
  {isPasswordField && (
154
- <TouchableOpacity
155
- onPress={() => setShowPassword((prev) => !prev)}
156
- disabled={disabled}
157
- >
203
+ <TouchableOpacity onPress={togglePassword} disabled={disabled}>
158
204
  {showPassword ? (
159
- <EyeOff
160
- size={scale(20)}
161
- color={
162
- disabled
163
- ? textDisabled
164
- : error
165
- ? inputErrorColor
166
- : textPrimary
167
- }
168
- />
205
+ <EyeOff size={scale(20)} color={iconColor} />
169
206
  ) : (
170
- <Eye
171
- size={scale(20)}
172
- color={
173
- disabled
174
- ? textDisabled
175
- : error
176
- ? inputErrorColor
177
- : textPrimary
178
- }
179
- />
207
+ <Eye size={scale(20)} color={iconColor} />
180
208
  )}
181
209
  </TouchableOpacity>
182
210
  )}
@@ -191,7 +219,7 @@ const InputOne: React.FC<InputOneProps> = ({
191
219
  );
192
220
  };
193
221
 
194
- export default InputOne;
222
+ export default React.memo(InputOne);
195
223
 
196
224
  const styles = StyleSheet.create({
197
225
  container: {
@@ -5,13 +5,13 @@ interface LoaderProps {
5
5
  color?: string;
6
6
  }
7
7
 
8
- export const Loader: React.FC<LoaderProps> = ({ color }) => {
8
+ export const Loader: React.FC<LoaderProps> = React.memo(({ color }) => {
9
9
  return (
10
10
  <View style={styles.root}>
11
11
  <ActivityIndicator size="large" color={color} />
12
12
  </View>
13
13
  );
14
- };
14
+ });
15
15
 
16
16
  const styles = StyleSheet.create({
17
17
  root: {
@@ -2,7 +2,7 @@
2
2
  * @author Naresh Dhamu
3
3
  * @lastModified Sun 08 Jun 2025 at 03:23 PM
4
4
  */
5
- import React from 'react';
5
+ import React, { useMemo } from 'react';
6
6
  import {
7
7
  Image,
8
8
  View,
@@ -49,29 +49,50 @@ export const Logo: React.FC<ILogoProps> = ({
49
49
  } = useSplashCache({
50
50
  logoUrl: logoUri,
51
51
  });
52
- const finalSource = logoPath
53
- ? {
54
- uri: logoPath.startsWith('file://') ? logoPath : `file://${logoPath}`,
55
- }
56
- : logoUri
57
- ? { uri: logoUri }
58
- : fallbackUri
59
- ? { uri: fallbackUri }
60
- : undefined;
52
+ const finalSource = useMemo(
53
+ () =>
54
+ logoPath
55
+ ? {
56
+ uri: logoPath.startsWith('file://')
57
+ ? logoPath
58
+ : `file://${logoPath}`,
59
+ }
60
+ : logoUri
61
+ ? { uri: logoUri }
62
+ : fallbackUri
63
+ ? { uri: fallbackUri }
64
+ : undefined,
65
+ [logoPath, logoUri, fallbackUri]
66
+ );
67
+
68
+ const containerStyleMemo = useMemo(
69
+ () => [
70
+ {
71
+ alignItems: 'center' as const,
72
+ justifyContent: 'center' as const,
73
+ },
74
+ containerStyle,
75
+ ],
76
+ [containerStyle]
77
+ );
78
+
79
+ const imageStyleMemo = useMemo(
80
+ () => [
81
+ {
82
+ width: moderateScale(width),
83
+ height: moderateScale(height),
84
+ ...(aspectRatio ? { aspectRatio } : {}),
85
+ },
86
+ imageStyle,
87
+ ],
88
+ [width, height, aspectRatio, imageStyle]
89
+ );
61
90
 
62
91
  if (!finalSource && !isLoading) {
63
92
  return null;
64
93
  }
65
94
  return (
66
- <View
67
- style={[
68
- {
69
- alignItems: 'center',
70
- justifyContent: 'center',
71
- },
72
- containerStyle,
73
- ]}
74
- >
95
+ <View style={containerStyleMemo}>
75
96
  {isLoading || isSplashLoading ? (
76
97
  <SkeletonPlaceholder
77
98
  backgroundColor={appliedTheme.colors.skeletonBaseColor}
@@ -91,14 +112,7 @@ export const Logo: React.FC<ILogoProps> = ({
91
112
  <Image
92
113
  source={finalSource}
93
114
  resizeMode={resizeMode}
94
- style={[
95
- {
96
- width: moderateScale(width),
97
- height: moderateScale(height),
98
- ...(aspectRatio ? { aspectRatio } : {}),
99
- },
100
- imageStyle,
101
- ]}
115
+ style={imageStyleMemo}
102
116
  onError={() => {
103
117
  return null;
104
118
  }}
@@ -108,3 +122,5 @@ export const Logo: React.FC<ILogoProps> = ({
108
122
  </View>
109
123
  );
110
124
  };
125
+
126
+ export default React.memo(Logo);
@@ -22,6 +22,7 @@ import SearchCard, {
22
22
  type SearchCardSkeletonConfig,
23
23
  } from './components/SearchCard';
24
24
  import { useDebounce } from '../../hooks/useDebounce';
25
+ import { useSkeletonItems } from '../../hooks/useSkeletonItems';
25
26
  import type { IGetSectionData, ISectionItem, MoreFetchData } from '../../types';
26
27
  import type { ThemeOverride } from '../../theme/themes';
27
28
  import { useRecentSearchesStore } from '../../store/RecentSearchesStore';
@@ -118,10 +119,7 @@ const SearchBar: React.FC<SearchOneProps> = ({
118
119
  [events]
119
120
  );
120
121
 
121
- const skeletonItems = useMemo(
122
- () => Array(skeletonCardCount).fill({}),
123
- [skeletonCardCount]
124
- );
122
+ const skeletonItems = useSkeletonItems(skeletonCardCount);
125
123
 
126
124
  const showRecent =
127
125
  !recentSearchesLoading && search.trim() === '' && recentSearches.length > 0;
@@ -15,6 +15,8 @@ import type { ThemeOverride } from '../../../theme/themes';
15
15
  import { ThumbnailCard } from '../../Content/Card/components/ThumbnailCard';
16
16
  import { Text } from '../../Text';
17
17
  import { RFValue } from 'react-native-responsive-fontsize';
18
+ import { useSafePressHandler } from '../../../hooks/useSafeCallback';
19
+ import { useSkeletonItems } from '../../../hooks/useSkeletonItems';
18
20
 
19
21
  /**
20
22
  * Configuration for SearchCard skeleton rendering.
@@ -64,6 +66,11 @@ const SearchCard: React.FC<SearchCardProps> = ({
64
66
  const { items = 5, textWidths = ['80%', '100%', '70%', '50%', '40%'] } =
65
67
  skeletonConfig ?? {};
66
68
 
69
+ const skeletonItems = useSkeletonItems(items);
70
+
71
+ // Memoize handlePress before any early returns
72
+ const handlePress = useSafePressHandler(onPress);
73
+
67
74
  const renderSkeleton = () => (
68
75
  <SkeletonPlaceholder
69
76
  backgroundColor={skeletonBaseColor}
@@ -86,7 +93,7 @@ const SearchCard: React.FC<SearchCardProps> = ({
86
93
  },
87
94
  ]}
88
95
  >
89
- {Array.from({ length: items }).map((_, lineIdx) => {
96
+ {skeletonItems.map((_, lineIdx) => {
90
97
  const rawWidth = textWidths[lineIdx] ?? '90%';
91
98
  const resolvedWidth =
92
99
  typeof rawWidth === 'string'
@@ -108,12 +115,19 @@ const SearchCard: React.FC<SearchCardProps> = ({
108
115
  </SkeletonPlaceholder>
109
116
  );
110
117
 
118
+ const pressableStyle = ({ pressed }: { pressed: boolean }) => [
119
+ styles.card,
120
+ {
121
+ opacity: pressed ? 0.9 : 1,
122
+ },
123
+ ];
124
+
111
125
  if (isLoading) return renderSkeleton();
112
126
 
113
127
  return (
114
128
  <Pressable
115
- onPress={onPress}
116
- style={({ pressed }) => [styles.card, { opacity: pressed ? 0.9 : 1 }]}
129
+ onPress={handlePress}
130
+ style={pressableStyle}
117
131
  accessibilityRole="button"
118
132
  accessibilityLabel={title}
119
133
  disabled={!onPress}
@@ -124,7 +138,6 @@ const SearchCard: React.FC<SearchCardProps> = ({
124
138
  theme={appliedTheme}
125
139
  borderRadius={scale(8)}
126
140
  resizeMode={FastImage.resizeMode.cover}
127
- wrapperStyle={styles.thumbnail}
128
141
  isLoading={false}
129
142
  />
130
143
  </View>
@@ -158,7 +171,7 @@ const SearchCard: React.FC<SearchCardProps> = ({
158
171
  );
159
172
  };
160
173
 
161
- export default SearchCard;
174
+ export default React.memo(SearchCard);
162
175
 
163
176
  const styles = StyleSheet.create({
164
177
  card: {
@@ -174,14 +187,7 @@ const styles = StyleSheet.create({
174
187
  justifyContent: 'center',
175
188
  alignItems: 'center',
176
189
  },
177
- thumbnail: {
178
- width: '100%',
179
- height: '100%',
180
- borderRadius: scale(8),
181
- position: 'absolute',
182
- top: 0,
183
- left: 0,
184
- },
190
+
185
191
  textContainer: {
186
192
  flex: 1,
187
193
  height: verticalScale(80),