@fountain-ui/lab 2.0.0-beta.3 → 2.0.0-beta.31

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 (501) hide show
  1. package/build/commonjs/AnimatedY/AnimatedY.js +10 -14
  2. package/build/commonjs/AnimatedY/AnimatedY.js.map +1 -1
  3. package/build/commonjs/AnimatedY/AnimatedYProps.js.map +1 -1
  4. package/build/commonjs/AnimatedY/index.js.map +1 -1
  5. package/build/commonjs/BottomSheet/BottomSheet.js +177 -0
  6. package/build/commonjs/BottomSheet/BottomSheet.js.map +1 -0
  7. package/build/commonjs/BottomSheet/BottomSheetNative.js +5 -3
  8. package/build/commonjs/BottomSheet/BottomSheetNative.js.map +1 -1
  9. package/build/commonjs/BottomSheet/BottomSheetProps.js.map +1 -1
  10. package/build/commonjs/BottomSheet/BottomSheetWeb.js +19 -7
  11. package/build/commonjs/BottomSheet/BottomSheetWeb.js.map +1 -1
  12. package/build/commonjs/BottomSheet/TransparentBackdrop.js +1 -1
  13. package/build/commonjs/BottomSheet/TransparentBackdrop.js.map +1 -1
  14. package/build/commonjs/BottomSheet/index.js.map +1 -1
  15. package/build/commonjs/BottomSheet/index.native.js.map +1 -1
  16. package/build/commonjs/BottomSheet/useDynamicSnapPoints.js +49 -0
  17. package/build/commonjs/BottomSheet/useDynamicSnapPoints.js.map +1 -0
  18. package/build/commonjs/Carousel/Carousel.js +130 -0
  19. package/build/commonjs/Carousel/Carousel.js.map +1 -0
  20. package/build/commonjs/Carousel/CarouselProps.js.map +1 -1
  21. package/build/commonjs/Carousel/animation/animationUtils.js +9 -0
  22. package/build/commonjs/Carousel/animation/animationUtils.js.map +1 -0
  23. package/build/commonjs/Carousel/animation/createDefaultItemStyle.js +15 -0
  24. package/build/commonjs/Carousel/animation/createDefaultItemStyle.js.map +1 -0
  25. package/build/commonjs/Carousel/animation/createDefaultScrollAnimation.js +20 -0
  26. package/build/commonjs/Carousel/animation/createDefaultScrollAnimation.js.map +1 -0
  27. package/build/commonjs/Carousel/animation/index.js +40 -0
  28. package/build/commonjs/Carousel/animation/index.js.map +1 -0
  29. package/build/commonjs/Carousel/animation/normalItemStyleFactory.js +27 -0
  30. package/build/commonjs/Carousel/animation/normalItemStyleFactory.js.map +1 -0
  31. package/build/commonjs/Carousel/animation/parallaxItemStyleFactory.js +65 -0
  32. package/build/commonjs/Carousel/animation/parallaxItemStyleFactory.js.map +1 -0
  33. package/build/commonjs/Carousel/components/InternalContext.js +29 -0
  34. package/build/commonjs/Carousel/components/InternalContext.js.map +1 -0
  35. package/build/commonjs/Carousel/components/ItemView.js +66 -0
  36. package/build/commonjs/Carousel/components/ItemView.js.map +1 -0
  37. package/build/commonjs/Carousel/components/RootView.js +86 -0
  38. package/build/commonjs/Carousel/components/RootView.js.map +1 -0
  39. package/build/commonjs/Carousel/components/ScrollViewGesture.js +82 -0
  40. package/build/commonjs/Carousel/components/ScrollViewGesture.js.map +1 -0
  41. package/build/commonjs/Carousel/components/index.js +40 -0
  42. package/build/commonjs/Carousel/components/index.js.map +1 -0
  43. package/build/commonjs/Carousel/components/useItemInterpolation.js +65 -0
  44. package/build/commonjs/Carousel/components/useItemInterpolation.js.map +1 -0
  45. package/build/commonjs/Carousel/hooks/index.js +48 -0
  46. package/build/commonjs/Carousel/hooks/index.js.map +1 -0
  47. package/build/commonjs/Carousel/hooks/useAutoplayController.js +58 -0
  48. package/build/commonjs/Carousel/hooks/useAutoplayController.js.map +1 -0
  49. package/build/commonjs/Carousel/hooks/useIndexController.js +55 -0
  50. package/build/commonjs/Carousel/hooks/useIndexController.js.map +1 -0
  51. package/build/commonjs/Carousel/hooks/useItemVisibilityStore.js +95 -0
  52. package/build/commonjs/Carousel/hooks/useItemVisibilityStore.js.map +1 -0
  53. package/build/commonjs/Carousel/hooks/useLoopedData.js +33 -0
  54. package/build/commonjs/Carousel/hooks/useLoopedData.js.map +1 -0
  55. package/build/commonjs/Carousel/hooks/usePagingAnimator.js +202 -0
  56. package/build/commonjs/Carousel/hooks/usePagingAnimator.js.map +1 -0
  57. package/build/commonjs/Carousel/index.js +16 -2
  58. package/build/commonjs/Carousel/index.js.map +1 -1
  59. package/build/commonjs/Carousel/tick.js +16 -0
  60. package/build/commonjs/Carousel/tick.js.map +1 -0
  61. package/build/commonjs/Carousel/types.js +8 -0
  62. package/build/commonjs/Carousel/types.js.map +1 -0
  63. package/build/commonjs/ComicViewer/ComicViewer.js +90 -41
  64. package/build/commonjs/ComicViewer/ComicViewer.js.map +1 -1
  65. package/build/commonjs/ComicViewer/ComicViewerItemProps.js.map +1 -1
  66. package/build/commonjs/ComicViewer/ComicViewerProps.js +12 -0
  67. package/build/commonjs/ComicViewer/ComicViewerProps.js.map +1 -1
  68. package/build/commonjs/ComicViewer/ViewerItem.js +118 -28
  69. package/build/commonjs/ComicViewer/ViewerItem.js.map +1 -1
  70. package/build/commonjs/ComicViewer/index.js.map +1 -1
  71. package/build/commonjs/DateTimePicker/DateTimePicker.js +2 -2
  72. package/build/commonjs/DateTimePicker/DateTimePicker.js.map +1 -1
  73. package/build/commonjs/DateTimePicker/DateTimePickerProps.js.map +1 -1
  74. package/build/commonjs/DateTimePicker/DateTimePickerProvider.js.map +1 -1
  75. package/build/commonjs/DateTimePicker/YearPicker.js +21 -17
  76. package/build/commonjs/DateTimePicker/YearPicker.js.map +1 -1
  77. package/build/commonjs/DateTimePicker/index.js +4 -4
  78. package/build/commonjs/DateTimePicker/index.js.map +1 -1
  79. package/build/commonjs/DateTimePicker/utils.js +2 -1
  80. package/build/commonjs/DateTimePicker/utils.js.map +1 -1
  81. package/build/commonjs/FlipCard/FlipCard.js +7 -13
  82. package/build/commonjs/FlipCard/FlipCard.js.map +1 -1
  83. package/build/commonjs/FlipCard/FlipCardProps.js.map +1 -1
  84. package/build/commonjs/FlipCard/index.js.map +1 -1
  85. package/build/commonjs/StatusBarProvider/Provider.js +1 -1
  86. package/build/commonjs/StatusBarProvider/Provider.js.map +1 -1
  87. package/build/commonjs/StatusBarProvider/StatusBarProvider.js.map +1 -1
  88. package/build/commonjs/StatusBarProvider/StatusBarProviderProps.js.map +1 -1
  89. package/build/commonjs/StatusBarProvider/index.js.map +1 -1
  90. package/build/commonjs/ViewPager/FluxContext.js +13 -0
  91. package/build/commonjs/ViewPager/FluxContext.js.map +1 -0
  92. package/build/commonjs/ViewPager/InternalContext.js +17 -0
  93. package/build/commonjs/ViewPager/InternalContext.js.map +1 -0
  94. package/build/commonjs/ViewPager/PageStateContext.js +16 -0
  95. package/build/commonjs/ViewPager/PageStateContext.js.map +1 -0
  96. package/build/commonjs/ViewPager/ViewPager.js +81 -0
  97. package/build/commonjs/ViewPager/ViewPager.js.map +1 -0
  98. package/build/commonjs/ViewPager/ViewPager.native.js +150 -0
  99. package/build/commonjs/ViewPager/ViewPager.native.js.map +1 -0
  100. package/build/commonjs/ViewPager/ViewPagerProps.js.map +1 -1
  101. package/build/commonjs/ViewPager/components/ChildrenMemoizedPage.js +122 -0
  102. package/build/commonjs/ViewPager/components/ChildrenMemoizedPage.js.map +1 -0
  103. package/build/commonjs/ViewPager/components/FluxStoreProvider.js +37 -0
  104. package/build/commonjs/ViewPager/components/FluxStoreProvider.js.map +1 -0
  105. package/build/commonjs/ViewPager/components/index.js +24 -0
  106. package/build/commonjs/ViewPager/components/index.js.map +1 -0
  107. package/build/commonjs/ViewPager/hooks/index.js +64 -0
  108. package/build/commonjs/ViewPager/hooks/index.js.map +1 -0
  109. package/build/commonjs/ViewPager/hooks/useDispatch.js +22 -0
  110. package/build/commonjs/ViewPager/hooks/useDispatch.js.map +1 -0
  111. package/build/commonjs/ViewPager/hooks/useEagerState.js +24 -0
  112. package/build/commonjs/ViewPager/hooks/useEagerState.js.map +1 -0
  113. package/build/commonjs/ViewPager/hooks/useForceRender.js +16 -0
  114. package/build/commonjs/ViewPager/hooks/useForceRender.js.map +1 -0
  115. package/build/commonjs/ViewPager/hooks/useLazyState.js +45 -0
  116. package/build/commonjs/ViewPager/hooks/useLazyState.js.map +1 -0
  117. package/build/commonjs/ViewPager/hooks/usePageStore.js +35 -0
  118. package/build/commonjs/ViewPager/hooks/usePageStore.js.map +1 -0
  119. package/build/commonjs/ViewPager/hooks/useStore.js +26 -0
  120. package/build/commonjs/ViewPager/hooks/useStore.js.map +1 -0
  121. package/build/commonjs/ViewPager/hooks/useViewPagerPageState.js +19 -0
  122. package/build/commonjs/ViewPager/hooks/useViewPagerPageState.js.map +1 -0
  123. package/build/commonjs/ViewPager/index.js +42 -2
  124. package/build/commonjs/ViewPager/index.js.map +1 -1
  125. package/build/commonjs/ViewPager/types.js +2 -0
  126. package/build/commonjs/ViewPager/types.js.map +1 -0
  127. package/build/commonjs/ViewPager/utils.js +12 -43
  128. package/build/commonjs/ViewPager/utils.js.map +1 -1
  129. package/build/commonjs/ViewabilityTrackerView/Viewability.js +2 -0
  130. package/build/commonjs/ViewabilityTrackerView/Viewability.js.map +1 -0
  131. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerView.js +45 -0
  132. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerView.js.map +1 -0
  133. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerViewProps.js +2 -0
  134. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerViewProps.js.map +1 -0
  135. package/build/commonjs/{Carousel/index.native.js → ViewabilityTrackerView/index.js} +3 -3
  136. package/build/commonjs/ViewabilityTrackerView/index.js.map +1 -0
  137. package/build/commonjs/ViewabilityTrackerView/measureViewability.js +42 -0
  138. package/build/commonjs/ViewabilityTrackerView/measureViewability.js.map +1 -0
  139. package/build/commonjs/ViewabilityTrackerView/useViewabilityTracker.js +88 -0
  140. package/build/commonjs/ViewabilityTrackerView/useViewabilityTracker.js.map +1 -0
  141. package/build/commonjs/hooks/index.js +16 -0
  142. package/build/commonjs/hooks/index.js.map +1 -1
  143. package/build/commonjs/hooks/useAppbarStyles.js.map +1 -1
  144. package/build/commonjs/hooks/useDeferredExecutor.js +45 -0
  145. package/build/commonjs/hooks/useDeferredExecutor.js.map +1 -0
  146. package/build/commonjs/hooks/useElevationStyle.js.map +1 -1
  147. package/build/commonjs/hooks/useHeight.js +5 -4
  148. package/build/commonjs/hooks/useHeight.js.map +1 -1
  149. package/build/commonjs/hooks/useIsMounted.js +22 -0
  150. package/build/commonjs/hooks/useIsMounted.js.map +1 -0
  151. package/build/commonjs/hooks/useUnstableCollapsibleAppBar.js +58 -61
  152. package/build/commonjs/hooks/useUnstableCollapsibleAppBar.js.map +1 -1
  153. package/build/commonjs/hooks/useUnstableToggleDisplayStyle.js +9 -11
  154. package/build/commonjs/hooks/useUnstableToggleDisplayStyle.js.map +1 -1
  155. package/build/commonjs/index.js +28 -7
  156. package/build/commonjs/index.js.map +1 -1
  157. package/build/module/AnimatedY/AnimatedY.js +11 -10
  158. package/build/module/AnimatedY/AnimatedY.js.map +1 -1
  159. package/build/module/AnimatedY/AnimatedYProps.js.map +1 -1
  160. package/build/module/AnimatedY/index.js.map +1 -1
  161. package/build/module/BottomSheet/BottomSheet.js +161 -0
  162. package/build/module/BottomSheet/BottomSheet.js.map +1 -0
  163. package/build/module/BottomSheet/BottomSheetNative.js +5 -3
  164. package/build/module/BottomSheet/BottomSheetNative.js.map +1 -1
  165. package/build/module/BottomSheet/BottomSheetProps.js.map +1 -1
  166. package/build/module/BottomSheet/BottomSheetWeb.js +18 -7
  167. package/build/module/BottomSheet/BottomSheetWeb.js.map +1 -1
  168. package/build/module/BottomSheet/TransparentBackdrop.js +1 -1
  169. package/build/module/BottomSheet/TransparentBackdrop.js.map +1 -1
  170. package/build/module/BottomSheet/index.js.map +1 -1
  171. package/build/module/BottomSheet/index.native.js.map +1 -1
  172. package/build/module/BottomSheet/useDynamicSnapPoints.js +41 -0
  173. package/build/module/BottomSheet/useDynamicSnapPoints.js.map +1 -0
  174. package/build/module/Carousel/Carousel.js +109 -0
  175. package/build/module/Carousel/Carousel.js.map +1 -0
  176. package/build/module/Carousel/CarouselProps.js.map +1 -1
  177. package/build/module/Carousel/animation/animationUtils.js +2 -0
  178. package/build/module/Carousel/animation/animationUtils.js.map +1 -0
  179. package/build/module/Carousel/animation/createDefaultItemStyle.js +3 -0
  180. package/build/module/Carousel/animation/createDefaultItemStyle.js.map +1 -0
  181. package/build/module/Carousel/animation/createDefaultScrollAnimation.js +11 -0
  182. package/build/module/Carousel/animation/createDefaultScrollAnimation.js.map +1 -0
  183. package/build/module/Carousel/animation/index.js +5 -0
  184. package/build/module/Carousel/animation/index.js.map +1 -0
  185. package/build/module/Carousel/animation/normalItemStyleFactory.js +18 -0
  186. package/build/module/Carousel/animation/normalItemStyleFactory.js.map +1 -0
  187. package/build/module/Carousel/animation/parallaxItemStyleFactory.js +55 -0
  188. package/build/module/Carousel/animation/parallaxItemStyleFactory.js.map +1 -0
  189. package/build/module/Carousel/components/InternalContext.js +19 -0
  190. package/build/module/Carousel/components/InternalContext.js.map +1 -0
  191. package/build/module/Carousel/components/ItemView.js +46 -0
  192. package/build/module/Carousel/components/ItemView.js.map +1 -0
  193. package/build/module/Carousel/components/RootView.js +65 -0
  194. package/build/module/Carousel/components/RootView.js.map +1 -0
  195. package/build/module/Carousel/components/ScrollViewGesture.js +68 -0
  196. package/build/module/Carousel/components/ScrollViewGesture.js.map +1 -0
  197. package/build/module/Carousel/components/index.js +5 -0
  198. package/build/module/Carousel/components/index.js.map +1 -0
  199. package/build/module/Carousel/components/useItemInterpolation.js +51 -0
  200. package/build/module/Carousel/components/useItemInterpolation.js.map +1 -0
  201. package/build/module/Carousel/hooks/index.js +6 -0
  202. package/build/module/Carousel/hooks/index.js.map +1 -0
  203. package/build/module/Carousel/hooks/useAutoplayController.js +48 -0
  204. package/build/module/Carousel/hooks/useAutoplayController.js.map +1 -0
  205. package/build/module/Carousel/hooks/useIndexController.js +44 -0
  206. package/build/module/Carousel/hooks/useIndexController.js.map +1 -0
  207. package/build/module/Carousel/hooks/useItemVisibilityStore.js +86 -0
  208. package/build/module/Carousel/hooks/useItemVisibilityStore.js.map +1 -0
  209. package/build/module/Carousel/hooks/useLoopedData.js +24 -0
  210. package/build/module/Carousel/hooks/useLoopedData.js.map +1 -0
  211. package/build/module/Carousel/hooks/usePagingAnimator.js +192 -0
  212. package/build/module/Carousel/hooks/usePagingAnimator.js.map +1 -0
  213. package/build/module/Carousel/index.js +2 -1
  214. package/build/module/Carousel/index.js.map +1 -1
  215. package/build/module/Carousel/tick.js +6 -0
  216. package/build/module/Carousel/tick.js.map +1 -0
  217. package/build/module/Carousel/types.js +4 -0
  218. package/build/module/Carousel/types.js.map +1 -0
  219. package/build/module/ComicViewer/ComicViewer.js +89 -41
  220. package/build/module/ComicViewer/ComicViewer.js.map +1 -1
  221. package/build/module/ComicViewer/ComicViewerItemProps.js.map +1 -1
  222. package/build/module/ComicViewer/ComicViewerProps.js +6 -1
  223. package/build/module/ComicViewer/ComicViewerProps.js.map +1 -1
  224. package/build/module/ComicViewer/ViewerItem.js +120 -31
  225. package/build/module/ComicViewer/ViewerItem.js.map +1 -1
  226. package/build/module/ComicViewer/index.js.map +1 -1
  227. package/build/module/DateTimePicker/DateTimePicker.js +2 -2
  228. package/build/module/DateTimePicker/DateTimePicker.js.map +1 -1
  229. package/build/module/DateTimePicker/DateTimePickerProps.js.map +1 -1
  230. package/build/module/DateTimePicker/DateTimePickerProvider.js.map +1 -1
  231. package/build/module/DateTimePicker/YearPicker.js +21 -17
  232. package/build/module/DateTimePicker/YearPicker.js.map +1 -1
  233. package/build/module/DateTimePicker/index.js.map +1 -1
  234. package/build/module/DateTimePicker/utils.js +2 -1
  235. package/build/module/DateTimePicker/utils.js.map +1 -1
  236. package/build/module/FlipCard/FlipCard.js +7 -7
  237. package/build/module/FlipCard/FlipCard.js.map +1 -1
  238. package/build/module/FlipCard/FlipCardProps.js.map +1 -1
  239. package/build/module/FlipCard/index.js.map +1 -1
  240. package/build/module/StatusBarProvider/Provider.js.map +1 -1
  241. package/build/module/StatusBarProvider/StatusBarProvider.js.map +1 -1
  242. package/build/module/StatusBarProvider/StatusBarProviderProps.js.map +1 -1
  243. package/build/module/StatusBarProvider/index.js.map +1 -1
  244. package/build/module/ViewPager/FluxContext.js +4 -0
  245. package/build/module/ViewPager/FluxContext.js.map +1 -0
  246. package/build/module/ViewPager/InternalContext.js +7 -0
  247. package/build/module/ViewPager/InternalContext.js.map +1 -0
  248. package/build/module/ViewPager/PageStateContext.js +7 -0
  249. package/build/module/ViewPager/PageStateContext.js.map +1 -0
  250. package/build/module/ViewPager/ViewPager.js +57 -0
  251. package/build/module/ViewPager/ViewPager.js.map +1 -0
  252. package/build/module/ViewPager/ViewPager.native.js +127 -0
  253. package/build/module/ViewPager/ViewPager.native.js.map +1 -0
  254. package/build/module/ViewPager/ViewPagerProps.js.map +1 -1
  255. package/build/module/ViewPager/components/ChildrenMemoizedPage.js +101 -0
  256. package/build/module/ViewPager/components/ChildrenMemoizedPage.js.map +1 -0
  257. package/build/module/ViewPager/components/FluxStoreProvider.js +20 -0
  258. package/build/module/ViewPager/components/FluxStoreProvider.js.map +1 -0
  259. package/build/module/ViewPager/components/index.js +3 -0
  260. package/build/module/ViewPager/components/index.js.map +1 -0
  261. package/build/module/ViewPager/hooks/index.js +8 -0
  262. package/build/module/ViewPager/hooks/index.js.map +1 -0
  263. package/build/module/ViewPager/hooks/useDispatch.js +10 -0
  264. package/build/module/ViewPager/hooks/useDispatch.js.map +1 -0
  265. package/build/module/ViewPager/hooks/useEagerState.js +12 -0
  266. package/build/module/ViewPager/hooks/useEagerState.js.map +1 -0
  267. package/build/module/ViewPager/hooks/useForceRender.js +7 -0
  268. package/build/module/ViewPager/hooks/useForceRender.js.map +1 -0
  269. package/build/module/ViewPager/hooks/useLazyState.js +30 -0
  270. package/build/module/ViewPager/hooks/useLazyState.js.map +1 -0
  271. package/build/module/ViewPager/hooks/usePageStore.js +25 -0
  272. package/build/module/ViewPager/hooks/usePageStore.js.map +1 -0
  273. package/build/module/ViewPager/hooks/useStore.js +14 -0
  274. package/build/module/ViewPager/hooks/useStore.js.map +1 -0
  275. package/build/module/ViewPager/hooks/useViewPagerPageState.js +7 -0
  276. package/build/module/ViewPager/hooks/useViewPagerPageState.js.map +1 -0
  277. package/build/module/ViewPager/index.js +3 -1
  278. package/build/module/ViewPager/index.js.map +1 -1
  279. package/build/module/ViewPager/types.js +2 -0
  280. package/build/module/ViewPager/types.js.map +1 -0
  281. package/build/module/ViewPager/utils.js +6 -33
  282. package/build/module/ViewPager/utils.js.map +1 -1
  283. package/build/module/ViewabilityTrackerView/Viewability.js +2 -0
  284. package/build/module/ViewabilityTrackerView/Viewability.js.map +1 -0
  285. package/build/module/ViewabilityTrackerView/ViewabilityTrackerView.js +28 -0
  286. package/build/module/ViewabilityTrackerView/ViewabilityTrackerView.js.map +1 -0
  287. package/build/module/ViewabilityTrackerView/ViewabilityTrackerViewProps.js +2 -0
  288. package/build/module/ViewabilityTrackerView/ViewabilityTrackerViewProps.js.map +1 -0
  289. package/build/module/ViewabilityTrackerView/index.js +2 -0
  290. package/build/module/ViewabilityTrackerView/index.js.map +1 -0
  291. package/build/module/ViewabilityTrackerView/measureViewability.js +34 -0
  292. package/build/module/ViewabilityTrackerView/measureViewability.js.map +1 -0
  293. package/build/module/ViewabilityTrackerView/useViewabilityTracker.js +73 -0
  294. package/build/module/ViewabilityTrackerView/useViewabilityTracker.js.map +1 -0
  295. package/build/module/hooks/index.js +2 -0
  296. package/build/module/hooks/index.js.map +1 -1
  297. package/build/module/hooks/useAppbarStyles.js.map +1 -1
  298. package/build/module/hooks/useDeferredExecutor.js +33 -0
  299. package/build/module/hooks/useDeferredExecutor.js.map +1 -0
  300. package/build/module/hooks/useElevationStyle.js.map +1 -1
  301. package/build/module/hooks/useHeight.js +4 -3
  302. package/build/module/hooks/useHeight.js.map +1 -1
  303. package/build/module/hooks/useIsMounted.js +13 -0
  304. package/build/module/hooks/useIsMounted.js.map +1 -0
  305. package/build/module/hooks/useUnstableCollapsibleAppBar.js +58 -45
  306. package/build/module/hooks/useUnstableCollapsibleAppBar.js.map +1 -1
  307. package/build/module/hooks/useUnstableToggleDisplayStyle.js +9 -7
  308. package/build/module/hooks/useUnstableToggleDisplayStyle.js.map +1 -1
  309. package/build/module/index.js +2 -0
  310. package/build/module/index.js.map +1 -1
  311. package/build/typescript/AnimatedY/AnimatedY.d.ts +0 -1
  312. package/build/typescript/BottomSheet/BottomSheet.d.ts +2 -0
  313. package/build/typescript/BottomSheet/BottomSheetNative.d.ts +0 -1
  314. package/build/typescript/BottomSheet/BottomSheetProps.d.ts +6 -1
  315. package/build/typescript/BottomSheet/BottomSheetWeb.d.ts +0 -1
  316. package/build/typescript/BottomSheet/TransparentBackdrop.d.ts +0 -1
  317. package/build/typescript/BottomSheet/useDynamicSnapPoints.d.ts +11 -0
  318. package/build/typescript/Carousel/Carousel.d.ts +5 -0
  319. package/build/typescript/Carousel/CarouselProps.d.ts +33 -48
  320. package/build/typescript/Carousel/animation/animationUtils.d.ts +1 -0
  321. package/build/typescript/Carousel/animation/createDefaultItemStyle.d.ts +2 -0
  322. package/build/typescript/Carousel/animation/createDefaultScrollAnimation.d.ts +2 -0
  323. package/build/typescript/Carousel/animation/index.d.ts +4 -0
  324. package/build/typescript/Carousel/animation/normalItemStyleFactory.d.ts +2 -0
  325. package/build/typescript/Carousel/animation/parallaxItemStyleFactory.d.ts +9 -0
  326. package/build/typescript/Carousel/components/InternalContext.d.ts +14 -0
  327. package/build/typescript/Carousel/components/ItemView.d.ts +9 -0
  328. package/build/typescript/Carousel/components/RootView.d.ts +16 -0
  329. package/build/typescript/Carousel/components/ScrollViewGesture.d.ts +12 -0
  330. package/build/typescript/Carousel/components/index.d.ts +4 -0
  331. package/build/typescript/Carousel/components/useItemInterpolation.d.ts +2 -0
  332. package/build/typescript/Carousel/hooks/index.d.ts +5 -0
  333. package/build/typescript/Carousel/hooks/useAutoplayController.d.ts +7 -0
  334. package/build/typescript/Carousel/hooks/useIndexController.d.ts +10 -0
  335. package/build/typescript/Carousel/hooks/useItemVisibilityStore.d.ts +7 -0
  336. package/build/typescript/Carousel/hooks/useLoopedData.d.ts +1 -0
  337. package/build/typescript/Carousel/hooks/usePagingAnimator.d.ts +17 -0
  338. package/build/typescript/Carousel/index.d.ts +3 -1
  339. package/build/typescript/Carousel/tick.d.ts +2 -0
  340. package/build/typescript/Carousel/types.d.ts +91 -0
  341. package/build/typescript/ComicViewer/ComicViewer.d.ts +0 -1
  342. package/build/typescript/ComicViewer/ComicViewerItemProps.d.ts +23 -1
  343. package/build/typescript/ComicViewer/ComicViewerProps.d.ts +69 -12
  344. package/build/typescript/DateTimePicker/DateTimePicker.d.ts +0 -1
  345. package/build/typescript/DateTimePicker/YearPicker.d.ts +0 -1
  346. package/build/typescript/FlipCard/FlipCard.d.ts +0 -1
  347. package/build/typescript/StatusBarProvider/StatusBarProvider.d.ts +0 -1
  348. package/build/typescript/ViewPager/FluxContext.d.ts +5 -0
  349. package/build/typescript/ViewPager/InternalContext.d.ts +7 -0
  350. package/build/typescript/ViewPager/PageStateContext.d.ts +6 -0
  351. package/build/typescript/ViewPager/ViewPager.d.ts +5 -0
  352. package/build/typescript/ViewPager/ViewPager.native.d.ts +5 -0
  353. package/build/typescript/ViewPager/ViewPagerProps.d.ts +18 -29
  354. package/build/typescript/ViewPager/components/ChildrenMemoizedPage.d.ts +14 -0
  355. package/build/typescript/ViewPager/components/FluxStoreProvider.d.ts +6 -0
  356. package/build/typescript/ViewPager/components/index.d.ts +2 -0
  357. package/build/typescript/ViewPager/hooks/index.d.ts +7 -0
  358. package/build/typescript/ViewPager/hooks/useDispatch.d.ts +2 -0
  359. package/build/typescript/ViewPager/hooks/useEagerState.d.ts +1 -0
  360. package/build/typescript/ViewPager/hooks/useForceRender.d.ts +2 -0
  361. package/build/typescript/ViewPager/hooks/useLazyState.d.ts +2 -0
  362. package/build/typescript/ViewPager/hooks/usePageStore.d.ts +2 -0
  363. package/build/typescript/ViewPager/hooks/useStore.d.ts +2 -0
  364. package/build/typescript/ViewPager/hooks/useViewPagerPageState.d.ts +1 -0
  365. package/build/typescript/ViewPager/index.d.ts +4 -1
  366. package/build/typescript/ViewPager/types.d.ts +12 -0
  367. package/build/typescript/ViewPager/utils.d.ts +5 -20
  368. package/build/typescript/ViewabilityTrackerView/Viewability.d.ts +3 -0
  369. package/build/typescript/ViewabilityTrackerView/ViewabilityTrackerView.d.ts +2 -0
  370. package/build/typescript/ViewabilityTrackerView/ViewabilityTrackerViewProps.d.ts +22 -0
  371. package/build/typescript/ViewabilityTrackerView/index.d.ts +2 -0
  372. package/build/typescript/ViewabilityTrackerView/measureViewability.d.ts +11 -0
  373. package/build/typescript/ViewabilityTrackerView/useViewabilityTracker.d.ts +11 -0
  374. package/build/typescript/hooks/index.d.ts +2 -0
  375. package/build/typescript/hooks/useDeferredExecutor.d.ts +11 -0
  376. package/build/typescript/hooks/useIsMounted.d.ts +4 -0
  377. package/build/typescript/hooks/useUnstableCollapsibleAppBar.d.ts +2 -3
  378. package/build/typescript/hooks/useUnstableToggleDisplayStyle.d.ts +2 -2
  379. package/build/typescript/index.d.ts +2 -0
  380. package/package.json +11 -25
  381. package/src/AnimatedY/AnimatedY.tsx +13 -10
  382. package/src/BottomSheet/BottomSheet.tsx +184 -0
  383. package/src/BottomSheet/BottomSheetNative.tsx +2 -0
  384. package/src/BottomSheet/BottomSheetProps.ts +7 -1
  385. package/src/BottomSheet/BottomSheetWeb.tsx +18 -5
  386. package/src/BottomSheet/useDynamicSnapPoints.ts +52 -0
  387. package/src/Carousel/Carousel.tsx +135 -0
  388. package/src/Carousel/CarouselProps.ts +42 -53
  389. package/src/Carousel/animation/animationUtils.ts +1 -0
  390. package/src/Carousel/animation/createDefaultItemStyle.ts +3 -0
  391. package/src/Carousel/animation/createDefaultScrollAnimation.ts +13 -0
  392. package/src/Carousel/animation/index.ts +4 -0
  393. package/src/Carousel/animation/normalItemStyleFactory.ts +19 -0
  394. package/src/Carousel/animation/parallaxItemStyleFactory.ts +79 -0
  395. package/src/Carousel/components/InternalContext.ts +33 -0
  396. package/src/Carousel/components/ItemView.tsx +66 -0
  397. package/src/Carousel/components/RootView.tsx +79 -0
  398. package/src/Carousel/components/ScrollViewGesture.tsx +92 -0
  399. package/src/Carousel/components/index.ts +4 -0
  400. package/src/Carousel/components/useItemInterpolation.ts +107 -0
  401. package/src/Carousel/hooks/index.ts +5 -0
  402. package/src/Carousel/hooks/useAutoplayController.ts +57 -0
  403. package/src/Carousel/hooks/useIndexController.tsx +57 -0
  404. package/src/Carousel/hooks/useItemVisibilityStore.ts +107 -0
  405. package/src/Carousel/hooks/useLoopedData.ts +26 -0
  406. package/src/Carousel/hooks/usePagingAnimator.ts +255 -0
  407. package/src/Carousel/index.ts +4 -2
  408. package/src/Carousel/tick.ts +6 -0
  409. package/src/Carousel/types.ts +114 -0
  410. package/src/ComicViewer/ComicViewer.tsx +89 -33
  411. package/src/ComicViewer/ComicViewerItemProps.ts +28 -1
  412. package/src/ComicViewer/ComicViewerProps.ts +80 -10
  413. package/src/ComicViewer/ViewerItem.tsx +135 -35
  414. package/src/DateTimePicker/DateTimePicker.tsx +2 -2
  415. package/src/FlipCard/FlipCard.tsx +8 -8
  416. package/src/ViewPager/FluxContext.ts +8 -0
  417. package/src/ViewPager/InternalContext.ts +13 -0
  418. package/src/ViewPager/PageStateContext.ts +11 -0
  419. package/src/ViewPager/ViewPager.native.tsx +150 -0
  420. package/src/ViewPager/ViewPager.tsx +69 -0
  421. package/src/ViewPager/ViewPagerProps.ts +20 -35
  422. package/src/ViewPager/components/ChildrenMemoizedPage.tsx +124 -0
  423. package/src/ViewPager/components/FluxStoreProvider.tsx +27 -0
  424. package/src/ViewPager/components/index.ts +2 -0
  425. package/src/ViewPager/hooks/index.ts +7 -0
  426. package/src/ViewPager/hooks/useDispatch.ts +11 -0
  427. package/src/ViewPager/hooks/useEagerState.ts +14 -0
  428. package/src/ViewPager/hooks/useForceRender.ts +7 -0
  429. package/src/ViewPager/hooks/useLazyState.ts +32 -0
  430. package/src/ViewPager/hooks/usePageStore.ts +30 -0
  431. package/src/ViewPager/hooks/useStore.ts +15 -0
  432. package/src/ViewPager/hooks/useViewPagerPageState.ts +6 -0
  433. package/src/ViewPager/index.ts +11 -2
  434. package/src/ViewPager/types.ts +15 -0
  435. package/src/ViewPager/utils.tsx +9 -56
  436. package/src/ViewabilityTrackerView/Viewability.ts +3 -0
  437. package/src/ViewabilityTrackerView/ViewabilityTrackerView.tsx +33 -0
  438. package/src/ViewabilityTrackerView/ViewabilityTrackerViewProps.ts +25 -0
  439. package/src/ViewabilityTrackerView/index.ts +2 -0
  440. package/src/ViewabilityTrackerView/measureViewability.ts +54 -0
  441. package/src/ViewabilityTrackerView/useViewabilityTracker.ts +85 -0
  442. package/src/hooks/index.ts +2 -0
  443. package/src/hooks/useDeferredExecutor.ts +46 -0
  444. package/src/hooks/useHeight.ts +2 -2
  445. package/src/hooks/useIsMounted.ts +19 -0
  446. package/src/hooks/useUnstableCollapsibleAppBar.ts +62 -45
  447. package/src/hooks/useUnstableToggleDisplayStyle.ts +8 -6
  448. package/src/index.ts +3 -0
  449. package/build/commonjs/Carousel/CarouselNative.js +0 -72
  450. package/build/commonjs/Carousel/CarouselNative.js.map +0 -1
  451. package/build/commonjs/Carousel/CarouselWeb.js +0 -237
  452. package/build/commonjs/Carousel/CarouselWeb.js.map +0 -1
  453. package/build/commonjs/Carousel/index.native.js.map +0 -1
  454. package/build/commonjs/Carousel/utils.js +0 -19
  455. package/build/commonjs/Carousel/utils.js.map +0 -1
  456. package/build/commonjs/ViewPager/ChildrenMemoizedPage.js +0 -49
  457. package/build/commonjs/ViewPager/ChildrenMemoizedPage.js.map +0 -1
  458. package/build/commonjs/ViewPager/ViewPagerNative.js +0 -72
  459. package/build/commonjs/ViewPager/ViewPagerNative.js.map +0 -1
  460. package/build/commonjs/ViewPager/ViewPagerWeb.js +0 -55
  461. package/build/commonjs/ViewPager/ViewPagerWeb.js.map +0 -1
  462. package/build/commonjs/ViewPager/index.native.js +0 -16
  463. package/build/commonjs/ViewPager/index.native.js.map +0 -1
  464. package/build/commonjs/hooks/useWidth.js +0 -29
  465. package/build/commonjs/hooks/useWidth.js.map +0 -1
  466. package/build/module/Carousel/CarouselNative.js +0 -54
  467. package/build/module/Carousel/CarouselNative.js.map +0 -1
  468. package/build/module/Carousel/CarouselWeb.js +0 -215
  469. package/build/module/Carousel/CarouselWeb.js.map +0 -1
  470. package/build/module/Carousel/index.native.js +0 -2
  471. package/build/module/Carousel/index.native.js.map +0 -1
  472. package/build/module/Carousel/utils.js +0 -7
  473. package/build/module/Carousel/utils.js.map +0 -1
  474. package/build/module/ViewPager/ChildrenMemoizedPage.js +0 -37
  475. package/build/module/ViewPager/ChildrenMemoizedPage.js.map +0 -1
  476. package/build/module/ViewPager/ViewPagerNative.js +0 -53
  477. package/build/module/ViewPager/ViewPagerNative.js.map +0 -1
  478. package/build/module/ViewPager/ViewPagerWeb.js +0 -41
  479. package/build/module/ViewPager/ViewPagerWeb.js.map +0 -1
  480. package/build/module/ViewPager/index.native.js +0 -2
  481. package/build/module/ViewPager/index.native.js.map +0 -1
  482. package/build/module/hooks/useWidth.js +0 -15
  483. package/build/module/hooks/useWidth.js.map +0 -1
  484. package/build/typescript/Carousel/CarouselNative.d.ts +0 -3
  485. package/build/typescript/Carousel/CarouselWeb.d.ts +0 -4
  486. package/build/typescript/Carousel/index.native.d.ts +0 -1
  487. package/build/typescript/Carousel/utils.d.ts +0 -6
  488. package/build/typescript/ViewPager/ChildrenMemoizedPage.d.ts +0 -4
  489. package/build/typescript/ViewPager/ViewPagerNative.d.ts +0 -3
  490. package/build/typescript/ViewPager/ViewPagerWeb.d.ts +0 -3
  491. package/build/typescript/ViewPager/index.native.d.ts +0 -1
  492. package/build/typescript/hooks/useWidth.d.ts +0 -2
  493. package/src/Carousel/CarouselNative.tsx +0 -67
  494. package/src/Carousel/CarouselWeb.tsx +0 -222
  495. package/src/Carousel/index.native.ts +0 -1
  496. package/src/Carousel/utils.ts +0 -11
  497. package/src/ViewPager/ChildrenMemoizedPage.tsx +0 -36
  498. package/src/ViewPager/ViewPagerNative.tsx +0 -66
  499. package/src/ViewPager/ViewPagerWeb.tsx +0 -52
  500. package/src/ViewPager/index.native.ts +0 -1
  501. package/src/hooks/useWidth.ts +0 -17
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useMemo","useLoopedData","originalData","loop","numberOfData","length","first","second"],"sources":["useLoopedData.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nexport default function useLoopedData<ItemT>(\n originalData: ReadonlyArray<ItemT>,\n loop: boolean,\n): ReadonlyArray<ItemT> {\n return useMemo(() => {\n if (!loop) {\n return originalData;\n }\n\n const numberOfData = originalData.length;\n\n if (numberOfData === 1) {\n const [first] = originalData;\n return [first, first, first];\n }\n\n if (numberOfData === 2) {\n const [first, second] = originalData;\n return [first, second, first, second];\n }\n\n return originalData;\n }, [originalData, loop]);\n};\n"],"mappings":"AAAA,SAASA,OAAT,QAAwB,OAAxB;AAEA,eAAe,SAASC,aAAT,CACXC,YADW,EAEXC,IAFW,EAGS;EACpB,OAAOH,OAAO,CAAC,MAAM;IACjB,IAAI,CAACG,IAAL,EAAW;MACP,OAAOD,YAAP;IACH;;IAED,MAAME,YAAY,GAAGF,YAAY,CAACG,MAAlC;;IAEA,IAAID,YAAY,KAAK,CAArB,EAAwB;MACpB,MAAM,CAACE,KAAD,IAAUJ,YAAhB;MACA,OAAO,CAACI,KAAD,EAAQA,KAAR,EAAeA,KAAf,CAAP;IACH;;IAED,IAAIF,YAAY,KAAK,CAArB,EAAwB;MACpB,MAAM,CAACE,KAAD,EAAQC,MAAR,IAAkBL,YAAxB;MACA,OAAO,CAACI,KAAD,EAAQC,MAAR,EAAgBD,KAAhB,EAAuBC,MAAvB,CAAP;IACH;;IAED,OAAOL,YAAP;EACH,CAlBa,EAkBX,CAACA,YAAD,EAAeC,IAAf,CAlBW,CAAd;AAmBH;AAAA"}
@@ -0,0 +1,192 @@
1
+ import { useCallback, useMemo, useRef } from 'react';
2
+ import { Animated } from 'react-native';
3
+ import { useAnimatedValue } from '@fountain-ui/core';
4
+
5
+ function directionToValue(itemWidth) {
6
+ return function (direction) {
7
+ switch (direction) {
8
+ case 'next':
9
+ return -itemWidth;
10
+
11
+ case 'prev':
12
+ return itemWidth;
13
+
14
+ case 'stay':
15
+ return 0;
16
+ }
17
+ };
18
+ }
19
+
20
+ function toValueCompensator(itemWidth) {
21
+ return function (toValue, currentOffset) {
22
+ const remainder = Math.abs(currentOffset % itemWidth);
23
+ const halfOfItemWidth = Math.abs(itemWidth / 2);
24
+ const compensateVector = remainder > halfOfItemWidth ? remainder - itemWidth : remainder;
25
+ const direction = currentOffset > 0 ? -1 : 1;
26
+ return toValue + direction * compensateVector;
27
+ };
28
+ }
29
+
30
+ export default function usePagingAnimator(config) {
31
+ const {
32
+ createScrollAnimation,
33
+ itemWidth,
34
+ indexController,
35
+ initialIndex,
36
+ loop,
37
+ numberOfData
38
+ } = config;
39
+ const {
40
+ getCurrentIndex,
41
+ lastIndex,
42
+ notifyScrollStateHasChanged
43
+ } = indexController;
44
+ const initialOffsetX = itemWidth * initialIndex;
45
+ const accumulativeOffsetX = useAnimatedValue(initialOffsetX);
46
+ const animationOffsetX = useAnimatedValue(0);
47
+ const gestureTranslationX = useAnimatedValue(0);
48
+ const globalInterpolation = useMemo(() => {
49
+ return Animated.add(Animated.add(accumulativeOffsetX, animationOffsetX), gestureTranslationX);
50
+ }, []);
51
+ const toValueRef = useRef(0);
52
+ const currentOffsetRef = useRef(0);
53
+ const isAnimatingRef = useRef(false);
54
+ const maxWidth = Math.abs(numberOfData * itemWidth);
55
+ const ensureOffsetBoundary = useCallback(offset => {
56
+ if (loop) {
57
+ const isCloseToEnd = Math.abs(offset) >= maxWidth - itemWidth;
58
+
59
+ if (isCloseToEnd) {
60
+ const signOfOffset = offset > 0 ? 1 : -1;
61
+ return offset + -signOfOffset * maxWidth;
62
+ }
63
+ }
64
+
65
+ return offset % maxWidth;
66
+ }, [itemWidth, loop, maxWidth]);
67
+ const requireNewOffset = useCallback(newOffset => {
68
+ const nextOffset = ensureOffsetBoundary(newOffset);
69
+ currentOffsetRef.current = nextOffset;
70
+ accumulativeOffsetX.setValue(nextOffset);
71
+ toValueRef.current = 0;
72
+ animationOffsetX.setValue(0);
73
+ }, [ensureOffsetBoundary]);
74
+ const interruptAnimation = useCallback(() => {
75
+ if (!isAnimatingRef.current) {
76
+ return;
77
+ }
78
+
79
+ animationOffsetX.stopAnimation(lastValue => {
80
+ isAnimatingRef.current = false;
81
+ const prevOffset = currentOffsetRef.current;
82
+ const totalOffset = prevOffset + lastValue;
83
+ requireNewOffset(totalOffset);
84
+ notifyScrollStateHasChanged({
85
+ offset: totalOffset,
86
+ state: 'interrupted'
87
+ });
88
+ });
89
+ }, [notifyScrollStateHasChanged, requireNewOffset]);
90
+ const finalizeAnimation = useCallback(() => {
91
+ isAnimatingRef.current = false;
92
+ const prevOffset = currentOffsetRef.current;
93
+ const toValue = toValueRef.current;
94
+ const totalOffset = prevOffset + toValue;
95
+ requireNewOffset(totalOffset);
96
+ notifyScrollStateHasChanged({
97
+ offset: totalOffset,
98
+ state: 'idle'
99
+ });
100
+ }, [notifyScrollStateHasChanged, requireNewOffset]);
101
+ const startPagingAnimation = useCallback((type, config) => {
102
+ if (isAnimatingRef.current) {
103
+ return;
104
+ }
105
+
106
+ const configWithDefaults = {
107
+ animated: true,
108
+ ...config
109
+ };
110
+ const currentIndex = getCurrentIndex();
111
+ const getValueByDirectionOnAllAdjacentItemsVisible = directionToValue(itemWidth);
112
+ const compensateToValue = toValueCompensator(itemWidth);
113
+
114
+ const getValueByDirectionalPagingOnLoopDisabled = _config => {
115
+ const {
116
+ direction,
117
+ isOriginatedFromGesture
118
+ } = _config;
119
+
120
+ if (currentIndex === 0 && direction === 'prev') {
121
+ return isOriginatedFromGesture ? getValueByDirectionOnAllAdjacentItemsVisible('stay') : -lastIndex * itemWidth; // last position
122
+ } else if (currentIndex === lastIndex && direction === 'next') {
123
+ return isOriginatedFromGesture ? getValueByDirectionOnAllAdjacentItemsVisible('stay') : lastIndex * itemWidth; // first position
124
+ }
125
+
126
+ return getValueByDirectionOnAllAdjacentItemsVisible(direction);
127
+ };
128
+
129
+ const getValueByDirectionalPaging = _config => {
130
+ const _configWithDefaults = {
131
+ isOriginatedFromGesture: false,
132
+ ..._config
133
+ };
134
+ return loop ? getValueByDirectionOnAllAdjacentItemsVisible(_configWithDefaults.direction) : getValueByDirectionalPagingOnLoopDisabled(_configWithDefaults);
135
+ };
136
+
137
+ const getValueByIndexPaging = _ref => {
138
+ let {
139
+ index
140
+ } = _ref;
141
+
142
+ if (index < 0 || index > lastIndex || index === currentIndex) {
143
+ // no animation if index is invalid or equals to current index
144
+ return 0;
145
+ }
146
+
147
+ const distance = Math.abs(currentIndex - index) * itemWidth;
148
+ const direction = index > currentIndex ? -1 : 1;
149
+ return distance * direction;
150
+ };
151
+
152
+ const wantedToValue = type === 'directional' // @ts-ignore
153
+ ? getValueByDirectionalPaging(configWithDefaults) // @ts-ignore
154
+ : getValueByIndexPaging(configWithDefaults);
155
+ const toValue = compensateToValue(wantedToValue, currentOffsetRef.current);
156
+ toValueRef.current = toValue;
157
+ isAnimatingRef.current = true;
158
+ notifyScrollStateHasChanged({
159
+ offset: currentOffsetRef.current + toValue,
160
+ state: 'dragging'
161
+ });
162
+ const lastGestureTranslationX = configWithDefaults.lastGestureTranslationX ?? 0;
163
+
164
+ if (Number.isFinite(lastGestureTranslationX)) {
165
+ animationOffsetX.setValue(lastGestureTranslationX);
166
+ gestureTranslationX.setValue(0);
167
+ }
168
+
169
+ if (configWithDefaults.animated) {
170
+ const animation = createScrollAnimation(animationOffsetX, toValue);
171
+ animation.start(_ref2 => {
172
+ let {
173
+ finished
174
+ } = _ref2;
175
+
176
+ if (finished) {
177
+ finalizeAnimation();
178
+ }
179
+ });
180
+ } else {
181
+ finalizeAnimation();
182
+ }
183
+ }, [createScrollAnimation, getCurrentIndex, finalizeAnimation, itemWidth, lastIndex, loop, notifyScrollStateHasChanged]);
184
+ return {
185
+ gestureTranslationX,
186
+ globalInterpolation,
187
+ interruptAnimation,
188
+ startPagingAnimation
189
+ };
190
+ }
191
+ ;
192
+ //# sourceMappingURL=usePagingAnimator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","useMemo","useRef","Animated","useAnimatedValue","directionToValue","itemWidth","direction","toValueCompensator","toValue","currentOffset","remainder","Math","abs","halfOfItemWidth","compensateVector","usePagingAnimator","config","createScrollAnimation","indexController","initialIndex","loop","numberOfData","getCurrentIndex","lastIndex","notifyScrollStateHasChanged","initialOffsetX","accumulativeOffsetX","animationOffsetX","gestureTranslationX","globalInterpolation","add","toValueRef","currentOffsetRef","isAnimatingRef","maxWidth","ensureOffsetBoundary","offset","isCloseToEnd","signOfOffset","requireNewOffset","newOffset","nextOffset","current","setValue","interruptAnimation","stopAnimation","lastValue","prevOffset","totalOffset","state","finalizeAnimation","startPagingAnimation","type","configWithDefaults","animated","currentIndex","getValueByDirectionOnAllAdjacentItemsVisible","compensateToValue","getValueByDirectionalPagingOnLoopDisabled","_config","isOriginatedFromGesture","getValueByDirectionalPaging","_configWithDefaults","getValueByIndexPaging","index","distance","wantedToValue","lastGestureTranslationX","Number","isFinite","animation","start","finished"],"sources":["usePagingAnimator.ts"],"sourcesContent":["import { useCallback, useMemo, useRef } from 'react';\nimport { Animated } from 'react-native';\nimport { useAnimatedValue } from '@fountain-ui/core';\nimport type {\n CreateScrollAnimation,\n DirectionalPagingAnimationConfig,\n IndexController,\n IndexPagingAnimationConfig,\n PagingAnimationConfig,\n PagingAnimationType,\n PagingDirection,\n StartPagingAnimation,\n} from '../types';\n\nexport interface PagingAnimatorConfig {\n createScrollAnimation: CreateScrollAnimation;\n itemWidth: number;\n indexController: IndexController;\n initialIndex: number;\n loop: boolean;\n numberOfData: number;\n}\n\nexport interface PagingAnimator {\n gestureTranslationX: Animated.Value;\n globalInterpolation: Animated.AnimatedInterpolation;\n interruptAnimation: () => void;\n startPagingAnimation: StartPagingAnimation;\n}\n\nfunction directionToValue(itemWidth: number) {\n return function (direction: PagingDirection): number {\n switch (direction) {\n case 'next':\n return -itemWidth;\n case 'prev':\n return itemWidth;\n case 'stay':\n return 0;\n }\n };\n}\n\nfunction toValueCompensator(itemWidth: number) {\n return function (toValue: number, currentOffset: number): number {\n const remainder = Math.abs(currentOffset % itemWidth);\n\n const halfOfItemWidth = Math.abs(itemWidth / 2);\n const compensateVector = remainder > halfOfItemWidth\n ? remainder - itemWidth\n : remainder;\n\n const direction = currentOffset > 0 ? -1 : 1;\n\n return toValue + (direction * compensateVector);\n };\n}\n\nexport default function usePagingAnimator(config: PagingAnimatorConfig): PagingAnimator {\n const {\n createScrollAnimation,\n itemWidth,\n indexController,\n initialIndex,\n loop,\n numberOfData,\n } = config;\n\n const {\n getCurrentIndex,\n lastIndex,\n notifyScrollStateHasChanged,\n } = indexController;\n\n const initialOffsetX = itemWidth * initialIndex;\n const accumulativeOffsetX = useAnimatedValue(initialOffsetX);\n const animationOffsetX = useAnimatedValue(0);\n const gestureTranslationX = useAnimatedValue(0);\n\n const globalInterpolation = useMemo(() => {\n return Animated.add(\n Animated.add(accumulativeOffsetX, animationOffsetX),\n gestureTranslationX,\n );\n }, []);\n\n const toValueRef = useRef<number>(0);\n const currentOffsetRef = useRef<number>(0);\n\n const isAnimatingRef = useRef<boolean>(false);\n\n const maxWidth = Math.abs(numberOfData * itemWidth);\n\n const ensureOffsetBoundary: (offset: number) => number = useCallback((offset: number) => {\n if (loop) {\n const isCloseToEnd = Math.abs(offset) >= (maxWidth - itemWidth);\n if (isCloseToEnd) {\n const signOfOffset = offset > 0 ? 1 : -1;\n return offset + (-signOfOffset * maxWidth);\n }\n }\n\n return offset % maxWidth;\n }, [itemWidth, loop, maxWidth]);\n\n const requireNewOffset = useCallback((newOffset: number) => {\n const nextOffset = ensureOffsetBoundary(newOffset);\n\n currentOffsetRef.current = nextOffset;\n accumulativeOffsetX.setValue(nextOffset);\n\n toValueRef.current = 0;\n animationOffsetX.setValue(0);\n }, [\n ensureOffsetBoundary,\n ]);\n\n const interruptAnimation = useCallback(() => {\n if (!isAnimatingRef.current) {\n return;\n }\n\n animationOffsetX.stopAnimation(lastValue => {\n isAnimatingRef.current = false;\n\n const prevOffset = currentOffsetRef.current;\n const totalOffset = prevOffset + lastValue;\n\n requireNewOffset(totalOffset);\n\n notifyScrollStateHasChanged({ offset: totalOffset, state: 'interrupted' });\n });\n }, [\n notifyScrollStateHasChanged,\n requireNewOffset,\n ]);\n\n const finalizeAnimation = useCallback(() => {\n isAnimatingRef.current = false;\n\n const prevOffset = currentOffsetRef.current;\n const toValue = toValueRef.current;\n const totalOffset = prevOffset + toValue;\n\n requireNewOffset(totalOffset);\n\n notifyScrollStateHasChanged({ offset: totalOffset, state: 'idle' });\n }, [\n notifyScrollStateHasChanged,\n requireNewOffset,\n ]);\n\n const startPagingAnimation = useCallback((type: PagingAnimationType, config: PagingAnimationConfig) => {\n if (isAnimatingRef.current) {\n return;\n }\n\n const configWithDefaults: PagingAnimationConfig = {\n animated: true,\n ...config,\n };\n\n const currentIndex = getCurrentIndex();\n\n const getValueByDirectionOnAllAdjacentItemsVisible = directionToValue(itemWidth);\n const compensateToValue = toValueCompensator(itemWidth);\n\n const getValueByDirectionalPagingOnLoopDisabled = (_config: DirectionalPagingAnimationConfig): number => {\n const { direction, isOriginatedFromGesture } = _config;\n\n if (currentIndex === 0 && direction === 'prev') {\n return isOriginatedFromGesture\n ? getValueByDirectionOnAllAdjacentItemsVisible('stay')\n : -lastIndex * itemWidth; // last position\n } else if (currentIndex === lastIndex && direction === 'next') {\n return isOriginatedFromGesture\n ? getValueByDirectionOnAllAdjacentItemsVisible('stay')\n : lastIndex * itemWidth; // first position\n }\n return getValueByDirectionOnAllAdjacentItemsVisible(direction);\n };\n\n const getValueByDirectionalPaging = (_config: DirectionalPagingAnimationConfig): number => {\n const _configWithDefaults: DirectionalPagingAnimationConfig = {\n isOriginatedFromGesture: false,\n ..._config,\n };\n\n return loop\n ? getValueByDirectionOnAllAdjacentItemsVisible(_configWithDefaults.direction)\n : getValueByDirectionalPagingOnLoopDisabled(_configWithDefaults);\n };\n\n const getValueByIndexPaging = ({ index }: IndexPagingAnimationConfig): number => {\n if (index < 0 || index > lastIndex || index === currentIndex) {\n // no animation if index is invalid or equals to current index\n return 0;\n }\n\n const distance = Math.abs(currentIndex - index) * itemWidth;\n const direction = index > currentIndex ? -1 : 1;\n\n return distance * direction;\n };\n\n const wantedToValue = type === 'directional'\n // @ts-ignore\n ? getValueByDirectionalPaging(configWithDefaults)\n // @ts-ignore\n : getValueByIndexPaging(configWithDefaults);\n\n const toValue = compensateToValue(wantedToValue, currentOffsetRef.current);\n\n toValueRef.current = toValue;\n isAnimatingRef.current = true;\n\n notifyScrollStateHasChanged({\n offset: currentOffsetRef.current + toValue,\n state: 'dragging',\n });\n\n const lastGestureTranslationX: number = configWithDefaults.lastGestureTranslationX ?? 0;\n if (Number.isFinite(lastGestureTranslationX)) {\n animationOffsetX.setValue(lastGestureTranslationX);\n gestureTranslationX.setValue(0);\n }\n\n if (configWithDefaults.animated) {\n const animation = createScrollAnimation(animationOffsetX, toValue);\n\n animation.start(({ finished }) => {\n if (finished) {\n finalizeAnimation();\n }\n });\n } else {\n finalizeAnimation();\n }\n }, [\n createScrollAnimation,\n getCurrentIndex,\n finalizeAnimation,\n itemWidth,\n lastIndex,\n loop,\n notifyScrollStateHasChanged,\n ]);\n\n return {\n gestureTranslationX,\n globalInterpolation,\n interruptAnimation,\n startPagingAnimation,\n };\n};\n"],"mappings":"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"}
@@ -1,2 +1,3 @@
1
- export { default } from './CarouselWeb';
1
+ export { default } from './Carousel';
2
+ export { normalItemStyleFactory, parallaxItemStyleFactory } from './animation';
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":["default"],"mappings":"AAAA,SAASA,OAAT,QAAwB,eAAxB","sourcesContent":["export { default } from './CarouselWeb';\nexport type { default as CarouselProps } from './CarouselProps';"]}
1
+ {"version":3,"names":["default","normalItemStyleFactory","parallaxItemStyleFactory"],"sources":["index.ts"],"sourcesContent":["export { default } from './Carousel';\nexport type { default as CarouselProps } from './CarouselProps';\nexport type { CarouselInstance } from './types';\nexport { normalItemStyleFactory, parallaxItemStyleFactory } from './animation';\n"],"mappings":"AAAA,SAASA,OAAT,QAAwB,YAAxB;AAGA,SAASC,sBAAT,EAAiCC,wBAAjC,QAAiE,aAAjE"}
@@ -0,0 +1,6 @@
1
+ import { logger } from '@fountain-ui/utils';
2
+ export default logger('Carousel', {
3
+ enabled: __DEV__,
4
+ format: 'diff'
5
+ });
6
+ //# sourceMappingURL=tick.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["logger","enabled","__DEV__","format"],"sources":["tick.ts"],"sourcesContent":["import { logger } from '@fountain-ui/utils';\n\nexport default logger('Carousel', {\n enabled: __DEV__,\n format: 'diff',\n});\n"],"mappings":"AAAA,SAASA,MAAT,QAAuB,oBAAvB;AAEA,eAAeA,MAAM,CAAC,UAAD,EAAa;EAC9BC,OAAO,EAAEC,OADqB;EAE9BC,MAAM,EAAE;AAFsB,CAAb,CAArB"}
@@ -0,0 +1,4 @@
1
+ const directions = ['next', 'prev', 'stay'];
2
+ const scrollStates = ['idle', 'dragging', 'interrupted'];
3
+ export {};
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["directions","scrollStates"],"sources":["types.ts"],"sourcesContent":["import type { ReactElement } from 'react';\nimport type { Animated, ViewProps } from 'react-native';\n\nconst directions = ['next', 'prev', 'stay'] as const;\n\nexport type PagingDirection = (typeof directions)[number];\n\nconst scrollStates = ['idle', 'dragging', 'interrupted'] as const;\n\nexport type ScrollState = (typeof scrollStates)[number];\n\nexport type ItemHeight = number | 'auto';\n\nexport interface RenderItem<T> {\n (info: { item: T, index: number, interpolation: Animated.AnimatedInterpolation }): ReactElement | null;\n}\n\nexport interface CreateScrollAnimation {\n (aValue: Animated.AnimatedValue, toValue: number): Animated.CompositeAnimation;\n}\n\nexport interface CreateItemStyle {\n (itemInterpolation: Animated.AnimatedInterpolation, itemWidth: number): Animated.AnimatedProps<ViewProps['style']>;\n}\n\nexport interface GetCurrentIndex {\n (): number;\n}\n\nexport interface OnIndexChange {\n (itemIndex: number): void;\n}\n\nexport interface OnPositionChange {\n (position: number): void;\n}\n\nexport interface ScrollStateChangeEvent {\n offset: number;\n state: ScrollState;\n}\n\nexport interface IndexController {\n getCurrentIndex: GetCurrentIndex;\n lastIndex: number;\n notifyScrollStateHasChanged: (event: ScrollStateChangeEvent) => void;\n}\n\nexport type PagingAnimationType = 'directional' | 'index';\n\nexport interface BasePagingAnimationConfig {\n animated?: boolean;\n lastGestureTranslationX?: number;\n}\n\nexport interface DirectionalPagingAnimationConfig extends BasePagingAnimationConfig {\n direction: PagingDirection;\n isOriginatedFromGesture?: boolean;\n}\n\nexport interface IndexPagingAnimationConfig extends BasePagingAnimationConfig {\n index: number;\n}\n\nexport type PagingAnimationConfig = DirectionalPagingAnimationConfig | IndexPagingAnimationConfig;\n\nexport interface StartPagingAnimation {\n (type: PagingAnimationType, config: PagingAnimationConfig): void;\n}\n\nexport type VisibleIndexRanges = Array<[number, number]>;\n\nexport interface StoreSubscription {\n (): void;\n}\n\nexport interface ItemVisibilityStore {\n dispatch: (ranges: VisibleIndexRanges) => void;\n subscribe: (listener: (ranges: VisibleIndexRanges) => void) => StoreSubscription;\n removeAllListeners: () => void;\n}\n\nexport interface AutoplayController {\n pause: () => void;\n resume: () => void;\n}\n\nexport interface ScrollToOption {\n index: number;\n animated?: boolean;\n}\n\nexport interface CarouselInstance {\n /**\n * Get current visible item index.\n */\n getCurrentIndex: GetCurrentIndex;\n\n /**\n * Scroll to next visible item.\n */\n next: () => void;\n\n /**\n * Scroll to previous visible item.\n */\n prev: () => void;\n\n /**\n * Scroll to desired indexed item.\n * Invalid index is ignored.\n */\n scrollTo: (option: ScrollToOption) => void;\n}\n"],"mappings":"AAGA,MAAMA,UAAU,GAAG,CAAC,MAAD,EAAS,MAAT,EAAiB,MAAjB,CAAnB;AAIA,MAAMC,YAAY,GAAG,CAAC,MAAD,EAAS,UAAT,EAAqB,aAArB,CAArB"}
@@ -1,8 +1,9 @@
1
- function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
1
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
2
 
3
3
  import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
4
4
  import { FlatList } from 'react-native';
5
5
  import * as R from 'ramda';
6
+ import { STATE } from './ComicViewerProps';
6
7
  import ViewerItem from './ViewerItem';
7
8
 
8
9
  const getItemHeights = items => R.map(content => content.height)(items);
@@ -11,7 +12,7 @@ const appender = (left, right) => [left + right, left + right];
11
12
 
12
13
  const getHeightAccum = itemHeights => R.mapAccum(appender, 0, itemHeights);
13
14
 
14
- const keyExtractor = item => item.id;
15
+ const keyExtractor = item => `${item.sortKey}`;
15
16
 
16
17
  export default function ComicViewer(props) {
17
18
  const {
@@ -22,21 +23,32 @@ export default function ComicViewer(props) {
22
23
  initialScrollPercentage = 0,
23
24
  itemVisiblePercentThreshold = 0,
24
25
  onError,
26
+ onScroll,
27
+ onItemPress,
28
+ getNextPage,
25
29
  viewerWidth,
26
30
  windowSize = 3,
31
+ pageUnit,
32
+ ListFooterComponent,
27
33
  ...otherProps
28
34
  } = props;
29
35
  const flatListRef = useRef(null);
30
36
  const errors = useRef(new Map());
31
37
  const debounceTimeOut = useRef(null);
32
- const resourceString = R.toString(R.map(itemData => itemData.sourceUrl)(data));
38
+ const resourceString = R.toString(R.map(itemData => itemData.url)(data));
39
+ const imageWidth = Math.min(viewerWidth, 720);
33
40
  const initialItems = R.map(itemData => ({ ...itemData,
34
41
  isViewable: false,
35
- width: viewerWidth,
36
- height: itemData.height * viewerWidth / itemData.width
42
+ width: imageWidth,
43
+ height: itemData.height * imageWidth / itemData.width
37
44
  }))(data);
38
45
  const [items, setItems] = useState(initialItems);
39
- const itemHeights = getItemHeights(items);
46
+ const initialItemState = R.map(itemData => ({
47
+ sortKey: itemData.sortKey,
48
+ state: STATE.UNLOAD
49
+ }))(data);
50
+ const itemStates = useRef(initialItemState);
51
+ const itemHeights = [...getItemHeights(items)];
40
52
  const itemHeightAccum = getHeightAccum(itemHeights);
41
53
  const viewabilityConfig = useMemo(() => ({
42
54
  itemVisiblePercentThreshold
@@ -49,76 +61,110 @@ export default function ComicViewer(props) {
49
61
  index
50
62
  };
51
63
  }, [itemHeights]);
52
- const onViewableItemsChanged = useRef(({
53
- viewableItems
54
- }) => {
64
+ const onViewableItemsChanged = useRef(_ref => {
65
+ let {
66
+ viewableItems
67
+ } = _ref;
55
68
  setItems(prev => {
56
- const viewableItemIds = R.map(viewableItem => viewableItem.item.id)(viewableItems);
57
- return R.map(prevItem => ({ ...prevItem,
58
- isViewable: R.includes(prevItem.id, viewableItemIds)
69
+ const viewableItemSortKeys = R.map(viewableItem => viewableItem.item.sortKey)(viewableItems);
70
+ const newItems = R.map(prevItem => ({ ...prevItem,
71
+ isViewable: R.includes(prevItem.sortKey, viewableItemSortKeys)
59
72
  }))([...prev]);
73
+ return newItems;
60
74
  });
61
75
  });
76
+ const itemLoadedHandler = useCallback(sortKey => {
77
+ const itemState = R.find(state => state.sortKey === sortKey)(itemStates.current);
78
+
79
+ if (R.isNil(itemState)) {
80
+ return;
81
+ }
62
82
 
63
- const onErrorHandler = errors => {
64
- const isRetryLimited = R.any(error => error.count >= errorRetryCount)(errors);
83
+ itemState.state = STATE.LOADED;
84
+ itemState.error = undefined;
85
+ }, [itemStates]);
86
+ const itemErrorHandler = useCallback(errorInfo => {
87
+ const {
88
+ sortKey,
89
+ count
90
+ } = errorInfo;
65
91
 
66
- if (isRetryLimited) {
92
+ if (count >= errorRetryCount) {
67
93
  return;
68
94
  }
69
95
 
70
- onError && onError(errors);
71
- };
96
+ errors.current.set(sortKey, errorInfo);
97
+ const itemState = R.find(state => state.sortKey === sortKey)(itemStates.current);
72
98
 
73
- const itemErrorHandler = useCallback(errorInfo => {
74
- errors.current.set(errorInfo.id, errorInfo.count);
99
+ if (R.isNil(itemState)) {
100
+ return;
101
+ }
102
+
103
+ itemState.state = STATE.FAIL;
104
+ itemState.error = errorInfo;
105
+
106
+ const handleError = () => {
107
+ const errorsArray = Array.from(errors.current.entries());
108
+ const errorsInfo = R.map(_ref2 => {
109
+ let [key, value] = _ref2;
110
+ return value;
111
+ })(errorsArray);
112
+ onError && onError([...errorsInfo]);
113
+ errors.current.clear();
114
+ };
75
115
 
76
116
  if (debounceTimeOut.current) {
77
117
  clearTimeout(debounceTimeOut.current);
78
118
  }
79
119
 
80
- debounceTimeOut.current = setTimeout(function () {
81
- const errorsArray = Array.from(errors.current.entries());
82
- const errorsInfo = R.map(([key, value]) => ({
83
- id: key,
84
- count: value
85
- }))(errorsArray);
86
- onErrorHandler([...errorsInfo]);
87
- errors.current.clear();
88
- }, errorDebounceMillis);
89
- }, [errorDebounceMillis, errors.current]);
90
- const renderItem = useCallback(({
91
- item
92
- }) => {
120
+ if (errors.current.size === pageUnit) {
121
+ handleError();
122
+ } else {
123
+ debounceTimeOut.current = setTimeout(handleError, errorDebounceMillis);
124
+ }
125
+ }, [errors.current, itemStates]);
126
+ const renderItem = useCallback(_ref3 => {
127
+ let {
128
+ item
129
+ } = _ref3;
130
+ const itemState = R.find(state => state.sortKey === item.sortKey)(itemStates.current);
93
131
  const props = { ...item,
94
- onError: itemErrorHandler
132
+ itemState,
133
+ errorRetryCount,
134
+ onError: itemErrorHandler,
135
+ onLoaded: itemLoadedHandler,
136
+ onItemPress,
137
+ getNextPage
95
138
  };
96
139
  return /*#__PURE__*/React.createElement(ViewerItem, {
97
140
  props: props
98
141
  });
99
- }, []);
142
+ }, [resourceString, itemErrorHandler, itemLoadedHandler, onItemPress]);
100
143
  useEffect(() => {
101
144
  setItems(prev => {
102
145
  return R.map(prevItem => {
103
- const currentData = R.find(currentItemData => prevItem.id === currentItemData.id)(data);
146
+ const currentData = R.find(currentItemData => prevItem.sortKey === currentItemData.sortKey)(data);
147
+ const itemState = R.find(state => state.sortKey === (currentData === null || currentData === void 0 ? void 0 : currentData.sortKey))(itemStates.current);
104
148
 
105
- if (currentData && currentData.sourceUrl !== prevItem.sourceUrl) {
149
+ if (currentData && itemState && itemState.state !== STATE.LOADED && currentData.url !== prevItem.url) {
106
150
  return { ...prevItem,
107
- sourceUrl: currentData.sourceUrl
151
+ url: currentData.url,
152
+ expiresAt: currentData.expiresAt
108
153
  };
109
154
  }
110
155
 
111
156
  return prevItem;
112
157
  })([...prev]);
158
+ ;
113
159
  });
114
160
  }, [resourceString]);
115
161
  useEffect(() => {
116
162
  const newItems = R.map(item => ({ ...item,
117
- width: viewerWidth,
118
- height: item.height * viewerWidth / item.width
163
+ width: imageWidth,
164
+ height: item.height * imageWidth / item.width
119
165
  }))(items);
120
166
  setItems(newItems);
121
- }, [viewerWidth]);
167
+ }, [imageWidth]);
122
168
  useEffect(() => {
123
169
  const totalHeight = itemHeightAccum[0];
124
170
  const offset = Math.floor(initialScrollPercentage / 100 * totalHeight);
@@ -136,10 +182,12 @@ export default function ComicViewer(props) {
136
182
  initialNumToRender: initialNumToRender,
137
183
  keyExtractor: keyExtractor,
138
184
  onViewableItemsChanged: onViewableItemsChanged.current,
185
+ onScroll: onScroll,
139
186
  ref: flatListRef,
140
187
  renderItem: renderItem,
141
188
  viewabilityConfig: viewabilityConfig,
142
- windowSize: windowSize
189
+ windowSize: windowSize,
190
+ ListFooterComponent: ListFooterComponent
143
191
  }, otherProps));
144
192
  }
145
193
  ;
@@ -1 +1 @@
1
- {"version":3,"sources":["ComicViewer.tsx"],"names":["React","useCallback","useEffect","useMemo","useRef","useState","FlatList","R","ViewerItem","getItemHeights","items","map","content","height","appender","left","right","getHeightAccum","itemHeights","mapAccum","keyExtractor","item","id","ComicViewer","props","data","errorDebounceMillis","errorRetryCount","initialNumToRender","initialScrollPercentage","itemVisiblePercentThreshold","onError","viewerWidth","windowSize","otherProps","flatListRef","errors","Map","debounceTimeOut","resourceString","toString","itemData","sourceUrl","initialItems","isViewable","width","setItems","itemHeightAccum","viewabilityConfig","getItemLayout","index","offsets","prepend","length","offset","onViewableItemsChanged","viewableItems","prev","viewableItemIds","viewableItem","prevItem","includes","onErrorHandler","isRetryLimited","any","error","count","itemErrorHandler","errorInfo","current","set","clearTimeout","setTimeout","errorsArray","Array","from","entries","errorsInfo","key","value","clear","renderItem","currentData","find","currentItemData","newItems","totalHeight","Math","floor","scrollToOffset","animated"],"mappings":"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","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"]}
1
+ {"version":3,"names":["React","useCallback","useEffect","useMemo","useRef","useState","FlatList","R","STATE","ViewerItem","getItemHeights","items","map","content","height","appender","left","right","getHeightAccum","itemHeights","mapAccum","keyExtractor","item","sortKey","ComicViewer","props","data","errorDebounceMillis","errorRetryCount","initialNumToRender","initialScrollPercentage","itemVisiblePercentThreshold","onError","onScroll","onItemPress","getNextPage","viewerWidth","windowSize","pageUnit","ListFooterComponent","otherProps","flatListRef","errors","Map","debounceTimeOut","resourceString","toString","itemData","url","imageWidth","Math","min","initialItems","isViewable","width","setItems","initialItemState","state","UNLOAD","itemStates","itemHeightAccum","viewabilityConfig","getItemLayout","index","offsets","prepend","length","offset","onViewableItemsChanged","viewableItems","prev","viewableItemSortKeys","viewableItem","newItems","prevItem","includes","itemLoadedHandler","itemState","find","current","isNil","LOADED","error","undefined","itemErrorHandler","errorInfo","count","set","FAIL","handleError","errorsArray","Array","from","entries","errorsInfo","key","value","clear","clearTimeout","size","setTimeout","renderItem","onLoaded","currentData","currentItemData","expiresAt","totalHeight","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 {\n ComicViewerItemData,\n ComicViewerItemState,\n default as ComicViewerProps,\n ErrorInfo,\n STATE,\n} 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.sortKey}`;\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 onScroll,\n onItemPress,\n getNextPage,\n viewerWidth,\n windowSize = 3,\n pageUnit,\n ListFooterComponent,\n ...otherProps\n } = props;\n\n const flatListRef = useRef<FlatList>(null);\n\n const errors = useRef<Map<number, ErrorInfo>>(new Map());\n\n const debounceTimeOut = useRef<NodeJS.Timeout | null>(null);\n\n const resourceString = R.toString(R.map((itemData: ComicViewerItemData) => itemData.url)(data));\n\n const imageWidth = Math.min(viewerWidth, 720);\n const initialItems = R.map((itemData: ComicViewerItemData<T>) => ({\n ...itemData,\n isViewable: false,\n width: imageWidth,\n height: (itemData.height * imageWidth) / itemData.width,\n }))(data);\n\n const [items, setItems] = useState<ComicViewerItemProps<T>[]>(initialItems);\n\n const initialItemState: ComicViewerItemState[] = R.map((itemData: ComicViewerItemData<T>) => ({\n sortKey: itemData.sortKey,\n state: STATE.UNLOAD,\n }))(data);\n\n const itemStates = useRef<Array<ComicViewerItemState>>(initialItemState);\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 viewableItemSortKeys = R.map((viewableItem: ViewToken) => viewableItem.item.sortKey)(viewableItems);\n\n const newItems = R.map((prevItem: ComicViewerItemProps<T>) => ({\n ...prevItem,\n isViewable: R.includes(prevItem.sortKey, viewableItemSortKeys),\n }))([...prev]);\n\n return newItems;\n });\n });\n\n const itemLoadedHandler = useCallback((sortKey: number) => {\n const itemState: ComicViewerItemState | undefined = R.find((state: ComicViewerItemState) => state.sortKey === sortKey)(itemStates.current);\n\n if (R.isNil(itemState)) {\n return;\n }\n\n itemState.state = STATE.LOADED;\n itemState.error = undefined;\n }, [itemStates]);\n\n const itemErrorHandler = useCallback((errorInfo: ErrorInfo) => {\n const { sortKey, count } = errorInfo;\n\n if (count >= errorRetryCount) {\n return;\n }\n\n errors.current.set(sortKey, errorInfo);\n\n const itemState: ComicViewerItemState | undefined = R.find((state: ComicViewerItemState) => state.sortKey === sortKey)(itemStates.current);\n\n if (R.isNil(itemState)) {\n return;\n }\n\n itemState.state = STATE.FAIL;\n itemState.error = errorInfo;\n\n const handleError = () => {\n const errorsArray = Array.from(errors.current.entries());\n const errorsInfo = R.map(([key, value]: [number, ErrorInfo]) => value)(errorsArray);\n\n onError && onError([...errorsInfo]);\n errors.current.clear();\n };\n\n if (debounceTimeOut.current) {\n clearTimeout(debounceTimeOut.current);\n }\n\n if (errors.current.size === pageUnit) {\n handleError();\n } else {\n debounceTimeOut.current = setTimeout(handleError, errorDebounceMillis);\n }\n }, [errors.current, itemStates]);\n\n const renderItem: ListRenderItem<ComicViewerItemProps<T>> = useCallback(({ item }) => {\n const itemState: ComicViewerItemState | undefined = R.find((state: ComicViewerItemState) => state.sortKey === item.sortKey)(itemStates.current);\n\n const props = {\n ...item,\n itemState,\n errorRetryCount,\n onError: itemErrorHandler,\n onLoaded: itemLoadedHandler,\n onItemPress,\n getNextPage,\n };\n\n return <ViewerItem props={props}/>;\n }, [resourceString, itemErrorHandler, itemLoadedHandler, onItemPress]);\n\n useEffect(() => {\n setItems((prev: ComicViewerItemProps<T>[]) => {\n return R.map((prevItem: ComicViewerItemProps<T>) => {\n const currentData: ComicViewerItemData | undefined = R.find((currentItemData: ComicViewerItemData<T>) => prevItem.sortKey === currentItemData.sortKey)(data);\n const itemState: ComicViewerItemState | undefined = R.find((state: ComicViewerItemState) => state.sortKey === currentData?.sortKey)(itemStates.current);\n\n if (currentData\n && itemState\n && itemState.state !== STATE.LOADED\n && (currentData.url !== prevItem.url)) {\n return {\n ...prevItem,\n url: currentData.url,\n expiresAt: currentData.expiresAt,\n };\n }\n\n return prevItem;\n })([...prev]);\n ;\n });\n }, [resourceString]);\n\n useEffect(() => {\n const newItems = R.map((item: ComicViewerItemProps<T>) => ({\n ...item,\n width: imageWidth,\n height: (item.height * imageWidth) / item.width,\n }))(items);\n\n setItems(newItems);\n }, [imageWidth]);\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 onScroll={onScroll}\n ref={flatListRef}\n renderItem={renderItem}\n viewabilityConfig={viewabilityConfig}\n windowSize={windowSize}\n ListFooterComponent={ListFooterComponent}\n {...otherProps}\n />\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[]}
1
+ {"version":3,"names":[],"sources":["ComicViewerItemProps.ts"],"sourcesContent":["import { ComicViewerItemData, ErrorInfo, ComicViewerItemState } from './ComicViewerProps';\n\ntype ComicViewerItemProps<T> = ComicViewerItemData<T> & {\n /**\n * FlatListItem is viewable in screen.\n */\n isViewable: boolean;\n\n /**\n * How many times retry onError when same item error occur\n * @default 3\n */\n errorRetryCount?: number;\n\n /**\n * Error handler\n */\n onError?: (errorInfo: ErrorInfo) => void;\n\n /**\n * Load handler\n */\n onLoaded?: (sortKey: number) => void;\n\n /**\n * Method for getting next page contents.\n * @param sortKey\n */\n getNextPage?: (sortKey: number) => void;\n\n /**\n * Handle item press event.\n */\n onItemPress?: () => void;\n\n /**\n * Image loading state and error info.\n */\n itemState?: ComicViewerItemState;\n}\n\nexport default ComicViewerItemProps;"],"mappings":""}
@@ -1,2 +1,7 @@
1
-
1
+ export const STATE = {
2
+ UNLOAD: 'unload',
3
+ LOADING: 'loading',
4
+ LOADED: 'loaded',
5
+ FAIL: 'fail'
6
+ };
2
7
  //# sourceMappingURL=ComicViewerProps.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[]}
1
+ {"version":3,"names":["STATE","UNLOAD","LOADING","LOADED","FAIL"],"sources":["ComicViewerProps.ts"],"sourcesContent":["import React from 'react';\nimport { ComponentProps } from '@fountain-ui/core';\nimport { NativeScrollEvent, NativeSyntheticEvent } from 'react-native';\n\nexport const STATE = {\n UNLOAD: 'unload',\n LOADING: 'loading',\n LOADED: 'loaded',\n FAIL: 'fail',\n} as const;\n\nexport type LoadingState = typeof STATE[keyof typeof STATE];\n\nexport interface ComicViewerItemState{\n /**\n * Comic viewer item sortKey.\n */\n sortKey: number;\n\n /**\n * Content's loading state.\n */\n state: LoadingState;\n\n /***\n * Content's error Info.\n */\n error?: ErrorInfo;\n}\n\nexport interface ErrorInfo {\n /**\n * ComicViewerItemData.sortKey.\n */\n sortKey: number;\n\n /**\n * Number of times an error occurred.\n */\n count: number;\n\n /**\n * Content is Expired: true\n */\n expired: boolean;\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: number | undefined;\n\n /**\n * Image sourceUrl for displaying.\n */\n url: string;\n\n /**\n * Image width.\n */\n width: number;\n\n /**\n * SortKey\n */\n sortKey: number;\n\n /**\n * Image expire date.\n */\n expiresAt: string;\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 * Comic viewer width.\n */\n viewerWidth: number;\n\n /**\n * The value for FlatList windowSize.\n * @default 3\n */\n windowSize?: number;\n\n /**\n * How many images in one page.\n */\n pageUnit: number;\n\n /**\n * Method for getting next page contents.\n * @param sortKey\n */\n getNextPage?: (sortKey: number) => void;\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 * 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 * Component for comic viewer footer.\n */\n ListFooterComponent?: React.ReactElement;\n}> {}"],"mappings":"AAIA,OAAO,MAAMA,KAAK,GAAG;EACjBC,MAAM,EAAE,QADS;EAEjBC,OAAO,EAAE,SAFQ;EAGjBC,MAAM,EAAE,QAHS;EAIjBC,IAAI,EAAE;AAJW,CAAd"}