@fountain-ui/lab 2.0.0-beta.11 → 2.0.0-beta.14

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 (289) hide show
  1. package/build/commonjs/Carousel/Carousel.js +142 -0
  2. package/build/commonjs/Carousel/Carousel.js.map +1 -0
  3. package/build/commonjs/Carousel/CarouselProps.js.map +1 -1
  4. package/build/commonjs/Carousel/animation/animationUtils.js +9 -0
  5. package/build/commonjs/Carousel/animation/animationUtils.js.map +1 -0
  6. package/build/commonjs/Carousel/animation/createDefaultItemStyle.js +15 -0
  7. package/build/commonjs/Carousel/animation/createDefaultItemStyle.js.map +1 -0
  8. package/build/commonjs/Carousel/animation/createDefaultScrollAnimation.js +20 -0
  9. package/build/commonjs/Carousel/animation/createDefaultScrollAnimation.js.map +1 -0
  10. package/build/commonjs/Carousel/animation/index.js +40 -0
  11. package/build/commonjs/Carousel/animation/index.js.map +1 -0
  12. package/build/commonjs/Carousel/animation/normalItemStyleFactory.js +27 -0
  13. package/build/commonjs/Carousel/animation/normalItemStyleFactory.js.map +1 -0
  14. package/build/commonjs/Carousel/animation/parallaxItemStyleFactory.js +65 -0
  15. package/build/commonjs/Carousel/animation/parallaxItemStyleFactory.js.map +1 -0
  16. package/build/commonjs/Carousel/components/InternalContext.js +29 -0
  17. package/build/commonjs/Carousel/components/InternalContext.js.map +1 -0
  18. package/build/commonjs/Carousel/components/ItemView.js +66 -0
  19. package/build/commonjs/Carousel/components/ItemView.js.map +1 -0
  20. package/build/commonjs/Carousel/components/RootView.js +86 -0
  21. package/build/commonjs/Carousel/components/RootView.js.map +1 -0
  22. package/build/commonjs/Carousel/components/ScrollViewGesture.js +81 -0
  23. package/build/commonjs/Carousel/components/ScrollViewGesture.js.map +1 -0
  24. package/build/commonjs/Carousel/components/index.js +40 -0
  25. package/build/commonjs/Carousel/components/index.js.map +1 -0
  26. package/build/commonjs/Carousel/hooks/index.js +64 -0
  27. package/build/commonjs/Carousel/hooks/index.js.map +1 -0
  28. package/build/commonjs/Carousel/hooks/useAutoplayController.js +58 -0
  29. package/build/commonjs/Carousel/hooks/useAutoplayController.js.map +1 -0
  30. package/build/commonjs/Carousel/hooks/useDimensionChangeReaction.js +23 -0
  31. package/build/commonjs/Carousel/hooks/useDimensionChangeReaction.js.map +1 -0
  32. package/build/commonjs/Carousel/hooks/useIndexController.js +70 -0
  33. package/build/commonjs/Carousel/hooks/useIndexController.js.map +1 -0
  34. package/build/commonjs/Carousel/hooks/useItemInterpolation.js +63 -0
  35. package/build/commonjs/Carousel/hooks/useItemInterpolation.js.map +1 -0
  36. package/build/commonjs/Carousel/hooks/useItemVisibilityStore.js +95 -0
  37. package/build/commonjs/Carousel/hooks/useItemVisibilityStore.js.map +1 -0
  38. package/build/commonjs/Carousel/hooks/useLoopedData.js +33 -0
  39. package/build/commonjs/Carousel/hooks/useLoopedData.js.map +1 -0
  40. package/build/commonjs/Carousel/hooks/usePagingAnimation.js +162 -0
  41. package/build/commonjs/Carousel/hooks/usePagingAnimation.js.map +1 -0
  42. package/build/commonjs/Carousel/index.js +16 -2
  43. package/build/commonjs/Carousel/index.js.map +1 -1
  44. package/build/commonjs/Carousel/types.js +7 -0
  45. package/build/commonjs/Carousel/types.js.map +1 -0
  46. package/build/commonjs/ViewPager/ChildrenMemoizedPage.js +53 -59
  47. package/build/commonjs/ViewPager/ChildrenMemoizedPage.js.map +1 -1
  48. package/build/commonjs/ViewPager/InternalContext.js +17 -0
  49. package/build/commonjs/ViewPager/InternalContext.js.map +1 -0
  50. package/build/commonjs/ViewPager/PageStateContext.js +22 -0
  51. package/build/commonjs/ViewPager/PageStateContext.js.map +1 -0
  52. package/build/commonjs/ViewPager/ViewPagerNative.js +90 -25
  53. package/build/commonjs/ViewPager/ViewPagerNative.js.map +1 -1
  54. package/build/commonjs/ViewPager/ViewPagerProps.js.map +1 -1
  55. package/build/commonjs/ViewPager/ViewPagerWeb.js +27 -14
  56. package/build/commonjs/ViewPager/ViewPagerWeb.js.map +1 -1
  57. package/build/commonjs/ViewPager/index.js +8 -0
  58. package/build/commonjs/ViewPager/index.js.map +1 -1
  59. package/build/commonjs/ViewPager/index.native.js +8 -0
  60. package/build/commonjs/ViewPager/index.native.js.map +1 -1
  61. package/build/commonjs/ViewPager/types.js +6 -0
  62. package/build/commonjs/ViewPager/types.js.map +1 -0
  63. package/build/commonjs/ViewPager/usePageStore.js +30 -0
  64. package/build/commonjs/ViewPager/usePageStore.js.map +1 -0
  65. package/build/commonjs/ViewPager/utils.js +3 -1
  66. package/build/commonjs/ViewPager/utils.js.map +1 -1
  67. package/build/commonjs/ViewabilityTrackerView/Viewability.js +2 -0
  68. package/build/commonjs/ViewabilityTrackerView/Viewability.js.map +1 -0
  69. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerView.js +45 -0
  70. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerView.js.map +1 -0
  71. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerViewProps.js +2 -0
  72. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerViewProps.js.map +1 -0
  73. package/build/commonjs/{Carousel/index.native.js → ViewabilityTrackerView/index.js} +3 -3
  74. package/build/commonjs/ViewabilityTrackerView/index.js.map +1 -0
  75. package/build/commonjs/ViewabilityTrackerView/measureViewability.js +42 -0
  76. package/build/commonjs/ViewabilityTrackerView/measureViewability.js.map +1 -0
  77. package/build/commonjs/ViewabilityTrackerView/useViewabilityTracker.js +88 -0
  78. package/build/commonjs/ViewabilityTrackerView/useViewabilityTracker.js.map +1 -0
  79. package/build/commonjs/hooks/index.js +16 -0
  80. package/build/commonjs/hooks/index.js.map +1 -1
  81. package/build/commonjs/hooks/useDeferredExecutor.js +45 -0
  82. package/build/commonjs/hooks/useDeferredExecutor.js.map +1 -0
  83. package/build/commonjs/hooks/useIsMounted.js +22 -0
  84. package/build/commonjs/hooks/useIsMounted.js.map +1 -0
  85. package/build/commonjs/hooks/useUnstableCollapsibleAppBar.js +1 -1
  86. package/build/commonjs/hooks/useUnstableCollapsibleAppBar.js.map +1 -1
  87. package/build/commonjs/index.js +22 -1
  88. package/build/commonjs/index.js.map +1 -1
  89. package/build/module/Carousel/Carousel.js +120 -0
  90. package/build/module/Carousel/Carousel.js.map +1 -0
  91. package/build/module/Carousel/CarouselProps.js.map +1 -1
  92. package/build/module/Carousel/animation/animationUtils.js +2 -0
  93. package/build/module/Carousel/animation/animationUtils.js.map +1 -0
  94. package/build/module/Carousel/animation/createDefaultItemStyle.js +3 -0
  95. package/build/module/Carousel/animation/createDefaultItemStyle.js.map +1 -0
  96. package/build/module/Carousel/animation/createDefaultScrollAnimation.js +11 -0
  97. package/build/module/Carousel/animation/createDefaultScrollAnimation.js.map +1 -0
  98. package/build/module/Carousel/animation/index.js +5 -0
  99. package/build/module/Carousel/animation/index.js.map +1 -0
  100. package/build/module/Carousel/animation/normalItemStyleFactory.js +18 -0
  101. package/build/module/Carousel/animation/normalItemStyleFactory.js.map +1 -0
  102. package/build/module/Carousel/animation/parallaxItemStyleFactory.js +55 -0
  103. package/build/module/Carousel/animation/parallaxItemStyleFactory.js.map +1 -0
  104. package/build/module/Carousel/components/InternalContext.js +19 -0
  105. package/build/module/Carousel/components/InternalContext.js.map +1 -0
  106. package/build/module/Carousel/components/ItemView.js +46 -0
  107. package/build/module/Carousel/components/ItemView.js.map +1 -0
  108. package/build/module/Carousel/components/RootView.js +65 -0
  109. package/build/module/Carousel/components/RootView.js.map +1 -0
  110. package/build/module/Carousel/components/ScrollViewGesture.js +67 -0
  111. package/build/module/Carousel/components/ScrollViewGesture.js.map +1 -0
  112. package/build/module/Carousel/components/index.js +5 -0
  113. package/build/module/Carousel/components/index.js.map +1 -0
  114. package/build/module/Carousel/hooks/index.js +8 -0
  115. package/build/module/Carousel/hooks/index.js.map +1 -0
  116. package/build/module/Carousel/hooks/useAutoplayController.js +48 -0
  117. package/build/module/Carousel/hooks/useAutoplayController.js.map +1 -0
  118. package/build/module/Carousel/hooks/useDimensionChangeReaction.js +14 -0
  119. package/build/module/Carousel/hooks/useDimensionChangeReaction.js.map +1 -0
  120. package/build/module/Carousel/hooks/useIndexController.js +54 -0
  121. package/build/module/Carousel/hooks/useIndexController.js.map +1 -0
  122. package/build/module/Carousel/hooks/useItemInterpolation.js +51 -0
  123. package/build/module/Carousel/hooks/useItemInterpolation.js.map +1 -0
  124. package/build/module/Carousel/hooks/useItemVisibilityStore.js +87 -0
  125. package/build/module/Carousel/hooks/useItemVisibilityStore.js.map +1 -0
  126. package/build/module/Carousel/hooks/useLoopedData.js +24 -0
  127. package/build/module/Carousel/hooks/useLoopedData.js.map +1 -0
  128. package/build/module/Carousel/hooks/usePagingAnimation.js +153 -0
  129. package/build/module/Carousel/hooks/usePagingAnimation.js.map +1 -0
  130. package/build/module/Carousel/index.js +2 -1
  131. package/build/module/Carousel/index.js.map +1 -1
  132. package/build/module/Carousel/types.js +3 -0
  133. package/build/module/Carousel/types.js.map +1 -0
  134. package/build/module/ViewPager/ChildrenMemoizedPage.js +48 -56
  135. package/build/module/ViewPager/ChildrenMemoizedPage.js.map +1 -1
  136. package/build/module/ViewPager/InternalContext.js +7 -0
  137. package/build/module/ViewPager/InternalContext.js.map +1 -0
  138. package/build/module/ViewPager/PageStateContext.js +10 -0
  139. package/build/module/ViewPager/PageStateContext.js.map +1 -0
  140. package/build/module/ViewPager/ViewPagerNative.js +90 -27
  141. package/build/module/ViewPager/ViewPagerNative.js.map +1 -1
  142. package/build/module/ViewPager/ViewPagerProps.js.map +1 -1
  143. package/build/module/ViewPager/ViewPagerWeb.js +25 -15
  144. package/build/module/ViewPager/ViewPagerWeb.js.map +1 -1
  145. package/build/module/ViewPager/index.js +1 -0
  146. package/build/module/ViewPager/index.js.map +1 -1
  147. package/build/module/ViewPager/index.native.js +1 -0
  148. package/build/module/ViewPager/index.native.js.map +1 -1
  149. package/build/module/ViewPager/types.js +2 -0
  150. package/build/module/ViewPager/types.js.map +1 -0
  151. package/build/module/ViewPager/usePageStore.js +20 -0
  152. package/build/module/ViewPager/usePageStore.js.map +1 -0
  153. package/build/module/ViewPager/utils.js +1 -0
  154. package/build/module/ViewPager/utils.js.map +1 -1
  155. package/build/module/ViewabilityTrackerView/Viewability.js +2 -0
  156. package/build/module/ViewabilityTrackerView/Viewability.js.map +1 -0
  157. package/build/module/ViewabilityTrackerView/ViewabilityTrackerView.js +28 -0
  158. package/build/module/ViewabilityTrackerView/ViewabilityTrackerView.js.map +1 -0
  159. package/build/module/ViewabilityTrackerView/ViewabilityTrackerViewProps.js +2 -0
  160. package/build/module/ViewabilityTrackerView/ViewabilityTrackerViewProps.js.map +1 -0
  161. package/build/module/ViewabilityTrackerView/index.js +2 -0
  162. package/build/module/ViewabilityTrackerView/index.js.map +1 -0
  163. package/build/module/ViewabilityTrackerView/measureViewability.js +34 -0
  164. package/build/module/ViewabilityTrackerView/measureViewability.js.map +1 -0
  165. package/build/module/ViewabilityTrackerView/useViewabilityTracker.js +73 -0
  166. package/build/module/ViewabilityTrackerView/useViewabilityTracker.js.map +1 -0
  167. package/build/module/hooks/index.js +2 -0
  168. package/build/module/hooks/index.js.map +1 -1
  169. package/build/module/hooks/useDeferredExecutor.js +33 -0
  170. package/build/module/hooks/useDeferredExecutor.js.map +1 -0
  171. package/build/module/hooks/useIsMounted.js +13 -0
  172. package/build/module/hooks/useIsMounted.js.map +1 -0
  173. package/build/module/hooks/useUnstableCollapsibleAppBar.js +1 -1
  174. package/build/module/hooks/useUnstableCollapsibleAppBar.js.map +1 -1
  175. package/build/module/index.js +2 -0
  176. package/build/module/index.js.map +1 -1
  177. package/build/typescript/Carousel/Carousel.d.ts +5 -0
  178. package/build/typescript/Carousel/CarouselProps.d.ts +33 -48
  179. package/build/typescript/Carousel/animation/animationUtils.d.ts +1 -0
  180. package/build/typescript/Carousel/animation/createDefaultItemStyle.d.ts +2 -0
  181. package/build/typescript/Carousel/animation/createDefaultScrollAnimation.d.ts +2 -0
  182. package/build/typescript/Carousel/animation/index.d.ts +4 -0
  183. package/build/typescript/Carousel/animation/normalItemStyleFactory.d.ts +2 -0
  184. package/build/typescript/Carousel/animation/parallaxItemStyleFactory.d.ts +9 -0
  185. package/build/typescript/Carousel/components/InternalContext.d.ts +14 -0
  186. package/build/typescript/Carousel/components/ItemView.d.ts +9 -0
  187. package/build/typescript/Carousel/components/RootView.d.ts +16 -0
  188. package/build/typescript/Carousel/components/ScrollViewGesture.d.ts +12 -0
  189. package/build/typescript/Carousel/components/index.d.ts +4 -0
  190. package/build/typescript/Carousel/hooks/index.d.ts +7 -0
  191. package/build/typescript/Carousel/hooks/useAutoplayController.d.ts +7 -0
  192. package/build/typescript/Carousel/hooks/useDimensionChangeReaction.d.ts +7 -0
  193. package/build/typescript/Carousel/hooks/useIndexController.d.ts +10 -0
  194. package/build/typescript/Carousel/hooks/useItemInterpolation.d.ts +2 -0
  195. package/build/typescript/Carousel/hooks/useItemVisibilityStore.d.ts +7 -0
  196. package/build/typescript/Carousel/hooks/useLoopedData.d.ts +1 -0
  197. package/build/typescript/Carousel/hooks/usePagingAnimation.d.ts +18 -0
  198. package/build/typescript/Carousel/index.d.ts +3 -1
  199. package/build/typescript/Carousel/types.d.ts +79 -0
  200. package/build/typescript/ViewPager/ChildrenMemoizedPage.d.ts +1 -1
  201. package/build/typescript/ViewPager/InternalContext.d.ts +7 -0
  202. package/build/typescript/ViewPager/PageStateContext.d.ts +7 -0
  203. package/build/typescript/ViewPager/ViewPagerNative.d.ts +2 -2
  204. package/build/typescript/ViewPager/ViewPagerProps.d.ts +13 -20
  205. package/build/typescript/ViewPager/ViewPagerWeb.d.ts +2 -2
  206. package/build/typescript/ViewPager/index.d.ts +3 -1
  207. package/build/typescript/ViewPager/index.native.d.ts +1 -0
  208. package/build/typescript/ViewPager/types.d.ts +19 -0
  209. package/build/typescript/ViewPager/usePageStore.d.ts +2 -0
  210. package/build/typescript/ViewPager/utils.d.ts +2 -1
  211. package/build/typescript/ViewabilityTrackerView/Viewability.d.ts +3 -0
  212. package/build/typescript/ViewabilityTrackerView/ViewabilityTrackerView.d.ts +2 -0
  213. package/build/typescript/ViewabilityTrackerView/ViewabilityTrackerViewProps.d.ts +22 -0
  214. package/build/typescript/ViewabilityTrackerView/index.d.ts +2 -0
  215. package/build/typescript/ViewabilityTrackerView/measureViewability.d.ts +11 -0
  216. package/build/typescript/ViewabilityTrackerView/useViewabilityTracker.d.ts +11 -0
  217. package/build/typescript/hooks/index.d.ts +2 -0
  218. package/build/typescript/hooks/useDeferredExecutor.d.ts +11 -0
  219. package/build/typescript/hooks/useIsMounted.d.ts +4 -0
  220. package/build/typescript/index.d.ts +2 -0
  221. package/package.json +4 -19
  222. package/src/Carousel/Carousel.tsx +152 -0
  223. package/src/Carousel/CarouselProps.ts +35 -53
  224. package/src/Carousel/animation/animationUtils.ts +1 -0
  225. package/src/Carousel/animation/createDefaultItemStyle.ts +3 -0
  226. package/src/Carousel/animation/createDefaultScrollAnimation.ts +13 -0
  227. package/src/Carousel/animation/index.ts +4 -0
  228. package/src/Carousel/animation/normalItemStyleFactory.ts +19 -0
  229. package/src/Carousel/animation/parallaxItemStyleFactory.ts +79 -0
  230. package/src/Carousel/components/InternalContext.ts +33 -0
  231. package/src/Carousel/components/ItemView.tsx +66 -0
  232. package/src/Carousel/components/RootView.tsx +79 -0
  233. package/src/Carousel/components/ScrollViewGesture.tsx +87 -0
  234. package/src/Carousel/components/index.ts +4 -0
  235. package/src/Carousel/hooks/index.ts +7 -0
  236. package/src/Carousel/hooks/useAutoplayController.ts +57 -0
  237. package/src/Carousel/hooks/useDimensionChangeReaction.ts +25 -0
  238. package/src/Carousel/hooks/useIndexController.tsx +76 -0
  239. package/src/Carousel/hooks/useItemInterpolation.ts +107 -0
  240. package/src/Carousel/hooks/useItemVisibilityStore.ts +107 -0
  241. package/src/Carousel/hooks/useLoopedData.ts +26 -0
  242. package/src/Carousel/hooks/usePagingAnimation.ts +195 -0
  243. package/src/Carousel/index.ts +4 -2
  244. package/src/Carousel/types.ts +97 -0
  245. package/src/ViewPager/ChildrenMemoizedPage.tsx +55 -54
  246. package/src/ViewPager/InternalContext.ts +13 -0
  247. package/src/ViewPager/PageStateContext.ts +15 -0
  248. package/src/ViewPager/ViewPagerNative.tsx +114 -43
  249. package/src/ViewPager/ViewPagerProps.ts +15 -25
  250. package/src/ViewPager/ViewPagerWeb.tsx +30 -21
  251. package/src/ViewPager/index.native.ts +1 -0
  252. package/src/ViewPager/index.ts +3 -1
  253. package/src/ViewPager/types.ts +24 -0
  254. package/src/ViewPager/usePageStore.ts +24 -0
  255. package/src/ViewPager/utils.tsx +3 -2
  256. package/src/ViewabilityTrackerView/Viewability.ts +3 -0
  257. package/src/ViewabilityTrackerView/ViewabilityTrackerView.tsx +33 -0
  258. package/src/ViewabilityTrackerView/ViewabilityTrackerViewProps.ts +25 -0
  259. package/src/ViewabilityTrackerView/index.ts +2 -0
  260. package/src/ViewabilityTrackerView/measureViewability.ts +56 -0
  261. package/src/ViewabilityTrackerView/useViewabilityTracker.ts +85 -0
  262. package/src/hooks/index.ts +2 -0
  263. package/src/hooks/useDeferredExecutor.ts +46 -0
  264. package/src/hooks/useIsMounted.ts +19 -0
  265. package/src/hooks/useUnstableCollapsibleAppBar.ts +1 -1
  266. package/src/index.ts +3 -0
  267. package/build/commonjs/Carousel/CarouselNative.js +0 -72
  268. package/build/commonjs/Carousel/CarouselNative.js.map +0 -1
  269. package/build/commonjs/Carousel/CarouselWeb.js +0 -237
  270. package/build/commonjs/Carousel/CarouselWeb.js.map +0 -1
  271. package/build/commonjs/Carousel/index.native.js.map +0 -1
  272. package/build/commonjs/Carousel/utils.js +0 -19
  273. package/build/commonjs/Carousel/utils.js.map +0 -1
  274. package/build/module/Carousel/CarouselNative.js +0 -54
  275. package/build/module/Carousel/CarouselNative.js.map +0 -1
  276. package/build/module/Carousel/CarouselWeb.js +0 -215
  277. package/build/module/Carousel/CarouselWeb.js.map +0 -1
  278. package/build/module/Carousel/index.native.js +0 -2
  279. package/build/module/Carousel/index.native.js.map +0 -1
  280. package/build/module/Carousel/utils.js +0 -7
  281. package/build/module/Carousel/utils.js.map +0 -1
  282. package/build/typescript/Carousel/CarouselNative.d.ts +0 -2
  283. package/build/typescript/Carousel/CarouselWeb.d.ts +0 -4
  284. package/build/typescript/Carousel/index.native.d.ts +0 -1
  285. package/build/typescript/Carousel/utils.d.ts +0 -6
  286. package/src/Carousel/CarouselNative.tsx +0 -67
  287. package/src/Carousel/CarouselWeb.tsx +0 -222
  288. package/src/Carousel/index.native.ts +0 -1
  289. package/src/Carousel/utils.ts +0 -11
@@ -0,0 +1,10 @@
1
+ import { Animated } from 'react-native';
2
+ import type { IndexController } from '../types';
3
+ export interface UseIndexControllerParameters {
4
+ controlledTx: Animated.AnimatedValue;
5
+ initialIndex: number;
6
+ itemWidth: number;
7
+ numberOfOriginalData: number;
8
+ onIndexChange?: (newIndex: number) => void;
9
+ }
10
+ export default function useIndexController(params: UseIndexControllerParameters): IndexController;
@@ -0,0 +1,2 @@
1
+ import { Animated } from 'react-native';
2
+ export default function useItemInterpolation(index: number): Animated.AnimatedInterpolation;
@@ -0,0 +1,7 @@
1
+ import type { ItemVisibilityStore } from '../types';
2
+ export interface Parameters {
3
+ currentIndex: number;
4
+ numberOfData: number;
5
+ windowSize: number;
6
+ }
7
+ export default function useItemVisibilityStore(params: Parameters): ItemVisibilityStore;
@@ -0,0 +1 @@
1
+ export default function useLoopedData<ItemT>(originalData: ReadonlyArray<ItemT>, loop: boolean): ReadonlyArray<ItemT>;
@@ -0,0 +1,18 @@
1
+ import { Animated } from 'react-native';
2
+ import type { CreateScrollAnimation, GetCurrentIndex, StartPagingAnimation } from '../types';
3
+ export interface PagingAnimationParameters {
4
+ controlledTx: Animated.Value;
5
+ createScrollAnimation: CreateScrollAnimation;
6
+ getCurrentIndex: GetCurrentIndex;
7
+ itemWidth: number;
8
+ lastIndex: number;
9
+ loop: boolean;
10
+ numberOfData: number;
11
+ offsetTx: Animated.Value;
12
+ }
13
+ export interface UsePagingAnimation {
14
+ finalizeAnimation: () => void;
15
+ globalInterpolation: Animated.AnimatedInterpolation;
16
+ startPagingAnimation: StartPagingAnimation;
17
+ }
18
+ export default function usePagingAnimation(params: PagingAnimationParameters): UsePagingAnimation;
@@ -1,2 +1,4 @@
1
- export { default } from './CarouselWeb';
1
+ export { default } from './Carousel';
2
2
  export type { default as CarouselProps } from './CarouselProps';
3
+ export type { CarouselInstance } from './types';
4
+ export { normalItemStyleFactory, parallaxItemStyleFactory } from './animation';
@@ -0,0 +1,79 @@
1
+ import type { ReactElement } from 'react';
2
+ import type { Animated, ViewProps } from 'react-native';
3
+ declare const directions: readonly ["next", "prev", "stay"];
4
+ export declare type PagingDirection = (typeof directions)[number];
5
+ export declare type ItemHeight = number | 'auto';
6
+ export interface RenderItem<T> {
7
+ (info: {
8
+ item: T;
9
+ index: number;
10
+ interpolation: Animated.AnimatedInterpolation;
11
+ }): ReactElement | null;
12
+ }
13
+ export interface CreateScrollAnimation {
14
+ (aValue: Animated.AnimatedValue, toValue: number): Animated.CompositeAnimation;
15
+ }
16
+ export interface CreateItemStyle {
17
+ (itemInterpolation: Animated.AnimatedInterpolation, itemWidth: number): Animated.AnimatedProps<ViewProps['style']>;
18
+ }
19
+ export interface GetCurrentIndex {
20
+ (): number;
21
+ }
22
+ export interface IndexController {
23
+ currentIndex: number;
24
+ getCurrentIndex: GetCurrentIndex;
25
+ lastIndex: number;
26
+ monitorElement: ReactElement;
27
+ }
28
+ export declare type PagingAnimationType = 'directional' | 'index';
29
+ export interface BasePagingAnimationConfig {
30
+ animated?: boolean;
31
+ }
32
+ export interface DirectionalPagingAnimationConfig extends BasePagingAnimationConfig {
33
+ direction: PagingDirection;
34
+ isOriginatedFromGesture?: boolean;
35
+ }
36
+ export interface IndexPagingAnimationConfig extends BasePagingAnimationConfig {
37
+ index: number;
38
+ }
39
+ export declare type PagingAnimationConfig = DirectionalPagingAnimationConfig | IndexPagingAnimationConfig;
40
+ export interface StartPagingAnimation {
41
+ (type: PagingAnimationType, config: PagingAnimationConfig): void;
42
+ }
43
+ export declare type VisibleIndexRanges = Array<[number, number]>;
44
+ export interface StoreSubscription {
45
+ (): void;
46
+ }
47
+ export interface ItemVisibilityStore {
48
+ dispatch: (ranges: VisibleIndexRanges) => void;
49
+ subscribe: (listener: (ranges: VisibleIndexRanges) => void) => StoreSubscription;
50
+ removeAllListeners: () => void;
51
+ }
52
+ export interface AutoplayController {
53
+ pause: () => void;
54
+ resume: () => void;
55
+ }
56
+ export interface ScrollToOption {
57
+ index: number;
58
+ animated?: boolean;
59
+ }
60
+ export interface CarouselInstance {
61
+ /**
62
+ * Get current visible item index.
63
+ */
64
+ getCurrentIndex: GetCurrentIndex;
65
+ /**
66
+ * Scroll to next visible item.
67
+ */
68
+ next: () => void;
69
+ /**
70
+ * Scroll to previous visible item.
71
+ */
72
+ prev: () => void;
73
+ /**
74
+ * Scroll to desired indexed item.
75
+ * Invalid index is ignored.
76
+ */
77
+ scrollTo: (option: ScrollToOption) => void;
78
+ }
79
+ export {};
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import type { PageProps } from './ViewPagerProps';
2
+ import type { PageProps } from './types';
3
3
  declare function Page(props: PageProps): JSX.Element;
4
4
  declare const _default: React.MemoExoticComponent<typeof Page>;
5
5
  export default _default;
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ import type { MonoStore } from '@fountain-ui/core';
3
+ export interface InternalContextValue {
4
+ pageStore: MonoStore<number>;
5
+ }
6
+ declare const InternalContext: import("react").Context<InternalContextValue>;
7
+ export default InternalContext;
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ interface PageState {
3
+ isActive: boolean;
4
+ }
5
+ declare const PageStateContext: import("react").Context<PageState>;
6
+ export declare const useViewPagerPageState: () => PageState;
7
+ export default PageStateContext;
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
2
  import type ViewPagerProps from './ViewPagerProps';
3
- import type { ViewPagerInstance } from './ViewPagerProps';
4
- declare const ViewPager: React.ForwardRefExoticComponent<Pick<ViewPagerProps, "style" | "children" | "onChange" | "keyboardDismissMode" | "scrollEnabled" | "loading" | "initialPage" | "pageComponent" | "pageForceRerenderKey"> & React.RefAttributes<ViewPagerInstance>>;
3
+ import type { ViewPagerInstance } from './types';
4
+ declare const ViewPager: React.ForwardRefExoticComponent<Pick<ViewPagerProps, "style" | "children" | "onChange" | "scrollEnabled" | "keyboardDismissMode" | "initialPage" | "loading" | "offscreenPageRerenderLimit" | "pageComponent" | "pageForceRerenderKey" | "UNSTABLE_sharedPage"> & React.RefAttributes<ViewPagerInstance>>;
5
5
  export default ViewPager;
@@ -1,23 +1,6 @@
1
- import type { ComponentType, PropsWithChildren, ReactNode, Ref } from 'react';
2
- import type { ViewProps } from 'react-native';
3
- import type { SharedValue } from 'react-native-reanimated';
4
- import type { ComponentProps } from '@fountain-ui/core';
5
- export declare type KeyboardDismissMode = 'none' | 'on-drag';
6
- export declare type PageProps = PropsWithChildren<ViewProps> & {
7
- index: number;
8
- loading: ViewPagerProps['loading'];
9
- sharedIndex: SharedValue<number>;
10
- rerenderKey?: ViewPagerProps['pageForceRerenderKey'];
11
- };
12
- export declare type PageComponent = ComponentType<PageProps>;
13
- export declare type Loading = 'lazy' | 'eager';
14
- export interface ViewPagerInstance {
15
- /**
16
- * Function to scroll to a specific page in the ViewPager. Invalid index is ignored.
17
- * @param index
18
- */
19
- setPage: (index: number) => void;
20
- }
1
+ import type { ReactNode, Ref } from 'react';
2
+ import type { ComponentProps, SyncAnimatedValue } from '@fountain-ui/core';
3
+ import type { KeyboardDismissMode, Loading, PageComponent, ViewPagerInstance } from './types';
21
4
  export default interface ViewPagerProps extends ComponentProps<{
22
5
  ref?: Ref<ViewPagerInstance>;
23
6
  /**
@@ -34,6 +17,12 @@ export default interface ViewPagerProps extends ComponentProps<{
34
17
  * @default 'lazy'
35
18
  */
36
19
  loading?: Loading;
20
+ /**
21
+ * Mobile only. The number of pages that should be re-rendered to either side of the current page.
22
+ * Changing this value after the component mount has no effect.
23
+ * @default 0
24
+ */
25
+ offscreenPageRerenderLimit?: number;
37
26
  /**
38
27
  * Callback fired when an index is changed.
39
28
  */
@@ -57,5 +46,9 @@ export default interface ViewPagerProps extends ComponentProps<{
57
46
  * @default 'on-drag'
58
47
  */
59
48
  keyboardDismissMode?: KeyboardDismissMode;
49
+ /**
50
+ * Unstable API.
51
+ */
52
+ UNSTABLE_sharedPage?: SyncAnimatedValue;
60
53
  }> {
61
54
  }
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
2
  import type ViewPagerProps from './ViewPagerProps';
3
- import type { ViewPagerInstance } from './ViewPagerProps';
4
- declare const ViewPager: React.ForwardRefExoticComponent<Pick<ViewPagerProps, "style" | "children" | "onChange" | "keyboardDismissMode" | "scrollEnabled" | "loading" | "initialPage" | "pageComponent" | "pageForceRerenderKey"> & React.RefAttributes<ViewPagerInstance>>;
3
+ import type { ViewPagerInstance } from './types';
4
+ declare const ViewPager: React.ForwardRefExoticComponent<Pick<ViewPagerProps, "style" | "children" | "onChange" | "scrollEnabled" | "keyboardDismissMode" | "initialPage" | "loading" | "offscreenPageRerenderLimit" | "pageComponent" | "pageForceRerenderKey" | "UNSTABLE_sharedPage"> & React.RefAttributes<ViewPagerInstance>>;
5
5
  export default ViewPager;
@@ -1,2 +1,4 @@
1
1
  export { default } from './ViewPagerWeb';
2
- export type { default as ViewPagerProps, ViewPagerInstance } from './ViewPagerProps';
2
+ export type { default as ViewPagerProps } from './ViewPagerProps';
3
+ export type { ViewPagerInstance } from './types';
4
+ export { useViewPagerPageState } from './PageStateContext';
@@ -1 +1,2 @@
1
1
  export { default } from './ViewPagerNative';
2
+ export { useViewPagerPageState } from './PageStateContext';
@@ -0,0 +1,19 @@
1
+ import type { ComponentType, PropsWithChildren } from 'react';
2
+ import type { ViewProps } from 'react-native';
3
+ export declare type PageProps = PropsWithChildren<ViewProps> & {
4
+ index: number;
5
+ initialPage: number;
6
+ loading: Loading;
7
+ offscreenPageRerenderLimit: number;
8
+ rerenderKey?: any;
9
+ };
10
+ export declare type KeyboardDismissMode = 'none' | 'on-drag';
11
+ export declare type PageComponent = ComponentType<PageProps>;
12
+ export declare type Loading = 'lazy' | 'eager';
13
+ export interface ViewPagerInstance {
14
+ /**
15
+ * Function to scroll to a specific page in the ViewPager. Invalid index is ignored.
16
+ * @param index
17
+ */
18
+ setPage: (index: number) => void;
19
+ }
@@ -0,0 +1,2 @@
1
+ import type { MonoStore, SyncAnimatedValue } from '@fountain-ui/core';
2
+ export default function usePageStore(value: SyncAnimatedValue): MonoStore<number>;
@@ -1,4 +1,5 @@
1
- import { Loading, PageComponent } from './ViewPagerProps';
1
+ import type { Loading, PageComponent } from './types';
2
2
  export declare const defaultInitialPage: number;
3
3
  export declare const defaultLoading: Loading;
4
+ export declare const defaultOffscreenPageRerenderLimit: number;
4
5
  export declare const defaultPageComponent: PageComponent;
@@ -0,0 +1,3 @@
1
+ export default interface Viewability {
2
+ visible: boolean;
3
+ }
@@ -0,0 +1,2 @@
1
+ import type ViewabilityTrackerViewProps from './ViewabilityTrackerViewProps';
2
+ export default function ViewabilityTrackerView(props: ViewabilityTrackerViewProps): JSX.Element;
@@ -0,0 +1,22 @@
1
+ import type { ViewProps } from 'react-native';
2
+ import type { OverridableComponentProps } from '@fountain-ui/core';
3
+ import type Viewability from './Viewability';
4
+ export default interface ViewabilityTrackerViewProps extends OverridableComponentProps<ViewProps, {
5
+ /**
6
+ * @default true
7
+ */
8
+ enabled?: boolean;
9
+ /**
10
+ * @default 1000
11
+ */
12
+ measurementIntervalMillis?: number;
13
+ /**
14
+ *
15
+ */
16
+ onViewabilityChange?: (viewability: Viewability) => void;
17
+ /**
18
+ * @default 50
19
+ */
20
+ visiblePercentThreshold?: number;
21
+ }> {
22
+ }
@@ -0,0 +1,2 @@
1
+ export { default } from './ViewabilityTrackerView';
2
+ export type { default as ViewabilityTrackerViewProps } from './ViewabilityTrackerViewProps';
@@ -0,0 +1,11 @@
1
+ import type { View } from 'react-native';
2
+ export interface ViewabilityDetail {
3
+ visiblePercent: number;
4
+ }
5
+ export interface MeasureViewabilityParameters {
6
+ view: View;
7
+ windowWidth: number;
8
+ windowHeight: number;
9
+ onViewabilityDetailMeasured: (detail: ViewabilityDetail) => void;
10
+ }
11
+ export default function measureViewability({ view, windowWidth, windowHeight, onViewabilityDetailMeasured, }: MeasureViewabilityParameters): void;
@@ -0,0 +1,11 @@
1
+ import type { RefObject } from 'react';
2
+ import type { View } from 'react-native';
3
+ import type Viewability from './Viewability';
4
+ export interface ViewabilityTrackerConfig {
5
+ enabled: boolean;
6
+ measurementIntervalMillis: number;
7
+ onViewabilityChange?: (viewability: Viewability) => void;
8
+ viewRef: RefObject<View>;
9
+ visiblePercentThreshold: number;
10
+ }
11
+ export default function useViewabilityTracker(config: ViewabilityTrackerConfig): void;
@@ -1,2 +1,4 @@
1
+ export { default as useDeferredExecutor } from './useDeferredExecutor';
2
+ export { default as useIsMounted } from './useIsMounted';
1
3
  export { default as useUnstableCollapsibleAppBar } from './useUnstableCollapsibleAppBar';
2
4
  export { default as useUnstableToggleDisplayStyle } from './useUnstableToggleDisplayStyle';
@@ -0,0 +1,11 @@
1
+ export interface Runnable {
2
+ (): void;
3
+ }
4
+ export interface DeferredExecute {
5
+ (runnable: Runnable, delay?: number): void;
6
+ }
7
+ export interface DeferredExecutor {
8
+ cancel: () => void;
9
+ execute: DeferredExecute;
10
+ }
11
+ export default function useDeferredExecutor(): DeferredExecutor;
@@ -0,0 +1,4 @@
1
+ export interface UseIsMounted {
2
+ (): boolean;
3
+ }
4
+ export default function useIsMounted(): UseIsMounted;
@@ -12,4 +12,6 @@ export { default as ComicViewer } from './ComicViewer';
12
12
  export * from './ComicViewer';
13
13
  export { default as StatusBarProvider, useStatusBarContext } from './StatusBarProvider';
14
14
  export * from './StatusBarProvider';
15
+ export { default as ViewabilityTrackerView } from './ViewabilityTrackerView';
16
+ export * from './ViewabilityTrackerView';
15
17
  export * from './hooks';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fountain-ui/lab",
3
- "version": "2.0.0-beta.11",
3
+ "version": "2.0.0-beta.14",
4
4
  "private": false,
5
5
  "author": "Fountain-UI Team",
6
6
  "description": "Incubator for Fountain-UI React components.",
@@ -29,9 +29,7 @@
29
29
  "react-dom": "^16.8.0 || ^17.0.0",
30
30
  "react-native": "^0.63.0",
31
31
  "react-native-gesture-handler": "^2.0.0",
32
- "react-native-pager-view": "^4.0.0",
33
- "react-native-snap-carousel": "^3.9.0",
34
- "react-slick": "^0.25.0"
32
+ "react-native-pager-view": "^4.0.0"
35
33
  },
36
34
  "peerDependenciesMeta": {
37
35
  "@gorhom/bottom-sheet": {
@@ -40,28 +38,15 @@
40
38
  "react-dom": {
41
39
  "optional": true
42
40
  },
43
- "react-native": {
44
- "optional": true
45
- },
46
- "react-slick": {
47
- "optional": true
48
- },
49
41
  "react-native-pager-view": {
50
42
  "optional": true
51
- },
52
- "react-native-snap-carousel": {
53
- "optional": true
54
43
  }
55
44
  },
56
45
  "devDependencies": {
57
46
  "@gorhom/bottom-sheet": "4.1.3",
58
- "@types/react-native-snap-carousel": "^3.8.4",
59
- "@types/react-slick": "^0.23.5",
60
47
  "date-fns": "^2.23.0",
61
48
  "react-native-pager-view": "^4.2.4",
62
- "react-native-safe-area-context": "^3.3.2",
63
- "react-native-snap-carousel": "^3.9.1",
64
- "react-slick": "^0.28.1"
49
+ "react-native-safe-area-context": "^3.3.2"
65
50
  },
66
51
  "react-native-builder-bob": {
67
52
  "source": "./src",
@@ -85,5 +70,5 @@
85
70
  "publishConfig": {
86
71
  "access": "public"
87
72
  },
88
- "gitHead": "80988af3fdfd671fcb655d4b36a017ce13baf29e"
73
+ "gitHead": "bd0ccbf7db51f1418dffb2da36fe167654a58f7e"
89
74
  }
@@ -0,0 +1,152 @@
1
+ import React, { forwardRef, memo, useImperativeHandle, useMemo, useRef } from 'react';
2
+ import { Animated } from 'react-native';
3
+ import ViewabilityTrackerView from '../ViewabilityTrackerView';
4
+ import type CarouselProps from './CarouselProps';
5
+ import type { CarouselInstance } from './types';
6
+ import {
7
+ useAutoplayController,
8
+ useDimensionChangeReaction,
9
+ useIndexController,
10
+ useItemVisibilityStore,
11
+ useLoopedData,
12
+ usePagingAnimation,
13
+ } from './hooks';
14
+ import { createDefaultItemStyle, createDefaultScrollAnimation } from './animation';
15
+ import { InternalContext, RootView, ScrollViewGesture } from './components';
16
+
17
+ const Carousel = forwardRef<CarouselInstance, CarouselProps>(function Carousel(props, ref) {
18
+ const {
19
+ autoplay = false,
20
+ autoplayInterval = 3000,
21
+ createItemStyle = createDefaultItemStyle,
22
+ createScrollAnimation = createDefaultScrollAnimation,
23
+ data: originalData,
24
+ disableSmartAutoplay = false,
25
+ initialIndex = 0,
26
+ itemHeight,
27
+ itemWidth,
28
+ loop = false,
29
+ onIndexChange,
30
+ renderItem,
31
+ scrollEnabled = true,
32
+ style,
33
+ windowSize = 5,
34
+ } = props;
35
+
36
+ const data = useLoopedData(originalData, loop);
37
+
38
+ const initialTx = itemWidth * initialIndex;
39
+ const controlledTx = useRef(new Animated.Value(initialTx)).current;
40
+ const offsetTx = useRef(new Animated.Value(0)).current;
41
+
42
+ const {
43
+ currentIndex,
44
+ getCurrentIndex,
45
+ lastIndex,
46
+ monitorElement,
47
+ } = useIndexController({
48
+ controlledTx,
49
+ initialIndex,
50
+ itemWidth,
51
+ numberOfOriginalData: originalData.length,
52
+ onIndexChange,
53
+ });
54
+
55
+ const itemVisibilityStore = useItemVisibilityStore({
56
+ currentIndex,
57
+ numberOfData: data.length,
58
+ windowSize,
59
+ });
60
+
61
+ const {
62
+ finalizeAnimation,
63
+ globalInterpolation,
64
+ startPagingAnimation,
65
+ } = usePagingAnimation({
66
+ controlledTx,
67
+ createScrollAnimation,
68
+ getCurrentIndex,
69
+ itemWidth,
70
+ lastIndex,
71
+ loop,
72
+ numberOfData: data.length,
73
+ offsetTx,
74
+ });
75
+
76
+ const autoplayController = useAutoplayController({
77
+ enabled: autoplay,
78
+ intervalMillis: autoplayInterval,
79
+ startPagingAnimation,
80
+ });
81
+
82
+ useDimensionChangeReaction({
83
+ controlledTx,
84
+ currentIndex,
85
+ itemWidth,
86
+ });
87
+
88
+ useImperativeHandle(
89
+ ref,
90
+ () => ({
91
+ getCurrentIndex,
92
+ next: () => startPagingAnimation('directional', { direction: 'next' }),
93
+ prev: () => startPagingAnimation('directional', { direction: 'prev' }),
94
+ scrollTo: (option) => startPagingAnimation('index', option),
95
+ }),
96
+ [startPagingAnimation, getCurrentIndex],
97
+ );
98
+
99
+ const contextValue = useMemo(() => ({
100
+ createItemStyle,
101
+ data,
102
+ globalInterpolation,
103
+ itemHeight,
104
+ itemWidth,
105
+ itemVisibilityStore,
106
+ loop,
107
+ }), [
108
+ createItemStyle,
109
+ data,
110
+ globalInterpolation,
111
+ itemHeight,
112
+ itemWidth,
113
+ itemVisibilityStore,
114
+ loop,
115
+ ]);
116
+
117
+ return (
118
+ <InternalContext.Provider value={contextValue}>
119
+ {monitorElement}
120
+
121
+ <ViewabilityTrackerView
122
+ enabled={autoplay && !disableSmartAutoplay}
123
+ measurementIntervalMillis={Math.max(3000, autoplayInterval)}
124
+ onViewabilityChange={({ visible }) => {
125
+ if (visible) {
126
+ autoplayController.resume();
127
+ } else {
128
+ autoplayController.pause();
129
+ }
130
+ }}
131
+ >
132
+ <ScrollViewGesture
133
+ autoplayController={autoplayController}
134
+ finalizeAnimation={finalizeAnimation}
135
+ offsetTx={offsetTx}
136
+ scrollEnabled={scrollEnabled}
137
+ startPagingAnimation={startPagingAnimation}
138
+ >
139
+ <RootView
140
+ data={data}
141
+ itemHeight={itemHeight}
142
+ originalData={originalData}
143
+ renderItem={renderItem}
144
+ style={style}
145
+ />
146
+ </ScrollViewGesture>
147
+ </ViewabilityTrackerView>
148
+ </InternalContext.Provider>
149
+ );
150
+ });
151
+
152
+ export default memo(Carousel);