react-native-gesture-image-viewer 2.1.2 → 2.1.4

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 (67) hide show
  1. package/README.md +1 -1
  2. package/lib/module/GestureTrigger.js.map +1 -1
  3. package/lib/module/GestureViewer.js +23 -6
  4. package/lib/module/GestureViewer.js.map +1 -1
  5. package/lib/module/GestureViewerManager.js +26 -6
  6. package/lib/module/GestureViewerManager.js.map +1 -1
  7. package/lib/module/GestureViewerRegistry.js.map +1 -1
  8. package/lib/module/WebPagingFixStyle.js.map +1 -1
  9. package/lib/module/useGestureViewer.js +205 -229
  10. package/lib/module/useGestureViewer.js.map +1 -1
  11. package/lib/module/useGestureViewerController.js.map +1 -1
  12. package/lib/module/useGestureViewerEvent.js.map +1 -1
  13. package/lib/module/useGestureViewerPaging.js +68 -0
  14. package/lib/module/useGestureViewerPaging.js.map +1 -0
  15. package/lib/module/useGestureViewerPaging.types.js +4 -0
  16. package/lib/module/useGestureViewerPaging.types.js.map +1 -0
  17. package/lib/module/useGestureViewerPaging.web.js +241 -0
  18. package/lib/module/useGestureViewerPaging.web.js.map +1 -0
  19. package/lib/module/useGestureViewerState.js.map +1 -1
  20. package/lib/module/utils/index.js +23 -16
  21. package/lib/module/utils/index.js.map +1 -1
  22. package/lib/module/utils/tapZoom.js +34 -0
  23. package/lib/module/utils/tapZoom.js.map +1 -0
  24. package/lib/module/utils/webScroll.js +70 -0
  25. package/lib/module/utils/webScroll.js.map +1 -0
  26. package/lib/typescript/src/GestureTrigger.d.ts +1 -1
  27. package/lib/typescript/src/GestureTrigger.d.ts.map +1 -1
  28. package/lib/typescript/src/GestureViewer.d.ts.map +1 -1
  29. package/lib/typescript/src/GestureViewerManager.d.ts +5 -0
  30. package/lib/typescript/src/GestureViewerManager.d.ts.map +1 -1
  31. package/lib/typescript/src/GestureViewerRegistry.d.ts.map +1 -1
  32. package/lib/typescript/src/WebPagingFixStyle.d.ts.map +1 -1
  33. package/lib/typescript/src/types.d.ts.map +1 -1
  34. package/lib/typescript/src/useGestureViewer.d.ts +13 -11
  35. package/lib/typescript/src/useGestureViewer.d.ts.map +1 -1
  36. package/lib/typescript/src/useGestureViewerController.d.ts.map +1 -1
  37. package/lib/typescript/src/useGestureViewerEvent.d.ts.map +1 -1
  38. package/lib/typescript/src/useGestureViewerPaging.d.ts +3 -0
  39. package/lib/typescript/src/useGestureViewerPaging.d.ts.map +1 -0
  40. package/lib/typescript/src/useGestureViewerPaging.types.d.ts +32 -0
  41. package/lib/typescript/src/useGestureViewerPaging.types.d.ts.map +1 -0
  42. package/lib/typescript/src/useGestureViewerPaging.web.d.ts +3 -0
  43. package/lib/typescript/src/useGestureViewerPaging.web.d.ts.map +1 -0
  44. package/lib/typescript/src/useGestureViewerState.d.ts.map +1 -1
  45. package/lib/typescript/src/utils/index.d.ts +8 -1
  46. package/lib/typescript/src/utils/index.d.ts.map +1 -1
  47. package/lib/typescript/src/utils/tapZoom.d.ts +12 -0
  48. package/lib/typescript/src/utils/tapZoom.d.ts.map +1 -0
  49. package/lib/typescript/src/utils/webScroll.d.ts +18 -0
  50. package/lib/typescript/src/utils/webScroll.d.ts.map +1 -0
  51. package/package.json +86 -80
  52. package/src/GestureTrigger.tsx +9 -2
  53. package/src/GestureViewer.tsx +77 -28
  54. package/src/GestureViewerManager.ts +62 -12
  55. package/src/GestureViewerRegistry.ts +1 -0
  56. package/src/WebPagingFixStyle.tsx +1 -0
  57. package/src/types.ts +44 -32
  58. package/src/useGestureViewer.ts +292 -313
  59. package/src/useGestureViewerController.ts +1 -0
  60. package/src/useGestureViewerEvent.ts +5 -1
  61. package/src/useGestureViewerPaging.ts +112 -0
  62. package/src/useGestureViewerPaging.types.ts +34 -0
  63. package/src/useGestureViewerPaging.web.ts +390 -0
  64. package/src/useGestureViewerState.ts +1 -0
  65. package/src/utils/index.ts +48 -16
  66. package/src/utils/tapZoom.ts +44 -0
  67. package/src/utils/webScroll.ts +96 -0
@@ -0,0 +1,44 @@
1
+ import type { SharedValue } from 'react-native-reanimated';
2
+ import { Easing, withTiming } from 'react-native-reanimated';
3
+
4
+ export const applyTapZoomAtPoint = ({
5
+ x,
6
+ y,
7
+ width,
8
+ height,
9
+ maxZoomScale,
10
+ scale,
11
+ translateX,
12
+ translateY,
13
+ }: {
14
+ x: number;
15
+ y: number;
16
+ width: number;
17
+ height: number;
18
+ maxZoomScale: number;
19
+ scale: SharedValue<number>;
20
+ translateX: SharedValue<number>;
21
+ translateY: SharedValue<number>;
22
+ }) => {
23
+ 'worklet';
24
+
25
+ const nextScale = scale.value > 1 ? 1 : maxZoomScale;
26
+ const timingConfig = {
27
+ duration: 300,
28
+ easing: Easing.bezier(0.25, 0.1, 0.25, 1),
29
+ };
30
+
31
+ if (nextScale > 1) {
32
+ const centerX = x - width / 2;
33
+ const centerY = y - height / 2;
34
+
35
+ // NOTE 확대로 밀려난 거리만큼 반대로 이동해서 탭 지점을 제자리에 유지
36
+ translateX.value = withTiming(-centerX * (nextScale - 1), timingConfig);
37
+ translateY.value = withTiming(-centerY * (nextScale - 1), timingConfig);
38
+ } else {
39
+ translateX.value = withTiming(0, timingConfig);
40
+ translateY.value = withTiming(0, timingConfig);
41
+ }
42
+
43
+ scale.value = withTiming(nextScale, timingConfig);
44
+ };
@@ -0,0 +1,96 @@
1
+ export const getWebScrollPhysicalIndex = (offsetX: number, pageWidth: number): number => {
2
+ if (!Number.isFinite(offsetX) || !Number.isFinite(pageWidth) || pageWidth <= 0) {
3
+ return 0;
4
+ }
5
+
6
+ return Math.max(0, Math.round(offsetX / pageWidth));
7
+ };
8
+
9
+ export const resolveWebScrollFinalState = ({
10
+ dataLength,
11
+ enableLoop,
12
+ lastSettledPhysicalIndex,
13
+ offsetX,
14
+ pageWidth,
15
+ }: {
16
+ offsetX: number;
17
+ pageWidth: number;
18
+ lastSettledPhysicalIndex: number;
19
+ dataLength: number;
20
+ enableLoop: boolean;
21
+ }): { logicalIndex: number; rawPhysicalIndex: number; settledPhysicalIndex: number } | null => {
22
+ if (
23
+ dataLength <= 0 ||
24
+ !Number.isFinite(offsetX) ||
25
+ !Number.isFinite(pageWidth) ||
26
+ pageWidth <= 0
27
+ ) {
28
+ return null;
29
+ }
30
+
31
+ const maxPhysicalIndex = enableLoop && dataLength > 1 ? dataLength + 1 : dataLength - 1;
32
+ const rawPhysicalIndex = getWebScrollPhysicalIndex(offsetX, pageWidth);
33
+
34
+ if (enableLoop && dataLength > 1) {
35
+ const isWrappingBackward = lastSettledPhysicalIndex === 1 && rawPhysicalIndex >= dataLength;
36
+ const isWrappingForward = lastSettledPhysicalIndex === dataLength && rawPhysicalIndex <= 1;
37
+
38
+ if (isWrappingBackward || rawPhysicalIndex === 0) {
39
+ return {
40
+ logicalIndex: dataLength - 1,
41
+ rawPhysicalIndex,
42
+ settledPhysicalIndex: dataLength,
43
+ };
44
+ }
45
+
46
+ if (isWrappingForward || rawPhysicalIndex >= dataLength + 1) {
47
+ return {
48
+ logicalIndex: 0,
49
+ rawPhysicalIndex,
50
+ settledPhysicalIndex: 1,
51
+ };
52
+ }
53
+ }
54
+
55
+ const targetPhysicalIndex = Math.max(0, Math.min(maxPhysicalIndex, rawPhysicalIndex));
56
+
57
+ if (enableLoop && dataLength > 1) {
58
+ return {
59
+ logicalIndex: targetPhysicalIndex - 1,
60
+ rawPhysicalIndex,
61
+ settledPhysicalIndex: targetPhysicalIndex,
62
+ };
63
+ }
64
+
65
+ return {
66
+ logicalIndex: targetPhysicalIndex,
67
+ rawPhysicalIndex,
68
+ settledPhysicalIndex: targetPhysicalIndex,
69
+ };
70
+ };
71
+
72
+ export const getWebAutoPlayTargetPhysicalIndex = ({
73
+ currentIndex,
74
+ dataLength,
75
+ enableLoop,
76
+ }: {
77
+ currentIndex: number;
78
+ dataLength: number;
79
+ enableLoop: boolean;
80
+ }): number | null => {
81
+ if (dataLength <= 1) {
82
+ return null;
83
+ }
84
+
85
+ if (enableLoop && currentIndex === dataLength - 1) {
86
+ return dataLength + 1;
87
+ }
88
+
89
+ const nextIndex = currentIndex + 1;
90
+
91
+ if (nextIndex >= dataLength) {
92
+ return null;
93
+ }
94
+
95
+ return enableLoop ? nextIndex + 1 : nextIndex;
96
+ };