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

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 (265) hide show
  1. package/build/commonjs/Carousel/Carousel.js +137 -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 +64 -0
  19. package/build/commonjs/Carousel/components/ItemView.js.map +1 -0
  20. package/build/commonjs/Carousel/components/RootView.js +68 -0
  21. package/build/commonjs/Carousel/components/RootView.js.map +1 -0
  22. package/build/commonjs/Carousel/components/ScrollViewGesture.js +76 -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 +55 -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 +124 -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 +44 -47
  47. package/build/commonjs/ViewPager/ChildrenMemoizedPage.js.map +1 -1
  48. package/build/commonjs/ViewPager/PageStateContext.js +22 -0
  49. package/build/commonjs/ViewPager/PageStateContext.js.map +1 -0
  50. package/build/commonjs/ViewPager/ViewPagerNative.js +23 -10
  51. package/build/commonjs/ViewPager/ViewPagerNative.js.map +1 -1
  52. package/build/commonjs/ViewPager/ViewPagerProps.js.map +1 -1
  53. package/build/commonjs/ViewPager/ViewPagerWeb.js +9 -7
  54. package/build/commonjs/ViewPager/ViewPagerWeb.js.map +1 -1
  55. package/build/commonjs/ViewPager/index.js +8 -0
  56. package/build/commonjs/ViewPager/index.js.map +1 -1
  57. package/build/commonjs/ViewPager/index.native.js +8 -0
  58. package/build/commonjs/ViewPager/index.native.js.map +1 -1
  59. package/build/commonjs/ViewPager/utils.js +3 -1
  60. package/build/commonjs/ViewPager/utils.js.map +1 -1
  61. package/build/commonjs/ViewabilityTrackerView/Viewability.js +2 -0
  62. package/build/commonjs/ViewabilityTrackerView/Viewability.js.map +1 -0
  63. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerView.js +45 -0
  64. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerView.js.map +1 -0
  65. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerViewProps.js +2 -0
  66. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerViewProps.js.map +1 -0
  67. package/build/commonjs/{Carousel/index.native.js → ViewabilityTrackerView/index.js} +3 -3
  68. package/build/commonjs/ViewabilityTrackerView/index.js.map +1 -0
  69. package/build/commonjs/ViewabilityTrackerView/measureViewability.js +42 -0
  70. package/build/commonjs/ViewabilityTrackerView/measureViewability.js.map +1 -0
  71. package/build/commonjs/ViewabilityTrackerView/useViewabilityTracker.js +88 -0
  72. package/build/commonjs/ViewabilityTrackerView/useViewabilityTracker.js.map +1 -0
  73. package/build/commonjs/hooks/index.js +16 -0
  74. package/build/commonjs/hooks/index.js.map +1 -1
  75. package/build/commonjs/hooks/useDeferredExecutor.js +45 -0
  76. package/build/commonjs/hooks/useDeferredExecutor.js.map +1 -0
  77. package/build/commonjs/hooks/useIsMounted.js +22 -0
  78. package/build/commonjs/hooks/useIsMounted.js.map +1 -0
  79. package/build/commonjs/index.js +22 -1
  80. package/build/commonjs/index.js.map +1 -1
  81. package/build/module/Carousel/Carousel.js +115 -0
  82. package/build/module/Carousel/Carousel.js.map +1 -0
  83. package/build/module/Carousel/CarouselProps.js.map +1 -1
  84. package/build/module/Carousel/animation/animationUtils.js +2 -0
  85. package/build/module/Carousel/animation/animationUtils.js.map +1 -0
  86. package/build/module/Carousel/animation/createDefaultItemStyle.js +3 -0
  87. package/build/module/Carousel/animation/createDefaultItemStyle.js.map +1 -0
  88. package/build/module/Carousel/animation/createDefaultScrollAnimation.js +11 -0
  89. package/build/module/Carousel/animation/createDefaultScrollAnimation.js.map +1 -0
  90. package/build/module/Carousel/animation/index.js +5 -0
  91. package/build/module/Carousel/animation/index.js.map +1 -0
  92. package/build/module/Carousel/animation/normalItemStyleFactory.js +18 -0
  93. package/build/module/Carousel/animation/normalItemStyleFactory.js.map +1 -0
  94. package/build/module/Carousel/animation/parallaxItemStyleFactory.js +55 -0
  95. package/build/module/Carousel/animation/parallaxItemStyleFactory.js.map +1 -0
  96. package/build/module/Carousel/components/InternalContext.js +19 -0
  97. package/build/module/Carousel/components/InternalContext.js.map +1 -0
  98. package/build/module/Carousel/components/ItemView.js +44 -0
  99. package/build/module/Carousel/components/ItemView.js.map +1 -0
  100. package/build/module/Carousel/components/RootView.js +47 -0
  101. package/build/module/Carousel/components/RootView.js.map +1 -0
  102. package/build/module/Carousel/components/ScrollViewGesture.js +62 -0
  103. package/build/module/Carousel/components/ScrollViewGesture.js.map +1 -0
  104. package/build/module/Carousel/components/index.js +5 -0
  105. package/build/module/Carousel/components/index.js.map +1 -0
  106. package/build/module/Carousel/hooks/index.js +8 -0
  107. package/build/module/Carousel/hooks/index.js.map +1 -0
  108. package/build/module/Carousel/hooks/useAutoplayController.js +45 -0
  109. package/build/module/Carousel/hooks/useAutoplayController.js.map +1 -0
  110. package/build/module/Carousel/hooks/useDimensionChangeReaction.js +14 -0
  111. package/build/module/Carousel/hooks/useDimensionChangeReaction.js.map +1 -0
  112. package/build/module/Carousel/hooks/useIndexController.js +54 -0
  113. package/build/module/Carousel/hooks/useIndexController.js.map +1 -0
  114. package/build/module/Carousel/hooks/useItemInterpolation.js +51 -0
  115. package/build/module/Carousel/hooks/useItemInterpolation.js.map +1 -0
  116. package/build/module/Carousel/hooks/useItemVisibilityStore.js +87 -0
  117. package/build/module/Carousel/hooks/useItemVisibilityStore.js.map +1 -0
  118. package/build/module/Carousel/hooks/useLoopedData.js +24 -0
  119. package/build/module/Carousel/hooks/useLoopedData.js.map +1 -0
  120. package/build/module/Carousel/hooks/usePagingAnimation.js +115 -0
  121. package/build/module/Carousel/hooks/usePagingAnimation.js.map +1 -0
  122. package/build/module/Carousel/index.js +2 -1
  123. package/build/module/Carousel/index.js.map +1 -1
  124. package/build/module/Carousel/types.js +3 -0
  125. package/build/module/Carousel/types.js.map +1 -0
  126. package/build/module/ViewPager/ChildrenMemoizedPage.js +40 -45
  127. package/build/module/ViewPager/ChildrenMemoizedPage.js.map +1 -1
  128. package/build/module/ViewPager/PageStateContext.js +10 -0
  129. package/build/module/ViewPager/PageStateContext.js.map +1 -0
  130. package/build/module/ViewPager/ViewPagerNative.js +26 -13
  131. package/build/module/ViewPager/ViewPagerNative.js.map +1 -1
  132. package/build/module/ViewPager/ViewPagerProps.js.map +1 -1
  133. package/build/module/ViewPager/ViewPagerWeb.js +10 -8
  134. package/build/module/ViewPager/ViewPagerWeb.js.map +1 -1
  135. package/build/module/ViewPager/index.js +1 -0
  136. package/build/module/ViewPager/index.js.map +1 -1
  137. package/build/module/ViewPager/index.native.js +1 -0
  138. package/build/module/ViewPager/index.native.js.map +1 -1
  139. package/build/module/ViewPager/utils.js +1 -0
  140. package/build/module/ViewPager/utils.js.map +1 -1
  141. package/build/module/ViewabilityTrackerView/Viewability.js +2 -0
  142. package/build/module/ViewabilityTrackerView/Viewability.js.map +1 -0
  143. package/build/module/ViewabilityTrackerView/ViewabilityTrackerView.js +28 -0
  144. package/build/module/ViewabilityTrackerView/ViewabilityTrackerView.js.map +1 -0
  145. package/build/module/ViewabilityTrackerView/ViewabilityTrackerViewProps.js +2 -0
  146. package/build/module/ViewabilityTrackerView/ViewabilityTrackerViewProps.js.map +1 -0
  147. package/build/module/ViewabilityTrackerView/index.js +2 -0
  148. package/build/module/ViewabilityTrackerView/index.js.map +1 -0
  149. package/build/module/ViewabilityTrackerView/measureViewability.js +34 -0
  150. package/build/module/ViewabilityTrackerView/measureViewability.js.map +1 -0
  151. package/build/module/ViewabilityTrackerView/useViewabilityTracker.js +73 -0
  152. package/build/module/ViewabilityTrackerView/useViewabilityTracker.js.map +1 -0
  153. package/build/module/hooks/index.js +2 -0
  154. package/build/module/hooks/index.js.map +1 -1
  155. package/build/module/hooks/useDeferredExecutor.js +33 -0
  156. package/build/module/hooks/useDeferredExecutor.js.map +1 -0
  157. package/build/module/hooks/useIsMounted.js +13 -0
  158. package/build/module/hooks/useIsMounted.js.map +1 -0
  159. package/build/module/index.js +2 -0
  160. package/build/module/index.js.map +1 -1
  161. package/build/typescript/Carousel/Carousel.d.ts +5 -0
  162. package/build/typescript/Carousel/CarouselProps.d.ts +32 -48
  163. package/build/typescript/Carousel/animation/animationUtils.d.ts +1 -0
  164. package/build/typescript/Carousel/animation/createDefaultItemStyle.d.ts +2 -0
  165. package/build/typescript/Carousel/animation/createDefaultScrollAnimation.d.ts +2 -0
  166. package/build/typescript/Carousel/animation/index.d.ts +4 -0
  167. package/build/typescript/Carousel/animation/normalItemStyleFactory.d.ts +2 -0
  168. package/build/typescript/Carousel/animation/parallaxItemStyleFactory.d.ts +9 -0
  169. package/build/typescript/Carousel/components/InternalContext.d.ts +14 -0
  170. package/build/typescript/Carousel/components/ItemView.d.ts +7 -0
  171. package/build/typescript/Carousel/components/RootView.d.ts +16 -0
  172. package/build/typescript/Carousel/components/ScrollViewGesture.d.ts +12 -0
  173. package/build/typescript/Carousel/components/index.d.ts +4 -0
  174. package/build/typescript/Carousel/hooks/index.d.ts +7 -0
  175. package/build/typescript/Carousel/hooks/useAutoplayController.d.ts +7 -0
  176. package/build/typescript/Carousel/hooks/useDimensionChangeReaction.d.ts +7 -0
  177. package/build/typescript/Carousel/hooks/useIndexController.d.ts +10 -0
  178. package/build/typescript/Carousel/hooks/useItemInterpolation.d.ts +2 -0
  179. package/build/typescript/Carousel/hooks/useItemVisibilityStore.d.ts +7 -0
  180. package/build/typescript/Carousel/hooks/useLoopedData.d.ts +1 -0
  181. package/build/typescript/Carousel/hooks/usePagingAnimation.d.ts +18 -0
  182. package/build/typescript/Carousel/index.d.ts +3 -1
  183. package/build/typescript/Carousel/types.d.ts +57 -0
  184. package/build/typescript/ViewPager/PageStateContext.d.ts +7 -0
  185. package/build/typescript/ViewPager/ViewPagerNative.d.ts +1 -1
  186. package/build/typescript/ViewPager/ViewPagerProps.d.ts +11 -0
  187. package/build/typescript/ViewPager/ViewPagerWeb.d.ts +1 -1
  188. package/build/typescript/ViewPager/index.d.ts +1 -0
  189. package/build/typescript/ViewPager/index.native.d.ts +1 -0
  190. package/build/typescript/ViewPager/utils.d.ts +1 -0
  191. package/build/typescript/ViewabilityTrackerView/Viewability.d.ts +3 -0
  192. package/build/typescript/ViewabilityTrackerView/ViewabilityTrackerView.d.ts +2 -0
  193. package/build/typescript/ViewabilityTrackerView/ViewabilityTrackerViewProps.d.ts +22 -0
  194. package/build/typescript/ViewabilityTrackerView/index.d.ts +2 -0
  195. package/build/typescript/ViewabilityTrackerView/measureViewability.d.ts +11 -0
  196. package/build/typescript/ViewabilityTrackerView/useViewabilityTracker.d.ts +11 -0
  197. package/build/typescript/hooks/index.d.ts +2 -0
  198. package/build/typescript/hooks/useDeferredExecutor.d.ts +11 -0
  199. package/build/typescript/hooks/useIsMounted.d.ts +4 -0
  200. package/build/typescript/index.d.ts +2 -0
  201. package/package.json +4 -19
  202. package/src/Carousel/Carousel.tsx +151 -0
  203. package/src/Carousel/CarouselProps.ts +34 -53
  204. package/src/Carousel/animation/animationUtils.ts +1 -0
  205. package/src/Carousel/animation/createDefaultItemStyle.ts +3 -0
  206. package/src/Carousel/animation/createDefaultScrollAnimation.ts +13 -0
  207. package/src/Carousel/animation/index.ts +4 -0
  208. package/src/Carousel/animation/normalItemStyleFactory.ts +19 -0
  209. package/src/Carousel/animation/parallaxItemStyleFactory.ts +79 -0
  210. package/src/Carousel/components/InternalContext.ts +33 -0
  211. package/src/Carousel/components/ItemView.tsx +56 -0
  212. package/src/Carousel/components/RootView.tsx +66 -0
  213. package/src/Carousel/components/ScrollViewGesture.tsx +80 -0
  214. package/src/Carousel/components/index.ts +4 -0
  215. package/src/Carousel/hooks/index.ts +7 -0
  216. package/src/Carousel/hooks/useAutoplayController.ts +54 -0
  217. package/src/Carousel/hooks/useDimensionChangeReaction.ts +25 -0
  218. package/src/Carousel/hooks/useIndexController.tsx +76 -0
  219. package/src/Carousel/hooks/useItemInterpolation.ts +107 -0
  220. package/src/Carousel/hooks/useItemVisibilityStore.ts +107 -0
  221. package/src/Carousel/hooks/useLoopedData.ts +26 -0
  222. package/src/Carousel/hooks/usePagingAnimation.ts +148 -0
  223. package/src/Carousel/index.ts +4 -2
  224. package/src/Carousel/types.ts +67 -0
  225. package/src/ViewPager/ChildrenMemoizedPage.tsx +48 -43
  226. package/src/ViewPager/PageStateContext.ts +15 -0
  227. package/src/ViewPager/ViewPagerNative.tsx +35 -11
  228. package/src/ViewPager/ViewPagerProps.ts +13 -0
  229. package/src/ViewPager/ViewPagerWeb.tsx +9 -5
  230. package/src/ViewPager/index.native.ts +1 -0
  231. package/src/ViewPager/index.ts +1 -0
  232. package/src/ViewPager/utils.tsx +2 -1
  233. package/src/ViewabilityTrackerView/Viewability.ts +3 -0
  234. package/src/ViewabilityTrackerView/ViewabilityTrackerView.tsx +33 -0
  235. package/src/ViewabilityTrackerView/ViewabilityTrackerViewProps.ts +25 -0
  236. package/src/ViewabilityTrackerView/index.ts +2 -0
  237. package/src/ViewabilityTrackerView/measureViewability.ts +56 -0
  238. package/src/ViewabilityTrackerView/useViewabilityTracker.ts +85 -0
  239. package/src/hooks/index.ts +2 -0
  240. package/src/hooks/useDeferredExecutor.ts +46 -0
  241. package/src/hooks/useIsMounted.ts +19 -0
  242. package/src/index.ts +3 -0
  243. package/build/commonjs/Carousel/CarouselNative.js +0 -72
  244. package/build/commonjs/Carousel/CarouselNative.js.map +0 -1
  245. package/build/commonjs/Carousel/CarouselWeb.js +0 -237
  246. package/build/commonjs/Carousel/CarouselWeb.js.map +0 -1
  247. package/build/commonjs/Carousel/index.native.js.map +0 -1
  248. package/build/commonjs/Carousel/utils.js +0 -19
  249. package/build/commonjs/Carousel/utils.js.map +0 -1
  250. package/build/module/Carousel/CarouselNative.js +0 -54
  251. package/build/module/Carousel/CarouselNative.js.map +0 -1
  252. package/build/module/Carousel/CarouselWeb.js +0 -215
  253. package/build/module/Carousel/CarouselWeb.js.map +0 -1
  254. package/build/module/Carousel/index.native.js +0 -2
  255. package/build/module/Carousel/index.native.js.map +0 -1
  256. package/build/module/Carousel/utils.js +0 -7
  257. package/build/module/Carousel/utils.js.map +0 -1
  258. package/build/typescript/Carousel/CarouselNative.d.ts +0 -2
  259. package/build/typescript/Carousel/CarouselWeb.d.ts +0 -4
  260. package/build/typescript/Carousel/index.native.d.ts +0 -1
  261. package/build/typescript/Carousel/utils.d.ts +0 -6
  262. package/src/Carousel/CarouselNative.tsx +0 -67
  263. package/src/Carousel/CarouselWeb.tsx +0 -222
  264. package/src/Carousel/index.native.ts +0 -1
  265. package/src/Carousel/utils.ts +0 -11
@@ -0,0 +1,57 @@
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 interface RenderItem<T> {
6
+ (info: {
7
+ item: T;
8
+ index: number;
9
+ interpolation: Animated.AnimatedInterpolation;
10
+ }): ReactElement | null;
11
+ }
12
+ export interface CreateScrollAnimation {
13
+ (aValue: Animated.AnimatedValue, toValue: number): Animated.CompositeAnimation;
14
+ }
15
+ export interface CreateItemStyle {
16
+ (itemInterpolation: Animated.AnimatedInterpolation, itemWidth: number): Animated.AnimatedProps<ViewProps['style']>;
17
+ }
18
+ export interface GetCurrentIndex {
19
+ (): number;
20
+ }
21
+ export interface IndexController {
22
+ currentIndex: number;
23
+ getCurrentIndex: GetCurrentIndex;
24
+ lastIndex: number;
25
+ monitorElement: ReactElement;
26
+ }
27
+ export interface StartPagingAnimation {
28
+ (direction: PagingDirection, isGesture?: boolean): void;
29
+ }
30
+ export declare type VisibleIndexRanges = Array<[number, number]>;
31
+ export interface StoreSubscription {
32
+ (): void;
33
+ }
34
+ export interface ItemVisibilityStore {
35
+ dispatch: (ranges: VisibleIndexRanges) => void;
36
+ subscribe: (listener: (ranges: VisibleIndexRanges) => void) => StoreSubscription;
37
+ removeAllListeners: () => void;
38
+ }
39
+ export interface AutoplayController {
40
+ pause: () => void;
41
+ resume: () => void;
42
+ }
43
+ export interface CarouselInstance {
44
+ /**
45
+ * Scroll to next visible item.
46
+ */
47
+ next: () => void;
48
+ /**
49
+ * Scroll to previous visible item.
50
+ */
51
+ prev: () => void;
52
+ /**
53
+ * Get current visible item index.
54
+ */
55
+ getCurrentIndex: GetCurrentIndex;
56
+ }
57
+ export {};
@@ -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
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>>;
4
+ declare const ViewPager: React.ForwardRefExoticComponent<Pick<ViewPagerProps, "style" | "children" | "onChange" | "scrollEnabled" | "keyboardDismissMode" | "loading" | "initialPage" | "offscreenPageRerenderLimit" | "pageComponent" | "pageForceRerenderKey" | "UNSTABLE_sharedIndex"> & React.RefAttributes<ViewPagerInstance>>;
5
5
  export default ViewPager;
@@ -6,6 +6,7 @@ export declare type KeyboardDismissMode = 'none' | 'on-drag';
6
6
  export declare type PageProps = PropsWithChildren<ViewProps> & {
7
7
  index: number;
8
8
  loading: ViewPagerProps['loading'];
9
+ offscreenPageRerenderLimit: number;
9
10
  sharedIndex: SharedValue<number>;
10
11
  rerenderKey?: ViewPagerProps['pageForceRerenderKey'];
11
12
  };
@@ -34,6 +35,12 @@ export default interface ViewPagerProps extends ComponentProps<{
34
35
  * @default 'lazy'
35
36
  */
36
37
  loading?: Loading;
38
+ /**
39
+ * Mobile only. The number of pages that should be re-rendered to either side of the current page.
40
+ * Changing this value after the component mount has no effect.
41
+ * @default 0
42
+ */
43
+ offscreenPageRerenderLimit?: number;
37
44
  /**
38
45
  * Callback fired when an index is changed.
39
46
  */
@@ -57,5 +64,9 @@ export default interface ViewPagerProps extends ComponentProps<{
57
64
  * @default 'on-drag'
58
65
  */
59
66
  keyboardDismissMode?: KeyboardDismissMode;
67
+ /**
68
+ * Unstable API.
69
+ */
70
+ UNSTABLE_sharedIndex?: SharedValue<number>;
60
71
  }> {
61
72
  }
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
2
  import type ViewPagerProps from './ViewPagerProps';
3
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>>;
4
+ declare const ViewPager: React.ForwardRefExoticComponent<Pick<ViewPagerProps, "style" | "children" | "onChange" | "scrollEnabled" | "keyboardDismissMode" | "loading" | "initialPage" | "offscreenPageRerenderLimit" | "pageComponent" | "pageForceRerenderKey" | "UNSTABLE_sharedIndex"> & React.RefAttributes<ViewPagerInstance>>;
5
5
  export default ViewPager;
@@ -1,2 +1,3 @@
1
1
  export { default } from './ViewPagerWeb';
2
2
  export type { default as ViewPagerProps, ViewPagerInstance } from './ViewPagerProps';
3
+ export { useViewPagerPageState } from './PageStateContext';
@@ -1 +1,2 @@
1
1
  export { default } from './ViewPagerNative';
2
+ export { useViewPagerPageState } from './PageStateContext';
@@ -1,4 +1,5 @@
1
1
  import { Loading, PageComponent } from './ViewPagerProps';
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.12",
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": "efb9e6cc7cc65e52d1084a0c3664f419dc171240"
89
74
  }
@@ -0,0 +1,151 @@
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
+ startAnimation,
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: startAnimation,
80
+ });
81
+
82
+ useDimensionChangeReaction({
83
+ controlledTx,
84
+ currentIndex,
85
+ itemWidth,
86
+ });
87
+
88
+ useImperativeHandle(
89
+ ref,
90
+ () => ({
91
+ next: () => startAnimation('next'),
92
+ prev: () => startAnimation('prev'),
93
+ getCurrentIndex,
94
+ }),
95
+ [startAnimation, getCurrentIndex],
96
+ );
97
+
98
+ const contextValue = useMemo(() => ({
99
+ createItemStyle,
100
+ data,
101
+ globalInterpolation,
102
+ itemHeight,
103
+ itemWidth,
104
+ itemVisibilityStore,
105
+ loop,
106
+ }), [
107
+ createItemStyle,
108
+ data,
109
+ globalInterpolation,
110
+ itemHeight,
111
+ itemWidth,
112
+ itemVisibilityStore,
113
+ loop,
114
+ ]);
115
+
116
+ return (
117
+ <InternalContext.Provider value={contextValue}>
118
+ {monitorElement}
119
+
120
+ <ViewabilityTrackerView
121
+ enabled={autoplay && !disableSmartAutoplay}
122
+ measurementIntervalMillis={Math.max(3000, autoplayInterval)}
123
+ onViewabilityChange={({ visible }) => {
124
+ if (visible) {
125
+ autoplayController.resume();
126
+ } else {
127
+ autoplayController.pause();
128
+ }
129
+ }}
130
+ >
131
+ <ScrollViewGesture
132
+ autoplayController={autoplayController}
133
+ finalizeAnimation={finalizeAnimation}
134
+ offsetTx={offsetTx}
135
+ scrollEnabled={scrollEnabled}
136
+ startAnimation={startAnimation}
137
+ >
138
+ <RootView
139
+ data={data}
140
+ itemHeight={itemHeight}
141
+ originalData={originalData}
142
+ renderItem={renderItem}
143
+ style={style}
144
+ />
145
+ </ScrollViewGesture>
146
+ </ViewabilityTrackerView>
147
+ </InternalContext.Provider>
148
+ );
149
+ });
150
+
151
+ export default memo(Carousel);
@@ -1,8 +1,10 @@
1
- import React, { RefObject } from 'react';
2
- import type { ListRenderItemInfo } from 'react-native';
1
+ import type { RefObject } from 'react';
3
2
  import type { ComponentProps } from '@fountain-ui/core';
3
+ import type { CarouselInstance, CreateItemStyle, CreateScrollAnimation, RenderItem } from './types';
4
4
 
5
5
  export default interface CarouselProps<ItemT = any> extends ComponentProps<{
6
+ ref?: RefObject<CarouselInstance>;
7
+
6
8
  /**
7
9
  * If `true`, enable autoplay.
8
10
  * @default false
@@ -16,92 +18,71 @@ export default interface CarouselProps<ItemT = any> extends ComponentProps<{
16
18
  autoplayInterval?: number;
17
19
 
18
20
  /**
19
- * Padding for center slide. If specified, `slidesToScroll` and `slidesToShow` set to 1.
21
+ * The item style creator function.
22
+ * @default createDefaultItemStyle
20
23
  */
21
- centerSlidePadding?: number;
24
+ createItemStyle?: CreateItemStyle;
22
25
 
23
26
  /**
24
- * Delay in ms until navigating to the next item.
27
+ * The scroll animation creator function.
28
+ * @default createDefaultScrollAnimation
29
+ */
30
+ createScrollAnimation?: CreateScrollAnimation;
31
+
32
+ /**
33
+ * Data for render items.
25
34
  */
26
35
  data: ReadonlyArray<ItemT>;
27
36
 
28
37
  /**
29
- * Value of the opacity effect applied to inactive slides.
30
- * @default 0.7
38
+ * If `true`, carousel will detect its own viewability and control autoplay automatically.
39
+ * @default false
31
40
  */
32
- inactiveSlideOpacity?: number;
41
+ disableSmartAutoplay?: boolean;
33
42
 
34
43
  /**
35
- * Value of the 'scale' transform applied to inactive slides.
36
- * @default 0.9
44
+ * Index of initial item that should be selected.
45
+ * @default 0
37
46
  */
38
- inactiveSlideScale?: number;
47
+ initialIndex?: number;
39
48
 
40
49
  /**
41
- * Web only. Value of the 'scale' transform applied to a active slide.
42
- * @default 0.990
50
+ * The item width.
43
51
  */
44
- activeSlideScale?: number;
52
+ itemHeight: number;
45
53
 
46
54
  /**
47
- * A number representing the index of the active slide.
55
+ * The item width.
48
56
  */
49
- index: number;
57
+ itemWidth: number;
50
58
 
51
59
  /**
52
60
  * Enable infinite loop mode.
53
61
  * @default false
54
62
  */
55
- infinite?: boolean;
63
+ loop?: boolean;
56
64
 
57
65
  /**
58
66
  * Callback fired when an index is changed.
59
67
  */
60
- onChange?: (newIndex: number) => void;
68
+ onIndexChange?: (newIndex: number) => void;
61
69
 
62
70
  /**
63
71
  * Takes an item from data and renders it into the list.
64
72
  */
65
- renderItem: (info: Omit<ListRenderItemInfo<ItemT>, 'separators'>) => React.ReactElement | null;
66
-
67
- /**
68
- * Web only. Number of slides to scroll at once.
69
- * @default 1
70
- */
71
- slidesToScroll?: number;
72
-
73
- /**
74
- * Web only. Number of slides to display.
75
- * @default 1
76
- */
77
- slidesToShow?: number;
73
+ renderItem: RenderItem<ItemT>;
78
74
 
79
75
  /**
80
- * Web only. Enable items to display at the center.
76
+ * Whether to enable scroll gesture.
81
77
  * @default true
82
78
  */
83
- centerMode?: boolean;
84
-
85
- /**
86
- * Web only. Enable arrows to display.
87
- * @default true
88
- */
89
- arrows?: boolean;
90
-
91
- /**
92
- * Web only. Style of arrows
93
- * @default true
94
- */
95
- arrowsStyle?: object;
96
-
97
- /**
98
- * Web only. Style of track
99
- * @default object
100
- */
101
- trackStyle?: object;
79
+ scrollEnabled?: boolean;
102
80
 
103
81
  /**
104
- * Only web. Refer slick object
82
+ * The maximum number of items that can respond to pan gesture events.
83
+ * Due to the nature of the `active` item, it accepts only odd number. (e.g. 1, 3, 5...)
84
+ * 0 means all items will respond to pan gesture events.
85
+ * @default 5
105
86
  */
106
- ref?: RefObject<any>;
87
+ windowSize?: number;
107
88
  }> {}
@@ -0,0 +1 @@
1
+ export const itemInterpolationInputRange = [-1, 0, 1];
@@ -0,0 +1,3 @@
1
+ import normalItemStyleFactory from './normalItemStyleFactory';
2
+
3
+ export default normalItemStyleFactory();
@@ -0,0 +1,13 @@
1
+ import { Animated, Easing } from 'react-native';
2
+
3
+ export default function createDefaultScrollAnimation(
4
+ animatedValue: Animated.Value,
5
+ toValue: number,
6
+ ): Animated.CompositeAnimation {
7
+ return Animated.timing(animatedValue, {
8
+ toValue: toValue,
9
+ duration: 350,
10
+ easing: Easing.bezier(0.25, 1, 0.5, 1),
11
+ useNativeDriver: true,
12
+ });
13
+ };
@@ -0,0 +1,4 @@
1
+ export { default as createDefaultItemStyle } from './createDefaultItemStyle';
2
+ export { default as createDefaultScrollAnimation } from './createDefaultScrollAnimation';
3
+ export { default as normalItemStyleFactory } from './normalItemStyleFactory';
4
+ export { default as parallaxItemStyleFactory } from './parallaxItemStyleFactory';
@@ -0,0 +1,19 @@
1
+ import type { CreateItemStyle } from '../types';
2
+ import { itemInterpolationInputRange } from './animationUtils';
3
+
4
+ export default function normalItemStyleFactory() {
5
+ const createItemStyle: CreateItemStyle = (itemInterpolation, itemWidth) => {
6
+ const translate = itemInterpolation.interpolate({
7
+ inputRange: itemInterpolationInputRange,
8
+ outputRange: [
9
+ -itemWidth,
10
+ 0,
11
+ itemWidth,
12
+ ],
13
+ });
14
+
15
+ return { transform: [{ translateX: translate }] };
16
+ };
17
+
18
+ return createItemStyle;
19
+ };