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

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 +203 -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 +201 -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 +39 -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 +222 -93
  418. package/src/ComicViewer/ComicViewerProps.ts +42 -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,238 @@ 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
+ maxContentWidth = MAXIMUM_WIDTH,
62
+ onItemPress,
63
+ viewportWidth,
42
64
  windowSize = 3,
43
65
  ...otherProps
44
66
  } = props;
45
67
  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);
68
+ const maybeLoadableItemsIndexRange = (0, _react.useRef)([-1, 0]);
69
+ const actualImageWidth = Math.min(viewportWidth, maxContentWidth);
70
+ const initialImageStates = (0, _react.useMemo)(() => R.map(createInitialImageState, intrinsicDimensions), []);
71
+ const imageStatesRef = (0, _react.useRef)(initialImageStates);
72
+
73
+ const mapImageStatesToItemStates = imageStates => {
74
+ return imageStates.map((image, index) => mapImageStateToItemState(index, image, autoHandleErrorCount));
75
+ };
76
+
77
+ const [itemStates, setItemStates] = (0, _react.useState)(() => {
78
+ return mapImageStatesToItemStates(imageStatesRef.current);
79
+ });
80
+ const renderedDimensions = (0, _react.useMemo)(() => {
81
+ return R.map(intrinsicDimension => ({
82
+ width: actualImageWidth,
83
+ height: intrinsicDimension.height * actualImageWidth / intrinsicDimension.width
84
+ }), intrinsicDimensions);
85
+ }, [actualImageWidth]);
86
+ const layoutFromDimensions = (0, _react.useCallback)(() => {
87
+ const itemHeights = R.map(dimension => dimension.height, renderedDimensions);
88
+ const [totalHeight, heightAccum] = getHeightAccum(itemHeights);
89
+ const itemOffsets = R.prepend(0, heightAccum);
90
+
91
+ const getItemLayout = (data, index) => ({
92
+ index,
93
+ length: itemHeights[index],
94
+ offset: itemOffsets[index]
95
+ });
96
+
97
+ return {
98
+ totalHeight,
99
+ getItemLayout
100
+ };
101
+ }, [renderedDimensions]);
102
+ const {
103
+ totalHeight,
104
+ getItemLayout
105
+ } = layoutFromDimensions();
57
106
  const viewabilityConfig = (0, _react.useMemo)(() => ({
58
107
  itemVisiblePercentThreshold
59
108
  }), [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]);
109
+
110
+ const updateImageState = updateFunction => {
111
+ const prevImageStates = imageStatesRef.current;
112
+ const newImageStates = prevImageStates.map(updateFunction);
113
+ imageStatesRef.current = newImageStates;
114
+ setItemStates(prevItemStates => {
115
+ const newItemStates = mapImageStatesToItemStates(newImageStates);
116
+ return R.equals(prevItemStates, newItemStates) ? prevItemStates : newItemStates;
76
117
  });
77
- });
118
+ };
78
119
 
79
- const onErrorHandler = errors => {
80
- const isRetryLimited = R.any(error => error.count >= errorRetryCount)(errors);
120
+ const loadUrlByIndex = async indexes => {
121
+ const filteredIndexes = R.filter(index => {
122
+ var _state$urlState;
81
123
 
82
- if (isRetryLimited) {
83
- return;
124
+ const state = imageStatesRef.current[index];
125
+ return R.isNil(state.urlState) || ((_state$urlState = state.urlState) === null || _state$urlState === void 0 ? void 0 : _state$urlState.validity) === 'invalid' && !state.isNewUrlIncoming;
126
+ }, indexes);
127
+ updateImageState((imageState, i) => {
128
+ return R.includes(i, filteredIndexes) ? { ...imageState,
129
+ isNewUrlIncoming: true
130
+ } : imageState;
131
+ });
132
+
133
+ try {
134
+ const urls = await getUrlByIndex(filteredIndexes);
135
+ updateImageState((imageState, i) => {
136
+ const newUrl = urls === null || urls === void 0 ? void 0 : urls.get(i);
137
+ const urlState = imageState.urlState;
138
+
139
+ if (newUrl !== undefined && (urlState === null || urlState === void 0 ? void 0 : urlState.validity) !== 'valid') {
140
+ return { ...imageState,
141
+ urlState: {
142
+ url: newUrl,
143
+ validity: 'unknown'
144
+ }
145
+ };
146
+ }
147
+
148
+ return imageState;
149
+ });
150
+ } finally {
151
+ updateImageState((imageState, i) => {
152
+ return R.includes(i, filteredIndexes) ? { ...imageState,
153
+ isNewUrlIncoming: false
154
+ } : imageState;
155
+ });
84
156
  }
157
+ };
85
158
 
86
- onError && onError(errors);
159
+ const loadMaybeLoadableItems = async () => {
160
+ const [startIndex, endIndex] = maybeLoadableItemsIndexRange.current;
161
+ const affectedIndexes = R.range(startIndex, endIndex);
162
+ await loadUrlByIndex(affectedIndexes);
87
163
  };
88
164
 
89
- const itemErrorHandler = (0, _react.useCallback)(errorInfo => {
90
- errors.current.set(errorInfo.id, errorInfo.count);
165
+ const loadItemsDebounce = (0, _core.useDebounce)(loadMaybeLoadableItems, debounceMillis);
166
+ const onViewableItemsChanged = (0, _react.useRef)(_ref => {
167
+ var _R$head, _R$last;
91
168
 
92
- if (debounceTimeOut.current) {
93
- clearTimeout(debounceTimeOut.current);
169
+ let {
170
+ viewableItems
171
+ } = _ref;
172
+ const orderedViewableItems = R.sort((a, b) => (a.index || 0) - (b.index || 0), viewableItems);
173
+ const firstViewableIndex = (_R$head = R.head(orderedViewableItems)) === null || _R$head === void 0 ? void 0 : _R$head.index;
174
+ const lastViewableItemIndex = (_R$last = R.last(orderedViewableItems)) === null || _R$last === void 0 ? void 0 : _R$last.index;
175
+
176
+ if (R.isNil(firstViewableIndex) || R.isNil(lastViewableItemIndex)) {
177
+ return;
94
178
  }
95
179
 
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
180
+ const startIndex = R.max(firstViewableIndex - NUMBER_OF_ADJACENT_ITEM, 0);
181
+ const endIndex = R.min(lastViewableItemIndex + NUMBER_OF_ADJACENT_ITEM, itemStates.length - 1);
182
+ maybeLoadableItemsIndexRange.current = [startIndex, endIndex + 1];
183
+ loadItemsDebounce();
184
+ });
185
+ const renderItem = (0, _react.useCallback)(_ref2 => {
186
+ var _renderedDimensions$i, _renderedDimensions$i2;
187
+
188
+ let {
189
+ item,
190
+ index
191
+ } = _ref2;
192
+
193
+ const onError = () => {
194
+ updateImageState((imageState, i) => {
195
+ const urlState = imageState.urlState;
196
+
197
+ if (i === index && urlState !== undefined) {
198
+ return { ...imageState,
199
+ totalErrorCount: imageState.totalErrorCount + 1,
200
+ urlState: { ...urlState,
201
+ validity: 'invalid'
202
+ }
203
+ };
204
+ }
205
+
206
+ return imageState;
207
+ });
208
+
209
+ if (item.reloadButtonVisible) {
210
+ return;
211
+ }
212
+
213
+ const [startIndex, endIndex] = maybeLoadableItemsIndexRange.current;
214
+
215
+ if (index >= startIndex || index < endIndex) {
216
+ loadItemsDebounce();
217
+ }
111
218
  };
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
219
 
121
- if (currentData && currentData.sourceUrl !== prevItem.sourceUrl) {
122
- return { ...prevItem,
123
- sourceUrl: currentData.sourceUrl
220
+ const onReloadPress = () => {
221
+ const [startIndex, endIndex] = maybeLoadableItemsIndexRange.current;
222
+
223
+ if (index >= startIndex || index < endIndex) {
224
+ loadUrlByIndex([index]);
225
+ }
226
+ };
227
+
228
+ const onLoad = () => {
229
+ updateImageState((imageState, i) => {
230
+ const urlState = imageState.urlState;
231
+
232
+ if (i === index && urlState !== undefined) {
233
+ return { ...imageState,
234
+ urlState: { ...urlState,
235
+ validity: 'valid'
236
+ }
124
237
  };
125
238
  }
126
239
 
127
- return prevItem;
128
- })([...prev]);
240
+ return imageState;
241
+ });
242
+ };
243
+
244
+ return /*#__PURE__*/_react.default.createElement(_ViewerItem.default, {
245
+ onError: onError,
246
+ onLoad: onLoad,
247
+ onPress: onItemPress,
248
+ onReloadPress: onReloadPress,
249
+ url: item.url,
250
+ width: ((_renderedDimensions$i = renderedDimensions[index]) === null || _renderedDimensions$i === void 0 ? void 0 : _renderedDimensions$i.width) ?? 0,
251
+ height: ((_renderedDimensions$i2 = renderedDimensions[index]) === null || _renderedDimensions$i2 === void 0 ? void 0 : _renderedDimensions$i2.height) ?? 0,
252
+ reloadButtonVisible: item.reloadButtonVisible
129
253
  });
130
- }, [resourceString]);
254
+ }, [onItemPress, renderedDimensions]);
131
255
  (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
256
  const offset = Math.floor(initialScrollPercentage / 100 * totalHeight);
141
257
 
142
258
  if (flatListRef.current) {
@@ -145,14 +261,15 @@ function ComicViewer(props) {
145
261
  animated: false
146
262
  });
147
263
  }
148
- }, [flatListRef.current]);
264
+ }, []);
149
265
  return /*#__PURE__*/_react.default.createElement(_reactNative.FlatList, _extends({
150
- data: items,
266
+ data: itemStates,
151
267
  getItemLayout: getItemLayout,
152
268
  initialNumToRender: initialNumToRender,
153
269
  keyExtractor: keyExtractor,
154
270
  onViewableItemsChanged: onViewableItemsChanged.current,
155
271
  ref: flatListRef,
272
+ removeClippedSubviews: false,
156
273
  renderItem: renderItem,
157
274
  viewabilityConfig: viewabilityConfig,
158
275
  windowSize: windowSize