react-native-gesture-image-viewer 2.3.3 → 3.0.0-beta.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 (137) hide show
  1. package/README.md +5 -3
  2. package/lib/module/GestureViewer.js +88 -140
  3. package/lib/module/GestureViewer.js.map +1 -1
  4. package/lib/module/GestureViewerManager.js +49 -105
  5. package/lib/module/GestureViewerManager.js.map +1 -1
  6. package/lib/module/gestureViewerAnimation.js +18 -0
  7. package/lib/module/gestureViewerAnimation.js.map +1 -0
  8. package/lib/module/gestureViewerPaging.js +66 -0
  9. package/lib/module/gestureViewerPaging.js.map +1 -0
  10. package/lib/module/gestureViewerRenderWindow.js +29 -0
  11. package/lib/module/gestureViewerRenderWindow.js.map +1 -0
  12. package/lib/module/getWebContentProps.js +6 -0
  13. package/lib/module/getWebContentProps.js.map +1 -0
  14. package/lib/module/getWebContentProps.web.js +8 -0
  15. package/lib/module/getWebContentProps.web.js.map +1 -0
  16. package/lib/module/index.js.map +1 -1
  17. package/lib/module/platformTapGestures.js +4 -0
  18. package/lib/module/platformTapGestures.js.map +1 -0
  19. package/lib/module/platformTapGestures.web.js +4 -0
  20. package/lib/module/platformTapGestures.web.js.map +1 -0
  21. package/lib/module/renderWindow.js +160 -0
  22. package/lib/module/renderWindow.js.map +1 -0
  23. package/lib/module/useGestureViewer.js +386 -200
  24. package/lib/module/useGestureViewer.js.map +1 -1
  25. package/lib/module/useGestureViewerController.js +3 -3
  26. package/lib/module/useGestureViewerController.js.map +1 -1
  27. package/lib/module/useGestureViewerManagerBridge.js +85 -0
  28. package/lib/module/useGestureViewerManagerBridge.js.map +1 -0
  29. package/lib/module/useGestureViewerPaging.js +147 -65
  30. package/lib/module/useGestureViewerPaging.js.map +1 -1
  31. package/lib/module/useWebClickHandler.js +7 -0
  32. package/lib/module/useWebClickHandler.js.map +1 -0
  33. package/lib/module/useWebClickHandler.web.js +85 -0
  34. package/lib/module/useWebClickHandler.web.js.map +1 -0
  35. package/lib/module/useWebSingleTapTimer.js +12 -0
  36. package/lib/module/useWebSingleTapTimer.js.map +1 -0
  37. package/lib/module/useWebSingleTapTimer.web.js +25 -0
  38. package/lib/module/useWebSingleTapTimer.web.js.map +1 -0
  39. package/lib/module/utils/index.js +0 -77
  40. package/lib/module/utils/index.js.map +1 -1
  41. package/lib/module/utils/tapZoom.js +4 -3
  42. package/lib/module/utils/tapZoom.js.map +1 -1
  43. package/lib/typescript/src/GestureViewer.d.ts +1 -1
  44. package/lib/typescript/src/GestureViewer.d.ts.map +1 -1
  45. package/lib/typescript/src/GestureViewerManager.d.ts +20 -20
  46. package/lib/typescript/src/GestureViewerManager.d.ts.map +1 -1
  47. package/lib/typescript/src/gestureViewerAnimation.d.ts +15 -0
  48. package/lib/typescript/src/gestureViewerAnimation.d.ts.map +1 -0
  49. package/lib/typescript/src/gestureViewerPaging.d.ts +13 -0
  50. package/lib/typescript/src/gestureViewerPaging.d.ts.map +1 -0
  51. package/lib/typescript/src/gestureViewerRenderWindow.d.ts +15 -0
  52. package/lib/typescript/src/gestureViewerRenderWindow.d.ts.map +1 -0
  53. package/lib/typescript/src/getWebContentProps.d.ts +3 -0
  54. package/lib/typescript/src/getWebContentProps.d.ts.map +1 -0
  55. package/lib/typescript/src/getWebContentProps.web.d.ts +5 -0
  56. package/lib/typescript/src/getWebContentProps.web.d.ts.map +1 -0
  57. package/lib/typescript/src/index.d.ts +1 -1
  58. package/lib/typescript/src/index.d.ts.map +1 -1
  59. package/lib/typescript/src/platformTapGestures.d.ts +2 -0
  60. package/lib/typescript/src/platformTapGestures.d.ts.map +1 -0
  61. package/lib/typescript/src/platformTapGestures.web.d.ts +2 -0
  62. package/lib/typescript/src/platformTapGestures.web.d.ts.map +1 -0
  63. package/lib/typescript/src/renderWindow.d.ts +44 -0
  64. package/lib/typescript/src/renderWindow.d.ts.map +1 -0
  65. package/lib/typescript/src/types.d.ts +45 -52
  66. package/lib/typescript/src/types.d.ts.map +1 -1
  67. package/lib/typescript/src/useGestureViewer.d.ts +9 -8
  68. package/lib/typescript/src/useGestureViewer.d.ts.map +1 -1
  69. package/lib/typescript/src/useGestureViewerController.d.ts +1 -1
  70. package/lib/typescript/src/useGestureViewerManagerBridge.d.ts +28 -0
  71. package/lib/typescript/src/useGestureViewerManagerBridge.d.ts.map +1 -0
  72. package/lib/typescript/src/useGestureViewerPaging.d.ts +31 -2
  73. package/lib/typescript/src/useGestureViewerPaging.d.ts.map +1 -1
  74. package/lib/typescript/src/useWebClickHandler.d.ts +35 -0
  75. package/lib/typescript/src/useWebClickHandler.d.ts.map +1 -0
  76. package/lib/typescript/src/useWebClickHandler.web.d.ts +36 -0
  77. package/lib/typescript/src/useWebClickHandler.web.d.ts.map +1 -0
  78. package/lib/typescript/src/useWebSingleTapTimer.d.ts +6 -0
  79. package/lib/typescript/src/useWebSingleTapTimer.d.ts.map +1 -0
  80. package/lib/typescript/src/useWebSingleTapTimer.web.d.ts +6 -0
  81. package/lib/typescript/src/useWebSingleTapTimer.web.d.ts.map +1 -0
  82. package/lib/typescript/src/utils/index.d.ts +0 -20
  83. package/lib/typescript/src/utils/index.d.ts.map +1 -1
  84. package/lib/typescript/src/utils/tapZoom.d.ts.map +1 -1
  85. package/package.json +1 -1
  86. package/src/GestureViewer.tsx +104 -191
  87. package/src/GestureViewerManager.ts +77 -122
  88. package/src/gestureViewerAnimation.ts +18 -0
  89. package/src/gestureViewerPaging.ts +116 -0
  90. package/src/gestureViewerRenderWindow.ts +56 -0
  91. package/src/getWebContentProps.ts +5 -0
  92. package/src/getWebContentProps.web.ts +5 -0
  93. package/src/index.tsx +1 -0
  94. package/src/platformTapGestures.ts +1 -0
  95. package/src/platformTapGestures.web.ts +1 -0
  96. package/src/renderWindow.ts +253 -0
  97. package/src/types.ts +44 -99
  98. package/src/useGestureViewer.ts +557 -258
  99. package/src/useGestureViewerController.ts +3 -3
  100. package/src/useGestureViewerManagerBridge.ts +118 -0
  101. package/src/useGestureViewerPaging.ts +277 -98
  102. package/src/useWebClickHandler.ts +44 -0
  103. package/src/useWebClickHandler.web.ts +146 -0
  104. package/src/useWebSingleTapTimer.ts +10 -0
  105. package/src/useWebSingleTapTimer.web.ts +30 -0
  106. package/src/utils/index.ts +0 -102
  107. package/src/utils/tapZoom.ts +4 -3
  108. package/lib/module/WebPagingFixStyle.js +0 -25
  109. package/lib/module/WebPagingFixStyle.js.map +0 -1
  110. package/lib/module/scheduleInitialScroll.js +0 -21
  111. package/lib/module/scheduleInitialScroll.js.map +0 -1
  112. package/lib/module/useGestureViewerPaging.types.js +0 -4
  113. package/lib/module/useGestureViewerPaging.types.js.map +0 -1
  114. package/lib/module/useGestureViewerPaging.web.js +0 -275
  115. package/lib/module/useGestureViewerPaging.web.js.map +0 -1
  116. package/lib/module/utils/FlashList.js +0 -9
  117. package/lib/module/utils/FlashList.js.map +0 -1
  118. package/lib/module/utils/webScroll.js +0 -70
  119. package/lib/module/utils/webScroll.js.map +0 -1
  120. package/lib/typescript/src/WebPagingFixStyle.d.ts +0 -6
  121. package/lib/typescript/src/WebPagingFixStyle.d.ts.map +0 -1
  122. package/lib/typescript/src/scheduleInitialScroll.d.ts +0 -3
  123. package/lib/typescript/src/scheduleInitialScroll.d.ts.map +0 -1
  124. package/lib/typescript/src/useGestureViewerPaging.types.d.ts +0 -41
  125. package/lib/typescript/src/useGestureViewerPaging.types.d.ts.map +0 -1
  126. package/lib/typescript/src/useGestureViewerPaging.web.d.ts +0 -3
  127. package/lib/typescript/src/useGestureViewerPaging.web.d.ts.map +0 -1
  128. package/lib/typescript/src/utils/FlashList.d.ts +0 -2
  129. package/lib/typescript/src/utils/FlashList.d.ts.map +0 -1
  130. package/lib/typescript/src/utils/webScroll.d.ts +0 -18
  131. package/lib/typescript/src/utils/webScroll.d.ts.map +0 -1
  132. package/src/WebPagingFixStyle.tsx +0 -25
  133. package/src/scheduleInitialScroll.ts +0 -36
  134. package/src/useGestureViewerPaging.types.ts +0 -41
  135. package/src/useGestureViewerPaging.web.ts +0 -434
  136. package/src/utils/FlashList.ts +0 -7
  137. package/src/utils/webScroll.ts +0 -96
@@ -0,0 +1,146 @@
1
+ import { useMemo } from 'react';
2
+ import type { SharedValue } from 'react-native-reanimated';
3
+
4
+ import type { ScheduleWebSingleTap } from './useWebSingleTapTimer';
5
+ import { applyTapZoomAtPoint } from './utils/tapZoom';
6
+
7
+ export type WebTapTarget<ItemT> = {
8
+ index: number;
9
+ item: ItemT;
10
+ };
11
+
12
+ export type WebClickEvent = {
13
+ clientX: number;
14
+ clientY: number;
15
+ currentTarget: {
16
+ getBoundingClientRect: () => {
17
+ left: number;
18
+ top: number;
19
+ };
20
+ };
21
+ detail: number;
22
+ };
23
+
24
+ export type WebClickHandler = (event: WebClickEvent) => void;
25
+
26
+ export type EmitSingleTap<ItemT> = (x: number, y: number, tapTarget?: WebTapTarget<ItemT>) => void;
27
+
28
+ export type WebClickHandlerConfig<ItemT> = {
29
+ clearPendingWebSingleTap: () => void;
30
+ emitSingleTap: EmitSingleTap<ItemT>;
31
+ enableDoubleTapZoom: boolean;
32
+ getCurrentTapTarget: () => WebTapTarget<ItemT> | null;
33
+ height: number;
34
+ isInteractionLocked: () => boolean;
35
+ maxZoomScale: number;
36
+ scale: SharedValue<number>;
37
+ scheduleWebSingleTap: ScheduleWebSingleTap;
38
+ translateX: SharedValue<number>;
39
+ translateY: SharedValue<number>;
40
+ width: number;
41
+ };
42
+
43
+ export function createWebClickHandler<ItemT>({
44
+ clearPendingWebSingleTap,
45
+ emitSingleTap,
46
+ enableDoubleTapZoom,
47
+ getCurrentTapTarget,
48
+ height,
49
+ isInteractionLocked,
50
+ maxZoomScale,
51
+ scale,
52
+ scheduleWebSingleTap,
53
+ translateX,
54
+ translateY,
55
+ width,
56
+ }: WebClickHandlerConfig<ItemT>): WebClickHandler {
57
+ return (event) => {
58
+ const rect = event.currentTarget.getBoundingClientRect();
59
+ const x = event.clientX - rect.left;
60
+ const y = event.clientY - rect.top;
61
+
62
+ if (isInteractionLocked()) {
63
+ clearPendingWebSingleTap();
64
+ return;
65
+ }
66
+
67
+ const tapTarget = getCurrentTapTarget();
68
+
69
+ if (!tapTarget) {
70
+ return;
71
+ }
72
+
73
+ if (!enableDoubleTapZoom) {
74
+ emitSingleTap(x, y, tapTarget);
75
+ return;
76
+ }
77
+
78
+ if (event.detail === 2) {
79
+ clearPendingWebSingleTap();
80
+ applyTapZoomAtPoint({
81
+ x,
82
+ y,
83
+ width,
84
+ height,
85
+ maxZoomScale,
86
+ scale,
87
+ translateX,
88
+ translateY,
89
+ });
90
+ return;
91
+ }
92
+
93
+ if (event.detail === 1) {
94
+ scheduleWebSingleTap(() => {
95
+ emitSingleTap(x, y, tapTarget);
96
+ });
97
+ }
98
+ };
99
+ }
100
+
101
+ export function useWebClickHandler<ItemT>({
102
+ clearPendingWebSingleTap,
103
+ emitSingleTap,
104
+ enableDoubleTapZoom,
105
+ getCurrentTapTarget,
106
+ height,
107
+ isInteractionLocked,
108
+ maxZoomScale,
109
+ scale,
110
+ scheduleWebSingleTap,
111
+ translateX,
112
+ translateY,
113
+ width,
114
+ }: WebClickHandlerConfig<ItemT>): WebClickHandler {
115
+ return useMemo(
116
+ () =>
117
+ createWebClickHandler({
118
+ clearPendingWebSingleTap,
119
+ emitSingleTap,
120
+ enableDoubleTapZoom,
121
+ getCurrentTapTarget,
122
+ height,
123
+ isInteractionLocked,
124
+ maxZoomScale,
125
+ scale,
126
+ scheduleWebSingleTap,
127
+ translateX,
128
+ translateY,
129
+ width,
130
+ }),
131
+ [
132
+ clearPendingWebSingleTap,
133
+ emitSingleTap,
134
+ enableDoubleTapZoom,
135
+ getCurrentTapTarget,
136
+ height,
137
+ isInteractionLocked,
138
+ maxZoomScale,
139
+ scale,
140
+ scheduleWebSingleTap,
141
+ translateX,
142
+ translateY,
143
+ width,
144
+ ],
145
+ );
146
+ }
@@ -0,0 +1,10 @@
1
+ import { useCallback } from 'react';
2
+
3
+ export type ScheduleWebSingleTap = (callback: () => void, delay?: number) => void;
4
+
5
+ export function useWebSingleTapTimer() {
6
+ const clearPendingWebSingleTap = useCallback(() => {}, []);
7
+ const scheduleWebSingleTap = useCallback<ScheduleWebSingleTap>(() => {}, []);
8
+
9
+ return { clearPendingWebSingleTap, scheduleWebSingleTap };
10
+ }
@@ -0,0 +1,30 @@
1
+ import { useCallback, useEffect, useRef } from 'react';
2
+
3
+ export type ScheduleWebSingleTap = (callback: () => void, delay?: number) => void;
4
+
5
+ export function useWebSingleTapTimer() {
6
+ const webSingleTapTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
7
+
8
+ const clearPendingWebSingleTap = useCallback(() => {
9
+ if (webSingleTapTimerRef.current) {
10
+ clearTimeout(webSingleTapTimerRef.current);
11
+ webSingleTapTimerRef.current = null;
12
+ }
13
+ }, []);
14
+
15
+ const scheduleWebSingleTap = useCallback<ScheduleWebSingleTap>(
16
+ (callback, delay = 250) => {
17
+ clearPendingWebSingleTap();
18
+
19
+ webSingleTapTimerRef.current = setTimeout(() => {
20
+ callback();
21
+ webSingleTapTimerRef.current = null;
22
+ }, delay);
23
+ },
24
+ [clearPendingWebSingleTap],
25
+ );
26
+
27
+ useEffect(() => clearPendingWebSingleTap, [clearPendingWebSingleTap]);
28
+
29
+ return { clearPendingWebSingleTap, scheduleWebSingleTap };
30
+ }
@@ -1,52 +1,3 @@
1
- import {
2
- FlatList as RNFlatList,
3
- ScrollView as RNScrollView,
4
- type PlatformOSType,
5
- } from 'react-native';
6
- import {
7
- FlatList as GestureFlatList,
8
- ScrollView as GestureScrollView,
9
- } from 'react-native-gesture-handler';
10
-
11
- import type { FlatListComponent, ScrollViewComponent } from '../types';
12
-
13
- import { FlashList } from './FlashList';
14
-
15
- export const isScrollViewLike = (
16
- component: React.ComponentType<any>,
17
- ): component is ScrollViewComponent =>
18
- component === RNScrollView || component === GestureScrollView;
19
-
20
- export const isFlatListLike = (
21
- component: React.ComponentType<any>,
22
- ): component is FlatListComponent<any> => {
23
- if (component === RNFlatList || component === GestureFlatList || isFlashListLike(component)) {
24
- return true;
25
- }
26
-
27
- return false;
28
- };
29
-
30
- export const isFlashListLike = (component: React.ComponentType<any>): boolean => {
31
- if (FlashList && component === FlashList) {
32
- return true;
33
- }
34
-
35
- return component?.displayName === 'FlashList' || component?.name === 'FlashList';
36
- };
37
-
38
- /**
39
- * iOS needs the extra Native gesture wrapper so the dismiss pan can resolve before the scrollable claims touches.
40
- * We intentionally skip Android because the same require-to-fail relation regressed horizontal paging there,
41
- * and we also avoid wrapping RNGH-provided scrollables to prevent double-applying Gesture.Native() to components that already participate in RNGH.
42
- */
43
- export const shouldUseNativeScrollGesture = (
44
- platformOS: PlatformOSType,
45
- component: React.ComponentType<any>,
46
- ): boolean => {
47
- return platformOS === 'ios' && component !== GestureScrollView && component !== GestureFlatList;
48
- };
49
-
50
1
  export const createBoundsConstraint =
51
2
  ({ width, height }: { width: number; height: number }) =>
52
3
  ({
@@ -75,56 +26,3 @@ export const createBoundsConstraint =
75
26
  translateY: Math.max(-maxTranslateY, Math.min(maxTranslateY, translateY)),
76
27
  };
77
28
  };
78
-
79
- export const createLoopData = <T>(dataRef: React.RefObject<T[]>, enableLoop: boolean): T[] => {
80
- const data = dataRef.current;
81
-
82
- if (!enableLoop || !data?.length || data.length <= 1) {
83
- return data;
84
- }
85
-
86
- const lastItem = data.at(-1);
87
- const firstItem = data[0];
88
-
89
- if (lastItem === undefined || firstItem === undefined) {
90
- return data;
91
- }
92
-
93
- return [lastItem, ...data, firstItem];
94
- };
95
-
96
- export const getLoopAdjustedIndex = (
97
- scrollIndex: number,
98
- originalDataLength: number,
99
- enableLoop: boolean,
100
- ): { realIndex: number; needsJump: boolean; jumpToIndex?: number } => {
101
- if (!enableLoop || originalDataLength <= 1) {
102
- return { needsJump: false, realIndex: scrollIndex };
103
- }
104
-
105
- if (scrollIndex === 0) {
106
- return {
107
- jumpToIndex: originalDataLength,
108
- needsJump: true,
109
- realIndex: originalDataLength - 1,
110
- };
111
- } else if (scrollIndex === originalDataLength + 1) {
112
- return {
113
- jumpToIndex: 1,
114
- needsJump: true,
115
- realIndex: 0,
116
- };
117
- }
118
-
119
- return { needsJump: false, realIndex: scrollIndex - 1 };
120
- };
121
-
122
- export const createScrollAction = (listRef: any, width: number) => ({
123
- scrollTo: (index: number, animated: boolean) => {
124
- if (listRef?.scrollToIndex) {
125
- listRef.scrollToIndex({ animated, index });
126
- } else if (listRef?.scrollTo) {
127
- listRef.scrollTo({ animated, x: index * width });
128
- }
129
- },
130
- });
@@ -35,10 +35,11 @@ export const applyTapZoomAtPoint = ({
35
35
  // NOTE 확대로 밀려난 거리만큼 반대로 이동해서 탭 지점을 제자리에 유지
36
36
  translateX.set(withTiming(-centerX * (nextScale - 1), timingConfig));
37
37
  translateY.set(withTiming(-centerY * (nextScale - 1), timingConfig));
38
- } else {
39
- translateX.set(withTiming(0, timingConfig));
40
- translateY.set(withTiming(0, timingConfig));
38
+ scale.set(withTiming(nextScale, timingConfig));
39
+ return;
41
40
  }
42
41
 
42
+ translateX.set(withTiming(0, timingConfig));
43
+ translateY.set(withTiming(0, timingConfig));
43
44
  scale.set(withTiming(nextScale, timingConfig));
44
45
  };
@@ -1,25 +0,0 @@
1
- "use strict";
2
-
3
- import { Platform } from 'react-native';
4
- import { isFlashListLike, isFlatListLike } from "./utils/index.js";
5
- import { jsx as _jsx } from "react/jsx-runtime";
6
- function WebPagingFixStyle({
7
- Component
8
- }) {
9
- if (Platform.OS !== 'web') {
10
- return null;
11
- }
12
- if (isFlashListLike(Component)) {
13
- return /*#__PURE__*/_jsx("style", {
14
- children: `[data-flash-list-paging-enabled-fix] > div {height: 100%;}`
15
- });
16
- }
17
- if (isFlatListLike(Component)) {
18
- return /*#__PURE__*/_jsx("style", {
19
- children: `[data-flat-list-paging-enabled-fix] > div > div > div {height: 100%;}`
20
- });
21
- }
22
- return null;
23
- }
24
- export default WebPagingFixStyle;
25
- //# sourceMappingURL=WebPagingFixStyle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["Platform","isFlashListLike","isFlatListLike","jsx","_jsx","WebPagingFixStyle","Component","OS","children"],"sourceRoot":"../../src","sources":["WebPagingFixStyle.tsx"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,cAAc;AAEvC,SAASC,eAAe,EAAEC,cAAc,QAAQ,kBAAS;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAM1D,SAASC,iBAAiBA,CAAC;EAAEC;AAAkC,CAAC,EAAE;EAChE,IAAIN,QAAQ,CAACO,EAAE,KAAK,KAAK,EAAE;IACzB,OAAO,IAAI;EACb;EAEA,IAAIN,eAAe,CAACK,SAAS,CAAC,EAAE;IAC9B,oBAAOF,IAAA;MAAAI,QAAA,EAAQ;IAA4D,CAAQ,CAAC;EACtF;EAEA,IAAIN,cAAc,CAACI,SAAS,CAAC,EAAE;IAC7B,oBAAOF,IAAA;MAAAI,QAAA,EAAQ;IAAuE,CAAQ,CAAC;EACjG;EAEA,OAAO,IAAI;AACb;AAEA,eAAeH,iBAAiB","ignoreList":[]}
@@ -1,21 +0,0 @@
1
- "use strict";
2
-
3
- export const INITIAL_SCROLL_IDLE_TIMEOUT_MS = 100;
4
- export const scheduleInitialScroll = callback => {
5
- const idleGlobal = globalThis;
6
- const requestIdleCallback = idleGlobal.requestIdleCallback?.bind(idleGlobal);
7
- const cancelIdleCallback = idleGlobal.cancelIdleCallback?.bind(idleGlobal);
8
- if (requestIdleCallback && cancelIdleCallback) {
9
- const idleCallbackId = requestIdleCallback(callback, {
10
- timeout: INITIAL_SCROLL_IDLE_TIMEOUT_MS
11
- });
12
- return () => {
13
- cancelIdleCallback(idleCallbackId);
14
- };
15
- }
16
- const timeoutId = setTimeout(callback, 0);
17
- return () => {
18
- clearTimeout(timeoutId);
19
- };
20
- };
21
- //# sourceMappingURL=scheduleInitialScroll.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["INITIAL_SCROLL_IDLE_TIMEOUT_MS","scheduleInitialScroll","callback","idleGlobal","globalThis","requestIdleCallback","bind","cancelIdleCallback","idleCallbackId","timeout","timeoutId","setTimeout","clearTimeout"],"sourceRoot":"../../src","sources":["scheduleInitialScroll.ts"],"mappings":";;AAAA,OAAO,MAAMA,8BAA8B,GAAG,GAAG;AAejD,OAAO,MAAMC,qBAAqB,GAAIC,QAAoB,IAAmB;EAC3E,MAAMC,UAAU,GAAGC,UAAiC;EACpD,MAAMC,mBAAmB,GAAGF,UAAU,CAACE,mBAAmB,EAAEC,IAAI,CAACH,UAAU,CAAC;EAC5E,MAAMI,kBAAkB,GAAGJ,UAAU,CAACI,kBAAkB,EAAED,IAAI,CAACH,UAAU,CAAC;EAE1E,IAAIE,mBAAmB,IAAIE,kBAAkB,EAAE;IAC7C,MAAMC,cAAc,GAAGH,mBAAmB,CAACH,QAAQ,EAAE;MACnDO,OAAO,EAAET;IACX,CAAC,CAAC;IAEF,OAAO,MAAM;MACXO,kBAAkB,CAACC,cAAc,CAAC;IACpC,CAAC;EACH;EAEA,MAAME,SAAS,GAAGC,UAAU,CAACT,QAAQ,EAAE,CAAC,CAAC;EAEzC,OAAO,MAAM;IACXU,YAAY,CAACF,SAAS,CAAC;EACzB,CAAC;AACH,CAAC","ignoreList":[]}
@@ -1,4 +0,0 @@
1
- "use strict";
2
-
3
- export {};
4
- //# sourceMappingURL=useGestureViewerPaging.types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":[],"sourceRoot":"../../src","sources":["useGestureViewerPaging.types.ts"],"mappings":"","ignoreList":[]}
@@ -1,275 +0,0 @@
1
- "use strict";
2
-
3
- import { useCallback, useEffect, useRef } from 'react';
4
- import { applyTapZoomAtPoint } from "./utils/tapZoom.js";
5
- import { getWebAutoPlayTargetPhysicalIndex, getWebScrollPhysicalIndex, resolveWebScrollFinalState } from "./utils/webScroll.js";
6
- export function useGestureViewerPaging({
7
- adjustedInitialIndex,
8
- autoPlay,
9
- autoPlayInterval,
10
- currentIndex,
11
- dataLength,
12
- enableDoubleTapZoom,
13
- enableHorizontalSwipe,
14
- enableLoop,
15
- height,
16
- onSingleTap,
17
- isRotated,
18
- isZoomed,
19
- itemSpacing,
20
- manager,
21
- maxZoomScale,
22
- scale,
23
- scrollTo,
24
- syncCurrentIndex,
25
- syncPendingIndex,
26
- translateX,
27
- translateY,
28
- width
29
- }) {
30
- const webSingleTapTimerRef = useRef(null);
31
- const webScrollRuntimeRef = useRef({
32
- actor: 'idle',
33
- isAutoplayPausedByUser: false,
34
- lastSettledPhysicalIndex: adjustedInitialIndex,
35
- latestOffsetX: adjustedInitialIndex * (width + itemSpacing),
36
- latestRawPhysicalIndex: adjustedInitialIndex,
37
- lastProgrammaticScrollVersion: 0,
38
- settleTimer: null,
39
- resumeAutoplayTimer: null
40
- });
41
- const clearWebSingleTapTimer = useCallback(() => {
42
- if (webSingleTapTimerRef.current) {
43
- clearTimeout(webSingleTapTimerRef.current);
44
- webSingleTapTimerRef.current = null;
45
- }
46
- }, []);
47
- const clearWebSettleTimer = useCallback(() => {
48
- const runtime = webScrollRuntimeRef.current;
49
- if (runtime.settleTimer) {
50
- clearTimeout(runtime.settleTimer);
51
- runtime.settleTimer = null;
52
- }
53
- }, []);
54
- const clearWebAutoplayResumeTimer = useCallback(() => {
55
- const runtime = webScrollRuntimeRef.current;
56
- if (runtime.resumeAutoplayTimer) {
57
- clearTimeout(runtime.resumeAutoplayTimer);
58
- runtime.resumeAutoplayTimer = null;
59
- }
60
- }, []);
61
- const scheduleWebAutoplayResume = useCallback(() => {
62
- const runtime = webScrollRuntimeRef.current;
63
- clearWebAutoplayResumeTimer();
64
- runtime.resumeAutoplayTimer = setTimeout(() => {
65
- runtime.isAutoplayPausedByUser = false;
66
- runtime.resumeAutoplayTimer = null;
67
- }, 800);
68
- }, [clearWebAutoplayResumeTimer]);
69
- const pauseWebAutoplayWithoutPagingInteraction = useCallback(() => {
70
- const runtime = webScrollRuntimeRef.current;
71
- runtime.isAutoplayPausedByUser = true;
72
- runtime.actor = 'idle';
73
- clearWebAutoplayResumeTimer();
74
- }, [clearWebAutoplayResumeTimer]);
75
- const beginWebUserInteraction = useCallback((force = false) => {
76
- const runtime = webScrollRuntimeRef.current;
77
- if (!force && runtime.actor === 'autoplay') {
78
- return;
79
- }
80
- runtime.actor = 'user';
81
- runtime.isAutoplayPausedByUser = true;
82
- clearWebAutoplayResumeTimer();
83
- }, [clearWebAutoplayResumeTimer]);
84
- const beginWebAutoplayScroll = useCallback(() => {
85
- const runtime = webScrollRuntimeRef.current;
86
- runtime.actor = 'autoplay';
87
- runtime.isAutoplayPausedByUser = false;
88
- runtime.lastProgrammaticScrollVersion = manager?.getProgrammaticScrollVersion() ?? 0;
89
- clearWebAutoplayResumeTimer();
90
- }, [clearWebAutoplayResumeTimer, manager]);
91
- const syncProgrammaticActorFromManager = useCallback(() => {
92
- const runtime = webScrollRuntimeRef.current;
93
- const nextVersion = manager?.getProgrammaticScrollVersion() ?? 0;
94
- if (nextVersion === runtime.lastProgrammaticScrollVersion) {
95
- return;
96
- }
97
- runtime.actor = 'autoplay';
98
- runtime.isAutoplayPausedByUser = false;
99
- runtime.lastProgrammaticScrollVersion = nextVersion;
100
- clearWebAutoplayResumeTimer();
101
- }, [clearWebAutoplayResumeTimer, manager]);
102
- const finalizeWebScroll = useCallback((offsetX, source = 'scroll') => {
103
- if (!enableHorizontalSwipe || dataLength <= 0) {
104
- return;
105
- }
106
- const runtime = webScrollRuntimeRef.current;
107
- const settledByActor = runtime.actor;
108
- clearWebSettleTimer();
109
- runtime.latestOffsetX = offsetX;
110
- const settledState = resolveWebScrollFinalState({
111
- dataLength,
112
- enableLoop,
113
- lastSettledPhysicalIndex: runtime.lastSettledPhysicalIndex,
114
- offsetX,
115
- pageWidth: width + itemSpacing
116
- });
117
- if (!settledState) {
118
- return;
119
- }
120
- const {
121
- logicalIndex,
122
- rawPhysicalIndex,
123
- settledPhysicalIndex
124
- } = settledState;
125
- if (source === 'scroll' && runtime.latestRawPhysicalIndex !== rawPhysicalIndex) {
126
- return;
127
- }
128
- if (rawPhysicalIndex !== settledPhysicalIndex) {
129
- const crossedLoopBoundary = enableLoop && dataLength > 1 && (rawPhysicalIndex === 0 || rawPhysicalIndex === dataLength + 1);
130
- scrollTo(settledPhysicalIndex, !crossedLoopBoundary);
131
- }
132
- runtime.lastSettledPhysicalIndex = settledPhysicalIndex;
133
- runtime.latestOffsetX = settledPhysicalIndex * (width + itemSpacing);
134
- runtime.actor = 'idle';
135
- manager?.cancelPendingLoopTransition();
136
- syncCurrentIndex(logicalIndex);
137
- if (settledByActor === 'user') {
138
- scheduleWebAutoplayResume();
139
- }
140
- }, [clearWebSettleTimer, dataLength, enableHorizontalSwipe, enableLoop, itemSpacing, manager, scheduleWebAutoplayResume, scrollTo, syncCurrentIndex, width]);
141
- const scheduleWebScrollSettle = useCallback(offsetX => {
142
- const runtime = webScrollRuntimeRef.current;
143
- runtime.latestOffsetX = offsetX;
144
- runtime.latestRawPhysicalIndex = getWebScrollPhysicalIndex(offsetX, width + itemSpacing);
145
- clearWebSettleTimer();
146
- runtime.settleTimer = setTimeout(() => {
147
- finalizeWebScroll(runtime.latestOffsetX, 'scroll');
148
- }, 180);
149
- }, [clearWebSettleTimer, finalizeWebScroll, itemSpacing, width]);
150
- useEffect(() => {
151
- const runtime = webScrollRuntimeRef.current;
152
- runtime.actor = 'idle';
153
- runtime.isAutoplayPausedByUser = false;
154
- runtime.lastSettledPhysicalIndex = adjustedInitialIndex;
155
- runtime.latestOffsetX = adjustedInitialIndex * (width + itemSpacing);
156
- runtime.latestRawPhysicalIndex = adjustedInitialIndex;
157
- runtime.lastProgrammaticScrollVersion = manager?.getProgrammaticScrollVersion() ?? 0;
158
- clearWebSettleTimer();
159
- clearWebAutoplayResumeTimer();
160
- }, [adjustedInitialIndex, clearWebAutoplayResumeTimer, clearWebSettleTimer, itemSpacing, manager, width]);
161
- useEffect(() => {
162
- return () => {
163
- clearWebSingleTapTimer();
164
- clearWebSettleTimer();
165
- clearWebAutoplayResumeTimer();
166
- };
167
- }, [clearWebAutoplayResumeTimer, clearWebSettleTimer, clearWebSingleTapTimer]);
168
- useEffect(() => {
169
- if (!autoPlay || dataLength <= 1 || isZoomed || isRotated || !enableLoop && currentIndex === dataLength - 1) {
170
- return;
171
- }
172
- const intervalMs = Math.max(250, Math.floor(autoPlayInterval || 0));
173
- if (!Number.isFinite(intervalMs)) {
174
- return;
175
- }
176
- const interval = setInterval(() => {
177
- if (isZoomed || isRotated) {
178
- return;
179
- }
180
- const runtime = webScrollRuntimeRef.current;
181
- if (runtime.actor !== 'idle' || runtime.isAutoplayPausedByUser || runtime.settleTimer) {
182
- return;
183
- }
184
- const targetPhysicalIndex = getWebAutoPlayTargetPhysicalIndex({
185
- currentIndex,
186
- dataLength,
187
- enableLoop
188
- });
189
- if (targetPhysicalIndex === null) {
190
- return;
191
- }
192
- beginWebAutoplayScroll();
193
- runtime.latestOffsetX = targetPhysicalIndex * (width + itemSpacing);
194
- scrollTo(targetPhysicalIndex, true);
195
- scheduleWebScrollSettle(runtime.latestOffsetX);
196
- }, intervalMs);
197
- return () => clearInterval(interval);
198
- }, [autoPlay, autoPlayInterval, beginWebAutoplayScroll, currentIndex, dataLength, enableLoop, isRotated, isZoomed, itemSpacing, scheduleWebScrollSettle, scrollTo, width]);
199
- const onScroll = useCallback(event => {
200
- if (!enableHorizontalSwipe) {
201
- return;
202
- }
203
- const offsetX = event.nativeEvent.contentOffset.x;
204
- const runtime = webScrollRuntimeRef.current;
205
- const pendingState = resolveWebScrollFinalState({
206
- dataLength,
207
- enableLoop,
208
- lastSettledPhysicalIndex: runtime.lastSettledPhysicalIndex,
209
- offsetX,
210
- pageWidth: width + itemSpacing
211
- });
212
- if (pendingState) {
213
- syncPendingIndex(pendingState.logicalIndex);
214
- }
215
- syncProgrammaticActorFromManager();
216
- beginWebUserInteraction();
217
- scheduleWebScrollSettle(offsetX);
218
- }, [beginWebUserInteraction, dataLength, enableHorizontalSwipe, enableLoop, itemSpacing, scheduleWebScrollSettle, syncPendingIndex, syncProgrammaticActorFromManager, width]);
219
- const onMomentumScrollEnd = useCallback(event => {
220
- if (!enableHorizontalSwipe) {
221
- return;
222
- }
223
- finalizeWebScroll(event.nativeEvent.contentOffset.x, 'momentum');
224
- }, [enableHorizontalSwipe, finalizeWebScroll]);
225
- const onScrollBeginDrag = useCallback(() => {
226
- beginWebUserInteraction(true);
227
- clearWebSettleTimer();
228
- manager?.handleScrollBeginDrag();
229
- }, [beginWebUserInteraction, clearWebSettleTimer, manager]);
230
- const onWebClick = useCallback(event => {
231
- const detail = event.detail;
232
- const rect = event.currentTarget.getBoundingClientRect();
233
- const resolvedX = event.clientX - rect.left;
234
- const resolvedY = event.clientY - rect.top;
235
- if (!enableDoubleTapZoom) {
236
- if (!onSingleTap) {
237
- return;
238
- }
239
- clearWebSingleTapTimer();
240
- onSingleTap(resolvedX, resolvedY);
241
- return;
242
- }
243
- if (detail === 2) {
244
- clearWebSingleTapTimer();
245
- pauseWebAutoplayWithoutPagingInteraction();
246
- scheduleWebAutoplayResume();
247
- applyTapZoomAtPoint({
248
- x: resolvedX,
249
- y: resolvedY,
250
- width,
251
- height,
252
- maxZoomScale,
253
- scale,
254
- translateX,
255
- translateY
256
- });
257
- return;
258
- }
259
- if (detail !== 1 || !onSingleTap) {
260
- return;
261
- }
262
- clearWebSingleTapTimer();
263
- webSingleTapTimerRef.current = setTimeout(() => {
264
- onSingleTap(resolvedX, resolvedY);
265
- webSingleTapTimerRef.current = null;
266
- }, 250);
267
- }, [clearWebSingleTapTimer, enableDoubleTapZoom, height, maxZoomScale, onSingleTap, pauseWebAutoplayWithoutPagingInteraction, scale, scheduleWebAutoplayResume, translateX, translateY, width]);
268
- return {
269
- onMomentumScrollEnd,
270
- onScroll,
271
- onScrollBeginDrag,
272
- onWebClick
273
- };
274
- }
275
- //# sourceMappingURL=useGestureViewerPaging.web.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["useCallback","useEffect","useRef","applyTapZoomAtPoint","getWebAutoPlayTargetPhysicalIndex","getWebScrollPhysicalIndex","resolveWebScrollFinalState","useGestureViewerPaging","adjustedInitialIndex","autoPlay","autoPlayInterval","currentIndex","dataLength","enableDoubleTapZoom","enableHorizontalSwipe","enableLoop","height","onSingleTap","isRotated","isZoomed","itemSpacing","manager","maxZoomScale","scale","scrollTo","syncCurrentIndex","syncPendingIndex","translateX","translateY","width","webSingleTapTimerRef","webScrollRuntimeRef","actor","isAutoplayPausedByUser","lastSettledPhysicalIndex","latestOffsetX","latestRawPhysicalIndex","lastProgrammaticScrollVersion","settleTimer","resumeAutoplayTimer","clearWebSingleTapTimer","current","clearTimeout","clearWebSettleTimer","runtime","clearWebAutoplayResumeTimer","scheduleWebAutoplayResume","setTimeout","pauseWebAutoplayWithoutPagingInteraction","beginWebUserInteraction","force","beginWebAutoplayScroll","getProgrammaticScrollVersion","syncProgrammaticActorFromManager","nextVersion","finalizeWebScroll","offsetX","source","settledByActor","settledState","pageWidth","logicalIndex","rawPhysicalIndex","settledPhysicalIndex","crossedLoopBoundary","cancelPendingLoopTransition","scheduleWebScrollSettle","intervalMs","Math","max","floor","Number","isFinite","interval","setInterval","targetPhysicalIndex","clearInterval","onScroll","event","nativeEvent","contentOffset","x","pendingState","onMomentumScrollEnd","onScrollBeginDrag","handleScrollBeginDrag","onWebClick","detail","rect","currentTarget","getBoundingClientRect","resolvedX","clientX","left","resolvedY","clientY","top","y"],"sourceRoot":"../../src","sources":["useGestureViewerPaging.web.ts"],"mappings":"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","ignoreList":[]}