react-native-reanimated-carousel 2.4.0 → 2.6.0
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.
- package/README.md +17 -62
- package/README.zh-CN.md +22 -60
- package/lib/commonjs/Carousel.js +1 -1
- package/lib/commonjs/Carousel.js.map +1 -1
- package/lib/commonjs/ScrollViewGesture.js +1 -1
- package/lib/commonjs/ScrollViewGesture.js.map +1 -1
- package/lib/commonjs/hooks/useCarouselController.js +1 -1
- package/lib/commonjs/hooks/useCarouselController.js.map +1 -1
- package/lib/commonjs/hooks/useOffsetX.js +1 -1
- package/lib/commonjs/hooks/useOffsetX.js.map +1 -1
- package/lib/commonjs/hooks/useOnProgressChange.js +1 -1
- package/lib/commonjs/hooks/useOnProgressChange.js.map +1 -1
- package/lib/commonjs/hooks/useVisibleRanges.js +1 -1
- package/lib/commonjs/hooks/useVisibleRanges.js.map +1 -1
- package/lib/commonjs/index.js +1 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/layouts/BaseLayout.js +1 -1
- package/lib/commonjs/layouts/BaseLayout.js.map +1 -1
- package/lib/commonjs/layouts/ParallaxLayout.js +1 -1
- package/lib/commonjs/layouts/ParallaxLayout.js.map +1 -1
- package/lib/commonjs/layouts/normal.js +1 -1
- package/lib/commonjs/layouts/normal.js.map +1 -1
- package/lib/commonjs/layouts/parallax.js +1 -1
- package/lib/commonjs/layouts/parallax.js.map +1 -1
- package/lib/commonjs/layouts/stack.js +1 -1
- package/lib/commonjs/layouts/stack.js.map +1 -1
- package/lib/commonjs/utils/computedWithAutoFillData.js +1 -1
- package/lib/commonjs/utils/computedWithAutoFillData.js.map +1 -1
- package/lib/commonjs/utils/dealWithAnimation.js +1 -1
- package/lib/commonjs/utils/dealWithAnimation.js.map +1 -1
- package/lib/commonjs/utils/log.js +1 -1
- package/lib/module/Carousel.js +11 -9
- package/lib/module/Carousel.js.map +1 -1
- package/lib/module/hooks/useCarouselController.js +24 -11
- package/lib/module/hooks/useCarouselController.js.map +1 -1
- package/lib/module/index.js +6 -0
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/hooks/useCarouselController.d.ts +0 -1
- package/lib/typescript/types.d.ts +5 -9
- package/package.json +1 -1
- package/src/Carousel.tsx +19 -13
- package/src/hooks/useCarouselController.tsx +18 -12
- package/src/index.tsx +4 -0
- package/src/types.ts +5 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["stack.ts"],"names":["screen","Dimensions","get","horizontalStackLayout","modeConfig","_value","showLength","snapDirection","moveSize","width","stackInterval","scaleInterval","opacityInterval","rotateZDeg","transform","getCommonVariables","value","validLength","inputRange","getCommonStyles","zIndex","opacity","styles","translateX","scale","rotateZ","Extrapolate","CLAMP","push","interpolate","useHorizontalStackLayout","customAnimationConfig","customConfig","config","type","viewCount","layout","verticalStackLayout","translateY","opts","easeInOutCubic","v","Math","pow","page","floor","abs","diff","Error","Number","MIN_VALUE"],"mappings":"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","sourcesContent":["import { useMemo } from 'react';\nimport { Dimensions, TransformsStyle, ViewStyle } from 'react-native';\nimport { Extrapolate, interpolate } from 'react-native-reanimated';\nimport type { ComputedDirectionTypes, CustomConfig } from '../types';\n\nconst screen = Dimensions.get('window');\n\nexport interface ILayoutConfig {\n showLength?: number;\n moveSize?: number;\n stackInterval?: number;\n scaleInterval?: number;\n opacityInterval?: number;\n rotateZDeg?: number;\n snapDirection?: 'left' | 'right';\n}\n\nexport type TStackModeProps = ComputedDirectionTypes<{\n /**\n * Carousel Animated transitions.\n */\n mode?: 'horizontal-stack' | 'vertical-stack';\n /**\n * Stack animation style.\n * @default\n * mode: 'vertical',\n * snapDirection: 'right',\n * moveSize: window.width,\n * stackInterval: 30,\n * scaleInterval: 0.08,\n * rotateZDeg: 135,\n */\n modeConfig?: ILayoutConfig;\n}>;\n\nexport function horizontalStackLayout(modeConfig: ILayoutConfig = {}) {\n return (_value: number) => {\n 'worklet';\n\n const {\n showLength,\n snapDirection = 'left',\n moveSize = screen.width,\n stackInterval = 18,\n scaleInterval = 0.04,\n opacityInterval = 0.1,\n rotateZDeg = 30,\n } = modeConfig;\n\n const transform: TransformsStyle['transform'] = [];\n const { validLength, value, inputRange } = getCommonVariables({\n showLength: showLength!,\n value: _value,\n snapDirection,\n });\n const { zIndex, opacity } = getCommonStyles({\n validLength,\n value,\n opacityInterval,\n snapDirection,\n });\n\n const styles: ViewStyle = {\n transform,\n zIndex,\n opacity,\n };\n\n let translateX: number;\n let scale: number;\n let rotateZ: string;\n\n if (snapDirection === 'left') {\n translateX = interpolate(\n value,\n inputRange,\n [-moveSize, 0, validLength * stackInterval],\n Extrapolate.CLAMP\n );\n scale = interpolate(\n value,\n inputRange,\n [1, 1, 1 - validLength * scaleInterval],\n Extrapolate.CLAMP\n );\n rotateZ = `${interpolate(\n value,\n inputRange,\n [-rotateZDeg, 0, 0],\n Extrapolate.CLAMP\n )}deg`;\n } else if (snapDirection === 'right') {\n translateX = interpolate(\n value,\n inputRange,\n [-validLength * stackInterval, 0, moveSize],\n Extrapolate.CLAMP\n );\n scale = interpolate(\n value,\n inputRange,\n [1 - validLength * scaleInterval, 1, 1],\n Extrapolate.CLAMP\n );\n rotateZ = `${interpolate(\n value,\n inputRange,\n [0, 0, rotateZDeg],\n Extrapolate.CLAMP\n )}deg`;\n }\n\n transform.push(\n {\n translateX: translateX!,\n },\n {\n scale: scale!,\n },\n {\n rotateZ: rotateZ!,\n }\n );\n\n return styles;\n };\n}\n\nexport function useHorizontalStackLayout(\n customAnimationConfig: ILayoutConfig = {},\n customConfig: CustomConfig = {}\n) {\n const config = useMemo(\n () => ({\n type:\n customAnimationConfig.snapDirection === 'right'\n ? 'negative'\n : 'positive',\n viewCount: customAnimationConfig.showLength,\n ...customConfig,\n }),\n [customAnimationConfig, customConfig]\n );\n\n return {\n layout: horizontalStackLayout(customAnimationConfig),\n config,\n };\n}\n\nexport function verticalStackLayout(modeConfig: ILayoutConfig = {}) {\n return (_value: number) => {\n 'worklet';\n\n const {\n showLength,\n snapDirection = 'left',\n moveSize = screen.width,\n stackInterval = 18,\n scaleInterval = 0.04,\n opacityInterval = 0.1,\n rotateZDeg = 30,\n } = modeConfig;\n const transform: TransformsStyle['transform'] = [];\n const { validLength, value, inputRange } = getCommonVariables({\n showLength: showLength!,\n value: _value,\n snapDirection,\n });\n const { zIndex, opacity } = getCommonStyles({\n validLength,\n value,\n opacityInterval,\n snapDirection,\n });\n\n const styles: ViewStyle = {\n transform,\n zIndex,\n opacity,\n };\n\n let translateX: number;\n let scale: number;\n let rotateZ: string;\n let translateY: number;\n\n if (snapDirection === 'left') {\n translateX = interpolate(\n value,\n inputRange,\n [-moveSize, 0, 0],\n Extrapolate.CLAMP\n );\n scale = interpolate(\n value,\n inputRange,\n [1, 1, 1 - validLength * scaleInterval],\n Extrapolate.CLAMP\n );\n rotateZ = `${interpolate(\n value,\n inputRange,\n [-rotateZDeg, 0, 0],\n Extrapolate.CLAMP\n )}deg`;\n translateY = interpolate(\n value,\n inputRange,\n [0, 0, validLength * stackInterval],\n Extrapolate.CLAMP\n );\n } else if (snapDirection === 'right') {\n translateX = interpolate(\n value,\n inputRange,\n [0, 0, moveSize],\n Extrapolate.CLAMP\n );\n scale = interpolate(\n value,\n inputRange,\n [1 - validLength * scaleInterval, 1, 1],\n Extrapolate.CLAMP\n );\n rotateZ = `${interpolate(\n value,\n inputRange,\n [0, 0, rotateZDeg],\n Extrapolate.CLAMP\n )}deg`;\n translateY = interpolate(\n value,\n inputRange,\n [validLength * stackInterval, 0, 0],\n Extrapolate.CLAMP\n );\n }\n\n transform.push(\n {\n translateX: translateX!,\n },\n {\n scale: scale!,\n },\n {\n rotateZ: rotateZ!,\n },\n {\n translateY: translateY!,\n }\n );\n\n return styles;\n };\n}\n\nfunction getCommonVariables(opts: {\n value: number;\n showLength: number;\n snapDirection: 'left' | 'right';\n}) {\n 'worklet';\n\n const { showLength, value: _value, snapDirection } = opts;\n function easeInOutCubic(v: number): number {\n return v < 0.5 ? 4 * v * v * v : 1 - Math.pow(-2 * v + 2, 3) / 2;\n }\n const page = Math.floor(Math.abs(_value));\n const diff = Math.abs(_value) % 1;\n const value =\n _value < 0\n ? -(page + easeInOutCubic(diff))\n : page + easeInOutCubic(diff);\n const validLength = showLength! - 1;\n\n let inputRange: [number, number, number];\n\n if (snapDirection === 'left') {\n inputRange = [-1, 0, validLength];\n } else if (snapDirection === 'right') {\n inputRange = [-validLength, 0, 1];\n } else {\n throw Error('snapDirection must be set to either left or right');\n }\n\n return {\n inputRange,\n validLength,\n value,\n };\n}\n\nfunction getCommonStyles(opts: {\n value: number;\n validLength: number;\n opacityInterval: number;\n snapDirection: 'left' | 'right';\n}) {\n 'worklet';\n\n const { snapDirection, validLength, value, opacityInterval } = opts;\n\n let zIndex: number;\n let opacity: number;\n\n if (snapDirection === 'left') {\n zIndex =\n Math.floor(\n interpolate(\n value,\n [-1.5, -1, -1 + Number.MIN_VALUE, 0, validLength],\n [\n Number.MIN_VALUE,\n validLength,\n validLength,\n validLength - 1,\n -1,\n ]\n ) * 10000\n ) / 100;\n\n opacity = interpolate(\n value,\n [-1, 0, validLength - 1, validLength],\n [0.25, 1, 1 - (validLength - 1) * opacityInterval, 0.25]\n );\n } else if (snapDirection === 'right') {\n zIndex =\n Math.floor(\n interpolate(\n value,\n [-validLength, 0, 1 - Number.MIN_VALUE, 1, 1.5],\n [\n 1,\n validLength - 1,\n validLength,\n validLength,\n Number.MIN_VALUE,\n ]\n ) * 10000\n ) / 100;\n opacity = interpolate(\n value,\n [-validLength, 1 - validLength, 0, 1],\n [0.25, 1 - (validLength - 1) * opacityInterval, 1, 0.25]\n );\n } else {\n throw Error('snapDirection must be set to either left or right');\n }\n\n return {\n zIndex,\n opacity,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["stack.ts"],"names":["screen","Dimensions","get","horizontalStackLayout","modeConfig","_value","showLength","snapDirection","moveSize","width","stackInterval","scaleInterval","opacityInterval","rotateZDeg","transform","getCommonVariables","value","validLength","inputRange","getCommonStyles","zIndex","opacity","styles","translateX","scale","rotateZ","Extrapolate","CLAMP","push","interpolate","useHorizontalStackLayout","customAnimationConfig","customConfig","config","type","viewCount","layout","verticalStackLayout","translateY","opts","easeInOutCubic","v","Math","pow","page","floor","abs","diff","Error","Number","MIN_VALUE"],"mappings":"wYAAA,4BACA,yCACA,8D,kxBAGA,GAAMA,CAAAA,MAAM,CAAGC,wBAAWC,GAAX,CAAe,QAAf,CAAf,CA8BO,QAASC,CAAAA,qBAAT,EAA+D,IAAhCC,CAAAA,UAAgC,2DAAJ,EAAI,CAClE,qCAAQC,MAAR,CAA2B,CAGvB,GACIC,CAAAA,UADJ,CAQIF,UARJ,CACIE,UADJ,uBAQIF,UARJ,CAEIG,aAFJ,CAEIA,aAFJ,gCAEoB,MAFpB,4CAQIH,UARJ,CAGII,QAHJ,CAGIA,QAHJ,+BAGeR,MAAM,CAACS,KAHtB,4CAQIL,UARJ,CAIIM,aAJJ,CAIIA,aAJJ,gCAIoB,EAJpB,6CAQIN,UARJ,CAKIO,aALJ,CAKIA,aALJ,gCAKoB,IALpB,6CAQIP,UARJ,CAMIQ,eANJ,CAMIA,eANJ,gCAMsB,GANtB,6CAQIR,UARJ,CAOIS,UAPJ,CAOIA,UAPJ,gCAOiB,EAPjB,uBAUA,GAAMC,CAAAA,SAAuC,CAAG,EAAhD,CACA,wBAA2CC,kBAAkB,CAAC,CAC1DT,UAAU,CAAEA,UAD8C,CAE1DU,KAAK,CAAEX,MAFmD,CAG1DE,aAAa,CAAbA,aAH0D,CAAD,CAA7D,CAAQU,WAAR,qBAAQA,WAAR,CAAqBD,KAArB,qBAAqBA,KAArB,CAA4BE,UAA5B,qBAA4BA,UAA5B,CAKA,qBAA4BC,eAAe,CAAC,CACxCF,WAAW,CAAXA,WADwC,CAExCD,KAAK,CAALA,KAFwC,CAGxCJ,eAAe,CAAfA,eAHwC,CAIxCL,aAAa,CAAbA,aAJwC,CAAD,CAA3C,CAAQa,MAAR,kBAAQA,MAAR,CAAgBC,OAAhB,kBAAgBA,OAAhB,CAOA,GAAMC,CAAAA,MAAiB,CAAG,CACtBR,SAAS,CAATA,SADsB,CAEtBM,MAAM,CAANA,MAFsB,CAGtBC,OAAO,CAAPA,OAHsB,CAA1B,CAMA,GAAIE,CAAAA,UAAJ,CACA,GAAIC,CAAAA,KAAJ,CACA,GAAIC,CAAAA,OAAJ,CAEA,GAAIlB,aAAa,GAAK,MAAtB,CAA8B,CAC1BgB,UAAU,CAAG,uCACTP,KADS,CAETE,UAFS,CAGT,CAAC,CAACV,QAAF,CAAY,CAAZ,CAAeS,WAAW,CAAGP,aAA7B,CAHS,CAITgB,mCAAYC,KAJH,CAAb,CAMAH,KAAK,CAAG,uCACJR,KADI,CAEJE,UAFI,CAGJ,CAAC,CAAD,CAAI,CAAJ,CAAO,EAAID,WAAW,CAAGN,aAAzB,CAHI,CAIJe,mCAAYC,KAJR,CAAR,CAMAF,OAAO,CAAM,uCACTT,KADS,CAETE,UAFS,CAGT,CAAC,CAACL,UAAF,CAAc,CAAd,CAAiB,CAAjB,CAHS,CAITa,mCAAYC,KAJH,CAAN,MAAP,CAMH,CAnBD,IAmBO,IAAIpB,aAAa,GAAK,OAAtB,CAA+B,CAClCgB,UAAU,CAAG,uCACTP,KADS,CAETE,UAFS,CAGT,CAAC,CAACD,WAAD,CAAeP,aAAhB,CAA+B,CAA/B,CAAkCF,QAAlC,CAHS,CAITkB,mCAAYC,KAJH,CAAb,CAMAH,KAAK,CAAG,uCACJR,KADI,CAEJE,UAFI,CAGJ,CAAC,EAAID,WAAW,CAAGN,aAAnB,CAAkC,CAAlC,CAAqC,CAArC,CAHI,CAIJe,mCAAYC,KAJR,CAAR,CAMAF,OAAO,CAAM,uCACTT,KADS,CAETE,UAFS,CAGT,CAAC,CAAD,CAAI,CAAJ,CAAOL,UAAP,CAHS,CAITa,mCAAYC,KAJH,CAAN,MAAP,CAMH,CAEDb,SAAS,CAACc,IAAV,CACI,CACIL,UAAU,CAAEA,UADhB,CADJ,CAII,CACIC,KAAK,CAAEA,KADX,CAJJ,CAOI,CACIC,OAAO,CAAEA,OADb,CAPJ,EAYA,MAAOH,CAAAA,MAAP,CACH,CAzFD,4BA/BWtB,MAAM,CAACS,KA+BlB,aA1BEL,UA0BF,oBApBEW,kBAoBF,iBAZEI,eAYF,aAUaU,kCAVb,oBAUgEH,mCAAYC,KAV5E,ujDA0FH,CAEM,QAASG,CAAAA,wBAAT,EAGL,IAFEC,CAAAA,qBAEF,2DAFyC,EAEzC,IADEC,CAAAA,YACF,2DAD+B,EAC/B,CACE,GAAMC,CAAAA,MAAM,CAAG,mBACX,iCACIC,IAAI,CACAH,qBAAqB,CAACxB,aAAtB,GAAwC,OAAxC,CACM,UADN,CAEM,UAJd,CAKI4B,SAAS,CAAEJ,qBAAqB,CAACzB,UALrC,EAMO0B,YANP,GADW,CASX,CAACD,qBAAD,CAAwBC,YAAxB,CATW,CAAf,CAYA,MAAO,CACHI,MAAM,CAAEjC,qBAAqB,CAAC4B,qBAAD,CAD1B,CAEHE,MAAM,CAANA,MAFG,CAAP,CAIH,CAEM,QAASI,CAAAA,mBAAT,EAA6D,IAAhCjC,CAAAA,UAAgC,2DAAJ,EAAI,CAChE,qCAAQC,MAAR,CAA2B,CAGvB,GACIC,CAAAA,UADJ,CAQIF,UARJ,CACIE,UADJ,wBAQIF,UARJ,CAEIG,aAFJ,CAEIA,aAFJ,iCAEoB,MAFpB,8CAQIH,UARJ,CAGII,QAHJ,CAGIA,QAHJ,gCAGeR,MAAM,CAACS,KAHtB,8CAQIL,UARJ,CAIIM,aAJJ,CAIIA,aAJJ,iCAIoB,EAJpB,+CAQIN,UARJ,CAKIO,aALJ,CAKIA,aALJ,iCAKoB,IALpB,+CAQIP,UARJ,CAMIQ,eANJ,CAMIA,eANJ,iCAMsB,GANtB,+CAQIR,UARJ,CAOIS,UAPJ,CAOIA,UAPJ,iCAOiB,EAPjB,wBASA,GAAMC,CAAAA,SAAuC,CAAG,EAAhD,CACA,yBAA2CC,kBAAkB,CAAC,CAC1DT,UAAU,CAAEA,UAD8C,CAE1DU,KAAK,CAAEX,MAFmD,CAG1DE,aAAa,CAAbA,aAH0D,CAAD,CAA7D,CAAQU,WAAR,sBAAQA,WAAR,CAAqBD,KAArB,sBAAqBA,KAArB,CAA4BE,UAA5B,sBAA4BA,UAA5B,CAKA,sBAA4BC,eAAe,CAAC,CACxCF,WAAW,CAAXA,WADwC,CAExCD,KAAK,CAALA,KAFwC,CAGxCJ,eAAe,CAAfA,eAHwC,CAIxCL,aAAa,CAAbA,aAJwC,CAAD,CAA3C,CAAQa,MAAR,mBAAQA,MAAR,CAAgBC,OAAhB,mBAAgBA,OAAhB,CAOA,GAAMC,CAAAA,MAAiB,CAAG,CACtBR,SAAS,CAATA,SADsB,CAEtBM,MAAM,CAANA,MAFsB,CAGtBC,OAAO,CAAPA,OAHsB,CAA1B,CAMA,GAAIE,CAAAA,UAAJ,CACA,GAAIC,CAAAA,KAAJ,CACA,GAAIC,CAAAA,OAAJ,CACA,GAAIa,CAAAA,UAAJ,CAEA,GAAI/B,aAAa,GAAK,MAAtB,CAA8B,CAC1BgB,UAAU,CAAG,uCACTP,KADS,CAETE,UAFS,CAGT,CAAC,CAACV,QAAF,CAAY,CAAZ,CAAe,CAAf,CAHS,CAITkB,mCAAYC,KAJH,CAAb,CAMAH,KAAK,CAAG,uCACJR,KADI,CAEJE,UAFI,CAGJ,CAAC,CAAD,CAAI,CAAJ,CAAO,EAAID,WAAW,CAAGN,aAAzB,CAHI,CAIJe,mCAAYC,KAJR,CAAR,CAMAF,OAAO,CAAM,uCACTT,KADS,CAETE,UAFS,CAGT,CAAC,CAACL,UAAF,CAAc,CAAd,CAAiB,CAAjB,CAHS,CAITa,mCAAYC,KAJH,CAAN,MAAP,CAMAW,UAAU,CAAG,uCACTtB,KADS,CAETE,UAFS,CAGT,CAAC,CAAD,CAAI,CAAJ,CAAOD,WAAW,CAAGP,aAArB,CAHS,CAITgB,mCAAYC,KAJH,CAAb,CAMH,CAzBD,IAyBO,IAAIpB,aAAa,GAAK,OAAtB,CAA+B,CAClCgB,UAAU,CAAG,uCACTP,KADS,CAETE,UAFS,CAGT,CAAC,CAAD,CAAI,CAAJ,CAAOV,QAAP,CAHS,CAITkB,mCAAYC,KAJH,CAAb,CAMAH,KAAK,CAAG,uCACJR,KADI,CAEJE,UAFI,CAGJ,CAAC,EAAID,WAAW,CAAGN,aAAnB,CAAkC,CAAlC,CAAqC,CAArC,CAHI,CAIJe,mCAAYC,KAJR,CAAR,CAMAF,OAAO,CAAM,uCACTT,KADS,CAETE,UAFS,CAGT,CAAC,CAAD,CAAI,CAAJ,CAAOL,UAAP,CAHS,CAITa,mCAAYC,KAJH,CAAN,MAAP,CAMAW,UAAU,CAAG,uCACTtB,KADS,CAETE,UAFS,CAGT,CAACD,WAAW,CAAGP,aAAf,CAA8B,CAA9B,CAAiC,CAAjC,CAHS,CAITgB,mCAAYC,KAJH,CAAb,CAMH,CAEDb,SAAS,CAACc,IAAV,CACI,CACIL,UAAU,CAAEA,UADhB,CADJ,CAII,CACIC,KAAK,CAAEA,KADX,CAJJ,CAOI,CACIC,OAAO,CAAEA,OADb,CAPJ,CAUI,CACIa,UAAU,CAAEA,UADhB,CAVJ,EAeA,MAAOhB,CAAAA,MAAP,CACH,CAxGD,4BAlJWtB,MAAM,CAACS,KAkJlB,aA7IEL,UA6IF,oBAvIEW,kBAuIF,iBA/HEI,eA+HF,aAtGaU,kCAsGb,oBAtGiFH,mCAAYC,KAsG7F,ouDAyGH,C,GAEQZ,CAAAA,kB,+BAAmBwB,I,CAIzB,CAGC,GAAQjC,CAAAA,UAAR,CAAqDiC,IAArD,CAAQjC,UAAR,CAA2BD,MAA3B,CAAqDkC,IAArD,CAAoBvB,KAApB,CAAmCT,aAAnC,CAAqDgC,IAArD,CAAmChC,aAAnC,CACA,QAASiC,CAAAA,cAAT,CAAwBC,CAAxB,CAA2C,CACvC,MAAOA,CAAAA,CAAC,CAAG,GAAJ,CAAU,EAAIA,CAAJ,CAAQA,CAAR,CAAYA,CAAtB,CAA0B,EAAIC,IAAI,CAACC,GAAL,CAAS,CAAC,CAAD,CAAKF,CAAL,CAAS,CAAlB,CAAqB,CAArB,EAA0B,CAA/D,CACH,CACD,GAAMG,CAAAA,IAAI,CAAGF,IAAI,CAACG,KAAL,CAAWH,IAAI,CAACI,GAAL,CAASzC,MAAT,CAAX,CAAb,CACA,GAAM0C,CAAAA,IAAI,CAAGL,IAAI,CAACI,GAAL,CAASzC,MAAT,EAAmB,CAAhC,CACA,GAAMW,CAAAA,KAAK,CACPX,MAAM,CAAG,CAAT,CACM,EAAEuC,IAAI,CAAGJ,cAAc,CAACO,IAAD,CAAvB,CADN,CAEMH,IAAI,CAAGJ,cAAc,CAACO,IAAD,CAH/B,CAIA,GAAM9B,CAAAA,WAAW,CAAGX,UAAU,CAAI,CAAlC,CAEA,GAAIY,CAAAA,UAAJ,CAEA,GAAIX,aAAa,GAAK,MAAtB,CAA8B,CAC1BW,UAAU,CAAG,CAAC,CAAC,CAAF,CAAK,CAAL,CAAQD,WAAR,CAAb,CACH,CAFD,IAEO,IAAIV,aAAa,GAAK,OAAtB,CAA+B,CAClCW,UAAU,CAAG,CAAC,CAACD,WAAF,CAAe,CAAf,CAAkB,CAAlB,CAAb,CACH,CAFM,IAEA,CACH,KAAM+B,CAAAA,KAAK,CAAC,mDAAD,CAAX,CACH,CAED,MAAO,CACH9B,UAAU,CAAVA,UADG,CAEHD,WAAW,CAAXA,WAFG,CAGHD,KAAK,CAALA,KAHG,CAAP,CAKH,C,w1BAEQG,CAAAA,e,+BAAgBoB,I,CAKtB,CAGC,GAAQhC,CAAAA,aAAR,CAA+DgC,IAA/D,CAAQhC,aAAR,CAAuBU,WAAvB,CAA+DsB,IAA/D,CAAuBtB,WAAvB,CAAoCD,KAApC,CAA+DuB,IAA/D,CAAoCvB,KAApC,CAA2CJ,eAA3C,CAA+D2B,IAA/D,CAA2C3B,eAA3C,CAEA,GAAIQ,CAAAA,MAAJ,CACA,GAAIC,CAAAA,OAAJ,CAEA,GAAId,aAAa,GAAK,MAAtB,CAA8B,CAC1Ba,MAAM,CACFsB,IAAI,CAACG,KAAL,CACI,uCACI7B,KADJ,CAEI,CAAC,CAAC,GAAF,CAAO,CAAC,CAAR,CAAW,CAAC,CAAD,CAAKiC,MAAM,CAACC,SAAvB,CAAkC,CAAlC,CAAqCjC,WAArC,CAFJ,CAGI,CACIgC,MAAM,CAACC,SADX,CAEIjC,WAFJ,CAGIA,WAHJ,CAIIA,WAAW,CAAG,CAJlB,CAKI,CAAC,CALL,CAHJ,EAUI,KAXR,EAYI,GAbR,CAeAI,OAAO,CAAG,uCACNL,KADM,CAEN,CAAC,CAAC,CAAF,CAAK,CAAL,CAAQC,WAAW,CAAG,CAAtB,CAAyBA,WAAzB,CAFM,CAGN,CAAC,IAAD,CAAO,CAAP,CAAU,EAAI,CAACA,WAAW,CAAG,CAAf,EAAoBL,eAAlC,CAAmD,IAAnD,CAHM,CAAV,CAKH,CArBD,IAqBO,IAAIL,aAAa,GAAK,OAAtB,CAA+B,CAClCa,MAAM,CACFsB,IAAI,CAACG,KAAL,CACI,uCACI7B,KADJ,CAEI,CAAC,CAACC,WAAF,CAAe,CAAf,CAAkB,EAAIgC,MAAM,CAACC,SAA7B,CAAwC,CAAxC,CAA2C,GAA3C,CAFJ,CAGI,CACI,CADJ,CAEIjC,WAAW,CAAG,CAFlB,CAGIA,WAHJ,CAIIA,WAJJ,CAKIgC,MAAM,CAACC,SALX,CAHJ,EAUI,KAXR,EAYI,GAbR,CAcA7B,OAAO,CAAG,uCACNL,KADM,CAEN,CAAC,CAACC,WAAF,CAAe,EAAIA,WAAnB,CAAgC,CAAhC,CAAmC,CAAnC,CAFM,CAGN,CAAC,IAAD,CAAO,EAAI,CAACA,WAAW,CAAG,CAAf,EAAoBL,eAA/B,CAAgD,CAAhD,CAAmD,IAAnD,CAHM,CAAV,CAKH,CApBM,IAoBA,CACH,KAAMoC,CAAAA,KAAK,CAAC,mDAAD,CAAX,CACH,CAED,MAAO,CACH5B,MAAM,CAANA,MADG,CAEHC,OAAO,CAAPA,OAFG,CAAP,CAIH,C,0BA/UaQ,kC","sourcesContent":["import { useMemo } from 'react';\nimport { Dimensions, TransformsStyle, ViewStyle } from 'react-native';\nimport { Extrapolate, interpolate } from 'react-native-reanimated';\nimport type { ComputedDirectionTypes, CustomConfig } from '../types';\n\nconst screen = Dimensions.get('window');\n\nexport interface ILayoutConfig {\n showLength?: number;\n moveSize?: number;\n stackInterval?: number;\n scaleInterval?: number;\n opacityInterval?: number;\n rotateZDeg?: number;\n snapDirection?: 'left' | 'right';\n}\n\nexport type TStackModeProps = ComputedDirectionTypes<{\n /**\n * Carousel Animated transitions.\n */\n mode?: 'horizontal-stack' | 'vertical-stack';\n /**\n * Stack animation style.\n * @default\n * mode: 'vertical',\n * snapDirection: 'right',\n * moveSize: window.width,\n * stackInterval: 30,\n * scaleInterval: 0.08,\n * rotateZDeg: 135,\n */\n modeConfig?: ILayoutConfig;\n}>;\n\nexport function horizontalStackLayout(modeConfig: ILayoutConfig = {}) {\n return (_value: number) => {\n 'worklet';\n\n const {\n showLength,\n snapDirection = 'left',\n moveSize = screen.width,\n stackInterval = 18,\n scaleInterval = 0.04,\n opacityInterval = 0.1,\n rotateZDeg = 30,\n } = modeConfig;\n\n const transform: TransformsStyle['transform'] = [];\n const { validLength, value, inputRange } = getCommonVariables({\n showLength: showLength!,\n value: _value,\n snapDirection,\n });\n const { zIndex, opacity } = getCommonStyles({\n validLength,\n value,\n opacityInterval,\n snapDirection,\n });\n\n const styles: ViewStyle = {\n transform,\n zIndex,\n opacity,\n };\n\n let translateX: number;\n let scale: number;\n let rotateZ: string;\n\n if (snapDirection === 'left') {\n translateX = interpolate(\n value,\n inputRange,\n [-moveSize, 0, validLength * stackInterval],\n Extrapolate.CLAMP\n );\n scale = interpolate(\n value,\n inputRange,\n [1, 1, 1 - validLength * scaleInterval],\n Extrapolate.CLAMP\n );\n rotateZ = `${interpolate(\n value,\n inputRange,\n [-rotateZDeg, 0, 0],\n Extrapolate.CLAMP\n )}deg`;\n } else if (snapDirection === 'right') {\n translateX = interpolate(\n value,\n inputRange,\n [-validLength * stackInterval, 0, moveSize],\n Extrapolate.CLAMP\n );\n scale = interpolate(\n value,\n inputRange,\n [1 - validLength * scaleInterval, 1, 1],\n Extrapolate.CLAMP\n );\n rotateZ = `${interpolate(\n value,\n inputRange,\n [0, 0, rotateZDeg],\n Extrapolate.CLAMP\n )}deg`;\n }\n\n transform.push(\n {\n translateX: translateX!,\n },\n {\n scale: scale!,\n },\n {\n rotateZ: rotateZ!,\n }\n );\n\n return styles;\n };\n}\n\nexport function useHorizontalStackLayout(\n customAnimationConfig: ILayoutConfig = {},\n customConfig: CustomConfig = {}\n) {\n const config = useMemo(\n () => ({\n type:\n customAnimationConfig.snapDirection === 'right'\n ? 'negative'\n : 'positive',\n viewCount: customAnimationConfig.showLength,\n ...customConfig,\n }),\n [customAnimationConfig, customConfig]\n );\n\n return {\n layout: horizontalStackLayout(customAnimationConfig),\n config,\n };\n}\n\nexport function verticalStackLayout(modeConfig: ILayoutConfig = {}) {\n return (_value: number) => {\n 'worklet';\n\n const {\n showLength,\n snapDirection = 'left',\n moveSize = screen.width,\n stackInterval = 18,\n scaleInterval = 0.04,\n opacityInterval = 0.1,\n rotateZDeg = 30,\n } = modeConfig;\n const transform: TransformsStyle['transform'] = [];\n const { validLength, value, inputRange } = getCommonVariables({\n showLength: showLength!,\n value: _value,\n snapDirection,\n });\n const { zIndex, opacity } = getCommonStyles({\n validLength,\n value,\n opacityInterval,\n snapDirection,\n });\n\n const styles: ViewStyle = {\n transform,\n zIndex,\n opacity,\n };\n\n let translateX: number;\n let scale: number;\n let rotateZ: string;\n let translateY: number;\n\n if (snapDirection === 'left') {\n translateX = interpolate(\n value,\n inputRange,\n [-moveSize, 0, 0],\n Extrapolate.CLAMP\n );\n scale = interpolate(\n value,\n inputRange,\n [1, 1, 1 - validLength * scaleInterval],\n Extrapolate.CLAMP\n );\n rotateZ = `${interpolate(\n value,\n inputRange,\n [-rotateZDeg, 0, 0],\n Extrapolate.CLAMP\n )}deg`;\n translateY = interpolate(\n value,\n inputRange,\n [0, 0, validLength * stackInterval],\n Extrapolate.CLAMP\n );\n } else if (snapDirection === 'right') {\n translateX = interpolate(\n value,\n inputRange,\n [0, 0, moveSize],\n Extrapolate.CLAMP\n );\n scale = interpolate(\n value,\n inputRange,\n [1 - validLength * scaleInterval, 1, 1],\n Extrapolate.CLAMP\n );\n rotateZ = `${interpolate(\n value,\n inputRange,\n [0, 0, rotateZDeg],\n Extrapolate.CLAMP\n )}deg`;\n translateY = interpolate(\n value,\n inputRange,\n [validLength * stackInterval, 0, 0],\n Extrapolate.CLAMP\n );\n }\n\n transform.push(\n {\n translateX: translateX!,\n },\n {\n scale: scale!,\n },\n {\n rotateZ: rotateZ!,\n },\n {\n translateY: translateY!,\n }\n );\n\n return styles;\n };\n}\n\nfunction getCommonVariables(opts: {\n value: number;\n showLength: number;\n snapDirection: 'left' | 'right';\n}) {\n 'worklet';\n\n const { showLength, value: _value, snapDirection } = opts;\n function easeInOutCubic(v: number): number {\n return v < 0.5 ? 4 * v * v * v : 1 - Math.pow(-2 * v + 2, 3) / 2;\n }\n const page = Math.floor(Math.abs(_value));\n const diff = Math.abs(_value) % 1;\n const value =\n _value < 0\n ? -(page + easeInOutCubic(diff))\n : page + easeInOutCubic(diff);\n const validLength = showLength! - 1;\n\n let inputRange: [number, number, number];\n\n if (snapDirection === 'left') {\n inputRange = [-1, 0, validLength];\n } else if (snapDirection === 'right') {\n inputRange = [-validLength, 0, 1];\n } else {\n throw Error('snapDirection must be set to either left or right');\n }\n\n return {\n inputRange,\n validLength,\n value,\n };\n}\n\nfunction getCommonStyles(opts: {\n value: number;\n validLength: number;\n opacityInterval: number;\n snapDirection: 'left' | 'right';\n}) {\n 'worklet';\n\n const { snapDirection, validLength, value, opacityInterval } = opts;\n\n let zIndex: number;\n let opacity: number;\n\n if (snapDirection === 'left') {\n zIndex =\n Math.floor(\n interpolate(\n value,\n [-1.5, -1, -1 + Number.MIN_VALUE, 0, validLength],\n [\n Number.MIN_VALUE,\n validLength,\n validLength,\n validLength - 1,\n -1,\n ]\n ) * 10000\n ) / 100;\n\n opacity = interpolate(\n value,\n [-1, 0, validLength - 1, validLength],\n [0.25, 1, 1 - (validLength - 1) * opacityInterval, 0.25]\n );\n } else if (snapDirection === 'right') {\n zIndex =\n Math.floor(\n interpolate(\n value,\n [-validLength, 0, 1 - Number.MIN_VALUE, 1, 1.5],\n [\n 1,\n validLength - 1,\n validLength,\n validLength,\n Number.MIN_VALUE,\n ]\n ) * 10000\n ) / 100;\n opacity = interpolate(\n value,\n [-validLength, 1 - validLength, 0, 1],\n [0.25, 1 - (validLength - 1) * opacityInterval, 1, 0.25]\n );\n } else {\n throw Error('snapDirection must be set to either left or right');\n }\n\n return {\n zIndex,\n opacity,\n };\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,"__esModule",{value:true});exports.computedFillDataWithAutoFillData=computedFillDataWithAutoFillData;exports.computedOffsetXValueWithAutoFillData=void 0;exports.computedRealIndexWithAutoFillData=computedRealIndexWithAutoFillData;exports.convertToSharedIndex=void 0;var _constants=require("../constants");var SINGLE_ITEM=_constants.DATA_LENGTH.SINGLE_ITEM,DOUBLE_ITEM=_constants.DATA_LENGTH.DOUBLE_ITEM;var isAutoFillData=function(){var _f=function _f(params){return!!params.loop&&!!params.autoFillData;};_f._closure={};_f.asString="function isAutoFillData(params){return!!params.loop&&!!params.autoFillData;}";_f.__workletHash=12581181073993;_f.__location="/Users/zhaodonghao/code/react-native-reanimated-carousel/src/utils/computedWithAutoFillData.ts (5:0)";global.__reanimatedWorkletInit(_f);return _f;}();var convertToSharedIndex=function(){var _f=function _f(params){var loop=params.loop,rawDataLength=params.rawDataLength,index=params.index,autoFillData=params.autoFillData;if(isAutoFillData({loop:loop,autoFillData:autoFillData})){switch(rawDataLength){case SINGLE_ITEM:return 0;case DOUBLE_ITEM:return index%2;}}return index;};_f._closure={isAutoFillData:isAutoFillData,SINGLE_ITEM:SINGLE_ITEM,DOUBLE_ITEM:DOUBLE_ITEM};_f.asString="function convertToSharedIndex(params){const{isAutoFillData,SINGLE_ITEM,DOUBLE_ITEM}=jsThis._closure;{const{loop:loop,rawDataLength:rawDataLength,index:index,autoFillData:autoFillData}=params;if(isAutoFillData({loop:loop,autoFillData:autoFillData})){switch(rawDataLength){case SINGLE_ITEM:return 0;case DOUBLE_ITEM:return index%2;}}return index;}}";_f.__workletHash=15638699687620;_f.__location="/Users/zhaodonghao/code/react-native-reanimated-carousel/src/utils/computedWithAutoFillData.ts (15:7)";global.__reanimatedWorkletInit(_f);return _f;}();exports.convertToSharedIndex=convertToSharedIndex;var computedOffsetXValueWithAutoFillData=function(){var _f=function _f(params){var rawDataLength=params.rawDataLength,value=params.value,size=params.size,loop=params.loop,autoFillData=params.autoFillData;if(isAutoFillData({loop:loop,autoFillData:autoFillData})){switch(rawDataLength){case SINGLE_ITEM:return value%size;case DOUBLE_ITEM:return value%(size*2);}}return value;};_f._closure={isAutoFillData:isAutoFillData,SINGLE_ITEM:SINGLE_ITEM,DOUBLE_ITEM:DOUBLE_ITEM};_f.asString="function computedOffsetXValueWithAutoFillData(params){const{isAutoFillData,SINGLE_ITEM,DOUBLE_ITEM}=jsThis._closure;{const{rawDataLength:rawDataLength,value:value,size:size,loop:loop,autoFillData:autoFillData}=params;if(isAutoFillData({loop:loop,autoFillData:autoFillData})){switch(rawDataLength){case SINGLE_ITEM:return value%size;case DOUBLE_ITEM:return value%(size*2);}}return value;}}";_f.__workletHash=8949924672961;_f.__location="/Users/zhaodonghao/code/react-native-reanimated-carousel/src/utils/computedWithAutoFillData.ts (33:7)";global.__reanimatedWorkletInit(_f);return _f;}();exports.computedOffsetXValueWithAutoFillData=computedOffsetXValueWithAutoFillData;function computedRealIndexWithAutoFillData(params){var index=params.index,dataLength=params.dataLength,loop=params.loop,autoFillData=params.autoFillData;if(isAutoFillData({loop:loop,autoFillData:autoFillData})){switch(dataLength){case SINGLE_ITEM:return index%1;case DOUBLE_ITEM:return index%2;}}return index;}function computedFillDataWithAutoFillData(params){var data=params.data,loop=params.loop,autoFillData=params.autoFillData,dataLength=params.dataLength;if(isAutoFillData({loop:loop,autoFillData:autoFillData})){switch(dataLength){case SINGLE_ITEM:return[data[0],data[0],data[0]];case DOUBLE_ITEM:return[data[0],data[1],data[0],data[1]];}}return data;}
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:true});exports.computedFillDataWithAutoFillData=computedFillDataWithAutoFillData;exports.computedOffsetXValueWithAutoFillData=void 0;exports.computedRealIndexWithAutoFillData=computedRealIndexWithAutoFillData;exports.convertToSharedIndex=void 0;var _constants=require("../constants");var SINGLE_ITEM=_constants.DATA_LENGTH.SINGLE_ITEM,DOUBLE_ITEM=_constants.DATA_LENGTH.DOUBLE_ITEM;var isAutoFillData=function(){var _f=function _f(params){return!!params.loop&&!!params.autoFillData;};_f._closure={};_f.asString="function isAutoFillData(params){return!!params.loop&&!!params.autoFillData;}";_f.__workletHash=12581181073993;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/utils/computedWithAutoFillData.ts (5:0)";global.__reanimatedWorkletInit(_f);return _f;}();var convertToSharedIndex=function(){var _f=function _f(params){var loop=params.loop,rawDataLength=params.rawDataLength,index=params.index,autoFillData=params.autoFillData;if(isAutoFillData({loop:loop,autoFillData:autoFillData})){switch(rawDataLength){case SINGLE_ITEM:return 0;case DOUBLE_ITEM:return index%2;}}return index;};_f._closure={isAutoFillData:isAutoFillData,SINGLE_ITEM:SINGLE_ITEM,DOUBLE_ITEM:DOUBLE_ITEM};_f.asString="function convertToSharedIndex(params){const{isAutoFillData,SINGLE_ITEM,DOUBLE_ITEM}=jsThis._closure;{const{loop:loop,rawDataLength:rawDataLength,index:index,autoFillData:autoFillData}=params;if(isAutoFillData({loop:loop,autoFillData:autoFillData})){switch(rawDataLength){case SINGLE_ITEM:return 0;case DOUBLE_ITEM:return index%2;}}return index;}}";_f.__workletHash=15638699687620;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/utils/computedWithAutoFillData.ts (15:7)";global.__reanimatedWorkletInit(_f);return _f;}();exports.convertToSharedIndex=convertToSharedIndex;var computedOffsetXValueWithAutoFillData=function(){var _f=function _f(params){var rawDataLength=params.rawDataLength,value=params.value,size=params.size,loop=params.loop,autoFillData=params.autoFillData;if(isAutoFillData({loop:loop,autoFillData:autoFillData})){switch(rawDataLength){case SINGLE_ITEM:return value%size;case DOUBLE_ITEM:return value%(size*2);}}return value;};_f._closure={isAutoFillData:isAutoFillData,SINGLE_ITEM:SINGLE_ITEM,DOUBLE_ITEM:DOUBLE_ITEM};_f.asString="function computedOffsetXValueWithAutoFillData(params){const{isAutoFillData,SINGLE_ITEM,DOUBLE_ITEM}=jsThis._closure;{const{rawDataLength:rawDataLength,value:value,size:size,loop:loop,autoFillData:autoFillData}=params;if(isAutoFillData({loop:loop,autoFillData:autoFillData})){switch(rawDataLength){case SINGLE_ITEM:return value%size;case DOUBLE_ITEM:return value%(size*2);}}return value;}}";_f.__workletHash=8949924672961;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/utils/computedWithAutoFillData.ts (33:7)";global.__reanimatedWorkletInit(_f);return _f;}();exports.computedOffsetXValueWithAutoFillData=computedOffsetXValueWithAutoFillData;function computedRealIndexWithAutoFillData(params){var index=params.index,dataLength=params.dataLength,loop=params.loop,autoFillData=params.autoFillData;if(isAutoFillData({loop:loop,autoFillData:autoFillData})){switch(dataLength){case SINGLE_ITEM:return index%1;case DOUBLE_ITEM:return index%2;}}return index;}function computedFillDataWithAutoFillData(params){var data=params.data,loop=params.loop,autoFillData=params.autoFillData,dataLength=params.dataLength;if(isAutoFillData({loop:loop,autoFillData:autoFillData})){switch(dataLength){case SINGLE_ITEM:return[data[0],data[0],data[0]];case DOUBLE_ITEM:return[data[0],data[1],data[0],data[1]];}}return data;}
|
|
2
2
|
//# sourceMappingURL=computedWithAutoFillData.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["computedWithAutoFillData.ts"],"names":["SINGLE_ITEM","DATA_LENGTH","DOUBLE_ITEM","isAutoFillData","params","loop","autoFillData","convertToSharedIndex","rawDataLength","index","computedOffsetXValueWithAutoFillData","value","size","computedRealIndexWithAutoFillData","dataLength","computedFillDataWithAutoFillData","data"],"mappings":"uSAAA,uCAEA,GAAQA,CAAAA,WAAR,CAAqCC,sBAArC,CAAQD,WAAR,CAAqBE,WAArB,CAAqCD,sBAArC,CAAqBC,WAArB,C,GAESC,CAAAA,c,+BAAeC,M,CAAkD,CAEtE,MAAO,CAAC,CAACA,MAAM,CAACC,IAAT,EAAiB,CAAC,CAACD,MAAM,CAACE,YAAjC,CACH,C,
|
|
1
|
+
{"version":3,"sources":["computedWithAutoFillData.ts"],"names":["SINGLE_ITEM","DATA_LENGTH","DOUBLE_ITEM","isAutoFillData","params","loop","autoFillData","convertToSharedIndex","rawDataLength","index","computedOffsetXValueWithAutoFillData","value","size","computedRealIndexWithAutoFillData","dataLength","computedFillDataWithAutoFillData","data"],"mappings":"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","sourcesContent":["import { DATA_LENGTH } from 'src/constants';\n\nconst { SINGLE_ITEM, DOUBLE_ITEM } = DATA_LENGTH;\n\nfunction isAutoFillData(params: { autoFillData: boolean; loop: boolean }) {\n 'worklet';\n return !!params.loop && !!params.autoFillData;\n}\n\ntype BaseParams<T extends object = {}> = {\n autoFillData: boolean;\n loop: boolean;\n} & T;\n\nexport function convertToSharedIndex(\n params: BaseParams<{ index: number; rawDataLength: number }>\n) {\n 'worklet';\n const { loop, rawDataLength, index, autoFillData } = params;\n\n if (isAutoFillData({ loop, autoFillData })) {\n switch (rawDataLength) {\n case SINGLE_ITEM:\n return 0;\n case DOUBLE_ITEM:\n return index % 2;\n }\n }\n\n return index;\n}\n\nexport function computedOffsetXValueWithAutoFillData(\n params: BaseParams<{\n rawDataLength: number;\n value: number;\n size: number;\n }>\n) {\n 'worklet';\n\n const { rawDataLength, value, size, loop, autoFillData } = params;\n\n if (isAutoFillData({ loop, autoFillData })) {\n switch (rawDataLength) {\n case SINGLE_ITEM:\n return value % size;\n case DOUBLE_ITEM:\n return value % (size * 2);\n }\n }\n\n return value;\n}\n\nexport function computedRealIndexWithAutoFillData(\n params: BaseParams<{\n index: number;\n dataLength: number;\n }>\n) {\n const { index, dataLength, loop, autoFillData } = params;\n\n if (isAutoFillData({ loop, autoFillData })) {\n switch (dataLength) {\n case SINGLE_ITEM:\n return index % 1;\n case DOUBLE_ITEM:\n return index % 2;\n }\n }\n\n return index;\n}\n\nexport function computedFillDataWithAutoFillData<T>(\n params: BaseParams<{\n data: T[];\n dataLength: number;\n }>\n): T[] {\n const { data, loop, autoFillData, dataLength } = params;\n\n if (isAutoFillData({ loop, autoFillData })) {\n switch (dataLength) {\n case SINGLE_ITEM:\n return [data[0], data[0], data[0]];\n case DOUBLE_ITEM:\n return [data[0], data[1], data[0], data[1]];\n }\n }\n\n return data;\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,"__esModule",{value:true});exports.dealWithAnimation=void 0;var _reactNativeReanimated=require("react-native-reanimated");var dealWithAnimation=function(){var _f=function _f(withAnimation){switch(withAnimation.type){case'spring':return function(value,cb){return(0,_reactNativeReanimated.withSpring)(value,withAnimation.config,function(){var _f=function _f(isFinished){return cb(isFinished);};_f._closure={cb:cb};_f.asString="function _f(isFinished){const{cb}=jsThis._closure;{return cb(isFinished);}}";_f.__workletHash=13669261011863;_f.__location="/Users/zhaodonghao/code/react-native-reanimated-carousel/src/utils/dealWithAnimation.ts (11:63)";global.__reanimatedWorkletInit(_f);return _f;}());};case'timing':return function(value,cb){return(0,_reactNativeReanimated.withTiming)(value,withAnimation.config,function(){var _f=function _f(isFinished){return cb(isFinished);};_f._closure={cb:cb};_f.asString="function _f(isFinished){const{cb}=jsThis._closure;{return cb(isFinished);}}";_f.__workletHash=13669261011863;_f.__location="/Users/zhaodonghao/code/react-native-reanimated-carousel/src/utils/dealWithAnimation.ts (17:63)";global.__reanimatedWorkletInit(_f);return _f;}());};}};_f._closure={withSpring:_reactNativeReanimated.withSpring,withTiming:_reactNativeReanimated.withTiming};_f.asString="function dealWithAnimation(withAnimation){const{withSpring,withTiming}=jsThis._closure;{switch(withAnimation.type){case'spring':return function(value,cb){return withSpring(value,withAnimation.config,function(isFinished){return cb(isFinished);});};case'timing':return function(value,cb){return withTiming(value,withAnimation.config,function(isFinished){return cb(isFinished);});};}}}";_f.__workletHash=5914958361512;_f.__location="/Users/zhaodonghao/code/react-native-reanimated-carousel/src/utils/dealWithAnimation.ts (4:7)";global.__reanimatedWorkletInit(_f);return _f;}();exports.dealWithAnimation=dealWithAnimation;
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:true});exports.dealWithAnimation=void 0;var _reactNativeReanimated=require("react-native-reanimated");var dealWithAnimation=function(){var _f=function _f(withAnimation){switch(withAnimation.type){case'spring':return function(value,cb){return(0,_reactNativeReanimated.withSpring)(value,withAnimation.config,function(){var _f=function _f(isFinished){return cb(isFinished);};_f._closure={cb:cb};_f.asString="function _f(isFinished){const{cb}=jsThis._closure;{return cb(isFinished);}}";_f.__workletHash=13669261011863;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/utils/dealWithAnimation.ts (11:63)";global.__reanimatedWorkletInit(_f);return _f;}());};case'timing':return function(value,cb){return(0,_reactNativeReanimated.withTiming)(value,withAnimation.config,function(){var _f=function _f(isFinished){return cb(isFinished);};_f._closure={cb:cb};_f.asString="function _f(isFinished){const{cb}=jsThis._closure;{return cb(isFinished);}}";_f.__workletHash=13669261011863;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/utils/dealWithAnimation.ts (17:63)";global.__reanimatedWorkletInit(_f);return _f;}());};}};_f._closure={withSpring:_reactNativeReanimated.withSpring,withTiming:_reactNativeReanimated.withTiming};_f.asString="function dealWithAnimation(withAnimation){const{withSpring,withTiming}=jsThis._closure;{switch(withAnimation.type){case'spring':return function(value,cb){return withSpring(value,withAnimation.config,function(isFinished){return cb(isFinished);});};case'timing':return function(value,cb){return withTiming(value,withAnimation.config,function(isFinished){return cb(isFinished);});};}}}";_f.__workletHash=5914958361512;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/utils/dealWithAnimation.ts (4:7)";global.__reanimatedWorkletInit(_f);return _f;}();exports.dealWithAnimation=dealWithAnimation;
|
|
2
2
|
//# sourceMappingURL=dealWithAnimation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["dealWithAnimation.ts"],"names":["dealWithAnimation","withAnimation","type","value","cb","config","isFinished","withSpring","withTiming"],"mappings":"0FACA,8D,GAEgBA,CAAAA,iB,+BACZC,a,CAC4D,CAE5D,OAAQA,aAAa,CAACC,IAAtB,EACI,IAAK,QAAL,CACI,MAAO,UAACC,KAAD,CAAQC,EAAR,CAAe,CAClB,MAAO,sCAAWD,KAAX,CAAkBF,aAAa,CAACI,MAAhC,mBAAwC,YAACC,UAAD,QAC3CF,CAAAA,EAAE,CAACE,UAAD,CADyC,EAAxC,iBATRF,EASQ,
|
|
1
|
+
{"version":3,"sources":["dealWithAnimation.ts"],"names":["dealWithAnimation","withAnimation","type","value","cb","config","isFinished","withSpring","withTiming"],"mappings":"0FACA,8D,GAEgBA,CAAAA,iB,+BACZC,a,CAC4D,CAE5D,OAAQA,aAAa,CAACC,IAAtB,EACI,IAAK,QAAL,CACI,MAAO,UAACC,KAAD,CAAQC,EAAR,CAAe,CAClB,MAAO,sCAAWD,KAAX,CAAkBF,aAAa,CAACI,MAAhC,mBAAwC,YAACC,UAAD,QAC3CF,CAAAA,EAAE,CAACE,UAAD,CADyC,EAAxC,iBATRF,EASQ,oSAAP,CAGH,CAJD,CAKJ,IAAK,QAAL,CACI,MAAO,UAACD,KAAD,CAAQC,EAAR,CAAe,CAClB,MAAO,sCAAWD,KAAX,CAAkBF,aAAa,CAACI,MAAhC,mBAAwC,YAACC,UAAD,QAC3CF,CAAAA,EAAE,CAACE,UAAD,CADyC,EAAxC,iBAfRF,EAeQ,oSAAP,CAGH,CAJD,CARR,CAcH,C,yBAhBcG,iC,YAKAC,iC","sourcesContent":["import type { WithAnimation } from '../types';\nimport { withSpring, withTiming } from 'react-native-reanimated';\n\nexport function dealWithAnimation(\n withAnimation: WithAnimation\n): (value: number, cb: (isFinished: boolean) => void) => number {\n 'worklet';\n switch (withAnimation.type) {\n case 'spring':\n return (value, cb) => {\n return withSpring(value, withAnimation.config, (isFinished) =>\n cb(isFinished as boolean)\n );\n };\n case 'timing':\n return (value, cb) => {\n return withTiming(value, withAnimation.config, (isFinished) =>\n cb(isFinished as boolean)\n );\n };\n }\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,"__esModule",{value:true});exports.log=log;exports.round=void 0;function log(){var _console;(_console=console).log.apply(_console,arguments);}var round=function(){var _f=function _f(number){return Math.round(number);};_f._closure={};_f.asString="function round(number){return Math.round(number);}";_f.__workletHash=13727510784300;_f.__location="/Users/zhaodonghao/code/react-native-reanimated-carousel/src/utils/log.ts (9:7)";global.__reanimatedWorkletInit(_f);return _f;}();exports.round=round;
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:true});exports.log=log;exports.round=void 0;function log(){var _console;(_console=console).log.apply(_console,arguments);}var round=function(){var _f=function _f(number){return Math.round(number);};_f._closure={};_f.asString="function round(number){return Math.round(number);}";_f.__workletHash=13727510784300;_f.__location="/Users/zhaodonghao/code/github/react-native-reanimated-carousel/src/utils/log.ts (9:7)";global.__reanimatedWorkletInit(_f);return _f;}();exports.round=round;
|
|
2
2
|
//# sourceMappingURL=log.js.map
|
package/lib/module/Carousel.js
CHANGED
|
@@ -78,7 +78,6 @@ const Carousel = /*#__PURE__*/React.forwardRef((_props, ref) => {
|
|
|
78
78
|
duration: scrollAnimationDuration
|
|
79
79
|
});
|
|
80
80
|
const {
|
|
81
|
-
to,
|
|
82
81
|
next,
|
|
83
82
|
prev,
|
|
84
83
|
scrollTo,
|
|
@@ -98,14 +97,21 @@ const Carousel = /*#__PURE__*/React.forwardRef((_props, ref) => {
|
|
|
98
97
|
const _onScrollEnd = React.useCallback(() => {
|
|
99
98
|
const _sharedIndex = Math.round(getSharedIndex());
|
|
100
99
|
|
|
100
|
+
const realIndex = computedRealIndexWithAutoFillData({
|
|
101
|
+
index: _sharedIndex,
|
|
102
|
+
dataLength: rawData.length,
|
|
103
|
+
loop,
|
|
104
|
+
autoFillData
|
|
105
|
+
});
|
|
106
|
+
|
|
101
107
|
if (onSnapToItem) {
|
|
102
|
-
onSnapToItem(
|
|
108
|
+
onSnapToItem(realIndex);
|
|
103
109
|
}
|
|
104
110
|
|
|
105
111
|
if (onScrollEnd) {
|
|
106
|
-
onScrollEnd(
|
|
112
|
+
onScrollEnd(realIndex);
|
|
107
113
|
}
|
|
108
|
-
}, [
|
|
114
|
+
}, [loop, autoFillData, rawData.length, getSharedIndex, onSnapToItem, onScrollEnd]);
|
|
109
115
|
|
|
110
116
|
const scrollViewGestureOnScrollBegin = React.useCallback(() => {
|
|
111
117
|
pauseAutoPlay();
|
|
@@ -118,16 +124,12 @@ const Carousel = /*#__PURE__*/React.forwardRef((_props, ref) => {
|
|
|
118
124
|
}, [_onScrollEnd, startAutoPlay]);
|
|
119
125
|
const scrollViewGestureOnTouchBegin = React.useCallback(pauseAutoPlay, [pauseAutoPlay]);
|
|
120
126
|
const scrollViewGestureOnTouchEnd = React.useCallback(startAutoPlay, [startAutoPlay]);
|
|
121
|
-
const goToIndex = React.useCallback((i, animated) => {
|
|
122
|
-
to(i, animated);
|
|
123
|
-
}, [to]);
|
|
124
127
|
React.useImperativeHandle(ref, () => ({
|
|
125
128
|
next,
|
|
126
129
|
prev,
|
|
127
130
|
getCurrentIndex,
|
|
128
|
-
goToIndex,
|
|
129
131
|
scrollTo
|
|
130
|
-
}), [getCurrentIndex,
|
|
132
|
+
}), [getCurrentIndex, next, prev, scrollTo]);
|
|
131
133
|
const visibleRanges = useVisibleRanges({
|
|
132
134
|
total: data.length,
|
|
133
135
|
viewSize: size,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Carousel.tsx"],"names":["React","Animated","runOnJS","useDerivedValue","useCarouselController","useAutoPlay","usePropsErrorBoundary","ScrollViewGesture","useVisibleRanges","StyleSheet","View","BaseLayout","useLayoutConfig","useInitProps","CTX","useCommonVariables","useOnProgressChange","computedRealIndexWithAutoFillData","Carousel","forwardRef","_props","ref","props","testID","data","rawData","loop","autoFillData","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","scrollAnimationDuration","withAnimation","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","defaultIndex","commonVariables","size","handlerOffsetX","dataLength","length","offsetX","totalSize","x","value","isNaN","carouselController","_onScrollEnd","duration","to","next","prev","scrollTo","getSharedIndex","getCurrentIndex","start","startAutoPlay","pause","pauseAutoPlay","useCallback","_sharedIndex","Math","round","scrollViewGestureOnScrollBegin","scrollViewGestureOnScrollEnd","scrollViewGestureOnTouchBegin","scrollViewGestureOnTouchEnd","goToIndex","i","animated","useImperativeHandle","visibleRanges","total","viewSize","translation","layoutConfig","renderLayout","item","realIndex","index","animationValue","common","styles","container","itemsVertical","itemsHorizontal","map","create","overflow","flexDirection"],"mappings":"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","sourcesContent":["import React from 'react';\nimport Animated, { runOnJS, useDerivedValue } from 'react-native-reanimated';\n\nimport { useCarouselController } from './hooks/useCarouselController';\nimport { useAutoPlay } from './hooks/useAutoPlay';\nimport { usePropsErrorBoundary } from './hooks/usePropsErrorBoundary';\nimport { ScrollViewGesture } from './ScrollViewGesture';\nimport { useVisibleRanges } from './hooks/useVisibleRanges';\n\nimport type { ICarouselInstance, TCarouselProps } from './types';\nimport { StyleSheet, View } from 'react-native';\nimport { BaseLayout } from './layouts/BaseLayout';\nimport { useLayoutConfig } from './hooks/useLayoutConfig';\nimport { useInitProps } from './hooks/useInitProps';\nimport { CTX } from './store';\nimport { useCommonVariables } from './hooks/useCommonVariables';\nimport { useOnProgressChange } from './hooks/useOnProgressChange';\nimport { computedRealIndexWithAutoFillData } from './utils/computedWithAutoFillData';\n\nconst Carousel = React.forwardRef<ICarouselInstance, TCarouselProps<any>>(\n (_props, ref) => {\n const props = useInitProps(_props);\n\n const {\n testID,\n data,\n rawData,\n loop,\n autoFillData,\n mode,\n style,\n width,\n height,\n vertical,\n autoPlay,\n windowSize,\n autoPlayReverse,\n autoPlayInterval,\n scrollAnimationDuration,\n withAnimation,\n renderItem,\n onScrollEnd,\n onSnapToItem,\n onScrollBegin,\n onProgressChange,\n customAnimation,\n defaultIndex,\n } = props;\n\n const commonVariables = useCommonVariables(props);\n const { size, handlerOffsetX } = commonVariables;\n const dataLength = data.length;\n\n const offsetX = useDerivedValue(() => {\n const totalSize = size * dataLength;\n const x = handlerOffsetX.value % totalSize;\n\n if (!loop) {\n return handlerOffsetX.value;\n }\n return isNaN(x) ? 0 : x;\n }, [loop, size, dataLength]);\n\n usePropsErrorBoundary(props);\n useOnProgressChange({\n autoFillData,\n loop,\n size,\n offsetX,\n rawData,\n onProgressChange,\n });\n\n const carouselController = useCarouselController({\n loop,\n size,\n data,\n autoFillData,\n handlerOffsetX,\n withAnimation,\n defaultIndex,\n onScrollEnd: () => runOnJS(_onScrollEnd)(),\n onScrollBegin: () => !!onScrollBegin && runOnJS(onScrollBegin)(),\n duration: scrollAnimationDuration,\n });\n\n const { to, next, prev, scrollTo, getSharedIndex, getCurrentIndex } =\n carouselController;\n\n const { start: startAutoPlay, pause: pauseAutoPlay } = useAutoPlay({\n autoPlay,\n autoPlayInterval,\n autoPlayReverse,\n carouselController,\n });\n\n const _onScrollEnd = React.useCallback(() => {\n const _sharedIndex = Math.round(getSharedIndex());\n\n if (onSnapToItem) {\n onSnapToItem(_sharedIndex);\n }\n if (onScrollEnd) {\n onScrollEnd(_sharedIndex);\n }\n }, [onSnapToItem, onScrollEnd, getSharedIndex]);\n\n const scrollViewGestureOnScrollBegin = React.useCallback(() => {\n pauseAutoPlay();\n onScrollBegin?.();\n }, [onScrollBegin, pauseAutoPlay]);\n\n const scrollViewGestureOnScrollEnd = React.useCallback(() => {\n startAutoPlay();\n _onScrollEnd();\n }, [_onScrollEnd, startAutoPlay]);\n\n const scrollViewGestureOnTouchBegin = React.useCallback(pauseAutoPlay, [\n pauseAutoPlay,\n ]);\n\n const scrollViewGestureOnTouchEnd = React.useCallback(startAutoPlay, [\n startAutoPlay,\n ]);\n\n const goToIndex = React.useCallback(\n (i: number, animated?: boolean) => {\n to(i, animated);\n },\n [to]\n );\n\n React.useImperativeHandle(\n ref,\n () => ({\n next,\n prev,\n getCurrentIndex,\n goToIndex,\n scrollTo,\n }),\n [getCurrentIndex, goToIndex, next, prev, scrollTo]\n );\n\n const visibleRanges = useVisibleRanges({\n total: data.length,\n viewSize: size,\n translation: handlerOffsetX,\n windowSize,\n });\n\n const layoutConfig = useLayoutConfig({ ...props, size });\n\n const renderLayout = React.useCallback(\n (item: any, i: number) => {\n const realIndex = computedRealIndexWithAutoFillData({\n index: i,\n dataLength: rawData.length,\n loop,\n autoFillData,\n });\n\n return (\n <BaseLayout\n key={i}\n index={i}\n handlerOffsetX={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 loop,\n rawData,\n offsetX,\n visibleRanges,\n autoFillData,\n renderItem,\n layoutConfig,\n customAnimation,\n ]\n );\n\n return (\n <CTX.Provider value={{ props, common: commonVariables }}>\n <View\n style={[\n styles.container,\n { width: width || '100%', height: height || '100%' },\n style,\n ]}\n testID={testID}\n >\n <ScrollViewGesture\n size={size}\n translation={handlerOffsetX}\n onScrollBegin={scrollViewGestureOnScrollBegin}\n onScrollEnd={scrollViewGestureOnScrollEnd}\n onTouchBegin={scrollViewGestureOnTouchBegin}\n onTouchEnd={scrollViewGestureOnTouchEnd}\n >\n <Animated.View\n key={mode}\n style={[\n styles.container,\n {\n width: width || '100%',\n height: height || '100%',\n },\n style,\n vertical\n ? styles.itemsVertical\n : styles.itemsHorizontal,\n ]}\n >\n {data.map(renderLayout)}\n </Animated.View>\n </ScrollViewGesture>\n </View>\n </CTX.Provider>\n );\n }\n);\n\nexport default Carousel as <T extends any>(\n props: React.PropsWithChildren<TCarouselProps<T>>\n) => React.ReactElement;\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n itemsHorizontal: {\n flexDirection: 'row',\n },\n itemsVertical: {\n flexDirection: 'column',\n },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["Carousel.tsx"],"names":["React","Animated","runOnJS","useDerivedValue","useCarouselController","useAutoPlay","usePropsErrorBoundary","ScrollViewGesture","useVisibleRanges","StyleSheet","View","BaseLayout","useLayoutConfig","useInitProps","CTX","useCommonVariables","useOnProgressChange","computedRealIndexWithAutoFillData","Carousel","forwardRef","_props","ref","props","testID","data","rawData","loop","autoFillData","mode","style","width","height","vertical","autoPlay","windowSize","autoPlayReverse","autoPlayInterval","scrollAnimationDuration","withAnimation","renderItem","onScrollEnd","onSnapToItem","onScrollBegin","onProgressChange","customAnimation","defaultIndex","commonVariables","size","handlerOffsetX","dataLength","length","offsetX","totalSize","x","value","isNaN","carouselController","_onScrollEnd","duration","next","prev","scrollTo","getSharedIndex","getCurrentIndex","start","startAutoPlay","pause","pauseAutoPlay","useCallback","_sharedIndex","Math","round","realIndex","index","scrollViewGestureOnScrollBegin","scrollViewGestureOnScrollEnd","scrollViewGestureOnTouchBegin","scrollViewGestureOnTouchEnd","useImperativeHandle","visibleRanges","total","viewSize","translation","layoutConfig","renderLayout","item","i","animationValue","common","styles","container","itemsVertical","itemsHorizontal","map","create","overflow","flexDirection"],"mappings":"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","sourcesContent":["import React from 'react';\nimport Animated, { runOnJS, useDerivedValue } from 'react-native-reanimated';\n\nimport { useCarouselController } from './hooks/useCarouselController';\nimport { useAutoPlay } from './hooks/useAutoPlay';\nimport { usePropsErrorBoundary } from './hooks/usePropsErrorBoundary';\nimport { ScrollViewGesture } from './ScrollViewGesture';\nimport { useVisibleRanges } from './hooks/useVisibleRanges';\n\nimport type { ICarouselInstance, TCarouselProps } from './types';\nimport { StyleSheet, View } from 'react-native';\nimport { BaseLayout } from './layouts/BaseLayout';\nimport { useLayoutConfig } from './hooks/useLayoutConfig';\nimport { useInitProps } from './hooks/useInitProps';\nimport { CTX } from './store';\nimport { useCommonVariables } from './hooks/useCommonVariables';\nimport { useOnProgressChange } from './hooks/useOnProgressChange';\nimport { computedRealIndexWithAutoFillData } from './utils/computedWithAutoFillData';\n\nconst Carousel = React.forwardRef<ICarouselInstance, TCarouselProps<any>>(\n (_props, ref) => {\n const props = useInitProps(_props);\n\n const {\n testID,\n data,\n rawData,\n loop,\n autoFillData,\n mode,\n style,\n width,\n height,\n vertical,\n autoPlay,\n windowSize,\n autoPlayReverse,\n autoPlayInterval,\n scrollAnimationDuration,\n withAnimation,\n renderItem,\n onScrollEnd,\n onSnapToItem,\n onScrollBegin,\n onProgressChange,\n customAnimation,\n defaultIndex,\n } = props;\n\n const commonVariables = useCommonVariables(props);\n const { size, handlerOffsetX } = commonVariables;\n const dataLength = data.length;\n\n const offsetX = useDerivedValue(() => {\n const totalSize = size * dataLength;\n const x = handlerOffsetX.value % totalSize;\n\n if (!loop) {\n return handlerOffsetX.value;\n }\n return isNaN(x) ? 0 : x;\n }, [loop, size, dataLength]);\n\n usePropsErrorBoundary(props);\n useOnProgressChange({\n autoFillData,\n loop,\n size,\n offsetX,\n rawData,\n onProgressChange,\n });\n\n const carouselController = useCarouselController({\n loop,\n size,\n data,\n autoFillData,\n handlerOffsetX,\n withAnimation,\n defaultIndex,\n onScrollEnd: () => runOnJS(_onScrollEnd)(),\n onScrollBegin: () => !!onScrollBegin && runOnJS(onScrollBegin)(),\n duration: scrollAnimationDuration,\n });\n\n const { next, prev, scrollTo, getSharedIndex, getCurrentIndex } =\n carouselController;\n\n const { start: startAutoPlay, pause: pauseAutoPlay } = useAutoPlay({\n autoPlay,\n autoPlayInterval,\n autoPlayReverse,\n carouselController,\n });\n\n const _onScrollEnd = React.useCallback(() => {\n const _sharedIndex = Math.round(getSharedIndex());\n\n const realIndex = computedRealIndexWithAutoFillData({\n index: _sharedIndex,\n dataLength: rawData.length,\n loop,\n autoFillData,\n });\n\n if (onSnapToItem) {\n onSnapToItem(realIndex);\n }\n if (onScrollEnd) {\n onScrollEnd(realIndex);\n }\n }, [\n loop,\n autoFillData,\n rawData.length,\n getSharedIndex,\n onSnapToItem,\n onScrollEnd,\n ]);\n\n const scrollViewGestureOnScrollBegin = React.useCallback(() => {\n pauseAutoPlay();\n onScrollBegin?.();\n }, [onScrollBegin, pauseAutoPlay]);\n\n const scrollViewGestureOnScrollEnd = React.useCallback(() => {\n startAutoPlay();\n _onScrollEnd();\n }, [_onScrollEnd, startAutoPlay]);\n\n const scrollViewGestureOnTouchBegin = React.useCallback(pauseAutoPlay, [\n pauseAutoPlay,\n ]);\n\n const scrollViewGestureOnTouchEnd = React.useCallback(startAutoPlay, [\n startAutoPlay,\n ]);\n\n React.useImperativeHandle(\n ref,\n () => ({\n next,\n prev,\n getCurrentIndex,\n scrollTo,\n }),\n [getCurrentIndex, next, prev, scrollTo]\n );\n\n const visibleRanges = useVisibleRanges({\n total: data.length,\n viewSize: size,\n translation: handlerOffsetX,\n windowSize,\n });\n\n const layoutConfig = useLayoutConfig({ ...props, size });\n\n const renderLayout = React.useCallback(\n (item: any, i: number) => {\n const realIndex = computedRealIndexWithAutoFillData({\n index: i,\n dataLength: rawData.length,\n loop,\n autoFillData,\n });\n\n return (\n <BaseLayout\n key={i}\n index={i}\n handlerOffsetX={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 loop,\n rawData,\n offsetX,\n visibleRanges,\n autoFillData,\n renderItem,\n layoutConfig,\n customAnimation,\n ]\n );\n\n return (\n <CTX.Provider value={{ props, common: commonVariables }}>\n <View\n style={[\n styles.container,\n { width: width || '100%', height: height || '100%' },\n style,\n ]}\n testID={testID}\n >\n <ScrollViewGesture\n size={size}\n translation={handlerOffsetX}\n onScrollBegin={scrollViewGestureOnScrollBegin}\n onScrollEnd={scrollViewGestureOnScrollEnd}\n onTouchBegin={scrollViewGestureOnTouchBegin}\n onTouchEnd={scrollViewGestureOnTouchEnd}\n >\n <Animated.View\n key={mode}\n style={[\n styles.container,\n {\n width: width || '100%',\n height: height || '100%',\n },\n style,\n vertical\n ? styles.itemsVertical\n : styles.itemsHorizontal,\n ]}\n >\n {data.map(renderLayout)}\n </Animated.View>\n </ScrollViewGesture>\n </View>\n </CTX.Provider>\n );\n }\n);\n\nexport default Carousel as <T extends any>(\n props: React.PropsWithChildren<TCarouselProps<T>>\n) => React.ReactElement;\n\nconst styles = StyleSheet.create({\n container: {\n overflow: 'hidden',\n },\n itemsHorizontal: {\n flexDirection: 'row',\n },\n itemsVertical: {\n flexDirection: 'column',\n },\n});\n"]}
|
|
@@ -137,30 +137,44 @@ export function useCarouselController(options) {
|
|
|
137
137
|
onFinished === null || onFinished === void 0 ? void 0 : onFinished();
|
|
138
138
|
}
|
|
139
139
|
}, [canSliding, loop, index, onScrollBegin, handlerOffsetX, size, scrollWithTiming, currentFixedPage]);
|
|
140
|
-
const to = React.useCallback(
|
|
141
|
-
|
|
142
|
-
|
|
140
|
+
const to = React.useCallback(opts => {
|
|
141
|
+
const {
|
|
142
|
+
i,
|
|
143
|
+
animated = false,
|
|
144
|
+
onFinished
|
|
145
|
+
} = opts;
|
|
146
|
+
if (i === index.value) return;
|
|
143
147
|
if (!canSliding()) return;
|
|
144
148
|
onScrollBegin === null || onScrollBegin === void 0 ? void 0 : onScrollBegin();
|
|
145
|
-
const offset = handlerOffsetX.value + (index.value -
|
|
149
|
+
const offset = handlerOffsetX.value + (index.value - i) * size;
|
|
146
150
|
|
|
147
151
|
if (animated) {
|
|
148
|
-
index.value =
|
|
149
|
-
handlerOffsetX.value = scrollWithTiming(offset);
|
|
152
|
+
index.value = i;
|
|
153
|
+
handlerOffsetX.value = scrollWithTiming(offset, onFinished);
|
|
150
154
|
} else {
|
|
151
155
|
handlerOffsetX.value = offset;
|
|
152
|
-
index.value =
|
|
153
|
-
|
|
156
|
+
index.value = i;
|
|
157
|
+
onFinished === null || onFinished === void 0 ? void 0 : onFinished();
|
|
154
158
|
}
|
|
155
|
-
}, [index, canSliding, onScrollBegin, handlerOffsetX, size, scrollWithTiming
|
|
159
|
+
}, [index, canSliding, onScrollBegin, handlerOffsetX, size, scrollWithTiming]);
|
|
156
160
|
const scrollTo = React.useCallback(function () {
|
|
157
161
|
let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
158
162
|
const {
|
|
163
|
+
index: i,
|
|
159
164
|
count,
|
|
160
165
|
animated = false,
|
|
161
166
|
onFinished
|
|
162
167
|
} = opts;
|
|
163
168
|
|
|
169
|
+
if (typeof i === 'number' && i > -1) {
|
|
170
|
+
to({
|
|
171
|
+
i,
|
|
172
|
+
animated,
|
|
173
|
+
onFinished
|
|
174
|
+
});
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
|
|
164
178
|
if (!count) {
|
|
165
179
|
return;
|
|
166
180
|
}
|
|
@@ -180,9 +194,8 @@ export function useCarouselController(options) {
|
|
|
180
194
|
onFinished
|
|
181
195
|
});
|
|
182
196
|
}
|
|
183
|
-
}, [prev, next]);
|
|
197
|
+
}, [prev, next, to]);
|
|
184
198
|
return {
|
|
185
|
-
to,
|
|
186
199
|
next,
|
|
187
200
|
prev,
|
|
188
201
|
scrollTo,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useCarouselController.tsx"],"names":["React","useRef","Easing","runOnJS","useAnimatedReaction","useSharedValue","dealWithAnimation","convertToSharedIndex","round","useCarouselController","options","size","data","loop","handlerOffsetX","withAnimation","defaultIndex","duration","autoFillData","dataInfo","useMemo","length","disable","originalLength","index","sharedIndex","sharedPreIndex","currentFixedPage","useCallback","Math","value","fixed","abs","setSharedIndex","newSharedIndex","current","handlerOffsetXValue","toInt","isPositive","i","newSharedIndexValue","rawDataLength","getCurrentIndex","canSliding","onScrollEnd","onScrollBegin","scrollWithTiming","toValue","onFinished","callback","isFinished","defaultWithAnimation","type","config","easing","easeOutQuart","next","opts","count","animated","nextPage","prev","prevPage","to","idx","offset","scrollTo","n","getSharedIndex"],"mappings":"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","sourcesContent":["import React, { useRef } from 'react';\nimport type Animated from 'react-native-reanimated';\nimport { Easing } from '../constants';\nimport {\n runOnJS,\n useAnimatedReaction,\n useSharedValue,\n} from 'react-native-reanimated';\nimport type {\n TCarouselActionOptions,\n TCarouselProps,\n WithTimingAnimation,\n} from '../types';\nimport { dealWithAnimation } from '@/utils/dealWithAnimation';\nimport { convertToSharedIndex } from '@/utils/computedWithAutoFillData';\nimport { round } from '@/utils/log';\n\ninterface IOpts {\n loop: boolean;\n size: number;\n data: TCarouselProps['data'];\n autoFillData: TCarouselProps['autoFillData'];\n handlerOffsetX: Animated.SharedValue<number>;\n withAnimation?: TCarouselProps['withAnimation'];\n duration?: number;\n defaultIndex?: number;\n onScrollBegin?: () => void;\n onScrollEnd?: () => void;\n}\n\nexport interface ICarouselController {\n getSharedIndex: () => number;\n prev: (opts?: TCarouselActionOptions) => void;\n next: (opts?: TCarouselActionOptions) => void;\n getCurrentIndex: () => number;\n to: (index: number, animated?: boolean) => void;\n scrollTo: (opts?: TCarouselActionOptions) => void;\n}\n\nexport function useCarouselController(options: IOpts): ICarouselController {\n const {\n size,\n data,\n loop,\n handlerOffsetX,\n withAnimation,\n defaultIndex = 0,\n duration,\n autoFillData,\n } = options;\n\n const dataInfo = React.useMemo(\n () => ({\n length: data.length,\n disable: !data.length,\n originalLength: data.length,\n }),\n [data]\n );\n\n const index = useSharedValue<number>(defaultIndex);\n // The Index displayed to the user\n const sharedIndex = useRef<number>(defaultIndex);\n const sharedPreIndex = useRef<number>(defaultIndex);\n\n const currentFixedPage = React.useCallback(() => {\n if (loop) {\n return -Math.round(handlerOffsetX.value / size);\n }\n\n const fixed = (handlerOffsetX.value / size) % dataInfo.length;\n return Math.round(\n handlerOffsetX.value <= 0\n ? Math.abs(fixed)\n : Math.abs(fixed > 0 ? dataInfo.length - fixed : 0)\n );\n }, [handlerOffsetX, dataInfo, size, loop]);\n\n function setSharedIndex(newSharedIndex: number) {\n sharedIndex.current = newSharedIndex;\n }\n\n useAnimatedReaction(\n () => {\n const handlerOffsetXValue = handlerOffsetX.value;\n const toInt = round(handlerOffsetXValue / size) % dataInfo.length;\n const isPositive = handlerOffsetXValue <= 0;\n const i = isPositive\n ? Math.abs(toInt)\n : Math.abs(toInt > 0 ? dataInfo.length - toInt : 0);\n\n const newSharedIndexValue = convertToSharedIndex({\n loop,\n rawDataLength: dataInfo.originalLength,\n autoFillData: autoFillData!,\n index: i,\n });\n\n return {\n i,\n newSharedIndexValue,\n };\n },\n ({ i, newSharedIndexValue }) => {\n index.value = i;\n runOnJS(setSharedIndex)(newSharedIndexValue);\n },\n [\n sharedPreIndex,\n sharedIndex,\n size,\n dataInfo,\n index,\n loop,\n autoFillData,\n handlerOffsetX,\n ]\n );\n\n const getCurrentIndex = React.useCallback(() => {\n return index.value;\n }, [index]);\n\n const canSliding = React.useCallback(() => {\n return !dataInfo.disable;\n }, [dataInfo]);\n\n const onScrollEnd = React.useCallback(() => {\n options.onScrollEnd?.();\n }, [options]);\n\n const onScrollBegin = React.useCallback(() => {\n options.onScrollBegin?.();\n }, [options]);\n\n const scrollWithTiming = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n 'worklet';\n const callback = (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n runOnJS(onScrollEnd)();\n onFinished && runOnJS(onFinished)();\n }\n };\n\n const defaultWithAnimation: WithTimingAnimation = {\n type: 'timing',\n config: { duration, easing: Easing.easeOutQuart },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n callback\n );\n },\n [duration, withAnimation, onScrollEnd]\n );\n\n const next = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n 'worklet';\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value >= dataInfo.length - 1))\n return;\n\n onScrollBegin?.();\n\n const nextPage = currentFixedPage() + count;\n index.value = nextPage;\n\n if (animated) {\n handlerOffsetX.value = scrollWithTiming(\n -nextPage * size,\n onFinished\n ) as any;\n } else {\n handlerOffsetX.value = -nextPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n dataInfo,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n currentFixedPage,\n ]\n );\n\n const prev = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value <= 0)) return;\n\n onScrollBegin?.();\n\n const prevPage = currentFixedPage() - count;\n index.value = prevPage;\n\n if (animated) {\n handlerOffsetX.value = scrollWithTiming(\n -prevPage * size,\n onFinished\n );\n } else {\n handlerOffsetX.value = -prevPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n currentFixedPage,\n ]\n );\n\n const to = React.useCallback(\n (idx: number, animated: boolean = false) => {\n if (idx === index.value) return;\n if (!canSliding()) return;\n\n onScrollBegin?.();\n\n const offset = handlerOffsetX.value + (index.value - idx) * size;\n\n if (animated) {\n index.value = idx;\n handlerOffsetX.value = scrollWithTiming(offset);\n } else {\n handlerOffsetX.value = offset;\n index.value = idx;\n runOnJS(onScrollEnd)();\n }\n },\n [\n index,\n canSliding,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n onScrollEnd,\n ]\n );\n\n const scrollTo = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { count, animated = false, onFinished } = opts;\n if (!count) {\n return;\n }\n const n = Math.round(count);\n if (n < 0) {\n prev({ count: Math.abs(n), animated, onFinished });\n } else {\n next({ count: n, animated, onFinished });\n }\n },\n [prev, next]\n );\n\n return {\n to,\n next,\n prev,\n scrollTo,\n getCurrentIndex,\n getSharedIndex: () => sharedIndex.current,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["useCarouselController.tsx"],"names":["React","useRef","Easing","runOnJS","useAnimatedReaction","useSharedValue","dealWithAnimation","convertToSharedIndex","round","useCarouselController","options","size","data","loop","handlerOffsetX","withAnimation","defaultIndex","duration","autoFillData","dataInfo","useMemo","length","disable","originalLength","index","sharedIndex","sharedPreIndex","currentFixedPage","useCallback","Math","value","fixed","abs","setSharedIndex","newSharedIndex","current","handlerOffsetXValue","toInt","isPositive","i","newSharedIndexValue","rawDataLength","getCurrentIndex","canSliding","onScrollEnd","onScrollBegin","scrollWithTiming","toValue","onFinished","callback","isFinished","defaultWithAnimation","type","config","easing","easeOutQuart","next","opts","count","animated","nextPage","prev","prevPage","to","offset","scrollTo","n","getSharedIndex"],"mappings":"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","sourcesContent":["import React, { useRef } from 'react';\nimport type Animated from 'react-native-reanimated';\nimport { Easing } from '../constants';\nimport {\n runOnJS,\n useAnimatedReaction,\n useSharedValue,\n} from 'react-native-reanimated';\nimport type {\n TCarouselActionOptions,\n TCarouselProps,\n WithTimingAnimation,\n} from '../types';\nimport { dealWithAnimation } from '@/utils/dealWithAnimation';\nimport { convertToSharedIndex } from '@/utils/computedWithAutoFillData';\nimport { round } from '@/utils/log';\n\ninterface IOpts {\n loop: boolean;\n size: number;\n data: TCarouselProps['data'];\n autoFillData: TCarouselProps['autoFillData'];\n handlerOffsetX: Animated.SharedValue<number>;\n withAnimation?: TCarouselProps['withAnimation'];\n duration?: number;\n defaultIndex?: number;\n onScrollBegin?: () => void;\n onScrollEnd?: () => void;\n}\n\nexport interface ICarouselController {\n getSharedIndex: () => number;\n prev: (opts?: TCarouselActionOptions) => void;\n next: (opts?: TCarouselActionOptions) => void;\n getCurrentIndex: () => number;\n scrollTo: (opts?: TCarouselActionOptions) => void;\n}\n\nexport function useCarouselController(options: IOpts): ICarouselController {\n const {\n size,\n data,\n loop,\n handlerOffsetX,\n withAnimation,\n defaultIndex = 0,\n duration,\n autoFillData,\n } = options;\n\n const dataInfo = React.useMemo(\n () => ({\n length: data.length,\n disable: !data.length,\n originalLength: data.length,\n }),\n [data]\n );\n\n const index = useSharedValue<number>(defaultIndex);\n // The Index displayed to the user\n const sharedIndex = useRef<number>(defaultIndex);\n const sharedPreIndex = useRef<number>(defaultIndex);\n\n const currentFixedPage = React.useCallback(() => {\n if (loop) {\n return -Math.round(handlerOffsetX.value / size);\n }\n\n const fixed = (handlerOffsetX.value / size) % dataInfo.length;\n return Math.round(\n handlerOffsetX.value <= 0\n ? Math.abs(fixed)\n : Math.abs(fixed > 0 ? dataInfo.length - fixed : 0)\n );\n }, [handlerOffsetX, dataInfo, size, loop]);\n\n function setSharedIndex(newSharedIndex: number) {\n sharedIndex.current = newSharedIndex;\n }\n\n useAnimatedReaction(\n () => {\n const handlerOffsetXValue = handlerOffsetX.value;\n const toInt = round(handlerOffsetXValue / size) % dataInfo.length;\n const isPositive = handlerOffsetXValue <= 0;\n const i = isPositive\n ? Math.abs(toInt)\n : Math.abs(toInt > 0 ? dataInfo.length - toInt : 0);\n\n const newSharedIndexValue = convertToSharedIndex({\n loop,\n rawDataLength: dataInfo.originalLength,\n autoFillData: autoFillData!,\n index: i,\n });\n\n return {\n i,\n newSharedIndexValue,\n };\n },\n ({ i, newSharedIndexValue }) => {\n index.value = i;\n runOnJS(setSharedIndex)(newSharedIndexValue);\n },\n [\n sharedPreIndex,\n sharedIndex,\n size,\n dataInfo,\n index,\n loop,\n autoFillData,\n handlerOffsetX,\n ]\n );\n\n const getCurrentIndex = React.useCallback(() => {\n return index.value;\n }, [index]);\n\n const canSliding = React.useCallback(() => {\n return !dataInfo.disable;\n }, [dataInfo]);\n\n const onScrollEnd = React.useCallback(() => {\n options.onScrollEnd?.();\n }, [options]);\n\n const onScrollBegin = React.useCallback(() => {\n options.onScrollBegin?.();\n }, [options]);\n\n const scrollWithTiming = React.useCallback(\n (toValue: number, onFinished?: () => void) => {\n 'worklet';\n const callback = (isFinished: boolean) => {\n 'worklet';\n if (isFinished) {\n runOnJS(onScrollEnd)();\n onFinished && runOnJS(onFinished)();\n }\n };\n\n const defaultWithAnimation: WithTimingAnimation = {\n type: 'timing',\n config: { duration, easing: Easing.easeOutQuart },\n };\n\n return dealWithAnimation(withAnimation ?? defaultWithAnimation)(\n toValue,\n callback\n );\n },\n [duration, withAnimation, onScrollEnd]\n );\n\n const next = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n 'worklet';\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value >= dataInfo.length - 1))\n return;\n\n onScrollBegin?.();\n\n const nextPage = currentFixedPage() + count;\n index.value = nextPage;\n\n if (animated) {\n handlerOffsetX.value = scrollWithTiming(\n -nextPage * size,\n onFinished\n ) as any;\n } else {\n handlerOffsetX.value = -nextPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n dataInfo,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n currentFixedPage,\n ]\n );\n\n const prev = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { count = 1, animated = true, onFinished } = opts;\n if (!canSliding() || (!loop && index.value <= 0)) return;\n\n onScrollBegin?.();\n\n const prevPage = currentFixedPage() - count;\n index.value = prevPage;\n\n if (animated) {\n handlerOffsetX.value = scrollWithTiming(\n -prevPage * size,\n onFinished\n );\n } else {\n handlerOffsetX.value = -prevPage * size;\n onFinished?.();\n }\n },\n [\n canSliding,\n loop,\n index,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n currentFixedPage,\n ]\n );\n\n const to = React.useCallback(\n (opts: { i: number; animated: boolean; onFinished?: () => void }) => {\n const { i, animated = false, onFinished } = opts;\n if (i === index.value) return;\n if (!canSliding()) return;\n\n onScrollBegin?.();\n\n const offset = handlerOffsetX.value + (index.value - i) * size;\n\n if (animated) {\n index.value = i;\n handlerOffsetX.value = scrollWithTiming(offset, onFinished);\n } else {\n handlerOffsetX.value = offset;\n index.value = i;\n onFinished?.();\n }\n },\n [\n index,\n canSliding,\n onScrollBegin,\n handlerOffsetX,\n size,\n scrollWithTiming,\n ]\n );\n\n const scrollTo = React.useCallback(\n (opts: TCarouselActionOptions = {}) => {\n const { index: i, count, animated = false, onFinished } = opts;\n\n if (typeof i === 'number' && i > -1) {\n to({ i, animated, onFinished });\n return;\n }\n\n if (!count) {\n return;\n }\n\n const n = Math.round(count);\n\n if (n < 0) {\n prev({ count: Math.abs(n), animated, onFinished });\n } else {\n next({ count: n, animated, onFinished });\n }\n },\n [prev, next, to]\n );\n\n return {\n next,\n prev,\n scrollTo,\n getCurrentIndex,\n getSharedIndex: () => sharedIndex.current,\n };\n}\n"]}
|
package/lib/module/index.js
CHANGED
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.tsx"],"names":["Carousel"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["index.tsx"],"names":["global","Object","assign","__reanimatedWorkletInit","Carousel"],"mappings":"AAAA,IAAI,EAAE,6BAA6BA,MAA/B,CAAJ,EAA4C;AACxCC,EAAAA,MAAM,CAACC,MAAP,CAAcF,MAAd,EAAsB;AAAEG,IAAAA,uBAAuB,EAAE,MAAM,CAAE;AAAnC,GAAtB;AACH;;AAGD,OAAOC,QAAP,MAAqB,YAArB;AAEA,eAAeA,QAAf","sourcesContent":["if (!('__reanimatedWorkletInit' in global)) {\n Object.assign(global, { __reanimatedWorkletInit: () => {} });\n}\n\nexport type { TCarouselProps, ICarouselInstance } from './types';\nimport Carousel from './Carousel';\n\nexport default Carousel;\n"]}
|
|
@@ -17,7 +17,6 @@ export interface ICarouselController {
|
|
|
17
17
|
prev: (opts?: TCarouselActionOptions) => void;
|
|
18
18
|
next: (opts?: TCarouselActionOptions) => void;
|
|
19
19
|
getCurrentIndex: () => number;
|
|
20
|
-
to: (index: number, animated?: boolean) => void;
|
|
21
20
|
scrollTo: (opts?: TCarouselActionOptions) => void;
|
|
22
21
|
}
|
|
23
22
|
export declare function useCarouselController(options: IOpts): ICarouselController;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import type { ViewStyle } from 'react-native';
|
|
2
|
+
import type { StyleProp, ViewStyle } from 'react-native';
|
|
3
3
|
import type { PanGestureHandlerProps } from 'react-native-gesture-handler';
|
|
4
4
|
import type { AnimatedStyleProp, WithSpringConfig, WithTimingConfig } from 'react-native-reanimated';
|
|
5
5
|
import type Animated from 'react-native-reanimated';
|
|
@@ -91,7 +91,7 @@ export declare type TCarouselProps<T = any> = {
|
|
|
91
91
|
/**
|
|
92
92
|
* Carousel container style
|
|
93
93
|
*/
|
|
94
|
-
style?: ViewStyle
|
|
94
|
+
style?: StyleProp<ViewStyle>;
|
|
95
95
|
/**
|
|
96
96
|
* PanGestureHandler props
|
|
97
97
|
*/
|
|
@@ -170,21 +170,16 @@ export interface ICarouselInstance {
|
|
|
170
170
|
* Scroll to previous item, it takes one optional argument (count),
|
|
171
171
|
* which allows you to specify how many items to cross
|
|
172
172
|
*/
|
|
173
|
-
prev: (opts?: TCarouselActionOptions) => void;
|
|
173
|
+
prev: (opts?: Omit<TCarouselActionOptions, 'index'>) => void;
|
|
174
174
|
/**
|
|
175
175
|
* Scroll to next item, it takes one optional argument (count),
|
|
176
176
|
* which allows you to specify how many items to cross
|
|
177
177
|
*/
|
|
178
|
-
next: (opts?: TCarouselActionOptions) => void;
|
|
178
|
+
next: (opts?: Omit<TCarouselActionOptions, 'index'>) => void;
|
|
179
179
|
/**
|
|
180
180
|
* Get current item index
|
|
181
181
|
*/
|
|
182
182
|
getCurrentIndex: () => number;
|
|
183
|
-
/**
|
|
184
|
-
* Go to index
|
|
185
|
-
* @deprecated use scrollTo instead
|
|
186
|
-
*/
|
|
187
|
-
goToIndex: (index: number, animated?: boolean) => void;
|
|
188
183
|
/**
|
|
189
184
|
* Use value to scroll to a position where relative to the current position,
|
|
190
185
|
* scrollTo(-2) is equivalent to prev(2), scrollTo(2) is equivalent to next(2)
|
|
@@ -198,6 +193,7 @@ export interface CarouselRenderItemInfo<ItemT> {
|
|
|
198
193
|
}
|
|
199
194
|
export declare type CarouselRenderItem<ItemT> = (info: CarouselRenderItemInfo<ItemT>) => React.ReactElement;
|
|
200
195
|
export interface TCarouselActionOptions {
|
|
196
|
+
index?: number;
|
|
201
197
|
count?: number;
|
|
202
198
|
animated?: boolean;
|
|
203
199
|
onFinished?: () => void;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-reanimated-carousel",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.6.0",
|
|
4
4
|
"description": "Simple carousel component.fully implemented using Reanimated 2.Infinitely scrolling, very smooth.",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"types": "lib/typescript/index.d.ts",
|
package/src/Carousel.tsx
CHANGED
|
@@ -84,7 +84,7 @@ const Carousel = React.forwardRef<ICarouselInstance, TCarouselProps<any>>(
|
|
|
84
84
|
duration: scrollAnimationDuration,
|
|
85
85
|
});
|
|
86
86
|
|
|
87
|
-
const {
|
|
87
|
+
const { next, prev, scrollTo, getSharedIndex, getCurrentIndex } =
|
|
88
88
|
carouselController;
|
|
89
89
|
|
|
90
90
|
const { start: startAutoPlay, pause: pauseAutoPlay } = useAutoPlay({
|
|
@@ -97,13 +97,27 @@ const Carousel = React.forwardRef<ICarouselInstance, TCarouselProps<any>>(
|
|
|
97
97
|
const _onScrollEnd = React.useCallback(() => {
|
|
98
98
|
const _sharedIndex = Math.round(getSharedIndex());
|
|
99
99
|
|
|
100
|
+
const realIndex = computedRealIndexWithAutoFillData({
|
|
101
|
+
index: _sharedIndex,
|
|
102
|
+
dataLength: rawData.length,
|
|
103
|
+
loop,
|
|
104
|
+
autoFillData,
|
|
105
|
+
});
|
|
106
|
+
|
|
100
107
|
if (onSnapToItem) {
|
|
101
|
-
onSnapToItem(
|
|
108
|
+
onSnapToItem(realIndex);
|
|
102
109
|
}
|
|
103
110
|
if (onScrollEnd) {
|
|
104
|
-
onScrollEnd(
|
|
111
|
+
onScrollEnd(realIndex);
|
|
105
112
|
}
|
|
106
|
-
}, [
|
|
113
|
+
}, [
|
|
114
|
+
loop,
|
|
115
|
+
autoFillData,
|
|
116
|
+
rawData.length,
|
|
117
|
+
getSharedIndex,
|
|
118
|
+
onSnapToItem,
|
|
119
|
+
onScrollEnd,
|
|
120
|
+
]);
|
|
107
121
|
|
|
108
122
|
const scrollViewGestureOnScrollBegin = React.useCallback(() => {
|
|
109
123
|
pauseAutoPlay();
|
|
@@ -123,23 +137,15 @@ const Carousel = React.forwardRef<ICarouselInstance, TCarouselProps<any>>(
|
|
|
123
137
|
startAutoPlay,
|
|
124
138
|
]);
|
|
125
139
|
|
|
126
|
-
const goToIndex = React.useCallback(
|
|
127
|
-
(i: number, animated?: boolean) => {
|
|
128
|
-
to(i, animated);
|
|
129
|
-
},
|
|
130
|
-
[to]
|
|
131
|
-
);
|
|
132
|
-
|
|
133
140
|
React.useImperativeHandle(
|
|
134
141
|
ref,
|
|
135
142
|
() => ({
|
|
136
143
|
next,
|
|
137
144
|
prev,
|
|
138
145
|
getCurrentIndex,
|
|
139
|
-
goToIndex,
|
|
140
146
|
scrollTo,
|
|
141
147
|
}),
|
|
142
|
-
[getCurrentIndex,
|
|
148
|
+
[getCurrentIndex, next, prev, scrollTo]
|
|
143
149
|
);
|
|
144
150
|
|
|
145
151
|
const visibleRanges = useVisibleRanges({
|