react-native-gesture-image-viewer 0.4.0 → 0.5.1

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
@@ -16,7 +16,7 @@ Existing libraries often have limited customization options or performance issue
16
16
  - ✅ **External Control API** - Programmatic control from buttons or other components
17
17
  - ✅ **Multi-Instance Management** - ID-based independent management of multiple viewers
18
18
  - ✅ **Flexible Integration** - Use with FlatList, FlashList, Expo Image, FastImage, and more
19
- - ✅ **Full TypeScript Support** - Type safety and enhanced developer experience
19
+ - ✅ **Full TypeScript Support** - Enhanced developer experience with smart type inference
20
20
  - ✅ **Cross-Platform** - iOS, Android, and Web support
21
21
  - ✅ **Easy-to-Use API** - Intuitive and simple implementation without complex setup
22
22
  - ✅ **Various Environment Support** - Expo Go and New Architecture support
@@ -168,17 +168,19 @@ 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.
172
- You can also customize the props of each supported list component through `listProps`.
171
+ Support for any list component like `ScrollView`, `FlatList`, `FlashList` through the `ListComponent` prop.
172
+ The `listProps` provides **type inference based on the selected list component**, ensuring accurate autocompletion and type safety in your IDE.
173
173
 
174
174
  ```tsx
175
+ import { FlashList } from '@shopify/flash-list';
176
+
175
177
  function App() {
176
178
  return (
177
179
  <GestureImageViewer
178
180
  data={images}
179
- ListComponent={FlatList}
181
+ ListComponent={FlashList}
180
182
  listProps={{
181
- // ....
183
+ // ✅ FlashList props autocompletion
182
184
  }}
183
185
  />
184
186
  );
@@ -2,10 +2,11 @@
2
2
 
3
3
  import { useCallback, useEffect, useMemo } from 'react';
4
4
  import { Platform, StyleSheet, useWindowDimensions, View } from 'react-native';
5
- import { FlatList, Gesture, GestureDetector, GestureHandlerRootView } from 'react-native-gesture-handler';
5
+ import { Gesture, GestureDetector, GestureHandlerRootView } from 'react-native-gesture-handler';
6
6
  import Animated from 'react-native-reanimated';
7
7
  import { registry } from "./ImageViewerRegistry.js";
8
8
  import { useGestureImageViewer } from "./useGestureImageViewer.js";
9
+ import { isFlashListLike, 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') {
@@ -20,7 +21,7 @@ export function GestureImageViewer({
20
21
  data,
21
22
  renderImage,
22
23
  renderContainer,
23
- ListComponent = FlatList,
24
+ ListComponent,
24
25
  width: customWidth,
25
26
  listProps,
26
27
  backdropStyle: backdropStyleProps,
@@ -29,12 +30,13 @@ export function GestureImageViewer({
29
30
  itemSpacing = 0,
30
31
  ...props
31
32
  }) {
33
+ const Component = ListComponent;
32
34
  const {
33
35
  width: screenWidth
34
36
  } = useWindowDimensions();
35
37
  const width = customWidth || screenWidth;
36
38
  const {
37
- flatListRef,
39
+ listRef,
38
40
  isZoomed,
39
41
  dismissGesture,
40
42
  zoomGesture,
@@ -62,14 +64,14 @@ export function GestureImageViewer({
62
64
  marginHorizontal: itemSpacing / 2
63
65
  }],
64
66
  children: renderImage(item, index)
65
- });
67
+ }, typeof item === 'string' ? item : index);
66
68
  }, [width, itemSpacing, renderImage]);
67
69
  const getItemLayout = useCallback((_, index) => ({
68
70
  length: width + itemSpacing,
69
71
  offset: (width + itemSpacing) * index,
70
72
  index
71
73
  }), [width, itemSpacing]);
72
- const keyExtractor = useCallback((item, index) => `image-${index}-${item}`, []);
74
+ const keyExtractor = useCallback((item, index) => typeof item === 'string' ? item : `image-${index}`, []);
73
75
  const gesture = useMemo(() => {
74
76
  return Gesture.Race(dismissGesture, zoomGesture);
75
77
  }, [zoomGesture, dismissGesture]);
@@ -77,6 +79,17 @@ export function GestureImageViewer({
77
79
  registry.createManager(id);
78
80
  return () => registry.deleteManager(id);
79
81
  }, [id]);
82
+ const commonProps = useMemo(() => ({
83
+ horizontal: true,
84
+ scrollEnabled: !isZoomed,
85
+ showsHorizontalScrollIndicator: false,
86
+ onMomentumScrollEnd: onMomentumScrollEnd,
87
+ snapToInterval: width + itemSpacing,
88
+ snapToAlignment: 'center',
89
+ decelerationRate: 'fast',
90
+ scrollEventThrottle: 16,
91
+ removeClippedSubviews: true
92
+ }), [width, itemSpacing, isZoomed, onMomentumScrollEnd]);
80
93
  const listComponent = /*#__PURE__*/_jsx(GestureHandlerRootView, {
81
94
  children: /*#__PURE__*/_jsx(GestureDetector, {
82
95
  gesture: gesture,
@@ -86,27 +99,27 @@ export function GestureImageViewer({
86
99
  style: [styles.background, backdropStyleProps, backdropStyle]
87
100
  }), /*#__PURE__*/_jsx(Animated.View, {
88
101
  style: [styles.content, animatedStyle],
89
- children: /*#__PURE__*/_jsx(ListComponent, {
90
- ref: flatListRef,
102
+ children: isScrollViewLike(Component) ? /*#__PURE__*/_jsx(Component, {
103
+ ref: listRef,
104
+ ...commonProps,
105
+ ...listProps,
106
+ children: data.map((item, index) => renderItem({
107
+ item,
108
+ index
109
+ }))
110
+ }) : isFlatListLike(Component) && /*#__PURE__*/_jsx(Component, {
111
+ ref: listRef,
112
+ ...commonProps,
91
113
  data: data,
92
114
  renderItem: renderItem,
93
- keyExtractor: keyExtractor,
94
- horizontal: true,
95
- scrollEnabled: !isZoomed,
96
- showsHorizontalScrollIndicator: false,
97
- onMomentumScrollEnd: onMomentumScrollEnd,
98
- getItemLayout: getItemLayout,
99
115
  initialScrollIndex: initialIndex,
116
+ keyExtractor: keyExtractor,
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
108
- // NOTE - https://github.com/necolas/react-native-web/issues/1299
109
- ,
119
+ getItemLayout: getItemLayout,
120
+ ...(isFlashListLike(Component) && {
121
+ estimatedItemSize: width + itemSpacing
122
+ }),
110
123
  ...(Platform.OS === 'web' && {
111
124
  dataSet: {
112
125
  'paging-enabled-fix': true
@@ -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","Gesture","GestureDetector","GestureHandlerRootView","Animated","registry","useGestureImageViewer","isFlashListLike","isFlatListLike","isScrollViewLike","jsx","_jsx","jsxs","_jsxs","WebPagingFix","OS","children","GestureImageViewer","id","data","renderImage","renderContainer","ListComponent","width","customWidth","listProps","backdropStyle","backdropStyleProps","containerStyle","initialIndex","itemSpacing","props","Component","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","windowSize","maxToRenderPerBatch","estimatedItemSize","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,25 @@
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
+ if (component === RNFlatList || component === GestureFlatList || isFlashListLike(component)) {
10
+ return true;
11
+ }
12
+ return false;
13
+ };
14
+ export const isFlashListLike = component => {
15
+ try {
16
+ const FlashList = require('@shopify/flash-list')?.FlashList;
17
+ if (FlashList && component === FlashList) {
18
+ return true;
19
+ }
20
+ } catch {
21
+ // do nothing
22
+ }
23
+ return component?.name === 'FlashList';
24
+ };
25
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["FlatList","RNFlatList","ScrollView","RNScrollView","GestureFlatList","GestureScrollView","isScrollViewLike","component","isFlatListLike","isFlashListLike","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;AAG3G,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,IAAIA,SAAS,KAAKN,UAAU,IAAIM,SAAS,KAAKH,eAAe,IAAIK,eAAe,CAACF,SAAS,CAAC,EAAE;IAC3F,OAAO,IAAI;EACb;EAEA,OAAO,KAAK;AACd,CAAC;AAED,OAAO,MAAME,eAAe,GAAIF,SAAc,IAAuB;EACnE,IAAI;IACF,MAAMG,SAAS,GAAGC,OAAO,CAAC,qBAAqB,CAAC,EAAED,SAAS;IAE3D,IAAIA,SAAS,IAAIH,SAAS,KAAKG,SAAS,EAAE;MACxC,OAAO,IAAI;IACb;EACF,CAAC,CAAC,MAAM;IACN;EAAA;EAGF,OAAOH,SAAS,EAAEK,IAAI,KAAK,WAAW;AACxC,CAAC","ignoreList":[]}
@@ -1,3 +1,4 @@
1
+ import { type FlatList } from 'react-native';
1
2
  import type { GestureImageViewerProps } from './types';
2
- export declare function GestureImageViewer<T = any>({ id, data, renderImage, renderContainer, ListComponent, width: customWidth, listProps, backdropStyle: backdropStyleProps, containerStyle, initialIndex, itemSpacing, ...props }: GestureImageViewerProps<T>): import("react/jsx-runtime").JSX.Element;
3
+ export declare function GestureImageViewer<T = any, LC = typeof FlatList>({ id, data, renderImage, renderContainer, ListComponent, width: customWidth, listProps, backdropStyle: backdropStyleProps, containerStyle, initialIndex, itemSpacing, ...props }: GestureImageViewerProps<T, LC>): import("react/jsx-runtime").JSX.Element;
3
4
  //# sourceMappingURL=GestureImageViewer.d.ts.map
@@ -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":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAyE,MAAM,cAAc,CAAC;AAIpH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAYvD,wBAAgB,kBAAkB,CAAC,CAAC,GAAG,GAAG,EAAE,EAAE,GAAG,OAAO,QAAQ,EAAE,EAChE,EAAc,EACd,IAAI,EACJ,WAAW,EACX,eAAe,EACf,aAAa,EACb,KAAK,EAAE,WAAW,EAClB,SAAS,EACT,aAAa,EAAE,kBAAkB,EACjC,cAAc,EACd,YAAgB,EAChB,WAAe,EACf,GAAG,KAAK,EACT,EAAE,uBAAuB,CAAC,CAAC,EAAE,EAAE,CAAC,2CAmHhC"}
@@ -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"}
@@ -1,6 +1,11 @@
1
- import type { StyleProp, ViewStyle } from 'react-native';
2
- import type { SharedValue } from 'react-native-reanimated';
3
- export interface GestureImageViewerProps<T = any> {
1
+ import type React from 'react';
2
+ import type { FlatList as RNFlatList, ScrollView as RNScrollView, StyleProp, ViewStyle } from 'react-native';
3
+ import type { FlatList as GHFlatList, ScrollView as GHScrollView } from 'react-native-gesture-handler';
4
+ export type FlatListComponent = typeof RNFlatList | typeof GHFlatList;
5
+ export type ScrollViewComponent = typeof RNScrollView | typeof GHScrollView;
6
+ type GetComponentProps<T> = T extends React.ComponentType<infer P> ? P : never;
7
+ type ConditionalListProps<LC> = LC extends FlatListComponent ? React.ComponentProps<LC> : LC extends ScrollViewComponent ? React.ComponentProps<LC> : GetComponentProps<LC>;
8
+ export interface GestureImageViewerProps<T = any, LC = typeof RNFlatList> {
4
9
  id?: string;
5
10
  data: T[];
6
11
  initialIndex?: number;
@@ -8,15 +13,13 @@ export interface GestureImageViewerProps<T = any> {
8
13
  onDismiss?: () => void;
9
14
  renderImage: (item: T, index: number) => React.ReactElement;
10
15
  renderContainer?: (children: React.ReactElement) => React.ReactElement;
11
- ListComponent?: any;
16
+ ListComponent: LC;
12
17
  width?: number;
13
18
  dismissThreshold?: number;
14
- swipeThreshold?: number;
15
- velocityThreshold?: number;
16
19
  enableDismissGesture?: boolean;
17
20
  enableSwipeGesture?: boolean;
18
21
  resistance?: number;
19
- listProps?: any;
22
+ listProps?: Partial<ConditionalListProps<LC>>;
20
23
  backdropStyle?: StyleProp<ViewStyle>;
21
24
  containerStyle?: StyleProp<ViewStyle>;
22
25
  animateBackdrop?: boolean;
@@ -26,10 +29,5 @@ export interface GestureImageViewerProps<T = any> {
26
29
  maxZoomScale?: number;
27
30
  itemSpacing?: number;
28
31
  }
29
- export interface GestureState {
30
- currentIndex: number;
31
- translateY: SharedValue<number>;
32
- isGestureActive: boolean;
33
- lockDirection: 'horizontal' | 'vertical' | null;
34
- }
32
+ export {};
35
33
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,WAAW,uBAAuB,CAAC,CAAC,GAAG,GAAG;IAC9C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,YAAY,CAAC;IAC5D,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY,CAAC;IACvE,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,aAAa,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACrC,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAChC,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,YAAY,GAAG,UAAU,GAAG,IAAI,CAAC;CACjD"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,QAAQ,IAAI,UAAU,EAAE,UAAU,IAAI,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC7G,OAAO,KAAK,EAAE,QAAQ,IAAI,UAAU,EAAE,UAAU,IAAI,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAEvG,MAAM,MAAM,iBAAiB,GAAG,OAAO,UAAU,GAAG,OAAO,UAAU,CAAC;AACtE,MAAM,MAAM,mBAAmB,GAAG,OAAO,YAAY,GAAG,OAAO,YAAY,CAAC;AAE5E,KAAK,iBAAiB,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAE/E,KAAK,oBAAoB,CAAC,EAAE,IAAI,EAAE,SAAS,iBAAiB,GACxD,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC,GACxB,EAAE,SAAS,mBAAmB,GAC5B,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC,GACxB,iBAAiB,CAAC,EAAE,CAAC,CAAC;AAE5B,MAAM,WAAW,uBAAuB,CAAC,CAAC,GAAG,GAAG,EAAE,EAAE,GAAG,OAAO,UAAU;IACtE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,YAAY,CAAC;IAC5D,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY,CAAC;IACvE,aAAa,EAAE,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAG1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9C,aAAa,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACrC,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
@@ -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,5 @@
1
+ import type { FlatListComponent, ScrollViewComponent } from './types';
2
+ export declare const isScrollViewLike: (component: any) => component is ScrollViewComponent;
3
+ export declare const isFlatListLike: (component: any) => component is FlatListComponent;
4
+ export declare const isFlashListLike: (component: any) => component is any;
5
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEtE,eAAO,MAAM,gBAAgB,GAAI,WAAW,GAAG,KAAG,SAAS,IAAI,mBAE9D,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,WAAW,GAAG,KAAG,SAAS,IAAI,iBAM5D,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,WAAW,GAAG,KAAG,SAAS,IAAI,GAY7D,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.1",
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';
3
- import { FlatList, Gesture, GestureDetector, GestureHandlerRootView } from 'react-native-gesture-handler';
2
+ import { type FlatList, Platform, type ScrollViewProps, StyleSheet, useWindowDimensions, View } from 'react-native';
3
+ import { 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 { isFlashListLike, isFlatListLike, isScrollViewLike } from './utils';
8
9
 
9
10
  const WebPagingFix = () => {
10
11
  if (Platform.OS !== 'web') {
@@ -14,12 +15,12 @@ const WebPagingFix = () => {
14
15
  return <style>{`[data-paging-enabled-fix] > div > div > div {height: 100%;}`}</style>;
15
16
  };
16
17
 
17
- export function GestureImageViewer<T = any>({
18
+ export function GestureImageViewer<T = any, LC = typeof FlatList>({
18
19
  id = 'default',
19
20
  data,
20
21
  renderImage,
21
22
  renderContainer,
22
- ListComponent = FlatList,
23
+ ListComponent,
23
24
  width: customWidth,
24
25
  listProps,
25
26
  backdropStyle: backdropStyleProps,
@@ -27,12 +28,14 @@ export function GestureImageViewer<T = any>({
27
28
  initialIndex = 0,
28
29
  itemSpacing = 0,
29
30
  ...props
30
- }: GestureImageViewerProps<T>) {
31
+ }: GestureImageViewerProps<T, LC>) {
32
+ const Component = ListComponent as React.ComponentType<any>;
33
+
31
34
  const { width: screenWidth } = useWindowDimensions();
32
35
 
33
36
  const width = customWidth || screenWidth;
34
37
 
35
- const { flatListRef, isZoomed, dismissGesture, zoomGesture, onMomentumScrollEnd, animatedStyle, backdropStyle } =
38
+ const { listRef, isZoomed, dismissGesture, zoomGesture, onMomentumScrollEnd, animatedStyle, backdropStyle } =
36
39
  useGestureImageViewer({
37
40
  id,
38
41
  data,
@@ -46,6 +49,7 @@ export function GestureImageViewer<T = any>({
46
49
  ({ item, index }: { item: T; index: number }) => {
47
50
  return (
48
51
  <View
52
+ key={typeof item === 'string' ? item : index}
49
53
  style={[
50
54
  {
51
55
  width: width,
@@ -64,7 +68,7 @@ export function GestureImageViewer<T = any>({
64
68
  );
65
69
 
66
70
  const getItemLayout = useCallback(
67
- (_: any, index: number) => ({
71
+ (_: ArrayLike<T> | null | undefined, index: number) => ({
68
72
  length: width + itemSpacing,
69
73
  offset: (width + itemSpacing) * index,
70
74
  index,
@@ -72,7 +76,10 @@ export function GestureImageViewer<T = any>({
72
76
  [width, itemSpacing],
73
77
  );
74
78
 
75
- const keyExtractor = useCallback((item: T, index: number) => `image-${index}-${item}`, []);
79
+ const keyExtractor = useCallback(
80
+ (item: T, index: number) => (typeof item === 'string' ? item : `image-${index}`),
81
+ [],
82
+ );
76
83
 
77
84
  const gesture = useMemo(() => {
78
85
  return Gesture.Race(dismissGesture, zoomGesture);
@@ -84,35 +91,50 @@ export function GestureImageViewer<T = any>({
84
91
  return () => registry.deleteManager(id);
85
92
  }, [id]);
86
93
 
94
+ const commonProps: ScrollViewProps = useMemo(
95
+ () => ({
96
+ horizontal: true,
97
+ scrollEnabled: !isZoomed,
98
+ showsHorizontalScrollIndicator: false,
99
+ onMomentumScrollEnd: onMomentumScrollEnd,
100
+ snapToInterval: width + itemSpacing,
101
+ snapToAlignment: 'center',
102
+ decelerationRate: 'fast',
103
+ scrollEventThrottle: 16,
104
+ removeClippedSubviews: true,
105
+ }),
106
+ [width, itemSpacing, isZoomed, onMomentumScrollEnd],
107
+ );
108
+
87
109
  const listComponent = (
88
110
  <GestureHandlerRootView>
89
111
  <GestureDetector gesture={gesture}>
90
112
  <View style={[styles.container, containerStyle]}>
91
113
  <Animated.View style={[styles.background, backdropStyleProps, backdropStyle]} />
92
114
  <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
- />
115
+ {isScrollViewLike(Component) ? (
116
+ <Component ref={listRef} {...commonProps} {...listProps}>
117
+ {data.map((item, index) => renderItem({ item, index }))}
118
+ </Component>
119
+ ) : (
120
+ isFlatListLike(Component) && (
121
+ <Component
122
+ ref={listRef}
123
+ {...commonProps}
124
+ data={data}
125
+ renderItem={renderItem}
126
+ initialScrollIndex={initialIndex}
127
+ keyExtractor={keyExtractor}
128
+ windowSize={3}
129
+ maxToRenderPerBatch={3}
130
+ getItemLayout={getItemLayout}
131
+ {...(isFlashListLike(Component) && { estimatedItemSize: width + itemSpacing })}
132
+ // NOTE - https://github.com/necolas/react-native-web/issues/1299
133
+ {...(Platform.OS === 'web' && { dataSet: { 'paging-enabled-fix': true } })}
134
+ {...listProps}
135
+ />
136
+ )
137
+ )}
116
138
  </Animated.View>
117
139
  <WebPagingFix />
118
140
  </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;
package/src/types.ts CHANGED
@@ -1,7 +1,19 @@
1
- import type { StyleProp, ViewStyle } from 'react-native';
2
- import type { SharedValue } from 'react-native-reanimated';
1
+ import type React from 'react';
2
+ import type { FlatList as RNFlatList, ScrollView as RNScrollView, StyleProp, ViewStyle } from 'react-native';
3
+ import type { FlatList as GHFlatList, ScrollView as GHScrollView } from 'react-native-gesture-handler';
3
4
 
4
- export interface GestureImageViewerProps<T = any> {
5
+ export type FlatListComponent = typeof RNFlatList | typeof GHFlatList;
6
+ export type ScrollViewComponent = typeof RNScrollView | typeof GHScrollView;
7
+
8
+ type GetComponentProps<T> = T extends React.ComponentType<infer P> ? P : never;
9
+
10
+ type ConditionalListProps<LC> = LC extends FlatListComponent
11
+ ? React.ComponentProps<LC>
12
+ : LC extends ScrollViewComponent
13
+ ? React.ComponentProps<LC>
14
+ : GetComponentProps<LC>;
15
+
16
+ export interface GestureImageViewerProps<T = any, LC = typeof RNFlatList> {
5
17
  id?: string;
6
18
  data: T[];
7
19
  initialIndex?: number;
@@ -9,15 +21,15 @@ export interface GestureImageViewerProps<T = any> {
9
21
  onDismiss?: () => void;
10
22
  renderImage: (item: T, index: number) => React.ReactElement;
11
23
  renderContainer?: (children: React.ReactElement) => React.ReactElement;
12
- ListComponent?: any; // FlatList, FlashList 등
24
+ ListComponent: LC;
13
25
  width?: number;
14
26
  dismissThreshold?: number;
15
- swipeThreshold?: number;
16
- velocityThreshold?: number;
27
+ // swipeThreshold?: number;
28
+ // velocityThreshold?: number;
17
29
  enableDismissGesture?: boolean;
18
30
  enableSwipeGesture?: boolean;
19
31
  resistance?: number;
20
- listProps?: any; // FlatList, FlashList에 전달할 추가 props
32
+ listProps?: Partial<ConditionalListProps<LC>>;
21
33
  backdropStyle?: StyleProp<ViewStyle>;
22
34
  containerStyle?: StyleProp<ViewStyle>;
23
35
  animateBackdrop?: boolean;
@@ -27,10 +39,3 @@ export interface GestureImageViewerProps<T = any> {
27
39
  maxZoomScale?: number;
28
40
  itemSpacing?: number;
29
41
  }
30
-
31
- export interface GestureState {
32
- currentIndex: number;
33
- translateY: SharedValue<number>;
34
- isGestureActive: boolean;
35
- lockDirection: 'horizontal' | 'vertical' | null;
36
- }
@@ -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,29 @@
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
+ import type { FlatListComponent, ScrollViewComponent } from './types';
4
+
5
+ export const isScrollViewLike = (component: any): component is ScrollViewComponent => {
6
+ return component === RNScrollView || component === GestureScrollView;
7
+ };
8
+
9
+ export const isFlatListLike = (component: any): component is FlatListComponent => {
10
+ if (component === RNFlatList || component === GestureFlatList || isFlashListLike(component)) {
11
+ return true;
12
+ }
13
+
14
+ return false;
15
+ };
16
+
17
+ export const isFlashListLike = (component: any): component is any => {
18
+ try {
19
+ const FlashList = require('@shopify/flash-list')?.FlashList;
20
+
21
+ if (FlashList && component === FlashList) {
22
+ return true;
23
+ }
24
+ } catch {
25
+ // do nothing
26
+ }
27
+
28
+ return component?.name === 'FlashList';
29
+ };