react-native-gesture-image-viewer 1.6.0 → 1.6.2

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
@@ -2,478 +2,85 @@
2
2
 
3
3
  > English | [한국어](./README-ko_kr.md)
4
4
 
5
+ <div align="center">
6
+ <img src="./assets/logo.png" width="300px" alt="React Native Gesture Image Viewer logo" />
7
+ </div>
8
+
5
9
  ## Overview
6
10
 
7
11
  Have you ever struggled with implementing complex gesture handling and animations when building image galleries or content viewers in React Native?
8
12
 
9
13
  Existing libraries often have limited customization options or performance issues. `react-native-gesture-image-viewer` is a high-performance **universal gesture viewer** library built on React Native Reanimated and Gesture Handler, providing complete customization and intuitive gesture support for not only images but also videos, custom components, and any other content.
10
14
 
11
- ### Key Features
12
-
13
- - ✅ **Complete Gesture Support** - Pinch zoom, double-tap zoom, swipe navigation, vertical drag dismiss
14
- - ✅ **High-Performance Animations** - Smooth 60fps animations powered by React Native Reanimated
15
- - ✅ **Full Customization** - Complete control over components, styles, and behaviors
16
- - ✅ **External Control API** - Programmatic control from buttons or other components
17
- - ✅ **Multi-Instance Management** - ID-based independent management of multiple viewers
18
- - ✅ **Flexible Integration** - Use with Modal, [React Native Modal](https://www.npmjs.com/package/react-native-modal), ScrollView, FlatList, [FlashList](https://www.npmjs.com/package/@shopify/flash-list), [Expo Image](https://www.npmjs.com/package/expo-image), [FastImage](https://github.com/DylanVann/react-native-fast-image), and more
19
- - ✅ **Full TypeScript Support** - Enhanced developer experience with smart type inference
20
- - ✅ **Cross-Platform** - iOS, Android, and Web support
21
- - ✅ **Easy-to-Use API** - Intuitive and simple implementation without complex setup
22
- - ✅ **Various Environment Support** - Expo Go and New Architecture support
23
-
24
- ## Quick Start
25
-
26
- ### Examples & Demo
27
- - [📁 Example Project](/example/) - Real implementation code with various use cases
28
- - [🤖 Expo Go](https://snack.expo.dev/@harang/react-native-gesture-image-viewer) - Try it instantly on Snack Expo
29
-
30
15
  <p align="center">
31
- <img src="./assets/example.gif" width="600" />
16
+ <img src="./assets/example.gif" width="600" alt="Gesture and zoom demo" />
32
17
  </p>
33
18
 
34
- ### Prerequisites
35
-
36
- > [!IMPORTANT]
37
- > `react-native-gesture-image-viewer` is a high-performance viewer library built on [`react-native-reanimated`](https://www.npmjs.com/package/react-native-reanimated) and [`react-native-gesture-handler`](https://www.npmjs.com/package/react-native-gesture-handler).
38
- > Therefore, you must install React Native Reanimated and Gesture Handler before using this library. Please refer to the official documentation of these libraries for detailed setup guides.
39
-
40
- ```bash
41
- npm install react-native-reanimated
42
- npm install react-native-gesture-handler
43
- ```
44
-
45
- #### Minimum Requirements
46
-
47
- |Library|Minimum Version|
48
- |:--|:--:|
49
- |`react`|`>=18.0.0`|
50
- |`react-native`|`>=0.75.0`|
51
- |`react-native-gesture-handler`|`>=2.24.0`|
52
- |`react-native-reanimated`|`>=3.0.0`|
53
-
54
- #### [React Native Reanimated Setup](https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/getting-started/)
55
-
56
- Add the plugin to your `babel.config.js`:
57
-
58
- ```js
59
- // babel.config.js
60
- module.exports = {
61
- presets: [
62
- ... // don't add it here :)
63
- ],
64
- plugins: [
65
- ...
66
- // for web
67
- '@babel/plugin-proposal-export-namespace-from',
68
- // react-native-reanimated/plugin has to be listed last.
69
- 'react-native-reanimated/plugin',
70
- ],
71
- };
72
- ```
73
-
74
- Wrap your Metro config with `wrapWithReanimatedMetroConfig` in `metro.config.js`:
75
-
76
- ```js
77
- const {
78
- wrapWithReanimatedMetroConfig,
79
- } = require('react-native-reanimated/metro-config');
80
-
81
- const config = {
82
- // Your existing Metro configuration options
83
- };
84
-
85
- module.exports = wrapWithReanimatedMetroConfig(config);
86
- ```
87
-
88
- #### [react-native-gesture-handler Setup](https://docs.swmansion.com/react-native-gesture-handler/docs/fundamentals/installation)
89
-
90
- - `react-native-gesture-handler` generally doesn't require additional setup, but please refer to the official documentation for your specific environment.
91
- - For [using gestures in Android modals](https://docs.swmansion.com/react-native-gesture-handler/docs/fundamentals/installation#android), you would normally need to wrap modal content with `GestureHandlerRootView`. However, this library already includes `GestureHandlerRootView` internally, so no additional wrapping is needed when using modals.
19
+ ### Key Features
92
20
 
93
- ### Installation
21
+ - 🤌 **Complete Gesture Support** - Pinch zoom, double-tap zoom, swipe navigation, pan when zoomed-in, and vertical drag to dismiss
22
+ - 🏎️ **High-Performance Animations** - Smooth and responsive animations at 60fps and beyond, powered by React Native Reanimated
23
+ - 🎨 **Full Customization** - Total control over components, styles, and gesture behavior
24
+ - 🎛️ **External Control API** - Trigger actions programmatically from buttons or other UI components
25
+ - 🧩 **Multi-Instance Management** - Manage multiple viewers independently using unique IDs
26
+ - 🧬 **Flexible Integration** - Use with Modal, [React Native Modal](https://www.npmjs.com/package/react-native-modal), ScrollView, FlatList, [FlashList](https://www.npmjs.com/package/@shopify/flash-list), [Expo Image](https://www.npmjs.com/package/expo-image), [FastImage](https://github.com/DylanVann/react-native-fast-image), and more
27
+ - 🧠 **Full TypeScript Support** - Great developer experience with type inference and safety
28
+ - 🌐 **Cross-Platform** - Runs on iOS, Android, and Web with Expo Go and New Architecture compatibility
29
+ - 🪄 **Easy-to-Use API** - Simple and intuitive API that requires minimal setup
94
30
 
95
- ```bash
96
- # npm
97
- npm install react-native-gesture-image-viewer
31
+ ## Quick Start
98
32
 
99
- # pnpm
100
- pnpm add react-native-gesture-image-viewer
33
+ ### 📚 Documentation
101
34
 
102
- # yarn
103
- yarn add react-native-gesture-image-viewer
35
+ Full documentation is available at: <https://react-native-gesture-image-viewer.pages.dev>
104
36
 
105
- # bun
106
- bun add react-native-gesture-image-viewer
107
- ```
37
+ ### Examples & Demo
108
38
 
109
- ## Usage
39
+ - [📁 Example Project](/example/) - Real implementation code with various use cases
40
+ - [🤖 Expo Go](https://snack.expo.dev/@harang/react-native-gesture-image-viewer) - Try it instantly on Snack Expo
110
41
 
111
42
  ### Basic Usage
112
43
 
113
44
  `react-native-gesture-image-viewer` is a library focused purely on gesture interactions for complete customization.
114
- You can create a viewer using any `Modal` of your choice as shown below:
115
45
 
116
46
  ```tsx
117
- import { FlatList, Image, Modal } from 'react-native';
118
- import { GestureViewer } from 'react-native-gesture-image-viewer';
47
+ import { useCallback, useState } from 'react';
48
+ import { ScrollView, Image, Modal, View, Text, Button } from 'react-native';
49
+ import { GestureViewer, useGestureViewerController, useGestureViewerEvent } from 'react-native-gesture-image-viewer';
119
50
 
120
51
  function App() {
121
52
  const images = [...];
122
53
  const [visible, setVisible] = useState(false);
123
54
 
124
- // Wrap with useCallback for performance optimization
55
+ const { goToIndex, goToPrevious, goToNext, currentIndex, totalCount } = useGestureViewerController();
56
+
125
57
  const renderImage = useCallback((imageUrl: string) => {
126
58
  return <Image source={{ uri: imageUrl }} style={{ width: '100%', height: '100%' }} resizeMode="contain" />;
127
59
  }, []);
128
60
 
61
+ useGestureViewerEvent('zoomChange', (data) => {
62
+ console.log(`Zoom changed from ${data.previousScale} to ${data.scale}`);
63
+ });
64
+
129
65
  return (
130
66
  <Modal visible={visible} onRequestClose={() => setVisible(false)}>
131
67
  <GestureViewer
132
68
  data={images}
133
69
  renderItem={renderImage}
134
- ListComponent={FlatList}
70
+ ListComponent={ScrollView}
135
71
  onDismiss={() => setVisible(false)}
136
72
  />
137
- </Modal>
138
- );
139
- }
140
- ```
141
-
142
- ### Gesture Features
143
-
144
- `react-native-gesture-image-viewer` supports various gestures essential for viewers. All gestures are enabled by default.
145
-
146
- ```tsx
147
- function App() {
148
- return (
149
- <GestureViewer
150
- data={images}
151
- renderItem={renderImage}
152
- enableLoop={false}
153
- enableDismissGesture
154
- enableSwipeGesture
155
- enableZoomGesture
156
- enableDoubleTapGesture
157
- enableZoomPanGesture
158
- />
159
- )
160
- }
161
- ```
162
-
163
- |Property|Description|Default|
164
- |:--:|:-----|:--:|
165
- |`enableLoop`|Enables loop mode. When `true`, navigating next from the last item goes to the first item, and navigating previous from the first item goes to the last item.|`false`|
166
- |`enableDismissGesture`|Calls `onDismiss` function when swiping down. Useful for closing modals with downward swipe gestures.|`true`|
167
- |`enableSwipeGesture`|Controls left/right swipe gestures. When `false`, horizontal gestures are disabled.|`true`|
168
- |`enableZoomGesture`|Controls two-finger pinch gestures with focal point zooming. When `false`, pinch zoom is disabled. Zoom centers on the point between your two fingers for intuitive scaling.|`true`|
169
- |`enableDoubleTapGesture`|Controls double-tap zoom gestures with precision targeting. When `false`, double-tap zoom is disabled. Zoom centers exactly on the tapped location.|`true`|
170
- |`enableZoomPanGesture`|Enables panning when zoomed in with automatic boundary detection. When `false`, movement is disabled during zoom. Prevents content from moving outside visible screen area.|`true`|
171
-
172
- ### Custom Components
173
-
174
- `react-native-gesture-image-viewer` offers powerful complete component customization. You can create gesture-supported items with not only images but any component you want.
175
-
176
- #### List Components
177
-
178
- Support for any list component like `ScrollView`, `FlatList`, `FlashList` through the `ListComponent` prop.
179
- The `listProps` provides **type inference based on the selected list component**, ensuring accurate autocompletion and type safety in your IDE.
180
-
181
- ```tsx
182
- import { FlashList } from '@shopify/flash-list';
183
-
184
- function App() {
185
- return (
186
- <GestureViewer
187
- data={images}
188
- ListComponent={FlashList}
189
- listProps={{
190
- // ✅ FlashList props autocompletion
191
- }}
192
- />
193
- );
194
- }
195
- ```
196
-
197
- #### Content Components
198
-
199
- You can inject various types of content components like `expo-image`, `FastImage`, etc., through the `renderItem` prop to use gestures.
200
-
201
- ```tsx
202
- import { GestureViewer } from 'react-native-gesture-image-viewer';
203
- import { Image } from 'expo-image';
204
-
205
- function App() {
206
- const renderImage = useCallback((imageUrl: string) => {
207
- return <Image source={{ uri: imageUrl }} style={{ width: '100%', height: '100%' }} contentFit="contain" />;
208
- }, []);
209
-
210
- return (
211
- <GestureViewer
212
- data={images}
213
- renderItem={renderImage}
214
- />
215
- );
216
- }
217
- ```
218
-
219
- ### useGestureViewerController
220
-
221
- You can programmatically control the `GestureViewer` using the `useGestureViewerController` hook.
222
-
223
- ```tsx
224
- import { GestureViewer, useGestureViewerController } from 'react-native-gesture-image-viewer';
225
-
226
- function App() {
227
- const {
228
- goToIndex,
229
- goToPrevious,
230
- goToNext,
231
- currentIndex,
232
- totalCount,
233
- zoomIn,
234
- zoomOut,
235
- resetZoom,
236
- rotate
237
- } = useGestureViewerController();
238
-
239
- return (
240
- <View>
241
- <GestureViewer
242
- data={images}
243
- renderItem={renderImage}
244
- />
245
- {/* Zoom Controls */}
246
- <View>
247
- <Feather.Button name="zoom-in" onPress={() => zoomIn(0.25)} />
248
- <Feather.Button name="zoom-out" onPress={() => zoomOut(0.25)} />
249
- <Feather.Button
250
- name="refresh-cw"
251
- onPress={() => {
252
- rotate(0);
253
- resetZoom();
254
- }}
255
- />
256
- <Feather.Button name="rotate-cw" onPress={() => rotate(90)} />
257
- <Feather.Button name="rotate-ccw" onPress={() => rotate(90, false)} />
258
- </View>
259
- {/* Navigation Controls */}
260
73
  <View>
261
- <Feather.Button name="chevron-left" onPress={goToPrevious} />
74
+ <Button title="<" onPress={goToPrevious} />
262
75
  <Button title="Jump to index 2" onPress={() => goToIndex(2)} />
263
- <Feather.Button name="chevron-right" onPress={goToNext} />
76
+ <Button title=">" onPress={goToNext} />
264
77
  <Text>{`${currentIndex + 1} / ${totalCount}`}</Text>
265
78
  </View>
266
- </View>
267
- );
268
- }
269
- ```
270
-
271
- #### API Reference
272
-
273
- | Property | Description | Type | Default |
274
- |:---------|:------------|:-----|:-------:|
275
- | `goToIndex` | Navigate to a specific index. | `(index: number) => void` | - |
276
- | `goToPrevious` | Navigate to the previous item. | `() => void` | - |
277
- | `goToNext` | Navigate to the next item. | `() => void` | - |
278
- | `currentIndex` | The index of the currently displayed item. | `number` | `0` |
279
- | `totalCount` | The total number of items. | `number` | `0` |
280
- | `zoomIn` | Zoom in by the specified multiplier. | `(multiplier?: number) => void` | `0.25` |
281
- | `zoomOut` | Zoom out by the specified multiplier. | `(multiplier?: number) => void` | `0.25` |
282
- | `resetZoom` | Reset zoom to the specified scale. | `(scale?: number) => void` | `1` |
283
- | `rotate` | Rotate by the specified angle. | `(angle?: number, clockwise?: boolean) => void` | `90, true` |
284
-
285
- #### Parameters
286
-
287
- - `zoomIn(multiplier?)`
288
- - **multiplier**: The multiplier for zooming in (range: `0.01 ~ 1`)
289
- - Example: `zoomIn(0.5)` → Zoom in by an additional 50% of the current scale
290
- - `zoomOut(multiplier?)`
291
- - **multiplier**: The multiplier for zooming out (range: `0.01 ~ 1`)
292
- - Example: `zoomOut(0.3)` → Zoom out by dividing the current scale by 1.3
293
- - `resetZoom(scale?)`
294
- - **scale**: The scale value to reset to
295
- - Example: `resetZoom(1.5)` → Reset to 1.5x scale
296
- - `rotate(angle?, clockwise?)`
297
- - **angle**: The angle to rotate (0, 90, 180, 270, 360)
298
- - **clockwise**: The direction to rotate (true: clockwise, false: counter-clockwise)
299
- - Example: `rotate(90)` → Rotate 90 degrees clockwise
300
- - Example: `rotate(90, false)` → Rotate 90 degrees counter-clockwise
301
- - Example: `rotate(0)` → Reset rotation
302
-
303
- ### useGestureViewerEvent
304
-
305
- You can subscribe to specific events from `GestureViewer` using the `useGestureViewerEvent` hook. This allows you to respond to real-time gesture changes like zoom and rotation.
306
-
307
- ```tsx
308
- import { GestureViewer, useGestureViewerEvent } from 'react-native-gesture-image-viewer';
309
-
310
- function App() {
311
- // Listen to zoom changes on the default instance (ID: 'default')
312
- useGestureViewerEvent('zoomChange', (data) => {
313
- console.log(`Zoom changed from ${data.previousScale} to ${data.scale}`);
314
- });
315
-
316
- // Listen to rotation changes on the default instance (ID: 'default')
317
- useGestureViewerEvent('rotationChange', (data) => {
318
- console.log(`Rotation changed from ${data.previousRotation}° to ${data.rotation}°`);
319
- });
320
-
321
- // Listen to events on a specific instance
322
- useGestureViewerEvent('gallery', 'zoomChange', (data) => {
323
- console.log(`Gallery zoom: ${data.scale}x`);
324
- });
325
-
326
- return (
327
- <GestureViewer
328
- data={images}
329
- renderItem={renderImage}
330
- />
331
- );
332
- }
333
- ```
334
-
335
- #### Event Types
336
-
337
- | Event | Description | Data |
338
- |:-----|:-----|:-----|
339
- | `zoomChange` | Fired when the zoom scale changes during pinch gestures | `{ scale: number, previousScale: number }` |
340
- | `rotationChange` | Fired when the rotation angle changes during rotation gestures | `{ rotation: number, previousRotation: number }` |
341
-
342
- ### Style Customization
343
-
344
- You can customize the styling of `GestureViewer`.
345
-
346
- ```tsx
347
- import { GestureViewer } from 'react-native-gesture-image-viewer';
348
-
349
- function App() {
350
- return (
351
- <GestureViewer
352
- animateBackdrop={false}
353
- width={400}
354
- containerStyle={{ /* ... */ }}
355
- backdropStyle={{ backgroundColor: 'rgba(0, 0, 0, 0.90)' }}
356
- renderContainer={(children) => <View style={{ flex: 1 }}>{children}</View>}
357
- />
358
- );
359
- }
360
- ```
361
-
362
- |Property|Description|Default|
363
- |:--:|:-----|:--:|
364
- |`animateBackdrop`|By default, the background `opacity` gradually decreases from 1 to 0 during downward swipe gestures. When `false`, this animation is disabled.|`true`|
365
- |`width`|The width of content items. Default is window width.|`Dimensions width`|
366
- |`containerStyle`|Allows custom styling of the container that wraps the list component.|`flex: 1`|
367
- |`backdropStyle`|Allows customization of the viewer's background style.|`backgroundColor: black; StyleSheet.absoluteFill;`|
368
- |`renderContainer`|Allows custom wrapper component around `<GestureViewer />`.||
369
-
370
- ### Multi-Instance Management
371
-
372
- When you want to efficiently manage multiple `GestureViewer` instances, you can use the `id` prop to use multiple `GestureViewer` components.
373
- `GestureViewer` automatically removes instances from memory when components are unmounted, so no manual memory management is required.
374
-
375
- > The default `id` value is `default`.
376
-
377
- ```tsx
378
- import { GestureViewer, useGestureViewerController } from 'react-native-gesture-image-viewer';
379
-
380
- const firstViewerId = 'firstViewerId';
381
- const secondViewerId = 'secondViewerId';
382
-
383
- function App() {
384
- const { currentIndex: firstCurrentIndex, totalCount: firstTotalCount } = useGestureViewerController(firstViewerId);
385
- const { currentIndex: secondCurrentIndex, totalCount: secondTotalCount } = useGestureViewerController(secondViewerId);
386
-
387
- return (
388
- <View>
389
- <GestureViewer
390
- id={firstViewerId}
391
- data={images}
392
- renderItem={renderImage}
393
- />
394
- <GestureViewer
395
- id={secondViewerId}
396
- data={images}
397
- renderItem={renderImage}
398
- />
399
- </View>
400
- );
401
- }
402
- ```
403
-
404
- ### Additional Props
405
-
406
- #### `onIndexChange`
407
- The `onIndexChange` callback function is called when the `index` value changes.
408
-
409
- ```tsx
410
- import { GestureViewer } from 'react-native-gesture-image-viewer';
411
-
412
- function App() {
413
- const [currentIndex, setCurrentIndex] = useState(0);
414
-
415
- return (
416
- <GestureViewer
417
- onIndexChange={setCurrentIndex}
418
- />
419
- );
420
- }
421
- ```
422
-
423
- #### `useSnap`
424
- Sets the scroll behavior mode. `false` (default) uses paging mode, `true` uses snap mode.
425
-
426
- ```tsx
427
- import { GestureViewer } from 'react-native-gesture-image-viewer';
428
-
429
- function App() {
430
- return (
431
- <GestureViewer
432
- data={data}
433
- renderItem={renderItem}
434
- useSnap={true}
435
- />
436
- );
437
- }
438
- ```
439
-
440
- #### `itemSpacing`
441
- Sets the spacing between items in pixels. Only applied when `useSnap` is `true`.
442
-
443
- ```tsx
444
- import { GestureViewer } from 'react-native-gesture-image-viewer';
445
-
446
- function App() {
447
- return (
448
- <GestureViewer
449
- data={data}
450
- renderItem={renderItem}
451
- useSnap={true}
452
- itemSpacing={16} // 16px spacing between items
453
- />
79
+ </Modal>
454
80
  );
455
81
  }
456
82
  ```
457
83
 
458
- #### `initialIndex` (default: `0`)
459
- Sets the initial index value.
460
-
461
- #### `dismissThreshold` (default: `80`)
462
- `dismissThreshold` controls when `onDismiss` is called by applying a threshold value during vertical gestures.
463
-
464
- #### `resistance` (default: `2`)
465
- `resistance` controls the range of vertical movement by applying resistance during vertical gestures.
466
-
467
- #### `maxZoomScale` (default: `2`)
468
- Controls the maximum zoom scale multiplier.
469
-
470
- ## Performance Optimization Tips
471
-
472
- - Wrap the `renderItem` function with `useCallback` to prevent unnecessary re-renders.
473
- - For large images, we recommend using `FastImage` or `expo-image`.
474
- - For handling many images, we recommend using `FlashList`.
475
- - Test on actual devices (performance may be limited in simulators).
476
-
477
84
  ## Contributing
478
85
 
479
86
  For details on how to contribute to the project and set up the development environment, please refer to the [Contributing Guide](CONTRIBUTING.md).
@@ -7,18 +7,17 @@ class GestureViewerManager {
7
7
  dataLength = 0;
8
8
  width = 0;
9
9
  height = 0;
10
- scale = null;
11
- translateX = null;
12
- translateY = null;
13
10
  maxZoomScale = 2;
14
- listRef = null;
15
11
  enableSwipeGesture = true;
16
12
  enableLoop = false;
17
- listeners = new Set();
13
+ listRef = null;
14
+ scale = null;
18
15
  rotation = null;
16
+ translateX = null;
17
+ translateY = null;
18
+ loopCallback = null;
19
+ listeners = new Set();
19
20
  eventListeners = new Map();
20
- animationTimeout = null;
21
- static LOOP_ANIMATION_DURATION = 300;
22
21
  notifyListeners() {
23
22
  const state = this.getState();
24
23
  this.listeners.forEach(listener => listener(state));
@@ -177,29 +176,30 @@ class GestureViewerManager {
177
176
  if (!this.enableSwipeGesture || !this.listRef) {
178
177
  return;
179
178
  }
180
- this.cancelAnimation();
179
+ this.loopCallback = null;
181
180
  const {
182
181
  scrollTo
183
182
  } = createScrollAction(this.listRef, this.width);
184
183
  if (this.enableLoop && this.dataLength > 1) {
185
184
  if (index < 0) {
186
- scrollTo(0, true);
187
- this.animationTimeout = setTimeout(() => {
185
+ this.loopCallback = () => {
188
186
  scrollTo(this.dataLength, false);
189
187
  this.updateCurrentIndex(this.dataLength - 1);
190
- }, GestureViewerManager.LOOP_ANIMATION_DURATION);
188
+ this.loopCallback = null;
189
+ };
190
+ scrollTo(0, true);
191
191
  return;
192
192
  }
193
193
  if (index >= this.dataLength) {
194
- scrollTo(this.dataLength + 1, true);
195
- this.animationTimeout = setTimeout(() => {
194
+ this.loopCallback = () => {
196
195
  scrollTo(1, false);
197
196
  this.updateCurrentIndex(0);
198
- }, GestureViewerManager.LOOP_ANIMATION_DURATION);
197
+ this.loopCallback = null;
198
+ };
199
+ scrollTo(this.dataLength + 1, true);
199
200
  return;
200
201
  }
201
- const scrollIndex = index + 1;
202
- scrollTo(scrollIndex, true);
202
+ scrollTo(index + 1, true);
203
203
  this.updateCurrentIndex(index);
204
204
  return;
205
205
  }
@@ -209,11 +209,19 @@ class GestureViewerManager {
209
209
  scrollTo(index, true);
210
210
  this.updateCurrentIndex(index);
211
211
  };
212
- cancelAnimation = () => {
213
- if (this.animationTimeout) {
214
- clearTimeout(this.animationTimeout);
215
- this.animationTimeout = null;
212
+ handleMomentumScrollEnd = scrollIndex => {
213
+ if (!this.loopCallback) {
214
+ return false;
216
215
  }
216
+ if (scrollIndex === 0 || scrollIndex === this.dataLength + 1) {
217
+ this.loopCallback();
218
+ return true;
219
+ }
220
+ this.loopCallback = null;
221
+ return true;
222
+ };
223
+ handleScrollBeginDrag = () => {
224
+ this.loopCallback = null;
217
225
  };
218
226
  goToPrevious = () => {
219
227
  this.goToIndex(this.currentIndex - 1);
@@ -222,7 +230,7 @@ class GestureViewerManager {
222
230
  this.goToIndex(this.currentIndex + 1);
223
231
  };
224
232
  cleanUp() {
225
- this.cancelAnimation();
233
+ this.loopCallback = null;
226
234
  this.listeners.clear();
227
235
  this.listRef = null;
228
236
  this.enableSwipeGesture = true;
@@ -1 +1 @@
1
- {"version":3,"names":["withTiming","createBoundsConstraint","createScrollAction","GestureViewerManager","currentIndex","dataLength","width","height","scale","translateX","translateY","maxZoomScale","listRef","enableSwipeGesture","enableLoop","listeners","Set","rotation","eventListeners","Map","animationTimeout","LOOP_ANIMATION_DURATION","notifyListeners","state","getState","forEach","listener","subscribe","add","delete","addEventListener","eventType","callback","has","set","get","size","emitEvent","data","emitZoomChange","previousScale","emitRotationChange","previousRotation","totalCount","setEnableLoop","enabled","setWidth","setHeight","setListRef","ref","setDataLength","length","setEnableSwipeGesture","setCurrentIndex","index","setZoomSharedValues","notifyStateChange","setRotation","rotate","angle","clockwise","MAX_ANGLE","value","nextAngle","Math","floor","zoomIn","multiplier","nextScale","min","zoomOut","max","resetZoom","goToIndex","cancelAnimation","scrollTo","setTimeout","updateCurrentIndex","scrollIndex","clearTimeout","goToPrevious","goToNext","cleanUp","clear","targetIndex"],"sourceRoot":"../../src","sources":["GestureViewerManager.ts"],"mappings":";;AAAA,SAA2BA,UAAU,QAAQ,yBAAyB;AAOtE,SAASC,sBAAsB,EAAEC,kBAAkB,QAAQ,YAAS;AAEpE,MAAMC,oBAAoB,CAAC;EACjBC,YAAY,GAAG,CAAC;EAChBC,UAAU,GAAG,CAAC;EACdC,KAAK,GAAG,CAAC;EACTC,MAAM,GAAG,CAAC;EACVC,KAAK,GAA+B,IAAI;EACxCC,UAAU,GAA+B,IAAI;EAC7CC,UAAU,GAA+B,IAAI;EAC7CC,YAAY,GAAG,CAAC;EAChBC,OAAO,GAAe,IAAI;EAC1BC,kBAAkB,GAAG,IAAI;EACzBC,UAAU,GAAG,KAAK;EAClBC,SAAS,GAAG,IAAIC,GAAG,CAAgD,CAAC;EACpEC,QAAQ,GAA+B,IAAI;EAC3CC,cAAc,GAAG,IAAIC,GAAG,CAAmD,CAAC;EAC5EC,gBAAgB,GAA0B,IAAI;EAEtD,OAAwBC,uBAAuB,GAAG,GAAG;EAE7CC,eAAeA,CAAA,EAAG;IACxB,MAAMC,KAAK,GAAG,IAAI,CAACC,QAAQ,CAAC,CAAC;IAE7B,IAAI,CAACT,SAAS,CAACU,OAAO,CAAEC,QAAQ,IAAKA,QAAQ,CAACH,KAAK,CAAC,CAAC;EACvD;EAEAI,SAASA,CAACD,QAAuD,EAAE;IACjE,IAAI,CAACX,SAAS,CAACa,GAAG,CAACF,QAAQ,CAAC;IAE5B,OAAO,MAAM;MACX,IAAI,CAACX,SAAS,CAACc,MAAM,CAACH,QAAQ,CAAC;IACjC,CAAC;EACH;EAEAI,gBAAgBA,CAAmCC,SAAY,EAAEC,QAAuC,EAAE;IACxG,IAAI,CAAC,IAAI,CAACd,cAAc,CAACe,GAAG,CAACF,SAAS,CAAC,EAAE;MACvC,IAAI,CAACb,cAAc,CAACgB,GAAG,CAACH,SAAS,EAAE,IAAIf,GAAG,CAAC,CAAC,CAAC;IAC/C;IAEA,IAAI,CAACE,cAAc,CAACiB,GAAG,CAACJ,SAAS,CAAC,EAAEH,GAAG,CAACI,QAAQ,CAAC;IAEjD,OAAO,MAAM;MACX,MAAMjB,SAAS,GAAG,IAAI,CAACG,cAAc,CAACiB,GAAG,CAACJ,SAAS,CAAC;MAEpD,IAAIhB,SAAS,EAAE;QACbA,SAAS,CAACc,MAAM,CAACG,QAAQ,CAAC;QAE1B,IAAIjB,SAAS,CAACqB,IAAI,KAAK,CAAC,EAAE;UACxB,IAAI,CAAClB,cAAc,CAACW,MAAM,CAACE,SAAS,CAAC;QACvC;MACF;IACF,CAAC;EACH;EAEQM,SAASA,CAAmCN,SAAY,EAAEO,IAA+B,EAAE;IACjG,MAAMvB,SAAS,GAAG,IAAI,CAACG,cAAc,CAACiB,GAAG,CAACJ,SAAS,CAAC;IAEpD,IAAIhB,SAAS,EAAE;MACbA,SAAS,CAACU,OAAO,CAAEO,QAAQ,IAAKA,QAAQ,CAACM,IAAI,CAAC,CAAC;IACjD;EACF;EAEAC,cAAc,GAAGA,CAAC/B,KAAa,EAAEgC,aAA4B,KAAK;IAChE,IAAI,CAACH,SAAS,CAAC,YAAY,EAAE;MAAE7B,KAAK;MAAEgC;IAAc,CAAC,CAAC;EACxD,CAAC;EAEDC,kBAAkB,GAAGA,CAACxB,QAAgB,EAAEyB,gBAA+B,KAAK;IAC1E,IAAI,CAACL,SAAS,CAAC,gBAAgB,EAAE;MAAEpB,QAAQ;MAAEyB;IAAiB,CAAC,CAAC;EAClE,CAAC;EAEDlB,QAAQA,CAAA,EAAG;IACT,OAAO;MACLpB,YAAY,EAAE,IAAI,CAACA,YAAY;MAC/BuC,UAAU,EAAE,IAAI,CAACtC;IACnB,CAAC;EACH;EAEAuC,aAAaA,CAACC,OAAgB,EAAE;IAC9B,IAAI,CAAC/B,UAAU,GAAG+B,OAAO;EAC3B;EAEAC,QAAQA,CAACxC,KAAa,EAAE;IACtB,IAAI,CAACA,KAAK,GAAGA,KAAK;EACpB;EAEAyC,SAASA,CAACxC,MAAc,EAAE;IACxB,IAAI,CAACA,MAAM,GAAGA,MAAM;EACtB;EAEAyC,UAAUA,CAACC,GAAQ,EAAE;IACnB,IAAI,CAACrC,OAAO,GAAGqC,GAAG;EACpB;EAEAC,aAAaA,CAACC,MAAc,EAAE;IAC5B,IAAI,CAAC9C,UAAU,GAAG8C,MAAM;EAC1B;EAEAC,qBAAqBA,CAACP,OAAgB,EAAE;IACtC,IAAI,CAAChC,kBAAkB,GAAGgC,OAAO;EACnC;EAEAQ,eAAeA,CAACC,KAAa,EAAE;IAC7B,IAAIA,KAAK,KAAK,IAAI,CAAClD,YAAY,EAAE;MAC/B,IAAI,CAACA,YAAY,GAAGkD,KAAK;IAC3B;EACF;EAEAC,mBAAmBA,CACjB/C,KAA0B,EAC1BC,UAA+B,EAC/BC,UAA+B,EAC/BC,YAAoB,EACpB;IACA,IAAI,CAACH,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,UAAU,GAAGA,UAAU;IAC5B,IAAI,CAACC,UAAU,GAAGA,UAAU;IAC5B,IAAI,CAACC,YAAY,GAAGA,YAAY;EAClC;EAEA6C,iBAAiBA,CAAA,EAAG;IAClB,IAAI,CAAClC,eAAe,CAAC,CAAC;EACxB;EAEAmC,WAAWA,CAACxC,QAA6B,EAAE;IACzC,IAAI,CAACA,QAAQ,GAAGA,QAAQ;EAC1B;EAEAyC,MAAM,GAAGA,CAACC,KAA+B,GAAG,EAAE,EAAEC,SAAS,GAAG,IAAI,KAAK;IACnE,MAAMC,SAAS,GAAG,GAAG;IAErB,IACE,CAAC,IAAI,CAAC5C,QAAQ,IACd0C,KAAK,GAAG,CAAC,IACTA,KAAK,GAAGE,SAAS,IAChBF,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC1C,QAAQ,CAAC6C,KAAK,GAAGH,KAAK,KAAK,CAAC,IAAIA,KAAK,KAAK,GAAI,EACnE;MACA;IACF;IAEA,IAAIA,KAAK,KAAK,CAAC,EAAE;MACf,MAAMI,SAAS,GAAGC,IAAI,CAACC,KAAK,CAAC,IAAI,CAAChD,QAAQ,CAAC6C,KAAK,GAAGD,SAAS,CAAC,GAAGA,SAAS;MAEzE,IAAI,CAAC5C,QAAQ,CAAC6C,KAAK,GAAG9D,UAAU,CAAC4D,SAAS,GAAGG,SAAS,GAAGA,SAAS,GAAGF,SAAS,CAAC;MAC/E;IACF;IAEA,IAAIF,KAAK,KAAK,GAAG,EAAE;MACjB,IAAI,CAAC1C,QAAQ,CAAC6C,KAAK,GAAG9D,UAAU,CAAC4D,SAAS,GAAG,IAAI,CAAC3C,QAAQ,CAAC6C,KAAK,GAAGD,SAAS,GAAG,IAAI,CAAC5C,QAAQ,CAAC6C,KAAK,GAAGD,SAAS,CAAC;MAC/G;IACF;IAEA,MAAME,SAAS,GAAGH,SAAS,GAAG,IAAI,CAAC3C,QAAQ,CAAC6C,KAAK,GAAGH,KAAK,GAAG,IAAI,CAAC1C,QAAQ,CAAC6C,KAAK,GAAGH,KAAK;IAEvF,IAAI,CAAC1C,QAAQ,CAAC6C,KAAK,GAAG9D,UAAU,CAAC+D,SAAS,CAAC;EAC7C,CAAC;EAEDG,MAAM,GAAGA,CAACC,UAAU,GAAG,IAAI,KAAK;IAC9B,IAAI,CAAC,IAAI,CAAC3D,KAAK,IAAI,CAAC,IAAI,CAACC,UAAU,IAAI,CAAC,IAAI,CAACC,UAAU,IAAIyD,UAAU,GAAG,IAAI,IAAIA,UAAU,GAAG,CAAC,EAAE;MAC9F;IACF;IAEA,MAAMC,SAAS,GAAGJ,IAAI,CAACK,GAAG,CAAC,IAAI,CAAC7D,KAAK,CAACsD,KAAK,IAAI,CAAC,GAAGK,UAAU,CAAC,EAAE,IAAI,CAACxD,YAAY,CAAC;IAElF,IAAI,CAACH,KAAK,CAACsD,KAAK,GAAG9D,UAAU,CAACoE,SAAS,CAAC;IAExC,MAAM;MAAE3D,UAAU;MAAEC;IAAW,CAAC,GAAGT,sBAAsB,CAAC;MACxDK,KAAK,EAAE,IAAI,CAACA,KAAK;MACjBC,MAAM,EAAE,IAAI,CAACA;IACf,CAAC,CAAC,CAAC;MACDE,UAAU,EAAE,IAAI,CAACA,UAAU,CAACqD,KAAK;MACjCpD,UAAU,EAAE,IAAI,CAACA,UAAU,CAACoD,KAAK;MACjCtD,KAAK,EAAE4D;IACT,CAAC,CAAC;IAEF,IAAI,CAAC3D,UAAU,CAACqD,KAAK,GAAG9D,UAAU,CAACS,UAAU,CAAC;IAC9C,IAAI,CAACC,UAAU,CAACoD,KAAK,GAAG9D,UAAU,CAACU,UAAU,CAAC;EAChD,CAAC;EAED4D,OAAO,GAAGA,CAACH,UAAU,GAAG,IAAI,KAAK;IAC/B,IAAI,CAAC,IAAI,CAAC3D,KAAK,IAAI,CAAC,IAAI,CAACC,UAAU,IAAI,CAAC,IAAI,CAACC,UAAU,IAAIyD,UAAU,GAAG,IAAI,IAAIA,UAAU,GAAG,CAAC,EAAE;MAC9F;IACF;IAEA,MAAMC,SAAS,GAAGJ,IAAI,CAACO,GAAG,CAAC,IAAI,CAAC/D,KAAK,CAACsD,KAAK,IAAI,CAAC,GAAGK,UAAU,CAAC,EAAE,CAAC,CAAC;IAElE,IAAI,CAAC3D,KAAK,CAACsD,KAAK,GAAG9D,UAAU,CAACoE,SAAS,CAAC;IAExC,IAAIA,SAAS,KAAK,CAAC,EAAE;MACnB,IAAI,CAAC3D,UAAU,CAACqD,KAAK,GAAG9D,UAAU,CAAC,CAAC,CAAC;MACrC,IAAI,CAACU,UAAU,CAACoD,KAAK,GAAG9D,UAAU,CAAC,CAAC,CAAC;MACrC;IACF;IAEA,MAAM;MAAES,UAAU;MAAEC;IAAW,CAAC,GAAGT,sBAAsB,CAAC;MACxDK,KAAK,EAAE,IAAI,CAACA,KAAK;MACjBC,MAAM,EAAE,IAAI,CAACA;IACf,CAAC,CAAC,CAAC;MACDE,UAAU,EAAE,IAAI,CAACA,UAAU,CAACqD,KAAK;MACjCpD,UAAU,EAAE,IAAI,CAACA,UAAU,CAACoD,KAAK;MACjCtD,KAAK,EAAE4D;IACT,CAAC,CAAC;IAEF,IAAI,CAAC3D,UAAU,CAACqD,KAAK,GAAG9D,UAAU,CAACS,UAAU,CAAC;IAC9C,IAAI,CAACC,UAAU,CAACoD,KAAK,GAAG9D,UAAU,CAACU,UAAU,CAAC;EAChD,CAAC;EAED8D,SAAS,GAAGA,CAAChE,KAAK,GAAG,CAAC,KAAK;IACzB,IAAI,CAAC,IAAI,CAACA,KAAK,IAAI,CAAC,IAAI,CAACC,UAAU,IAAI,CAAC,IAAI,CAACC,UAAU,IAAIF,KAAK,IAAI,CAAC,IAAIA,KAAK,GAAG,IAAI,CAACG,YAAY,EAAE;MAClG;IACF;IAEA,IAAI,CAACH,KAAK,CAACsD,KAAK,GAAG9D,UAAU,CAACQ,KAAK,CAAC;IACpC,IAAI,CAACC,UAAU,CAACqD,KAAK,GAAG9D,UAAU,CAAC,CAAC,CAAC;IACrC,IAAI,CAACU,UAAU,CAACoD,KAAK,GAAG9D,UAAU,CAAC,CAAC,CAAC;EACvC,CAAC;EAEDyE,SAAS,GAAInB,KAAa,IAAK;IAC7B,IAAI,CAAC,IAAI,CAACzC,kBAAkB,IAAI,CAAC,IAAI,CAACD,OAAO,EAAE;MAC7C;IACF;IAEA,IAAI,CAAC8D,eAAe,CAAC,CAAC;IAEtB,MAAM;MAAEC;IAAS,CAAC,GAAGzE,kBAAkB,CAAC,IAAI,CAACU,OAAO,EAAE,IAAI,CAACN,KAAK,CAAC;IAEjE,IAAI,IAAI,CAACQ,UAAU,IAAI,IAAI,CAACT,UAAU,GAAG,CAAC,EAAE;MAC1C,IAAIiD,KAAK,GAAG,CAAC,EAAE;QACbqB,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC;QAEjB,IAAI,CAACvD,gBAAgB,GAAGwD,UAAU,CAAC,MAAM;UACvCD,QAAQ,CAAC,IAAI,CAACtE,UAAU,EAAE,KAAK,CAAC;UAChC,IAAI,CAACwE,kBAAkB,CAAC,IAAI,CAACxE,UAAU,GAAG,CAAC,CAAC;QAC9C,CAAC,EAAEF,oBAAoB,CAACkB,uBAAuB,CAAC;QAChD;MACF;MAEA,IAAIiC,KAAK,IAAI,IAAI,CAACjD,UAAU,EAAE;QAC5BsE,QAAQ,CAAC,IAAI,CAACtE,UAAU,GAAG,CAAC,EAAE,IAAI,CAAC;QAEnC,IAAI,CAACe,gBAAgB,GAAGwD,UAAU,CAAC,MAAM;UACvCD,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC;UAClB,IAAI,CAACE,kBAAkB,CAAC,CAAC,CAAC;QAC5B,CAAC,EAAE1E,oBAAoB,CAACkB,uBAAuB,CAAC;QAChD;MACF;MAEA,MAAMyD,WAAW,GAAGxB,KAAK,GAAG,CAAC;MAE7BqB,QAAQ,CAACG,WAAW,EAAE,IAAI,CAAC;MAC3B,IAAI,CAACD,kBAAkB,CAACvB,KAAK,CAAC;MAE9B;IACF;IAEA,IAAIA,KAAK,GAAG,CAAC,IAAIA,KAAK,IAAI,IAAI,CAACjD,UAAU,EAAE;MACzC;IACF;IAEAsE,QAAQ,CAACrB,KAAK,EAAE,IAAI,CAAC;IACrB,IAAI,CAACuB,kBAAkB,CAACvB,KAAK,CAAC;EAChC,CAAC;EAEDoB,eAAe,GAAGA,CAAA,KAAM;IACtB,IAAI,IAAI,CAACtD,gBAAgB,EAAE;MACzB2D,YAAY,CAAC,IAAI,CAAC3D,gBAAgB,CAAC;MACnC,IAAI,CAACA,gBAAgB,GAAG,IAAI;IAC9B;EACF,CAAC;EAED4D,YAAY,GAAGA,CAAA,KAAM;IACnB,IAAI,CAACP,SAAS,CAAC,IAAI,CAACrE,YAAY,GAAG,CAAC,CAAC;EACvC,CAAC;EAED6E,QAAQ,GAAGA,CAAA,KAAM;IACf,IAAI,CAACR,SAAS,CAAC,IAAI,CAACrE,YAAY,GAAG,CAAC,CAAC;EACvC,CAAC;EAED8E,OAAOA,CAAA,EAAG;IACR,IAAI,CAACR,eAAe,CAAC,CAAC;IACtB,IAAI,CAAC3D,SAAS,CAACoE,KAAK,CAAC,CAAC;IACtB,IAAI,CAACvE,OAAO,GAAG,IAAI;IACnB,IAAI,CAACC,kBAAkB,GAAG,IAAI;IAC9B,IAAI,CAACT,YAAY,GAAG,CAAC;IACrB,IAAI,CAACC,UAAU,GAAG,CAAC;IACnB,IAAI,CAACM,YAAY,GAAG,CAAC;IACrB,IAAI,CAACH,KAAK,GAAG,IAAI;IACjB,IAAI,CAACC,UAAU,GAAG,IAAI;IACtB,IAAI,CAACC,UAAU,GAAG,IAAI;IACtB,IAAI,CAACO,QAAQ,GAAG,IAAI;IACpB,IAAI,CAACC,cAAc,CAACiE,KAAK,CAAC,CAAC;EAC7B;EAEQN,kBAAkB,GAAIO,WAAmB,IAAK;IACpD,IAAI,CAAChF,YAAY,GAAGgF,WAAW;IAC/B,IAAI,CAAC9D,eAAe,CAAC,CAAC;EACxB,CAAC;AACH;AAEA,eAAenB,oBAAoB","ignoreList":[]}
1
+ {"version":3,"names":["withTiming","createBoundsConstraint","createScrollAction","GestureViewerManager","currentIndex","dataLength","width","height","maxZoomScale","enableSwipeGesture","enableLoop","listRef","scale","rotation","translateX","translateY","loopCallback","listeners","Set","eventListeners","Map","notifyListeners","state","getState","forEach","listener","subscribe","add","delete","addEventListener","eventType","callback","has","set","get","size","emitEvent","data","emitZoomChange","previousScale","emitRotationChange","previousRotation","totalCount","setEnableLoop","enabled","setWidth","setHeight","setListRef","ref","setDataLength","length","setEnableSwipeGesture","setCurrentIndex","index","setZoomSharedValues","notifyStateChange","setRotation","rotate","angle","clockwise","MAX_ANGLE","value","nextAngle","Math","floor","zoomIn","multiplier","nextScale","min","zoomOut","max","resetZoom","goToIndex","scrollTo","updateCurrentIndex","handleMomentumScrollEnd","scrollIndex","handleScrollBeginDrag","goToPrevious","goToNext","cleanUp","clear","targetIndex"],"sourceRoot":"../../src","sources":["GestureViewerManager.ts"],"mappings":"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","ignoreList":[]}
@@ -146,6 +146,10 @@ export const useGestureViewer = ({
146
146
  }
147
147
  const contentOffset = event.nativeEvent.contentOffset;
148
148
  const scrollIndex = Math.round(contentOffset.x / (width + itemSpacing));
149
+ const isLoopHandled = manager?.handleMomentumScrollEnd(scrollIndex);
150
+ if (isLoopHandled) {
151
+ return;
152
+ }
149
153
  const {
150
154
  realIndex,
151
155
  needsJump,
@@ -335,7 +339,7 @@ export const useGestureViewer = ({
335
339
  };
336
340
  }, [animateBackdrop]);
337
341
  const onScrollBeginDrag = useCallback(() => {
338
- manager?.cancelAnimation();
342
+ manager?.handleScrollBeginDrag();
339
343
  }, [manager]);
340
344
  return {
341
345
  currentIndex,
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useEffect","useMemo","useRef","useState","InteractionManager","useWindowDimensions","Gesture","Easing","interpolate","runOnJS","useAnimatedReaction","useAnimatedStyle","useSharedValue","withSpring","withTiming","registry","createBoundsConstraint","createScrollAction","getLoopAdjustedIndex","useGestureViewer","data","initialIndex","onIndexChange","onDismiss","width","customWidth","dismissThreshold","resistance","animateBackdrop","enableDismissGesture","enableSwipeGesture","enableZoomGesture","enableDoubleTapGesture","enableZoomPanGesture","enableLoop","maxZoomScale","itemSpacing","useSnap","id","screenWidth","height","screenHeight","isZoomed","setIsZoomed","isRotated","setIsRotated","currentIndex","setCurrentIndex","manager","setManager","unsubscribeRef","initialTranslateY","initialTranslateX","startScale","translateY","translateX","scale","backdropOpacity","rotation","listRef","dataLength","length","adjustedInitialIndex","constrainTranslation","scrollTo","index","animated","scrollAction","current","emitZoomChange","currentScale","prevScale","emitRotationChange","currentRotation","prevRotation","value","previousScale","previousRotation","handleManagerChange","getState","subscribe","state","unsubscribeFromRegistry","subscribeToManager","setDataLength","setEnableSwipeGesture","setWidth","setHeight","setZoomSharedValues","setRotation","setEnableLoop","notifyStateChange","setListRef","runAfterInteractions","cancel","onMomentumScrollEnd","event","contentOffset","nativeEvent","scrollIndex","Math","round","x","realIndex","needsJump","jumpToIndex","undefined","dismissGesture","Pan","minDistance","averageTouches","activeCursor","activeOffsetY","failOffsetX","enabled","onUpdate","translationY","onEnd","damping","stiffness","zoomPinchGesture","Pinch","onBegin","newScale","deltaScale","centerX","focalX","centerY","focalY","newTranslateX","newTranslateY","constrainedTranslateX","constrainedTranslateY","duration","easing","bezier","zoomPanGesture","translationX","doubleTapGesture","Tap","numberOfTaps","nextScale","y","zoomGesture","Race","Exclusive","animatedStyle","transform","rotate","backdropStyle","opacity","onScrollBeginDrag","cancelAnimation"],"sourceRoot":"../../src","sources":["useGestureViewer.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","createBoundsConstraint","createScrollAction","getLoopAdjustedIndex","useGestureViewer","data","initialIndex","onIndexChange","onDismiss","width","customWidth","dismissThreshold","resistance","animateBackdrop","enableDismissGesture","enableSwipeGesture","enableZoomGesture","enableDoubleTapGesture","enableZoomPanGesture","enableLoop","maxZoomScale","itemSpacing","useSnap","id","screenWidth","height","screenHeight","isZoomed","setIsZoomed","isRotated","setIsRotated","currentIndex","setCurrentIndex","manager","setManager","unsubscribeRef","initialTranslateY","initialTranslateX","startScale","translateY","translateX","scale","backdropOpacity","rotation","listRef","dataLength","length","adjustedInitialIndex","constrainTranslation","scrollTo","index","animated","scrollAction","current","emitZoomChange","currentScale","prevScale","emitRotationChange","currentRotation","prevRotation","value","previousScale","previousRotation","handleManagerChange","getState","subscribe","state","unsubscribeFromRegistry","subscribeToManager","setDataLength","setEnableSwipeGesture","setWidth","setHeight","setZoomSharedValues","setRotation","setEnableLoop","notifyStateChange","setListRef","runAfterInteractions","cancel","onMomentumScrollEnd","event","contentOffset","nativeEvent","scrollIndex","Math","round","x","isLoopHandled","handleMomentumScrollEnd","realIndex","needsJump","jumpToIndex","undefined","dismissGesture","Pan","minDistance","averageTouches","activeCursor","activeOffsetY","failOffsetX","enabled","onUpdate","translationY","onEnd","damping","stiffness","zoomPinchGesture","Pinch","onBegin","newScale","deltaScale","centerX","focalX","centerY","focalY","newTranslateX","newTranslateY","constrainedTranslateX","constrainedTranslateY","duration","easing","bezier","zoomPanGesture","translationX","doubleTapGesture","Tap","numberOfTaps","nextScale","y","zoomGesture","Race","Exclusive","animatedStyle","transform","rotate","backdropStyle","opacity","onScrollBeginDrag","handleScrollBeginDrag"],"sourceRoot":"../../src","sources":["useGestureViewer.ts"],"mappings":"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","ignoreList":[]}
@@ -5,18 +5,17 @@ declare class GestureViewerManager {
5
5
  private dataLength;
6
6
  private width;
7
7
  private height;
8
- private scale;
9
- private translateX;
10
- private translateY;
11
8
  private maxZoomScale;
12
- private listRef;
13
9
  private enableSwipeGesture;
14
10
  private enableLoop;
15
- private listeners;
11
+ private listRef;
12
+ private scale;
16
13
  private rotation;
14
+ private translateX;
15
+ private translateY;
16
+ private loopCallback;
17
+ private listeners;
17
18
  private eventListeners;
18
- private animationTimeout;
19
- private static readonly LOOP_ANIMATION_DURATION;
20
19
  private notifyListeners;
21
20
  subscribe(listener: (state: GestureViewerControllerState) => void): () => void;
22
21
  addEventListener<T extends GestureViewerEventType>(eventType: T, callback: GestureViewerEventCallback<T>): () => void;
@@ -42,7 +41,8 @@ declare class GestureViewerManager {
42
41
  zoomOut: (multiplier?: number) => void;
43
42
  resetZoom: (scale?: number) => void;
44
43
  goToIndex: (index: number) => void;
45
- cancelAnimation: () => void;
44
+ handleMomentumScrollEnd: (scrollIndex: number) => boolean;
45
+ handleScrollBeginDrag: () => void;
46
46
  goToPrevious: () => void;
47
47
  goToNext: () => void;
48
48
  cleanUp(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"GestureViewerManager.d.ts","sourceRoot":"","sources":["../../../src/GestureViewerManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAc,MAAM,yBAAyB,CAAC;AACvE,OAAO,KAAK,EACV,4BAA4B,EAC5B,0BAA0B,EAE1B,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAGjB,cAAM,oBAAoB;IACxB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,kBAAkB,CAAQ;IAClC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAA4D;IAC7E,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,cAAc,CAA+D;IACrF,OAAO,CAAC,gBAAgB,CAA+B;IAEvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAO;IAEtD,OAAO,CAAC,eAAe;IAMvB,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,4BAA4B,KAAK,IAAI;IAQjE,gBAAgB,CAAC,CAAC,SAAS,sBAAsB,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,0BAA0B,CAAC,CAAC,CAAC;IAoBxG,OAAO,CAAC,SAAS;IAQjB,cAAc,GAAI,OAAO,MAAM,EAAE,eAAe,MAAM,GAAG,IAAI,UAE3D;IAEF,kBAAkB,GAAI,UAAU,MAAM,EAAE,kBAAkB,MAAM,GAAG,IAAI,UAErE;IAEF,QAAQ;;;;IAOR,aAAa,CAAC,OAAO,EAAE,OAAO;IAI9B,QAAQ,CAAC,KAAK,EAAE,MAAM;IAItB,SAAS,CAAC,MAAM,EAAE,MAAM;IAIxB,UAAU,CAAC,GAAG,EAAE,GAAG;IAInB,aAAa,CAAC,MAAM,EAAE,MAAM;IAI5B,qBAAqB,CAAC,OAAO,EAAE,OAAO;IAItC,eAAe,CAAC,KAAK,EAAE,MAAM;IAM7B,mBAAmB,CACjB,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,EAC1B,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,EAC/B,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,EAC/B,YAAY,EAAE,MAAM;IAQtB,iBAAiB;IAIjB,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC;IAIzC,MAAM,GAAI,QAAO,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAQ,EAAE,mBAAgB,UA2B9D;IAEF,MAAM,GAAI,mBAAiB,UAoBzB;IAEF,OAAO,GAAI,mBAAiB,UA0B1B;IAEF,SAAS,GAAI,cAAS,UAQpB;IAEF,SAAS,GAAI,OAAO,MAAM,UA4CxB;IAEF,eAAe,aAKb;IAEF,YAAY,aAEV;IAEF,QAAQ,aAEN;IAEF,OAAO;IAeP,OAAO,CAAC,kBAAkB,CAGxB;CACH;AAED,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"GestureViewerManager.d.ts","sourceRoot":"","sources":["../../../src/GestureViewerManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAc,MAAM,yBAAyB,CAAC;AACvE,OAAO,KAAK,EACV,4BAA4B,EAC5B,0BAA0B,EAE1B,sBAAsB,EACvB,MAAM,SAAS,CAAC;AAGjB,cAAM,oBAAoB;IACxB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,kBAAkB,CAAQ;IAClC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAoB;IAEnC,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,UAAU,CAAoC;IAEtD,OAAO,CAAC,YAAY,CAA6B;IAEjD,OAAO,CAAC,SAAS,CAA4D;IAC7E,OAAO,CAAC,cAAc,CAA+D;IAErF,OAAO,CAAC,eAAe;IAMvB,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,4BAA4B,KAAK,IAAI;IAQjE,gBAAgB,CAAC,CAAC,SAAS,sBAAsB,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,0BAA0B,CAAC,CAAC,CAAC;IAoBxG,OAAO,CAAC,SAAS;IAQjB,cAAc,GAAI,OAAO,MAAM,EAAE,eAAe,MAAM,GAAG,IAAI,UAE3D;IAEF,kBAAkB,GAAI,UAAU,MAAM,EAAE,kBAAkB,MAAM,GAAG,IAAI,UAErE;IAEF,QAAQ;;;;IAOR,aAAa,CAAC,OAAO,EAAE,OAAO;IAI9B,QAAQ,CAAC,KAAK,EAAE,MAAM;IAItB,SAAS,CAAC,MAAM,EAAE,MAAM;IAIxB,UAAU,CAAC,GAAG,EAAE,GAAG;IAInB,aAAa,CAAC,MAAM,EAAE,MAAM;IAI5B,qBAAqB,CAAC,OAAO,EAAE,OAAO;IAItC,eAAe,CAAC,KAAK,EAAE,MAAM;IAM7B,mBAAmB,CACjB,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,EAC1B,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,EAC/B,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,EAC/B,YAAY,EAAE,MAAM;IAQtB,iBAAiB;IAIjB,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC;IAIzC,MAAM,GAAI,QAAO,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAQ,EAAE,mBAAgB,UA2B9D;IAEF,MAAM,GAAI,mBAAiB,UAoBzB;IAEF,OAAO,GAAI,mBAAiB,UA0B1B;IAEF,SAAS,GAAI,cAAS,UAQpB;IAEF,SAAS,GAAI,OAAO,MAAM,UA4CxB;IAEF,uBAAuB,GAAI,aAAa,MAAM,aAY5C;IAEF,qBAAqB,aAEnB;IAEF,YAAY,aAEV;IAEF,QAAQ,aAEN;IAEF,OAAO;IAeP,OAAO,CAAC,kBAAkB,CAGxB;CACH;AAED,eAAe,oBAAoB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useGestureViewer.d.ts","sourceRoot":"","sources":["../../../src/useGestureViewer.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EAE1B,MAAM,cAAc,CAAC;AActB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAGlD,KAAK,qBAAqB,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CACxC,kBAAkB,CAAC,CAAC,CAAC,EACrB,YAAY,GAAG,iBAAiB,GAAG,eAAe,GAAG,WAAW,GAAG,gBAAgB,GAAG,eAAe,CACtG,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,CAAC,GAAG,GAAG,EAAE,qRAqBvC,qBAAqB,CAAC,CAAC,CAAC;;;;;;;;;iCA6Kf,oBAAoB,CAAC,iBAAiB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyRlD,CAAC"}
1
+ {"version":3,"file":"useGestureViewer.d.ts","sourceRoot":"","sources":["../../../src/useGestureViewer.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EAE1B,MAAM,cAAc,CAAC;AActB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAGlD,KAAK,qBAAqB,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CACxC,kBAAkB,CAAC,CAAC,CAAC,EACrB,YAAY,GAAG,iBAAiB,GAAG,eAAe,GAAG,WAAW,GAAG,gBAAgB,GAAG,eAAe,CACtG,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,CAAC,GAAG,GAAG,EAAE,qRAqBvC,qBAAqB,CAAC,CAAC,CAAC;;;;;;;;;iCA6Kf,oBAAoB,CAAC,iBAAiB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+RlD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-gesture-image-viewer",
3
- "version": "1.6.0",
3
+ "version": "1.6.2",
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",
@@ -74,7 +74,7 @@
74
74
  "bugs": {
75
75
  "url": "https://github.com/saseungmin/react-native-gesture-image-viewer/issues"
76
76
  },
77
- "homepage": "https://github.com/saseungmin/react-native-gesture-image-viewer#readme",
77
+ "homepage": "https://react-native-gesture-image-viewer.pages.dev",
78
78
  "publishConfig": {
79
79
  "registry": "https://registry.npmjs.org/"
80
80
  },
@@ -106,7 +106,8 @@
106
106
  },
107
107
  "workspaces": [
108
108
  ".",
109
- "example"
109
+ "example",
110
+ "docs"
110
111
  ],
111
112
  "packageManager": "yarn@4.9.2",
112
113
  "jest": {
@@ -12,19 +12,20 @@ class GestureViewerManager {
12
12
  private dataLength = 0;
13
13
  private width = 0;
14
14
  private height = 0;
15
- private scale: SharedValue<number> | null = null;
16
- private translateX: SharedValue<number> | null = null;
17
- private translateY: SharedValue<number> | null = null;
18
15
  private maxZoomScale = 2;
19
- private listRef: any | null = null;
20
16
  private enableSwipeGesture = true;
21
17
  private enableLoop = false;
22
- private listeners = new Set<(state: GestureViewerControllerState) => void>();
18
+ private listRef: any | null = null;
19
+
20
+ private scale: SharedValue<number> | null = null;
23
21
  private rotation: SharedValue<number> | null = null;
24
- private eventListeners = new Map<GestureViewerEventType, Set<(data: any) => void>>();
25
- private animationTimeout: NodeJS.Timeout | null = null;
22
+ private translateX: SharedValue<number> | null = null;
23
+ private translateY: SharedValue<number> | null = null;
26
24
 
27
- private static readonly LOOP_ANIMATION_DURATION = 300;
25
+ private loopCallback: (() => void) | null = null;
26
+
27
+ private listeners = new Set<(state: GestureViewerControllerState) => void>();
28
+ private eventListeners = new Map<GestureViewerEventType, Set<(data: any) => void>>();
28
29
 
29
30
  private notifyListeners() {
30
31
  const state = this.getState();
@@ -227,34 +228,34 @@ class GestureViewerManager {
227
228
  return;
228
229
  }
229
230
 
230
- this.cancelAnimation();
231
+ this.loopCallback = null;
231
232
 
232
233
  const { scrollTo } = createScrollAction(this.listRef, this.width);
233
234
 
234
235
  if (this.enableLoop && this.dataLength > 1) {
235
236
  if (index < 0) {
236
- scrollTo(0, true);
237
-
238
- this.animationTimeout = setTimeout(() => {
237
+ this.loopCallback = () => {
239
238
  scrollTo(this.dataLength, false);
240
239
  this.updateCurrentIndex(this.dataLength - 1);
241
- }, GestureViewerManager.LOOP_ANIMATION_DURATION);
240
+ this.loopCallback = null;
241
+ };
242
+
243
+ scrollTo(0, true);
242
244
  return;
243
245
  }
244
246
 
245
247
  if (index >= this.dataLength) {
246
- scrollTo(this.dataLength + 1, true);
247
-
248
- this.animationTimeout = setTimeout(() => {
248
+ this.loopCallback = () => {
249
249
  scrollTo(1, false);
250
250
  this.updateCurrentIndex(0);
251
- }, GestureViewerManager.LOOP_ANIMATION_DURATION);
251
+ this.loopCallback = null;
252
+ };
253
+
254
+ scrollTo(this.dataLength + 1, true);
252
255
  return;
253
256
  }
254
257
 
255
- const scrollIndex = index + 1;
256
-
257
- scrollTo(scrollIndex, true);
258
+ scrollTo(index + 1, true);
258
259
  this.updateCurrentIndex(index);
259
260
 
260
261
  return;
@@ -268,11 +269,22 @@ class GestureViewerManager {
268
269
  this.updateCurrentIndex(index);
269
270
  };
270
271
 
271
- cancelAnimation = () => {
272
- if (this.animationTimeout) {
273
- clearTimeout(this.animationTimeout);
274
- this.animationTimeout = null;
272
+ handleMomentumScrollEnd = (scrollIndex: number) => {
273
+ if (!this.loopCallback) {
274
+ return false;
275
+ }
276
+
277
+ if (scrollIndex === 0 || scrollIndex === this.dataLength + 1) {
278
+ this.loopCallback();
279
+ return true;
275
280
  }
281
+
282
+ this.loopCallback = null;
283
+ return true;
284
+ };
285
+
286
+ handleScrollBeginDrag = () => {
287
+ this.loopCallback = null;
276
288
  };
277
289
 
278
290
  goToPrevious = () => {
@@ -284,7 +296,7 @@ class GestureViewerManager {
284
296
  };
285
297
 
286
298
  cleanUp() {
287
- this.cancelAnimation();
299
+ this.loopCallback = null;
288
300
  this.listeners.clear();
289
301
  this.listRef = null;
290
302
  this.enableSwipeGesture = true;
@@ -228,6 +228,12 @@ export const useGestureViewer = <T = any>({
228
228
  const contentOffset = event.nativeEvent.contentOffset;
229
229
  const scrollIndex = Math.round(contentOffset.x / (width + itemSpacing));
230
230
 
231
+ const isLoopHandled = manager?.handleMomentumScrollEnd(scrollIndex);
232
+
233
+ if (isLoopHandled) {
234
+ return;
235
+ }
236
+
231
237
  const { realIndex, needsJump, jumpToIndex } = getLoopAdjustedIndex(scrollIndex, dataLength, enableLoop);
232
238
 
233
239
  if (needsJump && jumpToIndex !== undefined) {
@@ -482,7 +488,7 @@ export const useGestureViewer = <T = any>({
482
488
  }, [animateBackdrop]);
483
489
 
484
490
  const onScrollBeginDrag = useCallback(() => {
485
- manager?.cancelAnimation();
491
+ manager?.handleScrollBeginDrag();
486
492
  }, [manager]);
487
493
 
488
494
  return {