@fountain-ui/lab 2.0.0-beta.9 → 3.0.0-alpha.2

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 (474) hide show
  1. package/build/commonjs/BottomSheet/BottomSheetNative.js +78 -27
  2. package/build/commonjs/BottomSheet/BottomSheetNative.js.map +1 -1
  3. package/build/commonjs/BottomSheet/BottomSheetProps.js.map +1 -1
  4. package/build/commonjs/BottomSheet/BottomSheetWeb.js +63 -17
  5. package/build/commonjs/BottomSheet/BottomSheetWeb.js.map +1 -1
  6. package/build/commonjs/BottomSheet/useDynamicSnapPoints.js +79 -0
  7. package/build/commonjs/BottomSheet/useDynamicSnapPoints.js.map +1 -0
  8. package/build/commonjs/Carousel/Carousel.js +130 -0
  9. package/build/commonjs/Carousel/Carousel.js.map +1 -0
  10. package/build/commonjs/Carousel/CarouselProps.js.map +1 -1
  11. package/build/commonjs/Carousel/animation/animationUtils.js +9 -0
  12. package/build/commonjs/Carousel/animation/animationUtils.js.map +1 -0
  13. package/build/commonjs/Carousel/animation/createDefaultItemStyle.js +15 -0
  14. package/build/commonjs/Carousel/animation/createDefaultItemStyle.js.map +1 -0
  15. package/build/commonjs/Carousel/animation/createDefaultScrollAnimation.js +26 -0
  16. package/build/commonjs/Carousel/animation/createDefaultScrollAnimation.js.map +1 -0
  17. package/build/commonjs/Carousel/animation/index.js +40 -0
  18. package/build/commonjs/Carousel/animation/index.js.map +1 -0
  19. package/build/commonjs/Carousel/animation/normalItemStyleFactory.js +27 -0
  20. package/build/commonjs/Carousel/animation/normalItemStyleFactory.js.map +1 -0
  21. package/build/commonjs/Carousel/animation/parallaxItemStyleFactory.js +65 -0
  22. package/build/commonjs/Carousel/animation/parallaxItemStyleFactory.js.map +1 -0
  23. package/build/commonjs/Carousel/components/InternalContext.js +29 -0
  24. package/build/commonjs/Carousel/components/InternalContext.js.map +1 -0
  25. package/build/commonjs/Carousel/components/ItemView.js +66 -0
  26. package/build/commonjs/Carousel/components/ItemView.js.map +1 -0
  27. package/build/commonjs/Carousel/components/RootView.js +86 -0
  28. package/build/commonjs/Carousel/components/RootView.js.map +1 -0
  29. package/build/commonjs/Carousel/components/ScrollViewGesture.js +84 -0
  30. package/build/commonjs/Carousel/components/ScrollViewGesture.js.map +1 -0
  31. package/build/commonjs/Carousel/components/index.js +40 -0
  32. package/build/commonjs/Carousel/components/index.js.map +1 -0
  33. package/build/commonjs/Carousel/components/useItemInterpolation.js +65 -0
  34. package/build/commonjs/Carousel/components/useItemInterpolation.js.map +1 -0
  35. package/build/commonjs/Carousel/hooks/index.js +48 -0
  36. package/build/commonjs/Carousel/hooks/index.js.map +1 -0
  37. package/build/commonjs/Carousel/hooks/useAutoplayController.js +58 -0
  38. package/build/commonjs/Carousel/hooks/useAutoplayController.js.map +1 -0
  39. package/build/commonjs/Carousel/hooks/useIndexController.js +55 -0
  40. package/build/commonjs/Carousel/hooks/useIndexController.js.map +1 -0
  41. package/build/commonjs/Carousel/hooks/useItemVisibilityStore.js +95 -0
  42. package/build/commonjs/Carousel/hooks/useItemVisibilityStore.js.map +1 -0
  43. package/build/commonjs/Carousel/hooks/useLoopedData.js +33 -0
  44. package/build/commonjs/Carousel/hooks/useLoopedData.js.map +1 -0
  45. package/build/commonjs/Carousel/hooks/usePagingAnimator.js +202 -0
  46. package/build/commonjs/Carousel/hooks/usePagingAnimator.js.map +1 -0
  47. package/build/commonjs/Carousel/index.js +16 -2
  48. package/build/commonjs/Carousel/index.js.map +1 -1
  49. package/build/commonjs/Carousel/tick.js +16 -0
  50. package/build/commonjs/Carousel/tick.js.map +1 -0
  51. package/build/commonjs/Carousel/types.js +8 -0
  52. package/build/commonjs/Carousel/types.js.map +1 -0
  53. package/build/commonjs/ComicViewer/ComicViewer.js +230 -92
  54. package/build/commonjs/ComicViewer/ComicViewer.js.map +1 -1
  55. package/build/commonjs/ComicViewer/ComicViewerProps.js.map +1 -1
  56. package/build/commonjs/ComicViewer/EncodedTile.js +10 -0
  57. package/build/commonjs/ComicViewer/EncodedTile.js.map +1 -0
  58. package/build/commonjs/ComicViewer/FastScroll.js +175 -0
  59. package/build/commonjs/ComicViewer/FastScroll.js.map +1 -0
  60. package/build/commonjs/ComicViewer/{ComicViewerItemProps.js → FastScrollProps.js} +1 -1
  61. package/build/commonjs/ComicViewer/FastScrollProps.js.map +1 -0
  62. package/build/commonjs/ComicViewer/ReloadButton.js +48 -0
  63. package/build/commonjs/ComicViewer/ReloadButton.js.map +1 -0
  64. package/build/commonjs/ComicViewer/ViewerItem.js +53 -59
  65. package/build/commonjs/ComicViewer/ViewerItem.js.map +1 -1
  66. package/build/commonjs/ComicViewer/index.js.map +1 -1
  67. package/build/commonjs/ComicViewer/util.js +27 -0
  68. package/build/commonjs/ComicViewer/util.js.map +1 -0
  69. package/build/commonjs/DateTimePicker/DateTimePicker.js +12 -3
  70. package/build/commonjs/DateTimePicker/DateTimePicker.js.map +1 -1
  71. package/build/commonjs/DateTimePicker/YearPicker.js +2 -2
  72. package/build/commonjs/DateTimePicker/YearPicker.js.map +1 -1
  73. package/build/commonjs/StatusBarProvider/Provider.js.map +1 -1
  74. package/build/commonjs/StatusBarProvider/StatusBarProvider.js +111 -2
  75. package/build/commonjs/StatusBarProvider/StatusBarProvider.js.map +1 -1
  76. package/build/commonjs/ViewPager/FluxContext.js +13 -0
  77. package/build/commonjs/ViewPager/FluxContext.js.map +1 -0
  78. package/build/commonjs/ViewPager/InternalContext.js +17 -0
  79. package/build/commonjs/ViewPager/InternalContext.js.map +1 -0
  80. package/build/commonjs/ViewPager/PageStateContext.js +14 -0
  81. package/build/commonjs/ViewPager/PageStateContext.js.map +1 -0
  82. package/build/commonjs/ViewPager/ViewPager.js +81 -0
  83. package/build/commonjs/ViewPager/ViewPager.js.map +1 -0
  84. package/build/commonjs/ViewPager/ViewPager.native.js +152 -0
  85. package/build/commonjs/ViewPager/ViewPager.native.js.map +1 -0
  86. package/build/commonjs/ViewPager/ViewPagerProps.js.map +1 -1
  87. package/build/commonjs/ViewPager/components/ChildrenMemoizedPage.js +122 -0
  88. package/build/commonjs/ViewPager/components/ChildrenMemoizedPage.js.map +1 -0
  89. package/build/commonjs/ViewPager/components/FluxStoreProvider.js +37 -0
  90. package/build/commonjs/ViewPager/components/FluxStoreProvider.js.map +1 -0
  91. package/build/commonjs/ViewPager/components/index.js +24 -0
  92. package/build/commonjs/ViewPager/components/index.js.map +1 -0
  93. package/build/commonjs/ViewPager/hooks/index.js +64 -0
  94. package/build/commonjs/ViewPager/hooks/index.js.map +1 -0
  95. package/build/commonjs/ViewPager/hooks/useDispatch.js +22 -0
  96. package/build/commonjs/ViewPager/hooks/useDispatch.js.map +1 -0
  97. package/build/commonjs/ViewPager/hooks/useEagerState.js +24 -0
  98. package/build/commonjs/ViewPager/hooks/useEagerState.js.map +1 -0
  99. package/build/commonjs/ViewPager/hooks/useForceRender.js +16 -0
  100. package/build/commonjs/ViewPager/hooks/useForceRender.js.map +1 -0
  101. package/build/commonjs/ViewPager/hooks/useLazyState.js +43 -0
  102. package/build/commonjs/ViewPager/hooks/useLazyState.js.map +1 -0
  103. package/build/commonjs/ViewPager/hooks/usePageStore.js +35 -0
  104. package/build/commonjs/ViewPager/hooks/usePageStore.js.map +1 -0
  105. package/build/commonjs/ViewPager/hooks/useStore.js +26 -0
  106. package/build/commonjs/ViewPager/hooks/useStore.js.map +1 -0
  107. package/build/commonjs/ViewPager/hooks/useViewPagerPageState.js +19 -0
  108. package/build/commonjs/ViewPager/hooks/useViewPagerPageState.js.map +1 -0
  109. package/build/commonjs/ViewPager/index.js +42 -2
  110. package/build/commonjs/ViewPager/index.js.map +1 -1
  111. package/build/commonjs/ViewPager/types.js +2 -0
  112. package/build/commonjs/ViewPager/types.js.map +1 -0
  113. package/build/commonjs/ViewPager/utils.js +12 -45
  114. package/build/commonjs/ViewPager/utils.js.map +1 -1
  115. package/build/commonjs/ViewabilityTrackerView/Viewability.js +2 -0
  116. package/build/commonjs/ViewabilityTrackerView/Viewability.js.map +1 -0
  117. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerView.js +45 -0
  118. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerView.js.map +1 -0
  119. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerViewProps.js +2 -0
  120. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerViewProps.js.map +1 -0
  121. package/build/commonjs/{Carousel/index.native.js → ViewabilityTrackerView/index.js} +3 -3
  122. package/build/commonjs/ViewabilityTrackerView/index.js.map +1 -0
  123. package/build/commonjs/ViewabilityTrackerView/measureViewability.js +42 -0
  124. package/build/commonjs/ViewabilityTrackerView/measureViewability.js.map +1 -0
  125. package/build/commonjs/ViewabilityTrackerView/useViewabilityTracker.js +88 -0
  126. package/build/commonjs/ViewabilityTrackerView/useViewabilityTracker.js.map +1 -0
  127. package/build/commonjs/hooks/index.js +16 -0
  128. package/build/commonjs/hooks/index.js.map +1 -1
  129. package/build/commonjs/hooks/useDeferredExecutor.js +45 -0
  130. package/build/commonjs/hooks/useDeferredExecutor.js.map +1 -0
  131. package/build/commonjs/hooks/useHeight.js +4 -4
  132. package/build/commonjs/hooks/useHeight.js.map +1 -1
  133. package/build/commonjs/hooks/useIsMounted.js +22 -0
  134. package/build/commonjs/hooks/useIsMounted.js.map +1 -0
  135. package/build/commonjs/hooks/useUnstableCollapsibleAppBar.js +3 -5
  136. package/build/commonjs/hooks/useUnstableCollapsibleAppBar.js.map +1 -1
  137. package/build/commonjs/index.js +22 -1
  138. package/build/commonjs/index.js.map +1 -1
  139. package/build/module/BottomSheet/BottomSheetNative.js +73 -22
  140. package/build/module/BottomSheet/BottomSheetNative.js.map +1 -1
  141. package/build/module/BottomSheet/BottomSheetProps.js.map +1 -1
  142. package/build/module/BottomSheet/BottomSheetWeb.js +58 -18
  143. package/build/module/BottomSheet/BottomSheetWeb.js.map +1 -1
  144. package/build/module/BottomSheet/useDynamicSnapPoints.js +65 -0
  145. package/build/module/BottomSheet/useDynamicSnapPoints.js.map +1 -0
  146. package/build/module/Carousel/Carousel.js +109 -0
  147. package/build/module/Carousel/Carousel.js.map +1 -0
  148. package/build/module/Carousel/CarouselProps.js.map +1 -1
  149. package/build/module/Carousel/animation/animationUtils.js +2 -0
  150. package/build/module/Carousel/animation/animationUtils.js.map +1 -0
  151. package/build/module/Carousel/animation/createDefaultItemStyle.js +3 -0
  152. package/build/module/Carousel/animation/createDefaultItemStyle.js.map +1 -0
  153. package/build/module/Carousel/animation/createDefaultScrollAnimation.js +12 -0
  154. package/build/module/Carousel/animation/createDefaultScrollAnimation.js.map +1 -0
  155. package/build/module/Carousel/animation/index.js +5 -0
  156. package/build/module/Carousel/animation/index.js.map +1 -0
  157. package/build/module/Carousel/animation/normalItemStyleFactory.js +18 -0
  158. package/build/module/Carousel/animation/normalItemStyleFactory.js.map +1 -0
  159. package/build/module/Carousel/animation/parallaxItemStyleFactory.js +55 -0
  160. package/build/module/Carousel/animation/parallaxItemStyleFactory.js.map +1 -0
  161. package/build/module/Carousel/components/InternalContext.js +19 -0
  162. package/build/module/Carousel/components/InternalContext.js.map +1 -0
  163. package/build/module/Carousel/components/ItemView.js +46 -0
  164. package/build/module/Carousel/components/ItemView.js.map +1 -0
  165. package/build/module/Carousel/components/RootView.js +65 -0
  166. package/build/module/Carousel/components/RootView.js.map +1 -0
  167. package/build/module/Carousel/components/ScrollViewGesture.js +69 -0
  168. package/build/module/Carousel/components/ScrollViewGesture.js.map +1 -0
  169. package/build/module/Carousel/components/index.js +5 -0
  170. package/build/module/Carousel/components/index.js.map +1 -0
  171. package/build/module/Carousel/components/useItemInterpolation.js +51 -0
  172. package/build/module/Carousel/components/useItemInterpolation.js.map +1 -0
  173. package/build/module/Carousel/hooks/index.js +6 -0
  174. package/build/module/Carousel/hooks/index.js.map +1 -0
  175. package/build/module/Carousel/hooks/useAutoplayController.js +48 -0
  176. package/build/module/Carousel/hooks/useAutoplayController.js.map +1 -0
  177. package/build/module/Carousel/hooks/useIndexController.js +44 -0
  178. package/build/module/Carousel/hooks/useIndexController.js.map +1 -0
  179. package/build/module/Carousel/hooks/useItemVisibilityStore.js +86 -0
  180. package/build/module/Carousel/hooks/useItemVisibilityStore.js.map +1 -0
  181. package/build/module/Carousel/hooks/useLoopedData.js +24 -0
  182. package/build/module/Carousel/hooks/useLoopedData.js.map +1 -0
  183. package/build/module/Carousel/hooks/usePagingAnimator.js +192 -0
  184. package/build/module/Carousel/hooks/usePagingAnimator.js.map +1 -0
  185. package/build/module/Carousel/index.js +2 -1
  186. package/build/module/Carousel/index.js.map +1 -1
  187. package/build/module/Carousel/tick.js +6 -0
  188. package/build/module/Carousel/tick.js.map +1 -0
  189. package/build/module/Carousel/types.js +4 -0
  190. package/build/module/Carousel/types.js.map +1 -0
  191. package/build/module/ComicViewer/ComicViewer.js +229 -93
  192. package/build/module/ComicViewer/ComicViewer.js.map +1 -1
  193. package/build/module/ComicViewer/ComicViewerProps.js.map +1 -1
  194. package/build/module/ComicViewer/EncodedTile.js +3 -0
  195. package/build/module/ComicViewer/EncodedTile.js.map +1 -0
  196. package/build/module/ComicViewer/FastScroll.js +152 -0
  197. package/build/module/ComicViewer/FastScroll.js.map +1 -0
  198. package/build/module/ComicViewer/FastScrollProps.js +2 -0
  199. package/build/module/ComicViewer/FastScrollProps.js.map +1 -0
  200. package/build/module/ComicViewer/ReloadButton.js +33 -0
  201. package/build/module/ComicViewer/ReloadButton.js.map +1 -0
  202. package/build/module/ComicViewer/ViewerItem.js +53 -60
  203. package/build/module/ComicViewer/ViewerItem.js.map +1 -1
  204. package/build/module/ComicViewer/index.js.map +1 -1
  205. package/build/module/ComicViewer/util.js +15 -0
  206. package/build/module/ComicViewer/util.js.map +1 -0
  207. package/build/module/DateTimePicker/DateTimePicker.js +13 -4
  208. package/build/module/DateTimePicker/DateTimePicker.js.map +1 -1
  209. package/build/module/DateTimePicker/YearPicker.js +2 -2
  210. package/build/module/DateTimePicker/YearPicker.js.map +1 -1
  211. package/build/module/StatusBarProvider/Provider.js.map +1 -1
  212. package/build/module/StatusBarProvider/StatusBarProvider.js +105 -2
  213. package/build/module/StatusBarProvider/StatusBarProvider.js.map +1 -1
  214. package/build/module/ViewPager/FluxContext.js +4 -0
  215. package/build/module/ViewPager/FluxContext.js.map +1 -0
  216. package/build/module/ViewPager/InternalContext.js +7 -0
  217. package/build/module/ViewPager/InternalContext.js.map +1 -0
  218. package/build/module/ViewPager/PageStateContext.js +5 -0
  219. package/build/module/ViewPager/PageStateContext.js.map +1 -0
  220. package/build/module/ViewPager/ViewPager.js +57 -0
  221. package/build/module/ViewPager/ViewPager.js.map +1 -0
  222. package/build/module/ViewPager/ViewPager.native.js +129 -0
  223. package/build/module/ViewPager/ViewPager.native.js.map +1 -0
  224. package/build/module/ViewPager/ViewPagerProps.js.map +1 -1
  225. package/build/module/ViewPager/components/ChildrenMemoizedPage.js +101 -0
  226. package/build/module/ViewPager/components/ChildrenMemoizedPage.js.map +1 -0
  227. package/build/module/ViewPager/components/FluxStoreProvider.js +20 -0
  228. package/build/module/ViewPager/components/FluxStoreProvider.js.map +1 -0
  229. package/build/module/ViewPager/components/index.js +3 -0
  230. package/build/module/ViewPager/components/index.js.map +1 -0
  231. package/build/module/ViewPager/hooks/index.js +8 -0
  232. package/build/module/ViewPager/hooks/index.js.map +1 -0
  233. package/build/module/ViewPager/hooks/useDispatch.js +10 -0
  234. package/build/module/ViewPager/hooks/useDispatch.js.map +1 -0
  235. package/build/module/ViewPager/hooks/useEagerState.js +12 -0
  236. package/build/module/ViewPager/hooks/useEagerState.js.map +1 -0
  237. package/build/module/ViewPager/hooks/useForceRender.js +7 -0
  238. package/build/module/ViewPager/hooks/useForceRender.js.map +1 -0
  239. package/build/module/ViewPager/hooks/useLazyState.js +28 -0
  240. package/build/module/ViewPager/hooks/useLazyState.js.map +1 -0
  241. package/build/module/ViewPager/hooks/usePageStore.js +25 -0
  242. package/build/module/ViewPager/hooks/usePageStore.js.map +1 -0
  243. package/build/module/ViewPager/hooks/useStore.js +14 -0
  244. package/build/module/ViewPager/hooks/useStore.js.map +1 -0
  245. package/build/module/ViewPager/hooks/useViewPagerPageState.js +7 -0
  246. package/build/module/ViewPager/hooks/useViewPagerPageState.js.map +1 -0
  247. package/build/module/ViewPager/index.js +3 -1
  248. package/build/module/ViewPager/index.js.map +1 -1
  249. package/build/module/ViewPager/types.js +2 -0
  250. package/build/module/ViewPager/types.js.map +1 -0
  251. package/build/module/ViewPager/utils.js +6 -34
  252. package/build/module/ViewPager/utils.js.map +1 -1
  253. package/build/module/ViewabilityTrackerView/Viewability.js +2 -0
  254. package/build/module/ViewabilityTrackerView/Viewability.js.map +1 -0
  255. package/build/module/ViewabilityTrackerView/ViewabilityTrackerView.js +28 -0
  256. package/build/module/ViewabilityTrackerView/ViewabilityTrackerView.js.map +1 -0
  257. package/build/module/ViewabilityTrackerView/ViewabilityTrackerViewProps.js +2 -0
  258. package/build/module/ViewabilityTrackerView/ViewabilityTrackerViewProps.js.map +1 -0
  259. package/build/module/ViewabilityTrackerView/index.js +2 -0
  260. package/build/module/ViewabilityTrackerView/index.js.map +1 -0
  261. package/build/module/ViewabilityTrackerView/measureViewability.js +34 -0
  262. package/build/module/ViewabilityTrackerView/measureViewability.js.map +1 -0
  263. package/build/module/ViewabilityTrackerView/useViewabilityTracker.js +73 -0
  264. package/build/module/ViewabilityTrackerView/useViewabilityTracker.js.map +1 -0
  265. package/build/module/hooks/index.js +2 -0
  266. package/build/module/hooks/index.js.map +1 -1
  267. package/build/module/hooks/useDeferredExecutor.js +33 -0
  268. package/build/module/hooks/useDeferredExecutor.js.map +1 -0
  269. package/build/module/hooks/useHeight.js +2 -3
  270. package/build/module/hooks/useHeight.js.map +1 -1
  271. package/build/module/hooks/useIsMounted.js +13 -0
  272. package/build/module/hooks/useIsMounted.js.map +1 -0
  273. package/build/module/hooks/useUnstableCollapsibleAppBar.js +4 -6
  274. package/build/module/hooks/useUnstableCollapsibleAppBar.js.map +1 -1
  275. package/build/module/index.js +2 -0
  276. package/build/module/index.js.map +1 -1
  277. package/build/typescript/AnimatedY/AnimatedY.d.ts +1 -0
  278. package/build/typescript/BottomSheet/BottomSheetNative.d.ts +1 -0
  279. package/build/typescript/BottomSheet/BottomSheetProps.d.ts +22 -1
  280. package/build/typescript/BottomSheet/BottomSheetWeb.d.ts +1 -0
  281. package/build/typescript/BottomSheet/TransparentBackdrop.d.ts +1 -0
  282. package/build/typescript/BottomSheet/useDynamicSnapPoints.d.ts +13 -0
  283. package/build/typescript/Carousel/Carousel.d.ts +5 -0
  284. package/build/typescript/Carousel/CarouselProps.d.ts +33 -48
  285. package/build/typescript/Carousel/animation/animationUtils.d.ts +1 -0
  286. package/build/typescript/Carousel/animation/createDefaultItemStyle.d.ts +2 -0
  287. package/build/typescript/Carousel/animation/createDefaultScrollAnimation.d.ts +2 -0
  288. package/build/typescript/Carousel/animation/index.d.ts +4 -0
  289. package/build/typescript/Carousel/animation/normalItemStyleFactory.d.ts +2 -0
  290. package/build/typescript/Carousel/animation/parallaxItemStyleFactory.d.ts +9 -0
  291. package/build/typescript/Carousel/components/InternalContext.d.ts +14 -0
  292. package/build/typescript/Carousel/components/ItemView.d.ts +9 -0
  293. package/build/typescript/Carousel/components/RootView.d.ts +16 -0
  294. package/build/typescript/Carousel/components/ScrollViewGesture.d.ts +12 -0
  295. package/build/typescript/Carousel/components/index.d.ts +4 -0
  296. package/build/typescript/Carousel/components/useItemInterpolation.d.ts +2 -0
  297. package/build/typescript/Carousel/hooks/index.d.ts +5 -0
  298. package/build/typescript/Carousel/hooks/useAutoplayController.d.ts +7 -0
  299. package/build/typescript/Carousel/hooks/useIndexController.d.ts +10 -0
  300. package/build/typescript/Carousel/hooks/useItemVisibilityStore.d.ts +7 -0
  301. package/build/typescript/Carousel/hooks/useLoopedData.d.ts +1 -0
  302. package/build/typescript/Carousel/hooks/usePagingAnimator.d.ts +17 -0
  303. package/build/typescript/Carousel/index.d.ts +3 -1
  304. package/build/typescript/Carousel/tick.d.ts +2 -0
  305. package/build/typescript/Carousel/types.d.ts +91 -0
  306. package/build/typescript/ComicViewer/ComicViewer.d.ts +2 -1
  307. package/build/typescript/ComicViewer/ComicViewerProps.d.ts +61 -43
  308. package/build/typescript/ComicViewer/EncodedTile.d.ts +2 -0
  309. package/build/typescript/ComicViewer/FastScroll.d.ts +4 -0
  310. package/build/typescript/ComicViewer/FastScrollProps.d.ts +74 -0
  311. package/build/typescript/ComicViewer/ReloadButton.d.ts +7 -0
  312. package/build/typescript/ComicViewer/ViewerItem.d.ts +46 -7
  313. package/build/typescript/ComicViewer/index.d.ts +3 -2
  314. package/build/typescript/ComicViewer/util.d.ts +2 -0
  315. package/build/typescript/DateTimePicker/DateTimePicker.d.ts +1 -0
  316. package/build/typescript/DateTimePicker/YearPicker.d.ts +1 -0
  317. package/build/typescript/FlipCard/FlipCard.d.ts +1 -0
  318. package/build/typescript/StatusBarProvider/Provider.d.ts +13 -0
  319. package/build/typescript/StatusBarProvider/StatusBarProvider.d.ts +1 -0
  320. package/build/typescript/ViewPager/FluxContext.d.ts +5 -0
  321. package/build/typescript/ViewPager/InternalContext.d.ts +7 -0
  322. package/build/typescript/ViewPager/PageStateContext.d.ts +6 -0
  323. package/build/typescript/ViewPager/ViewPager.d.ts +5 -0
  324. package/build/typescript/ViewPager/ViewPager.native.d.ts +5 -0
  325. package/build/typescript/ViewPager/ViewPagerProps.d.ts +21 -27
  326. package/build/typescript/ViewPager/components/ChildrenMemoizedPage.d.ts +14 -0
  327. package/build/typescript/ViewPager/components/FluxStoreProvider.d.ts +6 -0
  328. package/build/typescript/ViewPager/components/index.d.ts +2 -0
  329. package/build/typescript/ViewPager/hooks/index.d.ts +7 -0
  330. package/build/typescript/ViewPager/hooks/useDispatch.d.ts +2 -0
  331. package/build/typescript/ViewPager/hooks/useEagerState.d.ts +1 -0
  332. package/build/typescript/ViewPager/hooks/useForceRender.d.ts +2 -0
  333. package/build/typescript/ViewPager/hooks/useLazyState.d.ts +2 -0
  334. package/build/typescript/ViewPager/hooks/usePageStore.d.ts +2 -0
  335. package/build/typescript/ViewPager/hooks/useStore.d.ts +2 -0
  336. package/build/typescript/ViewPager/hooks/useViewPagerPageState.d.ts +1 -0
  337. package/build/typescript/ViewPager/index.d.ts +4 -1
  338. package/build/typescript/ViewPager/types.d.ts +12 -0
  339. package/build/typescript/ViewPager/utils.d.ts +5 -20
  340. package/build/typescript/ViewabilityTrackerView/Viewability.d.ts +3 -0
  341. package/build/typescript/ViewabilityTrackerView/ViewabilityTrackerView.d.ts +3 -0
  342. package/build/typescript/ViewabilityTrackerView/ViewabilityTrackerViewProps.d.ts +22 -0
  343. package/build/typescript/ViewabilityTrackerView/index.d.ts +2 -0
  344. package/build/typescript/ViewabilityTrackerView/measureViewability.d.ts +11 -0
  345. package/build/typescript/ViewabilityTrackerView/useViewabilityTracker.d.ts +11 -0
  346. package/build/typescript/hooks/index.d.ts +2 -0
  347. package/build/typescript/hooks/useDeferredExecutor.d.ts +11 -0
  348. package/build/typescript/hooks/useIsMounted.d.ts +4 -0
  349. package/build/typescript/index.d.ts +2 -0
  350. package/package.json +10 -25
  351. package/src/BottomSheet/BottomSheetNative.tsx +76 -21
  352. package/src/BottomSheet/BottomSheetProps.ts +26 -1
  353. package/src/BottomSheet/BottomSheetWeb.tsx +67 -24
  354. package/src/BottomSheet/useDynamicSnapPoints.ts +87 -0
  355. package/src/Carousel/Carousel.tsx +135 -0
  356. package/src/Carousel/CarouselProps.ts +42 -53
  357. package/src/Carousel/animation/animationUtils.ts +1 -0
  358. package/src/Carousel/animation/createDefaultItemStyle.ts +3 -0
  359. package/src/Carousel/animation/createDefaultScrollAnimation.ts +14 -0
  360. package/src/Carousel/animation/index.ts +4 -0
  361. package/src/Carousel/animation/normalItemStyleFactory.ts +19 -0
  362. package/src/Carousel/animation/parallaxItemStyleFactory.ts +79 -0
  363. package/src/Carousel/components/InternalContext.ts +33 -0
  364. package/src/Carousel/components/ItemView.tsx +66 -0
  365. package/src/Carousel/components/RootView.tsx +79 -0
  366. package/src/Carousel/components/ScrollViewGesture.tsx +93 -0
  367. package/src/Carousel/components/index.ts +4 -0
  368. package/src/Carousel/components/useItemInterpolation.ts +107 -0
  369. package/src/Carousel/hooks/index.ts +5 -0
  370. package/src/Carousel/hooks/useAutoplayController.ts +57 -0
  371. package/src/Carousel/hooks/useIndexController.tsx +57 -0
  372. package/src/Carousel/hooks/useItemVisibilityStore.ts +107 -0
  373. package/src/Carousel/hooks/useLoopedData.ts +26 -0
  374. package/src/Carousel/hooks/usePagingAnimator.ts +255 -0
  375. package/src/Carousel/index.ts +4 -2
  376. package/src/Carousel/tick.ts +6 -0
  377. package/src/Carousel/types.ts +114 -0
  378. package/src/ComicViewer/ComicViewer.tsx +268 -106
  379. package/src/ComicViewer/ComicViewerProps.ts +66 -44
  380. package/src/ComicViewer/EncodedTile.ts +3 -0
  381. package/src/ComicViewer/FastScroll.tsx +176 -0
  382. package/src/ComicViewer/FastScrollProps.ts +88 -0
  383. package/src/ComicViewer/ReloadButton.tsx +36 -0
  384. package/src/ComicViewer/ViewerItem.tsx +104 -62
  385. package/src/ComicViewer/index.ts +8 -2
  386. package/src/ComicViewer/util.ts +15 -0
  387. package/src/DateTimePicker/DateTimePicker.tsx +11 -3
  388. package/src/DateTimePicker/YearPicker.tsx +2 -2
  389. package/src/StatusBarProvider/Provider.ts +14 -0
  390. package/src/StatusBarProvider/StatusBarProvider.tsx +103 -1
  391. package/src/ViewPager/FluxContext.ts +8 -0
  392. package/src/ViewPager/InternalContext.ts +13 -0
  393. package/src/ViewPager/PageStateContext.ts +11 -0
  394. package/src/ViewPager/ViewPager.native.tsx +152 -0
  395. package/src/ViewPager/ViewPager.tsx +69 -0
  396. package/src/ViewPager/ViewPagerProps.ts +25 -34
  397. package/src/ViewPager/components/ChildrenMemoizedPage.tsx +124 -0
  398. package/src/ViewPager/components/FluxStoreProvider.tsx +27 -0
  399. package/src/ViewPager/components/index.ts +2 -0
  400. package/src/ViewPager/hooks/index.ts +7 -0
  401. package/src/ViewPager/hooks/useDispatch.ts +11 -0
  402. package/src/ViewPager/hooks/useEagerState.ts +14 -0
  403. package/src/ViewPager/hooks/useForceRender.ts +7 -0
  404. package/src/ViewPager/hooks/useLazyState.ts +32 -0
  405. package/src/ViewPager/hooks/usePageStore.ts +30 -0
  406. package/src/ViewPager/hooks/useStore.ts +15 -0
  407. package/src/ViewPager/hooks/useViewPagerPageState.ts +6 -0
  408. package/src/ViewPager/index.ts +11 -2
  409. package/src/ViewPager/types.ts +15 -0
  410. package/src/ViewPager/utils.tsx +9 -56
  411. package/src/ViewabilityTrackerView/Viewability.ts +3 -0
  412. package/src/ViewabilityTrackerView/ViewabilityTrackerView.tsx +33 -0
  413. package/src/ViewabilityTrackerView/ViewabilityTrackerViewProps.ts +25 -0
  414. package/src/ViewabilityTrackerView/index.ts +2 -0
  415. package/src/ViewabilityTrackerView/measureViewability.ts +54 -0
  416. package/src/ViewabilityTrackerView/useViewabilityTracker.ts +85 -0
  417. package/src/hooks/index.ts +2 -0
  418. package/src/hooks/useDeferredExecutor.ts +46 -0
  419. package/src/hooks/useHeight.ts +3 -4
  420. package/src/hooks/useIsMounted.ts +19 -0
  421. package/src/hooks/useUnstableCollapsibleAppBar.ts +4 -4
  422. package/src/index.ts +3 -0
  423. package/build/commonjs/Carousel/CarouselNative.js +0 -72
  424. package/build/commonjs/Carousel/CarouselNative.js.map +0 -1
  425. package/build/commonjs/Carousel/CarouselWeb.js +0 -237
  426. package/build/commonjs/Carousel/CarouselWeb.js.map +0 -1
  427. package/build/commonjs/Carousel/index.native.js.map +0 -1
  428. package/build/commonjs/Carousel/utils.js +0 -19
  429. package/build/commonjs/Carousel/utils.js.map +0 -1
  430. package/build/commonjs/ComicViewer/ComicViewerItemProps.js.map +0 -1
  431. package/build/commonjs/ViewPager/ChildrenMemoizedPage.js +0 -49
  432. package/build/commonjs/ViewPager/ChildrenMemoizedPage.js.map +0 -1
  433. package/build/commonjs/ViewPager/ViewPagerNative.js +0 -75
  434. package/build/commonjs/ViewPager/ViewPagerNative.js.map +0 -1
  435. package/build/commonjs/ViewPager/ViewPagerWeb.js +0 -55
  436. package/build/commonjs/ViewPager/ViewPagerWeb.js.map +0 -1
  437. package/build/commonjs/ViewPager/index.native.js +0 -16
  438. package/build/commonjs/ViewPager/index.native.js.map +0 -1
  439. package/build/module/Carousel/CarouselNative.js +0 -54
  440. package/build/module/Carousel/CarouselNative.js.map +0 -1
  441. package/build/module/Carousel/CarouselWeb.js +0 -215
  442. package/build/module/Carousel/CarouselWeb.js.map +0 -1
  443. package/build/module/Carousel/index.native.js +0 -2
  444. package/build/module/Carousel/index.native.js.map +0 -1
  445. package/build/module/Carousel/utils.js +0 -7
  446. package/build/module/Carousel/utils.js.map +0 -1
  447. package/build/module/ComicViewer/ComicViewerItemProps.js +0 -2
  448. package/build/module/ComicViewer/ComicViewerItemProps.js.map +0 -1
  449. package/build/module/ViewPager/ChildrenMemoizedPage.js +0 -37
  450. package/build/module/ViewPager/ChildrenMemoizedPage.js.map +0 -1
  451. package/build/module/ViewPager/ViewPagerNative.js +0 -58
  452. package/build/module/ViewPager/ViewPagerNative.js.map +0 -1
  453. package/build/module/ViewPager/ViewPagerWeb.js +0 -41
  454. package/build/module/ViewPager/ViewPagerWeb.js.map +0 -1
  455. package/build/module/ViewPager/index.native.js +0 -2
  456. package/build/module/ViewPager/index.native.js.map +0 -1
  457. package/build/typescript/Carousel/CarouselNative.d.ts +0 -2
  458. package/build/typescript/Carousel/CarouselWeb.d.ts +0 -4
  459. package/build/typescript/Carousel/index.native.d.ts +0 -1
  460. package/build/typescript/Carousel/utils.d.ts +0 -6
  461. package/build/typescript/ComicViewer/ComicViewerItemProps.d.ts +0 -12
  462. package/build/typescript/ViewPager/ChildrenMemoizedPage.d.ts +0 -4
  463. package/build/typescript/ViewPager/ViewPagerNative.d.ts +0 -2
  464. package/build/typescript/ViewPager/ViewPagerWeb.d.ts +0 -2
  465. package/build/typescript/ViewPager/index.native.d.ts +0 -1
  466. package/src/Carousel/CarouselNative.tsx +0 -67
  467. package/src/Carousel/CarouselWeb.tsx +0 -222
  468. package/src/Carousel/index.native.ts +0 -1
  469. package/src/Carousel/utils.ts +0 -11
  470. package/src/ComicViewer/ComicViewerItemProps.ts +0 -15
  471. package/src/ViewPager/ChildrenMemoizedPage.tsx +0 -36
  472. package/src/ViewPager/ViewPagerNative.tsx +0 -73
  473. package/src/ViewPager/ViewPagerWeb.tsx +0 -52
  474. package/src/ViewPager/index.native.ts +0 -1
@@ -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,"names":[],"sources":["index.ts"],"sourcesContent":["export { default } from './CarouselWeb';\nexport type { default as CarouselProps } from './CarouselProps';"],"mappings":";;;;;;;;;;;;AAAA"}
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"}
@@ -13,6 +13,8 @@ var R = _interopRequireWildcard(require("ramda"));
13
13
 
14
14
  var _ViewerItem = _interopRequireDefault(require("./ViewerItem"));
15
15
 
16
+ var _FastScroll = _interopRequireDefault(require("./FastScroll"));
17
+
16
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
19
 
18
20
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
@@ -21,138 +23,269 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
21
23
 
22
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); }
23
25
 
24
- const getItemHeights = items => R.map(content => content.height)(items);
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 = image => ({
33
+ totalErrorCount: 0,
34
+ dimension: image.dimension,
35
+ tryRenderingMillis: 0,
36
+ urlState: {
37
+ url: image.url,
38
+ validity: 'unknown'
39
+ }
40
+ });
29
41
 
30
- const keyExtractor = item => item.id;
42
+ const mapImageStateToItemState = (index, imageState, autoHandleErrorCount) => {
43
+ var _imageState$urlState, _imageState$urlState2;
44
+
45
+ return {
46
+ index,
47
+ url: (_imageState$urlState = imageState.urlState) === null || _imageState$urlState === void 0 ? void 0 : _imageState$urlState.url,
48
+ imageKey: `${imageState.tryRenderingMillis}-${index}`,
49
+ reloadButtonVisible: ((_imageState$urlState2 = imageState.urlState) === null || _imageState$urlState2 === void 0 ? void 0 : _imageState$urlState2.validity) !== 'valid' && imageState.totalErrorCount >= autoHandleErrorCount,
50
+ dimension: imageState.dimension
51
+ };
52
+ };
53
+
54
+ const mapIndexed = R.addIndex(R.map);
55
+ const MAXIMUM_WIDTH = 720;
31
56
 
32
57
  function ComicViewer(props) {
33
58
  const {
34
- data,
35
- errorDebounceMillis = 500,
36
- errorRetryCount = 3,
59
+ debounceMillis = 100,
60
+ autoHandleErrorCount = 3,
61
+ fastScrollOptions,
37
62
  initialNumToRender = 1,
63
+ initialNumToCreate,
38
64
  initialScrollPercentage = 0,
39
65
  itemVisiblePercentThreshold = 0,
66
+ intrinsicImages: originalIntrinsicImages,
67
+ maxContentWidth = MAXIMUM_WIDTH,
68
+ onItemPress,
69
+ onScroll,
40
70
  onError,
41
- viewerWidth,
71
+ onReloadPress,
72
+ viewportWidth,
73
+ invisiblePaddingTop = 0,
42
74
  windowSize = 3,
43
75
  ...otherProps
44
76
  } = props;
77
+ const initialCreateCount = initialNumToCreate ? R.min(initialNumToCreate, initialNumToRender) : undefined;
78
+ const initialIntrinsicImages = initialCreateCount ? R.take(initialCreateCount, originalIntrinsicImages) : originalIntrinsicImages;
79
+ const [intrinsicImages, setIntrinsicImages] = (0, _react.useState)(initialIntrinsicImages);
80
+ const fastScrollRef = fastScrollOptions === null || fastScrollOptions === void 0 ? void 0 : fastScrollOptions.ref;
45
81
  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);
82
+ const actualImageWidth = Math.min(viewportWidth, maxContentWidth);
83
+ const initialImageStates = (0, _react.useMemo)(() => R.map(createInitialImageState, intrinsicImages), []);
84
+ const imageStatesRef = (0, _react.useRef)(initialImageStates);
85
+ const shouldWaitInitialCreate = (0, _react.useRef)(!R.isNil(initialCreateCount));
86
+
87
+ const mapImageStatesToItemStates = imageStates => {
88
+ return imageStates.map((image, index) => mapImageStateToItemState(index, image, autoHandleErrorCount));
89
+ };
90
+
91
+ const [itemStates, setItemStates] = (0, _react.useState)(() => {
92
+ return mapImageStatesToItemStates(imageStatesRef.current);
93
+ });
94
+ const renderedDimensions = (0, _react.useMemo)(() => {
95
+ return mapIndexed((intrinsicImage, index) => {
96
+ const height = intrinsicImage.dimension.height * actualImageWidth / intrinsicImage.dimension.width + (index === 0 ? invisiblePaddingTop : 0);
97
+ return {
98
+ width: actualImageWidth,
99
+ height: isNaN(height) ? 0 : height
100
+ };
101
+ }, intrinsicImages);
102
+ }, [actualImageWidth, intrinsicImages]);
103
+ const layoutFromDimensions = (0, _react.useCallback)(() => {
104
+ const itemHeights = R.map(dimension => dimension.height, renderedDimensions);
105
+ const [totalHeight, heightAccum] = getHeightAccum(itemHeights);
106
+ const itemOffsets = R.prepend(0, heightAccum);
107
+
108
+ const getItemLayout = (data, index) => ({
109
+ index,
110
+ length: itemHeights[index],
111
+ offset: itemOffsets[index]
112
+ });
113
+
114
+ return {
115
+ totalHeight,
116
+ getItemLayout
117
+ };
118
+ }, [renderedDimensions]);
119
+ const {
120
+ totalHeight,
121
+ getItemLayout
122
+ } = layoutFromDimensions();
57
123
  const viewabilityConfig = (0, _react.useMemo)(() => ({
58
124
  itemVisiblePercentThreshold
59
125
  }), [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]);
126
+
127
+ const updateImageState = updateFunction => {
128
+ const prevImageStates = imageStatesRef.current;
129
+ const newImageStates = prevImageStates.map(updateFunction);
130
+ imageStatesRef.current = newImageStates;
131
+ setItemStates(prevItemStates => {
132
+ const newItemStates = mapImageStatesToItemStates(newImageStates);
133
+ return R.equals(prevItemStates, newItemStates) ? prevItemStates : newItemStates;
134
+ });
135
+ };
136
+
137
+ const updateTryRenderingMillis = () => {
138
+ const tryRenderingMillis = new Date().getTime();
139
+ updateImageState((imageState, i) => {
140
+ const urlState = imageState.urlState;
141
+
142
+ if ((urlState === null || urlState === void 0 ? void 0 : urlState.validity) === 'invalid') {
143
+ return { ...imageState,
144
+ tryRenderingMillis
145
+ };
146
+ }
147
+
148
+ return imageState;
149
+ });
150
+ };
151
+
68
152
  const onViewableItemsChanged = (0, _react.useRef)(_ref => {
69
153
  let {
70
154
  viewableItems
71
155
  } = _ref;
72
- setItems(prev => {
73
- const viewableItemIds = R.map(viewableItem => viewableItem.item.id)(viewableItems);
74
- return R.map(prevItem => ({ ...prevItem,
75
- isViewable: R.includes(prevItem.id, viewableItemIds)
76
- }))([...prev]);
77
- });
156
+ updateTryRenderingMillis();
78
157
  });
158
+ const handleScroll = (0, _react.useCallback)(event => {
159
+ var _fastScrollRef$curren;
79
160
 
80
- const onErrorHandler = errors => {
81
- const isRetryLimited = R.any(error => error.count >= errorRetryCount)(errors);
161
+ fastScrollRef === null || fastScrollRef === void 0 ? void 0 : (_fastScrollRef$curren = fastScrollRef.current) === null || _fastScrollRef$curren === void 0 ? void 0 : _fastScrollRef$curren.onContentScroll(event);
162
+ onScroll === null || onScroll === void 0 ? void 0 : onScroll(event);
163
+ }, [onScroll]);
82
164
 
83
- if (isRetryLimited) {
84
- return;
85
- }
165
+ const scrollContentToOffset = offset => {
166
+ var _flatListRef$current;
86
167
 
87
- onError && onError(errors);
168
+ (_flatListRef$current = flatListRef.current) === null || _flatListRef$current === void 0 ? void 0 : _flatListRef$current.scrollToOffset({
169
+ offset,
170
+ animated: false
171
+ });
88
172
  };
89
173
 
90
- const itemErrorHandler = (0, _react.useCallback)(errorInfo => {
91
- errors.current.set(errorInfo.id, errorInfo.count);
174
+ const updateIntrinsicImages = (0, _react.useCallback)(() => {
175
+ const isInitialCreateFinish = R.all(imageState => imageState.urlState.validity !== 'unknown')(imageStatesRef.current);
92
176
 
93
- if (debounceTimeOut.current) {
94
- clearTimeout(debounceTimeOut.current);
177
+ if (!isInitialCreateFinish || !shouldWaitInitialCreate.current) {
178
+ return;
95
179
  }
96
180
 
97
- debounceTimeOut.current = setTimeout(function () {
98
- const errorsArray = Array.from(errors.current.entries());
99
- const errorsInfo = R.map(_ref2 => {
100
- let [key, value] = _ref2;
101
- return {
102
- id: key,
103
- count: value
104
- };
105
- })(errorsArray);
106
- onErrorHandler([...errorsInfo]);
107
- errors.current.clear();
108
- }, errorDebounceMillis);
109
- }, [errorDebounceMillis, errors.current]);
181
+ setIntrinsicImages(originalIntrinsicImages);
182
+ const newImageStates = R.map(createInitialImageState, originalIntrinsicImages);
183
+ imageStatesRef.current = R.map(_ref2 => {
184
+ let [, state] = _ref2;
185
+ return state;
186
+ })(R.toPairs(R.mergeDeepLeft(imageStatesRef.current, newImageStates)));
187
+ setItemStates(mapImageStatesToItemStates(imageStatesRef.current));
188
+ shouldWaitInitialCreate.current = false;
189
+ }, [originalIntrinsicImages, createInitialImageState, mapImageStatesToItemStates]);
110
190
  const renderItem = (0, _react.useCallback)(_ref3 => {
191
+ var _renderedDimensions$i, _renderedDimensions$i2;
192
+
111
193
  let {
112
- item
194
+ item,
195
+ index
113
196
  } = _ref3;
114
- const props = { ...item,
115
- onError: itemErrorHandler
197
+
198
+ const handleError = () => {
199
+ onError && onError();
200
+ updateImageState((imageState, i) => {
201
+ const urlState = imageState.urlState;
202
+
203
+ if (i === index) {
204
+ return { ...imageState,
205
+ totalErrorCount: imageState.totalErrorCount + 1,
206
+ urlState: { ...urlState,
207
+ validity: 'invalid'
208
+ }
209
+ };
210
+ }
211
+
212
+ return imageState;
213
+ });
214
+
215
+ if (item.reloadButtonVisible) {
216
+ return;
217
+ }
218
+
219
+ updateIntrinsicImages();
220
+ updateTryRenderingMillis();
116
221
  };
117
- return /*#__PURE__*/_react.default.createElement(_ViewerItem.default, {
118
- props: props
119
- });
120
- }, []);
121
- (0, _react.useEffect)(() => {
122
- setItems(prev => {
123
- return R.map(prevItem => {
124
- const currentData = R.find(currentItemData => prevItem.id === currentItemData.id)(data);
125
222
 
126
- if (currentData && currentData.sourceUrl !== prevItem.sourceUrl) {
127
- return { ...prevItem,
128
- sourceUrl: currentData.sourceUrl
223
+ const handleReloadPress = () => {
224
+ onReloadPress && onReloadPress();
225
+ updateTryRenderingMillis();
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
+ }
129
237
  };
130
238
  }
131
239
 
132
- return prevItem;
133
- })([...prev]);
240
+ return imageState;
241
+ });
242
+ updateIntrinsicImages();
243
+ };
244
+
245
+ return /*#__PURE__*/_react.default.createElement(_ViewerItem.default, {
246
+ onError: handleError,
247
+ onLoad: onLoad,
248
+ onPress: onItemPress,
249
+ onReloadPress: handleReloadPress,
250
+ url: item.url,
251
+ imageKey: item.imageKey,
252
+ invisiblePaddingTop: index === 0 ? invisiblePaddingTop : 0,
253
+ width: ((_renderedDimensions$i = renderedDimensions[index]) === null || _renderedDimensions$i === void 0 ? void 0 : _renderedDimensions$i.width) ?? 0,
254
+ height: ((_renderedDimensions$i2 = renderedDimensions[index]) === null || _renderedDimensions$i2 === void 0 ? void 0 : _renderedDimensions$i2.height) ?? 0,
255
+ reloadButtonVisible: item.reloadButtonVisible
134
256
  });
135
- }, [resourceString]);
257
+ }, [onItemPress, renderedDimensions, updateIntrinsicImages]);
136
258
  (0, _react.useEffect)(() => {
137
- const newItems = R.map(item => ({ ...item,
138
- width: viewerWidth,
139
- height: item.height * viewerWidth / item.width
140
- }))(items);
141
- setItems(newItems);
142
- }, [viewerWidth]);
143
- (0, _react.useEffect)(() => {
144
- const totalHeight = itemHeightAccum[0];
145
- const offset = Math.floor(initialScrollPercentage / 100 * totalHeight);
259
+ const scroll = () => {
260
+ const offset = Math.floor(initialScrollPercentage / 100 * totalHeight);
146
261
 
147
- if (flatListRef.current) {
148
- flatListRef.current.scrollToOffset({
149
- offset,
150
- animated: false
151
- });
262
+ if (flatListRef.current) {
263
+ flatListRef.current.scrollToOffset({
264
+ offset,
265
+ animated: false
266
+ });
267
+ }
268
+ };
269
+
270
+ let timeoutId = undefined;
271
+ /**
272
+ * @FIXME
273
+ * scrollToOffset has issue(no effect) in useEffect hook on iOS.
274
+ * ref: https://github.com/facebook/react-native/issues/35575
275
+ */
276
+
277
+ if (_reactNative.Platform.OS === 'ios') {
278
+ timeoutId = setTimeout(scroll, 0);
279
+ } else {
280
+ scroll();
152
281
  }
153
- }, [flatListRef.current]);
154
- return /*#__PURE__*/_react.default.createElement(_reactNative.FlatList, _extends({
155
- data: items,
282
+
283
+ return () => {
284
+ timeoutId && clearTimeout(timeoutId);
285
+ };
286
+ }, []);
287
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_reactNative.FlatList, _extends({
288
+ data: itemStates,
156
289
  getItemLayout: getItemLayout,
157
290
  initialNumToRender: initialNumToRender,
158
291
  keyExtractor: keyExtractor,
@@ -160,8 +293,13 @@ function ComicViewer(props) {
160
293
  ref: flatListRef,
161
294
  renderItem: renderItem,
162
295
  viewabilityConfig: viewabilityConfig,
163
- windowSize: windowSize
164
- }, otherProps));
296
+ windowSize: windowSize,
297
+ onScroll: handleScroll
298
+ }, otherProps)), /*#__PURE__*/_react.default.createElement(_FastScroll.default, _extends({}, fastScrollOptions, {
299
+ contentLength: totalHeight,
300
+ initialScrollPercentage: initialScrollPercentage,
301
+ scrollContentToOffset: scrollContentToOffset
302
+ })));
165
303
  }
166
304
 
167
305
  ;
@@ -1 +1 @@
1
- {"version":3,"names":["getItemHeights","items","R","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","useRef","errors","Map","debounceTimeOut","resourceString","toString","itemData","sourceUrl","initialItems","isViewable","width","setItems","useState","itemHeightAccum","viewabilityConfig","useMemo","getItemLayout","useCallback","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","useEffect","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":["appender","left","right","getHeightAccum","heights","R","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","useState","fastScrollRef","ref","flatListRef","useRef","actualImageWidth","Math","initialImageStates","useMemo","imageStatesRef","shouldWaitInitialCreate","isNil","mapImageStatesToItemStates","imageStates","itemStates","setItemStates","current","renderedDimensions","intrinsicImage","height","width","isNaN","layoutFromDimensions","useCallback","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","useEffect","scroll","floor","timeoutId","Platform","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":""}