react-native-gesture-image-viewer 0.1.0 → 0.3.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.
Files changed (34) hide show
  1. package/lib/module/GestureImageViewer.js +25 -10
  2. package/lib/module/GestureImageViewer.js.map +1 -1
  3. package/lib/module/ImageViewerManager.js +78 -0
  4. package/lib/module/ImageViewerManager.js.map +1 -0
  5. package/lib/module/ImageViewerRegistry.js +26 -0
  6. package/lib/module/ImageViewerRegistry.js.map +1 -0
  7. package/lib/module/index.js +1 -0
  8. package/lib/module/index.js.map +1 -1
  9. package/lib/module/useGestureImageViewer.js +138 -59
  10. package/lib/module/useGestureImageViewer.js.map +1 -1
  11. package/lib/module/useImageViewerController.js +28 -0
  12. package/lib/module/useImageViewerController.js.map +1 -0
  13. package/lib/typescript/src/GestureImageViewer.d.ts +1 -1
  14. package/lib/typescript/src/GestureImageViewer.d.ts.map +1 -1
  15. package/lib/typescript/src/ImageViewerManager.d.ts +28 -0
  16. package/lib/typescript/src/ImageViewerManager.d.ts.map +1 -0
  17. package/lib/typescript/src/ImageViewerRegistry.d.ts +10 -0
  18. package/lib/typescript/src/ImageViewerRegistry.d.ts.map +1 -0
  19. package/lib/typescript/src/index.d.ts +1 -0
  20. package/lib/typescript/src/index.d.ts.map +1 -1
  21. package/lib/typescript/src/types.d.ts +5 -0
  22. package/lib/typescript/src/types.d.ts.map +1 -1
  23. package/lib/typescript/src/useGestureImageViewer.d.ts +16 -7
  24. package/lib/typescript/src/useGestureImageViewer.d.ts.map +1 -1
  25. package/lib/typescript/src/useImageViewerController.d.ts +8 -0
  26. package/lib/typescript/src/useImageViewerController.d.ts.map +1 -0
  27. package/package.json +1 -1
  28. package/src/GestureImageViewer.tsx +42 -14
  29. package/src/ImageViewerManager.ts +92 -0
  30. package/src/ImageViewerRegistry.ts +30 -0
  31. package/src/index.tsx +1 -0
  32. package/src/types.ts +5 -0
  33. package/src/useGestureImageViewer.ts +210 -62
  34. package/src/useImageViewerController.ts +34 -0
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
 
3
- import { useCallback } from 'react';
4
- import { FlatList, Platform, StyleSheet, useWindowDimensions, View } from 'react-native';
5
- import { GestureDetector, GestureHandlerRootView } from 'react-native-gesture-handler';
3
+ import { useCallback, useEffect, useMemo } from 'react';
4
+ import { Platform, StyleSheet, useWindowDimensions, View } from 'react-native';
5
+ import { FlatList, Gesture, GestureDetector, GestureHandlerRootView } from 'react-native-gesture-handler';
6
6
  import Animated from 'react-native-reanimated';
7
+ import { registry } from "./ImageViewerRegistry.js";
7
8
  import { useGestureImageViewer } from "./useGestureImageViewer.js";
8
9
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
10
  const WebPagingFix = () => {
@@ -15,6 +16,7 @@ const WebPagingFix = () => {
15
16
  });
16
17
  };
17
18
  export function GestureImageViewer({
19
+ id = 'default',
18
20
  data,
19
21
  renderImage,
20
22
  renderContainer,
@@ -31,12 +33,16 @@ export function GestureImageViewer({
31
33
  } = useWindowDimensions();
32
34
  const width = customWidth || screenWidth;
33
35
  const {
36
+ currentIndex,
34
37
  flatListRef,
35
- panGesture,
38
+ isZoomed,
39
+ dismissGesture,
40
+ zoomGesture,
36
41
  onMomentumScrollEnd,
37
42
  animatedStyle,
38
43
  backdropStyle
39
44
  } = useGestureImageViewer({
45
+ id,
40
46
  data,
41
47
  width,
42
48
  initialIndex,
@@ -46,31 +52,39 @@ export function GestureImageViewer({
46
52
  item,
47
53
  index
48
54
  }) => {
55
+ const isActive = index === currentIndex;
49
56
  return /*#__PURE__*/_jsx(Animated.View, {
50
- style: {
57
+ style: [{
51
58
  width,
52
59
  height: '100%',
53
60
  justifyContent: 'center',
54
61
  alignItems: 'center'
55
- },
62
+ }, isActive && animatedStyle],
56
63
  children: renderImage(item, index)
57
64
  });
58
- }, [width, renderImage]);
65
+ }, [width, renderImage, animatedStyle, currentIndex]);
59
66
  const getItemLayout = useCallback((_, index) => ({
60
67
  length: width,
61
68
  offset: width * index,
62
69
  index
63
70
  }), [width]);
64
71
  const keyExtractor = useCallback((item, index) => `image-${index}-${item}`, []);
72
+ const gesture = useMemo(() => {
73
+ return Gesture.Race(dismissGesture, zoomGesture);
74
+ }, [zoomGesture, dismissGesture]);
75
+ useEffect(() => {
76
+ registry.createManager(id);
77
+ return () => registry.deleteManager(id);
78
+ }, [id]);
65
79
  const listComponent = /*#__PURE__*/_jsx(GestureHandlerRootView, {
66
80
  children: /*#__PURE__*/_jsx(GestureDetector, {
67
- gesture: panGesture,
81
+ gesture: gesture,
68
82
  children: /*#__PURE__*/_jsxs(View, {
69
83
  style: [styles.container, containerStyle],
70
84
  children: [/*#__PURE__*/_jsx(Animated.View, {
71
85
  style: [styles.background, backdropStyleProps, backdropStyle]
72
- }), /*#__PURE__*/_jsx(Animated.View, {
73
- style: [styles.content, animatedStyle],
86
+ }), /*#__PURE__*/_jsx(View, {
87
+ style: styles.content,
74
88
  children: /*#__PURE__*/_jsx(ListComponent, {
75
89
  ref: flatListRef,
76
90
  data: data,
@@ -78,6 +92,7 @@ export function GestureImageViewer({
78
92
  keyExtractor: keyExtractor,
79
93
  horizontal: true,
80
94
  pagingEnabled: true,
95
+ scrollEnabled: !isZoomed,
81
96
  showsHorizontalScrollIndicator: false,
82
97
  onMomentumScrollEnd: onMomentumScrollEnd,
83
98
  getItemLayout: getItemLayout,
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","FlatList","Platform","StyleSheet","useWindowDimensions","View","GestureDetector","GestureHandlerRootView","Animated","useGestureImageViewer","jsx","_jsx","jsxs","_jsxs","WebPagingFix","OS","children","GestureImageViewer","data","renderImage","renderContainer","ListComponent","width","customWidth","listProps","backdropStyle","backdropStyleProps","containerStyle","initialIndex","props","screenWidth","flatListRef","panGesture","onMomentumScrollEnd","animatedStyle","renderItem","item","index","style","height","justifyContent","alignItems","getItemLayout","_","length","offset","keyExtractor","listComponent","gesture","styles","container","background","content","ref","horizontal","pagingEnabled","showsHorizontalScrollIndicator","initialScrollIndex","windowSize","maxToRenderPerBatch","removeClippedSubviews","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","jsx","_jsx","jsxs","_jsxs","WebPagingFix","OS","children","GestureImageViewer","id","data","renderImage","renderContainer","ListComponent","width","customWidth","listProps","backdropStyle","backdropStyleProps","containerStyle","initialIndex","props","screenWidth","currentIndex","flatListRef","isZoomed","dismissGesture","zoomGesture","onMomentumScrollEnd","animatedStyle","renderItem","item","index","isActive","style","height","justifyContent","alignItems","getItemLayout","_","length","offset","keyExtractor","gesture","Race","createManager","deleteManager","listComponent","styles","container","background","content","ref","horizontal","pagingEnabled","scrollEnabled","showsHorizontalScrollIndicator","initialScrollIndex","windowSize","maxToRenderPerBatch","removeClippedSubviews","dataSet","create","flex","position","top","left","right","bottom","backgroundColor"],"sourceRoot":"../../src","sources":["GestureImageViewer.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+
3
+ class ImageViewerManager {
4
+ currentIndex = 0;
5
+ dataLength = 0;
6
+ flatListRef = null;
7
+ enableSwipeGesture = true;
8
+ listeners = new Set();
9
+
10
+ // private updateState(newState: Partial<any>) {
11
+ // Object.assign(this, newState);
12
+ // this.notifyListeners();
13
+ // }
14
+
15
+ notifyListeners() {
16
+ const state = this.getState();
17
+ this.listeners.forEach(listener => listener(state));
18
+ }
19
+ subscribe(listener) {
20
+ this.listeners.add(listener);
21
+ return () => {
22
+ this.listeners.delete(listener);
23
+ };
24
+ }
25
+ getState() {
26
+ return {
27
+ currentIndex: this.currentIndex,
28
+ dataLength: this.dataLength
29
+ };
30
+ }
31
+ setFlatListRef(ref) {
32
+ this.flatListRef = ref;
33
+ }
34
+ setDataLength(length) {
35
+ this.dataLength = length;
36
+ }
37
+ setEnableSwipeGesture(enabled) {
38
+ this.enableSwipeGesture = enabled;
39
+ }
40
+ setCurrentIndex(index) {
41
+ if (index !== this.currentIndex) {
42
+ this.currentIndex = index;
43
+ }
44
+ }
45
+ notifyStateChange() {
46
+ this.notifyListeners();
47
+ }
48
+ goToIndex = index => {
49
+ if (index < 0 || index >= this.dataLength || !this.enableSwipeGesture || !this.flatListRef) {
50
+ return;
51
+ }
52
+ this.currentIndex = index;
53
+ this.flatListRef.scrollToIndex({
54
+ index,
55
+ animated: true
56
+ });
57
+ this.notifyListeners();
58
+ };
59
+ goToPrevious = () => {
60
+ if (this.currentIndex > 0) {
61
+ this.goToIndex(this.currentIndex - 1);
62
+ }
63
+ };
64
+ goToNext = () => {
65
+ if (this.currentIndex < this.dataLength - 1) {
66
+ this.goToIndex(this.currentIndex + 1);
67
+ }
68
+ };
69
+ cleanUp() {
70
+ this.listeners.clear();
71
+ this.flatListRef = null;
72
+ this.enableSwipeGesture = true;
73
+ this.currentIndex = 0;
74
+ this.dataLength = 0;
75
+ }
76
+ }
77
+ export default ImageViewerManager;
78
+ //# sourceMappingURL=ImageViewerManager.js.map
@@ -0,0 +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":[]}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ import ImageViewerManager from "./ImageViewerManager.js";
4
+ class ImageViewerRegistry {
5
+ managers = new Map();
6
+ createManager(id) {
7
+ if (this.managers.has(id)) {
8
+ return this.managers.get(id) || null;
9
+ }
10
+ const manager = new ImageViewerManager();
11
+ this.managers.set(id, manager);
12
+ return manager;
13
+ }
14
+ getManager(id) {
15
+ return this.managers.get(id) || null;
16
+ }
17
+ deleteManager(id) {
18
+ const manager = this.managers.get(id);
19
+ if (manager) {
20
+ manager.cleanUp();
21
+ this.managers.delete(id);
22
+ }
23
+ }
24
+ }
25
+ export const registry = new ImageViewerRegistry();
26
+ //# sourceMappingURL=ImageViewerRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ImageViewerManager","ImageViewerRegistry","managers","Map","createManager","id","has","get","manager","set","getManager","deleteManager","cleanUp","delete","registry"],"sourceRoot":"../../src","sources":["ImageViewerRegistry.ts"],"mappings":";;AAAA,OAAOA,kBAAkB,MAAM,yBAAsB;AAErD,MAAMC,mBAAmB,CAAC;EAChBC,QAAQ,GAAG,IAAIC,GAAG,CAA6B,CAAC;EAExDC,aAAaA,CAACC,EAAU,EAA6B;IACnD,IAAI,IAAI,CAACH,QAAQ,CAACI,GAAG,CAACD,EAAE,CAAC,EAAE;MACzB,OAAO,IAAI,CAACH,QAAQ,CAACK,GAAG,CAACF,EAAE,CAAC,IAAI,IAAI;IACtC;IAEA,MAAMG,OAAO,GAAG,IAAIR,kBAAkB,CAAC,CAAC;IACxC,IAAI,CAACE,QAAQ,CAACO,GAAG,CAACJ,EAAE,EAAEG,OAAO,CAAC;IAC9B,OAAOA,OAAO;EAChB;EAEAE,UAAUA,CAACL,EAAU,EAA6B;IAChD,OAAO,IAAI,CAACH,QAAQ,CAACK,GAAG,CAACF,EAAE,CAAC,IAAI,IAAI;EACtC;EAEAM,aAAaA,CAACN,EAAU,EAAE;IACxB,MAAMG,OAAO,GAAG,IAAI,CAACN,QAAQ,CAACK,GAAG,CAACF,EAAE,CAAC;IAErC,IAAIG,OAAO,EAAE;MACXA,OAAO,CAACI,OAAO,CAAC,CAAC;MACjB,IAAI,CAACV,QAAQ,CAACW,MAAM,CAACR,EAAE,CAAC;IAC1B;EACF;AACF;AAEA,OAAO,MAAMS,QAAQ,GAAG,IAAIb,mBAAmB,CAAC,CAAC","ignoreList":[]}
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
2
 
3
3
  export { GestureImageViewer } from "./GestureImageViewer.js";
4
+ export { useImageViewerController } from "./useImageViewerController.js";
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["GestureImageViewer"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,kBAAkB,QAAQ,yBAAsB","ignoreList":[]}
1
+ {"version":3,"names":["GestureImageViewer","useImageViewerController"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,kBAAkB,QAAQ,yBAAsB;AAEzD,SAASC,wBAAwB,QAAQ,+BAA4B","ignoreList":[]}
@@ -3,7 +3,8 @@
3
3
  import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
4
4
  import { InteractionManager, useWindowDimensions } from 'react-native';
5
5
  import { Gesture } from 'react-native-gesture-handler';
6
- import { interpolate, runOnJS, useAnimatedStyle, useSharedValue, withSpring } from 'react-native-reanimated';
6
+ import { Easing, interpolate, runOnJS, useAnimatedReaction, useAnimatedStyle, useSharedValue, withSpring, withTiming } from 'react-native-reanimated';
7
+ import { registry } from "./ImageViewerRegistry.js";
7
8
  export const useGestureImageViewer = ({
8
9
  data,
9
10
  initialIndex = 0,
@@ -16,28 +17,72 @@ export const useGestureImageViewer = ({
16
17
  // velocityThreshold = 200,
17
18
  animateBackdrop = true,
18
19
  enableDismissGesture = true,
19
- enableSwipeGesture = true
20
+ enableSwipeGesture = true,
21
+ enableZoomGesture = true,
22
+ enableDoubleTapGesture = true,
23
+ enableZoomPanGesture = true,
24
+ maxZoomScale = 2,
25
+ id = 'default'
20
26
  }) => {
21
27
  const {
22
- width: screenWidth
28
+ width: screenWidth,
29
+ height: screenHeight
23
30
  } = useWindowDimensions();
24
31
  const width = customWidth || screenWidth;
25
- const [currentIndex, setCurrentIndex] = useState(initialIndex);
32
+ const [isZoomed, setIsZoomed] = useState(false);
33
+ const [managerState, setManagerState] = useState({
34
+ currentIndex: initialIndex,
35
+ dataLength: data?.length || 0
36
+ });
37
+ const initialTranslateY = useSharedValue(0);
38
+ const initialTranslateX = useSharedValue(0);
39
+ const startScale = useSharedValue(1);
26
40
  const translateY = useSharedValue(0);
41
+ const translateX = useSharedValue(0);
42
+ const scale = useSharedValue(1);
27
43
  const backdropOpacity = useSharedValue(1);
28
44
  const flatListRef = useRef(null);
29
45
  const dataLength = data?.length || 0;
30
-
31
- // 초기 위치 설정
46
+ useAnimatedReaction(() => scale.value, currentScale => {
47
+ runOnJS(setIsZoomed)(currentScale > 1);
48
+ });
49
+ useEffect(() => {
50
+ const manager = registry.getManager(id);
51
+ if (!manager) {
52
+ return;
53
+ }
54
+ setManagerState(manager.getState());
55
+ return manager.subscribe(setManagerState);
56
+ }, [id]);
57
+ useEffect(() => {
58
+ const manager = registry.getManager(id);
59
+ if (!manager) {
60
+ return;
61
+ }
62
+ manager.setDataLength(dataLength);
63
+ manager.setEnableSwipeGesture(enableSwipeGesture);
64
+ manager.setCurrentIndex(initialIndex);
65
+ manager.notifyStateChange();
66
+ }, [dataLength, enableSwipeGesture, initialIndex, id]);
67
+ useEffect(() => {
68
+ const manager = registry.getManager(id);
69
+ if (!manager || !flatListRef.current) {
70
+ return;
71
+ }
72
+ manager.setFlatListRef(flatListRef.current);
73
+ }, [id]);
74
+ useEffect(() => {
75
+ onIndexChange?.(managerState.currentIndex);
76
+ }, [managerState.currentIndex, onIndexChange]);
32
77
  useEffect(() => {
33
- setCurrentIndex(initialIndex);
34
78
  translateY.value = 0;
79
+ translateX.value = 0;
80
+ scale.value = 1;
35
81
  backdropOpacity.value = 1;
82
+ startScale.value = 1;
36
83
  if (initialIndex <= 0 || !flatListRef.current) {
37
84
  return;
38
85
  }
39
-
40
- // FlatList 초기 위치 설정
41
86
  const runAfterInteractions = InteractionManager.runAfterInteractions(() => {
42
87
  flatListRef.current?.scrollToIndex({
43
88
  index: initialIndex,
@@ -47,48 +92,28 @@ export const useGestureImageViewer = ({
47
92
  return () => {
48
93
  runAfterInteractions?.cancel();
49
94
  };
50
- }, [initialIndex, translateY, backdropOpacity]);
51
-
52
- // 인덱스 변경 알림
53
- useEffect(() => {
54
- onIndexChange?.(currentIndex);
55
- }, [currentIndex, onIndexChange]);
56
-
57
- // FlatList 스크롤 핸들러
95
+ }, [initialIndex, translateY, backdropOpacity, translateX, scale, startScale]);
58
96
  const onMomentumScrollEnd = useCallback(event => {
59
97
  if (!enableSwipeGesture) {
60
98
  return;
61
99
  }
62
100
  const contentOffset = event.nativeEvent.contentOffset;
63
101
  const newIndex = Math.round(contentOffset.x / width);
64
- if (newIndex !== currentIndex && newIndex >= 0 && newIndex < dataLength) {
65
- setCurrentIndex(newIndex);
66
- }
67
- }, [currentIndex, dataLength, width, enableSwipeGesture]);
68
- const goToIndex = useCallback(index => {
69
- if (index < 0 || index >= dataLength || !enableSwipeGesture) {
70
- return;
71
- }
72
- setCurrentIndex(index);
73
- flatListRef.current?.scrollToIndex({
74
- index,
75
- animated: true
76
- });
77
- }, [dataLength, enableSwipeGesture]);
78
- const goToPrevious = useCallback(() => {
79
- if (currentIndex > 0) {
80
- goToIndex(currentIndex - 1);
81
- }
82
- }, [currentIndex, goToIndex]);
83
- const goToNext = useCallback(() => {
84
- if (currentIndex < dataLength - 1) {
85
- goToIndex(currentIndex + 1);
102
+ if (newIndex !== managerState.currentIndex && newIndex >= 0 && newIndex < dataLength) {
103
+ const manager = registry.getManager(id);
104
+ if (manager) {
105
+ manager.setCurrentIndex(newIndex);
106
+ }
107
+ translateX.value = withTiming(0);
108
+ translateY.value = withTiming(0);
109
+ initialTranslateX.value = withTiming(0);
110
+ initialTranslateY.value = withTiming(0);
111
+ startScale.value = withTiming(1);
112
+ scale.value = withTiming(1);
86
113
  }
87
- }, [currentIndex, dataLength, goToIndex]);
88
- const panGesture = useMemo(() => {
89
- return Gesture.Pan().minDistance(10).activeOffsetY([-10, 10]).failOffsetX([-10, 10]).onUpdate(event => {
90
- 'worklet';
91
-
114
+ }, [id, managerState.currentIndex, dataLength, width, enableSwipeGesture, translateX, translateY, scale, initialTranslateX, initialTranslateY, startScale]);
115
+ const dismissGesture = useMemo(() => {
116
+ return Gesture.Pan().minDistance(10).averageTouches(true).activeOffsetY([-10, 10]).failOffsetX([-10, 10]).enabled(!isZoomed).onUpdate(event => {
92
117
  translateY.value = event.translationY / resistance;
93
118
  }).onEnd(event => {
94
119
  'worklet';
@@ -102,18 +127,78 @@ export const useGestureImageViewer = ({
102
127
  stiffness: 150
103
128
  });
104
129
  });
105
- }, [translateY, dismissThreshold, enableDismissGesture, onDismiss, resistance]);
130
+ }, [translateY, dismissThreshold, enableDismissGesture, onDismiss, resistance, isZoomed]);
131
+ const zoomPinchGesture = useMemo(() => {
132
+ return Gesture.Pinch().enabled(enableZoomGesture).onBegin(() => {
133
+ startScale.value = scale.value;
134
+ }).onUpdate(event => {
135
+ scale.value = startScale.value * event.scale;
136
+ }).onEnd(() => {
137
+ if (scale.value > maxZoomScale) {
138
+ scale.value = withTiming(maxZoomScale, {
139
+ duration: 300,
140
+ easing: Easing.bezier(0.25, 0.1, 0.25, 1.0)
141
+ });
142
+ return;
143
+ }
144
+ if (scale.value < 1) {
145
+ scale.value = withTiming(1, {
146
+ duration: 300,
147
+ easing: Easing.bezier(0.25, 0.1, 0.25, 1.0)
148
+ });
149
+ translateX.value = withTiming(0);
150
+ translateY.value = withTiming(0);
151
+ }
152
+ });
153
+ }, [scale, enableZoomGesture, maxZoomScale, translateX, translateY, startScale]);
154
+ const zoomPanGesture = useMemo(() => {
155
+ return Gesture.Pan().enabled(enableZoomPanGesture && isZoomed).onBegin(() => {
156
+ initialTranslateX.value = translateX.value;
157
+ initialTranslateY.value = translateY.value;
158
+ }).onUpdate(event => {
159
+ 'worklet';
106
160
 
107
- // 애니메이션 스타일
161
+ if (scale.value > 1) {
162
+ const maxTranslateX = (width * scale.value - width) / 2;
163
+ const maxTranslateY = (screenHeight * scale.value - screenHeight) / 2;
164
+ translateX.value = Math.max(-maxTranslateX, Math.min(maxTranslateX, initialTranslateX.value + event.translationX));
165
+ translateY.value = Math.max(-maxTranslateY, Math.min(maxTranslateY, initialTranslateY.value + event.translationY));
166
+ }
167
+ });
168
+ }, [translateX, translateY, enableZoomPanGesture, isZoomed, scale, initialTranslateX, initialTranslateY, width, screenHeight]);
169
+ const doubleTapGesture = useMemo(() => {
170
+ return Gesture.Tap().enabled(enableDoubleTapGesture).numberOfTaps(2).onEnd(() => {
171
+ const nextScale = scale.value > 1 ? 1 : maxZoomScale;
172
+ translateX.value = withTiming(0, {
173
+ duration: 300,
174
+ easing: Easing.bezier(0.25, 0.1, 0.25, 1.0)
175
+ });
176
+ translateY.value = withTiming(0, {
177
+ duration: 300,
178
+ easing: Easing.bezier(0.25, 0.1, 0.25, 1.0)
179
+ });
180
+ scale.value = withTiming(nextScale, {
181
+ duration: 300,
182
+ easing: Easing.bezier(0.25, 0.1, 0.25, 1.0)
183
+ });
184
+ });
185
+ }, [scale, enableDoubleTapGesture, maxZoomScale, translateX, translateY]);
186
+ const zoomGesture = useMemo(() => {
187
+ return Gesture.Simultaneous(zoomPinchGesture, zoomPanGesture, doubleTapGesture);
188
+ }, [zoomPinchGesture, zoomPanGesture, doubleTapGesture]);
108
189
  const animatedStyle = useAnimatedStyle(() => {
109
190
  return {
110
191
  transform: [{
111
192
  translateY: translateY.value
193
+ }, {
194
+ translateX: translateX.value
195
+ }, {
196
+ scale: scale.value
112
197
  }]
113
198
  };
114
- }, [translateY]);
199
+ });
115
200
  const backdropStyle = useAnimatedStyle(() => {
116
- if (!animateBackdrop) {
201
+ if (!animateBackdrop || scale.value > 1) {
117
202
  return {
118
203
  opacity: 1
119
204
  };
@@ -122,22 +207,16 @@ export const useGestureImageViewer = ({
122
207
  return {
123
208
  opacity
124
209
  };
125
- }, [animateBackdrop, translateY]);
210
+ }, [animateBackdrop]);
126
211
  return {
127
- // State
128
- currentIndex,
212
+ currentIndex: managerState.currentIndex,
129
213
  dataLength,
130
214
  translateY,
131
215
  flatListRef,
132
- // Actions
133
- goToPrevious,
134
- goToNext,
135
- goToIndex,
136
- // Gesture
137
- panGesture,
138
- // FlatList handlers
216
+ isZoomed,
217
+ dismissGesture,
218
+ zoomGesture,
139
219
  onMomentumScrollEnd,
140
- // Animated styles
141
220
  animatedStyle,
142
221
  backdropStyle
143
222
  };
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useEffect","useMemo","useRef","useState","InteractionManager","useWindowDimensions","Gesture","interpolate","runOnJS","useAnimatedStyle","useSharedValue","withSpring","useGestureImageViewer","data","initialIndex","onIndexChange","onDismiss","width","customWidth","dismissThreshold","resistance","animateBackdrop","enableDismissGesture","enableSwipeGesture","screenWidth","currentIndex","setCurrentIndex","translateY","backdropOpacity","flatListRef","dataLength","length","value","current","runAfterInteractions","scrollToIndex","index","animated","cancel","onMomentumScrollEnd","event","contentOffset","nativeEvent","newIndex","Math","round","x","goToIndex","goToPrevious","goToNext","panGesture","Pan","minDistance","activeOffsetY","failOffsetX","onUpdate","translationY","onEnd","damping","stiffness","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","id","screenWidth","height","screenHeight","isZoomed","setIsZoomed","managerState","setManagerState","currentIndex","dataLength","length","initialTranslateY","initialTranslateX","startScale","translateY","translateX","scale","backdropOpacity","flatListRef","value","currentScale","manager","getManager","getState","subscribe","setDataLength","setEnableSwipeGesture","setCurrentIndex","notifyStateChange","current","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":[]}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ import { useEffect, useMemo, useState } from 'react';
4
+ import { registry } from "./ImageViewerRegistry.js";
5
+ export const useImageViewerController = (id = 'default') => {
6
+ const [state, setState] = useState({
7
+ currentIndex: 0,
8
+ dataLength: 0
9
+ });
10
+ useEffect(() => {
11
+ const manager = registry.createManager(id);
12
+ if (!manager) {
13
+ return;
14
+ }
15
+ setState(manager.getState());
16
+ return manager.subscribe(setState);
17
+ }, [id]);
18
+ const manager = registry.getManager(id);
19
+ const noopFunction = useMemo(() => () => {}, []);
20
+ return {
21
+ goToIndex: manager?.goToIndex || noopFunction,
22
+ goToPrevious: manager?.goToPrevious || noopFunction,
23
+ goToNext: manager?.goToNext || noopFunction,
24
+ currentIndex: state.currentIndex,
25
+ totalCount: state.dataLength
26
+ };
27
+ };
28
+ //# sourceMappingURL=useImageViewerController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","useMemo","useState","registry","useImageViewerController","id","state","setState","currentIndex","dataLength","manager","createManager","getState","subscribe","getManager","noopFunction","goToIndex","goToPrevious","goToNext","totalCount"],"sourceRoot":"../../src","sources":["useImageViewerController.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,OAAO;AAEpD,SAASC,QAAQ,QAAQ,0BAAuB;AAEhD,OAAO,MAAMC,wBAAwB,GAAGA,CAACC,EAAE,GAAG,SAAS,KAAK;EAC1D,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAGL,QAAQ,CAA0B;IAC1DM,YAAY,EAAE,CAAC;IACfC,UAAU,EAAE;EACd,CAAC,CAAC;EAEFT,SAAS,CAAC,MAAM;IACd,MAAMU,OAAO,GAAGP,QAAQ,CAACQ,aAAa,CAACN,EAAE,CAAC;IAE1C,IAAI,CAACK,OAAO,EAAE;MACZ;IACF;IAEAH,QAAQ,CAACG,OAAO,CAACE,QAAQ,CAAC,CAAC,CAAC;IAE5B,OAAOF,OAAO,CAACG,SAAS,CAACN,QAAQ,CAAC;EACpC,CAAC,EAAE,CAACF,EAAE,CAAC,CAAC;EAER,MAAMK,OAAO,GAAGP,QAAQ,CAACW,UAAU,CAACT,EAAE,CAAC;EAEvC,MAAMU,YAAY,GAAGd,OAAO,CAAC,MAAM,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC;EAEhD,OAAO;IACLe,SAAS,EAAEN,OAAO,EAAEM,SAAS,IAAID,YAAY;IAC7CE,YAAY,EAAEP,OAAO,EAAEO,YAAY,IAAIF,YAAY;IACnDG,QAAQ,EAAER,OAAO,EAAEQ,QAAQ,IAAIH,YAAY;IAC3CP,YAAY,EAAEF,KAAK,CAACE,YAAY;IAChCW,UAAU,EAAEb,KAAK,CAACG;EACpB,CAAC;AACH,CAAC","ignoreList":[]}
@@ -1,3 +1,3 @@
1
1
  import type { GestureImageViewerProps } from './types';
2
- export declare function GestureImageViewer<T = any>({ data, renderImage, renderContainer, ListComponent, width: customWidth, listProps, backdropStyle: backdropStyleProps, containerStyle, initialIndex, ...props }: GestureImageViewerProps<T>): import("react/jsx-runtime").JSX.Element;
2
+ export declare function GestureImageViewer<T = any>({ id, data, renderImage, renderContainer, ListComponent, width: customWidth, listProps, backdropStyle: backdropStyleProps, containerStyle, initialIndex, ...props }: GestureImageViewerProps<T>): import("react/jsx-runtime").JSX.Element;
3
3
  //# sourceMappingURL=GestureImageViewer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GestureImageViewer.d.ts","sourceRoot":"","sources":["../../../src/GestureImageViewer.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAWvD,wBAAgB,kBAAkB,CAAC,CAAC,GAAG,GAAG,EAAE,EAC1C,IAAI,EACJ,WAAW,EACX,eAAe,EACf,aAAwB,EACxB,KAAK,EAAE,WAAW,EAClB,SAAS,EACT,aAAa,EAAE,kBAAkB,EACjC,cAAc,EACd,YAAgB,EAChB,GAAG,KAAK,EACT,EAAE,uBAAuB,CAAC,CAAC,CAAC,2CAyE5B"}
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,GAAG,KAAK,EACT,EAAE,uBAAuB,CAAC,CAAC,CAAC,2CAmG5B"}
@@ -0,0 +1,28 @@
1
+ export type ImageViewerManagerState = {
2
+ currentIndex: number;
3
+ dataLength: number;
4
+ };
5
+ declare class ImageViewerManager {
6
+ private currentIndex;
7
+ private dataLength;
8
+ private flatListRef;
9
+ private enableSwipeGesture;
10
+ private listeners;
11
+ private notifyListeners;
12
+ subscribe(listener: (state: ImageViewerManagerState) => void): () => void;
13
+ getState(): {
14
+ currentIndex: number;
15
+ dataLength: number;
16
+ };
17
+ setFlatListRef(ref: any): void;
18
+ setDataLength(length: number): void;
19
+ setEnableSwipeGesture(enabled: boolean): void;
20
+ setCurrentIndex(index: number): void;
21
+ notifyStateChange(): void;
22
+ goToIndex: (index: number) => void;
23
+ goToPrevious: () => void;
24
+ goToNext: () => void;
25
+ cleanUp(): void;
26
+ }
27
+ export default ImageViewerManager;
28
+ //# sourceMappingURL=ImageViewerManager.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,10 @@
1
+ import ImageViewerManager from './ImageViewerManager';
2
+ declare class ImageViewerRegistry {
3
+ private managers;
4
+ createManager(id: string): ImageViewerManager | null;
5
+ getManager(id: string): ImageViewerManager | null;
6
+ deleteManager(id: string): void;
7
+ }
8
+ export declare const registry: ImageViewerRegistry;
9
+ export {};
10
+ //# sourceMappingURL=ImageViewerRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageViewerRegistry.d.ts","sourceRoot":"","sources":["../../../src/ImageViewerRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AAEtD,cAAM,mBAAmB;IACvB,OAAO,CAAC,QAAQ,CAAyC;IAEzD,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAUpD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IAIjD,aAAa,CAAC,EAAE,EAAE,MAAM;CAQzB;AAED,eAAO,MAAM,QAAQ,qBAA4B,CAAC"}