react-native-reanimated-carousel 4.0.0-alpha.0 → 4.0.0-alpha.10

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 (230) hide show
  1. package/README.md +22 -162
  2. package/lib/commonjs/components/BaseLayout.js +95 -0
  3. package/lib/commonjs/components/BaseLayout.js.map +1 -0
  4. package/lib/commonjs/components/Carousel.js +210 -0
  5. package/lib/commonjs/components/Carousel.js.map +1 -0
  6. package/lib/commonjs/components/ItemRenderer.js +80 -0
  7. package/lib/commonjs/components/ItemRenderer.js.map +1 -0
  8. package/lib/commonjs/components/LazyView.js +22 -0
  9. package/lib/commonjs/components/LazyView.js.map +1 -0
  10. package/lib/commonjs/components/ScrollViewGesture.js +315 -0
  11. package/lib/commonjs/components/ScrollViewGesture.js.map +1 -0
  12. package/lib/commonjs/components/rnr-demo.test.js +45 -0
  13. package/lib/commonjs/components/rnr-demo.test.js.map +1 -0
  14. package/lib/commonjs/constants/index.js +21 -1
  15. package/lib/commonjs/constants/index.js.map +1 -1
  16. package/lib/commonjs/hooks/useAutoPlay.js +56 -1
  17. package/lib/commonjs/hooks/useAutoPlay.js.map +1 -1
  18. package/lib/commonjs/hooks/useCarouselController.js +245 -1
  19. package/lib/commonjs/hooks/useCarouselController.js.map +1 -1
  20. package/lib/commonjs/hooks/useCheckMounted.js +23 -1
  21. package/lib/commonjs/hooks/useCheckMounted.js.map +1 -1
  22. package/lib/commonjs/hooks/useCommonVariables.js +102 -1
  23. package/lib/commonjs/hooks/useCommonVariables.js.map +1 -1
  24. package/lib/commonjs/hooks/useCommonVariables.test.js +38 -0
  25. package/lib/commonjs/hooks/useCommonVariables.test.js.map +1 -0
  26. package/lib/commonjs/hooks/useInitProps.js +78 -1
  27. package/lib/commonjs/hooks/useInitProps.js.map +1 -1
  28. package/lib/commonjs/hooks/useLayoutConfig.js +39 -1
  29. package/lib/commonjs/hooks/useLayoutConfig.js.map +1 -1
  30. package/lib/commonjs/hooks/useOffsetX.js +51 -1
  31. package/lib/commonjs/hooks/useOffsetX.js.map +1 -1
  32. package/lib/commonjs/hooks/useOffsetX.test.js +53 -0
  33. package/lib/commonjs/hooks/useOffsetX.test.js.map +1 -0
  34. package/lib/commonjs/hooks/useOnProgressChange.js +38 -1
  35. package/lib/commonjs/hooks/useOnProgressChange.js.map +1 -1
  36. package/lib/commonjs/hooks/usePanGestureProxy.js +84 -0
  37. package/lib/commonjs/hooks/usePanGestureProxy.js.map +1 -0
  38. package/lib/commonjs/hooks/usePanGestureProxy.test.js +397 -0
  39. package/lib/commonjs/hooks/usePanGestureProxy.test.js.map +1 -0
  40. package/lib/commonjs/hooks/usePropsErrorBoundary.js +36 -1
  41. package/lib/commonjs/hooks/usePropsErrorBoundary.js.map +1 -1
  42. package/lib/commonjs/hooks/useUpdateGestureConfig.js +20 -0
  43. package/lib/commonjs/hooks/useUpdateGestureConfig.js.map +1 -0
  44. package/lib/commonjs/hooks/useVisibleRanges.js +71 -1
  45. package/lib/commonjs/hooks/useVisibleRanges.js.map +1 -1
  46. package/lib/commonjs/hooks/useVisibleRanges.test.js +162 -0
  47. package/lib/commonjs/hooks/useVisibleRanges.test.js.map +1 -0
  48. package/lib/commonjs/index.js +13 -1
  49. package/lib/commonjs/index.js.map +1 -1
  50. package/lib/commonjs/layouts/index.js +20 -1
  51. package/lib/commonjs/layouts/index.js.map +1 -1
  52. package/lib/commonjs/layouts/normal.js +27 -1
  53. package/lib/commonjs/layouts/normal.js.map +1 -1
  54. package/lib/commonjs/layouts/parallax.js +38 -1
  55. package/lib/commonjs/layouts/parallax.js.map +1 -1
  56. package/lib/commonjs/layouts/stack.js +215 -1
  57. package/lib/commonjs/layouts/stack.js.map +1 -1
  58. package/lib/commonjs/store/index.js +14 -1
  59. package/lib/commonjs/store/index.js.map +1 -1
  60. package/lib/commonjs/types.js +5 -1
  61. package/lib/commonjs/utils/compute-offset-if-data-changed.js +52 -0
  62. package/lib/commonjs/utils/compute-offset-if-data-changed.js.map +1 -0
  63. package/lib/commonjs/utils/compute-offset-if-data-changed.test.js +30 -0
  64. package/lib/commonjs/utils/compute-offset-if-data-changed.test.js.map +1 -0
  65. package/lib/commonjs/utils/compute-offset-if-size-changed.js +18 -0
  66. package/lib/commonjs/utils/compute-offset-if-size-changed.js.map +1 -0
  67. package/lib/commonjs/utils/compute-offset-if-size-changed.test.js +72 -0
  68. package/lib/commonjs/utils/compute-offset-if-size-changed.test.js.map +1 -0
  69. package/lib/commonjs/utils/computed-with-auto-fill-data.js +124 -0
  70. package/lib/commonjs/utils/computed-with-auto-fill-data.js.map +1 -0
  71. package/lib/commonjs/utils/deal-with-animation.js +21 -0
  72. package/lib/commonjs/utils/deal-with-animation.js.map +1 -0
  73. package/lib/commonjs/utils/handleroffset-direction.js +16 -0
  74. package/lib/commonjs/utils/handleroffset-direction.js.map +1 -0
  75. package/lib/commonjs/utils/handleroffset-direction.test.js +46 -0
  76. package/lib/commonjs/utils/handleroffset-direction.test.js.map +1 -0
  77. package/lib/commonjs/utils/index.test.js +74 -0
  78. package/lib/commonjs/utils/index.test.js.map +1 -0
  79. package/lib/commonjs/utils/log.js +22 -1
  80. package/lib/commonjs/utils/log.js.map +1 -1
  81. package/lib/module/{layouts → components}/BaseLayout.js +6 -16
  82. package/lib/module/components/BaseLayout.js.map +1 -0
  83. package/lib/module/{Carousel.js → components/Carousel.js} +33 -52
  84. package/lib/module/components/Carousel.js.map +1 -0
  85. package/lib/module/components/ItemRenderer.js +62 -0
  86. package/lib/module/components/ItemRenderer.js.map +1 -0
  87. package/lib/module/{ScrollViewGesture.js → components/ScrollViewGesture.js} +59 -32
  88. package/lib/module/components/ScrollViewGesture.js.map +1 -0
  89. package/lib/module/components/rnr-demo.test.js +33 -0
  90. package/lib/module/components/rnr-demo.test.js.map +1 -0
  91. package/lib/module/hooks/useCarouselController.js +15 -14
  92. package/lib/module/hooks/useCarouselController.js.map +1 -1
  93. package/lib/module/hooks/useCommonVariables.js +39 -9
  94. package/lib/module/hooks/useCommonVariables.js.map +1 -1
  95. package/lib/module/hooks/useCommonVariables.test.js +34 -0
  96. package/lib/module/hooks/useCommonVariables.test.js.map +1 -0
  97. package/lib/module/hooks/useInitProps.js +1 -3
  98. package/lib/module/hooks/useInitProps.js.map +1 -1
  99. package/lib/module/hooks/useLayoutConfig.js.map +1 -1
  100. package/lib/module/hooks/useOffsetX.js +9 -6
  101. package/lib/module/hooks/useOffsetX.js.map +1 -1
  102. package/lib/module/hooks/useOffsetX.test.js +48 -0
  103. package/lib/module/hooks/useOffsetX.test.js.map +1 -0
  104. package/lib/module/hooks/useOnProgressChange.js +1 -1
  105. package/lib/module/hooks/useOnProgressChange.js.map +1 -1
  106. package/lib/module/hooks/usePanGestureProxy.js +71 -0
  107. package/lib/module/hooks/usePanGestureProxy.js.map +1 -0
  108. package/lib/module/hooks/usePanGestureProxy.test.js +383 -0
  109. package/lib/module/hooks/usePanGestureProxy.test.js.map +1 -0
  110. package/lib/module/hooks/useUpdateGestureConfig.js +10 -0
  111. package/lib/module/hooks/useUpdateGestureConfig.js.map +1 -0
  112. package/lib/module/hooks/useVisibleRanges.js +47 -19
  113. package/lib/module/hooks/useVisibleRanges.js.map +1 -1
  114. package/lib/module/hooks/useVisibleRanges.test.js +157 -0
  115. package/lib/module/hooks/useVisibleRanges.test.js.map +1 -0
  116. package/lib/module/index.js +1 -2
  117. package/lib/module/index.js.map +1 -1
  118. package/lib/module/{hooks/computeNewIndexWhenDataChanges.js → utils/compute-offset-if-data-changed.js} +2 -2
  119. package/lib/module/utils/compute-offset-if-data-changed.js.map +1 -0
  120. package/lib/module/utils/compute-offset-if-data-changed.test.js +27 -0
  121. package/lib/module/utils/compute-offset-if-data-changed.test.js.map +1 -0
  122. package/lib/module/utils/compute-offset-if-size-changed.js +11 -0
  123. package/lib/module/utils/compute-offset-if-size-changed.js.map +1 -0
  124. package/lib/module/utils/compute-offset-if-size-changed.test.js +69 -0
  125. package/lib/module/utils/compute-offset-if-size-changed.test.js.map +1 -0
  126. package/lib/module/utils/{computedWithAutoFillData.js → computed-with-auto-fill-data.js} +1 -1
  127. package/lib/module/utils/computed-with-auto-fill-data.js.map +1 -0
  128. package/lib/module/utils/{dealWithAnimation.js → deal-with-animation.js} +1 -1
  129. package/lib/module/utils/deal-with-animation.js.map +1 -0
  130. package/lib/module/utils/handleroffset-direction.js +9 -0
  131. package/lib/module/utils/handleroffset-direction.js.map +1 -0
  132. package/lib/module/utils/handleroffset-direction.test.js +41 -0
  133. package/lib/module/utils/handleroffset-direction.test.js.map +1 -0
  134. package/lib/module/{hooks → utils}/index.test.js +6 -6
  135. package/lib/module/utils/index.test.js.map +1 -0
  136. package/lib/typescript/{Carousel.d.ts → components/Carousel.d.ts} +1 -1
  137. package/lib/typescript/components/ItemRenderer.d.ts +22 -0
  138. package/lib/typescript/{ScrollViewGesture.d.ts → components/ScrollViewGesture.d.ts} +1 -1
  139. package/lib/typescript/hooks/useCarouselController.d.ts +3 -2
  140. package/lib/typescript/hooks/useCommonVariables.test.d.ts +1 -0
  141. package/lib/typescript/hooks/useLayoutConfig.d.ts +1 -1
  142. package/lib/typescript/hooks/useOffsetX.test.d.ts +1 -0
  143. package/lib/typescript/hooks/usePanGestureProxy.d.ts +9 -0
  144. package/lib/typescript/hooks/usePanGestureProxy.test.d.ts +1 -0
  145. package/lib/typescript/hooks/useUpdateGestureConfig.d.ts +5 -0
  146. package/lib/typescript/hooks/useVisibleRanges.d.ts +8 -4
  147. package/lib/typescript/hooks/useVisibleRanges.test.d.ts +1 -0
  148. package/lib/typescript/index.d.ts +3 -2
  149. package/lib/typescript/types.d.ts +113 -104
  150. package/lib/typescript/{hooks/computeNewIndexWhenDataChanges.d.ts → utils/compute-offset-if-data-changed.d.ts} +1 -1
  151. package/lib/typescript/utils/compute-offset-if-data-changed.test.d.ts +1 -0
  152. package/lib/typescript/utils/compute-offset-if-size-changed.d.ts +5 -0
  153. package/lib/typescript/utils/compute-offset-if-size-changed.test.d.ts +1 -0
  154. package/lib/typescript/utils/handleroffset-direction.d.ts +3 -0
  155. package/lib/typescript/utils/handleroffset-direction.test.d.ts +1 -0
  156. package/lib/typescript/utils/index.test.d.ts +1 -0
  157. package/package.json +32 -73
  158. package/src/{layouts → components}/BaseLayout.tsx +7 -35
  159. package/src/{Carousel.tsx → components/Carousel.tsx} +35 -69
  160. package/src/components/ItemRenderer.tsx +105 -0
  161. package/src/{ScrollViewGesture.tsx → components/ScrollViewGesture.tsx} +88 -48
  162. package/src/components/rnr-demo.test.tsx +43 -0
  163. package/src/hooks/useCarouselController.tsx +27 -24
  164. package/src/hooks/useCommonVariables.test.tsx +41 -0
  165. package/src/hooks/useCommonVariables.ts +36 -11
  166. package/src/hooks/useInitProps.ts +1 -3
  167. package/src/hooks/useLayoutConfig.ts +1 -1
  168. package/src/hooks/useOffsetX.test.ts +54 -0
  169. package/src/hooks/useOffsetX.ts +33 -31
  170. package/src/hooks/useOnProgressChange.ts +1 -1
  171. package/src/hooks/usePanGestureProxy.test.tsx +376 -0
  172. package/src/hooks/usePanGestureProxy.ts +110 -0
  173. package/src/hooks/useUpdateGestureConfig.ts +15 -0
  174. package/src/hooks/useVisibleRanges.test.tsx +179 -0
  175. package/src/hooks/useVisibleRanges.tsx +72 -24
  176. package/src/index.tsx +4 -2
  177. package/src/types.ts +132 -125
  178. package/src/utils/compute-offset-if-data-changed.test.ts +30 -0
  179. package/src/{hooks/computeNewIndexWhenDataChanges.ts → utils/compute-offset-if-data-changed.ts} +1 -1
  180. package/src/utils/compute-offset-if-size-changed.test.ts +78 -0
  181. package/src/utils/compute-offset-if-size-changed.ts +11 -0
  182. package/src/utils/handleroffset-direction.test.ts +52 -0
  183. package/src/utils/handleroffset-direction.ts +18 -0
  184. package/src/{hooks → utils}/index.test.ts +6 -6
  185. package/README.zh-CN.md +0 -202
  186. package/lib/commonjs/Carousel.js +0 -2
  187. package/lib/commonjs/Carousel.js.map +0 -1
  188. package/lib/commonjs/LazyView.js +0 -2
  189. package/lib/commonjs/LazyView.js.map +0 -1
  190. package/lib/commonjs/ScrollViewGesture.js +0 -2
  191. package/lib/commonjs/ScrollViewGesture.js.map +0 -1
  192. package/lib/commonjs/hooks/computeNewIndexWhenDataChanges.js +0 -2
  193. package/lib/commonjs/hooks/computeNewIndexWhenDataChanges.js.map +0 -1
  194. package/lib/commonjs/hooks/index.test.js +0 -2
  195. package/lib/commonjs/hooks/index.test.js.map +0 -1
  196. package/lib/commonjs/layouts/BaseLayout.js +0 -2
  197. package/lib/commonjs/layouts/BaseLayout.js.map +0 -1
  198. package/lib/commonjs/layouts/ParallaxLayout.js +0 -2
  199. package/lib/commonjs/layouts/ParallaxLayout.js.map +0 -1
  200. package/lib/commonjs/utils/computedWithAutoFillData.js +0 -2
  201. package/lib/commonjs/utils/computedWithAutoFillData.js.map +0 -1
  202. package/lib/commonjs/utils/dealWithAnimation.js +0 -2
  203. package/lib/commonjs/utils/dealWithAnimation.js.map +0 -1
  204. package/lib/commonjs/utils/handlerOffsetDirection.js +0 -2
  205. package/lib/commonjs/utils/handlerOffsetDirection.js.map +0 -1
  206. package/lib/module/Carousel.js.map +0 -1
  207. package/lib/module/ScrollViewGesture.js.map +0 -1
  208. package/lib/module/hooks/computeNewIndexWhenDataChanges.js.map +0 -1
  209. package/lib/module/hooks/index.test.js.map +0 -1
  210. package/lib/module/layouts/BaseLayout.js.map +0 -1
  211. package/lib/module/layouts/ParallaxLayout.js +0 -61
  212. package/lib/module/layouts/ParallaxLayout.js.map +0 -1
  213. package/lib/module/utils/computedWithAutoFillData.js.map +0 -1
  214. package/lib/module/utils/dealWithAnimation.js.map +0 -1
  215. package/lib/module/utils/handlerOffsetDirection.js +0 -9
  216. package/lib/module/utils/handlerOffsetDirection.js.map +0 -1
  217. package/lib/typescript/layouts/ParallaxLayout.d.ts +0 -13
  218. package/lib/typescript/utils/handlerOffsetDirection.d.ts +0 -2
  219. package/src/layouts/ParallaxLayout.tsx +0 -141
  220. package/src/utils/handlerOffsetDirection.ts +0 -15
  221. /package/lib/module/{LazyView.js → components/LazyView.js} +0 -0
  222. /package/lib/module/{LazyView.js.map → components/LazyView.js.map} +0 -0
  223. /package/lib/typescript/{layouts → components}/BaseLayout.d.ts +0 -0
  224. /package/lib/typescript/{LazyView.d.ts → components/LazyView.d.ts} +0 -0
  225. /package/lib/typescript/{hooks/index.test.d.ts → components/rnr-demo.test.d.ts} +0 -0
  226. /package/lib/typescript/utils/{computedWithAutoFillData.d.ts → computed-with-auto-fill-data.d.ts} +0 -0
  227. /package/lib/typescript/utils/{dealWithAnimation.d.ts → deal-with-animation.d.ts} +0 -0
  228. /package/src/{LazyView.tsx → components/LazyView.tsx} +0 -0
  229. /package/src/utils/{computedWithAutoFillData.ts → computed-with-auto-fill-data.ts} +0 -0
  230. /package/src/utils/{dealWithAnimation.ts → deal-with-animation.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ItemRenderer.tsx"],"names":["ItemRenderer","props","data","size","windowSize","handlerOffset","offsetX","dataLength","rawDataLength","loop","autoFillData","layoutConfig","renderItem","customAnimation","visibleRanges","total","viewSize","translation","displayedItems","setDisplayedItems","React","useState","value","ranges","map","item","index","realIndex","negativeRange","positiveRange","shouldRender","animationValue"],"mappings":";;;;;;;AAAA;;AAIA;;AAGA;;AAGA;;AAEA;;;;AAiBO,MAAMA,YAAuB,GAAIC,KAAD,IAAW;AAChD,QAAM;AACJC,IAAAA,IADI;AAEJC,IAAAA,IAFI;AAGJC,IAAAA,UAHI;AAIJC,IAAAA,aAJI;AAKJC,IAAAA,OALI;AAMJC,IAAAA,UANI;AAOJC,IAAAA,aAPI;AAQJC,IAAAA,IARI;AASJC,IAAAA,YATI;AAUJC,IAAAA,YAVI;AAWJC,IAAAA,UAXI;AAYJC,IAAAA;AAZI,MAaFZ,KAbJ;AAeA,QAAMa,aAAa,GAAG,wCAAiB;AACrCC,IAAAA,KAAK,EAAER,UAD8B;AAErCS,IAAAA,QAAQ,EAAEb,IAF2B;AAGrCc,IAAAA,WAAW,EAAEZ,aAHwB;AAIrCD,IAAAA,UAJqC;AAKrCK,IAAAA;AALqC,GAAjB,CAAtB;;AAQA,QAAM,CAACS,cAAD,EAAiBC,iBAAjB,IAAsCC,eAAMC,QAAN,CAA8B,IAA9B,CAA5C;;AAEA,kDACE,MAAMP,aAAa,CAACQ,KADtB,EAEEC,MAAM,IAAI,oCAAQJ,iBAAR,EAA2BI,MAA3B,CAFZ,EAGE,CAACT,aAAD,CAHF;AAMA,MAAI,CAACI,cAAL,EACE,OAAO,IAAP;AAEF,sBACE,4DAEIhB,IAAI,CAACsB,GAAL,CAAS,CAACC,IAAD,EAAOC,KAAP,KAAiB;AACxB,UAAMC,SAAS,GAAG,iEAAkC;AAClDD,MAAAA,KADkD;AAElDnB,MAAAA,UAAU,EAAEC,aAFsC;AAGlDC,MAAAA,IAHkD;AAIlDC,MAAAA;AAJkD,KAAlC,CAAlB;AAOA,UAAM;AAAEkB,MAAAA,aAAF;AAAiBC,MAAAA;AAAjB,QAAmCX,cAAzC;AAEA,UAAMY,YAAY,GAAIJ,KAAK,IAAIE,aAAa,CAAC,CAAD,CAAtB,IAA6BF,KAAK,IAAIE,aAAa,CAAC,CAAD,CAApD,IACjBF,KAAK,IAAIG,aAAa,CAAC,CAAD,CAAtB,IAA6BH,KAAK,IAAIG,aAAa,CAAC,CAAD,CADvD;AAGA,QAAI,CAACC,YAAL,EACE,OAAO,IAAP;AAEF,wBACE,6BAAC,sBAAD;AACE,MAAA,GAAG,EAAEJ,KADP;AAEE,MAAA,KAAK,EAAEA,KAFT;AAGE,MAAA,aAAa,EAAEpB,OAHjB;AAIE,MAAA,aAAa,EAAEQ,aAJjB;AAKE,MAAA,cAAc,EAAED,eAAe,IAAIF;AALrC,OAOG;AAAA,UAAC;AAAEoB,QAAAA;AAAF,OAAD;AAAA,aACCnB,UAAU,CAAC;AACTa,QAAAA,IADS;AAETC,QAAAA,KAAK,EAAEC,SAFE;AAGTI,QAAAA;AAHS,OAAD,CADX;AAAA,KAPH,CADF;AAiBD,GAjCD,CAFJ,CADF;AAwCD,CA3EM","sourcesContent":["import React from \"react\";\nimport type { FC } from \"react\";\nimport type { ViewStyle } from \"react-native\";\nimport type Animated from \"react-native-reanimated\";\nimport { useAnimatedReaction, type AnimatedStyleProp, runOnJS } from \"react-native-reanimated\";\n\nimport type { TAnimationStyle } from \"./BaseLayout\";\nimport { BaseLayout } from \"./BaseLayout\";\n\nimport type { VisibleRanges } from \"../hooks/useVisibleRanges\";\nimport { useVisibleRanges } from \"../hooks/useVisibleRanges\";\nimport type { CarouselRenderItem } from \"../types\";\nimport { computedRealIndexWithAutoFillData } from \"../utils/computed-with-auto-fill-data\";\n\ninterface Props {\n data: any[]\n dataLength: number\n rawDataLength: number\n loop: boolean\n size: number\n windowSize?: number\n autoFillData: boolean\n offsetX: Animated.SharedValue<number>\n handlerOffset: Animated.SharedValue<number>\n layoutConfig: TAnimationStyle\n renderItem: CarouselRenderItem<any>\n customAnimation?: ((value: number) => AnimatedStyleProp<ViewStyle>)\n}\n\nexport const ItemRenderer: FC<Props> = (props) => {\n const {\n data,\n size,\n windowSize,\n handlerOffset,\n offsetX,\n dataLength,\n rawDataLength,\n loop,\n autoFillData,\n layoutConfig,\n renderItem,\n customAnimation,\n } = props;\n\n const visibleRanges = useVisibleRanges({\n total: dataLength,\n viewSize: size,\n translation: handlerOffset,\n windowSize,\n loop,\n });\n\n const [displayedItems, setDisplayedItems] = React.useState<VisibleRanges>(null!);\n\n useAnimatedReaction(\n () => visibleRanges.value,\n ranges => runOnJS(setDisplayedItems)(ranges),\n [visibleRanges],\n );\n\n if (!displayedItems)\n return null;\n\n return (\n <>\n {\n data.map((item, index) => {\n const realIndex = computedRealIndexWithAutoFillData({\n index,\n dataLength: rawDataLength,\n loop,\n autoFillData,\n });\n\n const { negativeRange, positiveRange } = displayedItems;\n\n const shouldRender = (index >= negativeRange[0] && index <= negativeRange[1])\n || (index >= positiveRange[0] && index <= positiveRange[1]);\n\n if (!shouldRender)\n return null;\n\n return (\n <BaseLayout\n key={index}\n index={index}\n handlerOffset={offsetX}\n visibleRanges={visibleRanges}\n animationStyle={customAnimation || layoutConfig}\n >\n {({ animationValue }) =>\n renderItem({\n item,\n index: realIndex,\n animationValue,\n })\n }\n </BaseLayout>\n );\n })\n }\n </>\n );\n};\n"]}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.LazyView = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+
12
+ const LazyView = props => {
13
+ const {
14
+ shouldUpdate,
15
+ children
16
+ } = props;
17
+ if (!shouldUpdate) return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null);
18
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children);
19
+ };
20
+
21
+ exports.LazyView = LazyView;
22
+ //# sourceMappingURL=LazyView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["LazyView.tsx"],"names":["LazyView","props","shouldUpdate","children"],"mappings":";;;;;;;AACA;;;;AAMO,MAAMA,QAA4C,GAAIC,KAAD,IAAW;AACrE,QAAM;AAAEC,IAAAA,YAAF;AAAgBC,IAAAA;AAAhB,MAA6BF,KAAnC;AAEA,MAAI,CAACC,YAAL,EACE,oBAAO,2DAAP;AAEF,sBAAO,4DAAGC,QAAH,CAAP;AACD,CAPM","sourcesContent":["import type { PropsWithChildren } from \"react\";\nimport React from \"react\";\n\ninterface Props {\n shouldUpdate: boolean\n}\n\nexport const LazyView: React.FC<PropsWithChildren<Props>> = (props) => {\n const { shouldUpdate, children } = props;\n\n if (!shouldUpdate)\n return <></>;\n\n return <>{children}</>;\n};\n"]}
@@ -0,0 +1,315 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ScrollViewGesture = void 0;
7
+
8
+ var _react = _interopRequireWildcard(require("react"));
9
+
10
+ var _reactNativeGestureHandler = require("react-native-gesture-handler");
11
+
12
+ var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
13
+
14
+ var _constants = require("../constants");
15
+
16
+ var _usePanGestureProxy = require("../hooks/usePanGestureProxy");
17
+
18
+ var _store = require("../store");
19
+
20
+ var _dealWithAnimation = require("../utils/deal-with-animation");
21
+
22
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
+
24
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
+
26
+ const IScrollViewGesture = props => {
27
+ const {
28
+ props: {
29
+ onConfigurePanGesture,
30
+ vertical,
31
+ pagingEnabled,
32
+ snapEnabled,
33
+ loop,
34
+ scrollAnimationDuration,
35
+ withAnimation,
36
+ enabled,
37
+ dataLength,
38
+ overscrollEnabled,
39
+ maxScrollDistancePerSwipe,
40
+ minScrollDistancePerSwipe,
41
+ fixedDirection
42
+ }
43
+ } = _react.default.useContext(_store.CTX);
44
+
45
+ const {
46
+ size,
47
+ translation,
48
+ testID,
49
+ style = {},
50
+ onScrollStart,
51
+ onScrollEnd,
52
+ onTouchBegin,
53
+ onTouchEnd
54
+ } = props;
55
+ const maxPage = dataLength;
56
+ const isHorizontal = (0, _reactNativeReanimated.useDerivedValue)(() => !vertical, [vertical]);
57
+ const max = (0, _reactNativeReanimated.useSharedValue)(0);
58
+ const panOffset = (0, _reactNativeReanimated.useSharedValue)(0);
59
+ const touching = (0, _reactNativeReanimated.useSharedValue)(false);
60
+ const validStart = (0, _reactNativeReanimated.useSharedValue)(false);
61
+ const scrollEndTranslation = (0, _reactNativeReanimated.useSharedValue)(0);
62
+ const scrollEndVelocity = (0, _reactNativeReanimated.useSharedValue)(0);
63
+ const containerRef = (0, _reactNativeReanimated.useAnimatedRef)();
64
+ const maxScrollDistancePerSwipeIsSet = typeof maxScrollDistancePerSwipe === "number";
65
+ const minScrollDistancePerSwipeIsSet = typeof minScrollDistancePerSwipe === "number"; // Get the limit of the scroll.
66
+
67
+ const getLimit = _react.default.useCallback(() => {
68
+ "worklet";
69
+
70
+ if (!loop && !overscrollEnabled) {
71
+ const {
72
+ width: containerWidth = 0
73
+ } = (0, _reactNativeReanimated.measure)(containerRef); // If the item's total width is less than the container's width, then there is no need to scroll.
74
+
75
+ if (dataLength * size < containerWidth) return 0; // Disable the "overscroll" effect
76
+
77
+ return dataLength * size - containerWidth;
78
+ }
79
+
80
+ return dataLength * size;
81
+ }, [loop, size, dataLength, overscrollEnabled]);
82
+
83
+ const withSpring = _react.default.useCallback((toValue, onFinished) => {
84
+ "worklet";
85
+
86
+ const defaultWithAnimation = {
87
+ type: "timing",
88
+ config: {
89
+ duration: scrollAnimationDuration + 100,
90
+ easing: _constants.Easing.easeOutQuart
91
+ }
92
+ };
93
+ return (0, _dealWithAnimation.dealWithAnimation)(withAnimation !== null && withAnimation !== void 0 ? withAnimation : defaultWithAnimation)(toValue, isFinished => {
94
+ "worklet";
95
+
96
+ if (isFinished) onFinished && (0, _reactNativeReanimated.runOnJS)(onFinished)();
97
+ });
98
+ }, [scrollAnimationDuration, withAnimation]);
99
+
100
+ const endWithSpring = _react.default.useCallback(onFinished => {
101
+ "worklet";
102
+
103
+ const origin = translation.value;
104
+ const velocity = scrollEndVelocity.value; // Default to scroll in the direction of the slide (with deceleration)
105
+
106
+ let finalTranslation = (0, _reactNativeReanimated.withDecay)({
107
+ velocity,
108
+ deceleration: 0.999
109
+ }); // If the distance of the swipe exceeds the max scroll distance, keep the view at the current position
110
+
111
+ if (maxScrollDistancePerSwipeIsSet && Math.abs(scrollEndTranslation.value) > maxScrollDistancePerSwipe) {
112
+ finalTranslation = origin;
113
+ } else {
114
+ /**
115
+ * The page size is the same as the item size.
116
+ * If direction is vertical, the page size is the height of the item.
117
+ * If direction is horizontal, the page size is the width of the item.
118
+ *
119
+ * `page size` equals to `size` variable.
120
+ * */
121
+ if (pagingEnabled) {
122
+ // distance with direction
123
+ const offset = -(scrollEndTranslation.value >= 0 ? 1 : -1); // 1 or -1
124
+
125
+ const computed = offset < 0 ? Math.ceil : Math.floor;
126
+ const page = computed(-translation.value / size);
127
+
128
+ if (loop) {
129
+ const finalPage = page + offset;
130
+ finalTranslation = withSpring(withProcessTranslation(-finalPage * size), onFinished);
131
+ } else {
132
+ const finalPage = Math.min(maxPage - 1, Math.max(0, page + offset));
133
+ finalTranslation = withSpring(withProcessTranslation(-finalPage * size), onFinished);
134
+ }
135
+ }
136
+
137
+ if (!pagingEnabled && snapEnabled) {
138
+ // scroll to the nearest item
139
+ const nextPage = Math.round((origin + velocity * 0.4) / size) * size;
140
+ finalTranslation = withSpring(withProcessTranslation(nextPage), onFinished);
141
+ }
142
+ }
143
+
144
+ translation.value = finalTranslation;
145
+
146
+ function withProcessTranslation(translation) {
147
+ if (!loop && !overscrollEnabled) {
148
+ const limit = getLimit();
149
+ const sign = Math.sign(translation);
150
+ return sign * Math.max(0, Math.min(limit, Math.abs(translation)));
151
+ }
152
+
153
+ return translation;
154
+ }
155
+ }, [withSpring, size, maxPage, loop, snapEnabled, translation, pagingEnabled, scrollEndVelocity.value, maxScrollDistancePerSwipe, scrollEndTranslation.value, maxScrollDistancePerSwipeIsSet]);
156
+
157
+ const onFinish = _react.default.useCallback(isFinished => {
158
+ "worklet";
159
+
160
+ if (isFinished) {
161
+ touching.value = false;
162
+ onScrollEnd && (0, _reactNativeReanimated.runOnJS)(onScrollEnd)();
163
+ }
164
+ }, [onScrollEnd, touching]);
165
+
166
+ const activeDecay = _react.default.useCallback(() => {
167
+ "worklet";
168
+
169
+ touching.value = true;
170
+ translation.value = (0, _reactNativeReanimated.withDecay)({
171
+ velocity: scrollEndVelocity.value
172
+ }, isFinished => onFinish(isFinished));
173
+ }, [onFinish, scrollEndVelocity.value, touching, translation]);
174
+
175
+ const resetBoundary = _react.default.useCallback(() => {
176
+ "worklet";
177
+
178
+ if (touching.value) return;
179
+
180
+ if (translation.value > 0) {
181
+ if (scrollEndTranslation.value < 0) {
182
+ activeDecay();
183
+ return;
184
+ }
185
+
186
+ if (!loop) {
187
+ translation.value = withSpring(0);
188
+ return;
189
+ }
190
+ }
191
+
192
+ if (translation.value < -((maxPage - 1) * size)) {
193
+ if (scrollEndTranslation.value > 0) {
194
+ activeDecay();
195
+ return;
196
+ }
197
+
198
+ if (!loop) translation.value = withSpring(-((maxPage - 1) * size));
199
+ }
200
+ }, [touching.value, translation, maxPage, size, scrollEndTranslation.value, loop, activeDecay, withSpring]);
201
+
202
+ (0, _reactNativeReanimated.useAnimatedReaction)(() => translation.value, () => {
203
+ if (!pagingEnabled) resetBoundary();
204
+ }, [pagingEnabled, resetBoundary]);
205
+
206
+ function withProcessTranslation(translation) {
207
+ "worklet";
208
+
209
+ if (!loop && !overscrollEnabled) {
210
+ const limit = getLimit();
211
+ const sign = Math.sign(translation);
212
+ return sign * Math.max(0, Math.min(limit, Math.abs(translation)));
213
+ }
214
+
215
+ return translation;
216
+ }
217
+
218
+ const onGestureStart = (0, _react.useCallback)(_ => {
219
+ "worklet";
220
+
221
+ touching.value = true;
222
+ validStart.value = true;
223
+ onScrollStart && (0, _reactNativeReanimated.runOnJS)(onScrollStart)();
224
+ max.value = (maxPage - 1) * size;
225
+ if (!loop && !overscrollEnabled) max.value = getLimit();
226
+ panOffset.value = translation.value;
227
+ }, [max, size, maxPage, loop, touching, panOffset, validStart, translation, overscrollEnabled, getLimit, onScrollStart]);
228
+ const onGestureUpdate = (0, _react.useCallback)(e => {
229
+ "worklet";
230
+
231
+ if (validStart.value) {
232
+ validStart.value = false;
233
+ (0, _reactNativeReanimated.cancelAnimation)(translation);
234
+ }
235
+
236
+ touching.value = true;
237
+ const {
238
+ translationX,
239
+ translationY
240
+ } = e;
241
+ let panTranslation = isHorizontal.value ? translationX : translationY;
242
+ if (fixedDirection === "negative") panTranslation = -Math.abs(panTranslation);else if (fixedDirection === "positive") panTranslation = +Math.abs(panTranslation);
243
+
244
+ if (!loop) {
245
+ if (translation.value > 0 || translation.value < -max.value) {
246
+ const boundary = translation.value > 0 ? 0 : -max.value;
247
+ const fixed = boundary - panOffset.value;
248
+ const dynamic = panTranslation - fixed;
249
+ translation.value = boundary + dynamic * 0.5;
250
+ return;
251
+ }
252
+ }
253
+
254
+ const translationValue = panOffset.value + panTranslation;
255
+ translation.value = translationValue;
256
+ }, [isHorizontal, max, panOffset, loop, overscrollEnabled, fixedDirection, translation, validStart, touching]);
257
+ const onGestureEnd = (0, _react.useCallback)((e, _success) => {
258
+ "worklet";
259
+
260
+ const {
261
+ velocityX,
262
+ velocityY,
263
+ translationX,
264
+ translationY
265
+ } = e;
266
+ scrollEndVelocity.value = isHorizontal.value ? velocityX : velocityY;
267
+ let panTranslation = isHorizontal.value ? translationX : translationY;
268
+ if (fixedDirection === "negative") panTranslation = -Math.abs(panTranslation);else if (fixedDirection === "positive") panTranslation = +Math.abs(panTranslation);
269
+ scrollEndTranslation.value = panTranslation;
270
+ const totalTranslation = scrollEndVelocity.value + scrollEndTranslation.value;
271
+ /**
272
+ * If the maximum scroll distance is set and the translation `exceeds the maximum scroll distance`,
273
+ * the carousel will keep the view at the current position.
274
+ */
275
+
276
+ if (maxScrollDistancePerSwipeIsSet && Math.abs(totalTranslation) > maxScrollDistancePerSwipe) {
277
+ const nextPage = Math.round((panOffset.value + maxScrollDistancePerSwipe * Math.sign(totalTranslation)) / size) * size;
278
+ translation.value = withSpring(withProcessTranslation(nextPage), onScrollEnd);
279
+ }
280
+ /**
281
+ * If the minimum scroll distance is set and the translation `didn't exceeds the minimum scroll distance`,
282
+ * the carousel will keep the view at the current position.
283
+ */
284
+ else if (minScrollDistancePerSwipeIsSet && Math.abs(totalTranslation) < minScrollDistancePerSwipe) {
285
+ const nextPage = Math.round((panOffset.value + minScrollDistancePerSwipe * Math.sign(totalTranslation)) / size) * size;
286
+ translation.value = withSpring(withProcessTranslation(nextPage), onScrollEnd);
287
+ } else {
288
+ endWithSpring(onScrollEnd);
289
+ }
290
+
291
+ if (!loop) touching.value = false;
292
+ }, [size, loop, touching, panOffset, translation, isHorizontal, scrollEndVelocity, scrollEndTranslation, fixedDirection, maxScrollDistancePerSwipeIsSet, maxScrollDistancePerSwipe, maxScrollDistancePerSwipeIsSet, minScrollDistancePerSwipe, endWithSpring, withSpring, onScrollEnd]);
293
+ const gesture = (0, _usePanGestureProxy.usePanGestureProxy)({
294
+ onConfigurePanGesture,
295
+ onGestureStart,
296
+ onGestureUpdate,
297
+ onGestureEnd,
298
+ options: {
299
+ enabled
300
+ }
301
+ });
302
+ return /*#__PURE__*/_react.default.createElement(_reactNativeGestureHandler.GestureDetector, {
303
+ gesture: gesture
304
+ }, /*#__PURE__*/_react.default.createElement(_reactNativeReanimated.default.View, {
305
+ ref: containerRef,
306
+ testID: testID,
307
+ style: style,
308
+ onTouchStart: onTouchBegin,
309
+ onTouchEnd: onTouchEnd
310
+ }, props.children));
311
+ };
312
+
313
+ const ScrollViewGesture = IScrollViewGesture;
314
+ exports.ScrollViewGesture = ScrollViewGesture;
315
+ //# sourceMappingURL=ScrollViewGesture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ScrollViewGesture.tsx"],"names":["IScrollViewGesture","props","onConfigurePanGesture","vertical","pagingEnabled","snapEnabled","loop","scrollAnimationDuration","withAnimation","enabled","dataLength","overscrollEnabled","maxScrollDistancePerSwipe","minScrollDistancePerSwipe","fixedDirection","React","useContext","CTX","size","translation","testID","style","onScrollStart","onScrollEnd","onTouchBegin","onTouchEnd","maxPage","isHorizontal","max","panOffset","touching","validStart","scrollEndTranslation","scrollEndVelocity","containerRef","maxScrollDistancePerSwipeIsSet","minScrollDistancePerSwipeIsSet","getLimit","useCallback","width","containerWidth","withSpring","toValue","onFinished","defaultWithAnimation","type","config","duration","easing","Easing","easeOutQuart","isFinished","endWithSpring","origin","value","velocity","finalTranslation","deceleration","Math","abs","offset","computed","ceil","floor","page","finalPage","withProcessTranslation","min","nextPage","round","limit","sign","onFinish","activeDecay","resetBoundary","onGestureStart","_","onGestureUpdate","e","translationX","translationY","panTranslation","boundary","fixed","dynamic","translationValue","onGestureEnd","_success","velocityX","velocityY","totalTranslation","gesture","options","children","ScrollViewGesture"],"mappings":"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","sourcesContent":["import type { PropsWithChildren } from \"react\";\nimport React, { useCallback } from \"react\";\nimport type { StyleProp, ViewStyle } from \"react-native\";\nimport type { GestureStateChangeEvent, PanGestureHandlerEventPayload } from \"react-native-gesture-handler\";\nimport { GestureDetector } from \"react-native-gesture-handler\";\nimport Animated, {\n cancelAnimation,\n measure,\n runOnJS,\n useAnimatedReaction,\n useAnimatedRef,\n useDerivedValue,\n useSharedValue,\n withDecay,\n} from \"react-native-reanimated\";\n\nimport { Easing } from \"../constants\";\nimport { usePanGestureProxy } from \"../hooks/usePanGestureProxy\";\nimport { CTX } from \"../store\";\nimport type { WithTimingAnimation } from \"../types\";\nimport { dealWithAnimation } from \"../utils/deal-with-animation\";\n\ninterface Props {\n size: number\n infinite?: boolean\n testID?: string\n style?: StyleProp<ViewStyle>\n onScrollStart?: () => void\n onScrollEnd?: () => void\n onTouchBegin?: () => void\n onTouchEnd?: () => void\n translation: Animated.SharedValue<number>\n}\n\nconst IScrollViewGesture: React.FC<PropsWithChildren<Props>> = (props) => {\n const {\n props: {\n onConfigurePanGesture,\n vertical,\n pagingEnabled,\n snapEnabled,\n loop,\n scrollAnimationDuration,\n withAnimation,\n enabled,\n dataLength,\n overscrollEnabled,\n maxScrollDistancePerSwipe,\n minScrollDistancePerSwipe,\n fixedDirection,\n },\n } = React.useContext(CTX);\n\n const {\n size,\n translation,\n testID,\n style = {},\n onScrollStart,\n onScrollEnd,\n onTouchBegin,\n onTouchEnd,\n } = props;\n\n const maxPage = dataLength;\n const isHorizontal = useDerivedValue(() => !vertical, [vertical]);\n const max = useSharedValue(0);\n const panOffset = useSharedValue(0);\n const touching = useSharedValue(false);\n const validStart = useSharedValue(false);\n const scrollEndTranslation = useSharedValue(0);\n const scrollEndVelocity = useSharedValue(0);\n const containerRef = useAnimatedRef<Animated.View>();\n const maxScrollDistancePerSwipeIsSet = typeof maxScrollDistancePerSwipe === \"number\";\n const minScrollDistancePerSwipeIsSet = typeof minScrollDistancePerSwipe === \"number\";\n\n // Get the limit of the scroll.\n const getLimit = React.useCallback(() => {\n \"worklet\";\n\n if (!loop && !overscrollEnabled) {\n const { width: containerWidth = 0 } = measure(containerRef);\n\n // If the item's total width is less than the container's width, then there is no need to scroll.\n if (dataLength * size < containerWidth)\n return 0;\n\n // Disable the \"overscroll\" effect\n return dataLength * size - containerWidth;\n }\n\n return dataLength * size;\n }, [loop, size, dataLength, overscrollEnabled]);\n\n const withSpring = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n \"worklet\";\n const defaultWithAnimation: WithTimingAnimation = {\n type: \"timing\",\n config: {\n duration: scrollAnimationDuration + 100,\n easing: Easing.easeOutQuart,\n },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n (isFinished: boolean) => {\n \"worklet\";\n if (isFinished)\n onFinished && runOnJS(onFinished)();\n },\n );\n },\n [scrollAnimationDuration, withAnimation],\n );\n\n const endWithSpring = React.useCallback(\n (onFinished?: () => void) => {\n \"worklet\";\n const origin = translation.value;\n const velocity = scrollEndVelocity.value;\n // Default to scroll in the direction of the slide (with deceleration)\n let finalTranslation: number = withDecay({ velocity, deceleration: 0.999 });\n\n // If the distance of the swipe exceeds the max scroll distance, keep the view at the current position\n if (maxScrollDistancePerSwipeIsSet && Math.abs(scrollEndTranslation.value) > maxScrollDistancePerSwipe) {\n finalTranslation = origin;\n }\n else {\n /**\n * The page size is the same as the item size.\n * If direction is vertical, the page size is the height of the item.\n * If direction is horizontal, the page size is the width of the item.\n *\n * `page size` equals to `size` variable.\n * */\n if (pagingEnabled) {\n // distance with direction\n const offset = -(scrollEndTranslation.value >= 0 ? 1 : -1); // 1 or -1\n const computed = offset < 0 ? Math.ceil : Math.floor;\n const page = computed(-translation.value / size);\n\n if (loop) {\n const finalPage = page + offset;\n finalTranslation = withSpring(withProcessTranslation(-finalPage * size), onFinished);\n }\n else {\n const finalPage = Math.min(maxPage - 1, Math.max(0, page + offset));\n finalTranslation = withSpring(withProcessTranslation(-finalPage * size), onFinished);\n }\n }\n\n if (!pagingEnabled && snapEnabled) {\n // scroll to the nearest item\n const nextPage = Math.round((origin + velocity * 0.4) / size) * size;\n finalTranslation = withSpring(withProcessTranslation(nextPage), onFinished);\n }\n }\n\n translation.value = finalTranslation;\n\n function withProcessTranslation(translation: number) {\n if (!loop && !overscrollEnabled) {\n const limit = getLimit();\n const sign = Math.sign(translation);\n return sign * Math.max(0, Math.min(limit, Math.abs(translation)));\n }\n\n return translation;\n }\n },\n [\n withSpring,\n size,\n maxPage,\n loop,\n snapEnabled,\n translation,\n pagingEnabled,\n scrollEndVelocity.value,\n maxScrollDistancePerSwipe,\n scrollEndTranslation.value,\n maxScrollDistancePerSwipeIsSet,\n ],\n );\n\n const onFinish = React.useCallback(\n (isFinished: boolean) => {\n \"worklet\";\n if (isFinished) {\n touching.value = false;\n onScrollEnd && runOnJS(onScrollEnd)();\n }\n },\n [onScrollEnd, touching],\n );\n\n const activeDecay = React.useCallback(() => {\n \"worklet\";\n touching.value = true;\n translation.value = withDecay(\n { velocity: scrollEndVelocity.value },\n isFinished => onFinish(isFinished as boolean),\n );\n }, [onFinish, scrollEndVelocity.value, touching, translation]);\n\n const resetBoundary = React.useCallback(() => {\n \"worklet\";\n if (touching.value)\n return;\n\n if (translation.value > 0) {\n if (scrollEndTranslation.value < 0) {\n activeDecay();\n return;\n }\n if (!loop) {\n translation.value = withSpring(0);\n return;\n }\n }\n\n if (translation.value < -((maxPage - 1) * size)) {\n if (scrollEndTranslation.value > 0) {\n activeDecay();\n return;\n }\n if (!loop)\n translation.value = withSpring(-((maxPage - 1) * size));\n }\n }, [\n touching.value,\n translation,\n maxPage,\n size,\n scrollEndTranslation.value,\n loop,\n activeDecay,\n withSpring,\n ]);\n\n useAnimatedReaction(\n () => translation.value,\n () => {\n if (!pagingEnabled)\n resetBoundary();\n },\n [pagingEnabled, resetBoundary],\n );\n\n function withProcessTranslation(translation: number) {\n \"worklet\";\n\n if (!loop && !overscrollEnabled) {\n const limit = getLimit();\n const sign = Math.sign(translation);\n return sign * Math.max(0, Math.min(limit, Math.abs(translation)));\n }\n\n return translation;\n }\n\n const onGestureStart = useCallback((_: PanGestureHandlerEventPayload) => {\n \"worklet\";\n\n touching.value = true;\n validStart.value = true;\n onScrollStart && runOnJS(onScrollStart)();\n\n max.value = (maxPage - 1) * size;\n if (!loop && !overscrollEnabled)\n max.value = getLimit();\n\n panOffset.value = translation.value;\n }, [\n max,\n size,\n maxPage,\n loop,\n touching,\n panOffset,\n validStart,\n translation,\n overscrollEnabled,\n getLimit,\n onScrollStart,\n ]);\n\n const onGestureUpdate = useCallback((e: PanGestureHandlerEventPayload) => {\n \"worklet\";\n\n if (validStart.value) {\n validStart.value = false;\n cancelAnimation(translation);\n }\n touching.value = true;\n const { translationX, translationY } = e;\n\n let panTranslation = isHorizontal.value\n ? translationX\n : translationY;\n\n if (fixedDirection === \"negative\")\n panTranslation = -Math.abs(panTranslation);\n\n else if (fixedDirection === \"positive\")\n panTranslation = +Math.abs(panTranslation);\n\n if (!loop) {\n if ((translation.value > 0 || translation.value < -max.value)) {\n const boundary = translation.value > 0 ? 0 : -max.value;\n const fixed = boundary - panOffset.value;\n const dynamic = panTranslation - fixed;\n translation.value = boundary + dynamic * 0.5;\n return;\n }\n }\n\n const translationValue = panOffset.value + panTranslation;\n translation.value = translationValue;\n }, [\n isHorizontal,\n max,\n panOffset,\n loop,\n overscrollEnabled,\n fixedDirection,\n translation,\n validStart,\n touching,\n ]);\n\n const onGestureEnd = useCallback((e: GestureStateChangeEvent<PanGestureHandlerEventPayload>, _success: boolean) => {\n \"worklet\";\n\n const { velocityX, velocityY, translationX, translationY } = e;\n scrollEndVelocity.value = isHorizontal.value\n ? velocityX\n : velocityY;\n\n let panTranslation = isHorizontal.value\n ? translationX\n : translationY;\n\n if (fixedDirection === \"negative\")\n panTranslation = -Math.abs(panTranslation);\n\n else if (fixedDirection === \"positive\")\n panTranslation = +Math.abs(panTranslation);\n\n scrollEndTranslation.value = panTranslation;\n\n const totalTranslation = scrollEndVelocity.value + scrollEndTranslation.value;\n\n /**\n * If the maximum scroll distance is set and the translation `exceeds the maximum scroll distance`,\n * the carousel will keep the view at the current position.\n */\n if (\n maxScrollDistancePerSwipeIsSet && Math.abs(totalTranslation) > maxScrollDistancePerSwipe\n ) {\n const nextPage = Math.round((panOffset.value + maxScrollDistancePerSwipe * Math.sign(totalTranslation)) / size) * size;\n translation.value = withSpring(withProcessTranslation(nextPage), onScrollEnd);\n }\n /**\n * If the minimum scroll distance is set and the translation `didn't exceeds the minimum scroll distance`,\n * the carousel will keep the view at the current position.\n */\n else if (\n minScrollDistancePerSwipeIsSet && Math.abs(totalTranslation) < minScrollDistancePerSwipe\n ) {\n const nextPage = Math.round((panOffset.value + minScrollDistancePerSwipe * Math.sign(totalTranslation)) / size) * size;\n translation.value = withSpring(withProcessTranslation(nextPage), onScrollEnd);\n }\n else {\n endWithSpring(onScrollEnd);\n }\n\n if (!loop)\n touching.value = false;\n }, [\n size,\n loop,\n touching,\n panOffset,\n translation,\n isHorizontal,\n scrollEndVelocity,\n scrollEndTranslation,\n fixedDirection,\n maxScrollDistancePerSwipeIsSet,\n maxScrollDistancePerSwipe,\n maxScrollDistancePerSwipeIsSet,\n minScrollDistancePerSwipe,\n endWithSpring,\n withSpring,\n onScrollEnd,\n ]);\n\n const gesture = usePanGestureProxy({\n onConfigurePanGesture,\n onGestureStart,\n onGestureUpdate,\n onGestureEnd,\n options: { enabled },\n });\n\n return (\n <GestureDetector gesture={gesture}>\n <Animated.View\n ref={containerRef}\n testID={testID}\n style={style}\n onTouchStart={onTouchBegin}\n onTouchEnd={onTouchEnd}\n >\n {props.children}\n </Animated.View>\n </GestureDetector>\n );\n};\n\nexport const ScrollViewGesture = IScrollViewGesture;\n"]}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ var _react = _interopRequireDefault(require("react"));
4
+
5
+ var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
6
+
7
+ var _reactTestRenderer = _interopRequireDefault(require("react-test-renderer"));
8
+
9
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
10
+
11
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
12
+
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+
15
+ describe("useSharedValue", () => {
16
+ it("retains value on rerender", () => {
17
+ const initialValue = 0;
18
+ const updatedValue = 1;
19
+
20
+ const TestComponent = props => {
21
+ const opacity = (0, _reactNativeReanimated.useDerivedValue)(() => props.value, [props.value]);
22
+ const animatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => ({
23
+ opacity: opacity.value
24
+ }), [opacity]);
25
+ return /*#__PURE__*/_react.default.createElement(_reactNativeReanimated.default.View, {
26
+ style: animatedStyle
27
+ });
28
+ }; // When rendering with initial value
29
+
30
+
31
+ const wrapper = _reactTestRenderer.default.create( /*#__PURE__*/_react.default.createElement(TestComponent, {
32
+ key: "box",
33
+ value: initialValue
34
+ }));
35
+
36
+ expect(typeof wrapper.root.children[0] !== "string" ? wrapper.root.children[0].props.style.animatedStyle.current.value.opacity : false).toBe(initialValue); // When rendering with updated value
37
+
38
+ wrapper.update( /*#__PURE__*/_react.default.createElement(TestComponent, {
39
+ key: "box",
40
+ value: updatedValue
41
+ }));
42
+ expect(typeof wrapper.root.children[0] !== "string" ? wrapper.root.children[0].props.style.animatedStyle.current.value.opacity : false).toBe(initialValue);
43
+ });
44
+ });
45
+ //# sourceMappingURL=rnr-demo.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["rnr-demo.test.tsx"],"names":["describe","it","initialValue","updatedValue","TestComponent","props","opacity","value","animatedStyle","wrapper","renderer","create","expect","root","children","style","current","toBe","update"],"mappings":";;AACA;;AACA;;AACA;;;;;;;;AAEAA,QAAQ,CAAC,gBAAD,EAAmB,MAAM;AAC/BC,EAAAA,EAAE,CAAC,2BAAD,EAA8B,MAAM;AACpC,UAAMC,YAAY,GAAG,CAArB;AACA,UAAMC,YAAY,GAAG,CAArB;;AAOA,UAAMC,aAAwB,GAAIC,KAAD,IAAW;AAC1C,YAAMC,OAAO,GAAG,4CAAgB,MAAMD,KAAK,CAACE,KAA5B,EAAmC,CAACF,KAAK,CAACE,KAAP,CAAnC,CAAhB;AACA,YAAMC,aAAa,GAAG,6CAAiB,OAAO;AAC5CF,QAAAA,OAAO,EAAEA,OAAO,CAACC;AAD2B,OAAP,CAAjB,EAElB,CAACD,OAAD,CAFkB,CAAtB;AAIA,0BAAO,6BAAC,8BAAD,CAAU,IAAV;AAAe,QAAA,KAAK,EAAEE;AAAtB,QAAP;AACD,KAPD,CAToC,CAkBpC;;;AACA,UAAMC,OAAO,GAAGC,2BAASC,MAAT,eAAgB,6BAAC,aAAD;AAAe,MAAA,GAAG,EAAC,KAAnB;AAAyB,MAAA,KAAK,EAAET;AAAhC,MAAhB,CAAhB;;AAEAU,IAAAA,MAAM,CACJ,OAAOH,OAAO,CAACI,IAAR,CAAaC,QAAb,CAAsB,CAAtB,CAAP,KAAoC,QAApC,GACIL,OAAO,CAACI,IAAR,CAAaC,QAAb,CAAsB,CAAtB,EAAyBT,KAAzB,CAA+BU,KAA/B,CAAqCP,aAArC,CAAmDQ,OAAnD,CAA2DT,KAA3D,CAAiED,OADrE,GAEI,KAHA,CAAN,CAIEW,IAJF,CAIOf,YAJP,EArBoC,CA2BpC;;AACAO,IAAAA,OAAO,CAACS,MAAR,eAAe,6BAAC,aAAD;AAAe,MAAA,GAAG,EAAC,KAAnB;AAAyB,MAAA,KAAK,EAAEf;AAAhC,MAAf;AAEAS,IAAAA,MAAM,CACJ,OAAOH,OAAO,CAACI,IAAR,CAAaC,QAAb,CAAsB,CAAtB,CAAP,KAAoC,QAApC,GACIL,OAAO,CAACI,IAAR,CAAaC,QAAb,CAAsB,CAAtB,EAAyBT,KAAzB,CAA+BU,KAA/B,CAAqCP,aAArC,CAAmDQ,OAAnD,CAA2DT,KAA3D,CAAiED,OADrE,GAEI,KAHA,CAAN,CAIEW,IAJF,CAIOf,YAJP;AAKD,GAnCC,CAAF;AAoCD,CArCO,CAAR","sourcesContent":["import type { FC } from \"react\";\nimport React from \"react\";\nimport Animated, { useAnimatedStyle, useDerivedValue } from \"react-native-reanimated\";\nimport renderer from \"react-test-renderer\";\n\ndescribe(\"useSharedValue\", () => {\n it(\"retains value on rerender\", () => {\n const initialValue = 0;\n const updatedValue = 1;\n\n interface Props {\n key: string\n value: number\n }\n\n const TestComponent: FC<Props> = (props) => {\n const opacity = useDerivedValue(() => props.value, [props.value]);\n const animatedStyle = useAnimatedStyle(() => ({\n opacity: opacity.value,\n }), [opacity]);\n\n return <Animated.View style={animatedStyle} />;\n };\n\n // When rendering with initial value\n const wrapper = renderer.create(<TestComponent key=\"box\" value={initialValue} />);\n\n expect(\n typeof wrapper.root.children[0] !== \"string\"\n ? wrapper.root.children[0].props.style.animatedStyle.current.value.opacity\n : false,\n ).toBe(initialValue);\n\n // When rendering with updated value\n wrapper.update(<TestComponent key=\"box\" value={updatedValue} />);\n\n expect(\n typeof wrapper.root.children[0] !== \"string\"\n ? wrapper.root.children[0].props.style.animatedStyle.current.value.opacity\n : false,\n ).toBe(initialValue);\n });\n});\n"]}
@@ -1,2 +1,22 @@
1
- Object.defineProperty(exports,"__esModule",{value:true});exports.Easing=exports.DATA_LENGTH=void 0;var _reactNativeReanimated=require("react-native-reanimated");var DATA_LENGTH;exports.DATA_LENGTH=DATA_LENGTH;(function(DATA_LENGTH){DATA_LENGTH[DATA_LENGTH["SINGLE_ITEM"]=1]="SINGLE_ITEM";DATA_LENGTH[DATA_LENGTH["DOUBLE_ITEM"]=2]="DOUBLE_ITEM";})(DATA_LENGTH||(exports.DATA_LENGTH=DATA_LENGTH={}));var Easing={easeOutQuart:_reactNativeReanimated.Easing.bezier(0.25,1,0.5,1)};exports.Easing=Easing;
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Easing = exports.DATA_LENGTH = void 0;
7
+
8
+ var _reactNativeReanimated = require("react-native-reanimated");
9
+
10
+ let DATA_LENGTH;
11
+ exports.DATA_LENGTH = DATA_LENGTH;
12
+
13
+ (function (DATA_LENGTH) {
14
+ DATA_LENGTH[DATA_LENGTH["SINGLE_ITEM"] = 1] = "SINGLE_ITEM";
15
+ DATA_LENGTH[DATA_LENGTH["DOUBLE_ITEM"] = 2] = "DOUBLE_ITEM";
16
+ })(DATA_LENGTH || (exports.DATA_LENGTH = DATA_LENGTH = {}));
17
+
18
+ const Easing = {
19
+ easeOutQuart: _reactNativeReanimated.Easing.bezier(0.25, 1, 0.5, 1)
20
+ };
21
+ exports.Easing = Easing;
2
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":["DATA_LENGTH","Easing","easeOutQuart","_Easing","bezier"],"mappings":"mGACA,8D,GAEYA,CAAAA,W,2CAAAA,W,EAAAA,W,CAAAA,W,iCAAAA,W,CAAAA,W,oCAAAA,W,uBAAAA,W,MAKL,GAAMC,CAAAA,MAAM,CAAG,CACpBC,YAAY,CAAEC,8BAAQC,MAAR,CACZ,IADY,CAEZ,CAFY,CAGZ,GAHY,CAIZ,CAJY,CADM,CAAf,C","sourcesContent":["import type Animated from \"react-native-reanimated\";\nimport { Easing as _Easing } from \"react-native-reanimated\";\n\nexport enum DATA_LENGTH {\n SINGLE_ITEM = 1,\n DOUBLE_ITEM = 2,\n}\n\nexport const Easing = {\n easeOutQuart: _Easing.bezier(\n 0.25,\n 1,\n 0.5,\n 1,\n ) as unknown as Animated.EasingFunction,\n};\n"]}
1
+ {"version":3,"sources":["index.ts"],"names":["DATA_LENGTH","Easing","easeOutQuart","_Easing","bezier"],"mappings":";;;;;;;AACA;;IAEYA,W;;;WAAAA,W;AAAAA,EAAAA,W,CAAAA,W;AAAAA,EAAAA,W,CAAAA,W;GAAAA,W,2BAAAA,W;;AAKL,MAAMC,MAAM,GAAG;AACpBC,EAAAA,YAAY,EAAEC,8BAAQC,MAAR,CACZ,IADY,EAEZ,CAFY,EAGZ,GAHY,EAIZ,CAJY;AADM,CAAf","sourcesContent":["import type Animated from \"react-native-reanimated\";\nimport { Easing as _Easing } from \"react-native-reanimated\";\n\nexport enum DATA_LENGTH {\n SINGLE_ITEM = 1,\n DOUBLE_ITEM = 2,\n}\n\nexport const Easing = {\n easeOutQuart: _Easing.bezier(\n 0.25,\n 1,\n 0.5,\n 1,\n ) as unknown as Animated.EasingFunction,\n};\n"]}
@@ -1,2 +1,57 @@
1
- Object.defineProperty(exports,"__esModule",{value:true});exports.useAutoPlay=useAutoPlay;var React=_interopRequireWildcard(require("react"));function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}function useAutoPlay(opts){var _opts$autoPlay=opts.autoPlay,autoPlay=_opts$autoPlay===void 0?false:_opts$autoPlay,_opts$autoPlayReverse=opts.autoPlayReverse,autoPlayReverse=_opts$autoPlayReverse===void 0?false:_opts$autoPlayReverse,autoPlayInterval=opts.autoPlayInterval,carouselController=opts.carouselController;var prev=carouselController.prev,next=carouselController.next;var timer=React.useRef();var stopped=React.useRef(!autoPlay);var play=React.useCallback(function(){if(stopped.current)return;timer.current&&clearTimeout(timer.current);timer.current=setTimeout(function(){autoPlayReverse?prev({onFinished:play}):next({onFinished:play});},autoPlayInterval);},[autoPlayReverse,autoPlayInterval,prev,next]);var pause=React.useCallback(function(){if(!autoPlay)return;timer.current&&clearTimeout(timer.current);stopped.current=true;},[autoPlay]);var start=React.useCallback(function(){if(!autoPlay)return;stopped.current=false;play();},[play,autoPlay]);React.useEffect(function(){if(autoPlay)start();else pause();return pause;},[pause,start,autoPlay]);return{pause:pause,start:start};}
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useAutoPlay = useAutoPlay;
7
+
8
+ var React = _interopRequireWildcard(require("react"));
9
+
10
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
11
+
12
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
13
+
14
+ function useAutoPlay(opts) {
15
+ const {
16
+ autoPlay = false,
17
+ autoPlayReverse = false,
18
+ autoPlayInterval,
19
+ carouselController
20
+ } = opts;
21
+ const {
22
+ prev,
23
+ next
24
+ } = carouselController;
25
+ const timer = React.useRef();
26
+ const stopped = React.useRef(!autoPlay);
27
+ const play = React.useCallback(() => {
28
+ if (stopped.current) return;
29
+ timer.current && clearTimeout(timer.current);
30
+ timer.current = setTimeout(() => {
31
+ autoPlayReverse ? prev({
32
+ onFinished: play
33
+ }) : next({
34
+ onFinished: play
35
+ });
36
+ }, autoPlayInterval);
37
+ }, [autoPlayReverse, autoPlayInterval, prev, next]);
38
+ const pause = React.useCallback(() => {
39
+ if (!autoPlay) return;
40
+ timer.current && clearTimeout(timer.current);
41
+ stopped.current = true;
42
+ }, [autoPlay]);
43
+ const start = React.useCallback(() => {
44
+ if (!autoPlay) return;
45
+ stopped.current = false;
46
+ play();
47
+ }, [play, autoPlay]);
48
+ React.useEffect(() => {
49
+ if (autoPlay) start();else pause();
50
+ return pause;
51
+ }, [pause, start, autoPlay]);
52
+ return {
53
+ pause,
54
+ start
55
+ };
56
+ }
2
57
  //# sourceMappingURL=useAutoPlay.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["useAutoPlay.ts"],"names":["useAutoPlay","opts","autoPlay","autoPlayReverse","autoPlayInterval","carouselController","prev","next","timer","React","useRef","stopped","play","useCallback","current","clearTimeout","setTimeout","onFinished","pause","start","useEffect"],"mappings":"yFAAA,oD,0/BAIO,QAASA,CAAAA,WAAT,CAAqBC,IAArB,CAKJ,CACD,mBAKIA,IALJ,CACEC,QADF,CACEA,QADF,yBACa,KADb,sCAKID,IALJ,CAEEE,eAFF,CAEEA,eAFF,gCAEoB,KAFpB,uBAGEC,gBAHF,CAKIH,IALJ,CAGEG,gBAHF,CAIEC,kBAJF,CAKIJ,IALJ,CAIEI,kBAJF,CAOA,GAAQC,CAAAA,IAAR,CAAuBD,kBAAvB,CAAQC,IAAR,CAAcC,IAAd,CAAuBF,kBAAvB,CAAcE,IAAd,CACA,GAAMC,CAAAA,KAAK,CAAGC,KAAK,CAACC,MAAN,EAAd,CACA,GAAMC,CAAAA,OAAO,CAAGF,KAAK,CAACC,MAAN,CAAsB,CAACR,QAAvB,CAAhB,CAEA,GAAMU,CAAAA,IAAI,CAAGH,KAAK,CAACI,WAAN,CAAkB,UAAM,CACnC,GAAIF,OAAO,CAACG,OAAZ,CACE,OAEFN,KAAK,CAACM,OAAN,EAAiBC,YAAY,CAACP,KAAK,CAACM,OAAP,CAA7B,CACAN,KAAK,CAACM,OAAN,CAAgBE,UAAU,CAAC,UAAM,CAC/Bb,eAAe,CACXG,IAAI,CAAC,CAAEW,UAAU,CAAEL,IAAd,CAAD,CADO,CAEXL,IAAI,CAAC,CAAEU,UAAU,CAAEL,IAAd,CAAD,CAFR,CAGD,CAJyB,CAIvBR,gBAJuB,CAA1B,CAKD,CAVY,CAUV,CAACD,eAAD,CAAkBC,gBAAlB,CAAoCE,IAApC,CAA0CC,IAA1C,CAVU,CAAb,CAYA,GAAMW,CAAAA,KAAK,CAAGT,KAAK,CAACI,WAAN,CAAkB,UAAM,CACpC,GAAI,CAACX,QAAL,CACE,OAEFM,KAAK,CAACM,OAAN,EAAiBC,YAAY,CAACP,KAAK,CAACM,OAAP,CAA7B,CACAH,OAAO,CAACG,OAAR,CAAkB,IAAlB,CACD,CANa,CAMX,CAACZ,QAAD,CANW,CAAd,CAQA,GAAMiB,CAAAA,KAAK,CAAGV,KAAK,CAACI,WAAN,CAAkB,UAAM,CACpC,GAAI,CAACX,QAAL,CACE,OAEFS,OAAO,CAACG,OAAR,CAAkB,KAAlB,CACAF,IAAI,GACL,CANa,CAMX,CAACA,IAAD,CAAOV,QAAP,CANW,CAAd,CAQAO,KAAK,CAACW,SAAN,CAAgB,UAAM,CACpB,GAAIlB,QAAJ,CACEiB,KAAK,GADP,IAGED,CAAAA,KAAK,GAEP,MAAOA,CAAAA,KAAP,CACD,CAPD,CAOG,CAACA,KAAD,CAAQC,KAAR,CAAejB,QAAf,CAPH,EASA,MAAO,CACLgB,KAAK,CAALA,KADK,CAELC,KAAK,CAALA,KAFK,CAAP,CAID","sourcesContent":["import * as React from \"react\";\n\nimport type { ICarouselController } from \"./useCarouselController\";\n\nexport function useAutoPlay(opts: {\n autoPlay?: boolean\n autoPlayInterval?: number\n autoPlayReverse?: boolean\n carouselController: ICarouselController\n}) {\n const {\n autoPlay = false,\n autoPlayReverse = false,\n autoPlayInterval,\n carouselController,\n } = opts;\n\n const { prev, next } = carouselController;\n const timer = React.useRef<ReturnType<typeof setTimeout>>();\n const stopped = React.useRef<boolean>(!autoPlay);\n\n const play = React.useCallback(() => {\n if (stopped.current)\n return;\n\n timer.current && clearTimeout(timer.current);\n timer.current = setTimeout(() => {\n autoPlayReverse\n ? prev({ onFinished: play })\n : next({ onFinished: play });\n }, autoPlayInterval);\n }, [autoPlayReverse, autoPlayInterval, prev, next]);\n\n const pause = React.useCallback(() => {\n if (!autoPlay)\n return;\n\n timer.current && clearTimeout(timer.current);\n stopped.current = true;\n }, [autoPlay]);\n\n const start = React.useCallback(() => {\n if (!autoPlay)\n return;\n\n stopped.current = false;\n play();\n }, [play, autoPlay]);\n\n React.useEffect(() => {\n if (autoPlay)\n start();\n else\n pause();\n\n return pause;\n }, [pause, start, autoPlay]);\n\n return {\n pause,\n start,\n };\n}\n"]}
1
+ {"version":3,"sources":["useAutoPlay.ts"],"names":["useAutoPlay","opts","autoPlay","autoPlayReverse","autoPlayInterval","carouselController","prev","next","timer","React","useRef","stopped","play","useCallback","current","clearTimeout","setTimeout","onFinished","pause","start","useEffect"],"mappings":";;;;;;;AAAA;;;;;;AAIO,SAASA,WAAT,CAAqBC,IAArB,EAKJ;AACD,QAAM;AACJC,IAAAA,QAAQ,GAAG,KADP;AAEJC,IAAAA,eAAe,GAAG,KAFd;AAGJC,IAAAA,gBAHI;AAIJC,IAAAA;AAJI,MAKFJ,IALJ;AAOA,QAAM;AAAEK,IAAAA,IAAF;AAAQC,IAAAA;AAAR,MAAiBF,kBAAvB;AACA,QAAMG,KAAK,GAAGC,KAAK,CAACC,MAAN,EAAd;AACA,QAAMC,OAAO,GAAGF,KAAK,CAACC,MAAN,CAAsB,CAACR,QAAvB,CAAhB;AAEA,QAAMU,IAAI,GAAGH,KAAK,CAACI,WAAN,CAAkB,MAAM;AACnC,QAAIF,OAAO,CAACG,OAAZ,EACE;AAEFN,IAAAA,KAAK,CAACM,OAAN,IAAiBC,YAAY,CAACP,KAAK,CAACM,OAAP,CAA7B;AACAN,IAAAA,KAAK,CAACM,OAAN,GAAgBE,UAAU,CAAC,MAAM;AAC/Bb,MAAAA,eAAe,GACXG,IAAI,CAAC;AAAEW,QAAAA,UAAU,EAAEL;AAAd,OAAD,CADO,GAEXL,IAAI,CAAC;AAAEU,QAAAA,UAAU,EAAEL;AAAd,OAAD,CAFR;AAGD,KAJyB,EAIvBR,gBAJuB,CAA1B;AAKD,GAVY,EAUV,CAACD,eAAD,EAAkBC,gBAAlB,EAAoCE,IAApC,EAA0CC,IAA1C,CAVU,CAAb;AAYA,QAAMW,KAAK,GAAGT,KAAK,CAACI,WAAN,CAAkB,MAAM;AACpC,QAAI,CAACX,QAAL,EACE;AAEFM,IAAAA,KAAK,CAACM,OAAN,IAAiBC,YAAY,CAACP,KAAK,CAACM,OAAP,CAA7B;AACAH,IAAAA,OAAO,CAACG,OAAR,GAAkB,IAAlB;AACD,GANa,EAMX,CAACZ,QAAD,CANW,CAAd;AAQA,QAAMiB,KAAK,GAAGV,KAAK,CAACI,WAAN,CAAkB,MAAM;AACpC,QAAI,CAACX,QAAL,EACE;AAEFS,IAAAA,OAAO,CAACG,OAAR,GAAkB,KAAlB;AACAF,IAAAA,IAAI;AACL,GANa,EAMX,CAACA,IAAD,EAAOV,QAAP,CANW,CAAd;AAQAO,EAAAA,KAAK,CAACW,SAAN,CAAgB,MAAM;AACpB,QAAIlB,QAAJ,EACEiB,KAAK,GADP,KAGED,KAAK;AAEP,WAAOA,KAAP;AACD,GAPD,EAOG,CAACA,KAAD,EAAQC,KAAR,EAAejB,QAAf,CAPH;AASA,SAAO;AACLgB,IAAAA,KADK;AAELC,IAAAA;AAFK,GAAP;AAID","sourcesContent":["import * as React from \"react\";\n\nimport type { ICarouselController } from \"./useCarouselController\";\n\nexport function useAutoPlay(opts: {\n autoPlay?: boolean\n autoPlayInterval?: number\n autoPlayReverse?: boolean\n carouselController: ICarouselController\n}) {\n const {\n autoPlay = false,\n autoPlayReverse = false,\n autoPlayInterval,\n carouselController,\n } = opts;\n\n const { prev, next } = carouselController;\n const timer = React.useRef<ReturnType<typeof setTimeout>>();\n const stopped = React.useRef<boolean>(!autoPlay);\n\n const play = React.useCallback(() => {\n if (stopped.current)\n return;\n\n timer.current && clearTimeout(timer.current);\n timer.current = setTimeout(() => {\n autoPlayReverse\n ? prev({ onFinished: play })\n : next({ onFinished: play });\n }, autoPlayInterval);\n }, [autoPlayReverse, autoPlayInterval, prev, next]);\n\n const pause = React.useCallback(() => {\n if (!autoPlay)\n return;\n\n timer.current && clearTimeout(timer.current);\n stopped.current = true;\n }, [autoPlay]);\n\n const start = React.useCallback(() => {\n if (!autoPlay)\n return;\n\n stopped.current = false;\n play();\n }, [play, autoPlay]);\n\n React.useEffect(() => {\n if (autoPlay)\n start();\n else\n pause();\n\n return pause;\n }, [pause, start, autoPlay]);\n\n return {\n pause,\n start,\n };\n}\n"]}