@fountain-ui/lab 2.0.0-beta.7 → 2.0.0-beta.71

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 (481) 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/ViewPager/FluxContext.js +13 -0
  76. package/build/commonjs/ViewPager/FluxContext.js.map +1 -0
  77. package/build/commonjs/ViewPager/InternalContext.js +17 -0
  78. package/build/commonjs/ViewPager/InternalContext.js.map +1 -0
  79. package/build/commonjs/ViewPager/PageStateContext.js +16 -0
  80. package/build/commonjs/ViewPager/PageStateContext.js.map +1 -0
  81. package/build/commonjs/ViewPager/ViewPager.js +81 -0
  82. package/build/commonjs/ViewPager/ViewPager.js.map +1 -0
  83. package/build/commonjs/ViewPager/ViewPager.native.js +152 -0
  84. package/build/commonjs/ViewPager/ViewPager.native.js.map +1 -0
  85. package/build/commonjs/ViewPager/ViewPagerProps.js.map +1 -1
  86. package/build/commonjs/ViewPager/components/ChildrenMemoizedPage.js +122 -0
  87. package/build/commonjs/ViewPager/components/ChildrenMemoizedPage.js.map +1 -0
  88. package/build/commonjs/ViewPager/components/FluxStoreProvider.js +37 -0
  89. package/build/commonjs/ViewPager/components/FluxStoreProvider.js.map +1 -0
  90. package/build/commonjs/ViewPager/components/index.js +24 -0
  91. package/build/commonjs/ViewPager/components/index.js.map +1 -0
  92. package/build/commonjs/ViewPager/hooks/index.js +64 -0
  93. package/build/commonjs/ViewPager/hooks/index.js.map +1 -0
  94. package/build/commonjs/ViewPager/hooks/useDispatch.js +22 -0
  95. package/build/commonjs/ViewPager/hooks/useDispatch.js.map +1 -0
  96. package/build/commonjs/ViewPager/hooks/useEagerState.js +24 -0
  97. package/build/commonjs/ViewPager/hooks/useEagerState.js.map +1 -0
  98. package/build/commonjs/ViewPager/hooks/useForceRender.js +16 -0
  99. package/build/commonjs/ViewPager/hooks/useForceRender.js.map +1 -0
  100. package/build/commonjs/ViewPager/hooks/useLazyState.js +45 -0
  101. package/build/commonjs/ViewPager/hooks/useLazyState.js.map +1 -0
  102. package/build/commonjs/ViewPager/hooks/usePageStore.js +35 -0
  103. package/build/commonjs/ViewPager/hooks/usePageStore.js.map +1 -0
  104. package/build/commonjs/ViewPager/hooks/useStore.js +26 -0
  105. package/build/commonjs/ViewPager/hooks/useStore.js.map +1 -0
  106. package/build/commonjs/ViewPager/hooks/useViewPagerPageState.js +19 -0
  107. package/build/commonjs/ViewPager/hooks/useViewPagerPageState.js.map +1 -0
  108. package/build/commonjs/ViewPager/index.js +42 -2
  109. package/build/commonjs/ViewPager/index.js.map +1 -1
  110. package/build/commonjs/ViewPager/types.js +2 -0
  111. package/build/commonjs/ViewPager/types.js.map +1 -0
  112. package/build/commonjs/ViewPager/utils.js +12 -45
  113. package/build/commonjs/ViewPager/utils.js.map +1 -1
  114. package/build/commonjs/ViewabilityTrackerView/Viewability.js +2 -0
  115. package/build/commonjs/ViewabilityTrackerView/Viewability.js.map +1 -0
  116. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerView.js +45 -0
  117. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerView.js.map +1 -0
  118. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerViewProps.js +2 -0
  119. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerViewProps.js.map +1 -0
  120. package/build/commonjs/{Carousel/index.native.js → ViewabilityTrackerView/index.js} +3 -3
  121. package/build/commonjs/ViewabilityTrackerView/index.js.map +1 -0
  122. package/build/commonjs/ViewabilityTrackerView/measureViewability.js +42 -0
  123. package/build/commonjs/ViewabilityTrackerView/measureViewability.js.map +1 -0
  124. package/build/commonjs/ViewabilityTrackerView/useViewabilityTracker.js +88 -0
  125. package/build/commonjs/ViewabilityTrackerView/useViewabilityTracker.js.map +1 -0
  126. package/build/commonjs/hooks/index.js +16 -0
  127. package/build/commonjs/hooks/index.js.map +1 -1
  128. package/build/commonjs/hooks/useDeferredExecutor.js +45 -0
  129. package/build/commonjs/hooks/useDeferredExecutor.js.map +1 -0
  130. package/build/commonjs/hooks/useHeight.js +4 -4
  131. package/build/commonjs/hooks/useHeight.js.map +1 -1
  132. package/build/commonjs/hooks/useIsMounted.js +22 -0
  133. package/build/commonjs/hooks/useIsMounted.js.map +1 -0
  134. package/build/commonjs/hooks/useUnstableCollapsibleAppBar.js +41 -31
  135. package/build/commonjs/hooks/useUnstableCollapsibleAppBar.js.map +1 -1
  136. package/build/commonjs/hooks/useUnstableToggleDisplayStyle.js +2 -2
  137. package/build/commonjs/hooks/useUnstableToggleDisplayStyle.js.map +1 -1
  138. package/build/commonjs/index.js +22 -1
  139. package/build/commonjs/index.js.map +1 -1
  140. package/build/module/AnimatedY/AnimatedY.js +8 -7
  141. package/build/module/AnimatedY/AnimatedY.js.map +1 -1
  142. package/build/module/BottomSheet/BottomSheetNative.js +64 -9
  143. package/build/module/BottomSheet/BottomSheetNative.js.map +1 -1
  144. package/build/module/BottomSheet/BottomSheetProps.js.map +1 -1
  145. package/build/module/BottomSheet/BottomSheetWeb.js +40 -14
  146. package/build/module/BottomSheet/BottomSheetWeb.js.map +1 -1
  147. package/build/module/BottomSheet/useDynamicSnapPoints.js +52 -0
  148. package/build/module/BottomSheet/useDynamicSnapPoints.js.map +1 -0
  149. package/build/module/Carousel/Carousel.js +109 -0
  150. package/build/module/Carousel/Carousel.js.map +1 -0
  151. package/build/module/Carousel/CarouselProps.js.map +1 -1
  152. package/build/module/Carousel/animation/animationUtils.js +2 -0
  153. package/build/module/Carousel/animation/animationUtils.js.map +1 -0
  154. package/build/module/Carousel/animation/createDefaultItemStyle.js +3 -0
  155. package/build/module/Carousel/animation/createDefaultItemStyle.js.map +1 -0
  156. package/build/module/Carousel/animation/createDefaultScrollAnimation.js +12 -0
  157. package/build/module/Carousel/animation/createDefaultScrollAnimation.js.map +1 -0
  158. package/build/module/Carousel/animation/index.js +5 -0
  159. package/build/module/Carousel/animation/index.js.map +1 -0
  160. package/build/module/Carousel/animation/normalItemStyleFactory.js +18 -0
  161. package/build/module/Carousel/animation/normalItemStyleFactory.js.map +1 -0
  162. package/build/module/Carousel/animation/parallaxItemStyleFactory.js +55 -0
  163. package/build/module/Carousel/animation/parallaxItemStyleFactory.js.map +1 -0
  164. package/build/module/Carousel/components/InternalContext.js +19 -0
  165. package/build/module/Carousel/components/InternalContext.js.map +1 -0
  166. package/build/module/Carousel/components/ItemView.js +46 -0
  167. package/build/module/Carousel/components/ItemView.js.map +1 -0
  168. package/build/module/Carousel/components/RootView.js +65 -0
  169. package/build/module/Carousel/components/RootView.js.map +1 -0
  170. package/build/module/Carousel/components/ScrollViewGesture.js +69 -0
  171. package/build/module/Carousel/components/ScrollViewGesture.js.map +1 -0
  172. package/build/module/Carousel/components/index.js +5 -0
  173. package/build/module/Carousel/components/index.js.map +1 -0
  174. package/build/module/Carousel/components/useItemInterpolation.js +51 -0
  175. package/build/module/Carousel/components/useItemInterpolation.js.map +1 -0
  176. package/build/module/Carousel/hooks/index.js +6 -0
  177. package/build/module/Carousel/hooks/index.js.map +1 -0
  178. package/build/module/Carousel/hooks/useAutoplayController.js +48 -0
  179. package/build/module/Carousel/hooks/useAutoplayController.js.map +1 -0
  180. package/build/module/Carousel/hooks/useIndexController.js +44 -0
  181. package/build/module/Carousel/hooks/useIndexController.js.map +1 -0
  182. package/build/module/Carousel/hooks/useItemVisibilityStore.js +86 -0
  183. package/build/module/Carousel/hooks/useItemVisibilityStore.js.map +1 -0
  184. package/build/module/Carousel/hooks/useLoopedData.js +24 -0
  185. package/build/module/Carousel/hooks/useLoopedData.js.map +1 -0
  186. package/build/module/Carousel/hooks/usePagingAnimator.js +192 -0
  187. package/build/module/Carousel/hooks/usePagingAnimator.js.map +1 -0
  188. package/build/module/Carousel/index.js +2 -1
  189. package/build/module/Carousel/index.js.map +1 -1
  190. package/build/module/Carousel/tick.js +6 -0
  191. package/build/module/Carousel/tick.js.map +1 -0
  192. package/build/module/Carousel/types.js +4 -0
  193. package/build/module/Carousel/types.js.map +1 -0
  194. package/build/module/ComicViewer/ComicViewer.js +229 -93
  195. package/build/module/ComicViewer/ComicViewer.js.map +1 -1
  196. package/build/module/ComicViewer/ComicViewerProps.js.map +1 -1
  197. package/build/module/ComicViewer/EncodedTile.js +3 -0
  198. package/build/module/ComicViewer/EncodedTile.js.map +1 -0
  199. package/build/module/ComicViewer/FastScroll.js +152 -0
  200. package/build/module/ComicViewer/FastScroll.js.map +1 -0
  201. package/build/module/ComicViewer/FastScrollProps.js +2 -0
  202. package/build/module/ComicViewer/FastScrollProps.js.map +1 -0
  203. package/build/module/ComicViewer/ReloadButton.js +33 -0
  204. package/build/module/ComicViewer/ReloadButton.js.map +1 -0
  205. package/build/module/ComicViewer/ViewerItem.js +53 -60
  206. package/build/module/ComicViewer/ViewerItem.js.map +1 -1
  207. package/build/module/ComicViewer/index.js.map +1 -1
  208. package/build/module/ComicViewer/util.js +15 -0
  209. package/build/module/ComicViewer/util.js.map +1 -0
  210. package/build/module/DateTimePicker/DateTimePicker.js +11 -2
  211. package/build/module/DateTimePicker/DateTimePicker.js.map +1 -1
  212. package/build/module/FlipCard/FlipCard.js +2 -2
  213. package/build/module/FlipCard/FlipCard.js.map +1 -1
  214. package/build/module/ViewPager/FluxContext.js +4 -0
  215. package/build/module/ViewPager/FluxContext.js.map +1 -0
  216. package/build/module/ViewPager/InternalContext.js +7 -0
  217. package/build/module/ViewPager/InternalContext.js.map +1 -0
  218. package/build/module/ViewPager/PageStateContext.js +7 -0
  219. package/build/module/ViewPager/PageStateContext.js.map +1 -0
  220. package/build/module/ViewPager/ViewPager.js +57 -0
  221. package/build/module/ViewPager/ViewPager.js.map +1 -0
  222. package/build/module/ViewPager/ViewPager.native.js +129 -0
  223. package/build/module/ViewPager/ViewPager.native.js.map +1 -0
  224. package/build/module/ViewPager/ViewPagerProps.js.map +1 -1
  225. package/build/module/ViewPager/components/ChildrenMemoizedPage.js +101 -0
  226. package/build/module/ViewPager/components/ChildrenMemoizedPage.js.map +1 -0
  227. package/build/module/ViewPager/components/FluxStoreProvider.js +20 -0
  228. package/build/module/ViewPager/components/FluxStoreProvider.js.map +1 -0
  229. package/build/module/ViewPager/components/index.js +3 -0
  230. package/build/module/ViewPager/components/index.js.map +1 -0
  231. package/build/module/ViewPager/hooks/index.js +8 -0
  232. package/build/module/ViewPager/hooks/index.js.map +1 -0
  233. package/build/module/ViewPager/hooks/useDispatch.js +10 -0
  234. package/build/module/ViewPager/hooks/useDispatch.js.map +1 -0
  235. package/build/module/ViewPager/hooks/useEagerState.js +12 -0
  236. package/build/module/ViewPager/hooks/useEagerState.js.map +1 -0
  237. package/build/module/ViewPager/hooks/useForceRender.js +7 -0
  238. package/build/module/ViewPager/hooks/useForceRender.js.map +1 -0
  239. package/build/module/ViewPager/hooks/useLazyState.js +30 -0
  240. package/build/module/ViewPager/hooks/useLazyState.js.map +1 -0
  241. package/build/module/ViewPager/hooks/usePageStore.js +25 -0
  242. package/build/module/ViewPager/hooks/usePageStore.js.map +1 -0
  243. package/build/module/ViewPager/hooks/useStore.js +14 -0
  244. package/build/module/ViewPager/hooks/useStore.js.map +1 -0
  245. package/build/module/ViewPager/hooks/useViewPagerPageState.js +7 -0
  246. package/build/module/ViewPager/hooks/useViewPagerPageState.js.map +1 -0
  247. package/build/module/ViewPager/index.js +3 -1
  248. package/build/module/ViewPager/index.js.map +1 -1
  249. package/build/module/ViewPager/types.js +2 -0
  250. package/build/module/ViewPager/types.js.map +1 -0
  251. package/build/module/ViewPager/utils.js +6 -34
  252. package/build/module/ViewPager/utils.js.map +1 -1
  253. package/build/module/ViewabilityTrackerView/Viewability.js +2 -0
  254. package/build/module/ViewabilityTrackerView/Viewability.js.map +1 -0
  255. package/build/module/ViewabilityTrackerView/ViewabilityTrackerView.js +28 -0
  256. package/build/module/ViewabilityTrackerView/ViewabilityTrackerView.js.map +1 -0
  257. package/build/module/ViewabilityTrackerView/ViewabilityTrackerViewProps.js +2 -0
  258. package/build/module/ViewabilityTrackerView/ViewabilityTrackerViewProps.js.map +1 -0
  259. package/build/module/ViewabilityTrackerView/index.js +2 -0
  260. package/build/module/ViewabilityTrackerView/index.js.map +1 -0
  261. package/build/module/ViewabilityTrackerView/measureViewability.js +34 -0
  262. package/build/module/ViewabilityTrackerView/measureViewability.js.map +1 -0
  263. package/build/module/ViewabilityTrackerView/useViewabilityTracker.js +73 -0
  264. package/build/module/ViewabilityTrackerView/useViewabilityTracker.js.map +1 -0
  265. package/build/module/hooks/index.js +2 -0
  266. package/build/module/hooks/index.js.map +1 -1
  267. package/build/module/hooks/useDeferredExecutor.js +33 -0
  268. package/build/module/hooks/useDeferredExecutor.js.map +1 -0
  269. package/build/module/hooks/useHeight.js +2 -3
  270. package/build/module/hooks/useHeight.js.map +1 -1
  271. package/build/module/hooks/useIsMounted.js +13 -0
  272. package/build/module/hooks/useIsMounted.js.map +1 -0
  273. package/build/module/hooks/useUnstableCollapsibleAppBar.js +40 -24
  274. package/build/module/hooks/useUnstableCollapsibleAppBar.js.map +1 -1
  275. package/build/module/hooks/useUnstableToggleDisplayStyle.js +2 -2
  276. package/build/module/hooks/useUnstableToggleDisplayStyle.js.map +1 -1
  277. package/build/module/index.js +2 -0
  278. package/build/module/index.js.map +1 -1
  279. package/build/typescript/AnimatedY/AnimatedY.d.ts +1 -0
  280. package/build/typescript/BottomSheet/BottomSheetNative.d.ts +1 -0
  281. package/build/typescript/BottomSheet/BottomSheetProps.d.ts +32 -1
  282. package/build/typescript/BottomSheet/BottomSheetWeb.d.ts +1 -0
  283. package/build/typescript/BottomSheet/TransparentBackdrop.d.ts +1 -0
  284. package/build/typescript/BottomSheet/useDynamicSnapPoints.d.ts +12 -0
  285. package/build/typescript/Carousel/Carousel.d.ts +5 -0
  286. package/build/typescript/Carousel/CarouselProps.d.ts +33 -48
  287. package/build/typescript/Carousel/animation/animationUtils.d.ts +1 -0
  288. package/build/typescript/Carousel/animation/createDefaultItemStyle.d.ts +2 -0
  289. package/build/typescript/Carousel/animation/createDefaultScrollAnimation.d.ts +2 -0
  290. package/build/typescript/Carousel/animation/index.d.ts +4 -0
  291. package/build/typescript/Carousel/animation/normalItemStyleFactory.d.ts +2 -0
  292. package/build/typescript/Carousel/animation/parallaxItemStyleFactory.d.ts +9 -0
  293. package/build/typescript/Carousel/components/InternalContext.d.ts +14 -0
  294. package/build/typescript/Carousel/components/ItemView.d.ts +9 -0
  295. package/build/typescript/Carousel/components/RootView.d.ts +16 -0
  296. package/build/typescript/Carousel/components/ScrollViewGesture.d.ts +12 -0
  297. package/build/typescript/Carousel/components/index.d.ts +4 -0
  298. package/build/typescript/Carousel/components/useItemInterpolation.d.ts +2 -0
  299. package/build/typescript/Carousel/hooks/index.d.ts +5 -0
  300. package/build/typescript/Carousel/hooks/useAutoplayController.d.ts +7 -0
  301. package/build/typescript/Carousel/hooks/useIndexController.d.ts +10 -0
  302. package/build/typescript/Carousel/hooks/useItemVisibilityStore.d.ts +7 -0
  303. package/build/typescript/Carousel/hooks/useLoopedData.d.ts +1 -0
  304. package/build/typescript/Carousel/hooks/usePagingAnimator.d.ts +17 -0
  305. package/build/typescript/Carousel/index.d.ts +3 -1
  306. package/build/typescript/Carousel/tick.d.ts +2 -0
  307. package/build/typescript/Carousel/types.d.ts +91 -0
  308. package/build/typescript/ComicViewer/ComicViewer.d.ts +2 -1
  309. package/build/typescript/ComicViewer/ComicViewerProps.d.ts +61 -43
  310. package/build/typescript/ComicViewer/EncodedTile.d.ts +2 -0
  311. package/build/typescript/ComicViewer/FastScroll.d.ts +4 -0
  312. package/build/typescript/ComicViewer/FastScrollProps.d.ts +74 -0
  313. package/build/typescript/ComicViewer/ReloadButton.d.ts +7 -0
  314. package/build/typescript/ComicViewer/ViewerItem.d.ts +46 -7
  315. package/build/typescript/ComicViewer/index.d.ts +3 -2
  316. package/build/typescript/ComicViewer/util.d.ts +2 -0
  317. package/build/typescript/DateTimePicker/DateTimePicker.d.ts +1 -0
  318. package/build/typescript/DateTimePicker/YearPicker.d.ts +1 -0
  319. package/build/typescript/FlipCard/FlipCard.d.ts +1 -0
  320. package/build/typescript/StatusBarProvider/StatusBarProvider.d.ts +1 -0
  321. package/build/typescript/ViewPager/FluxContext.d.ts +5 -0
  322. package/build/typescript/ViewPager/InternalContext.d.ts +7 -0
  323. package/build/typescript/ViewPager/PageStateContext.d.ts +6 -0
  324. package/build/typescript/ViewPager/ViewPager.d.ts +5 -0
  325. package/build/typescript/ViewPager/ViewPager.native.d.ts +5 -0
  326. package/build/typescript/ViewPager/ViewPagerProps.d.ts +21 -27
  327. package/build/typescript/ViewPager/components/ChildrenMemoizedPage.d.ts +14 -0
  328. package/build/typescript/ViewPager/components/FluxStoreProvider.d.ts +6 -0
  329. package/build/typescript/ViewPager/components/index.d.ts +2 -0
  330. package/build/typescript/ViewPager/hooks/index.d.ts +7 -0
  331. package/build/typescript/ViewPager/hooks/useDispatch.d.ts +2 -0
  332. package/build/typescript/ViewPager/hooks/useEagerState.d.ts +1 -0
  333. package/build/typescript/ViewPager/hooks/useForceRender.d.ts +2 -0
  334. package/build/typescript/ViewPager/hooks/useLazyState.d.ts +2 -0
  335. package/build/typescript/ViewPager/hooks/usePageStore.d.ts +2 -0
  336. package/build/typescript/ViewPager/hooks/useStore.d.ts +2 -0
  337. package/build/typescript/ViewPager/hooks/useViewPagerPageState.d.ts +1 -0
  338. package/build/typescript/ViewPager/index.d.ts +4 -1
  339. package/build/typescript/ViewPager/types.d.ts +12 -0
  340. package/build/typescript/ViewPager/utils.d.ts +5 -20
  341. package/build/typescript/ViewabilityTrackerView/Viewability.d.ts +3 -0
  342. package/build/typescript/ViewabilityTrackerView/ViewabilityTrackerView.d.ts +3 -0
  343. package/build/typescript/ViewabilityTrackerView/ViewabilityTrackerViewProps.d.ts +22 -0
  344. package/build/typescript/ViewabilityTrackerView/index.d.ts +2 -0
  345. package/build/typescript/ViewabilityTrackerView/measureViewability.d.ts +11 -0
  346. package/build/typescript/ViewabilityTrackerView/useViewabilityTracker.d.ts +11 -0
  347. package/build/typescript/hooks/index.d.ts +2 -0
  348. package/build/typescript/hooks/useDeferredExecutor.d.ts +11 -0
  349. package/build/typescript/hooks/useIsMounted.d.ts +4 -0
  350. package/build/typescript/index.d.ts +2 -0
  351. package/package.json +10 -25
  352. package/src/AnimatedY/AnimatedY.tsx +10 -7
  353. package/src/BottomSheet/BottomSheetNative.tsx +68 -6
  354. package/src/BottomSheet/BottomSheetProps.ts +38 -1
  355. package/src/BottomSheet/BottomSheetWeb.tsx +54 -16
  356. package/src/BottomSheet/useDynamicSnapPoints.ts +73 -0
  357. package/src/Carousel/Carousel.tsx +135 -0
  358. package/src/Carousel/CarouselProps.ts +42 -53
  359. package/src/Carousel/animation/animationUtils.ts +1 -0
  360. package/src/Carousel/animation/createDefaultItemStyle.ts +3 -0
  361. package/src/Carousel/animation/createDefaultScrollAnimation.ts +14 -0
  362. package/src/Carousel/animation/index.ts +4 -0
  363. package/src/Carousel/animation/normalItemStyleFactory.ts +19 -0
  364. package/src/Carousel/animation/parallaxItemStyleFactory.ts +79 -0
  365. package/src/Carousel/components/InternalContext.ts +33 -0
  366. package/src/Carousel/components/ItemView.tsx +66 -0
  367. package/src/Carousel/components/RootView.tsx +79 -0
  368. package/src/Carousel/components/ScrollViewGesture.tsx +93 -0
  369. package/src/Carousel/components/index.ts +4 -0
  370. package/src/Carousel/components/useItemInterpolation.ts +107 -0
  371. package/src/Carousel/hooks/index.ts +5 -0
  372. package/src/Carousel/hooks/useAutoplayController.ts +57 -0
  373. package/src/Carousel/hooks/useIndexController.tsx +57 -0
  374. package/src/Carousel/hooks/useItemVisibilityStore.ts +107 -0
  375. package/src/Carousel/hooks/useLoopedData.ts +26 -0
  376. package/src/Carousel/hooks/usePagingAnimator.ts +255 -0
  377. package/src/Carousel/index.ts +4 -2
  378. package/src/Carousel/tick.ts +6 -0
  379. package/src/Carousel/types.ts +114 -0
  380. package/src/ComicViewer/ComicViewer.tsx +268 -106
  381. package/src/ComicViewer/ComicViewerProps.ts +66 -44
  382. package/src/ComicViewer/EncodedTile.ts +3 -0
  383. package/src/ComicViewer/FastScroll.tsx +176 -0
  384. package/src/ComicViewer/FastScrollProps.ts +88 -0
  385. package/src/ComicViewer/ReloadButton.tsx +36 -0
  386. package/src/ComicViewer/ViewerItem.tsx +104 -62
  387. package/src/ComicViewer/index.ts +8 -2
  388. package/src/ComicViewer/util.ts +15 -0
  389. package/src/DateTimePicker/DateTimePicker.tsx +9 -1
  390. package/src/FlipCard/FlipCard.tsx +2 -2
  391. package/src/ViewPager/FluxContext.ts +8 -0
  392. package/src/ViewPager/InternalContext.ts +13 -0
  393. package/src/ViewPager/PageStateContext.ts +11 -0
  394. package/src/ViewPager/ViewPager.native.tsx +152 -0
  395. package/src/ViewPager/ViewPager.tsx +69 -0
  396. package/src/ViewPager/ViewPagerProps.ts +25 -34
  397. package/src/ViewPager/components/ChildrenMemoizedPage.tsx +124 -0
  398. package/src/ViewPager/components/FluxStoreProvider.tsx +27 -0
  399. package/src/ViewPager/components/index.ts +2 -0
  400. package/src/ViewPager/hooks/index.ts +7 -0
  401. package/src/ViewPager/hooks/useDispatch.ts +11 -0
  402. package/src/ViewPager/hooks/useEagerState.ts +14 -0
  403. package/src/ViewPager/hooks/useForceRender.ts +7 -0
  404. package/src/ViewPager/hooks/useLazyState.ts +32 -0
  405. package/src/ViewPager/hooks/usePageStore.ts +30 -0
  406. package/src/ViewPager/hooks/useStore.ts +15 -0
  407. package/src/ViewPager/hooks/useViewPagerPageState.ts +6 -0
  408. package/src/ViewPager/index.ts +11 -2
  409. package/src/ViewPager/types.ts +15 -0
  410. package/src/ViewPager/utils.tsx +9 -56
  411. package/src/ViewabilityTrackerView/Viewability.ts +3 -0
  412. package/src/ViewabilityTrackerView/ViewabilityTrackerView.tsx +33 -0
  413. package/src/ViewabilityTrackerView/ViewabilityTrackerViewProps.ts +25 -0
  414. package/src/ViewabilityTrackerView/index.ts +2 -0
  415. package/src/ViewabilityTrackerView/measureViewability.ts +54 -0
  416. package/src/ViewabilityTrackerView/useViewabilityTracker.ts +85 -0
  417. package/src/hooks/index.ts +2 -0
  418. package/src/hooks/useDeferredExecutor.ts +46 -0
  419. package/src/hooks/useHeight.ts +3 -4
  420. package/src/hooks/useIsMounted.ts +19 -0
  421. package/src/hooks/useUnstableCollapsibleAppBar.ts +38 -23
  422. package/src/hooks/useUnstableToggleDisplayStyle.ts +2 -1
  423. package/src/index.ts +3 -0
  424. package/build/commonjs/Carousel/CarouselNative.js +0 -72
  425. package/build/commonjs/Carousel/CarouselNative.js.map +0 -1
  426. package/build/commonjs/Carousel/CarouselWeb.js +0 -237
  427. package/build/commonjs/Carousel/CarouselWeb.js.map +0 -1
  428. package/build/commonjs/Carousel/index.native.js.map +0 -1
  429. package/build/commonjs/Carousel/utils.js +0 -19
  430. package/build/commonjs/Carousel/utils.js.map +0 -1
  431. package/build/commonjs/ComicViewer/ComicViewerItemProps.js.map +0 -1
  432. package/build/commonjs/ViewPager/ChildrenMemoizedPage.js +0 -49
  433. package/build/commonjs/ViewPager/ChildrenMemoizedPage.js.map +0 -1
  434. package/build/commonjs/ViewPager/ViewPagerNative.js +0 -72
  435. package/build/commonjs/ViewPager/ViewPagerNative.js.map +0 -1
  436. package/build/commonjs/ViewPager/ViewPagerWeb.js +0 -55
  437. package/build/commonjs/ViewPager/ViewPagerWeb.js.map +0 -1
  438. package/build/commonjs/ViewPager/index.native.js +0 -16
  439. package/build/commonjs/ViewPager/index.native.js.map +0 -1
  440. package/build/commonjs/hooks/useWidth.js +0 -29
  441. package/build/commonjs/hooks/useWidth.js.map +0 -1
  442. package/build/module/Carousel/CarouselNative.js +0 -54
  443. package/build/module/Carousel/CarouselNative.js.map +0 -1
  444. package/build/module/Carousel/CarouselWeb.js +0 -215
  445. package/build/module/Carousel/CarouselWeb.js.map +0 -1
  446. package/build/module/Carousel/index.native.js +0 -2
  447. package/build/module/Carousel/index.native.js.map +0 -1
  448. package/build/module/Carousel/utils.js +0 -7
  449. package/build/module/Carousel/utils.js.map +0 -1
  450. package/build/module/ComicViewer/ComicViewerItemProps.js +0 -2
  451. package/build/module/ComicViewer/ComicViewerItemProps.js.map +0 -1
  452. package/build/module/ViewPager/ChildrenMemoizedPage.js +0 -37
  453. package/build/module/ViewPager/ChildrenMemoizedPage.js.map +0 -1
  454. package/build/module/ViewPager/ViewPagerNative.js +0 -53
  455. package/build/module/ViewPager/ViewPagerNative.js.map +0 -1
  456. package/build/module/ViewPager/ViewPagerWeb.js +0 -41
  457. package/build/module/ViewPager/ViewPagerWeb.js.map +0 -1
  458. package/build/module/ViewPager/index.native.js +0 -2
  459. package/build/module/ViewPager/index.native.js.map +0 -1
  460. package/build/module/hooks/useWidth.js +0 -15
  461. package/build/module/hooks/useWidth.js.map +0 -1
  462. package/build/typescript/Carousel/CarouselNative.d.ts +0 -2
  463. package/build/typescript/Carousel/CarouselWeb.d.ts +0 -4
  464. package/build/typescript/Carousel/index.native.d.ts +0 -1
  465. package/build/typescript/Carousel/utils.d.ts +0 -6
  466. package/build/typescript/ComicViewer/ComicViewerItemProps.d.ts +0 -12
  467. package/build/typescript/ViewPager/ChildrenMemoizedPage.d.ts +0 -4
  468. package/build/typescript/ViewPager/ViewPagerNative.d.ts +0 -2
  469. package/build/typescript/ViewPager/ViewPagerWeb.d.ts +0 -2
  470. package/build/typescript/ViewPager/index.native.d.ts +0 -1
  471. package/build/typescript/hooks/useWidth.d.ts +0 -2
  472. package/src/Carousel/CarouselNative.tsx +0 -67
  473. package/src/Carousel/CarouselWeb.tsx +0 -222
  474. package/src/Carousel/index.native.ts +0 -1
  475. package/src/Carousel/utils.ts +0 -11
  476. package/src/ComicViewer/ComicViewerItemProps.ts +0 -15
  477. package/src/ViewPager/ChildrenMemoizedPage.tsx +0 -36
  478. package/src/ViewPager/ViewPagerNative.tsx +0 -66
  479. package/src/ViewPager/ViewPagerWeb.tsx +0 -52
  480. package/src/ViewPager/index.native.ts +0 -1
  481. package/src/hooks/useWidth.ts +0 -17
@@ -1,41 +1,21 @@
1
- import React from 'react';
2
- import type { ViewProps } from 'react-native';
3
- import type { ComponentProps } from '@fountain-ui/core';
4
-
5
- export type KeyboardDismissMode = 'none' | 'on-drag';
6
-
7
- export type PageProps = React.PropsWithChildren<ViewProps> & {
8
- isNeighbor: boolean;
9
- isVisible: boolean;
10
- rerenderKey?: any;
11
- };
12
-
13
- export type PageComponent = React.ComponentType<PageProps>;
14
-
15
- export type Loading = 'lazy' | 'eager';
1
+ import type { ReactNode, Ref } from 'react';
2
+ import type { PageScrollStateChangedNativeEvent } from 'react-native-pager-view';
3
+ import type { ComponentProps, SyncAnimatedValue } from '@fountain-ui/core';
4
+ import type { KeyboardDismissMode, Loading, ViewPagerInstance } from './types';
16
5
 
17
6
  export default interface ViewPagerProps extends ComponentProps<{
18
- /**
19
- * Collection of ViewPager components.
20
- */
21
- children?: React.ReactNode;
7
+ ref?: Ref<ViewPagerInstance>;
22
8
 
23
9
  /**
24
- * If `true`, enable page visible hint.
25
- * @default false
26
- */
27
- enableVisibleHint?: boolean;
28
-
29
- /**
30
- * If `true`, Based on the current index, the pages on the left and right are also rerender.
31
- * @default false
10
+ * Collection of ViewPager components.
32
11
  */
33
- enableNeighborPageRerender?: boolean;
12
+ children?: ReactNode;
34
13
 
35
14
  /**
36
- * A number representing the index of the active page.
15
+ * Index of initial page that should be selected.
16
+ * @default 0
37
17
  */
38
- index: number,
18
+ initialPage?: number;
39
19
 
40
20
  /**
41
21
  * Whether to load the page immediately (`eager`) or on an as-needed basis (`lazy`).
@@ -43,16 +23,22 @@ export default interface ViewPagerProps extends ComponentProps<{
43
23
  */
44
24
  loading?: Loading;
45
25
 
26
+ /**
27
+ * Mobile only. The number of pages that should be re-rendered to either side of the current page.
28
+ * Changing this value after the component mount has no effect.
29
+ * @default 0
30
+ */
31
+ offscreenPageRerenderLimit?: number;
32
+
46
33
  /**
47
34
  * Callback fired when an index is changed.
48
35
  */
49
- onChange?: (newIndex: number) => void,
36
+ onChange?: (newIndex: number) => void;
50
37
 
51
38
  /**
52
- * The component used to render the wrapper of the page.
53
- * @default 'ChildrenMemoizedPage'
39
+ * Native only. This handler processes events that occur when the pager is scrolled horizontally.
54
40
  */
55
- pageComponent?: PageComponent,
41
+ onPageScrollStateChanged?: (event: PageScrollStateChangedNativeEvent) => void;
56
42
 
57
43
  /**
58
44
  * When this value is changed, page will be rerender.
@@ -70,4 +56,9 @@ export default interface ViewPagerProps extends ComponentProps<{
70
56
  * @default 'on-drag'
71
57
  */
72
58
  keyboardDismissMode?: KeyboardDismissMode;
59
+
60
+ /**
61
+ * Unstable API.
62
+ */
63
+ UNSTABLE_sharedPage?: SyncAnimatedValue;
73
64
  }> {}
@@ -0,0 +1,124 @@
1
+ import type { PropsWithChildren } from 'react';
2
+ import React, { memo, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';
3
+ import type { ViewProps } from 'react-native';
4
+ import { Platform, View } from 'react-native';
5
+ import { StyleSheet } from '@fountain-ui/core';
6
+ import type { Loading } from '../types';
7
+ import { useForceRender } from '../hooks';
8
+ import PageStateContext from '../PageStateContext';
9
+ import InternalContext from '../InternalContext';
10
+
11
+ const styles = StyleSheet.create({
12
+ fill: { width: '100%', height: '100%' },
13
+ none: { display: 'none' },
14
+ });
15
+
16
+ export type PageProps = PropsWithChildren<ViewProps> & {
17
+ index: number;
18
+ initialPage: number;
19
+ loading: Loading;
20
+ offscreenPageRerenderLimit: number;
21
+ rerenderKey?: any;
22
+ };
23
+
24
+ interface InternalPageDescription {
25
+ isActive: boolean;
26
+ becomeNeighbor: boolean;
27
+ }
28
+
29
+ interface InternalPageState {
30
+ active: boolean;
31
+ loaded: boolean;
32
+ }
33
+
34
+ function Page(props: PageProps) {
35
+ const {
36
+ index,
37
+ initialPage,
38
+ children,
39
+ loading,
40
+ offscreenPageRerenderLimit,
41
+ } = props;
42
+
43
+ const { pageStore } = useContext(InternalContext);
44
+
45
+ const computePageDescription: (page: number) => InternalPageDescription = useCallback((page: number) => {
46
+ const activeIndex = page;
47
+
48
+ const isActive = index === activeIndex;
49
+
50
+ const shouldRerender = index >= activeIndex - offscreenPageRerenderLimit
51
+ && index <= activeIndex + offscreenPageRerenderLimit;
52
+
53
+ const becomeNeighbor = shouldRerender && !isActive;
54
+
55
+ return { isActive, becomeNeighbor };
56
+ }, [index]);
57
+
58
+ const [initialState] = useState<InternalPageState>(() => {
59
+ const { isActive, becomeNeighbor } = computePageDescription(initialPage);
60
+
61
+ if (loading === 'eager') {
62
+ return { active: isActive, loaded: true };
63
+ }
64
+
65
+ return { active: isActive, loaded: isActive || becomeNeighbor };
66
+ });
67
+
68
+ // `Bailing out of a state update` is not working as expected.
69
+ const pageStateRef = useRef<InternalPageState>(initialState);
70
+ const forceRender = useForceRender();
71
+
72
+ const { active, loaded } = pageStateRef.current;
73
+
74
+ const content = loaded ? children : null;
75
+
76
+ useEffect(() => {
77
+ return pageStore.subscribe(newPage => {
78
+ const { isActive, becomeNeighbor } = computePageDescription(newPage);
79
+
80
+ const currentState = pageStateRef.current;
81
+
82
+ const newState: InternalPageState = {
83
+ active: isActive,
84
+ loaded: isActive || becomeNeighbor ? true : currentState.loaded,
85
+ };
86
+
87
+ if (
88
+ currentState.active !== newState.active
89
+ || currentState.loaded !== newState.loaded
90
+ ) {
91
+ pageStateRef.current = newState;
92
+
93
+ forceRender();
94
+ }
95
+ });
96
+ }, [pageStore, computePageDescription]);
97
+
98
+ const contextValue = useMemo(() => ({
99
+ isActive: active,
100
+ }), [active]);
101
+
102
+ const style = Platform.OS === 'web'
103
+ ? (active ? StyleSheet.absoluteFill : styles.none)
104
+ : styles.fill;
105
+
106
+ return (
107
+ <View
108
+ collapsable={false}
109
+ style={style}
110
+ >
111
+ <PageStateContext.Provider value={contextValue}>
112
+ {content}
113
+ </PageStateContext.Provider>
114
+ </View>
115
+ );
116
+ }
117
+
118
+ export default memo(Page, (prevProps, nextProps) => {
119
+ if (prevProps.rerenderKey !== nextProps.rerenderKey) {
120
+ return false;
121
+ }
122
+
123
+ return prevProps.index === nextProps.index;
124
+ });
@@ -0,0 +1,27 @@
1
+ import React, { useEffect, useRef } from 'react';
2
+ import { SimpleStore } from '@fountain-ui/core';
3
+ import type { FluxStore } from '../FluxContext';
4
+ import FluxContext from '../FluxContext';
5
+
6
+ export interface FluxStoreProviderProps<State> {
7
+ children: React.ReactElement;
8
+ initialState: State;
9
+ }
10
+
11
+ export default function FluxStoreProvider<State>(props: FluxStoreProviderProps<State>) {
12
+ const { children, initialState } = props;
13
+
14
+ const store = useRef<FluxStore<State>>(new SimpleStore(initialState)).current;
15
+
16
+ useEffect(() => {
17
+ return () => {
18
+ store.removeAllListeners();
19
+ };
20
+ }, [store]);
21
+
22
+ return (
23
+ <FluxContext.Provider value={store}>
24
+ {children}
25
+ </FluxContext.Provider>
26
+ );
27
+ };
@@ -0,0 +1,2 @@
1
+ export { default as ChildrenMemoizedPage } from './ChildrenMemoizedPage';
2
+ export { default as FluxStoreProvider } from './FluxStoreProvider';
@@ -0,0 +1,7 @@
1
+ export { default as useDispatch } from './useDispatch';
2
+ export { default as useEagerState } from './useEagerState';
3
+ export { default as useForceRender } from './useForceRender';
4
+ export { default as useLazyState } from './useLazyState';
5
+ export { default as usePageStore } from './usePageStore';
6
+ export { default as useStore } from './useStore';
7
+ export { default as useViewPagerPageState } from './useViewPagerPageState';
@@ -0,0 +1,11 @@
1
+ import { useCallback } from 'react';
2
+ import type { DispatchAction } from '@fountain-ui/core';
3
+ import useStore from './useStore';
4
+
5
+ export default function useDispatch<State>() {
6
+ const store = useStore<State>();
7
+
8
+ return useCallback((action: DispatchAction<State>) => {
9
+ store.dispatch(action);
10
+ }, [store]);
11
+ };
@@ -0,0 +1,14 @@
1
+ import { useEffect, useState } from 'react';
2
+ import useStore from './useStore';
3
+
4
+ export default function useEagerState<State>(): State {
5
+ const store = useStore<State>();
6
+
7
+ const [state, setState] = useState<State>(() => store.getState());
8
+
9
+ useEffect(() => {
10
+ return store.subscribe(setState);
11
+ }, [store]);
12
+
13
+ return state;
14
+ };
@@ -0,0 +1,7 @@
1
+ import { useReducer } from 'react';
2
+
3
+ export default function useForceRender() {
4
+ const [, forceRender] = useReducer((s) => s + 1, 0);
5
+
6
+ return forceRender;
7
+ };
@@ -0,0 +1,32 @@
1
+ import { useEffect, useRef } from 'react';
2
+ import type { EqualityFunction } from '../types';
3
+ import { refEqual } from '../utils';
4
+ import useForceRender from './useForceRender';
5
+ import useViewPagerPageState from './useViewPagerPageState';
6
+ import useStore from './useStore';
7
+
8
+ export default function useLazyState<State>(equalityFn: EqualityFunction<State> = refEqual): State {
9
+ const store = useStore<State>();
10
+
11
+ const stateRef = useRef<State>(store.getState());
12
+
13
+ const forceRender = useForceRender();
14
+
15
+ const { isActive } = useViewPagerPageState();
16
+
17
+ useEffect(() => {
18
+ return store.subscribe(newState => {
19
+ if (equalityFn(stateRef.current, newState)) {
20
+ return;
21
+ }
22
+
23
+ stateRef.current = newState;
24
+
25
+ if (isActive) {
26
+ forceRender();
27
+ }
28
+ });
29
+ }, [store, isActive]);
30
+
31
+ return stateRef.current;
32
+ };
@@ -0,0 +1,30 @@
1
+ import { useEffect, useRef } from 'react';
2
+ import type { MonoStore, SyncAnimatedValue } from '@fountain-ui/core';
3
+ import { SimpleStore } from '@fountain-ui/core';
4
+
5
+ export default function usePageStore(value: SyncAnimatedValue): MonoStore<number> {
6
+ const {
7
+ animatedValue,
8
+ initialValue,
9
+ } = value;
10
+
11
+ const store = useRef(new SimpleStore(initialValue)).current;
12
+
13
+ useEffect(() => {
14
+ const id = animatedValue.addListener((newPage) => {
15
+ store.dispatch(newPage.value);
16
+ });
17
+
18
+ return () => {
19
+ animatedValue.removeListener(id);
20
+ };
21
+ }, [animatedValue]);
22
+
23
+ useEffect(() => {
24
+ return () => {
25
+ store.removeAllListeners();
26
+ };
27
+ }, [store]);
28
+
29
+ return store;
30
+ };
@@ -0,0 +1,15 @@
1
+ import { useContext } from 'react';
2
+ import type { FluxStore } from '../FluxContext';
3
+ import FluxContext from '../FluxContext';
4
+
5
+ export default function useStore<State>(): FluxStore<State> {
6
+ // @ts-ignore
7
+ const store = useContext<FluxStore<State>>(FluxContext);
8
+ if (store == null) {
9
+ throw new Error(
10
+ 'You should wrap your parent component with `FluxStoreProvider`',
11
+ );
12
+ }
13
+
14
+ return store;
15
+ };
@@ -0,0 +1,6 @@
1
+ import { useContext } from 'react';
2
+ import PageStateContext from '../PageStateContext';
3
+
4
+ export default function useViewPagerPageState() {
5
+ return useContext(PageStateContext);
6
+ };
@@ -1,2 +1,11 @@
1
- export { default } from './ViewPagerWeb';
2
- export type { default as ViewPagerProps } from './ViewPagerProps';
1
+ export { default } from './ViewPager';
2
+ export type { default as ViewPagerProps } from './ViewPagerProps';
3
+ export type { ViewPagerInstance } from './types';
4
+ export {
5
+ useDispatch as useFluxDispatch,
6
+ useEagerState,
7
+ useStore as useFluxStore,
8
+ useLazyState,
9
+ useViewPagerPageState,
10
+ } from './hooks';
11
+ export { FluxStoreProvider } from './components';
@@ -0,0 +1,15 @@
1
+ export type KeyboardDismissMode = 'none' | 'on-drag';
2
+
3
+ export type Loading = 'lazy' | 'eager';
4
+
5
+ export interface EqualityFunction<State> {
6
+ (a: State, b: State): boolean;
7
+ }
8
+
9
+ export interface ViewPagerInstance {
10
+ /**
11
+ * Function to scroll to a specific page in the ViewPager. Invalid index is ignored.
12
+ * @param index
13
+ */
14
+ setPage: (index: number) => void;
15
+ }
@@ -1,62 +1,15 @@
1
- import React from 'react';
2
- import ViewPagerProps, { Loading, PageComponent } from './ViewPagerProps';
3
- import ChildrenMemoizedPage from './ChildrenMemoizedPage';
1
+ import type { EqualityFunction, Loading } from './types';
4
2
 
5
- export interface PageState {
6
- visited?: boolean;
7
- }
8
-
9
- export interface PageRenderOption {
10
- enableVisibleHint: boolean;
11
- enableNeighborPageRerender: boolean;
12
- index: number;
13
- loading: Loading;
14
- pageComponent: PageComponent;
15
- pageForceRerenderKey?: any;
16
- }
17
-
18
- export interface PageRenderer {
19
- (children: ViewPagerProps['children']): React.ReactNode;
20
- }
21
-
22
- export const defaultEnableVisibleHint: boolean = false;
23
-
24
- export const defaultEnableNeighborPageRerender: boolean = false;
3
+ export const defaultInitialPage: number = 0;
25
4
 
26
5
  export const defaultLoading: Loading = 'lazy';
27
6
 
28
- export const defaultPageComponent: PageComponent = ChildrenMemoizedPage;
29
-
30
- export const usePageRenderer = ({
31
- enableVisibleHint,
32
- index: currentIndex,
33
- loading,
34
- pageComponent: PageComponent,
35
- pageForceRerenderKey,
36
- enableNeighborPageRerender,
37
- }: PageRenderOption): PageRenderer => {
38
- const pagesStateRef = React.useRef<Array<PageState>>([]);
39
-
40
- pagesStateRef.current[currentIndex] = {
41
- ...pagesStateRef.current[currentIndex],
42
- visited: true,
43
- };
7
+ export const defaultOffscreenPageRerenderLimit: number = 0;
44
8
 
45
- return (children => React.Children.map(children, (child, index) => {
46
- const visited = pagesStateRef.current[index]?.visited ?? false;
47
- const content = (loading === 'eager' || visited) ? child : null;
9
+ export const refEqual: EqualityFunction<any> = (a: any, b: any) => a === b;
48
10
 
49
- const isVisible = enableVisibleHint ? (index === currentIndex) : false;
50
- const isNeighborIndex = index === currentIndex - 1 || index === currentIndex + 1;
51
-
52
- return (
53
- <PageComponent
54
- key={index}
55
- children={content}
56
- isNeighbor={enableNeighborPageRerender && isNeighborIndex}
57
- isVisible={isVisible}
58
- rerenderKey={pageForceRerenderKey}
59
- />
60
- );
61
- }));
62
- };
11
+ export function isValidPage(maybePage: number, numberOfPages: number) {
12
+ return Number.isInteger(maybePage)
13
+ && maybePage >= 0
14
+ && maybePage < numberOfPages;
15
+ }
@@ -0,0 +1,3 @@
1
+ export default interface Viewability {
2
+ visible: boolean;
3
+ }
@@ -0,0 +1,33 @@
1
+ import React, { useRef } from 'react';
2
+ import { View } from 'react-native';
3
+ import useViewabilityTracker from './useViewabilityTracker';
4
+ import type ViewabilityTrackerViewProps from './ViewabilityTrackerViewProps';
5
+
6
+
7
+ export default function ViewabilityTrackerView(props: ViewabilityTrackerViewProps) {
8
+ const {
9
+ enabled = true,
10
+ measurementIntervalMillis = 1000,
11
+ onViewabilityChange,
12
+ visiblePercentThreshold = 50,
13
+ ...otherProps
14
+ } = props;
15
+
16
+ const viewRef = useRef<View>(null);
17
+
18
+ useViewabilityTracker({
19
+ enabled,
20
+ measurementIntervalMillis,
21
+ onViewabilityChange,
22
+ viewRef,
23
+ visiblePercentThreshold,
24
+ });
25
+
26
+ return (
27
+ <View
28
+ {...otherProps}
29
+ ref={viewRef}
30
+ collapsable={false}
31
+ />
32
+ );
33
+ };
@@ -0,0 +1,25 @@
1
+ import type { ViewProps } from 'react-native';
2
+ import type { OverridableComponentProps } from '@fountain-ui/core';
3
+ import type Viewability from './Viewability';
4
+
5
+ export default interface ViewabilityTrackerViewProps extends OverridableComponentProps<ViewProps, {
6
+ /**
7
+ * @default true
8
+ */
9
+ enabled?: boolean;
10
+
11
+ /**
12
+ * @default 1000
13
+ */
14
+ measurementIntervalMillis?: number;
15
+
16
+ /**
17
+ *
18
+ */
19
+ onViewabilityChange?: (viewability: Viewability) => void;
20
+
21
+ /**
22
+ * @default 50
23
+ */
24
+ visiblePercentThreshold?: number;
25
+ }> {}
@@ -0,0 +1,2 @@
1
+ export { default } from './ViewabilityTrackerView';
2
+ export type { default as ViewabilityTrackerViewProps } from './ViewabilityTrackerViewProps';
@@ -0,0 +1,54 @@
1
+ import type { View } from 'react-native';
2
+ import { clamp } from '@fountain-ui/utils';
3
+
4
+ interface Rect {
5
+ top: number,
6
+ bottom: number;
7
+ left: number;
8
+ right: number;
9
+ }
10
+
11
+ export interface ViewabilityDetail {
12
+ visiblePercent: number;
13
+ }
14
+
15
+ export interface MeasureViewabilityParameters {
16
+ view: View;
17
+ windowWidth: number;
18
+ windowHeight: number;
19
+ onViewabilityDetailMeasured: (detail: ViewabilityDetail) => void;
20
+ }
21
+
22
+ const computeRectSize = (rect: Rect): number =>
23
+ (rect.bottom - rect.top) * (rect.right - rect.left);
24
+
25
+ const normalizePagePosition = (value?: number): number =>
26
+ (value != null && Number.isFinite(value)) ? value : Number.MAX_SAFE_INTEGER;
27
+
28
+ const normalizeViewSize = (size: number): number =>
29
+ Number.isFinite(size) && size > 0 ? size : Number.MAX_SAFE_INTEGER;
30
+
31
+ export default function measureViewability({
32
+ view,
33
+ windowWidth,
34
+ windowHeight,
35
+ onViewabilityDetailMeasured,
36
+ }: MeasureViewabilityParameters) {
37
+ view.measure((x, y, width, height, pageX?: number, pageY?: number) => {
38
+ const safePageX = normalizePagePosition(pageX);
39
+ const safePageY = normalizePagePosition(pageY);
40
+
41
+ const visibleRect: Rect = {
42
+ top: clamp(safePageY, 0, windowHeight),
43
+ bottom: clamp(safePageY + height, 0, windowHeight),
44
+ left: clamp(safePageX, 0, windowWidth),
45
+ right: clamp(safePageX + width, 0, windowWidth),
46
+ };
47
+
48
+ const visibleRectSize = computeRectSize(visibleRect);
49
+ const viewSize = normalizeViewSize(width * height);
50
+ const visiblePercent = Math.round(visibleRectSize / viewSize * 100);
51
+
52
+ onViewabilityDetailMeasured?.({ visiblePercent });
53
+ });
54
+ };