@fountain-ui/lab 2.0.0-beta.8 → 2.0.0-beta.81

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 (484) hide show
  1. package/build/commonjs/AnimatedY/AnimatedY.js +8 -10
  2. package/build/commonjs/AnimatedY/AnimatedY.js.map +1 -1
  3. package/build/commonjs/BottomSheet/BottomSheetNative.js +65 -7
  4. package/build/commonjs/BottomSheet/BottomSheetNative.js.map +1 -1
  5. package/build/commonjs/BottomSheet/BottomSheetProps.js.map +1 -1
  6. package/build/commonjs/BottomSheet/BottomSheetWeb.js +41 -13
  7. package/build/commonjs/BottomSheet/BottomSheetWeb.js.map +1 -1
  8. package/build/commonjs/BottomSheet/useDynamicSnapPoints.js +65 -0
  9. package/build/commonjs/BottomSheet/useDynamicSnapPoints.js.map +1 -0
  10. package/build/commonjs/Carousel/Carousel.js +130 -0
  11. package/build/commonjs/Carousel/Carousel.js.map +1 -0
  12. package/build/commonjs/Carousel/CarouselProps.js.map +1 -1
  13. package/build/commonjs/Carousel/animation/animationUtils.js +9 -0
  14. package/build/commonjs/Carousel/animation/animationUtils.js.map +1 -0
  15. package/build/commonjs/Carousel/animation/createDefaultItemStyle.js +15 -0
  16. package/build/commonjs/Carousel/animation/createDefaultItemStyle.js.map +1 -0
  17. package/build/commonjs/Carousel/animation/createDefaultScrollAnimation.js +26 -0
  18. package/build/commonjs/Carousel/animation/createDefaultScrollAnimation.js.map +1 -0
  19. package/build/commonjs/Carousel/animation/index.js +40 -0
  20. package/build/commonjs/Carousel/animation/index.js.map +1 -0
  21. package/build/commonjs/Carousel/animation/normalItemStyleFactory.js +27 -0
  22. package/build/commonjs/Carousel/animation/normalItemStyleFactory.js.map +1 -0
  23. package/build/commonjs/Carousel/animation/parallaxItemStyleFactory.js +65 -0
  24. package/build/commonjs/Carousel/animation/parallaxItemStyleFactory.js.map +1 -0
  25. package/build/commonjs/Carousel/components/InternalContext.js +29 -0
  26. package/build/commonjs/Carousel/components/InternalContext.js.map +1 -0
  27. package/build/commonjs/Carousel/components/ItemView.js +66 -0
  28. package/build/commonjs/Carousel/components/ItemView.js.map +1 -0
  29. package/build/commonjs/Carousel/components/RootView.js +86 -0
  30. package/build/commonjs/Carousel/components/RootView.js.map +1 -0
  31. package/build/commonjs/Carousel/components/ScrollViewGesture.js +84 -0
  32. package/build/commonjs/Carousel/components/ScrollViewGesture.js.map +1 -0
  33. package/build/commonjs/Carousel/components/index.js +40 -0
  34. package/build/commonjs/Carousel/components/index.js.map +1 -0
  35. package/build/commonjs/Carousel/components/useItemInterpolation.js +65 -0
  36. package/build/commonjs/Carousel/components/useItemInterpolation.js.map +1 -0
  37. package/build/commonjs/Carousel/hooks/index.js +48 -0
  38. package/build/commonjs/Carousel/hooks/index.js.map +1 -0
  39. package/build/commonjs/Carousel/hooks/useAutoplayController.js +58 -0
  40. package/build/commonjs/Carousel/hooks/useAutoplayController.js.map +1 -0
  41. package/build/commonjs/Carousel/hooks/useIndexController.js +55 -0
  42. package/build/commonjs/Carousel/hooks/useIndexController.js.map +1 -0
  43. package/build/commonjs/Carousel/hooks/useItemVisibilityStore.js +95 -0
  44. package/build/commonjs/Carousel/hooks/useItemVisibilityStore.js.map +1 -0
  45. package/build/commonjs/Carousel/hooks/useLoopedData.js +33 -0
  46. package/build/commonjs/Carousel/hooks/useLoopedData.js.map +1 -0
  47. package/build/commonjs/Carousel/hooks/usePagingAnimator.js +202 -0
  48. package/build/commonjs/Carousel/hooks/usePagingAnimator.js.map +1 -0
  49. package/build/commonjs/Carousel/index.js +16 -2
  50. package/build/commonjs/Carousel/index.js.map +1 -1
  51. package/build/commonjs/Carousel/tick.js +16 -0
  52. package/build/commonjs/Carousel/tick.js.map +1 -0
  53. package/build/commonjs/Carousel/types.js +8 -0
  54. package/build/commonjs/Carousel/types.js.map +1 -0
  55. package/build/commonjs/ComicViewer/ComicViewer.js +230 -92
  56. package/build/commonjs/ComicViewer/ComicViewer.js.map +1 -1
  57. package/build/commonjs/ComicViewer/ComicViewerProps.js.map +1 -1
  58. package/build/commonjs/ComicViewer/EncodedTile.js +10 -0
  59. package/build/commonjs/ComicViewer/EncodedTile.js.map +1 -0
  60. package/build/commonjs/ComicViewer/FastScroll.js +175 -0
  61. package/build/commonjs/ComicViewer/FastScroll.js.map +1 -0
  62. package/build/commonjs/ComicViewer/{ComicViewerItemProps.js → FastScrollProps.js} +1 -1
  63. package/build/commonjs/ComicViewer/FastScrollProps.js.map +1 -0
  64. package/build/commonjs/ComicViewer/ReloadButton.js +48 -0
  65. package/build/commonjs/ComicViewer/ReloadButton.js.map +1 -0
  66. package/build/commonjs/ComicViewer/ViewerItem.js +53 -59
  67. package/build/commonjs/ComicViewer/ViewerItem.js.map +1 -1
  68. package/build/commonjs/ComicViewer/index.js.map +1 -1
  69. package/build/commonjs/ComicViewer/util.js +27 -0
  70. package/build/commonjs/ComicViewer/util.js.map +1 -0
  71. package/build/commonjs/DateTimePicker/DateTimePicker.js +10 -1
  72. package/build/commonjs/DateTimePicker/DateTimePicker.js.map +1 -1
  73. package/build/commonjs/FlipCard/FlipCard.js +2 -2
  74. package/build/commonjs/FlipCard/FlipCard.js.map +1 -1
  75. package/build/commonjs/StatusBarProvider/Provider.js.map +1 -1
  76. package/build/commonjs/StatusBarProvider/StatusBarProvider.js +111 -2
  77. package/build/commonjs/StatusBarProvider/StatusBarProvider.js.map +1 -1
  78. package/build/commonjs/ViewPager/FluxContext.js +13 -0
  79. package/build/commonjs/ViewPager/FluxContext.js.map +1 -0
  80. package/build/commonjs/ViewPager/InternalContext.js +17 -0
  81. package/build/commonjs/ViewPager/InternalContext.js.map +1 -0
  82. package/build/commonjs/ViewPager/PageStateContext.js +14 -0
  83. package/build/commonjs/ViewPager/PageStateContext.js.map +1 -0
  84. package/build/commonjs/ViewPager/ViewPager.js +81 -0
  85. package/build/commonjs/ViewPager/ViewPager.js.map +1 -0
  86. package/build/commonjs/ViewPager/ViewPager.native.js +152 -0
  87. package/build/commonjs/ViewPager/ViewPager.native.js.map +1 -0
  88. package/build/commonjs/ViewPager/ViewPagerProps.js.map +1 -1
  89. package/build/commonjs/ViewPager/components/ChildrenMemoizedPage.js +122 -0
  90. package/build/commonjs/ViewPager/components/ChildrenMemoizedPage.js.map +1 -0
  91. package/build/commonjs/ViewPager/components/FluxStoreProvider.js +37 -0
  92. package/build/commonjs/ViewPager/components/FluxStoreProvider.js.map +1 -0
  93. package/build/commonjs/ViewPager/components/index.js +24 -0
  94. package/build/commonjs/ViewPager/components/index.js.map +1 -0
  95. package/build/commonjs/ViewPager/hooks/index.js +64 -0
  96. package/build/commonjs/ViewPager/hooks/index.js.map +1 -0
  97. package/build/commonjs/ViewPager/hooks/useDispatch.js +22 -0
  98. package/build/commonjs/ViewPager/hooks/useDispatch.js.map +1 -0
  99. package/build/commonjs/ViewPager/hooks/useEagerState.js +24 -0
  100. package/build/commonjs/ViewPager/hooks/useEagerState.js.map +1 -0
  101. package/build/commonjs/ViewPager/hooks/useForceRender.js +16 -0
  102. package/build/commonjs/ViewPager/hooks/useForceRender.js.map +1 -0
  103. package/build/commonjs/ViewPager/hooks/useLazyState.js +43 -0
  104. package/build/commonjs/ViewPager/hooks/useLazyState.js.map +1 -0
  105. package/build/commonjs/ViewPager/hooks/usePageStore.js +35 -0
  106. package/build/commonjs/ViewPager/hooks/usePageStore.js.map +1 -0
  107. package/build/commonjs/ViewPager/hooks/useStore.js +26 -0
  108. package/build/commonjs/ViewPager/hooks/useStore.js.map +1 -0
  109. package/build/commonjs/ViewPager/hooks/useViewPagerPageState.js +19 -0
  110. package/build/commonjs/ViewPager/hooks/useViewPagerPageState.js.map +1 -0
  111. package/build/commonjs/ViewPager/index.js +42 -2
  112. package/build/commonjs/ViewPager/index.js.map +1 -1
  113. package/build/commonjs/ViewPager/types.js +2 -0
  114. package/build/commonjs/ViewPager/types.js.map +1 -0
  115. package/build/commonjs/ViewPager/utils.js +12 -45
  116. package/build/commonjs/ViewPager/utils.js.map +1 -1
  117. package/build/commonjs/ViewabilityTrackerView/Viewability.js +2 -0
  118. package/build/commonjs/ViewabilityTrackerView/Viewability.js.map +1 -0
  119. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerView.js +45 -0
  120. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerView.js.map +1 -0
  121. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerViewProps.js +2 -0
  122. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerViewProps.js.map +1 -0
  123. package/build/commonjs/{Carousel/index.native.js → ViewabilityTrackerView/index.js} +3 -3
  124. package/build/commonjs/ViewabilityTrackerView/index.js.map +1 -0
  125. package/build/commonjs/ViewabilityTrackerView/measureViewability.js +42 -0
  126. package/build/commonjs/ViewabilityTrackerView/measureViewability.js.map +1 -0
  127. package/build/commonjs/ViewabilityTrackerView/useViewabilityTracker.js +88 -0
  128. package/build/commonjs/ViewabilityTrackerView/useViewabilityTracker.js.map +1 -0
  129. package/build/commonjs/hooks/index.js +16 -0
  130. package/build/commonjs/hooks/index.js.map +1 -1
  131. package/build/commonjs/hooks/useDeferredExecutor.js +45 -0
  132. package/build/commonjs/hooks/useDeferredExecutor.js.map +1 -0
  133. package/build/commonjs/hooks/useHeight.js +4 -4
  134. package/build/commonjs/hooks/useHeight.js.map +1 -1
  135. package/build/commonjs/hooks/useIsMounted.js +22 -0
  136. package/build/commonjs/hooks/useIsMounted.js.map +1 -0
  137. package/build/commonjs/hooks/useUnstableCollapsibleAppBar.js +19 -25
  138. package/build/commonjs/hooks/useUnstableCollapsibleAppBar.js.map +1 -1
  139. package/build/commonjs/hooks/useUnstableToggleDisplayStyle.js +2 -2
  140. package/build/commonjs/hooks/useUnstableToggleDisplayStyle.js.map +1 -1
  141. package/build/commonjs/index.js +22 -1
  142. package/build/commonjs/index.js.map +1 -1
  143. package/build/module/AnimatedY/AnimatedY.js +8 -7
  144. package/build/module/AnimatedY/AnimatedY.js.map +1 -1
  145. package/build/module/BottomSheet/BottomSheetNative.js +64 -9
  146. package/build/module/BottomSheet/BottomSheetNative.js.map +1 -1
  147. package/build/module/BottomSheet/BottomSheetProps.js.map +1 -1
  148. package/build/module/BottomSheet/BottomSheetWeb.js +40 -14
  149. package/build/module/BottomSheet/BottomSheetWeb.js.map +1 -1
  150. package/build/module/BottomSheet/useDynamicSnapPoints.js +52 -0
  151. package/build/module/BottomSheet/useDynamicSnapPoints.js.map +1 -0
  152. package/build/module/Carousel/Carousel.js +109 -0
  153. package/build/module/Carousel/Carousel.js.map +1 -0
  154. package/build/module/Carousel/CarouselProps.js.map +1 -1
  155. package/build/module/Carousel/animation/animationUtils.js +2 -0
  156. package/build/module/Carousel/animation/animationUtils.js.map +1 -0
  157. package/build/module/Carousel/animation/createDefaultItemStyle.js +3 -0
  158. package/build/module/Carousel/animation/createDefaultItemStyle.js.map +1 -0
  159. package/build/module/Carousel/animation/createDefaultScrollAnimation.js +12 -0
  160. package/build/module/Carousel/animation/createDefaultScrollAnimation.js.map +1 -0
  161. package/build/module/Carousel/animation/index.js +5 -0
  162. package/build/module/Carousel/animation/index.js.map +1 -0
  163. package/build/module/Carousel/animation/normalItemStyleFactory.js +18 -0
  164. package/build/module/Carousel/animation/normalItemStyleFactory.js.map +1 -0
  165. package/build/module/Carousel/animation/parallaxItemStyleFactory.js +55 -0
  166. package/build/module/Carousel/animation/parallaxItemStyleFactory.js.map +1 -0
  167. package/build/module/Carousel/components/InternalContext.js +19 -0
  168. package/build/module/Carousel/components/InternalContext.js.map +1 -0
  169. package/build/module/Carousel/components/ItemView.js +46 -0
  170. package/build/module/Carousel/components/ItemView.js.map +1 -0
  171. package/build/module/Carousel/components/RootView.js +65 -0
  172. package/build/module/Carousel/components/RootView.js.map +1 -0
  173. package/build/module/Carousel/components/ScrollViewGesture.js +69 -0
  174. package/build/module/Carousel/components/ScrollViewGesture.js.map +1 -0
  175. package/build/module/Carousel/components/index.js +5 -0
  176. package/build/module/Carousel/components/index.js.map +1 -0
  177. package/build/module/Carousel/components/useItemInterpolation.js +51 -0
  178. package/build/module/Carousel/components/useItemInterpolation.js.map +1 -0
  179. package/build/module/Carousel/hooks/index.js +6 -0
  180. package/build/module/Carousel/hooks/index.js.map +1 -0
  181. package/build/module/Carousel/hooks/useAutoplayController.js +48 -0
  182. package/build/module/Carousel/hooks/useAutoplayController.js.map +1 -0
  183. package/build/module/Carousel/hooks/useIndexController.js +44 -0
  184. package/build/module/Carousel/hooks/useIndexController.js.map +1 -0
  185. package/build/module/Carousel/hooks/useItemVisibilityStore.js +86 -0
  186. package/build/module/Carousel/hooks/useItemVisibilityStore.js.map +1 -0
  187. package/build/module/Carousel/hooks/useLoopedData.js +24 -0
  188. package/build/module/Carousel/hooks/useLoopedData.js.map +1 -0
  189. package/build/module/Carousel/hooks/usePagingAnimator.js +192 -0
  190. package/build/module/Carousel/hooks/usePagingAnimator.js.map +1 -0
  191. package/build/module/Carousel/index.js +2 -1
  192. package/build/module/Carousel/index.js.map +1 -1
  193. package/build/module/Carousel/tick.js +6 -0
  194. package/build/module/Carousel/tick.js.map +1 -0
  195. package/build/module/Carousel/types.js +4 -0
  196. package/build/module/Carousel/types.js.map +1 -0
  197. package/build/module/ComicViewer/ComicViewer.js +229 -93
  198. package/build/module/ComicViewer/ComicViewer.js.map +1 -1
  199. package/build/module/ComicViewer/ComicViewerProps.js.map +1 -1
  200. package/build/module/ComicViewer/EncodedTile.js +3 -0
  201. package/build/module/ComicViewer/EncodedTile.js.map +1 -0
  202. package/build/module/ComicViewer/FastScroll.js +152 -0
  203. package/build/module/ComicViewer/FastScroll.js.map +1 -0
  204. package/build/module/ComicViewer/FastScrollProps.js +2 -0
  205. package/build/module/ComicViewer/FastScrollProps.js.map +1 -0
  206. package/build/module/ComicViewer/ReloadButton.js +33 -0
  207. package/build/module/ComicViewer/ReloadButton.js.map +1 -0
  208. package/build/module/ComicViewer/ViewerItem.js +53 -60
  209. package/build/module/ComicViewer/ViewerItem.js.map +1 -1
  210. package/build/module/ComicViewer/index.js.map +1 -1
  211. package/build/module/ComicViewer/util.js +15 -0
  212. package/build/module/ComicViewer/util.js.map +1 -0
  213. package/build/module/DateTimePicker/DateTimePicker.js +11 -2
  214. package/build/module/DateTimePicker/DateTimePicker.js.map +1 -1
  215. package/build/module/FlipCard/FlipCard.js +2 -2
  216. package/build/module/FlipCard/FlipCard.js.map +1 -1
  217. package/build/module/StatusBarProvider/Provider.js.map +1 -1
  218. package/build/module/StatusBarProvider/StatusBarProvider.js +105 -2
  219. package/build/module/StatusBarProvider/StatusBarProvider.js.map +1 -1
  220. package/build/module/ViewPager/FluxContext.js +4 -0
  221. package/build/module/ViewPager/FluxContext.js.map +1 -0
  222. package/build/module/ViewPager/InternalContext.js +7 -0
  223. package/build/module/ViewPager/InternalContext.js.map +1 -0
  224. package/build/module/ViewPager/PageStateContext.js +5 -0
  225. package/build/module/ViewPager/PageStateContext.js.map +1 -0
  226. package/build/module/ViewPager/ViewPager.js +57 -0
  227. package/build/module/ViewPager/ViewPager.js.map +1 -0
  228. package/build/module/ViewPager/ViewPager.native.js +129 -0
  229. package/build/module/ViewPager/ViewPager.native.js.map +1 -0
  230. package/build/module/ViewPager/ViewPagerProps.js.map +1 -1
  231. package/build/module/ViewPager/components/ChildrenMemoizedPage.js +101 -0
  232. package/build/module/ViewPager/components/ChildrenMemoizedPage.js.map +1 -0
  233. package/build/module/ViewPager/components/FluxStoreProvider.js +20 -0
  234. package/build/module/ViewPager/components/FluxStoreProvider.js.map +1 -0
  235. package/build/module/ViewPager/components/index.js +3 -0
  236. package/build/module/ViewPager/components/index.js.map +1 -0
  237. package/build/module/ViewPager/hooks/index.js +8 -0
  238. package/build/module/ViewPager/hooks/index.js.map +1 -0
  239. package/build/module/ViewPager/hooks/useDispatch.js +10 -0
  240. package/build/module/ViewPager/hooks/useDispatch.js.map +1 -0
  241. package/build/module/ViewPager/hooks/useEagerState.js +12 -0
  242. package/build/module/ViewPager/hooks/useEagerState.js.map +1 -0
  243. package/build/module/ViewPager/hooks/useForceRender.js +7 -0
  244. package/build/module/ViewPager/hooks/useForceRender.js.map +1 -0
  245. package/build/module/ViewPager/hooks/useLazyState.js +28 -0
  246. package/build/module/ViewPager/hooks/useLazyState.js.map +1 -0
  247. package/build/module/ViewPager/hooks/usePageStore.js +25 -0
  248. package/build/module/ViewPager/hooks/usePageStore.js.map +1 -0
  249. package/build/module/ViewPager/hooks/useStore.js +14 -0
  250. package/build/module/ViewPager/hooks/useStore.js.map +1 -0
  251. package/build/module/ViewPager/hooks/useViewPagerPageState.js +7 -0
  252. package/build/module/ViewPager/hooks/useViewPagerPageState.js.map +1 -0
  253. package/build/module/ViewPager/index.js +3 -1
  254. package/build/module/ViewPager/index.js.map +1 -1
  255. package/build/module/ViewPager/types.js +2 -0
  256. package/build/module/ViewPager/types.js.map +1 -0
  257. package/build/module/ViewPager/utils.js +6 -34
  258. package/build/module/ViewPager/utils.js.map +1 -1
  259. package/build/module/ViewabilityTrackerView/Viewability.js +2 -0
  260. package/build/module/ViewabilityTrackerView/Viewability.js.map +1 -0
  261. package/build/module/ViewabilityTrackerView/ViewabilityTrackerView.js +28 -0
  262. package/build/module/ViewabilityTrackerView/ViewabilityTrackerView.js.map +1 -0
  263. package/build/module/ViewabilityTrackerView/ViewabilityTrackerViewProps.js +2 -0
  264. package/build/module/ViewabilityTrackerView/ViewabilityTrackerViewProps.js.map +1 -0
  265. package/build/module/ViewabilityTrackerView/index.js +2 -0
  266. package/build/module/ViewabilityTrackerView/index.js.map +1 -0
  267. package/build/module/ViewabilityTrackerView/measureViewability.js +34 -0
  268. package/build/module/ViewabilityTrackerView/measureViewability.js.map +1 -0
  269. package/build/module/ViewabilityTrackerView/useViewabilityTracker.js +73 -0
  270. package/build/module/ViewabilityTrackerView/useViewabilityTracker.js.map +1 -0
  271. package/build/module/hooks/index.js +2 -0
  272. package/build/module/hooks/index.js.map +1 -1
  273. package/build/module/hooks/useDeferredExecutor.js +33 -0
  274. package/build/module/hooks/useDeferredExecutor.js.map +1 -0
  275. package/build/module/hooks/useHeight.js +2 -3
  276. package/build/module/hooks/useHeight.js.map +1 -1
  277. package/build/module/hooks/useIsMounted.js +13 -0
  278. package/build/module/hooks/useIsMounted.js.map +1 -0
  279. package/build/module/hooks/useUnstableCollapsibleAppBar.js +19 -19
  280. package/build/module/hooks/useUnstableCollapsibleAppBar.js.map +1 -1
  281. package/build/module/hooks/useUnstableToggleDisplayStyle.js +2 -2
  282. package/build/module/hooks/useUnstableToggleDisplayStyle.js.map +1 -1
  283. package/build/module/index.js +2 -0
  284. package/build/module/index.js.map +1 -1
  285. package/build/typescript/AnimatedY/AnimatedY.d.ts +1 -0
  286. package/build/typescript/BottomSheet/BottomSheetNative.d.ts +1 -0
  287. package/build/typescript/BottomSheet/BottomSheetProps.d.ts +32 -1
  288. package/build/typescript/BottomSheet/BottomSheetWeb.d.ts +1 -0
  289. package/build/typescript/BottomSheet/TransparentBackdrop.d.ts +1 -0
  290. package/build/typescript/BottomSheet/useDynamicSnapPoints.d.ts +12 -0
  291. package/build/typescript/Carousel/Carousel.d.ts +5 -0
  292. package/build/typescript/Carousel/CarouselProps.d.ts +33 -48
  293. package/build/typescript/Carousel/animation/animationUtils.d.ts +1 -0
  294. package/build/typescript/Carousel/animation/createDefaultItemStyle.d.ts +2 -0
  295. package/build/typescript/Carousel/animation/createDefaultScrollAnimation.d.ts +2 -0
  296. package/build/typescript/Carousel/animation/index.d.ts +4 -0
  297. package/build/typescript/Carousel/animation/normalItemStyleFactory.d.ts +2 -0
  298. package/build/typescript/Carousel/animation/parallaxItemStyleFactory.d.ts +9 -0
  299. package/build/typescript/Carousel/components/InternalContext.d.ts +14 -0
  300. package/build/typescript/Carousel/components/ItemView.d.ts +9 -0
  301. package/build/typescript/Carousel/components/RootView.d.ts +16 -0
  302. package/build/typescript/Carousel/components/ScrollViewGesture.d.ts +12 -0
  303. package/build/typescript/Carousel/components/index.d.ts +4 -0
  304. package/build/typescript/Carousel/components/useItemInterpolation.d.ts +2 -0
  305. package/build/typescript/Carousel/hooks/index.d.ts +5 -0
  306. package/build/typescript/Carousel/hooks/useAutoplayController.d.ts +7 -0
  307. package/build/typescript/Carousel/hooks/useIndexController.d.ts +10 -0
  308. package/build/typescript/Carousel/hooks/useItemVisibilityStore.d.ts +7 -0
  309. package/build/typescript/Carousel/hooks/useLoopedData.d.ts +1 -0
  310. package/build/typescript/Carousel/hooks/usePagingAnimator.d.ts +17 -0
  311. package/build/typescript/Carousel/index.d.ts +3 -1
  312. package/build/typescript/Carousel/tick.d.ts +2 -0
  313. package/build/typescript/Carousel/types.d.ts +91 -0
  314. package/build/typescript/ComicViewer/ComicViewer.d.ts +2 -1
  315. package/build/typescript/ComicViewer/ComicViewerProps.d.ts +61 -43
  316. package/build/typescript/ComicViewer/EncodedTile.d.ts +2 -0
  317. package/build/typescript/ComicViewer/FastScroll.d.ts +4 -0
  318. package/build/typescript/ComicViewer/FastScrollProps.d.ts +74 -0
  319. package/build/typescript/ComicViewer/ReloadButton.d.ts +7 -0
  320. package/build/typescript/ComicViewer/ViewerItem.d.ts +46 -7
  321. package/build/typescript/ComicViewer/index.d.ts +3 -2
  322. package/build/typescript/ComicViewer/util.d.ts +2 -0
  323. package/build/typescript/DateTimePicker/DateTimePicker.d.ts +1 -0
  324. package/build/typescript/DateTimePicker/YearPicker.d.ts +1 -0
  325. package/build/typescript/FlipCard/FlipCard.d.ts +1 -0
  326. package/build/typescript/StatusBarProvider/Provider.d.ts +13 -0
  327. package/build/typescript/StatusBarProvider/StatusBarProvider.d.ts +1 -0
  328. package/build/typescript/ViewPager/FluxContext.d.ts +5 -0
  329. package/build/typescript/ViewPager/InternalContext.d.ts +7 -0
  330. package/build/typescript/ViewPager/PageStateContext.d.ts +6 -0
  331. package/build/typescript/ViewPager/ViewPager.d.ts +5 -0
  332. package/build/typescript/ViewPager/ViewPager.native.d.ts +5 -0
  333. package/build/typescript/ViewPager/ViewPagerProps.d.ts +21 -27
  334. package/build/typescript/ViewPager/components/ChildrenMemoizedPage.d.ts +14 -0
  335. package/build/typescript/ViewPager/components/FluxStoreProvider.d.ts +6 -0
  336. package/build/typescript/ViewPager/components/index.d.ts +2 -0
  337. package/build/typescript/ViewPager/hooks/index.d.ts +7 -0
  338. package/build/typescript/ViewPager/hooks/useDispatch.d.ts +2 -0
  339. package/build/typescript/ViewPager/hooks/useEagerState.d.ts +1 -0
  340. package/build/typescript/ViewPager/hooks/useForceRender.d.ts +2 -0
  341. package/build/typescript/ViewPager/hooks/useLazyState.d.ts +2 -0
  342. package/build/typescript/ViewPager/hooks/usePageStore.d.ts +2 -0
  343. package/build/typescript/ViewPager/hooks/useStore.d.ts +2 -0
  344. package/build/typescript/ViewPager/hooks/useViewPagerPageState.d.ts +1 -0
  345. package/build/typescript/ViewPager/index.d.ts +4 -1
  346. package/build/typescript/ViewPager/types.d.ts +12 -0
  347. package/build/typescript/ViewPager/utils.d.ts +5 -20
  348. package/build/typescript/ViewabilityTrackerView/Viewability.d.ts +3 -0
  349. package/build/typescript/ViewabilityTrackerView/ViewabilityTrackerView.d.ts +3 -0
  350. package/build/typescript/ViewabilityTrackerView/ViewabilityTrackerViewProps.d.ts +22 -0
  351. package/build/typescript/ViewabilityTrackerView/index.d.ts +2 -0
  352. package/build/typescript/ViewabilityTrackerView/measureViewability.d.ts +11 -0
  353. package/build/typescript/ViewabilityTrackerView/useViewabilityTracker.d.ts +11 -0
  354. package/build/typescript/hooks/index.d.ts +2 -0
  355. package/build/typescript/hooks/useDeferredExecutor.d.ts +11 -0
  356. package/build/typescript/hooks/useIsMounted.d.ts +4 -0
  357. package/build/typescript/index.d.ts +2 -0
  358. package/package.json +9 -24
  359. package/src/AnimatedY/AnimatedY.tsx +10 -7
  360. package/src/BottomSheet/BottomSheetNative.tsx +68 -6
  361. package/src/BottomSheet/BottomSheetProps.ts +38 -1
  362. package/src/BottomSheet/BottomSheetWeb.tsx +54 -16
  363. package/src/BottomSheet/useDynamicSnapPoints.ts +73 -0
  364. package/src/Carousel/Carousel.tsx +135 -0
  365. package/src/Carousel/CarouselProps.ts +42 -53
  366. package/src/Carousel/animation/animationUtils.ts +1 -0
  367. package/src/Carousel/animation/createDefaultItemStyle.ts +3 -0
  368. package/src/Carousel/animation/createDefaultScrollAnimation.ts +14 -0
  369. package/src/Carousel/animation/index.ts +4 -0
  370. package/src/Carousel/animation/normalItemStyleFactory.ts +19 -0
  371. package/src/Carousel/animation/parallaxItemStyleFactory.ts +79 -0
  372. package/src/Carousel/components/InternalContext.ts +33 -0
  373. package/src/Carousel/components/ItemView.tsx +66 -0
  374. package/src/Carousel/components/RootView.tsx +79 -0
  375. package/src/Carousel/components/ScrollViewGesture.tsx +93 -0
  376. package/src/Carousel/components/index.ts +4 -0
  377. package/src/Carousel/components/useItemInterpolation.ts +107 -0
  378. package/src/Carousel/hooks/index.ts +5 -0
  379. package/src/Carousel/hooks/useAutoplayController.ts +57 -0
  380. package/src/Carousel/hooks/useIndexController.tsx +57 -0
  381. package/src/Carousel/hooks/useItemVisibilityStore.ts +107 -0
  382. package/src/Carousel/hooks/useLoopedData.ts +26 -0
  383. package/src/Carousel/hooks/usePagingAnimator.ts +255 -0
  384. package/src/Carousel/index.ts +4 -2
  385. package/src/Carousel/tick.ts +6 -0
  386. package/src/Carousel/types.ts +114 -0
  387. package/src/ComicViewer/ComicViewer.tsx +268 -106
  388. package/src/ComicViewer/ComicViewerProps.ts +66 -44
  389. package/src/ComicViewer/EncodedTile.ts +3 -0
  390. package/src/ComicViewer/FastScroll.tsx +176 -0
  391. package/src/ComicViewer/FastScrollProps.ts +88 -0
  392. package/src/ComicViewer/ReloadButton.tsx +36 -0
  393. package/src/ComicViewer/ViewerItem.tsx +104 -62
  394. package/src/ComicViewer/index.ts +8 -2
  395. package/src/ComicViewer/util.ts +15 -0
  396. package/src/DateTimePicker/DateTimePicker.tsx +9 -1
  397. package/src/FlipCard/FlipCard.tsx +2 -2
  398. package/src/StatusBarProvider/Provider.ts +14 -0
  399. package/src/StatusBarProvider/StatusBarProvider.tsx +103 -1
  400. package/src/ViewPager/FluxContext.ts +8 -0
  401. package/src/ViewPager/InternalContext.ts +13 -0
  402. package/src/ViewPager/PageStateContext.ts +11 -0
  403. package/src/ViewPager/ViewPager.native.tsx +152 -0
  404. package/src/ViewPager/ViewPager.tsx +69 -0
  405. package/src/ViewPager/ViewPagerProps.ts +25 -34
  406. package/src/ViewPager/components/ChildrenMemoizedPage.tsx +124 -0
  407. package/src/ViewPager/components/FluxStoreProvider.tsx +27 -0
  408. package/src/ViewPager/components/index.ts +2 -0
  409. package/src/ViewPager/hooks/index.ts +7 -0
  410. package/src/ViewPager/hooks/useDispatch.ts +11 -0
  411. package/src/ViewPager/hooks/useEagerState.ts +14 -0
  412. package/src/ViewPager/hooks/useForceRender.ts +7 -0
  413. package/src/ViewPager/hooks/useLazyState.ts +32 -0
  414. package/src/ViewPager/hooks/usePageStore.ts +30 -0
  415. package/src/ViewPager/hooks/useStore.ts +15 -0
  416. package/src/ViewPager/hooks/useViewPagerPageState.ts +6 -0
  417. package/src/ViewPager/index.ts +11 -2
  418. package/src/ViewPager/types.ts +15 -0
  419. package/src/ViewPager/utils.tsx +9 -56
  420. package/src/ViewabilityTrackerView/Viewability.ts +3 -0
  421. package/src/ViewabilityTrackerView/ViewabilityTrackerView.tsx +33 -0
  422. package/src/ViewabilityTrackerView/ViewabilityTrackerViewProps.ts +25 -0
  423. package/src/ViewabilityTrackerView/index.ts +2 -0
  424. package/src/ViewabilityTrackerView/measureViewability.ts +54 -0
  425. package/src/ViewabilityTrackerView/useViewabilityTracker.ts +85 -0
  426. package/src/hooks/index.ts +2 -0
  427. package/src/hooks/useDeferredExecutor.ts +46 -0
  428. package/src/hooks/useHeight.ts +3 -4
  429. package/src/hooks/useIsMounted.ts +19 -0
  430. package/src/hooks/useUnstableCollapsibleAppBar.ts +17 -13
  431. package/src/hooks/useUnstableToggleDisplayStyle.ts +2 -1
  432. package/src/index.ts +3 -0
  433. package/build/commonjs/Carousel/CarouselNative.js +0 -72
  434. package/build/commonjs/Carousel/CarouselNative.js.map +0 -1
  435. package/build/commonjs/Carousel/CarouselWeb.js +0 -237
  436. package/build/commonjs/Carousel/CarouselWeb.js.map +0 -1
  437. package/build/commonjs/Carousel/index.native.js.map +0 -1
  438. package/build/commonjs/Carousel/utils.js +0 -19
  439. package/build/commonjs/Carousel/utils.js.map +0 -1
  440. package/build/commonjs/ComicViewer/ComicViewerItemProps.js.map +0 -1
  441. package/build/commonjs/ViewPager/ChildrenMemoizedPage.js +0 -49
  442. package/build/commonjs/ViewPager/ChildrenMemoizedPage.js.map +0 -1
  443. package/build/commonjs/ViewPager/ViewPagerNative.js +0 -75
  444. package/build/commonjs/ViewPager/ViewPagerNative.js.map +0 -1
  445. package/build/commonjs/ViewPager/ViewPagerWeb.js +0 -55
  446. package/build/commonjs/ViewPager/ViewPagerWeb.js.map +0 -1
  447. package/build/commonjs/ViewPager/index.native.js +0 -16
  448. package/build/commonjs/ViewPager/index.native.js.map +0 -1
  449. package/build/module/Carousel/CarouselNative.js +0 -54
  450. package/build/module/Carousel/CarouselNative.js.map +0 -1
  451. package/build/module/Carousel/CarouselWeb.js +0 -215
  452. package/build/module/Carousel/CarouselWeb.js.map +0 -1
  453. package/build/module/Carousel/index.native.js +0 -2
  454. package/build/module/Carousel/index.native.js.map +0 -1
  455. package/build/module/Carousel/utils.js +0 -7
  456. package/build/module/Carousel/utils.js.map +0 -1
  457. package/build/module/ComicViewer/ComicViewerItemProps.js +0 -2
  458. package/build/module/ComicViewer/ComicViewerItemProps.js.map +0 -1
  459. package/build/module/ViewPager/ChildrenMemoizedPage.js +0 -37
  460. package/build/module/ViewPager/ChildrenMemoizedPage.js.map +0 -1
  461. package/build/module/ViewPager/ViewPagerNative.js +0 -58
  462. package/build/module/ViewPager/ViewPagerNative.js.map +0 -1
  463. package/build/module/ViewPager/ViewPagerWeb.js +0 -41
  464. package/build/module/ViewPager/ViewPagerWeb.js.map +0 -1
  465. package/build/module/ViewPager/index.native.js +0 -2
  466. package/build/module/ViewPager/index.native.js.map +0 -1
  467. package/build/typescript/Carousel/CarouselNative.d.ts +0 -2
  468. package/build/typescript/Carousel/CarouselWeb.d.ts +0 -4
  469. package/build/typescript/Carousel/index.native.d.ts +0 -1
  470. package/build/typescript/Carousel/utils.d.ts +0 -6
  471. package/build/typescript/ComicViewer/ComicViewerItemProps.d.ts +0 -12
  472. package/build/typescript/ViewPager/ChildrenMemoizedPage.d.ts +0 -4
  473. package/build/typescript/ViewPager/ViewPagerNative.d.ts +0 -2
  474. package/build/typescript/ViewPager/ViewPagerWeb.d.ts +0 -2
  475. package/build/typescript/ViewPager/index.native.d.ts +0 -1
  476. package/src/Carousel/CarouselNative.tsx +0 -67
  477. package/src/Carousel/CarouselWeb.tsx +0 -222
  478. package/src/Carousel/index.native.ts +0 -1
  479. package/src/Carousel/utils.ts +0 -11
  480. package/src/ComicViewer/ComicViewerItemProps.ts +0 -15
  481. package/src/ViewPager/ChildrenMemoizedPage.tsx +0 -36
  482. package/src/ViewPager/ViewPagerNative.tsx +0 -73
  483. package/src/ViewPager/ViewPagerWeb.tsx +0 -52
  484. package/src/ViewPager/index.native.ts +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","useMemo","useRef","Animated","useAnimatedValue","directionToValue","itemWidth","direction","toValueCompensator","toValue","currentOffset","remainder","Math","abs","halfOfItemWidth","compensateVector","usePagingAnimator","config","createScrollAnimation","indexController","initialIndex","loop","numberOfData","getCurrentIndex","lastIndex","notifyScrollStateHasChanged","initialOffsetX","accumulativeOffsetX","animationOffsetX","gestureTranslationX","globalInterpolation","add","toValueRef","currentOffsetRef","isAnimatingRef","maxWidth","ensureOffsetBoundary","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":"AAAA,SAASA,WAAT,EAAsBC,OAAtB,EAA+BC,MAA/B,QAA6C,OAA7C;AACA,SAASC,QAAT,QAAyB,cAAzB;AACA,SAASC,gBAAT,QAAiC,mBAAjC;;AA4BA,SAASC,gBAAT,CAA0BC,SAA1B,EAA6C;EACzC,OAAO,UAAUC,SAAV,EAA8C;IACjD,QAAQA,SAAR;MACI,KAAK,MAAL;QACI,OAAO,CAACD,SAAR;;MACJ,KAAK,MAAL;QACI,OAAOA,SAAP;;MACJ,KAAK,MAAL;QACI,OAAO,CAAP;IANR;EAQH,CATD;AAUH;;AAED,SAASE,kBAAT,CAA4BF,SAA5B,EAA+C;EAC3C,OAAO,UAAUG,OAAV,EAA2BC,aAA3B,EAA0D;IAC7D,MAAMC,SAAS,GAAGC,IAAI,CAACC,GAAL,CAASH,aAAa,GAAGJ,SAAzB,CAAlB;IAEA,MAAMQ,eAAe,GAAGF,IAAI,CAACC,GAAL,CAASP,SAAS,GAAG,CAArB,CAAxB;IACA,MAAMS,gBAAgB,GAAGJ,SAAS,GAAGG,eAAZ,GACnBH,SAAS,GAAGL,SADO,GAEnBK,SAFN;IAIA,MAAMJ,SAAS,GAAGG,aAAa,GAAG,CAAhB,GAAoB,CAAC,CAArB,GAAyB,CAA3C;IAEA,OAAOD,OAAO,GAAIF,SAAS,GAAGQ,gBAA9B;EACH,CAXD;AAYH;;AAED,eAAe,SAASC,iBAAT,CAA2BC,MAA3B,EAAyE;EACpF,MAAM;IACFC,qBADE;IAEFZ,SAFE;IAGFa,eAHE;IAIFC,YAJE;IAKFC,IALE;IAMFC;EANE,IAOFL,MAPJ;EASA,MAAM;IACFM,eADE;IAEFC,SAFE;IAGFC;EAHE,IAIFN,eAJJ;EAMA,MAAMO,cAAc,GAAGpB,SAAS,GAAGc,YAAnC;EACA,MAAMO,mBAAmB,GAAGvB,gBAAgB,CAACsB,cAAD,CAA5C;EACA,MAAME,gBAAgB,GAAGxB,gBAAgB,CAAC,CAAD,CAAzC;EACA,MAAMyB,mBAAmB,GAAGzB,gBAAgB,CAAC,CAAD,CAA5C;EAEA,MAAM0B,mBAAmB,GAAG7B,OAAO,CAAC,MAAM;IACtC,OAAOE,QAAQ,CAAC4B,GAAT,CACH5B,QAAQ,CAAC4B,GAAT,CAAaJ,mBAAb,EAAkCC,gBAAlC,CADG,EAEHC,mBAFG,CAAP;EAIH,CALkC,EAKhC,EALgC,CAAnC;EAOA,MAAMG,UAAU,GAAG9B,MAAM,CAAS,CAAT,CAAzB;EACA,MAAM+B,gBAAgB,GAAG/B,MAAM,CAAS,CAAT,CAA/B;EAEA,MAAMgC,cAAc,GAAGhC,MAAM,CAAU,KAAV,CAA7B;EAEA,MAAMiC,QAAQ,GAAGvB,IAAI,CAACC,GAAL,CAASS,YAAY,GAAGhB,SAAxB,CAAjB;EAEA,MAAM8B,oBAAgD,GAAGpC,WAAW,CAAEqC,MAAD,IAAoB;IACrF,IAAIhB,IAAJ,EAAU;MACN,MAAMiB,YAAY,GAAG1B,IAAI,CAACC,GAAL,CAASwB,MAAT,KAAqBF,QAAQ,GAAG7B,SAArD;;MACA,IAAIgC,YAAJ,EAAkB;QACd,MAAMC,YAAY,GAAGF,MAAM,GAAG,CAAT,GAAa,CAAb,GAAiB,CAAC,CAAvC;QACA,OAAOA,MAAM,GAAI,CAACE,YAAD,GAAgBJ,QAAjC;MACH;IACJ;;IAED,OAAOE,MAAM,GAAGF,QAAhB;EACH,CAVmE,EAUjE,CAAC7B,SAAD,EAAYe,IAAZ,EAAkBc,QAAlB,CAViE,CAApE;EAYA,MAAMK,gBAAgB,GAAGxC,WAAW,CAAEyC,SAAD,IAAuB;IACxD,MAAMC,UAAU,GAAGN,oBAAoB,CAACK,SAAD,CAAvC;IAEAR,gBAAgB,CAACU,OAAjB,GAA2BD,UAA3B;IACAf,mBAAmB,CAACiB,QAApB,CAA6BF,UAA7B;IAEAV,UAAU,CAACW,OAAX,GAAqB,CAArB;IACAf,gBAAgB,CAACgB,QAAjB,CAA0B,CAA1B;EACH,CARmC,EAQjC,CACCR,oBADD,CARiC,CAApC;EAYA,MAAMS,kBAAkB,GAAG7C,WAAW,CAAC,MAAM;IACzC,IAAI,CAACkC,cAAc,CAACS,OAApB,EAA6B;MACzB;IACH;;IAEDf,gBAAgB,CAACkB,aAAjB,CAA+BC,SAAS,IAAI;MACxCb,cAAc,CAACS,OAAf,GAAyB,KAAzB;MAEA,MAAMK,UAAU,GAAGf,gBAAgB,CAACU,OAApC;MACA,MAAMM,WAAW,GAAGD,UAAU,GAAGD,SAAjC;MAEAP,gBAAgB,CAACS,WAAD,CAAhB;MAEAxB,2BAA2B,CAAC;QAAEY,MAAM,EAAEY,WAAV;QAAuBC,KAAK,EAAE;MAA9B,CAAD,CAA3B;IACH,CATD;EAUH,CAfqC,EAenC,CACCzB,2BADD,EAECe,gBAFD,CAfmC,CAAtC;EAoBA,MAAMW,iBAAiB,GAAGnD,WAAW,CAAC,MAAM;IACxCkC,cAAc,CAACS,OAAf,GAAyB,KAAzB;IAEA,MAAMK,UAAU,GAAGf,gBAAgB,CAACU,OAApC;IACA,MAAMlC,OAAO,GAAGuB,UAAU,CAACW,OAA3B;IACA,MAAMM,WAAW,GAAGD,UAAU,GAAGvC,OAAjC;IAEA+B,gBAAgB,CAACS,WAAD,CAAhB;IAEAxB,2BAA2B,CAAC;MAAEY,MAAM,EAAEY,WAAV;MAAuBC,KAAK,EAAE;IAA9B,CAAD,CAA3B;EACH,CAVoC,EAUlC,CACCzB,2BADD,EAECe,gBAFD,CAVkC,CAArC;EAeA,MAAMY,oBAAoB,GAAGpD,WAAW,CAAC,CAACqD,IAAD,EAA4BpC,MAA5B,KAA8D;IACnG,IAAIiB,cAAc,CAACS,OAAnB,EAA4B;MACxB;IACH;;IAED,MAAMW,kBAAyC,GAAG;MAC9CC,QAAQ,EAAE,IADoC;MAE9C,GAAGtC;IAF2C,CAAlD;IAKA,MAAMuC,YAAY,GAAGjC,eAAe,EAApC;IAEA,MAAMkC,4CAA4C,GAAGpD,gBAAgB,CAACC,SAAD,CAArE;IACA,MAAMoD,iBAAiB,GAAGlD,kBAAkB,CAACF,SAAD,CAA5C;;IAEA,MAAMqD,yCAAyC,GAAIC,OAAD,IAAuD;MACrG,MAAM;QAAErD,SAAF;QAAasD;MAAb,IAAyCD,OAA/C;;MAEA,IAAIJ,YAAY,KAAK,CAAjB,IAAsBjD,SAAS,KAAK,MAAxC,EAAgD;QAC5C,OAAOsD,uBAAuB,GACxBJ,4CAA4C,CAAC,MAAD,CADpB,GAExB,CAACjC,SAAD,GAAalB,SAFnB,CAD4C,CAGd;MACjC,CAJD,MAIO,IAAIkD,YAAY,KAAKhC,SAAjB,IAA8BjB,SAAS,KAAK,MAAhD,EAAwD;QAC3D,OAAOsD,uBAAuB,GACxBJ,4CAA4C,CAAC,MAAD,CADpB,GAExBjC,SAAS,GAAGlB,SAFlB,CAD2D,CAG9B;MAChC;;MACD,OAAOmD,4CAA4C,CAAClD,SAAD,CAAnD;IACH,CAbD;;IAeA,MAAMuD,2BAA2B,GAAIF,OAAD,IAAuD;MACvF,MAAMG,mBAAqD,GAAG;QAC1DF,uBAAuB,EAAE,KADiC;QAE1D,GAAGD;MAFuD,CAA9D;MAKA,OAAOvC,IAAI,GACLoC,4CAA4C,CAACM,mBAAmB,CAACxD,SAArB,CADvC,GAELoD,yCAAyC,CAACI,mBAAD,CAF/C;IAGH,CATD;;IAWA,MAAMC,qBAAqB,GAAG,QAAmD;MAAA,IAAlD;QAAEC;MAAF,CAAkD;;MAC7E,IAAIA,KAAK,GAAG,CAAR,IAAaA,KAAK,GAAGzC,SAArB,IAAkCyC,KAAK,KAAKT,YAAhD,EAA8D;QAC1D;QACA,OAAO,CAAP;MACH;;MAED,MAAMU,QAAQ,GAAGtD,IAAI,CAACC,GAAL,CAAS2C,YAAY,GAAGS,KAAxB,IAAiC3D,SAAlD;MACA,MAAMC,SAAS,GAAG0D,KAAK,GAAGT,YAAR,GAAuB,CAAC,CAAxB,GAA4B,CAA9C;MAEA,OAAOU,QAAQ,GAAG3D,SAAlB;IACH,CAVD;;IAYA,MAAM4D,aAAa,GAAGd,IAAI,KAAK,aAAT,CAClB;IADkB,EAEhBS,2BAA2B,CAACR,kBAAD,CAFX,CAGlB;IAHkB,EAIhBU,qBAAqB,CAACV,kBAAD,CAJ3B;IAMA,MAAM7C,OAAO,GAAGiD,iBAAiB,CAACS,aAAD,EAAgBlC,gBAAgB,CAACU,OAAjC,CAAjC;IAEAX,UAAU,CAACW,OAAX,GAAqBlC,OAArB;IACAyB,cAAc,CAACS,OAAf,GAAyB,IAAzB;IAEAlB,2BAA2B,CAAC;MACxBY,MAAM,EAAEJ,gBAAgB,CAACU,OAAjB,GAA2BlC,OADX;MAExByC,KAAK,EAAE;IAFiB,CAAD,CAA3B;IAKA,MAAMkB,uBAA+B,GAAGd,kBAAkB,CAACc,uBAAnB,IAA8C,CAAtF;;IACA,IAAIC,MAAM,CAACC,QAAP,CAAgBF,uBAAhB,CAAJ,EAA8C;MAC1CxC,gBAAgB,CAACgB,QAAjB,CAA0BwB,uBAA1B;MACAvC,mBAAmB,CAACe,QAApB,CAA6B,CAA7B;IACH;;IAED,IAAIU,kBAAkB,CAACC,QAAvB,EAAiC;MAC7B,MAAMgB,SAAS,GAAGrD,qBAAqB,CAACU,gBAAD,EAAmBnB,OAAnB,CAAvC;MAEA8D,SAAS,CAACC,KAAV,CAAgB,SAAkB;QAAA,IAAjB;UAAEC;QAAF,CAAiB;;QAC9B,IAAIA,QAAJ,EAAc;UACVtB,iBAAiB;QACpB;MACJ,CAJD;IAKH,CARD,MAQO;MACHA,iBAAiB;IACpB;EACJ,CAtFuC,EAsFrC,CACCjC,qBADD,EAECK,eAFD,EAGC4B,iBAHD,EAIC7C,SAJD,EAKCkB,SALD,EAMCH,IAND,EAOCI,2BAPD,CAtFqC,CAAxC;EAgGA,OAAO;IACHI,mBADG;IAEHC,mBAFG;IAGHe,kBAHG;IAIHO;EAJG,CAAP;AAMH;AAAA"}
@@ -1,2 +1,3 @@
1
- export { default } from './CarouselWeb';
1
+ export { default } from './Carousel';
2
+ export { normalItemStyleFactory, parallaxItemStyleFactory } from './animation';
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["default"],"sources":["index.ts"],"sourcesContent":["export { default } from './CarouselWeb';\nexport type { default as CarouselProps } from './CarouselProps';"],"mappings":"AAAA,SAASA,OAAT,QAAwB,eAAxB"}
1
+ {"version":3,"names":["default","normalItemStyleFactory","parallaxItemStyleFactory"],"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,SAASA,OAAT,QAAwB,YAAxB;AAGA,SAASC,sBAAT,EAAiCC,wBAAjC,QAAiE,aAAjE"}
@@ -0,0 +1,6 @@
1
+ import { logger } from '@fountain-ui/utils';
2
+ export default logger('Carousel', {
3
+ enabled: __DEV__,
4
+ format: 'diff'
5
+ });
6
+ //# 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,SAASA,MAAT,QAAuB,oBAAvB;AAEA,eAAeA,MAAM,CAAC,UAAD,EAAa;EAC9BC,OAAO,EAAEC,OADqB;EAE9BC,MAAM,EAAE;AAFsB,CAAb,CAArB"}
@@ -0,0 +1,4 @@
1
+ const directions = ['next', 'prev', 'stay'];
2
+ const scrollStates = ['idle', 'dragging', 'interrupted'];
3
+ export {};
4
+ //# 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"}
@@ -1,142 +1,273 @@
1
1
  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); }
2
2
 
3
3
  import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
4
- import { FlatList } from 'react-native';
4
+ import { FlatList, Platform } from 'react-native';
5
5
  import * as R from 'ramda';
6
6
  import ViewerItem from './ViewerItem';
7
-
8
- const getItemHeights = items => R.map(content => content.height)(items);
7
+ import FastScroll from './FastScroll';
9
8
 
10
9
  const appender = (left, right) => [left + right, left + right];
11
10
 
12
- const getHeightAccum = itemHeights => R.mapAccum(appender, 0, itemHeights);
11
+ const getHeightAccum = heights => R.mapAccum(appender, 0, heights);
12
+
13
+ const keyExtractor = item => String(item.index);
14
+
15
+ const createInitialImageState = image => ({
16
+ totalErrorCount: 0,
17
+ dimension: image.dimension,
18
+ tryRenderingMillis: 0,
19
+ urlState: {
20
+ url: image.url,
21
+ validity: 'unknown'
22
+ }
23
+ });
13
24
 
14
- const keyExtractor = item => item.id;
25
+ const mapImageStateToItemState = (index, imageState, autoHandleErrorCount) => {
26
+ var _imageState$urlState, _imageState$urlState2;
27
+
28
+ return {
29
+ index,
30
+ url: (_imageState$urlState = imageState.urlState) === null || _imageState$urlState === void 0 ? void 0 : _imageState$urlState.url,
31
+ imageKey: `${imageState.tryRenderingMillis}-${index}`,
32
+ reloadButtonVisible: ((_imageState$urlState2 = imageState.urlState) === null || _imageState$urlState2 === void 0 ? void 0 : _imageState$urlState2.validity) !== 'valid' && imageState.totalErrorCount >= autoHandleErrorCount,
33
+ dimension: imageState.dimension
34
+ };
35
+ };
15
36
 
37
+ const mapIndexed = R.addIndex(R.map);
38
+ const MAXIMUM_WIDTH = 720;
16
39
  export default function ComicViewer(props) {
17
40
  const {
18
- data,
19
- errorDebounceMillis = 500,
20
- errorRetryCount = 3,
41
+ debounceMillis = 100,
42
+ autoHandleErrorCount = 3,
43
+ fastScrollOptions,
21
44
  initialNumToRender = 1,
45
+ initialNumToCreate,
22
46
  initialScrollPercentage = 0,
23
47
  itemVisiblePercentThreshold = 0,
48
+ intrinsicImages: originalIntrinsicImages,
49
+ maxContentWidth = MAXIMUM_WIDTH,
50
+ onItemPress,
51
+ onScroll,
24
52
  onError,
25
- viewerWidth,
53
+ onReloadPress,
54
+ viewportWidth,
55
+ invisiblePaddingTop = 0,
26
56
  windowSize = 3,
27
57
  ...otherProps
28
58
  } = props;
59
+ const initialCreateCount = initialNumToCreate ? R.min(initialNumToCreate, initialNumToRender) : undefined;
60
+ const initialIntrinsicImages = initialCreateCount ? R.take(initialCreateCount, originalIntrinsicImages) : originalIntrinsicImages;
61
+ const [intrinsicImages, setIntrinsicImages] = useState(initialIntrinsicImages);
62
+ const fastScrollRef = fastScrollOptions === null || fastScrollOptions === void 0 ? void 0 : fastScrollOptions.ref;
29
63
  const flatListRef = useRef(null);
30
- const errors = useRef(new Map());
31
- const debounceTimeOut = useRef(null);
32
- const resourceString = R.toString(R.map(itemData => itemData.sourceUrl)(data));
33
- const initialItems = R.map(itemData => ({ ...itemData,
34
- isViewable: false,
35
- width: viewerWidth,
36
- height: itemData.height * viewerWidth / itemData.width
37
- }))(data);
38
- const [items, setItems] = useState(initialItems);
39
- const itemHeights = getItemHeights(items);
40
- const itemHeightAccum = getHeightAccum(itemHeights);
64
+ const actualImageWidth = Math.min(viewportWidth, maxContentWidth);
65
+ const initialImageStates = useMemo(() => R.map(createInitialImageState, intrinsicImages), []);
66
+ const imageStatesRef = useRef(initialImageStates);
67
+ const shouldWaitInitialCreate = useRef(!R.isNil(initialCreateCount));
68
+
69
+ const mapImageStatesToItemStates = imageStates => {
70
+ return imageStates.map((image, index) => mapImageStateToItemState(index, image, autoHandleErrorCount));
71
+ };
72
+
73
+ const [itemStates, setItemStates] = useState(() => {
74
+ return mapImageStatesToItemStates(imageStatesRef.current);
75
+ });
76
+ const renderedDimensions = useMemo(() => {
77
+ return mapIndexed((intrinsicImage, index) => {
78
+ const height = intrinsicImage.dimension.height * actualImageWidth / intrinsicImage.dimension.width + (index === 0 ? invisiblePaddingTop : 0);
79
+ return {
80
+ width: actualImageWidth,
81
+ height: isNaN(height) ? 0 : height
82
+ };
83
+ }, intrinsicImages);
84
+ }, [actualImageWidth, intrinsicImages]);
85
+ const layoutFromDimensions = 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();
41
105
  const viewabilityConfig = useMemo(() => ({
42
106
  itemVisiblePercentThreshold
43
107
  }), [itemVisiblePercentThreshold]);
44
- const getItemLayout = useCallback((data, index) => {
45
- const offsets = R.prepend(0, itemHeightAccum[1]);
46
- return {
47
- length: itemHeights[index],
48
- offset: offsets[index],
49
- index
50
- };
51
- }, [itemHeights]);
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;
116
+ });
117
+ };
118
+
119
+ const updateTryRenderingMillis = () => {
120
+ const tryRenderingMillis = new Date().getTime();
121
+ updateImageState((imageState, i) => {
122
+ const urlState = imageState.urlState;
123
+
124
+ if ((urlState === null || urlState === void 0 ? void 0 : urlState.validity) === 'invalid') {
125
+ return { ...imageState,
126
+ tryRenderingMillis
127
+ };
128
+ }
129
+
130
+ return imageState;
131
+ });
132
+ };
133
+
52
134
  const onViewableItemsChanged = useRef(_ref => {
53
135
  let {
54
136
  viewableItems
55
137
  } = _ref;
56
- setItems(prev => {
57
- const viewableItemIds = R.map(viewableItem => viewableItem.item.id)(viewableItems);
58
- return R.map(prevItem => ({ ...prevItem,
59
- isViewable: R.includes(prevItem.id, viewableItemIds)
60
- }))([...prev]);
61
- });
138
+ updateTryRenderingMillis();
62
139
  });
140
+ const handleScroll = useCallback(event => {
141
+ var _fastScrollRef$curren;
63
142
 
64
- const onErrorHandler = errors => {
65
- const isRetryLimited = R.any(error => error.count >= errorRetryCount)(errors);
143
+ fastScrollRef === null || fastScrollRef === void 0 ? void 0 : (_fastScrollRef$curren = fastScrollRef.current) === null || _fastScrollRef$curren === void 0 ? void 0 : _fastScrollRef$curren.onContentScroll(event);
144
+ onScroll === null || onScroll === void 0 ? void 0 : onScroll(event);
145
+ }, [onScroll]);
66
146
 
67
- if (isRetryLimited) {
68
- return;
69
- }
147
+ const scrollContentToOffset = offset => {
148
+ var _flatListRef$current;
70
149
 
71
- onError && onError(errors);
150
+ (_flatListRef$current = flatListRef.current) === null || _flatListRef$current === void 0 ? void 0 : _flatListRef$current.scrollToOffset({
151
+ offset,
152
+ animated: false
153
+ });
72
154
  };
73
155
 
74
- const itemErrorHandler = useCallback(errorInfo => {
75
- errors.current.set(errorInfo.id, errorInfo.count);
156
+ const updateIntrinsicImages = useCallback(() => {
157
+ const isInitialCreateFinish = R.all(imageState => imageState.urlState.validity !== 'unknown')(imageStatesRef.current);
76
158
 
77
- if (debounceTimeOut.current) {
78
- clearTimeout(debounceTimeOut.current);
159
+ if (!isInitialCreateFinish || !shouldWaitInitialCreate.current) {
160
+ return;
79
161
  }
80
162
 
81
- debounceTimeOut.current = setTimeout(function () {
82
- const errorsArray = Array.from(errors.current.entries());
83
- const errorsInfo = R.map(_ref2 => {
84
- let [key, value] = _ref2;
85
- return {
86
- id: key,
87
- count: value
88
- };
89
- })(errorsArray);
90
- onErrorHandler([...errorsInfo]);
91
- errors.current.clear();
92
- }, errorDebounceMillis);
93
- }, [errorDebounceMillis, errors.current]);
163
+ setIntrinsicImages(originalIntrinsicImages);
164
+ const newImageStates = R.map(createInitialImageState, originalIntrinsicImages);
165
+ imageStatesRef.current = R.map(_ref2 => {
166
+ let [, state] = _ref2;
167
+ return state;
168
+ })(R.toPairs(R.mergeDeepLeft(imageStatesRef.current, newImageStates)));
169
+ setItemStates(mapImageStatesToItemStates(imageStatesRef.current));
170
+ shouldWaitInitialCreate.current = false;
171
+ }, [originalIntrinsicImages, createInitialImageState, mapImageStatesToItemStates]);
94
172
  const renderItem = useCallback(_ref3 => {
173
+ var _renderedDimensions$i, _renderedDimensions$i2;
174
+
95
175
  let {
96
- item
176
+ item,
177
+ index
97
178
  } = _ref3;
98
- const props = { ...item,
99
- onError: itemErrorHandler
179
+
180
+ const handleError = () => {
181
+ onError && onError();
182
+ updateImageState((imageState, i) => {
183
+ const urlState = imageState.urlState;
184
+
185
+ if (i === index) {
186
+ return { ...imageState,
187
+ totalErrorCount: imageState.totalErrorCount + 1,
188
+ urlState: { ...urlState,
189
+ validity: 'invalid'
190
+ }
191
+ };
192
+ }
193
+
194
+ return imageState;
195
+ });
196
+
197
+ if (item.reloadButtonVisible) {
198
+ return;
199
+ }
200
+
201
+ updateIntrinsicImages();
202
+ updateTryRenderingMillis();
100
203
  };
101
- return /*#__PURE__*/React.createElement(ViewerItem, {
102
- props: props
103
- });
104
- }, []);
105
- useEffect(() => {
106
- setItems(prev => {
107
- return R.map(prevItem => {
108
- const currentData = R.find(currentItemData => prevItem.id === currentItemData.id)(data);
109
204
 
110
- if (currentData && currentData.sourceUrl !== prevItem.sourceUrl) {
111
- return { ...prevItem,
112
- sourceUrl: currentData.sourceUrl
205
+ const handleReloadPress = () => {
206
+ onReloadPress && onReloadPress();
207
+ updateTryRenderingMillis();
208
+ };
209
+
210
+ const onLoad = () => {
211
+ updateImageState((imageState, i) => {
212
+ const urlState = imageState.urlState;
213
+
214
+ if (i === index && urlState !== undefined) {
215
+ return { ...imageState,
216
+ urlState: { ...urlState,
217
+ validity: 'valid'
218
+ }
113
219
  };
114
220
  }
115
221
 
116
- return prevItem;
117
- })([...prev]);
222
+ return imageState;
223
+ });
224
+ updateIntrinsicImages();
225
+ };
226
+
227
+ return /*#__PURE__*/React.createElement(ViewerItem, {
228
+ onError: handleError,
229
+ onLoad: onLoad,
230
+ onPress: onItemPress,
231
+ onReloadPress: handleReloadPress,
232
+ url: item.url,
233
+ imageKey: item.imageKey,
234
+ invisiblePaddingTop: index === 0 ? invisiblePaddingTop : 0,
235
+ width: ((_renderedDimensions$i = renderedDimensions[index]) === null || _renderedDimensions$i === void 0 ? void 0 : _renderedDimensions$i.width) ?? 0,
236
+ height: ((_renderedDimensions$i2 = renderedDimensions[index]) === null || _renderedDimensions$i2 === void 0 ? void 0 : _renderedDimensions$i2.height) ?? 0,
237
+ reloadButtonVisible: item.reloadButtonVisible
118
238
  });
119
- }, [resourceString]);
239
+ }, [onItemPress, renderedDimensions, updateIntrinsicImages]);
120
240
  useEffect(() => {
121
- const newItems = R.map(item => ({ ...item,
122
- width: viewerWidth,
123
- height: item.height * viewerWidth / item.width
124
- }))(items);
125
- setItems(newItems);
126
- }, [viewerWidth]);
127
- useEffect(() => {
128
- const totalHeight = itemHeightAccum[0];
129
- const offset = Math.floor(initialScrollPercentage / 100 * totalHeight);
241
+ const scroll = () => {
242
+ const offset = Math.floor(initialScrollPercentage / 100 * totalHeight);
130
243
 
131
- if (flatListRef.current) {
132
- flatListRef.current.scrollToOffset({
133
- offset,
134
- animated: false
135
- });
244
+ if (flatListRef.current) {
245
+ flatListRef.current.scrollToOffset({
246
+ offset,
247
+ animated: false
248
+ });
249
+ }
250
+ };
251
+
252
+ let timeoutId = undefined;
253
+ /**
254
+ * @FIXME
255
+ * scrollToOffset has issue(no effect) in useEffect hook on iOS.
256
+ * ref: https://github.com/facebook/react-native/issues/35575
257
+ */
258
+
259
+ if (Platform.OS === 'ios') {
260
+ timeoutId = setTimeout(scroll, 0);
261
+ } else {
262
+ scroll();
136
263
  }
137
- }, [flatListRef.current]);
138
- return /*#__PURE__*/React.createElement(FlatList, _extends({
139
- data: items,
264
+
265
+ return () => {
266
+ timeoutId && clearTimeout(timeoutId);
267
+ };
268
+ }, []);
269
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FlatList, _extends({
270
+ data: itemStates,
140
271
  getItemLayout: getItemLayout,
141
272
  initialNumToRender: initialNumToRender,
142
273
  keyExtractor: keyExtractor,
@@ -144,8 +275,13 @@ export default function ComicViewer(props) {
144
275
  ref: flatListRef,
145
276
  renderItem: renderItem,
146
277
  viewabilityConfig: viewabilityConfig,
147
- windowSize: windowSize
148
- }, otherProps));
278
+ windowSize: windowSize,
279
+ onScroll: handleScroll
280
+ }, otherProps)), /*#__PURE__*/React.createElement(FastScroll, _extends({}, fastScrollOptions, {
281
+ contentLength: totalHeight,
282
+ initialScrollPercentage: initialScrollPercentage,
283
+ scrollContentToOffset: scrollContentToOffset
284
+ })));
149
285
  }
150
286
  ;
151
287
  //# sourceMappingURL=ComicViewer.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useEffect","useMemo","useRef","useState","FlatList","R","ViewerItem","getItemHeights","items","map","content","height","appender","left","right","getHeightAccum","itemHeights","mapAccum","keyExtractor","item","id","ComicViewer","props","data","errorDebounceMillis","errorRetryCount","initialNumToRender","initialScrollPercentage","itemVisiblePercentThreshold","onError","viewerWidth","windowSize","otherProps","flatListRef","errors","Map","debounceTimeOut","resourceString","toString","itemData","sourceUrl","initialItems","isViewable","width","setItems","itemHeightAccum","viewabilityConfig","getItemLayout","index","offsets","prepend","length","offset","onViewableItemsChanged","viewableItems","prev","viewableItemIds","viewableItem","prevItem","includes","onErrorHandler","isRetryLimited","any","error","count","itemErrorHandler","errorInfo","current","set","clearTimeout","setTimeout","errorsArray","Array","from","entries","errorsInfo","key","value","clear","renderItem","currentData","find","currentItemData","newItems","totalHeight","Math","floor","scrollToOffset","animated"],"sources":["ComicViewer.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { FlatList, ListRenderItem, ViewToken } from 'react-native';\nimport * as R from 'ramda';\nimport { ComicViewerItemData, default as ComicViewerProps, ErrorInfo } from './ComicViewerProps';\nimport type ComicViewerItemProps from './ComicViewerItemProps';\nimport ViewerItem from './ViewerItem';\n\nconst getItemHeights = <T, >(items: ComicViewerItemProps<T>[]): number[] => R.map((content: ComicViewerItemProps<T>) => content.height)(items);\nconst appender = (left: number, right: number): [number, number] => [left + right, left + right];\nconst getHeightAccum = (itemHeights: number[]): [number, number[]] => R.mapAccum(appender, 0, itemHeights);\n\nconst keyExtractor = <T, >(item: ComicViewerItemProps<T>) => item.id;\n\nexport default function ComicViewer<T>(props: ComicViewerProps<T>) {\n const {\n data,\n errorDebounceMillis = 500,\n errorRetryCount = 3,\n initialNumToRender = 1,\n initialScrollPercentage = 0,\n itemVisiblePercentThreshold = 0,\n onError,\n viewerWidth,\n windowSize = 3,\n ...otherProps\n } = props;\n\n const flatListRef = useRef<FlatList>(null);\n\n const errors = useRef<Map<string, number>>(new Map());\n const debounceTimeOut = useRef<NodeJS.Timeout | null>(null);\n\n const resourceString = R.toString(R.map((itemData: ComicViewerItemData) => itemData.sourceUrl)(data));\n\n const initialItems = R.map((itemData: ComicViewerItemData<T>) => ({\n ...itemData,\n isViewable: false,\n width: viewerWidth,\n height: (itemData.height * viewerWidth) / itemData.width,\n }))(data);\n\n const [items, setItems] = useState<ComicViewerItemProps<T>[]>(initialItems);\n\n const itemHeights = getItemHeights(items);\n const itemHeightAccum = getHeightAccum(itemHeights);\n\n const viewabilityConfig = useMemo(() => ({\n itemVisiblePercentThreshold,\n }), [itemVisiblePercentThreshold]);\n\n const getItemLayout = useCallback((data: any, index: number) => {\n const offsets = R.prepend(0, itemHeightAccum[1]);\n\n return {\n length: itemHeights[index],\n offset: offsets[index],\n index,\n };\n }, [itemHeights]);\n\n const onViewableItemsChanged = useRef(({ viewableItems }: {\n viewableItems: Array<ViewToken>,\n }) => {\n setItems((prev: ComicViewerItemProps<T>[]) => {\n const viewableItemIds = R.map((viewableItem: ViewToken) => viewableItem.item.id)(viewableItems);\n\n return R.map((prevItem: ComicViewerItemProps<T>) => ({\n ...prevItem,\n isViewable: R.includes(prevItem.id, viewableItemIds),\n }))([...prev]);\n });\n });\n\n const onErrorHandler = (errors: ErrorInfo[]) => {\n const isRetryLimited = R.any((error: ErrorInfo) => error.count >= errorRetryCount)(errors);\n\n if (isRetryLimited) {\n return;\n }\n\n onError && onError(errors);\n };\n\n const itemErrorHandler = useCallback((errorInfo: ErrorInfo) => {\n errors.current.set(errorInfo.id, errorInfo.count);\n\n if (debounceTimeOut.current) {\n clearTimeout(debounceTimeOut.current);\n }\n\n debounceTimeOut.current = setTimeout(function () {\n const errorsArray = Array.from(errors.current.entries());\n const errorsInfo = R.map(([key, value]: [string, number]) => ({\n id: key,\n count: value,\n }))(errorsArray);\n\n onErrorHandler([...errorsInfo]);\n errors.current.clear();\n }, errorDebounceMillis);\n }, [errorDebounceMillis, errors.current]);\n\n const renderItem: ListRenderItem<ComicViewerItemProps<T>> = useCallback(({ item }) => {\n const props = {\n ...item,\n onError: itemErrorHandler,\n };\n\n return <ViewerItem props={props}/>;\n }, []);\n\n useEffect(() => {\n setItems((prev: ComicViewerItemProps<T>[]) => {\n return R.map((prevItem: ComicViewerItemProps<T>) => {\n const currentData = R.find((currentItemData: ComicViewerItemData<T>) => prevItem.id === currentItemData.id)(data);\n\n if (currentData && (currentData.sourceUrl !== prevItem.sourceUrl)) {\n return {\n ...prevItem,\n sourceUrl: currentData.sourceUrl,\n };\n }\n\n return prevItem;\n })([...prev]);\n });\n }, [resourceString]);\n\n useEffect(() => {\n const newItems = R.map((item: ComicViewerItemProps<T>) => ({\n ...item,\n width: viewerWidth,\n height: (item.height * viewerWidth) / item.width,\n }))(items);\n\n setItems(newItems);\n }, [viewerWidth]);\n\n useEffect(() => {\n const totalHeight = itemHeightAccum[0];\n const offset = Math.floor((initialScrollPercentage / 100) * totalHeight);\n\n if (flatListRef.current) {\n flatListRef.current.scrollToOffset({ offset, animated: false });\n }\n }, [flatListRef.current]);\n\n return (\n <FlatList\n data={items}\n getItemLayout={getItemLayout}\n initialNumToRender={initialNumToRender}\n keyExtractor={keyExtractor}\n onViewableItemsChanged={onViewableItemsChanged.current}\n ref={flatListRef}\n renderItem={renderItem}\n viewabilityConfig={viewabilityConfig}\n windowSize={windowSize}\n {...otherProps}\n />\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useCallback","useEffect","useMemo","useRef","useState","FlatList","Platform","R","ViewerItem","FastScroll","appender","left","right","getHeightAccum","heights","mapAccum","keyExtractor","item","String","index","createInitialImageState","image","totalErrorCount","dimension","tryRenderingMillis","urlState","url","validity","mapImageStateToItemState","imageState","autoHandleErrorCount","imageKey","reloadButtonVisible","mapIndexed","addIndex","map","MAXIMUM_WIDTH","ComicViewer","props","debounceMillis","fastScrollOptions","initialNumToRender","initialNumToCreate","initialScrollPercentage","itemVisiblePercentThreshold","intrinsicImages","originalIntrinsicImages","maxContentWidth","onItemPress","onScroll","onError","onReloadPress","viewportWidth","invisiblePaddingTop","windowSize","otherProps","initialCreateCount","min","undefined","initialIntrinsicImages","take","setIntrinsicImages","fastScrollRef","ref","flatListRef","actualImageWidth","Math","initialImageStates","imageStatesRef","shouldWaitInitialCreate","isNil","mapImageStatesToItemStates","imageStates","itemStates","setItemStates","current","renderedDimensions","intrinsicImage","height","width","isNaN","layoutFromDimensions","itemHeights","totalHeight","heightAccum","itemOffsets","prepend","getItemLayout","data","length","offset","viewabilityConfig","updateImageState","updateFunction","prevImageStates","newImageStates","prevItemStates","newItemStates","equals","updateTryRenderingMillis","Date","getTime","i","onViewableItemsChanged","viewableItems","handleScroll","event","onContentScroll","scrollContentToOffset","scrollToOffset","animated","updateIntrinsicImages","isInitialCreateFinish","all","state","toPairs","mergeDeepLeft","renderItem","handleError","handleReloadPress","onLoad","scroll","floor","timeoutId","OS","setTimeout","clearTimeout"],"sources":["ComicViewer.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { FlatList, ListRenderItem, NativeScrollEvent, NativeSyntheticEvent, Platform, ViewToken } from 'react-native';\nimport * as R from 'ramda';\nimport { default as ComicViewerProps, Dimension, IntrinsicImage } from './ComicViewerProps';\nimport ViewerItem from './ViewerItem';\nimport FastScroll from './FastScroll';\n\nconst appender = (left: number, right: number): [number, number] => [left + right, left + right];\nconst getHeightAccum = (heights: number[]): [number, number[]] => R.mapAccum(appender, 0, heights);\n\nconst keyExtractor = <T, >(item: ItemState) => String(item.index);\n\ninterface UrlState {\n url: string;\n validity: 'valid' | 'invalid' | 'unknown';\n}\n\ninterface ImageState {\n urlState: UrlState;\n totalErrorCount: number;\n dimension: Dimension;\n tryRenderingMillis: number;\n}\n\ninterface ItemState {\n index: number;\n url?: string;\n imageKey: string;\n reloadButtonVisible: boolean;\n dimension: Dimension;\n}\n\nconst createInitialImageState = (image: IntrinsicImage): ImageState => ({\n totalErrorCount: 0,\n dimension: image.dimension,\n tryRenderingMillis: 0,\n urlState: {\n url: image.url,\n validity: 'unknown',\n },\n});\n\nconst mapImageStateToItemState = (\n index: number,\n imageState: ImageState,\n autoHandleErrorCount: number,\n): ItemState => ({\n index,\n url: imageState.urlState?.url,\n imageKey: `${imageState.tryRenderingMillis}-${index}`,\n reloadButtonVisible: (imageState.urlState?.validity !== 'valid') && imageState.totalErrorCount >= autoHandleErrorCount,\n dimension: imageState.dimension,\n});\n\nconst mapIndexed = R.addIndex<IntrinsicImage>(R.map);\n\nconst MAXIMUM_WIDTH = 720;\n\nexport default function ComicViewer(props: ComicViewerProps) {\n const {\n debounceMillis = 100,\n autoHandleErrorCount = 3,\n fastScrollOptions,\n initialNumToRender = 1,\n initialNumToCreate,\n initialScrollPercentage = 0,\n itemVisiblePercentThreshold = 0,\n intrinsicImages: originalIntrinsicImages,\n maxContentWidth = MAXIMUM_WIDTH,\n onItemPress,\n onScroll,\n onError,\n onReloadPress,\n viewportWidth,\n invisiblePaddingTop = 0,\n windowSize = 3,\n ...otherProps\n } = props;\n\n const initialCreateCount = initialNumToCreate ? R.min(initialNumToCreate, initialNumToRender) : undefined;\n const initialIntrinsicImages = initialCreateCount ? R.take(initialCreateCount, originalIntrinsicImages) : originalIntrinsicImages;\n const [intrinsicImages, setIntrinsicImages] = useState(initialIntrinsicImages);\n\n const fastScrollRef = fastScrollOptions?.ref;\n\n const flatListRef = useRef<FlatList>(null);\n\n const actualImageWidth = Math.min(viewportWidth, maxContentWidth);\n\n const initialImageStates = useMemo<Array<ImageState>>(() => R.map(createInitialImageState, intrinsicImages), []);\n\n const imageStatesRef = useRef<Array<ImageState>>(initialImageStates);\n\n const shouldWaitInitialCreate = useRef<Boolean>(!R.isNil(initialCreateCount));\n\n const mapImageStatesToItemStates = (imageStates: Array<ImageState>): Array<ItemState> => {\n return imageStates.map((image, index) => mapImageStateToItemState(\n index, image, autoHandleErrorCount,\n ));\n };\n\n const [itemStates, setItemStates] = useState<Array<ItemState>>(() => {\n return mapImageStatesToItemStates(imageStatesRef.current);\n });\n\n const renderedDimensions = useMemo<Array<Dimension>>(() => {\n return mapIndexed((intrinsicImage, index) => {\n const height = (intrinsicImage.dimension.height * actualImageWidth) / intrinsicImage.dimension.width + (index === 0 ? invisiblePaddingTop : 0);\n\n return {\n width: actualImageWidth,\n height: isNaN(height) ? 0 : height,\n };\n }, intrinsicImages);\n }, [actualImageWidth, intrinsicImages]);\n\n const layoutFromDimensions = useCallback(() => {\n const itemHeights = R.map(dimension => dimension.height, renderedDimensions);\n const [totalHeight, heightAccum] = getHeightAccum(itemHeights);\n const itemOffsets = R.prepend(0, heightAccum);\n\n const getItemLayout = (data: any, index: number) => ({\n index,\n length: itemHeights[index],\n offset: itemOffsets[index],\n });\n\n return {\n totalHeight,\n getItemLayout,\n };\n }, [renderedDimensions]);\n\n const { totalHeight, getItemLayout } = layoutFromDimensions();\n\n const viewabilityConfig = useMemo(() => ({\n itemVisiblePercentThreshold,\n }), [itemVisiblePercentThreshold]);\n\n const updateImageState = (updateFunction: (prev: ImageState, index: number) => ImageState) => {\n const prevImageStates = imageStatesRef.current;\n const newImageStates = prevImageStates.map(updateFunction);\n\n imageStatesRef.current = newImageStates;\n\n setItemStates(prevItemStates => {\n const newItemStates = mapImageStatesToItemStates(newImageStates);\n\n return R.equals(prevItemStates, newItemStates) ? prevItemStates : newItemStates;\n });\n };\n\n const updateTryRenderingMillis = () => {\n const tryRenderingMillis = new Date().getTime();\n\n updateImageState((imageState, i) => {\n const urlState = imageState.urlState;\n\n if (urlState?.validity === 'invalid') {\n return {\n ...imageState,\n tryRenderingMillis,\n };\n }\n\n return imageState;\n });\n };\n const onViewableItemsChanged = useRef(({ viewableItems }: { viewableItems: Array<ViewToken> }) => {\n updateTryRenderingMillis();\n });\n\n const handleScroll = useCallback((event: NativeSyntheticEvent<NativeScrollEvent>) => {\n fastScrollRef?.current?.onContentScroll(event);\n\n onScroll?.(event);\n }, [onScroll]);\n\n const scrollContentToOffset = (offset: number) => {\n flatListRef.current?.scrollToOffset({\n offset,\n animated: false,\n });\n };\n\n const updateIntrinsicImages = useCallback(() => {\n const isInitialCreateFinish = R.all((imageState: ImageState) => imageState.urlState.validity !== 'unknown')(imageStatesRef.current);\n\n if (!isInitialCreateFinish || !shouldWaitInitialCreate.current) {\n return;\n }\n\n setIntrinsicImages(originalIntrinsicImages);\n const newImageStates = R.map(createInitialImageState, originalIntrinsicImages);\n imageStatesRef.current = R.map(([, state]: [number, ImageState]) => state)(R.toPairs(R.mergeDeepLeft(imageStatesRef.current, newImageStates)));\n setItemStates(mapImageStatesToItemStates(imageStatesRef.current));\n\n shouldWaitInitialCreate.current = false;\n }, [originalIntrinsicImages, createInitialImageState, mapImageStatesToItemStates]);\n\n const renderItem: ListRenderItem<ItemState> = useCallback(({ item, index }) => {\n const handleError = () => {\n onError && onError();\n\n updateImageState((imageState, i) => {\n const urlState = imageState.urlState;\n\n if (i === index) {\n return {\n ...imageState,\n totalErrorCount: imageState.totalErrorCount + 1,\n urlState: {\n ...urlState,\n validity: 'invalid',\n },\n };\n }\n\n return imageState;\n });\n\n if (item.reloadButtonVisible) {\n return;\n }\n\n updateIntrinsicImages();\n\n updateTryRenderingMillis();\n };\n\n const handleReloadPress = () => {\n onReloadPress && onReloadPress();\n\n updateTryRenderingMillis();\n };\n\n const onLoad = () => {\n updateImageState((imageState, i) => {\n const urlState = imageState.urlState;\n\n if (i === index && urlState !== undefined) {\n return {\n ...imageState,\n urlState: {\n ...urlState,\n validity: 'valid',\n },\n };\n }\n\n return imageState;\n });\n\n updateIntrinsicImages();\n };\n\n return (\n <ViewerItem\n onError={handleError}\n onLoad={onLoad}\n onPress={onItemPress}\n onReloadPress={handleReloadPress}\n url={item.url}\n imageKey={item.imageKey}\n invisiblePaddingTop={index === 0 ? invisiblePaddingTop : 0}\n width={renderedDimensions[index]?.width ?? 0}\n height={renderedDimensions[index]?.height ?? 0}\n reloadButtonVisible={item.reloadButtonVisible}\n />\n );\n }, [onItemPress, renderedDimensions, updateIntrinsicImages]);\n\n useEffect(() => {\n const scroll = () => {\n const offset = Math.floor((initialScrollPercentage / 100) * totalHeight);\n\n if (flatListRef.current) {\n flatListRef.current.scrollToOffset({ offset, animated: false });\n }\n };\n\n let timeoutId: NodeJS.Timeout | undefined = undefined;\n\n /**\n * @FIXME\n * scrollToOffset has issue(no effect) in useEffect hook on iOS.\n * ref: https://github.com/facebook/react-native/issues/35575\n */\n if (Platform.OS === 'ios') {\n timeoutId = setTimeout(scroll, 0);\n } else {\n scroll();\n }\n\n return () => {\n timeoutId && clearTimeout(timeoutId);\n };\n }, []);\n\n return (\n <React.Fragment>\n <FlatList\n data={itemStates}\n getItemLayout={getItemLayout}\n initialNumToRender={initialNumToRender}\n keyExtractor={keyExtractor}\n onViewableItemsChanged={onViewableItemsChanged.current}\n ref={flatListRef}\n renderItem={renderItem}\n viewabilityConfig={viewabilityConfig}\n windowSize={windowSize}\n onScroll={handleScroll}\n {...otherProps}\n />\n\n <FastScroll\n {...fastScrollOptions}\n contentLength={totalHeight}\n initialScrollPercentage={initialScrollPercentage}\n scrollContentToOffset={scrollContentToOffset}\n />\n </React.Fragment>\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["ComicViewerProps.ts"],"sourcesContent":["import { ComponentProps } from '@fountain-ui/core';\n\nexport interface ErrorInfo {\n /**\n * ComicViewerItemData.id.\n */\n id: string;\n\n /**\n * Number of times an error occurred.\n */\n count: number;\n}\n\nexport type ComicViewerItemData<T = {}> = T & {\n /**\n * Image height.\n */\n height: number;\n\n /**\n * Unique value for identifying.\n */\n id: string;\n\n /**\n * Image sourceUrl for displaying.\n */\n sourceUrl: string;\n\n /**\n * Image width.\n */\n width: number;\n}\n\nexport default interface ComicViewerProps<T> extends ComponentProps <{\n /**\n * Data for render.\n */\n data: ComicViewerItemData<T>[];\n\n /**\n * Delay Time to call the error handler.\n * @default 500\n */\n errorDebounceMillis?: number;\n\n /**\n * How many times retry onError when same item error occur\n * @default 3\n */\n errorRetryCount?: number;\n\n /**\n * How many items to render in the initial batch.\n * @default 1\n */\n initialNumToRender?: number;\n\n /**\n * Start at initialScrollPercentage.\n * If over 100, scroll to end.\n * @default 0\n */\n initialScrollPercentage?: number;\n\n /**\n * The value for FlatList viewabilityConfig.itemVisiblePercentThreshold.\n * @default 0\n */\n itemVisiblePercentThreshold?: number;\n\n /**\n * Handling all viewerItem errors at once.\n * @param errors Array of ViewerItems errorInfo.\n */\n onError?: (errors: ErrorInfo[]) => void;\n\n /**\n * Comic viewer width.\n */\n viewerWidth: number;\n\n /**\n * The value for FlatList windowSize.\n * @default 3\n */\n windowSize?: number;\n}> {}"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["ComicViewerProps.ts"],"sourcesContent":["import React from 'react';\nimport { ComponentProps } from '@fountain-ui/core';\nimport { NativeScrollEvent, NativeSyntheticEvent } from 'react-native';\nimport { FastScrollOptions } from './FastScrollProps';\n\nexport interface Dimension {\n width: number;\n height: number;\n}\n\nexport interface IntrinsicImage {\n dimension: Dimension;\n url: string;\n}\n\nexport default interface ComicViewerProps extends ComponentProps <{\n /**\n * Delay Time to call the error handler.\n * @default 100\n */\n debounceMillis?: number;\n\n /**\n * How many times handle onError directly when item error occur\n * @default 3\n */\n autoHandleErrorCount?: number;\n\n /**\n * How many items to render in the initial batch.\n * @default 1\n */\n initialNumToRender?: number;\n\n /**\n * How many items to create in the initial batch.\n * @default 1\n */\n initialNumToCreate?: number;\n\n /**\n * Start at initialScrollPercentage.\n * If over 100, scroll to end.\n * @default 0\n */\n initialScrollPercentage?: number;\n\n /**\n * The value for FlatList viewabilityConfig.itemVisiblePercentThreshold.\n * @default 0\n */\n itemVisiblePercentThreshold?: number;\n\n /**\n * Dimensions and url info of each Image considering viewport.\n */\n intrinsicImages: Array<IntrinsicImage>;\n\n /**\n * Need invisible paddingTop viewer vertically expanded.\n * @default 0\n */\n invisiblePaddingTop?: number;\n\n /**\n * Max value of contents image width size.\n * @default 720\n */\n maxContentWidth?: number;\n\n /**\n * Width of viewport.\n */\n viewportWidth: number;\n\n /**\n * The value for FlatList windowSize.\n * @default 3\n */\n windowSize?: number;\n\n /**\n * Options for fastscroll component.\n */\n fastScrollOptions: FastScrollOptions;\n\n /**\n * Handle scroll event.\n * @param event Scroll event.\n */\n onScroll?: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;\n\n /**\n * Handle item press event.\n */\n onItemPress?: () => void;\n\n /**\n * Handle image loading fail event.\n */\n onError?: () => void;\n\n /**\n * Handle reload button press event.\n */\n onReloadPress?: () => void;\n\n /**\n * Component for comic viewer footer.\n */\n ListFooterComponent?: React.ReactElement;\n}> {}\n"],"mappings":""}