@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
@@ -1,162 +1,324 @@
1
1
  import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
2
- import { FlatList, ListRenderItem, ViewToken } from 'react-native';
2
+ import { FlatList, ListRenderItem, NativeScrollEvent, NativeSyntheticEvent, Platform, ViewToken } from 'react-native';
3
3
  import * as R from 'ramda';
4
- import { ComicViewerItemData, default as ComicViewerProps, ErrorInfo } from './ComicViewerProps';
5
- import type ComicViewerItemProps from './ComicViewerItemProps';
4
+ import { default as ComicViewerProps, Dimension, IntrinsicImage } from './ComicViewerProps';
6
5
  import ViewerItem from './ViewerItem';
6
+ import FastScroll from './FastScroll';
7
7
 
8
- const getItemHeights = <T, >(items: ComicViewerItemProps<T>[]): number[] => R.map((content: ComicViewerItemProps<T>) => content.height)(items);
9
8
  const appender = (left: number, right: number): [number, number] => [left + right, left + right];
10
- const getHeightAccum = (itemHeights: number[]): [number, number[]] => R.mapAccum(appender, 0, itemHeights);
9
+ const getHeightAccum = (heights: number[]): [number, number[]] => R.mapAccum(appender, 0, heights);
11
10
 
12
- const keyExtractor = <T, >(item: ComicViewerItemProps<T>) => item.id;
11
+ const keyExtractor = <T, >(item: ItemState) => String(item.index);
13
12
 
14
- export default function ComicViewer<T>(props: ComicViewerProps<T>) {
13
+ interface UrlState {
14
+ url: string;
15
+ validity: 'valid' | 'invalid' | 'unknown';
16
+ }
17
+
18
+ interface ImageState {
19
+ urlState: UrlState;
20
+ totalErrorCount: number;
21
+ dimension: Dimension;
22
+ tryRenderingMillis: number;
23
+ }
24
+
25
+ interface ItemState {
26
+ index: number;
27
+ url?: string;
28
+ imageKey: string;
29
+ reloadButtonVisible: boolean;
30
+ dimension: Dimension;
31
+ }
32
+
33
+ const createInitialImageState = (image: IntrinsicImage): ImageState => ({
34
+ totalErrorCount: 0,
35
+ dimension: image.dimension,
36
+ tryRenderingMillis: 0,
37
+ urlState: {
38
+ url: image.url,
39
+ validity: 'unknown',
40
+ },
41
+ });
42
+
43
+ const mapImageStateToItemState = (
44
+ index: number,
45
+ imageState: ImageState,
46
+ autoHandleErrorCount: number,
47
+ ): ItemState => ({
48
+ index,
49
+ url: imageState.urlState?.url,
50
+ imageKey: `${imageState.tryRenderingMillis}-${index}`,
51
+ reloadButtonVisible: (imageState.urlState?.validity !== 'valid') && imageState.totalErrorCount >= autoHandleErrorCount,
52
+ dimension: imageState.dimension,
53
+ });
54
+
55
+ const mapIndexed = R.addIndex<IntrinsicImage>(R.map);
56
+
57
+ const MAXIMUM_WIDTH = 720;
58
+
59
+ export default function ComicViewer(props: ComicViewerProps) {
15
60
  const {
16
- data,
17
- errorDebounceMillis = 500,
18
- errorRetryCount = 3,
61
+ debounceMillis = 100,
62
+ autoHandleErrorCount = 3,
63
+ fastScrollOptions,
19
64
  initialNumToRender = 1,
65
+ initialNumToCreate,
20
66
  initialScrollPercentage = 0,
21
67
  itemVisiblePercentThreshold = 0,
68
+ intrinsicImages: originalIntrinsicImages,
69
+ maxContentWidth = MAXIMUM_WIDTH,
70
+ onItemPress,
71
+ onScroll,
22
72
  onError,
23
- viewerWidth,
73
+ onReloadPress,
74
+ viewportWidth,
75
+ invisiblePaddingTop = 0,
24
76
  windowSize = 3,
25
77
  ...otherProps
26
78
  } = props;
27
79
 
80
+ const initialCreateCount = initialNumToCreate ? R.min(initialNumToCreate, initialNumToRender) : undefined;
81
+ const initialIntrinsicImages = initialCreateCount ? R.take(initialCreateCount, originalIntrinsicImages) : originalIntrinsicImages;
82
+ const [intrinsicImages, setIntrinsicImages] = useState(initialIntrinsicImages);
83
+
84
+ const fastScrollRef = fastScrollOptions?.ref;
85
+
28
86
  const flatListRef = useRef<FlatList>(null);
29
87
 
30
- const errors = useRef<Map<string, number>>(new Map());
31
- const debounceTimeOut = useRef<NodeJS.Timeout | null>(null);
88
+ const actualImageWidth = Math.min(viewportWidth, maxContentWidth);
32
89
 
33
- const resourceString = R.toString(R.map((itemData: ComicViewerItemData) => itemData.sourceUrl)(data));
90
+ const initialImageStates = useMemo<Array<ImageState>>(() => R.map(createInitialImageState, intrinsicImages), []);
34
91
 
35
- const initialItems = R.map((itemData: ComicViewerItemData<T>) => ({
36
- ...itemData,
37
- isViewable: false,
38
- width: viewerWidth,
39
- height: (itemData.height * viewerWidth) / itemData.width,
40
- }))(data);
92
+ const imageStatesRef = useRef<Array<ImageState>>(initialImageStates);
41
93
 
42
- const [items, setItems] = useState<ComicViewerItemProps<T>[]>(initialItems);
94
+ const shouldWaitInitialCreate = useRef<Boolean>(!R.isNil(initialCreateCount));
43
95
 
44
- const itemHeights = getItemHeights(items);
45
- const itemHeightAccum = getHeightAccum(itemHeights);
96
+ const mapImageStatesToItemStates = (imageStates: Array<ImageState>): Array<ItemState> => {
97
+ return imageStates.map((image, index) => mapImageStateToItemState(
98
+ index, image, autoHandleErrorCount,
99
+ ));
100
+ };
101
+
102
+ const [itemStates, setItemStates] = useState<Array<ItemState>>(() => {
103
+ return mapImageStatesToItemStates(imageStatesRef.current);
104
+ });
105
+
106
+ const renderedDimensions = useMemo<Array<Dimension>>(() => {
107
+ return mapIndexed((intrinsicImage, index) => {
108
+ const height = (intrinsicImage.dimension.height * actualImageWidth) / intrinsicImage.dimension.width + (index === 0 ? invisiblePaddingTop : 0);
109
+
110
+ return {
111
+ width: actualImageWidth,
112
+ height: isNaN(height) ? 0 : height,
113
+ };
114
+ }, intrinsicImages);
115
+ }, [actualImageWidth, intrinsicImages]);
116
+
117
+ const layoutFromDimensions = useCallback(() => {
118
+ const itemHeights = R.map(dimension => dimension.height, renderedDimensions);
119
+ const [totalHeight, heightAccum] = getHeightAccum(itemHeights);
120
+ const itemOffsets = R.prepend(0, heightAccum);
121
+
122
+ const getItemLayout = (data: any, index: number) => ({
123
+ index,
124
+ length: itemHeights[index],
125
+ offset: itemOffsets[index],
126
+ });
127
+
128
+ return {
129
+ totalHeight,
130
+ getItemLayout,
131
+ };
132
+ }, [renderedDimensions]);
133
+
134
+ const { totalHeight, getItemLayout } = layoutFromDimensions();
46
135
 
47
136
  const viewabilityConfig = useMemo(() => ({
48
137
  itemVisiblePercentThreshold,
49
138
  }), [itemVisiblePercentThreshold]);
50
139
 
51
- const getItemLayout = useCallback((data: any, index: number) => {
52
- const offsets = R.prepend(0, itemHeightAccum[1]);
140
+ const updateImageState = (updateFunction: (prev: ImageState, index: number) => ImageState) => {
141
+ const prevImageStates = imageStatesRef.current;
142
+ const newImageStates = prevImageStates.map(updateFunction);
53
143
 
54
- return {
55
- length: itemHeights[index],
56
- offset: offsets[index],
57
- index,
58
- };
59
- }, [itemHeights]);
60
-
61
- const onViewableItemsChanged = useRef(({ viewableItems }: {
62
- viewableItems: Array<ViewToken>,
63
- }) => {
64
- setItems((prev: ComicViewerItemProps<T>[]) => {
65
- const viewableItemIds = R.map((viewableItem: ViewToken) => viewableItem.item.id)(viewableItems);
66
-
67
- return R.map((prevItem: ComicViewerItemProps<T>) => ({
68
- ...prevItem,
69
- isViewable: R.includes(prevItem.id, viewableItemIds),
70
- }))([...prev]);
144
+ imageStatesRef.current = newImageStates;
145
+
146
+ setItemStates(prevItemStates => {
147
+ const newItemStates = mapImageStatesToItemStates(newImageStates);
148
+
149
+ return R.equals(prevItemStates, newItemStates) ? prevItemStates : newItemStates;
71
150
  });
151
+ };
152
+
153
+ const updateTryRenderingMillis = () => {
154
+ const tryRenderingMillis = new Date().getTime();
155
+
156
+ updateImageState((imageState, i) => {
157
+ const urlState = imageState.urlState;
158
+
159
+ if (urlState?.validity === 'invalid') {
160
+ return {
161
+ ...imageState,
162
+ tryRenderingMillis,
163
+ };
164
+ }
165
+
166
+ return imageState;
167
+ });
168
+ };
169
+ const onViewableItemsChanged = useRef(({ viewableItems }: { viewableItems: Array<ViewToken> }) => {
170
+ updateTryRenderingMillis();
72
171
  });
73
172
 
74
- const onErrorHandler = (errors: ErrorInfo[]) => {
75
- const isRetryLimited = R.any((error: ErrorInfo) => error.count >= errorRetryCount)(errors);
173
+ const handleScroll = useCallback((event: NativeSyntheticEvent<NativeScrollEvent>) => {
174
+ fastScrollRef?.current?.onContentScroll(event);
76
175
 
77
- if (isRetryLimited) {
78
- return;
79
- }
176
+ onScroll?.(event);
177
+ }, [onScroll]);
80
178
 
81
- onError && onError(errors);
179
+ const scrollContentToOffset = (offset: number) => {
180
+ flatListRef.current?.scrollToOffset({
181
+ offset,
182
+ animated: false,
183
+ });
82
184
  };
83
185
 
84
- const itemErrorHandler = useCallback((errorInfo: ErrorInfo) => {
85
- errors.current.set(errorInfo.id, errorInfo.count);
186
+ const updateIntrinsicImages = useCallback(() => {
187
+ const isInitialCreateFinish = R.all((imageState: ImageState) => imageState.urlState.validity !== 'unknown')(imageStatesRef.current);
86
188
 
87
- if (debounceTimeOut.current) {
88
- clearTimeout(debounceTimeOut.current);
189
+ if (!isInitialCreateFinish || !shouldWaitInitialCreate.current) {
190
+ return;
89
191
  }
90
192
 
91
- debounceTimeOut.current = setTimeout(function () {
92
- const errorsArray = Array.from(errors.current.entries());
93
- const errorsInfo = R.map(([key, value]: [string, number]) => ({
94
- id: key,
95
- count: value,
96
- }))(errorsArray);
97
-
98
- onErrorHandler([...errorsInfo]);
99
- errors.current.clear();
100
- }, errorDebounceMillis);
101
- }, [errorDebounceMillis, errors.current]);
102
-
103
- const renderItem: ListRenderItem<ComicViewerItemProps<T>> = useCallback(({ item }) => {
104
- const props = {
105
- ...item,
106
- onError: itemErrorHandler,
193
+ setIntrinsicImages(originalIntrinsicImages);
194
+ const newImageStates = R.map(createInitialImageState, originalIntrinsicImages);
195
+ imageStatesRef.current = R.map(([, state]: [number, ImageState]) => state)(R.toPairs(R.mergeDeepLeft(imageStatesRef.current, newImageStates)));
196
+ setItemStates(mapImageStatesToItemStates(imageStatesRef.current));
197
+
198
+ shouldWaitInitialCreate.current = false;
199
+ }, [originalIntrinsicImages, createInitialImageState, mapImageStatesToItemStates]);
200
+
201
+ const renderItem: ListRenderItem<ItemState> = useCallback(({ item, index }) => {
202
+ const handleError = () => {
203
+ onError && onError();
204
+
205
+ updateImageState((imageState, i) => {
206
+ const urlState = imageState.urlState;
207
+
208
+ if (i === index) {
209
+ return {
210
+ ...imageState,
211
+ totalErrorCount: imageState.totalErrorCount + 1,
212
+ urlState: {
213
+ ...urlState,
214
+ validity: 'invalid',
215
+ },
216
+ };
217
+ }
218
+
219
+ return imageState;
220
+ });
221
+
222
+ if (item.reloadButtonVisible) {
223
+ return;
224
+ }
225
+
226
+ updateIntrinsicImages();
227
+
228
+ updateTryRenderingMillis();
107
229
  };
108
230
 
109
- return <ViewerItem props={props}/>;
110
- }, []);
231
+ const handleReloadPress = () => {
232
+ onReloadPress && onReloadPress();
111
233
 
112
- useEffect(() => {
113
- setItems((prev: ComicViewerItemProps<T>[]) => {
114
- return R.map((prevItem: ComicViewerItemProps<T>) => {
115
- const currentData = R.find((currentItemData: ComicViewerItemData<T>) => prevItem.id === currentItemData.id)(data);
234
+ updateTryRenderingMillis();
235
+ };
236
+
237
+ const onLoad = () => {
238
+ updateImageState((imageState, i) => {
239
+ const urlState = imageState.urlState;
116
240
 
117
- if (currentData && (currentData.sourceUrl !== prevItem.sourceUrl)) {
241
+ if (i === index && urlState !== undefined) {
118
242
  return {
119
- ...prevItem,
120
- sourceUrl: currentData.sourceUrl,
243
+ ...imageState,
244
+ urlState: {
245
+ ...urlState,
246
+ validity: 'valid',
247
+ },
121
248
  };
122
249
  }
123
250
 
124
- return prevItem;
125
- })([...prev]);
126
- });
127
- }, [resourceString]);
251
+ return imageState;
252
+ });
128
253
 
129
- useEffect(() => {
130
- const newItems = R.map((item: ComicViewerItemProps<T>) => ({
131
- ...item,
132
- width: viewerWidth,
133
- height: (item.height * viewerWidth) / item.width,
134
- }))(items);
254
+ updateIntrinsicImages();
255
+ };
135
256
 
136
- setItems(newItems);
137
- }, [viewerWidth]);
257
+ return (
258
+ <ViewerItem
259
+ onError={handleError}
260
+ onLoad={onLoad}
261
+ onPress={onItemPress}
262
+ onReloadPress={handleReloadPress}
263
+ url={item.url}
264
+ imageKey={item.imageKey}
265
+ invisiblePaddingTop={index === 0 ? invisiblePaddingTop : 0}
266
+ width={renderedDimensions[index]?.width ?? 0}
267
+ height={renderedDimensions[index]?.height ?? 0}
268
+ reloadButtonVisible={item.reloadButtonVisible}
269
+ />
270
+ );
271
+ }, [onItemPress, renderedDimensions, updateIntrinsicImages]);
138
272
 
139
273
  useEffect(() => {
140
- const totalHeight = itemHeightAccum[0];
141
- const offset = Math.floor((initialScrollPercentage / 100) * totalHeight);
274
+ const scroll = () => {
275
+ const offset = Math.floor((initialScrollPercentage / 100) * totalHeight);
276
+
277
+ if (flatListRef.current) {
278
+ flatListRef.current.scrollToOffset({ offset, animated: false });
279
+ }
280
+ };
281
+
282
+ let timeoutId: NodeJS.Timeout | undefined = undefined;
142
283
 
143
- if (flatListRef.current) {
144
- flatListRef.current.scrollToOffset({ offset, animated: false });
284
+ /**
285
+ * @FIXME
286
+ * scrollToOffset has issue(no effect) in useEffect hook on iOS.
287
+ * ref: https://github.com/facebook/react-native/issues/35575
288
+ */
289
+ if (Platform.OS === 'ios') {
290
+ timeoutId = setTimeout(scroll, 0);
291
+ } else {
292
+ scroll();
145
293
  }
146
- }, [flatListRef.current]);
294
+
295
+ return () => {
296
+ timeoutId && clearTimeout(timeoutId);
297
+ };
298
+ }, []);
147
299
 
148
300
  return (
149
- <FlatList
150
- data={items}
151
- getItemLayout={getItemLayout}
152
- initialNumToRender={initialNumToRender}
153
- keyExtractor={keyExtractor}
154
- onViewableItemsChanged={onViewableItemsChanged.current}
155
- ref={flatListRef}
156
- renderItem={renderItem}
157
- viewabilityConfig={viewabilityConfig}
158
- windowSize={windowSize}
159
- {...otherProps}
160
- />
301
+ <React.Fragment>
302
+ <FlatList
303
+ data={itemStates}
304
+ getItemLayout={getItemLayout}
305
+ initialNumToRender={initialNumToRender}
306
+ keyExtractor={keyExtractor}
307
+ onViewableItemsChanged={onViewableItemsChanged.current}
308
+ ref={flatListRef}
309
+ renderItem={renderItem}
310
+ viewabilityConfig={viewabilityConfig}
311
+ windowSize={windowSize}
312
+ onScroll={handleScroll}
313
+ {...otherProps}
314
+ />
315
+
316
+ <FastScroll
317
+ {...fastScrollOptions}
318
+ contentLength={totalHeight}
319
+ initialScrollPercentage={initialScrollPercentage}
320
+ scrollContentToOffset={scrollContentToOffset}
321
+ />
322
+ </React.Fragment>
161
323
  );
162
324
  };
@@ -1,90 +1,112 @@
1
+ import React from 'react';
1
2
  import { ComponentProps } from '@fountain-ui/core';
3
+ import { NativeScrollEvent, NativeSyntheticEvent } from 'react-native';
4
+ import { FastScrollOptions } from './FastScrollProps';
2
5
 
3
- export interface ErrorInfo {
6
+ export interface Dimension {
7
+ width: number;
8
+ height: number;
9
+ }
10
+
11
+ export interface IntrinsicImage {
12
+ dimension: Dimension;
13
+ url: string;
14
+ }
15
+
16
+ export default interface ComicViewerProps extends ComponentProps <{
4
17
  /**
5
- * ComicViewerItemData.id.
18
+ * Delay Time to call the error handler.
19
+ * @default 100
6
20
  */
7
- id: string;
21
+ debounceMillis?: number;
8
22
 
9
23
  /**
10
- * Number of times an error occurred.
24
+ * How many times handle onError directly when item error occur
25
+ * @default 3
11
26
  */
12
- count: number;
13
- }
27
+ autoHandleErrorCount?: number;
14
28
 
15
- export type ComicViewerItemData<T = {}> = T & {
16
29
  /**
17
- * Image height.
30
+ * How many items to render in the initial batch.
31
+ * @default 1
18
32
  */
19
- height: number;
33
+ initialNumToRender?: number;
20
34
 
21
35
  /**
22
- * Unique value for identifying.
36
+ * How many items to create in the initial batch.
37
+ * @default 1
23
38
  */
24
- id: string;
39
+ initialNumToCreate?: number;
25
40
 
26
41
  /**
27
- * Image sourceUrl for displaying.
42
+ * Start at initialScrollPercentage.
43
+ * If over 100, scroll to end.
44
+ * @default 0
28
45
  */
29
- sourceUrl: string;
46
+ initialScrollPercentage?: number;
30
47
 
31
48
  /**
32
- * Image width.
49
+ * The value for FlatList viewabilityConfig.itemVisiblePercentThreshold.
50
+ * @default 0
33
51
  */
34
- width: number;
35
- }
52
+ itemVisiblePercentThreshold?: number;
36
53
 
37
- export default interface ComicViewerProps<T> extends ComponentProps <{
38
54
  /**
39
- * Data for render.
55
+ * Dimensions and url info of each Image considering viewport.
40
56
  */
41
- data: ComicViewerItemData<T>[];
57
+ intrinsicImages: Array<IntrinsicImage>;
42
58
 
43
59
  /**
44
- * Delay Time to call the error handler.
45
- * @default 500
60
+ * Need invisible paddingTop viewer vertically expanded.
61
+ * @default 0
62
+ */
63
+ invisiblePaddingTop?: number;
64
+
65
+ /**
66
+ * Max value of contents image width size.
67
+ * @default 720
68
+ */
69
+ maxContentWidth?: number;
70
+
71
+ /**
72
+ * Width of viewport.
46
73
  */
47
- errorDebounceMillis?: number;
74
+ viewportWidth: number;
48
75
 
49
76
  /**
50
- * How many times retry onError when same item error occur
77
+ * The value for FlatList windowSize.
51
78
  * @default 3
52
79
  */
53
- errorRetryCount?: number;
80
+ windowSize?: number;
54
81
 
55
- /**
56
- * How many items to render in the initial batch.
57
- * @default 1
82
+ /**
83
+ * Options for fastscroll component.
58
84
  */
59
- initialNumToRender?: number;
85
+ fastScrollOptions: FastScrollOptions;
60
86
 
61
87
  /**
62
- * Start at initialScrollPercentage.
63
- * If over 100, scroll to end.
64
- * @default 0
88
+ * Handle scroll event.
89
+ * @param event Scroll event.
65
90
  */
66
- initialScrollPercentage?: number;
91
+ onScroll?: (event: NativeSyntheticEvent<NativeScrollEvent>) => void;
67
92
 
68
93
  /**
69
- * The value for FlatList viewabilityConfig.itemVisiblePercentThreshold.
70
- * @default 0
94
+ * Handle item press event.
71
95
  */
72
- itemVisiblePercentThreshold?: number;
96
+ onItemPress?: () => void;
73
97
 
74
98
  /**
75
- * Handling all viewerItem errors at once.
76
- * @param errors Array of ViewerItems errorInfo.
99
+ * Handle image loading fail event.
77
100
  */
78
- onError?: (errors: ErrorInfo[]) => void;
101
+ onError?: () => void;
79
102
 
80
103
  /**
81
- * Comic viewer width.
104
+ * Handle reload button press event.
82
105
  */
83
- viewerWidth: number;
106
+ onReloadPress?: () => void;
84
107
 
85
108
  /**
86
- * The value for FlatList windowSize.
87
- * @default 3
109
+ * Component for comic viewer footer.
88
110
  */
89
- windowSize?: number;
90
- }> {}
111
+ ListFooterComponent?: React.ReactElement;
112
+ }> {}