react-native-gesture-image-viewer 0.4.0 → 0.5.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 CHANGED
@@ -168,7 +168,7 @@ function App() {
168
168
 
169
169
  #### List Components
170
170
 
171
- Support for `FlatList`, `FlashList`, `ScrollView` (⚠️ coming soon), and other list components through the `ListComponent` prop.
171
+ Support for `ScrollView`, `FlatList`, `FlashList`, and other list components through the `ListComponent` prop.
172
172
  You can also customize the props of each supported list component through `listProps`.
173
173
 
174
174
  ```tsx
@@ -6,6 +6,7 @@ import { FlatList, Gesture, GestureDetector, GestureHandlerRootView } from 'reac
6
6
  import Animated from 'react-native-reanimated';
7
7
  import { registry } from "./ImageViewerRegistry.js";
8
8
  import { useGestureImageViewer } from "./useGestureImageViewer.js";
9
+ import { isFlatListLike, isScrollViewLike } from "./utils.js";
9
10
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
10
11
  const WebPagingFix = () => {
11
12
  if (Platform.OS !== 'web') {
@@ -34,7 +35,7 @@ export function GestureImageViewer({
34
35
  } = useWindowDimensions();
35
36
  const width = customWidth || screenWidth;
36
37
  const {
37
- flatListRef,
38
+ listRef,
38
39
  isZoomed,
39
40
  dismissGesture,
40
41
  zoomGesture,
@@ -62,14 +63,14 @@ export function GestureImageViewer({
62
63
  marginHorizontal: itemSpacing / 2
63
64
  }],
64
65
  children: renderImage(item, index)
65
- });
66
+ }, typeof item === 'string' ? item : index);
66
67
  }, [width, itemSpacing, renderImage]);
67
68
  const getItemLayout = useCallback((_, index) => ({
68
69
  length: width + itemSpacing,
69
70
  offset: (width + itemSpacing) * index,
70
71
  index
71
72
  }), [width, itemSpacing]);
72
- const keyExtractor = useCallback((item, index) => `image-${index}-${item}`, []);
73
+ const keyExtractor = useCallback((item, index) => typeof item === 'string' ? item : `image-${index}`, []);
73
74
  const gesture = useMemo(() => {
74
75
  return Gesture.Race(dismissGesture, zoomGesture);
75
76
  }, [zoomGesture, dismissGesture]);
@@ -77,6 +78,17 @@ export function GestureImageViewer({
77
78
  registry.createManager(id);
78
79
  return () => registry.deleteManager(id);
79
80
  }, [id]);
81
+ const commonProps = useMemo(() => ({
82
+ horizontal: true,
83
+ scrollEnabled: !isZoomed,
84
+ showsHorizontalScrollIndicator: false,
85
+ onMomentumScrollEnd: onMomentumScrollEnd,
86
+ snapToInterval: width + itemSpacing,
87
+ snapToAlignment: 'center',
88
+ decelerationRate: 'fast',
89
+ scrollEventThrottle: 16,
90
+ removeClippedSubviews: true
91
+ }), [width, itemSpacing, isZoomed, onMomentumScrollEnd]);
80
92
  const listComponent = /*#__PURE__*/_jsx(GestureHandlerRootView, {
81
93
  children: /*#__PURE__*/_jsx(GestureDetector, {
82
94
  gesture: gesture,
@@ -86,25 +98,25 @@ export function GestureImageViewer({
86
98
  style: [styles.background, backdropStyleProps, backdropStyle]
87
99
  }), /*#__PURE__*/_jsx(Animated.View, {
88
100
  style: [styles.content, animatedStyle],
89
- children: /*#__PURE__*/_jsx(ListComponent, {
90
- ref: flatListRef,
101
+ children: isScrollViewLike(ListComponent) ? /*#__PURE__*/_jsx(ListComponent, {
102
+ ref: listRef,
103
+ ...commonProps,
104
+ ...listProps,
105
+ children: data.map((item, index) => renderItem({
106
+ item,
107
+ index
108
+ }))
109
+ }) : isFlatListLike(ListComponent) && /*#__PURE__*/_jsx(ListComponent, {
110
+ ref: listRef,
111
+ ...commonProps,
91
112
  data: data,
92
113
  renderItem: renderItem,
93
- keyExtractor: keyExtractor,
94
- horizontal: true,
95
- scrollEnabled: !isZoomed,
96
- showsHorizontalScrollIndicator: false,
97
- onMomentumScrollEnd: onMomentumScrollEnd,
98
- getItemLayout: getItemLayout,
99
114
  initialScrollIndex: initialIndex,
115
+ keyExtractor: keyExtractor,
116
+ estimatedItemSize: width + itemSpacing,
100
117
  windowSize: 3,
101
118
  maxToRenderPerBatch: 3,
102
- removeClippedSubviews: true,
103
- snapToInterval: width + itemSpacing,
104
- estimatedItemSize: width + itemSpacing,
105
- snapToAlignment: "center",
106
- decelerationRate: "fast",
107
- scrollEventThrottle: 16
119
+ getItemLayout: getItemLayout
108
120
  // NOTE - https://github.com/necolas/react-native-web/issues/1299
109
121
  ,
110
122
  ...(Platform.OS === 'web' && {
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useEffect","useMemo","Platform","StyleSheet","useWindowDimensions","View","FlatList","Gesture","GestureDetector","GestureHandlerRootView","Animated","registry","useGestureImageViewer","jsx","_jsx","jsxs","_jsxs","WebPagingFix","OS","children","GestureImageViewer","id","data","renderImage","renderContainer","ListComponent","width","customWidth","listProps","backdropStyle","backdropStyleProps","containerStyle","initialIndex","itemSpacing","props","screenWidth","flatListRef","isZoomed","dismissGesture","zoomGesture","onMomentumScrollEnd","animatedStyle","renderItem","item","index","style","height","justifyContent","alignItems","marginHorizontal","getItemLayout","_","length","offset","keyExtractor","gesture","Race","createManager","deleteManager","listComponent","styles","container","background","content","ref","horizontal","scrollEnabled","showsHorizontalScrollIndicator","initialScrollIndex","windowSize","maxToRenderPerBatch","removeClippedSubviews","snapToInterval","estimatedItemSize","snapToAlignment","decelerationRate","scrollEventThrottle","dataSet","create","flex","position","top","left","right","bottom","backgroundColor"],"sourceRoot":"../../src","sources":["GestureImageViewer.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useCallback","useEffect","useMemo","Platform","StyleSheet","useWindowDimensions","View","FlatList","Gesture","GestureDetector","GestureHandlerRootView","Animated","registry","useGestureImageViewer","isFlatListLike","isScrollViewLike","jsx","_jsx","jsxs","_jsxs","WebPagingFix","OS","children","GestureImageViewer","id","data","renderImage","renderContainer","ListComponent","width","customWidth","listProps","backdropStyle","backdropStyleProps","containerStyle","initialIndex","itemSpacing","props","screenWidth","listRef","isZoomed","dismissGesture","zoomGesture","onMomentumScrollEnd","animatedStyle","renderItem","item","index","style","height","justifyContent","alignItems","marginHorizontal","getItemLayout","_","length","offset","keyExtractor","gesture","Race","createManager","deleteManager","commonProps","horizontal","scrollEnabled","showsHorizontalScrollIndicator","snapToInterval","snapToAlignment","decelerationRate","scrollEventThrottle","removeClippedSubviews","listComponent","styles","container","background","content","ref","map","initialScrollIndex","estimatedItemSize","windowSize","maxToRenderPerBatch","dataSet","create","flex","position","top","left","right","bottom","backgroundColor"],"sourceRoot":"../../src","sources":["GestureImageViewer.tsx"],"mappings":"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","ignoreList":[]}
@@ -3,7 +3,8 @@
3
3
  class ImageViewerManager {
4
4
  currentIndex = 0;
5
5
  dataLength = 0;
6
- flatListRef = null;
6
+ width = 0;
7
+ listRef = null;
7
8
  enableSwipeGesture = true;
8
9
  listeners = new Set();
9
10
 
@@ -28,8 +29,11 @@ class ImageViewerManager {
28
29
  dataLength: this.dataLength
29
30
  };
30
31
  }
31
- setFlatListRef(ref) {
32
- this.flatListRef = ref;
32
+ setWidth(width) {
33
+ this.width = width;
34
+ }
35
+ setListRef(ref) {
36
+ this.listRef = ref;
33
37
  }
34
38
  setDataLength(length) {
35
39
  this.dataLength = length;
@@ -46,14 +50,21 @@ class ImageViewerManager {
46
50
  this.notifyListeners();
47
51
  }
48
52
  goToIndex = index => {
49
- if (index < 0 || index >= this.dataLength || !this.enableSwipeGesture || !this.flatListRef) {
53
+ if (index < 0 || index >= this.dataLength || !this.enableSwipeGesture || !this.listRef) {
50
54
  return;
51
55
  }
52
56
  this.currentIndex = index;
53
- this.flatListRef.scrollToIndex({
54
- index,
55
- animated: true
56
- });
57
+ if (this.listRef.scrollToIndex) {
58
+ this.listRef.scrollToIndex({
59
+ index,
60
+ animated: true
61
+ });
62
+ } else if (this.listRef.scrollTo) {
63
+ this.listRef.scrollTo({
64
+ x: index * this.width,
65
+ animated: true
66
+ });
67
+ }
57
68
  this.notifyListeners();
58
69
  };
59
70
  goToPrevious = () => {
@@ -68,7 +79,7 @@ class ImageViewerManager {
68
79
  };
69
80
  cleanUp() {
70
81
  this.listeners.clear();
71
- this.flatListRef = null;
82
+ this.listRef = null;
72
83
  this.enableSwipeGesture = true;
73
84
  this.currentIndex = 0;
74
85
  this.dataLength = 0;
@@ -1 +1 @@
1
- {"version":3,"names":["ImageViewerManager","currentIndex","dataLength","flatListRef","enableSwipeGesture","listeners","Set","notifyListeners","state","getState","forEach","listener","subscribe","add","delete","setFlatListRef","ref","setDataLength","length","setEnableSwipeGesture","enabled","setCurrentIndex","index","notifyStateChange","goToIndex","scrollToIndex","animated","goToPrevious","goToNext","cleanUp","clear"],"sourceRoot":"../../src","sources":["ImageViewerManager.ts"],"mappings":";;AAKA,MAAMA,kBAAkB,CAAC;EACfC,YAAY,GAAG,CAAC;EAChBC,UAAU,GAAG,CAAC;EACdC,WAAW,GAAQ,IAAI;EACvBC,kBAAkB,GAAG,IAAI;EACzBC,SAAS,GAAG,IAAIC,GAAG,CAA2C,CAAC;;EAEvE;EACA;EACA;EACA;;EAEQC,eAAeA,CAAA,EAAG;IACxB,MAAMC,KAAK,GAAG,IAAI,CAACC,QAAQ,CAAC,CAAC;IAE7B,IAAI,CAACJ,SAAS,CAACK,OAAO,CAAEC,QAAQ,IAAKA,QAAQ,CAACH,KAAK,CAAC,CAAC;EACvD;EAEAI,SAASA,CAACD,QAAkD,EAAE;IAC5D,IAAI,CAACN,SAAS,CAACQ,GAAG,CAACF,QAAQ,CAAC;IAE5B,OAAO,MAAM;MACX,IAAI,CAACN,SAAS,CAACS,MAAM,CAACH,QAAQ,CAAC;IACjC,CAAC;EACH;EAEAF,QAAQA,CAAA,EAAG;IACT,OAAO;MACLR,YAAY,EAAE,IAAI,CAACA,YAAY;MAC/BC,UAAU,EAAE,IAAI,CAACA;IACnB,CAAC;EACH;EAEAa,cAAcA,CAACC,GAAQ,EAAE;IACvB,IAAI,CAACb,WAAW,GAAGa,GAAG;EACxB;EAEAC,aAAaA,CAACC,MAAc,EAAE;IAC5B,IAAI,CAAChB,UAAU,GAAGgB,MAAM;EAC1B;EAEAC,qBAAqBA,CAACC,OAAgB,EAAE;IACtC,IAAI,CAAChB,kBAAkB,GAAGgB,OAAO;EACnC;EAEAC,eAAeA,CAACC,KAAa,EAAE;IAC7B,IAAIA,KAAK,KAAK,IAAI,CAACrB,YAAY,EAAE;MAC/B,IAAI,CAACA,YAAY,GAAGqB,KAAK;IAC3B;EACF;EAEAC,iBAAiBA,CAAA,EAAG;IAClB,IAAI,CAAChB,eAAe,CAAC,CAAC;EACxB;EAEAiB,SAAS,GAAIF,KAAa,IAAK;IAC7B,IAAIA,KAAK,GAAG,CAAC,IAAIA,KAAK,IAAI,IAAI,CAACpB,UAAU,IAAI,CAAC,IAAI,CAACE,kBAAkB,IAAI,CAAC,IAAI,CAACD,WAAW,EAAE;MAC1F;IACF;IAEA,IAAI,CAACF,YAAY,GAAGqB,KAAK;IACzB,IAAI,CAACnB,WAAW,CAACsB,aAAa,CAAC;MAAEH,KAAK;MAAEI,QAAQ,EAAE;IAAK,CAAC,CAAC;IACzD,IAAI,CAACnB,eAAe,CAAC,CAAC;EACxB,CAAC;EAEDoB,YAAY,GAAGA,CAAA,KAAM;IACnB,IAAI,IAAI,CAAC1B,YAAY,GAAG,CAAC,EAAE;MACzB,IAAI,CAACuB,SAAS,CAAC,IAAI,CAACvB,YAAY,GAAG,CAAC,CAAC;IACvC;EACF,CAAC;EAED2B,QAAQ,GAAGA,CAAA,KAAM;IACf,IAAI,IAAI,CAAC3B,YAAY,GAAG,IAAI,CAACC,UAAU,GAAG,CAAC,EAAE;MAC3C,IAAI,CAACsB,SAAS,CAAC,IAAI,CAACvB,YAAY,GAAG,CAAC,CAAC;IACvC;EACF,CAAC;EAED4B,OAAOA,CAAA,EAAG;IACR,IAAI,CAACxB,SAAS,CAACyB,KAAK,CAAC,CAAC;IACtB,IAAI,CAAC3B,WAAW,GAAG,IAAI;IACvB,IAAI,CAACC,kBAAkB,GAAG,IAAI;IAC9B,IAAI,CAACH,YAAY,GAAG,CAAC;IACrB,IAAI,CAACC,UAAU,GAAG,CAAC;EACrB;AACF;AAEA,eAAeF,kBAAkB","ignoreList":[]}
1
+ {"version":3,"names":["ImageViewerManager","currentIndex","dataLength","width","listRef","enableSwipeGesture","listeners","Set","notifyListeners","state","getState","forEach","listener","subscribe","add","delete","setWidth","setListRef","ref","setDataLength","length","setEnableSwipeGesture","enabled","setCurrentIndex","index","notifyStateChange","goToIndex","scrollToIndex","animated","scrollTo","x","goToPrevious","goToNext","cleanUp","clear"],"sourceRoot":"../../src","sources":["ImageViewerManager.ts"],"mappings":"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","ignoreList":[]}
@@ -41,7 +41,7 @@ export const useGestureImageViewer = ({
41
41
  const translateX = useSharedValue(0);
42
42
  const scale = useSharedValue(1);
43
43
  const backdropOpacity = useSharedValue(1);
44
- const flatListRef = useRef(null);
44
+ const listRef = useRef(null);
45
45
  const dataLength = data?.length || 0;
46
46
  useAnimatedReaction(() => scale.value, currentScale => {
47
47
  runOnJS(setIsZoomed)(currentScale > 1);
@@ -73,13 +73,14 @@ export const useGestureImageViewer = ({
73
73
  manager.setDataLength(dataLength);
74
74
  manager.setEnableSwipeGesture(enableSwipeGesture);
75
75
  manager.setCurrentIndex(initialIndex);
76
+ manager.setWidth(width + itemSpacing);
76
77
  manager.notifyStateChange();
77
- }, [dataLength, enableSwipeGesture, initialIndex, manager]);
78
+ }, [dataLength, enableSwipeGesture, initialIndex, manager, width, itemSpacing]);
78
79
  useEffect(() => {
79
- if (!manager || !flatListRef.current) {
80
+ if (!manager || !listRef.current) {
80
81
  return;
81
82
  }
82
- manager.setFlatListRef(flatListRef.current);
83
+ manager.setListRef(listRef.current);
83
84
  }, [manager]);
84
85
  useEffect(() => {
85
86
  onIndexChange?.(currentIndex);
@@ -90,19 +91,26 @@ export const useGestureImageViewer = ({
90
91
  scale.value = 1;
91
92
  backdropOpacity.value = 1;
92
93
  startScale.value = 1;
93
- if (initialIndex <= 0 || !flatListRef.current) {
94
+ if (initialIndex <= 0 || !listRef.current) {
94
95
  return;
95
96
  }
96
97
  const runAfterInteractions = InteractionManager.runAfterInteractions(() => {
97
- flatListRef.current?.scrollToIndex({
98
- index: initialIndex,
99
- animated: false
100
- });
98
+ if (listRef.current.scrollToIndex) {
99
+ listRef.current.scrollToIndex({
100
+ index: initialIndex,
101
+ animated: false
102
+ });
103
+ } else if (listRef.current.scrollTo) {
104
+ listRef.current.scrollTo({
105
+ x: initialIndex * (width + itemSpacing),
106
+ animated: false
107
+ });
108
+ }
101
109
  });
102
110
  return () => {
103
111
  runAfterInteractions?.cancel();
104
112
  };
105
- }, [initialIndex, translateY, backdropOpacity, translateX, scale, startScale]);
113
+ }, [initialIndex, translateY, backdropOpacity, translateX, scale, startScale, width, itemSpacing]);
106
114
  const onMomentumScrollEnd = useCallback(event => {
107
115
  if (!enableSwipeGesture) {
108
116
  return;
@@ -223,7 +231,7 @@ export const useGestureImageViewer = ({
223
231
  currentIndex,
224
232
  dataLength,
225
233
  translateY,
226
- flatListRef,
234
+ listRef,
227
235
  isZoomed,
228
236
  dismissGesture,
229
237
  zoomGesture,
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useEffect","useMemo","useRef","useState","InteractionManager","useWindowDimensions","Gesture","Easing","interpolate","runOnJS","useAnimatedReaction","useAnimatedStyle","useSharedValue","withSpring","withTiming","registry","useGestureImageViewer","data","initialIndex","onIndexChange","onDismiss","width","customWidth","dismissThreshold","resistance","animateBackdrop","enableDismissGesture","enableSwipeGesture","enableZoomGesture","enableDoubleTapGesture","enableZoomPanGesture","maxZoomScale","itemSpacing","id","screenWidth","height","screenHeight","isZoomed","setIsZoomed","currentIndex","setCurrentIndex","manager","setManager","unsubscribeRef","initialTranslateY","initialTranslateX","startScale","translateY","translateX","scale","backdropOpacity","flatListRef","dataLength","length","value","currentScale","handleManagerChange","current","getState","subscribe","state","unsubscribeFromRegistry","subscribeToManager","setDataLength","setEnableSwipeGesture","notifyStateChange","setFlatListRef","runAfterInteractions","scrollToIndex","index","animated","cancel","onMomentumScrollEnd","event","contentOffset","nativeEvent","newIndex","Math","round","x","dismissGesture","Pan","minDistance","averageTouches","activeOffsetY","failOffsetX","enabled","onUpdate","translationY","onEnd","damping","stiffness","zoomPinchGesture","Pinch","onBegin","duration","easing","bezier","zoomPanGesture","maxTranslateX","maxTranslateY","max","min","translationX","doubleTapGesture","Tap","numberOfTaps","nextScale","zoomGesture","Simultaneous","animatedStyle","transform","backdropStyle","opacity"],"sourceRoot":"../../src","sources":["useGestureImageViewer.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useCallback","useEffect","useMemo","useRef","useState","InteractionManager","useWindowDimensions","Gesture","Easing","interpolate","runOnJS","useAnimatedReaction","useAnimatedStyle","useSharedValue","withSpring","withTiming","registry","useGestureImageViewer","data","initialIndex","onIndexChange","onDismiss","width","customWidth","dismissThreshold","resistance","animateBackdrop","enableDismissGesture","enableSwipeGesture","enableZoomGesture","enableDoubleTapGesture","enableZoomPanGesture","maxZoomScale","itemSpacing","id","screenWidth","height","screenHeight","isZoomed","setIsZoomed","currentIndex","setCurrentIndex","manager","setManager","unsubscribeRef","initialTranslateY","initialTranslateX","startScale","translateY","translateX","scale","backdropOpacity","listRef","dataLength","length","value","currentScale","handleManagerChange","current","getState","subscribe","state","unsubscribeFromRegistry","subscribeToManager","setDataLength","setEnableSwipeGesture","setWidth","notifyStateChange","setListRef","runAfterInteractions","scrollToIndex","index","animated","scrollTo","x","cancel","onMomentumScrollEnd","event","contentOffset","nativeEvent","newIndex","Math","round","dismissGesture","Pan","minDistance","averageTouches","activeOffsetY","failOffsetX","enabled","onUpdate","translationY","onEnd","damping","stiffness","zoomPinchGesture","Pinch","onBegin","duration","easing","bezier","zoomPanGesture","maxTranslateX","maxTranslateY","max","min","translationX","doubleTapGesture","Tap","numberOfTaps","nextScale","zoomGesture","Simultaneous","animatedStyle","transform","backdropStyle","opacity"],"sourceRoot":"../../src","sources":["useGestureImageViewer.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ import { FlatList as RNFlatList, ScrollView as RNScrollView } from 'react-native';
4
+ import { FlatList as GestureFlatList, ScrollView as GestureScrollView } from 'react-native-gesture-handler';
5
+ export const isScrollViewLike = component => {
6
+ return component === RNScrollView || component === GestureScrollView;
7
+ };
8
+ export const isFlatListLike = component => {
9
+ try {
10
+ const FlashList = require('@shopify/flash-list')?.FlashList;
11
+ if (FlashList && component === FlashList) {
12
+ return true;
13
+ }
14
+ } catch {
15
+ // do nothing
16
+ }
17
+ if (component === RNFlatList || component === GestureFlatList) {
18
+ return true;
19
+ }
20
+ return component?.name === 'FlashList';
21
+ };
22
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["FlatList","RNFlatList","ScrollView","RNScrollView","GestureFlatList","GestureScrollView","isScrollViewLike","component","isFlatListLike","FlashList","require","name"],"sourceRoot":"../../src","sources":["utils.ts"],"mappings":";;AAAA,SAASA,QAAQ,IAAIC,UAAU,EAAEC,UAAU,IAAIC,YAAY,QAAQ,cAAc;AACjF,SAASH,QAAQ,IAAII,eAAe,EAAEF,UAAU,IAAIG,iBAAiB,QAAQ,8BAA8B;AAE3G,OAAO,MAAMC,gBAAgB,GAAIC,SAAc,IAAuC;EACpF,OAAOA,SAAS,KAAKJ,YAAY,IAAII,SAAS,KAAKF,iBAAiB;AACtE,CAAC;AAED,OAAO,MAAMG,cAAc,GAAID,SAAc,IAAqC;EAChF,IAAI;IACF,MAAME,SAAS,GAAGC,OAAO,CAAC,qBAAqB,CAAC,EAAED,SAAS;IAE3D,IAAIA,SAAS,IAAIF,SAAS,KAAKE,SAAS,EAAE;MACxC,OAAO,IAAI;IACb;EACF,CAAC,CAAC,MAAM;IACN;EAAA;EAGF,IAAIF,SAAS,KAAKN,UAAU,IAAIM,SAAS,KAAKH,eAAe,EAAE;IAC7D,OAAO,IAAI;EACb;EAEA,OAAOG,SAAS,EAAEI,IAAI,KAAK,WAAW;AACxC,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"GestureImageViewer.d.ts","sourceRoot":"","sources":["../../../src/GestureImageViewer.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAWvD,wBAAgB,kBAAkB,CAAC,CAAC,GAAG,GAAG,EAAE,EAC1C,EAAc,EACd,IAAI,EACJ,WAAW,EACX,eAAe,EACf,aAAwB,EACxB,KAAK,EAAE,WAAW,EAClB,SAAS,EACT,aAAa,EAAE,kBAAkB,EACjC,cAAc,EACd,YAAgB,EAChB,WAAe,EACf,GAAG,KAAK,EACT,EAAE,uBAAuB,CAAC,CAAC,CAAC,2CA8F5B"}
1
+ {"version":3,"file":"GestureImageViewer.d.ts","sourceRoot":"","sources":["../../../src/GestureImageViewer.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAYvD,wBAAgB,kBAAkB,CAAC,CAAC,GAAG,GAAG,EAAE,EAC1C,EAAc,EACd,IAAI,EACJ,WAAW,EACX,eAAe,EACf,aAAwB,EACxB,KAAK,EAAE,WAAW,EAClB,SAAS,EACT,aAAa,EAAE,kBAAkB,EACjC,cAAc,EACd,YAAgB,EAChB,WAAe,EACf,GAAG,KAAK,EACT,EAAE,uBAAuB,CAAC,CAAC,CAAC,2CAiH5B"}
@@ -5,7 +5,8 @@ export type ImageViewerManagerState = {
5
5
  declare class ImageViewerManager {
6
6
  private currentIndex;
7
7
  private dataLength;
8
- private flatListRef;
8
+ private width;
9
+ private listRef;
9
10
  private enableSwipeGesture;
10
11
  private listeners;
11
12
  private notifyListeners;
@@ -14,7 +15,8 @@ declare class ImageViewerManager {
14
15
  currentIndex: number;
15
16
  dataLength: number;
16
17
  };
17
- setFlatListRef(ref: any): void;
18
+ setWidth(width: number): void;
19
+ setListRef(ref: any): void;
18
20
  setDataLength(length: number): void;
19
21
  setEnableSwipeGesture(enabled: boolean): void;
20
22
  setCurrentIndex(index: number): void;
@@ -1 +1 @@
1
- {"version":3,"file":"ImageViewerManager.d.ts","sourceRoot":"","sources":["../../../src/ImageViewerManager.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAAG;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,cAAM,kBAAkB;IACtB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,kBAAkB,CAAQ;IAClC,OAAO,CAAC,SAAS,CAAuD;IAOxE,OAAO,CAAC,eAAe;IAMvB,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,IAAI;IAQ5D,QAAQ;;;;IAOR,cAAc,CAAC,GAAG,EAAE,GAAG;IAIvB,aAAa,CAAC,MAAM,EAAE,MAAM;IAI5B,qBAAqB,CAAC,OAAO,EAAE,OAAO;IAItC,eAAe,CAAC,KAAK,EAAE,MAAM;IAM7B,iBAAiB;IAIjB,SAAS,GAAI,OAAO,MAAM,UAQxB;IAEF,YAAY,aAIV;IAEF,QAAQ,aAIN;IAEF,OAAO;CAOR;AAED,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"ImageViewerManager.d.ts","sourceRoot":"","sources":["../../../src/ImageViewerManager.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAAG;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,cAAM,kBAAkB;IACtB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,kBAAkB,CAAQ;IAClC,OAAO,CAAC,SAAS,CAAuD;IAOxE,OAAO,CAAC,eAAe;IAMvB,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,IAAI;IAQ5D,QAAQ;;;;IAOR,QAAQ,CAAC,KAAK,EAAE,MAAM;IAItB,UAAU,CAAC,GAAG,EAAE,GAAG;IAInB,aAAa,CAAC,MAAM,EAAE,MAAM;IAI5B,qBAAqB,CAAC,OAAO,EAAE,OAAO;IAItC,eAAe,CAAC,KAAK,EAAE,MAAM;IAM7B,iBAAiB;IAIjB,SAAS,GAAI,OAAO,MAAM,UAcxB;IAEF,YAAY,aAIV;IAEF,QAAQ,aAIN;IAEF,OAAO;CAOR;AAED,eAAe,kBAAkB,CAAC"}
@@ -5,7 +5,7 @@ export declare const useGestureImageViewer: <T = any>({ data, initialIndex, onIn
5
5
  currentIndex: number;
6
6
  dataLength: number;
7
7
  translateY: import("react-native-reanimated").SharedValue<number>;
8
- flatListRef: import("react").RefObject<any>;
8
+ listRef: import("react").RefObject<any>;
9
9
  isZoomed: boolean;
10
10
  dismissGesture: import("react-native-gesture-handler/lib/typescript/handlers/gestures/panGesture").PanGesture;
11
11
  zoomGesture: import("react-native-gesture-handler/lib/typescript/handlers/gestures/gestureComposition").SimultaneousGesture;
@@ -1 +1 @@
1
- {"version":3,"file":"useGestureImageViewer.d.ts","sourceRoot":"","sources":["../../../src/useGestureImageViewer.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EAE1B,MAAM,cAAc,CAAC;AActB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAEvD,KAAK,0BAA0B,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAC7C,uBAAuB,CAAC,CAAC,CAAC,EAC1B,aAAa,GAAG,iBAAiB,GAAG,eAAe,GAAG,WAAW,GAAG,gBAAgB,GAAG,eAAe,CACvG,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,CAAC,GAAG,GAAG,EAAE,gQAmB5C,0BAA0B,CAAC,CAAC,CAAC;;;;;;;;iCAwGpB,oBAAoB,CAAC,iBAAiB,CAAC;;;;;;;;;;;;;;;;;;;CA2LlD,CAAC"}
1
+ {"version":3,"file":"useGestureImageViewer.d.ts","sourceRoot":"","sources":["../../../src/useGestureImageViewer.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EAE1B,MAAM,cAAc,CAAC;AActB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAEvD,KAAK,0BAA0B,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAC7C,uBAAuB,CAAC,CAAC,CAAC,EAC1B,aAAa,GAAG,iBAAiB,GAAG,eAAe,GAAG,WAAW,GAAG,gBAAgB,GAAG,eAAe,CACvG,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,CAAC,GAAG,GAAG,EAAE,gQAmB5C,0BAA0B,CAAC,CAAC,CAAC;;;;;;;;iCAgHpB,oBAAoB,CAAC,iBAAiB,CAAC;;;;;;;;;;;;;;;;;;;CA2LlD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { FlatList as RNFlatList, ScrollView as RNScrollView } from 'react-native';
2
+ export declare const isScrollViewLike: (component: any) => component is typeof RNScrollView;
3
+ export declare const isFlatListLike: (component: any) => component is typeof RNFlatList;
4
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,UAAU,IAAI,YAAY,EAAE,MAAM,cAAc,CAAC;AAGlF,eAAO,MAAM,gBAAgB,GAAI,WAAW,GAAG,KAAG,SAAS,IAAI,OAAO,YAErE,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,WAAW,GAAG,KAAG,SAAS,IAAI,OAAO,UAgBnE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-gesture-image-viewer",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "🖼️ A highly customizable and easy-to-use React Native image viewer with gesture support and external controls",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -1,10 +1,11 @@
1
1
  import { useCallback, useEffect, useMemo } from 'react';
2
- import { Platform, StyleSheet, useWindowDimensions, View } from 'react-native';
2
+ import { Platform, type ScrollViewProps, StyleSheet, useWindowDimensions, View } from 'react-native';
3
3
  import { FlatList, Gesture, GestureDetector, GestureHandlerRootView } from 'react-native-gesture-handler';
4
4
  import Animated from 'react-native-reanimated';
5
5
  import { registry } from './ImageViewerRegistry';
6
6
  import type { GestureImageViewerProps } from './types';
7
7
  import { useGestureImageViewer } from './useGestureImageViewer';
8
+ import { isFlatListLike, isScrollViewLike } from './utils';
8
9
 
9
10
  const WebPagingFix = () => {
10
11
  if (Platform.OS !== 'web') {
@@ -32,7 +33,7 @@ export function GestureImageViewer<T = any>({
32
33
 
33
34
  const width = customWidth || screenWidth;
34
35
 
35
- const { flatListRef, isZoomed, dismissGesture, zoomGesture, onMomentumScrollEnd, animatedStyle, backdropStyle } =
36
+ const { listRef, isZoomed, dismissGesture, zoomGesture, onMomentumScrollEnd, animatedStyle, backdropStyle } =
36
37
  useGestureImageViewer({
37
38
  id,
38
39
  data,
@@ -46,6 +47,7 @@ export function GestureImageViewer<T = any>({
46
47
  ({ item, index }: { item: T; index: number }) => {
47
48
  return (
48
49
  <View
50
+ key={typeof item === 'string' ? item : index}
49
51
  style={[
50
52
  {
51
53
  width: width,
@@ -72,7 +74,10 @@ export function GestureImageViewer<T = any>({
72
74
  [width, itemSpacing],
73
75
  );
74
76
 
75
- const keyExtractor = useCallback((item: T, index: number) => `image-${index}-${item}`, []);
77
+ const keyExtractor = useCallback(
78
+ (item: T, index: number) => (typeof item === 'string' ? item : `image-${index}`),
79
+ [],
80
+ );
76
81
 
77
82
  const gesture = useMemo(() => {
78
83
  return Gesture.Race(dismissGesture, zoomGesture);
@@ -84,35 +89,50 @@ export function GestureImageViewer<T = any>({
84
89
  return () => registry.deleteManager(id);
85
90
  }, [id]);
86
91
 
92
+ const commonProps: ScrollViewProps = useMemo(
93
+ () => ({
94
+ horizontal: true,
95
+ scrollEnabled: !isZoomed,
96
+ showsHorizontalScrollIndicator: false,
97
+ onMomentumScrollEnd: onMomentumScrollEnd,
98
+ snapToInterval: width + itemSpacing,
99
+ snapToAlignment: 'center',
100
+ decelerationRate: 'fast',
101
+ scrollEventThrottle: 16,
102
+ removeClippedSubviews: true,
103
+ }),
104
+ [width, itemSpacing, isZoomed, onMomentumScrollEnd],
105
+ );
106
+
87
107
  const listComponent = (
88
108
  <GestureHandlerRootView>
89
109
  <GestureDetector gesture={gesture}>
90
110
  <View style={[styles.container, containerStyle]}>
91
111
  <Animated.View style={[styles.background, backdropStyleProps, backdropStyle]} />
92
112
  <Animated.View style={[styles.content, animatedStyle]}>
93
- <ListComponent
94
- ref={flatListRef}
95
- data={data}
96
- renderItem={renderItem}
97
- keyExtractor={keyExtractor}
98
- horizontal
99
- scrollEnabled={!isZoomed}
100
- showsHorizontalScrollIndicator={false}
101
- onMomentumScrollEnd={onMomentumScrollEnd}
102
- getItemLayout={getItemLayout}
103
- initialScrollIndex={initialIndex}
104
- windowSize={3}
105
- maxToRenderPerBatch={3}
106
- removeClippedSubviews
107
- snapToInterval={width + itemSpacing}
108
- estimatedItemSize={width + itemSpacing}
109
- snapToAlignment="center"
110
- decelerationRate="fast"
111
- scrollEventThrottle={16}
112
- // NOTE - https://github.com/necolas/react-native-web/issues/1299
113
- {...(Platform.OS === 'web' && { dataSet: { 'paging-enabled-fix': true } })}
114
- {...listProps}
115
- />
113
+ {isScrollViewLike(ListComponent) ? (
114
+ <ListComponent ref={listRef} {...commonProps} {...listProps}>
115
+ {data.map((item, index) => renderItem({ item, index }))}
116
+ </ListComponent>
117
+ ) : (
118
+ isFlatListLike(ListComponent) && (
119
+ <ListComponent
120
+ ref={listRef}
121
+ {...commonProps}
122
+ data={data}
123
+ renderItem={renderItem}
124
+ initialScrollIndex={initialIndex}
125
+ keyExtractor={keyExtractor}
126
+ estimatedItemSize={width + itemSpacing}
127
+ windowSize={3}
128
+ maxToRenderPerBatch={3}
129
+ getItemLayout={getItemLayout}
130
+ // NOTE - https://github.com/necolas/react-native-web/issues/1299
131
+ {...(Platform.OS === 'web' && { dataSet: { 'paging-enabled-fix': true } })}
132
+ {...listProps}
133
+ />
134
+ )
135
+ )}
116
136
  </Animated.View>
117
137
  <WebPagingFix />
118
138
  </View>
@@ -6,7 +6,8 @@ export type ImageViewerManagerState = {
6
6
  class ImageViewerManager {
7
7
  private currentIndex = 0;
8
8
  private dataLength = 0;
9
- private flatListRef: any = null;
9
+ private width = 0;
10
+ private listRef: any | null = null;
10
11
  private enableSwipeGesture = true;
11
12
  private listeners = new Set<(state: ImageViewerManagerState) => void>();
12
13
 
@@ -36,8 +37,12 @@ class ImageViewerManager {
36
37
  };
37
38
  }
38
39
 
39
- setFlatListRef(ref: any) {
40
- this.flatListRef = ref;
40
+ setWidth(width: number) {
41
+ this.width = width;
42
+ }
43
+
44
+ setListRef(ref: any) {
45
+ this.listRef = ref;
41
46
  }
42
47
 
43
48
  setDataLength(length: number) {
@@ -59,12 +64,18 @@ class ImageViewerManager {
59
64
  }
60
65
 
61
66
  goToIndex = (index: number) => {
62
- if (index < 0 || index >= this.dataLength || !this.enableSwipeGesture || !this.flatListRef) {
67
+ if (index < 0 || index >= this.dataLength || !this.enableSwipeGesture || !this.listRef) {
63
68
  return;
64
69
  }
65
70
 
66
71
  this.currentIndex = index;
67
- this.flatListRef.scrollToIndex({ index, animated: true });
72
+
73
+ if (this.listRef.scrollToIndex) {
74
+ this.listRef.scrollToIndex({ index, animated: true });
75
+ } else if (this.listRef.scrollTo) {
76
+ this.listRef.scrollTo({ x: index * this.width, animated: true });
77
+ }
78
+
68
79
  this.notifyListeners();
69
80
  };
70
81
 
@@ -82,7 +93,7 @@ class ImageViewerManager {
82
93
 
83
94
  cleanUp() {
84
95
  this.listeners.clear();
85
- this.flatListRef = null;
96
+ this.listRef = null;
86
97
  this.enableSwipeGesture = true;
87
98
  this.currentIndex = 0;
88
99
  this.dataLength = 0;
@@ -64,7 +64,7 @@ export const useGestureImageViewer = <T = any>({
64
64
  const scale = useSharedValue(1);
65
65
  const backdropOpacity = useSharedValue(1);
66
66
 
67
- const flatListRef = useRef<any>(null);
67
+ const listRef = useRef<any>(null);
68
68
 
69
69
  const dataLength = data?.length || 0;
70
70
 
@@ -109,15 +109,16 @@ export const useGestureImageViewer = <T = any>({
109
109
  manager.setDataLength(dataLength);
110
110
  manager.setEnableSwipeGesture(enableSwipeGesture);
111
111
  manager.setCurrentIndex(initialIndex);
112
+ manager.setWidth(width + itemSpacing);
112
113
  manager.notifyStateChange();
113
- }, [dataLength, enableSwipeGesture, initialIndex, manager]);
114
+ }, [dataLength, enableSwipeGesture, initialIndex, manager, width, itemSpacing]);
114
115
 
115
116
  useEffect(() => {
116
- if (!manager || !flatListRef.current) {
117
+ if (!manager || !listRef.current) {
117
118
  return;
118
119
  }
119
120
 
120
- manager.setFlatListRef(flatListRef.current);
121
+ manager.setListRef(listRef.current);
121
122
  }, [manager]);
122
123
 
123
124
  useEffect(() => {
@@ -131,21 +132,28 @@ export const useGestureImageViewer = <T = any>({
131
132
  backdropOpacity.value = 1;
132
133
  startScale.value = 1;
133
134
 
134
- if (initialIndex <= 0 || !flatListRef.current) {
135
+ if (initialIndex <= 0 || !listRef.current) {
135
136
  return;
136
137
  }
137
138
 
138
139
  const runAfterInteractions = InteractionManager.runAfterInteractions(() => {
139
- flatListRef.current?.scrollToIndex({
140
- index: initialIndex,
141
- animated: false,
142
- });
140
+ if (listRef.current.scrollToIndex) {
141
+ listRef.current.scrollToIndex({
142
+ index: initialIndex,
143
+ animated: false,
144
+ });
145
+ } else if (listRef.current.scrollTo) {
146
+ listRef.current.scrollTo({
147
+ x: initialIndex * (width + itemSpacing),
148
+ animated: false,
149
+ });
150
+ }
143
151
  });
144
152
 
145
153
  return () => {
146
154
  runAfterInteractions?.cancel();
147
155
  };
148
- }, [initialIndex, translateY, backdropOpacity, translateX, scale, startScale]);
156
+ }, [initialIndex, translateY, backdropOpacity, translateX, scale, startScale, width, itemSpacing]);
149
157
 
150
158
  const onMomentumScrollEnd = useCallback(
151
159
  (event: NativeSyntheticEvent<NativeScrollEvent>) => {
@@ -324,7 +332,7 @@ export const useGestureImageViewer = <T = any>({
324
332
  currentIndex,
325
333
  dataLength,
326
334
  translateY,
327
- flatListRef,
335
+ listRef,
328
336
  isZoomed,
329
337
 
330
338
  dismissGesture,
package/src/utils.ts ADDED
@@ -0,0 +1,24 @@
1
+ import { FlatList as RNFlatList, ScrollView as RNScrollView } from 'react-native';
2
+ import { FlatList as GestureFlatList, ScrollView as GestureScrollView } from 'react-native-gesture-handler';
3
+
4
+ export const isScrollViewLike = (component: any): component is typeof RNScrollView => {
5
+ return component === RNScrollView || component === GestureScrollView;
6
+ };
7
+
8
+ export const isFlatListLike = (component: any): component is typeof RNFlatList => {
9
+ try {
10
+ const FlashList = require('@shopify/flash-list')?.FlashList;
11
+
12
+ if (FlashList && component === FlashList) {
13
+ return true;
14
+ }
15
+ } catch {
16
+ // do nothing
17
+ }
18
+
19
+ if (component === RNFlatList || component === GestureFlatList) {
20
+ return true;
21
+ }
22
+
23
+ return component?.name === 'FlashList';
24
+ };