@fountain-ui/lab 2.0.0-beta.4 → 2.0.0-beta.41

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 (516) hide show
  1. package/build/commonjs/AnimatedY/AnimatedY.js +10 -14
  2. package/build/commonjs/AnimatedY/AnimatedY.js.map +1 -1
  3. package/build/commonjs/AnimatedY/AnimatedYProps.js.map +1 -1
  4. package/build/commonjs/AnimatedY/index.js.map +1 -1
  5. package/build/commonjs/BottomSheet/BottomSheet.js +177 -0
  6. package/build/commonjs/BottomSheet/BottomSheet.js.map +1 -0
  7. package/build/commonjs/BottomSheet/BottomSheetNative.js +5 -3
  8. package/build/commonjs/BottomSheet/BottomSheetNative.js.map +1 -1
  9. package/build/commonjs/BottomSheet/BottomSheetProps.js.map +1 -1
  10. package/build/commonjs/BottomSheet/BottomSheetWeb.js +19 -7
  11. package/build/commonjs/BottomSheet/BottomSheetWeb.js.map +1 -1
  12. package/build/commonjs/BottomSheet/TransparentBackdrop.js +1 -1
  13. package/build/commonjs/BottomSheet/TransparentBackdrop.js.map +1 -1
  14. package/build/commonjs/BottomSheet/index.js.map +1 -1
  15. package/build/commonjs/BottomSheet/index.native.js.map +1 -1
  16. package/build/commonjs/BottomSheet/useDynamicSnapPoints.js +49 -0
  17. package/build/commonjs/BottomSheet/useDynamicSnapPoints.js.map +1 -0
  18. package/build/commonjs/Carousel/Carousel.js +130 -0
  19. package/build/commonjs/Carousel/Carousel.js.map +1 -0
  20. package/build/commonjs/Carousel/CarouselProps.js.map +1 -1
  21. package/build/commonjs/Carousel/animation/animationUtils.js +9 -0
  22. package/build/commonjs/Carousel/animation/animationUtils.js.map +1 -0
  23. package/build/commonjs/Carousel/animation/createDefaultItemStyle.js +15 -0
  24. package/build/commonjs/Carousel/animation/createDefaultItemStyle.js.map +1 -0
  25. package/build/commonjs/Carousel/animation/createDefaultScrollAnimation.js +20 -0
  26. package/build/commonjs/Carousel/animation/createDefaultScrollAnimation.js.map +1 -0
  27. package/build/commonjs/Carousel/animation/index.js +40 -0
  28. package/build/commonjs/Carousel/animation/index.js.map +1 -0
  29. package/build/commonjs/Carousel/animation/normalItemStyleFactory.js +27 -0
  30. package/build/commonjs/Carousel/animation/normalItemStyleFactory.js.map +1 -0
  31. package/build/commonjs/Carousel/animation/parallaxItemStyleFactory.js +65 -0
  32. package/build/commonjs/Carousel/animation/parallaxItemStyleFactory.js.map +1 -0
  33. package/build/commonjs/Carousel/components/InternalContext.js +29 -0
  34. package/build/commonjs/Carousel/components/InternalContext.js.map +1 -0
  35. package/build/commonjs/Carousel/components/ItemView.js +66 -0
  36. package/build/commonjs/Carousel/components/ItemView.js.map +1 -0
  37. package/build/commonjs/Carousel/components/RootView.js +86 -0
  38. package/build/commonjs/Carousel/components/RootView.js.map +1 -0
  39. package/build/commonjs/Carousel/components/ScrollViewGesture.js +82 -0
  40. package/build/commonjs/Carousel/components/ScrollViewGesture.js.map +1 -0
  41. package/build/commonjs/Carousel/components/index.js +40 -0
  42. package/build/commonjs/Carousel/components/index.js.map +1 -0
  43. package/build/commonjs/Carousel/components/useItemInterpolation.js +65 -0
  44. package/build/commonjs/Carousel/components/useItemInterpolation.js.map +1 -0
  45. package/build/commonjs/Carousel/hooks/index.js +48 -0
  46. package/build/commonjs/Carousel/hooks/index.js.map +1 -0
  47. package/build/commonjs/Carousel/hooks/useAutoplayController.js +58 -0
  48. package/build/commonjs/Carousel/hooks/useAutoplayController.js.map +1 -0
  49. package/build/commonjs/Carousel/hooks/useIndexController.js +55 -0
  50. package/build/commonjs/Carousel/hooks/useIndexController.js.map +1 -0
  51. package/build/commonjs/Carousel/hooks/useItemVisibilityStore.js +95 -0
  52. package/build/commonjs/Carousel/hooks/useItemVisibilityStore.js.map +1 -0
  53. package/build/commonjs/Carousel/hooks/useLoopedData.js +33 -0
  54. package/build/commonjs/Carousel/hooks/useLoopedData.js.map +1 -0
  55. package/build/commonjs/Carousel/hooks/usePagingAnimator.js +202 -0
  56. package/build/commonjs/Carousel/hooks/usePagingAnimator.js.map +1 -0
  57. package/build/commonjs/Carousel/index.js +16 -2
  58. package/build/commonjs/Carousel/index.js.map +1 -1
  59. package/build/commonjs/Carousel/tick.js +16 -0
  60. package/build/commonjs/Carousel/tick.js.map +1 -0
  61. package/build/commonjs/Carousel/types.js +8 -0
  62. package/build/commonjs/Carousel/types.js.map +1 -0
  63. package/build/commonjs/ComicViewer/ComicViewer.js +201 -86
  64. package/build/commonjs/ComicViewer/ComicViewer.js.map +1 -1
  65. package/build/commonjs/ComicViewer/ComicViewerProps.js.map +1 -1
  66. package/build/commonjs/ComicViewer/EncodedTile.js +10 -0
  67. package/build/commonjs/ComicViewer/EncodedTile.js.map +1 -0
  68. package/build/commonjs/ComicViewer/ReloadButton.js +48 -0
  69. package/build/commonjs/ComicViewer/ReloadButton.js.map +1 -0
  70. package/build/commonjs/ComicViewer/ViewerItem.js +49 -58
  71. package/build/commonjs/ComicViewer/ViewerItem.js.map +1 -1
  72. package/build/commonjs/ComicViewer/index.js.map +1 -1
  73. package/build/commonjs/DateTimePicker/DateTimePicker.js +2 -2
  74. package/build/commonjs/DateTimePicker/DateTimePicker.js.map +1 -1
  75. package/build/commonjs/DateTimePicker/DateTimePickerProps.js.map +1 -1
  76. package/build/commonjs/DateTimePicker/DateTimePickerProvider.js.map +1 -1
  77. package/build/commonjs/DateTimePicker/YearPicker.js +21 -17
  78. package/build/commonjs/DateTimePicker/YearPicker.js.map +1 -1
  79. package/build/commonjs/DateTimePicker/index.js +4 -4
  80. package/build/commonjs/DateTimePicker/index.js.map +1 -1
  81. package/build/commonjs/DateTimePicker/utils.js +2 -1
  82. package/build/commonjs/DateTimePicker/utils.js.map +1 -1
  83. package/build/commonjs/FlipCard/FlipCard.js +7 -13
  84. package/build/commonjs/FlipCard/FlipCard.js.map +1 -1
  85. package/build/commonjs/FlipCard/FlipCardProps.js.map +1 -1
  86. package/build/commonjs/FlipCard/index.js.map +1 -1
  87. package/build/commonjs/StatusBarProvider/Provider.js +1 -1
  88. package/build/commonjs/StatusBarProvider/Provider.js.map +1 -1
  89. package/build/commonjs/StatusBarProvider/StatusBarProvider.js.map +1 -1
  90. package/build/commonjs/StatusBarProvider/StatusBarProviderProps.js.map +1 -1
  91. package/build/commonjs/StatusBarProvider/index.js.map +1 -1
  92. package/build/commonjs/ViewPager/FluxContext.js +13 -0
  93. package/build/commonjs/ViewPager/FluxContext.js.map +1 -0
  94. package/build/commonjs/ViewPager/InternalContext.js +17 -0
  95. package/build/commonjs/ViewPager/InternalContext.js.map +1 -0
  96. package/build/commonjs/ViewPager/PageStateContext.js +16 -0
  97. package/build/commonjs/ViewPager/PageStateContext.js.map +1 -0
  98. package/build/commonjs/ViewPager/ViewPager.js +81 -0
  99. package/build/commonjs/ViewPager/ViewPager.js.map +1 -0
  100. package/build/commonjs/ViewPager/ViewPager.native.js +150 -0
  101. package/build/commonjs/ViewPager/ViewPager.native.js.map +1 -0
  102. package/build/commonjs/ViewPager/ViewPagerProps.js.map +1 -1
  103. package/build/commonjs/ViewPager/components/ChildrenMemoizedPage.js +122 -0
  104. package/build/commonjs/ViewPager/components/ChildrenMemoizedPage.js.map +1 -0
  105. package/build/commonjs/ViewPager/components/FluxStoreProvider.js +37 -0
  106. package/build/commonjs/ViewPager/components/FluxStoreProvider.js.map +1 -0
  107. package/build/commonjs/ViewPager/components/index.js +24 -0
  108. package/build/commonjs/ViewPager/components/index.js.map +1 -0
  109. package/build/commonjs/ViewPager/hooks/index.js +64 -0
  110. package/build/commonjs/ViewPager/hooks/index.js.map +1 -0
  111. package/build/commonjs/ViewPager/hooks/useDispatch.js +22 -0
  112. package/build/commonjs/ViewPager/hooks/useDispatch.js.map +1 -0
  113. package/build/commonjs/ViewPager/hooks/useEagerState.js +24 -0
  114. package/build/commonjs/ViewPager/hooks/useEagerState.js.map +1 -0
  115. package/build/commonjs/ViewPager/hooks/useForceRender.js +16 -0
  116. package/build/commonjs/ViewPager/hooks/useForceRender.js.map +1 -0
  117. package/build/commonjs/ViewPager/hooks/useLazyState.js +45 -0
  118. package/build/commonjs/ViewPager/hooks/useLazyState.js.map +1 -0
  119. package/build/commonjs/ViewPager/hooks/usePageStore.js +35 -0
  120. package/build/commonjs/ViewPager/hooks/usePageStore.js.map +1 -0
  121. package/build/commonjs/ViewPager/hooks/useStore.js +26 -0
  122. package/build/commonjs/ViewPager/hooks/useStore.js.map +1 -0
  123. package/build/commonjs/ViewPager/hooks/useViewPagerPageState.js +19 -0
  124. package/build/commonjs/ViewPager/hooks/useViewPagerPageState.js.map +1 -0
  125. package/build/commonjs/ViewPager/index.js +42 -2
  126. package/build/commonjs/ViewPager/index.js.map +1 -1
  127. package/build/commonjs/ViewPager/types.js +2 -0
  128. package/build/commonjs/ViewPager/types.js.map +1 -0
  129. package/build/commonjs/ViewPager/utils.js +12 -43
  130. package/build/commonjs/ViewPager/utils.js.map +1 -1
  131. package/build/commonjs/ViewabilityTrackerView/Viewability.js +2 -0
  132. package/build/commonjs/ViewabilityTrackerView/Viewability.js.map +1 -0
  133. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerView.js +45 -0
  134. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerView.js.map +1 -0
  135. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerViewProps.js +2 -0
  136. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerViewProps.js.map +1 -0
  137. package/build/commonjs/{Carousel/index.native.js → ViewabilityTrackerView/index.js} +3 -3
  138. package/build/commonjs/ViewabilityTrackerView/index.js.map +1 -0
  139. package/build/commonjs/ViewabilityTrackerView/measureViewability.js +42 -0
  140. package/build/commonjs/ViewabilityTrackerView/measureViewability.js.map +1 -0
  141. package/build/commonjs/ViewabilityTrackerView/useViewabilityTracker.js +88 -0
  142. package/build/commonjs/ViewabilityTrackerView/useViewabilityTracker.js.map +1 -0
  143. package/build/commonjs/hooks/index.js +16 -0
  144. package/build/commonjs/hooks/index.js.map +1 -1
  145. package/build/commonjs/hooks/useAppbarStyles.js.map +1 -1
  146. package/build/commonjs/hooks/useDeferredExecutor.js +45 -0
  147. package/build/commonjs/hooks/useDeferredExecutor.js.map +1 -0
  148. package/build/commonjs/hooks/useElevationStyle.js.map +1 -1
  149. package/build/commonjs/hooks/useHeight.js +5 -4
  150. package/build/commonjs/hooks/useHeight.js.map +1 -1
  151. package/build/commonjs/hooks/useIsMounted.js +22 -0
  152. package/build/commonjs/hooks/useIsMounted.js.map +1 -0
  153. package/build/commonjs/hooks/useUnstableCollapsibleAppBar.js +58 -61
  154. package/build/commonjs/hooks/useUnstableCollapsibleAppBar.js.map +1 -1
  155. package/build/commonjs/hooks/useUnstableToggleDisplayStyle.js +9 -11
  156. package/build/commonjs/hooks/useUnstableToggleDisplayStyle.js.map +1 -1
  157. package/build/commonjs/index.js +28 -7
  158. package/build/commonjs/index.js.map +1 -1
  159. package/build/module/AnimatedY/AnimatedY.js +11 -10
  160. package/build/module/AnimatedY/AnimatedY.js.map +1 -1
  161. package/build/module/AnimatedY/AnimatedYProps.js.map +1 -1
  162. package/build/module/AnimatedY/index.js.map +1 -1
  163. package/build/module/BottomSheet/BottomSheet.js +161 -0
  164. package/build/module/BottomSheet/BottomSheet.js.map +1 -0
  165. package/build/module/BottomSheet/BottomSheetNative.js +5 -3
  166. package/build/module/BottomSheet/BottomSheetNative.js.map +1 -1
  167. package/build/module/BottomSheet/BottomSheetProps.js.map +1 -1
  168. package/build/module/BottomSheet/BottomSheetWeb.js +18 -7
  169. package/build/module/BottomSheet/BottomSheetWeb.js.map +1 -1
  170. package/build/module/BottomSheet/TransparentBackdrop.js +1 -1
  171. package/build/module/BottomSheet/TransparentBackdrop.js.map +1 -1
  172. package/build/module/BottomSheet/index.js.map +1 -1
  173. package/build/module/BottomSheet/index.native.js.map +1 -1
  174. package/build/module/BottomSheet/useDynamicSnapPoints.js +41 -0
  175. package/build/module/BottomSheet/useDynamicSnapPoints.js.map +1 -0
  176. package/build/module/Carousel/Carousel.js +109 -0
  177. package/build/module/Carousel/Carousel.js.map +1 -0
  178. package/build/module/Carousel/CarouselProps.js.map +1 -1
  179. package/build/module/Carousel/animation/animationUtils.js +2 -0
  180. package/build/module/Carousel/animation/animationUtils.js.map +1 -0
  181. package/build/module/Carousel/animation/createDefaultItemStyle.js +3 -0
  182. package/build/module/Carousel/animation/createDefaultItemStyle.js.map +1 -0
  183. package/build/module/Carousel/animation/createDefaultScrollAnimation.js +11 -0
  184. package/build/module/Carousel/animation/createDefaultScrollAnimation.js.map +1 -0
  185. package/build/module/Carousel/animation/index.js +5 -0
  186. package/build/module/Carousel/animation/index.js.map +1 -0
  187. package/build/module/Carousel/animation/normalItemStyleFactory.js +18 -0
  188. package/build/module/Carousel/animation/normalItemStyleFactory.js.map +1 -0
  189. package/build/module/Carousel/animation/parallaxItemStyleFactory.js +55 -0
  190. package/build/module/Carousel/animation/parallaxItemStyleFactory.js.map +1 -0
  191. package/build/module/Carousel/components/InternalContext.js +19 -0
  192. package/build/module/Carousel/components/InternalContext.js.map +1 -0
  193. package/build/module/Carousel/components/ItemView.js +46 -0
  194. package/build/module/Carousel/components/ItemView.js.map +1 -0
  195. package/build/module/Carousel/components/RootView.js +65 -0
  196. package/build/module/Carousel/components/RootView.js.map +1 -0
  197. package/build/module/Carousel/components/ScrollViewGesture.js +68 -0
  198. package/build/module/Carousel/components/ScrollViewGesture.js.map +1 -0
  199. package/build/module/Carousel/components/index.js +5 -0
  200. package/build/module/Carousel/components/index.js.map +1 -0
  201. package/build/module/Carousel/components/useItemInterpolation.js +51 -0
  202. package/build/module/Carousel/components/useItemInterpolation.js.map +1 -0
  203. package/build/module/Carousel/hooks/index.js +6 -0
  204. package/build/module/Carousel/hooks/index.js.map +1 -0
  205. package/build/module/Carousel/hooks/useAutoplayController.js +48 -0
  206. package/build/module/Carousel/hooks/useAutoplayController.js.map +1 -0
  207. package/build/module/Carousel/hooks/useIndexController.js +44 -0
  208. package/build/module/Carousel/hooks/useIndexController.js.map +1 -0
  209. package/build/module/Carousel/hooks/useItemVisibilityStore.js +86 -0
  210. package/build/module/Carousel/hooks/useItemVisibilityStore.js.map +1 -0
  211. package/build/module/Carousel/hooks/useLoopedData.js +24 -0
  212. package/build/module/Carousel/hooks/useLoopedData.js.map +1 -0
  213. package/build/module/Carousel/hooks/usePagingAnimator.js +192 -0
  214. package/build/module/Carousel/hooks/usePagingAnimator.js.map +1 -0
  215. package/build/module/Carousel/index.js +2 -1
  216. package/build/module/Carousel/index.js.map +1 -1
  217. package/build/module/Carousel/tick.js +6 -0
  218. package/build/module/Carousel/tick.js.map +1 -0
  219. package/build/module/Carousel/types.js +4 -0
  220. package/build/module/Carousel/types.js.map +1 -0
  221. package/build/module/ComicViewer/ComicViewer.js +199 -86
  222. package/build/module/ComicViewer/ComicViewer.js.map +1 -1
  223. package/build/module/ComicViewer/ComicViewerProps.js.map +1 -1
  224. package/build/module/ComicViewer/EncodedTile.js +3 -0
  225. package/build/module/ComicViewer/EncodedTile.js.map +1 -0
  226. package/build/module/ComicViewer/ReloadButton.js +33 -0
  227. package/build/module/ComicViewer/ReloadButton.js.map +1 -0
  228. package/build/module/ComicViewer/ViewerItem.js +49 -59
  229. package/build/module/ComicViewer/ViewerItem.js.map +1 -1
  230. package/build/module/ComicViewer/index.js.map +1 -1
  231. package/build/module/DateTimePicker/DateTimePicker.js +2 -2
  232. package/build/module/DateTimePicker/DateTimePicker.js.map +1 -1
  233. package/build/module/DateTimePicker/DateTimePickerProps.js.map +1 -1
  234. package/build/module/DateTimePicker/DateTimePickerProvider.js.map +1 -1
  235. package/build/module/DateTimePicker/YearPicker.js +21 -17
  236. package/build/module/DateTimePicker/YearPicker.js.map +1 -1
  237. package/build/module/DateTimePicker/index.js.map +1 -1
  238. package/build/module/DateTimePicker/utils.js +2 -1
  239. package/build/module/DateTimePicker/utils.js.map +1 -1
  240. package/build/module/FlipCard/FlipCard.js +7 -7
  241. package/build/module/FlipCard/FlipCard.js.map +1 -1
  242. package/build/module/FlipCard/FlipCardProps.js.map +1 -1
  243. package/build/module/FlipCard/index.js.map +1 -1
  244. package/build/module/StatusBarProvider/Provider.js.map +1 -1
  245. package/build/module/StatusBarProvider/StatusBarProvider.js.map +1 -1
  246. package/build/module/StatusBarProvider/StatusBarProviderProps.js.map +1 -1
  247. package/build/module/StatusBarProvider/index.js.map +1 -1
  248. package/build/module/ViewPager/FluxContext.js +4 -0
  249. package/build/module/ViewPager/FluxContext.js.map +1 -0
  250. package/build/module/ViewPager/InternalContext.js +7 -0
  251. package/build/module/ViewPager/InternalContext.js.map +1 -0
  252. package/build/module/ViewPager/PageStateContext.js +7 -0
  253. package/build/module/ViewPager/PageStateContext.js.map +1 -0
  254. package/build/module/ViewPager/ViewPager.js +57 -0
  255. package/build/module/ViewPager/ViewPager.js.map +1 -0
  256. package/build/module/ViewPager/ViewPager.native.js +127 -0
  257. package/build/module/ViewPager/ViewPager.native.js.map +1 -0
  258. package/build/module/ViewPager/ViewPagerProps.js.map +1 -1
  259. package/build/module/ViewPager/components/ChildrenMemoizedPage.js +101 -0
  260. package/build/module/ViewPager/components/ChildrenMemoizedPage.js.map +1 -0
  261. package/build/module/ViewPager/components/FluxStoreProvider.js +20 -0
  262. package/build/module/ViewPager/components/FluxStoreProvider.js.map +1 -0
  263. package/build/module/ViewPager/components/index.js +3 -0
  264. package/build/module/ViewPager/components/index.js.map +1 -0
  265. package/build/module/ViewPager/hooks/index.js +8 -0
  266. package/build/module/ViewPager/hooks/index.js.map +1 -0
  267. package/build/module/ViewPager/hooks/useDispatch.js +10 -0
  268. package/build/module/ViewPager/hooks/useDispatch.js.map +1 -0
  269. package/build/module/ViewPager/hooks/useEagerState.js +12 -0
  270. package/build/module/ViewPager/hooks/useEagerState.js.map +1 -0
  271. package/build/module/ViewPager/hooks/useForceRender.js +7 -0
  272. package/build/module/ViewPager/hooks/useForceRender.js.map +1 -0
  273. package/build/module/ViewPager/hooks/useLazyState.js +30 -0
  274. package/build/module/ViewPager/hooks/useLazyState.js.map +1 -0
  275. package/build/module/ViewPager/hooks/usePageStore.js +25 -0
  276. package/build/module/ViewPager/hooks/usePageStore.js.map +1 -0
  277. package/build/module/ViewPager/hooks/useStore.js +14 -0
  278. package/build/module/ViewPager/hooks/useStore.js.map +1 -0
  279. package/build/module/ViewPager/hooks/useViewPagerPageState.js +7 -0
  280. package/build/module/ViewPager/hooks/useViewPagerPageState.js.map +1 -0
  281. package/build/module/ViewPager/index.js +3 -1
  282. package/build/module/ViewPager/index.js.map +1 -1
  283. package/build/module/ViewPager/types.js +2 -0
  284. package/build/module/ViewPager/types.js.map +1 -0
  285. package/build/module/ViewPager/utils.js +6 -33
  286. package/build/module/ViewPager/utils.js.map +1 -1
  287. package/build/module/ViewabilityTrackerView/Viewability.js +2 -0
  288. package/build/module/ViewabilityTrackerView/Viewability.js.map +1 -0
  289. package/build/module/ViewabilityTrackerView/ViewabilityTrackerView.js +28 -0
  290. package/build/module/ViewabilityTrackerView/ViewabilityTrackerView.js.map +1 -0
  291. package/build/module/ViewabilityTrackerView/ViewabilityTrackerViewProps.js +2 -0
  292. package/build/module/ViewabilityTrackerView/ViewabilityTrackerViewProps.js.map +1 -0
  293. package/build/module/ViewabilityTrackerView/index.js +2 -0
  294. package/build/module/ViewabilityTrackerView/index.js.map +1 -0
  295. package/build/module/ViewabilityTrackerView/measureViewability.js +34 -0
  296. package/build/module/ViewabilityTrackerView/measureViewability.js.map +1 -0
  297. package/build/module/ViewabilityTrackerView/useViewabilityTracker.js +73 -0
  298. package/build/module/ViewabilityTrackerView/useViewabilityTracker.js.map +1 -0
  299. package/build/module/hooks/index.js +2 -0
  300. package/build/module/hooks/index.js.map +1 -1
  301. package/build/module/hooks/useAppbarStyles.js.map +1 -1
  302. package/build/module/hooks/useDeferredExecutor.js +33 -0
  303. package/build/module/hooks/useDeferredExecutor.js.map +1 -0
  304. package/build/module/hooks/useElevationStyle.js.map +1 -1
  305. package/build/module/hooks/useHeight.js +4 -3
  306. package/build/module/hooks/useHeight.js.map +1 -1
  307. package/build/module/hooks/useIsMounted.js +13 -0
  308. package/build/module/hooks/useIsMounted.js.map +1 -0
  309. package/build/module/hooks/useUnstableCollapsibleAppBar.js +58 -45
  310. package/build/module/hooks/useUnstableCollapsibleAppBar.js.map +1 -1
  311. package/build/module/hooks/useUnstableToggleDisplayStyle.js +9 -7
  312. package/build/module/hooks/useUnstableToggleDisplayStyle.js.map +1 -1
  313. package/build/module/index.js +2 -0
  314. package/build/module/index.js.map +1 -1
  315. package/build/typescript/AnimatedY/AnimatedY.d.ts +0 -1
  316. package/build/typescript/BottomSheet/BottomSheet.d.ts +2 -0
  317. package/build/typescript/BottomSheet/BottomSheetNative.d.ts +0 -1
  318. package/build/typescript/BottomSheet/BottomSheetProps.d.ts +6 -1
  319. package/build/typescript/BottomSheet/BottomSheetWeb.d.ts +0 -1
  320. package/build/typescript/BottomSheet/TransparentBackdrop.d.ts +0 -1
  321. package/build/typescript/BottomSheet/useDynamicSnapPoints.d.ts +11 -0
  322. package/build/typescript/Carousel/Carousel.d.ts +5 -0
  323. package/build/typescript/Carousel/CarouselProps.d.ts +33 -48
  324. package/build/typescript/Carousel/animation/animationUtils.d.ts +1 -0
  325. package/build/typescript/Carousel/animation/createDefaultItemStyle.d.ts +2 -0
  326. package/build/typescript/Carousel/animation/createDefaultScrollAnimation.d.ts +2 -0
  327. package/build/typescript/Carousel/animation/index.d.ts +4 -0
  328. package/build/typescript/Carousel/animation/normalItemStyleFactory.d.ts +2 -0
  329. package/build/typescript/Carousel/animation/parallaxItemStyleFactory.d.ts +9 -0
  330. package/build/typescript/Carousel/components/InternalContext.d.ts +14 -0
  331. package/build/typescript/Carousel/components/ItemView.d.ts +9 -0
  332. package/build/typescript/Carousel/components/RootView.d.ts +16 -0
  333. package/build/typescript/Carousel/components/ScrollViewGesture.d.ts +12 -0
  334. package/build/typescript/Carousel/components/index.d.ts +4 -0
  335. package/build/typescript/Carousel/components/useItemInterpolation.d.ts +2 -0
  336. package/build/typescript/Carousel/hooks/index.d.ts +5 -0
  337. package/build/typescript/Carousel/hooks/useAutoplayController.d.ts +7 -0
  338. package/build/typescript/Carousel/hooks/useIndexController.d.ts +10 -0
  339. package/build/typescript/Carousel/hooks/useItemVisibilityStore.d.ts +7 -0
  340. package/build/typescript/Carousel/hooks/useLoopedData.d.ts +1 -0
  341. package/build/typescript/Carousel/hooks/usePagingAnimator.d.ts +17 -0
  342. package/build/typescript/Carousel/index.d.ts +3 -1
  343. package/build/typescript/Carousel/tick.d.ts +2 -0
  344. package/build/typescript/Carousel/types.d.ts +91 -0
  345. package/build/typescript/ComicViewer/ComicViewer.d.ts +1 -2
  346. package/build/typescript/ComicViewer/ComicViewerProps.d.ts +34 -44
  347. package/build/typescript/ComicViewer/EncodedTile.d.ts +2 -0
  348. package/build/typescript/ComicViewer/ReloadButton.d.ts +6 -0
  349. package/build/typescript/ComicViewer/ViewerItem.d.ts +37 -7
  350. package/build/typescript/ComicViewer/index.d.ts +2 -2
  351. package/build/typescript/DateTimePicker/DateTimePicker.d.ts +0 -1
  352. package/build/typescript/DateTimePicker/YearPicker.d.ts +0 -1
  353. package/build/typescript/FlipCard/FlipCard.d.ts +0 -1
  354. package/build/typescript/StatusBarProvider/StatusBarProvider.d.ts +0 -1
  355. package/build/typescript/ViewPager/FluxContext.d.ts +5 -0
  356. package/build/typescript/ViewPager/InternalContext.d.ts +7 -0
  357. package/build/typescript/ViewPager/PageStateContext.d.ts +6 -0
  358. package/build/typescript/ViewPager/ViewPager.d.ts +5 -0
  359. package/build/typescript/ViewPager/ViewPager.native.d.ts +5 -0
  360. package/build/typescript/ViewPager/ViewPagerProps.d.ts +18 -29
  361. package/build/typescript/ViewPager/components/ChildrenMemoizedPage.d.ts +14 -0
  362. package/build/typescript/ViewPager/components/FluxStoreProvider.d.ts +6 -0
  363. package/build/typescript/ViewPager/components/index.d.ts +2 -0
  364. package/build/typescript/ViewPager/hooks/index.d.ts +7 -0
  365. package/build/typescript/ViewPager/hooks/useDispatch.d.ts +2 -0
  366. package/build/typescript/ViewPager/hooks/useEagerState.d.ts +1 -0
  367. package/build/typescript/ViewPager/hooks/useForceRender.d.ts +2 -0
  368. package/build/typescript/ViewPager/hooks/useLazyState.d.ts +2 -0
  369. package/build/typescript/ViewPager/hooks/usePageStore.d.ts +2 -0
  370. package/build/typescript/ViewPager/hooks/useStore.d.ts +2 -0
  371. package/build/typescript/ViewPager/hooks/useViewPagerPageState.d.ts +1 -0
  372. package/build/typescript/ViewPager/index.d.ts +4 -1
  373. package/build/typescript/ViewPager/types.d.ts +12 -0
  374. package/build/typescript/ViewPager/utils.d.ts +5 -20
  375. package/build/typescript/ViewabilityTrackerView/Viewability.d.ts +3 -0
  376. package/build/typescript/ViewabilityTrackerView/ViewabilityTrackerView.d.ts +2 -0
  377. package/build/typescript/ViewabilityTrackerView/ViewabilityTrackerViewProps.d.ts +22 -0
  378. package/build/typescript/ViewabilityTrackerView/index.d.ts +2 -0
  379. package/build/typescript/ViewabilityTrackerView/measureViewability.d.ts +11 -0
  380. package/build/typescript/ViewabilityTrackerView/useViewabilityTracker.d.ts +11 -0
  381. package/build/typescript/hooks/index.d.ts +2 -0
  382. package/build/typescript/hooks/useDeferredExecutor.d.ts +11 -0
  383. package/build/typescript/hooks/useIsMounted.d.ts +4 -0
  384. package/build/typescript/hooks/useUnstableCollapsibleAppBar.d.ts +2 -3
  385. package/build/typescript/hooks/useUnstableToggleDisplayStyle.d.ts +2 -2
  386. package/build/typescript/index.d.ts +2 -0
  387. package/package.json +11 -25
  388. package/src/AnimatedY/AnimatedY.tsx +13 -10
  389. package/src/BottomSheet/BottomSheet.tsx +184 -0
  390. package/src/BottomSheet/BottomSheetNative.tsx +2 -0
  391. package/src/BottomSheet/BottomSheetProps.ts +7 -1
  392. package/src/BottomSheet/BottomSheetWeb.tsx +18 -5
  393. package/src/BottomSheet/useDynamicSnapPoints.ts +52 -0
  394. package/src/Carousel/Carousel.tsx +135 -0
  395. package/src/Carousel/CarouselProps.ts +42 -53
  396. package/src/Carousel/animation/animationUtils.ts +1 -0
  397. package/src/Carousel/animation/createDefaultItemStyle.ts +3 -0
  398. package/src/Carousel/animation/createDefaultScrollAnimation.ts +13 -0
  399. package/src/Carousel/animation/index.ts +4 -0
  400. package/src/Carousel/animation/normalItemStyleFactory.ts +19 -0
  401. package/src/Carousel/animation/parallaxItemStyleFactory.ts +79 -0
  402. package/src/Carousel/components/InternalContext.ts +33 -0
  403. package/src/Carousel/components/ItemView.tsx +66 -0
  404. package/src/Carousel/components/RootView.tsx +79 -0
  405. package/src/Carousel/components/ScrollViewGesture.tsx +92 -0
  406. package/src/Carousel/components/index.ts +4 -0
  407. package/src/Carousel/components/useItemInterpolation.ts +107 -0
  408. package/src/Carousel/hooks/index.ts +5 -0
  409. package/src/Carousel/hooks/useAutoplayController.ts +57 -0
  410. package/src/Carousel/hooks/useIndexController.tsx +57 -0
  411. package/src/Carousel/hooks/useItemVisibilityStore.ts +107 -0
  412. package/src/Carousel/hooks/useLoopedData.ts +26 -0
  413. package/src/Carousel/hooks/usePagingAnimator.ts +255 -0
  414. package/src/Carousel/index.ts +4 -2
  415. package/src/Carousel/tick.ts +6 -0
  416. package/src/Carousel/types.ts +114 -0
  417. package/src/ComicViewer/ComicViewer.tsx +220 -93
  418. package/src/ComicViewer/ComicViewerProps.ts +36 -48
  419. package/src/ComicViewer/EncodedTile.ts +3 -0
  420. package/src/ComicViewer/ReloadButton.tsx +36 -0
  421. package/src/ComicViewer/ViewerItem.tsx +91 -63
  422. package/src/ComicViewer/index.ts +2 -2
  423. package/src/DateTimePicker/DateTimePicker.tsx +2 -2
  424. package/src/FlipCard/FlipCard.tsx +8 -8
  425. package/src/ViewPager/FluxContext.ts +8 -0
  426. package/src/ViewPager/InternalContext.ts +13 -0
  427. package/src/ViewPager/PageStateContext.ts +11 -0
  428. package/src/ViewPager/ViewPager.native.tsx +150 -0
  429. package/src/ViewPager/ViewPager.tsx +69 -0
  430. package/src/ViewPager/ViewPagerProps.ts +20 -35
  431. package/src/ViewPager/components/ChildrenMemoizedPage.tsx +124 -0
  432. package/src/ViewPager/components/FluxStoreProvider.tsx +27 -0
  433. package/src/ViewPager/components/index.ts +2 -0
  434. package/src/ViewPager/hooks/index.ts +7 -0
  435. package/src/ViewPager/hooks/useDispatch.ts +11 -0
  436. package/src/ViewPager/hooks/useEagerState.ts +14 -0
  437. package/src/ViewPager/hooks/useForceRender.ts +7 -0
  438. package/src/ViewPager/hooks/useLazyState.ts +32 -0
  439. package/src/ViewPager/hooks/usePageStore.ts +30 -0
  440. package/src/ViewPager/hooks/useStore.ts +15 -0
  441. package/src/ViewPager/hooks/useViewPagerPageState.ts +6 -0
  442. package/src/ViewPager/index.ts +11 -2
  443. package/src/ViewPager/types.ts +15 -0
  444. package/src/ViewPager/utils.tsx +9 -56
  445. package/src/ViewabilityTrackerView/Viewability.ts +3 -0
  446. package/src/ViewabilityTrackerView/ViewabilityTrackerView.tsx +33 -0
  447. package/src/ViewabilityTrackerView/ViewabilityTrackerViewProps.ts +25 -0
  448. package/src/ViewabilityTrackerView/index.ts +2 -0
  449. package/src/ViewabilityTrackerView/measureViewability.ts +54 -0
  450. package/src/ViewabilityTrackerView/useViewabilityTracker.ts +85 -0
  451. package/src/hooks/index.ts +2 -0
  452. package/src/hooks/useDeferredExecutor.ts +46 -0
  453. package/src/hooks/useHeight.ts +2 -2
  454. package/src/hooks/useIsMounted.ts +19 -0
  455. package/src/hooks/useUnstableCollapsibleAppBar.ts +62 -45
  456. package/src/hooks/useUnstableToggleDisplayStyle.ts +8 -6
  457. package/src/index.ts +3 -0
  458. package/build/commonjs/Carousel/CarouselNative.js +0 -72
  459. package/build/commonjs/Carousel/CarouselNative.js.map +0 -1
  460. package/build/commonjs/Carousel/CarouselWeb.js +0 -237
  461. package/build/commonjs/Carousel/CarouselWeb.js.map +0 -1
  462. package/build/commonjs/Carousel/index.native.js.map +0 -1
  463. package/build/commonjs/Carousel/utils.js +0 -19
  464. package/build/commonjs/Carousel/utils.js.map +0 -1
  465. package/build/commonjs/ComicViewer/ComicViewerItemProps.js +0 -6
  466. package/build/commonjs/ComicViewer/ComicViewerItemProps.js.map +0 -1
  467. package/build/commonjs/ViewPager/ChildrenMemoizedPage.js +0 -49
  468. package/build/commonjs/ViewPager/ChildrenMemoizedPage.js.map +0 -1
  469. package/build/commonjs/ViewPager/ViewPagerNative.js +0 -72
  470. package/build/commonjs/ViewPager/ViewPagerNative.js.map +0 -1
  471. package/build/commonjs/ViewPager/ViewPagerWeb.js +0 -55
  472. package/build/commonjs/ViewPager/ViewPagerWeb.js.map +0 -1
  473. package/build/commonjs/ViewPager/index.native.js +0 -16
  474. package/build/commonjs/ViewPager/index.native.js.map +0 -1
  475. package/build/commonjs/hooks/useWidth.js +0 -29
  476. package/build/commonjs/hooks/useWidth.js.map +0 -1
  477. package/build/module/Carousel/CarouselNative.js +0 -54
  478. package/build/module/Carousel/CarouselNative.js.map +0 -1
  479. package/build/module/Carousel/CarouselWeb.js +0 -215
  480. package/build/module/Carousel/CarouselWeb.js.map +0 -1
  481. package/build/module/Carousel/index.native.js +0 -2
  482. package/build/module/Carousel/index.native.js.map +0 -1
  483. package/build/module/Carousel/utils.js +0 -7
  484. package/build/module/Carousel/utils.js.map +0 -1
  485. package/build/module/ComicViewer/ComicViewerItemProps.js +0 -2
  486. package/build/module/ComicViewer/ComicViewerItemProps.js.map +0 -1
  487. package/build/module/ViewPager/ChildrenMemoizedPage.js +0 -37
  488. package/build/module/ViewPager/ChildrenMemoizedPage.js.map +0 -1
  489. package/build/module/ViewPager/ViewPagerNative.js +0 -53
  490. package/build/module/ViewPager/ViewPagerNative.js.map +0 -1
  491. package/build/module/ViewPager/ViewPagerWeb.js +0 -41
  492. package/build/module/ViewPager/ViewPagerWeb.js.map +0 -1
  493. package/build/module/ViewPager/index.native.js +0 -2
  494. package/build/module/ViewPager/index.native.js.map +0 -1
  495. package/build/module/hooks/useWidth.js +0 -15
  496. package/build/module/hooks/useWidth.js.map +0 -1
  497. package/build/typescript/Carousel/CarouselNative.d.ts +0 -3
  498. package/build/typescript/Carousel/CarouselWeb.d.ts +0 -4
  499. package/build/typescript/Carousel/index.native.d.ts +0 -1
  500. package/build/typescript/Carousel/utils.d.ts +0 -6
  501. package/build/typescript/ComicViewer/ComicViewerItemProps.d.ts +0 -12
  502. package/build/typescript/ViewPager/ChildrenMemoizedPage.d.ts +0 -4
  503. package/build/typescript/ViewPager/ViewPagerNative.d.ts +0 -3
  504. package/build/typescript/ViewPager/ViewPagerWeb.d.ts +0 -3
  505. package/build/typescript/ViewPager/index.native.d.ts +0 -1
  506. package/build/typescript/hooks/useWidth.d.ts +0 -2
  507. package/src/Carousel/CarouselNative.tsx +0 -67
  508. package/src/Carousel/CarouselWeb.tsx +0 -222
  509. package/src/Carousel/index.native.ts +0 -1
  510. package/src/Carousel/utils.ts +0 -11
  511. package/src/ComicViewer/ComicViewerItemProps.ts +0 -15
  512. package/src/ViewPager/ChildrenMemoizedPage.tsx +0 -36
  513. package/src/ViewPager/ViewPagerNative.tsx +0 -66
  514. package/src/ViewPager/ViewPagerWeb.tsx +0 -52
  515. package/src/ViewPager/index.native.ts +0 -1
  516. package/src/hooks/useWidth.ts +0 -17
@@ -0,0 +1,202 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = usePagingAnimator;
7
+
8
+ var _react = require("react");
9
+
10
+ var _reactNative = require("react-native");
11
+
12
+ var _core = require("@fountain-ui/core");
13
+
14
+ function directionToValue(itemWidth) {
15
+ return function (direction) {
16
+ switch (direction) {
17
+ case 'next':
18
+ return -itemWidth;
19
+
20
+ case 'prev':
21
+ return itemWidth;
22
+
23
+ case 'stay':
24
+ return 0;
25
+ }
26
+ };
27
+ }
28
+
29
+ function toValueCompensator(itemWidth) {
30
+ return function (toValue, currentOffset) {
31
+ const remainder = Math.abs(currentOffset % itemWidth);
32
+ const halfOfItemWidth = Math.abs(itemWidth / 2);
33
+ const compensateVector = remainder > halfOfItemWidth ? remainder - itemWidth : remainder;
34
+ const direction = currentOffset > 0 ? -1 : 1;
35
+ return toValue + direction * compensateVector;
36
+ };
37
+ }
38
+
39
+ function usePagingAnimator(config) {
40
+ const {
41
+ createScrollAnimation,
42
+ itemWidth,
43
+ indexController,
44
+ initialIndex,
45
+ loop,
46
+ numberOfData
47
+ } = config;
48
+ const {
49
+ getCurrentIndex,
50
+ lastIndex,
51
+ notifyScrollStateHasChanged
52
+ } = indexController;
53
+ const initialOffsetX = itemWidth * initialIndex;
54
+ const accumulativeOffsetX = (0, _core.useAnimatedValue)(initialOffsetX);
55
+ const animationOffsetX = (0, _core.useAnimatedValue)(0);
56
+ const gestureTranslationX = (0, _core.useAnimatedValue)(0);
57
+ const globalInterpolation = (0, _react.useMemo)(() => {
58
+ return _reactNative.Animated.add(_reactNative.Animated.add(accumulativeOffsetX, animationOffsetX), gestureTranslationX);
59
+ }, []);
60
+ const toValueRef = (0, _react.useRef)(0);
61
+ const currentOffsetRef = (0, _react.useRef)(0);
62
+ const isAnimatingRef = (0, _react.useRef)(false);
63
+ const maxWidth = Math.abs(numberOfData * itemWidth);
64
+ const ensureOffsetBoundary = (0, _react.useCallback)(offset => {
65
+ if (loop) {
66
+ const isCloseToEnd = Math.abs(offset) >= maxWidth - itemWidth;
67
+
68
+ if (isCloseToEnd) {
69
+ const signOfOffset = offset > 0 ? 1 : -1;
70
+ return offset + -signOfOffset * maxWidth;
71
+ }
72
+ }
73
+
74
+ return offset % maxWidth;
75
+ }, [itemWidth, loop, maxWidth]);
76
+ const requireNewOffset = (0, _react.useCallback)(newOffset => {
77
+ const nextOffset = ensureOffsetBoundary(newOffset);
78
+ currentOffsetRef.current = nextOffset;
79
+ accumulativeOffsetX.setValue(nextOffset);
80
+ toValueRef.current = 0;
81
+ animationOffsetX.setValue(0);
82
+ }, [ensureOffsetBoundary]);
83
+ const interruptAnimation = (0, _react.useCallback)(() => {
84
+ if (!isAnimatingRef.current) {
85
+ return;
86
+ }
87
+
88
+ animationOffsetX.stopAnimation(lastValue => {
89
+ isAnimatingRef.current = false;
90
+ const prevOffset = currentOffsetRef.current;
91
+ const totalOffset = prevOffset + lastValue;
92
+ requireNewOffset(totalOffset);
93
+ notifyScrollStateHasChanged({
94
+ offset: totalOffset,
95
+ state: 'interrupted'
96
+ });
97
+ });
98
+ }, [notifyScrollStateHasChanged, requireNewOffset]);
99
+ const finalizeAnimation = (0, _react.useCallback)(() => {
100
+ isAnimatingRef.current = false;
101
+ const prevOffset = currentOffsetRef.current;
102
+ const toValue = toValueRef.current;
103
+ const totalOffset = prevOffset + toValue;
104
+ requireNewOffset(totalOffset);
105
+ notifyScrollStateHasChanged({
106
+ offset: totalOffset,
107
+ state: 'idle'
108
+ });
109
+ }, [notifyScrollStateHasChanged, requireNewOffset]);
110
+ const startPagingAnimation = (0, _react.useCallback)((type, config) => {
111
+ if (isAnimatingRef.current) {
112
+ return;
113
+ }
114
+
115
+ const configWithDefaults = {
116
+ animated: true,
117
+ ...config
118
+ };
119
+ const currentIndex = getCurrentIndex();
120
+ const getValueByDirectionOnAllAdjacentItemsVisible = directionToValue(itemWidth);
121
+ const compensateToValue = toValueCompensator(itemWidth);
122
+
123
+ const getValueByDirectionalPagingOnLoopDisabled = _config => {
124
+ const {
125
+ direction,
126
+ isOriginatedFromGesture
127
+ } = _config;
128
+
129
+ if (currentIndex === 0 && direction === 'prev') {
130
+ return isOriginatedFromGesture ? getValueByDirectionOnAllAdjacentItemsVisible('stay') : -lastIndex * itemWidth; // last position
131
+ } else if (currentIndex === lastIndex && direction === 'next') {
132
+ return isOriginatedFromGesture ? getValueByDirectionOnAllAdjacentItemsVisible('stay') : lastIndex * itemWidth; // first position
133
+ }
134
+
135
+ return getValueByDirectionOnAllAdjacentItemsVisible(direction);
136
+ };
137
+
138
+ const getValueByDirectionalPaging = _config => {
139
+ const _configWithDefaults = {
140
+ isOriginatedFromGesture: false,
141
+ ..._config
142
+ };
143
+ return loop ? getValueByDirectionOnAllAdjacentItemsVisible(_configWithDefaults.direction) : getValueByDirectionalPagingOnLoopDisabled(_configWithDefaults);
144
+ };
145
+
146
+ const getValueByIndexPaging = _ref => {
147
+ let {
148
+ index
149
+ } = _ref;
150
+
151
+ if (index < 0 || index > lastIndex || index === currentIndex) {
152
+ // no animation if index is invalid or equals to current index
153
+ return 0;
154
+ }
155
+
156
+ const distance = Math.abs(currentIndex - index) * itemWidth;
157
+ const direction = index > currentIndex ? -1 : 1;
158
+ return distance * direction;
159
+ };
160
+
161
+ const wantedToValue = type === 'directional' // @ts-ignore
162
+ ? getValueByDirectionalPaging(configWithDefaults) // @ts-ignore
163
+ : getValueByIndexPaging(configWithDefaults);
164
+ const toValue = compensateToValue(wantedToValue, currentOffsetRef.current);
165
+ toValueRef.current = toValue;
166
+ isAnimatingRef.current = true;
167
+ notifyScrollStateHasChanged({
168
+ offset: currentOffsetRef.current + toValue,
169
+ state: 'dragging'
170
+ });
171
+ const lastGestureTranslationX = configWithDefaults.lastGestureTranslationX ?? 0;
172
+
173
+ if (Number.isFinite(lastGestureTranslationX)) {
174
+ animationOffsetX.setValue(lastGestureTranslationX);
175
+ gestureTranslationX.setValue(0);
176
+ }
177
+
178
+ if (configWithDefaults.animated) {
179
+ const animation = createScrollAnimation(animationOffsetX, toValue);
180
+ animation.start(_ref2 => {
181
+ let {
182
+ finished
183
+ } = _ref2;
184
+
185
+ if (finished) {
186
+ finalizeAnimation();
187
+ }
188
+ });
189
+ } else {
190
+ finalizeAnimation();
191
+ }
192
+ }, [createScrollAnimation, getCurrentIndex, finalizeAnimation, itemWidth, lastIndex, loop, notifyScrollStateHasChanged]);
193
+ return {
194
+ gestureTranslationX,
195
+ globalInterpolation,
196
+ interruptAnimation,
197
+ startPagingAnimation
198
+ };
199
+ }
200
+
201
+ ;
202
+ //# sourceMappingURL=usePagingAnimator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["directionToValue","itemWidth","direction","toValueCompensator","toValue","currentOffset","remainder","Math","abs","halfOfItemWidth","compensateVector","usePagingAnimator","config","createScrollAnimation","indexController","initialIndex","loop","numberOfData","getCurrentIndex","lastIndex","notifyScrollStateHasChanged","initialOffsetX","accumulativeOffsetX","useAnimatedValue","animationOffsetX","gestureTranslationX","globalInterpolation","useMemo","Animated","add","toValueRef","useRef","currentOffsetRef","isAnimatingRef","maxWidth","ensureOffsetBoundary","useCallback","offset","isCloseToEnd","signOfOffset","requireNewOffset","newOffset","nextOffset","current","setValue","interruptAnimation","stopAnimation","lastValue","prevOffset","totalOffset","state","finalizeAnimation","startPagingAnimation","type","configWithDefaults","animated","currentIndex","getValueByDirectionOnAllAdjacentItemsVisible","compensateToValue","getValueByDirectionalPagingOnLoopDisabled","_config","isOriginatedFromGesture","getValueByDirectionalPaging","_configWithDefaults","getValueByIndexPaging","index","distance","wantedToValue","lastGestureTranslationX","Number","isFinite","animation","start","finished"],"sources":["usePagingAnimator.ts"],"sourcesContent":["import { useCallback, useMemo, useRef } from 'react';\nimport { Animated } from 'react-native';\nimport { useAnimatedValue } from '@fountain-ui/core';\nimport type {\n CreateScrollAnimation,\n DirectionalPagingAnimationConfig,\n IndexController,\n IndexPagingAnimationConfig,\n PagingAnimationConfig,\n PagingAnimationType,\n PagingDirection,\n StartPagingAnimation,\n} from '../types';\n\nexport interface PagingAnimatorConfig {\n createScrollAnimation: CreateScrollAnimation;\n itemWidth: number;\n indexController: IndexController;\n initialIndex: number;\n loop: boolean;\n numberOfData: number;\n}\n\nexport interface PagingAnimator {\n gestureTranslationX: Animated.Value;\n globalInterpolation: Animated.AnimatedInterpolation;\n interruptAnimation: () => void;\n startPagingAnimation: StartPagingAnimation;\n}\n\nfunction directionToValue(itemWidth: number) {\n return function (direction: PagingDirection): number {\n switch (direction) {\n case 'next':\n return -itemWidth;\n case 'prev':\n return itemWidth;\n case 'stay':\n return 0;\n }\n };\n}\n\nfunction toValueCompensator(itemWidth: number) {\n return function (toValue: number, currentOffset: number): number {\n const remainder = Math.abs(currentOffset % itemWidth);\n\n const halfOfItemWidth = Math.abs(itemWidth / 2);\n const compensateVector = remainder > halfOfItemWidth\n ? remainder - itemWidth\n : remainder;\n\n const direction = currentOffset > 0 ? -1 : 1;\n\n return toValue + (direction * compensateVector);\n };\n}\n\nexport default function usePagingAnimator(config: PagingAnimatorConfig): PagingAnimator {\n const {\n createScrollAnimation,\n itemWidth,\n indexController,\n initialIndex,\n loop,\n numberOfData,\n } = config;\n\n const {\n getCurrentIndex,\n lastIndex,\n notifyScrollStateHasChanged,\n } = indexController;\n\n const initialOffsetX = itemWidth * initialIndex;\n const accumulativeOffsetX = useAnimatedValue(initialOffsetX);\n const animationOffsetX = useAnimatedValue(0);\n const gestureTranslationX = useAnimatedValue(0);\n\n const globalInterpolation = useMemo(() => {\n return Animated.add(\n Animated.add(accumulativeOffsetX, animationOffsetX),\n gestureTranslationX,\n );\n }, []);\n\n const toValueRef = useRef<number>(0);\n const currentOffsetRef = useRef<number>(0);\n\n const isAnimatingRef = useRef<boolean>(false);\n\n const maxWidth = Math.abs(numberOfData * itemWidth);\n\n const ensureOffsetBoundary: (offset: number) => number = useCallback((offset: number) => {\n if (loop) {\n const isCloseToEnd = Math.abs(offset) >= (maxWidth - itemWidth);\n if (isCloseToEnd) {\n const signOfOffset = offset > 0 ? 1 : -1;\n return offset + (-signOfOffset * maxWidth);\n }\n }\n\n return offset % maxWidth;\n }, [itemWidth, loop, maxWidth]);\n\n const requireNewOffset = useCallback((newOffset: number) => {\n const nextOffset = ensureOffsetBoundary(newOffset);\n\n currentOffsetRef.current = nextOffset;\n accumulativeOffsetX.setValue(nextOffset);\n\n toValueRef.current = 0;\n animationOffsetX.setValue(0);\n }, [\n ensureOffsetBoundary,\n ]);\n\n const interruptAnimation = useCallback(() => {\n if (!isAnimatingRef.current) {\n return;\n }\n\n animationOffsetX.stopAnimation(lastValue => {\n isAnimatingRef.current = false;\n\n const prevOffset = currentOffsetRef.current;\n const totalOffset = prevOffset + lastValue;\n\n requireNewOffset(totalOffset);\n\n notifyScrollStateHasChanged({ offset: totalOffset, state: 'interrupted' });\n });\n }, [\n notifyScrollStateHasChanged,\n requireNewOffset,\n ]);\n\n const finalizeAnimation = useCallback(() => {\n isAnimatingRef.current = false;\n\n const prevOffset = currentOffsetRef.current;\n const toValue = toValueRef.current;\n const totalOffset = prevOffset + toValue;\n\n requireNewOffset(totalOffset);\n\n notifyScrollStateHasChanged({ offset: totalOffset, state: 'idle' });\n }, [\n notifyScrollStateHasChanged,\n requireNewOffset,\n ]);\n\n const startPagingAnimation = useCallback((type: PagingAnimationType, config: PagingAnimationConfig) => {\n if (isAnimatingRef.current) {\n return;\n }\n\n const configWithDefaults: PagingAnimationConfig = {\n animated: true,\n ...config,\n };\n\n const currentIndex = getCurrentIndex();\n\n const getValueByDirectionOnAllAdjacentItemsVisible = directionToValue(itemWidth);\n const compensateToValue = toValueCompensator(itemWidth);\n\n const getValueByDirectionalPagingOnLoopDisabled = (_config: DirectionalPagingAnimationConfig): number => {\n const { direction, isOriginatedFromGesture } = _config;\n\n if (currentIndex === 0 && direction === 'prev') {\n return isOriginatedFromGesture\n ? getValueByDirectionOnAllAdjacentItemsVisible('stay')\n : -lastIndex * itemWidth; // last position\n } else if (currentIndex === lastIndex && direction === 'next') {\n return isOriginatedFromGesture\n ? getValueByDirectionOnAllAdjacentItemsVisible('stay')\n : lastIndex * itemWidth; // first position\n }\n return getValueByDirectionOnAllAdjacentItemsVisible(direction);\n };\n\n const getValueByDirectionalPaging = (_config: DirectionalPagingAnimationConfig): number => {\n const _configWithDefaults: DirectionalPagingAnimationConfig = {\n isOriginatedFromGesture: false,\n ..._config,\n };\n\n return loop\n ? getValueByDirectionOnAllAdjacentItemsVisible(_configWithDefaults.direction)\n : getValueByDirectionalPagingOnLoopDisabled(_configWithDefaults);\n };\n\n const getValueByIndexPaging = ({ index }: IndexPagingAnimationConfig): number => {\n if (index < 0 || index > lastIndex || index === currentIndex) {\n // no animation if index is invalid or equals to current index\n return 0;\n }\n\n const distance = Math.abs(currentIndex - index) * itemWidth;\n const direction = index > currentIndex ? -1 : 1;\n\n return distance * direction;\n };\n\n const wantedToValue = type === 'directional'\n // @ts-ignore\n ? getValueByDirectionalPaging(configWithDefaults)\n // @ts-ignore\n : getValueByIndexPaging(configWithDefaults);\n\n const toValue = compensateToValue(wantedToValue, currentOffsetRef.current);\n\n toValueRef.current = toValue;\n isAnimatingRef.current = true;\n\n notifyScrollStateHasChanged({\n offset: currentOffsetRef.current + toValue,\n state: 'dragging',\n });\n\n const lastGestureTranslationX: number = configWithDefaults.lastGestureTranslationX ?? 0;\n if (Number.isFinite(lastGestureTranslationX)) {\n animationOffsetX.setValue(lastGestureTranslationX);\n gestureTranslationX.setValue(0);\n }\n\n if (configWithDefaults.animated) {\n const animation = createScrollAnimation(animationOffsetX, toValue);\n\n animation.start(({ finished }) => {\n if (finished) {\n finalizeAnimation();\n }\n });\n } else {\n finalizeAnimation();\n }\n }, [\n createScrollAnimation,\n getCurrentIndex,\n finalizeAnimation,\n itemWidth,\n lastIndex,\n loop,\n notifyScrollStateHasChanged,\n ]);\n\n return {\n gestureTranslationX,\n globalInterpolation,\n interruptAnimation,\n startPagingAnimation,\n };\n};\n"],"mappings":"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"}
@@ -6,11 +6,25 @@ Object.defineProperty(exports, "__esModule", {
6
6
  Object.defineProperty(exports, "default", {
7
7
  enumerable: true,
8
8
  get: function () {
9
- return _CarouselWeb.default;
9
+ return _Carousel.default;
10
10
  }
11
11
  });
12
+ Object.defineProperty(exports, "normalItemStyleFactory", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _animation.normalItemStyleFactory;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "parallaxItemStyleFactory", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _animation.parallaxItemStyleFactory;
22
+ }
23
+ });
24
+
25
+ var _Carousel = _interopRequireDefault(require("./Carousel"));
12
26
 
13
- var _CarouselWeb = _interopRequireDefault(require("./CarouselWeb"));
27
+ var _animation = require("./animation");
14
28
 
15
29
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
30
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA","sourcesContent":["export { default } from './CarouselWeb';\nexport type { default as CarouselProps } from './CarouselProps';"]}
1
+ {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export { default } from './Carousel';\nexport type { default as CarouselProps } from './CarouselProps';\nexport type { CarouselInstance } from './types';\nexport { normalItemStyleFactory, parallaxItemStyleFactory } from './animation';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAGA"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _utils = require("@fountain-ui/utils");
9
+
10
+ var _default = (0, _utils.logger)('Carousel', {
11
+ enabled: __DEV__,
12
+ format: 'diff'
13
+ });
14
+
15
+ exports.default = _default;
16
+ //# sourceMappingURL=tick.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["logger","enabled","__DEV__","format"],"sources":["tick.ts"],"sourcesContent":["import { logger } from '@fountain-ui/utils';\n\nexport default logger('Carousel', {\n enabled: __DEV__,\n format: 'diff',\n});\n"],"mappings":";;;;;;;AAAA;;eAEe,IAAAA,aAAA,EAAO,UAAP,EAAmB;EAC9BC,OAAO,EAAEC,OADqB;EAE9BC,MAAM,EAAE;AAFsB,CAAnB,C"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ const directions = ['next', 'prev', 'stay'];
7
+ const scrollStates = ['idle', 'dragging', 'interrupted'];
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["directions","scrollStates"],"sources":["types.ts"],"sourcesContent":["import type { ReactElement } from 'react';\nimport type { Animated, ViewProps } from 'react-native';\n\nconst directions = ['next', 'prev', 'stay'] as const;\n\nexport type PagingDirection = (typeof directions)[number];\n\nconst scrollStates = ['idle', 'dragging', 'interrupted'] as const;\n\nexport type ScrollState = (typeof scrollStates)[number];\n\nexport type ItemHeight = number | 'auto';\n\nexport interface RenderItem<T> {\n (info: { item: T, index: number, interpolation: Animated.AnimatedInterpolation }): ReactElement | null;\n}\n\nexport interface CreateScrollAnimation {\n (aValue: Animated.AnimatedValue, toValue: number): Animated.CompositeAnimation;\n}\n\nexport interface CreateItemStyle {\n (itemInterpolation: Animated.AnimatedInterpolation, itemWidth: number): Animated.AnimatedProps<ViewProps['style']>;\n}\n\nexport interface GetCurrentIndex {\n (): number;\n}\n\nexport interface OnIndexChange {\n (itemIndex: number): void;\n}\n\nexport interface OnPositionChange {\n (position: number): void;\n}\n\nexport interface ScrollStateChangeEvent {\n offset: number;\n state: ScrollState;\n}\n\nexport interface IndexController {\n getCurrentIndex: GetCurrentIndex;\n lastIndex: number;\n notifyScrollStateHasChanged: (event: ScrollStateChangeEvent) => void;\n}\n\nexport type PagingAnimationType = 'directional' | 'index';\n\nexport interface BasePagingAnimationConfig {\n animated?: boolean;\n lastGestureTranslationX?: number;\n}\n\nexport interface DirectionalPagingAnimationConfig extends BasePagingAnimationConfig {\n direction: PagingDirection;\n isOriginatedFromGesture?: boolean;\n}\n\nexport interface IndexPagingAnimationConfig extends BasePagingAnimationConfig {\n index: number;\n}\n\nexport type PagingAnimationConfig = DirectionalPagingAnimationConfig | IndexPagingAnimationConfig;\n\nexport interface StartPagingAnimation {\n (type: PagingAnimationType, config: PagingAnimationConfig): void;\n}\n\nexport type VisibleIndexRanges = Array<[number, number]>;\n\nexport interface StoreSubscription {\n (): void;\n}\n\nexport interface ItemVisibilityStore {\n dispatch: (ranges: VisibleIndexRanges) => void;\n subscribe: (listener: (ranges: VisibleIndexRanges) => void) => StoreSubscription;\n removeAllListeners: () => void;\n}\n\nexport interface AutoplayController {\n pause: () => void;\n resume: () => void;\n}\n\nexport interface ScrollToOption {\n index: number;\n animated?: boolean;\n}\n\nexport interface CarouselInstance {\n /**\n * Get current visible item index.\n */\n getCurrentIndex: GetCurrentIndex;\n\n /**\n * Scroll to next visible item.\n */\n next: () => void;\n\n /**\n * Scroll to previous visible item.\n */\n prev: () => void;\n\n /**\n * Scroll to desired indexed item.\n * Invalid index is ignored.\n */\n scrollTo: (option: ScrollToOption) => void;\n}\n"],"mappings":";;;;;AAGA,MAAMA,UAAU,GAAG,CAAC,MAAD,EAAS,MAAT,EAAiB,MAAjB,CAAnB;AAIA,MAAMC,YAAY,GAAG,CAAC,MAAD,EAAS,UAAT,EAAqB,aAArB,CAArB"}
@@ -11,6 +11,8 @@ var _reactNative = require("react-native");
11
11
 
12
12
  var R = _interopRequireWildcard(require("ramda"));
13
13
 
14
+ var _core = require("@fountain-ui/core");
15
+
14
16
  var _ViewerItem = _interopRequireDefault(require("./ViewerItem"));
15
17
 
16
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -19,124 +21,237 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
19
21
 
20
22
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
21
23
 
22
- function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
23
-
24
- const getItemHeights = items => R.map(content => content.height)(items);
24
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
25
25
 
26
26
  const appender = (left, right) => [left + right, left + right];
27
27
 
28
- const getHeightAccum = itemHeights => R.mapAccum(appender, 0, itemHeights);
28
+ const getHeightAccum = heights => R.mapAccum(appender, 0, heights);
29
+
30
+ const keyExtractor = item => String(item.index);
31
+
32
+ const createInitialImageState = dimension => ({
33
+ isNewUrlIncoming: false,
34
+ totalErrorCount: 0,
35
+ dimension
36
+ });
37
+
38
+ const mapImageStateToItemState = (index, imageState, autoHandleErrorCount) => {
39
+ var _imageState$urlState, _imageState$urlState2;
40
+
41
+ return {
42
+ index,
43
+ url: (_imageState$urlState = imageState.urlState) === null || _imageState$urlState === void 0 ? void 0 : _imageState$urlState.url,
44
+ reloadButtonVisible: ((_imageState$urlState2 = imageState.urlState) === null || _imageState$urlState2 === void 0 ? void 0 : _imageState$urlState2.validity) !== 'valid' && imageState.totalErrorCount >= autoHandleErrorCount,
45
+ dimension: imageState.dimension
46
+ };
47
+ };
29
48
 
30
- const keyExtractor = item => item.id;
49
+ const MAXIMUM_WIDTH = 720;
50
+ const NUMBER_OF_ADJACENT_ITEM = 5;
31
51
 
32
52
  function ComicViewer(props) {
33
53
  const {
34
- data,
35
- errorDebounceMillis = 500,
36
- errorRetryCount = 3,
54
+ debounceMillis = 100,
55
+ autoHandleErrorCount = 3,
56
+ getUrlByIndex,
37
57
  initialNumToRender = 1,
38
58
  initialScrollPercentage = 0,
39
59
  itemVisiblePercentThreshold = 0,
40
- onError,
41
- viewerWidth,
60
+ intrinsicDimensions,
61
+ onItemPress,
62
+ viewportWidth,
42
63
  windowSize = 3,
43
64
  ...otherProps
44
65
  } = props;
45
66
  const flatListRef = (0, _react.useRef)(null);
46
- const errors = (0, _react.useRef)(new Map());
47
- const debounceTimeOut = (0, _react.useRef)(null);
48
- const resourceString = R.toString(R.map(itemData => itemData.sourceUrl)(data));
49
- const initialItems = R.map(itemData => ({ ...itemData,
50
- isViewable: false,
51
- width: viewerWidth,
52
- height: itemData.height * viewerWidth / itemData.width
53
- }))(data);
54
- const [items, setItems] = (0, _react.useState)(initialItems);
55
- const itemHeights = getItemHeights(items);
56
- const itemHeightAccum = getHeightAccum(itemHeights);
67
+ const maybeLoadableItemsIndexRange = (0, _react.useRef)([-1, 0]);
68
+ const actualImageWidth = Math.min(viewportWidth, MAXIMUM_WIDTH);
69
+ const initialImageStates = (0, _react.useMemo)(() => R.map(createInitialImageState, intrinsicDimensions), []);
70
+ const imageStatesRef = (0, _react.useRef)(initialImageStates);
71
+
72
+ const mapImageStatesToItemStates = imageStates => {
73
+ return imageStates.map((image, index) => mapImageStateToItemState(index, image, autoHandleErrorCount));
74
+ };
75
+
76
+ const [itemStates, setItemStates] = (0, _react.useState)(() => {
77
+ return mapImageStatesToItemStates(imageStatesRef.current);
78
+ });
79
+ const renderedDimensions = (0, _react.useMemo)(() => {
80
+ return R.map(intrinsicDimension => ({
81
+ width: actualImageWidth,
82
+ height: intrinsicDimension.height * actualImageWidth / intrinsicDimension.width
83
+ }), intrinsicDimensions);
84
+ }, [actualImageWidth]);
85
+ const layoutFromDimensions = (0, _react.useCallback)(() => {
86
+ const itemHeights = R.map(dimension => dimension.height, renderedDimensions);
87
+ const [totalHeight, heightAccum] = getHeightAccum(itemHeights);
88
+ const itemOffsets = R.prepend(0, heightAccum);
89
+
90
+ const getItemLayout = (data, index) => ({
91
+ index,
92
+ length: itemHeights[index],
93
+ offset: itemOffsets[index]
94
+ });
95
+
96
+ return {
97
+ totalHeight,
98
+ getItemLayout
99
+ };
100
+ }, [renderedDimensions]);
101
+ const {
102
+ totalHeight,
103
+ getItemLayout
104
+ } = layoutFromDimensions();
57
105
  const viewabilityConfig = (0, _react.useMemo)(() => ({
58
106
  itemVisiblePercentThreshold
59
107
  }), [itemVisiblePercentThreshold]);
60
- const getItemLayout = (0, _react.useCallback)((data, index) => {
61
- const offsets = R.prepend(0, itemHeightAccum[1]);
62
- return {
63
- length: itemHeights[index],
64
- offset: offsets[index],
65
- index
66
- };
67
- }, [itemHeights]);
68
- const onViewableItemsChanged = (0, _react.useRef)(({
69
- viewableItems
70
- }) => {
71
- setItems(prev => {
72
- const viewableItemIds = R.map(viewableItem => viewableItem.item.id)(viewableItems);
73
- return R.map(prevItem => ({ ...prevItem,
74
- isViewable: R.includes(prevItem.id, viewableItemIds)
75
- }))([...prev]);
108
+
109
+ const updateImageState = updateFunction => {
110
+ const prevImageStates = imageStatesRef.current;
111
+ const newImageStates = prevImageStates.map(updateFunction);
112
+ imageStatesRef.current = newImageStates;
113
+ setItemStates(prevItemStates => {
114
+ const newItemStates = mapImageStatesToItemStates(newImageStates);
115
+ return R.equals(prevItemStates, newItemStates) ? prevItemStates : newItemStates;
76
116
  });
77
- });
117
+ };
78
118
 
79
- const onErrorHandler = errors => {
80
- const isRetryLimited = R.any(error => error.count >= errorRetryCount)(errors);
119
+ const loadUrlByIndex = async indexes => {
120
+ const filteredIndexes = R.filter(index => {
121
+ var _state$urlState;
81
122
 
82
- if (isRetryLimited) {
83
- return;
123
+ const state = imageStatesRef.current[index];
124
+ return R.isNil(state.urlState) || ((_state$urlState = state.urlState) === null || _state$urlState === void 0 ? void 0 : _state$urlState.validity) === 'invalid' && !state.isNewUrlIncoming;
125
+ }, indexes);
126
+ updateImageState((imageState, i) => {
127
+ return R.includes(i, filteredIndexes) ? { ...imageState,
128
+ isNewUrlIncoming: true
129
+ } : imageState;
130
+ });
131
+
132
+ try {
133
+ const urls = await getUrlByIndex(filteredIndexes);
134
+ updateImageState((imageState, i) => {
135
+ const newUrl = urls === null || urls === void 0 ? void 0 : urls.get(i);
136
+ const urlState = imageState.urlState;
137
+
138
+ if (newUrl !== undefined && (urlState === null || urlState === void 0 ? void 0 : urlState.validity) !== 'valid') {
139
+ return { ...imageState,
140
+ urlState: {
141
+ url: newUrl,
142
+ validity: 'unknown'
143
+ }
144
+ };
145
+ }
146
+
147
+ return imageState;
148
+ });
149
+ } finally {
150
+ updateImageState((imageState, i) => {
151
+ return R.includes(i, filteredIndexes) ? { ...imageState,
152
+ isNewUrlIncoming: false
153
+ } : imageState;
154
+ });
84
155
  }
156
+ };
85
157
 
86
- onError && onError(errors);
158
+ const loadMaybeLoadableItems = async () => {
159
+ const [startIndex, endIndex] = maybeLoadableItemsIndexRange.current;
160
+ const affectedIndexes = R.range(startIndex, endIndex);
161
+ await loadUrlByIndex(affectedIndexes);
87
162
  };
88
163
 
89
- const itemErrorHandler = (0, _react.useCallback)(errorInfo => {
90
- errors.current.set(errorInfo.id, errorInfo.count);
164
+ const loadItemsDebounce = (0, _core.useDebounce)(loadMaybeLoadableItems, debounceMillis);
165
+ const onViewableItemsChanged = (0, _react.useRef)(_ref => {
166
+ var _R$head, _R$last;
91
167
 
92
- if (debounceTimeOut.current) {
93
- clearTimeout(debounceTimeOut.current);
168
+ let {
169
+ viewableItems
170
+ } = _ref;
171
+ const orderedViewableItems = R.sort((a, b) => (a.index || 0) - (b.index || 0), viewableItems);
172
+ const firstViewableIndex = (_R$head = R.head(orderedViewableItems)) === null || _R$head === void 0 ? void 0 : _R$head.index;
173
+ const lastViewableItemIndex = (_R$last = R.last(orderedViewableItems)) === null || _R$last === void 0 ? void 0 : _R$last.index;
174
+
175
+ if (R.isNil(firstViewableIndex) || R.isNil(lastViewableItemIndex)) {
176
+ return;
94
177
  }
95
178
 
96
- debounceTimeOut.current = setTimeout(function () {
97
- const errorsArray = Array.from(errors.current.entries());
98
- const errorsInfo = R.map(([key, value]) => ({
99
- id: key,
100
- count: value
101
- }))(errorsArray);
102
- onErrorHandler([...errorsInfo]);
103
- errors.current.clear();
104
- }, errorDebounceMillis);
105
- }, [errorDebounceMillis, errors.current]);
106
- const renderItem = (0, _react.useCallback)(({
107
- item
108
- }) => {
109
- const props = { ...item,
110
- onError: itemErrorHandler
179
+ const startIndex = R.max(firstViewableIndex - NUMBER_OF_ADJACENT_ITEM, 0);
180
+ const endIndex = R.min(lastViewableItemIndex + NUMBER_OF_ADJACENT_ITEM, itemStates.length - 1);
181
+ maybeLoadableItemsIndexRange.current = [startIndex, endIndex + 1];
182
+ loadItemsDebounce();
183
+ });
184
+ const renderItem = (0, _react.useCallback)(_ref2 => {
185
+ var _renderedDimensions$i, _renderedDimensions$i2;
186
+
187
+ let {
188
+ item,
189
+ index
190
+ } = _ref2;
191
+
192
+ const onError = () => {
193
+ updateImageState((imageState, i) => {
194
+ const urlState = imageState.urlState;
195
+
196
+ if (i === index && urlState !== undefined) {
197
+ return { ...imageState,
198
+ totalErrorCount: imageState.totalErrorCount + 1,
199
+ urlState: { ...urlState,
200
+ validity: 'invalid'
201
+ }
202
+ };
203
+ }
204
+
205
+ return imageState;
206
+ });
207
+
208
+ if (item.reloadButtonVisible) {
209
+ return;
210
+ }
211
+
212
+ const [startIndex, endIndex] = maybeLoadableItemsIndexRange.current;
213
+
214
+ if (index >= startIndex || index < endIndex) {
215
+ loadItemsDebounce();
216
+ }
111
217
  };
112
- return /*#__PURE__*/_react.default.createElement(_ViewerItem.default, {
113
- props: props
114
- });
115
- }, []);
116
- (0, _react.useEffect)(() => {
117
- setItems(prev => {
118
- return R.map(prevItem => {
119
- const currentData = R.find(currentItemData => prevItem.id === currentItemData.id)(data);
120
218
 
121
- if (currentData && currentData.sourceUrl !== prevItem.sourceUrl) {
122
- return { ...prevItem,
123
- sourceUrl: currentData.sourceUrl
219
+ const onReloadPress = () => {
220
+ const [startIndex, endIndex] = maybeLoadableItemsIndexRange.current;
221
+
222
+ if (index >= startIndex || index < endIndex) {
223
+ loadUrlByIndex([index]);
224
+ }
225
+ };
226
+
227
+ const onLoad = () => {
228
+ updateImageState((imageState, i) => {
229
+ const urlState = imageState.urlState;
230
+
231
+ if (i === index && urlState !== undefined) {
232
+ return { ...imageState,
233
+ urlState: { ...urlState,
234
+ validity: 'valid'
235
+ }
124
236
  };
125
237
  }
126
238
 
127
- return prevItem;
128
- })([...prev]);
239
+ return imageState;
240
+ });
241
+ };
242
+
243
+ return /*#__PURE__*/_react.default.createElement(_ViewerItem.default, {
244
+ onError: onError,
245
+ onLoad: onLoad,
246
+ onPress: onItemPress,
247
+ onReloadPress: onReloadPress,
248
+ url: item.url,
249
+ width: ((_renderedDimensions$i = renderedDimensions[index]) === null || _renderedDimensions$i === void 0 ? void 0 : _renderedDimensions$i.width) ?? 0,
250
+ height: ((_renderedDimensions$i2 = renderedDimensions[index]) === null || _renderedDimensions$i2 === void 0 ? void 0 : _renderedDimensions$i2.height) ?? 0,
251
+ reloadButtonVisible: item.reloadButtonVisible
129
252
  });
130
- }, [resourceString]);
253
+ }, [onItemPress, renderedDimensions]);
131
254
  (0, _react.useEffect)(() => {
132
- const newItems = R.map(item => ({ ...item,
133
- width: viewerWidth,
134
- height: item.height * viewerWidth / item.width
135
- }))(items);
136
- setItems(newItems);
137
- }, [viewerWidth]);
138
- (0, _react.useEffect)(() => {
139
- const totalHeight = itemHeightAccum[0];
140
255
  const offset = Math.floor(initialScrollPercentage / 100 * totalHeight);
141
256
 
142
257
  if (flatListRef.current) {
@@ -145,9 +260,9 @@ function ComicViewer(props) {
145
260
  animated: false
146
261
  });
147
262
  }
148
- }, [flatListRef.current]);
263
+ }, []);
149
264
  return /*#__PURE__*/_react.default.createElement(_reactNative.FlatList, _extends({
150
- data: items,
265
+ data: itemStates,
151
266
  getItemLayout: getItemLayout,
152
267
  initialNumToRender: initialNumToRender,
153
268
  keyExtractor: keyExtractor,