Releases: saseungmin/react-native-gesture-image-viewer
react-native-gesture-image-viewer@2.0.0-beta.4
Patch Changes
-
b81f5a3: feat!: add
useGestureViewerState
hook and refactor controller- Add
useGestureViewerState
hook to accesscurrentIndex
andtotalCount
- Refactor
useGestureViewerController
to return control methods only - Rename
GestureViewerControllerState
toGestureViewerState
- Update exports and type definitions
BREAKING CHANGE:
useGestureViewerController
no longer returnscurrentIndex
andtotalCount
. UseuseGestureViewerState
instead.Example:
import { GestureViewer, - GestureViewerControllerState, + GestureViewerState useGestureViewerController, useGestureViewerEvent, + useGestureViewerState, } from 'react-native-gesture-image-viewer'; const { goToIndex, goToPrevious, goToNext, zoomIn, zoomOut, resetZoom, rotate, - currentIndex, totalCount } = useGestureViewerController(); + const { currentIndex, totalCount } = useGestureViewerState();
- Add
-
fae40a9: refactor!: remove
onIndexChange
prop in favor of state hook- Remove
onIndexChange
prop fromGestureViewerProps
- For current index: use
useGestureViewerState
hook - For index changes: use
useGestureViewerState
withuseEffect
- Update component implementation to remove prop handling
Example:
// Before <GestureViewer onIndexChange={(index) => console.log(index)} />; // After const { currentIndex } = useGestureViewerState(); useEffect(() => { console.log(currentIndex); }, [currentIndex]);
❗ BREAKING CHANGE: onIndexChange prop removed. Use useGestureViewerState for current index and useEffect for change detection.
- Remove
-
37087da: refactor!: improve props naming for better developer experience
- Replace ambiguous gesture props with clearer names
- Group dismiss-related options into single object
- Standardize
enable\*
pattern for gesture controls
❗ BREAKING CHANGE:
enableDismissGesture
→dismiss.enabled
dismissThreshold
→dismiss.threshold
resistance
→dismiss.resistance
animateBackdrop
→dismiss.fadeBackdrop
useSnap
→enableSnapMode
enableZoomPanGesture
→enablePanWhenZoomed
enableZoomGesture
→enablePinchZoom
enableSwipeGesture
→enableHorizontalSwipe
Example:
<GestureViewer dismiss={{ enabled: true, threshold: 80, resistance: 2, fadeBackdrop: true, }} enableSnapMode enablePanWhenZoomed enablePinchZoom enableHorizontalSwipe />
-
816ab00: docs: complete v2 documentation setup
- Add v2 guide pages and API documentation
- Create v2 home pages (en/ko) with feature highlights
- Add migration guide from 1.x to 2.x with breaking changes
- Add cross-version compatibility warnings for Reanimated v3/v4
- Complete API documentation translation (props, hooks, events)
- Set up v2 as default version in rspress config
react-native-gesture-image-viewer@1.6.5
Patch Changes
-
a483743: fix(useGestureViewerController): Prevent tearing and optimize rendering
- Refactors
useGestureViewerController
to useuseSyncExternalStore
. - This change resolves a potential tearing bug that can occur in concurrent mode by ensuring the hook's state is always synchronized with the external store.
- Optimized the update logic to prevent unnecessary re-renders when currentIndex or totalCount remain unchanged, improving performance.
- Refactors
react-native-gesture-image-viewer@2.0.0-beta.3
Patch Changes
-
91320d6: fix(useGestureViewerController): Prevent tearing and optimize rendering
- Refactors
useGestureViewerController
to useuseSyncExternalStore
. - This change resolves a potential tearing bug that can occur in concurrent mode by ensuring the hook's state is always synchronized with the external store.
- Optimized the update logic to prevent unnecessary re-renders when currentIndex or totalCount remain unchanged, improving performance.
- Refactors
react-native-gesture-image-viewer@1.6.4
Patch Changes
-
6639939: fix: remove key prop from list item children for better performance
- Remove key prop from View children when using FlatList/FlashList
- Keep key prop only for ScrollView children
- Improves FlashList performance by allowing proper item reuse
- Follows FlashList official performance guidelines
Refs: https://shopify.github.io/flash-list/docs/fundamentals/performance#remove-key-prop
react-native-gesture-image-viewer@2.0.0-beta.2
Patch Changes
-
929579f: fix: remove key prop from list item children for better performance
- Remove key prop from View children when using FlatList/FlashList
- Keep key prop only for ScrollView children
- Improves FlashList performance by allowing proper item reuse
- Follows FlashList official performance guidelines
Refs: https://shopify.github.io/flash-list/docs/fundamentals/performance#remove-key-prop
react-native-gesture-image-viewer@1.6.3
Patch Changes
-
a57ddbd: fix: prevent multiple
onIndexChange
calls during initialization- Remove redundant currentIndex state to avoid duplicate callbacks
- Use manager subscription as single source of truth for index changes
- Implement ref pattern for
onIndexChange
to prevent stale closures - Ensure
onIndexChange
only fires on actual user interactions, not internal state changes
Now
onIndexChange
correctly fires only once during initialization.Fixes #67
react-native-gesture-image-viewer@2.0.0-beta.1
Patch Changes
-
e5f9744: fix: prevent multiple
onIndexChange
calls during initialization- Remove redundant currentIndex state to avoid duplicate callbacks
- Use manager subscription as single source of truth for index changes
- Implement ref pattern for
onIndexChange
to prevent stale closures - Ensure
onIndexChange
only fires on actual user interactions, not internal state changes
Now
onIndexChange
correctly fires only once during initialization.Fixes #67
react-native-gesture-image-viewer@2.0.0-beta.0
Major Changes
-
db35df7: feat: upgraded react-native-reanimated v4
- Upgraded react-native-reanimated to version 4.x.
- Added react-native-worklets as a dependency.
- Enhanced
withSpring
animation responsiveness and behavior. - https://docs.swmansion.com/react-native-reanimated/docs/guides/migration-from-3.x
Reanimated Configure Migration Guide:
npm install react-native-worklets
// babel.config.js module.exports = (api) => { api.cache(true); return getConfig( { presets: ['babel-preset-expo'], plugins: [ // for web '@babel/plugin-proposal-export-namespace-from', // react-native-worklets/plugin has to be listed last. - 'react-native-reanimated/plugin', + 'react-native-worklets/plugin', ], }, { root, pkg }, ); };
// metro.config.js const path = require('path'); const { getDefaultConfig } = require('@expo/metro-config'); const { withMetroConfig } = require('react-native-monorepo-config'); - const { wrapWithReanimatedMetroConfig } = require('react-native-reanimated/metro-config'); const root = path.resolve(__dirname, '..'); /** * Metro configuration * https://facebook.github.io/metro/docs/configuration * * @type {import('metro-config').MetroConfig} */ const config = withMetroConfig(getDefaultConfig(__dirname), { root, dirname: __dirname, }); config.resolver.unstable_enablePackageExports = true; - module.exports = wrapWithReanimatedMetroConfig(config); + module.exports = config
react-native-gesture-image-viewer@1.6.2
Patch Changes
- b8ec554: docs: migrate README content to docs site and update homepage
- Move detailed documentation from README to dedicated docs site
- Update package.json homepage field to point to new docs URL
- Full documentation is available at: https://react-native-gesture-image-viewer.pages.dev
react-native-gesture-image-viewer@1.6.1
Patch Changes
-
9e5a6bd: refactor(loop): replace timeout with event-driven loop animation
- Remove hardcoded 300ms timeout dependency
- Use onMomentumScrollEnd for accurate animation completion detection
- Implement callback-based approach for better timing control
- Handle user scroll interruption during loop transitions