Skip to content
Merged
Show file tree
Hide file tree
Changes from 114 commits
Commits
Show all changes
121 commits
Select commit Hold shift + click to select a range
4e3e30f
Pan gesture
m-bert Dec 9, 2025
7ac164d
Merge branch 'next' into @mbert/docs-v3
m-bert Dec 10, 2025
203131e
Finish (?) Pan
m-bert Dec 10, 2025
db99336
Tap
m-bert Dec 10, 2025
f01bd66
Long press
m-bert Dec 10, 2025
5490439
Rotation
m-bert Dec 10, 2025
ded8083
Pinch
m-bert Dec 10, 2025
e38591c
Fling
m-bert Dec 10, 2025
f338fa7
Hover
m-bert Dec 10, 2025
11c91a7
Native
m-bert Dec 10, 2025
37d7438
Manual
m-bert Dec 10, 2025
a93970a
Fix path
m-bert Dec 10, 2025
d23e66b
Remove cache from workflow
m-bert Dec 10, 2025
5c0b717
composition
m-bert Dec 11, 2025
f293949
Remove PanHandlerData
m-bert Dec 15, 2025
34a93a5
Use correct HandlerData
m-bert Dec 15, 2025
f4847dc
Merge branch 'next' into @mbert/docs-v3
m-bert Dec 15, 2025
87a1130
Merge branch 'next' into @mbert/docs-v3
m-bert Dec 16, 2025
b96d788
Bye bye API 2
m-bert Dec 16, 2025
cf3f810
Fix hover
m-bert Dec 16, 2025
944d689
Fix old links
m-bert Dec 16, 2025
d2958e0
Another links
m-bert Dec 16, 2025
d8eaaeb
remove useless prop
m-bert Dec 22, 2025
b2a373e
Add warning to requireToFail
m-bert Dec 22, 2025
d3c7893
One composition
m-bert Dec 22, 2025
e96349e
Remove outdated info
m-bert Dec 22, 2025
cd7c0d6
Remove SharedValue notes
m-bert Dec 22, 2025
ca2d46a
rephrase exclusive
m-bert Dec 22, 2025
1811c9c
Other composition updates
m-bert Dec 22, 2025
4fa234f
Change reference to example
m-bert Dec 22, 2025
fb8e2ef
Change reference to example yet again (manual)
m-bert Dec 22, 2025
47da2df
Tapp
m-bert Dec 22, 2025
c8a4a76
Native on web
m-bert Dec 22, 2025
5c3d918
Add missing pan properties
m-bert Dec 22, 2025
a8c6ccc
Simplify pinch example
m-bert Dec 22, 2025
421d247
scaleChange
m-bert Dec 22, 2025
b14eadf
Add pan headers
m-bert Dec 22, 2025
b769862
Rotation gesture changes
m-bert Dec 22, 2025
49b1d3e
Test id correct prop name
m-bert Dec 22, 2025
41f7a4f
Add SharedValue info
m-bert Dec 22, 2025
1fb9b51
Add missing shared value info to long press
m-bert Dec 22, 2025
6d2da5a
Remove secondary headers
m-bert Dec 22, 2025
f90b378
Change order
m-bert Dec 22, 2025
b4cd005
Merge branch 'next' into @mbert/docs-detector
m-bert Dec 23, 2025
5255e4a
Detecor page
m-bert Dec 23, 2025
205c0a8
Gesture detector
m-bert Dec 23, 2025
4c53b94
Change ordering
m-bert Dec 23, 2025
42b04b1
Update links
m-bert Dec 23, 2025
03501dc
Other links
m-bert Dec 23, 2025
e1fae87
Merge branch 'next' into @mbert/docs-detector
m-bert Jan 7, 2026
c7de4c6
Initial events page
m-bert Jan 8, 2026
285fc72
Switch to vis.js
m-bert Jan 8, 2026
c867d7c
Adjust resize
m-bert Jan 8, 2026
ea4b04f
Add theme-common to package.json
m-bert Jan 8, 2026
0f7586f
Rename section
m-bert Jan 8, 2026
1b25b59
Bring back prism
m-bert Jan 8, 2026
eb83d43
Add states table
m-bert Jan 8, 2026
33a85a3
Add CodeWithDetails
m-bert Jan 8, 2026
35d2da7
Do not mention states outside dedicated page
m-bert Jan 8, 2026
e06ad48
Add note about complementary callbacks
m-bert Jan 9, 2026
5f998f4
Add StateManager page
m-bert Jan 9, 2026
59fd8df
Merge branch 'next' into @mbert/docs-detector
m-bert Jan 9, 2026
1c20ea0
Merge branch '@mbert/docs-detector' into @mbert/docs-state-manager
m-bert Jan 9, 2026
764b1d8
Update manual quick guide
m-bert Jan 9, 2026
f6145db
Change number of array elements in example
m-bert Jan 12, 2026
b920df7
Split states
m-bert Jan 12, 2026
1c5ae3d
Update margin in flow chart
m-bert Jan 12, 2026
aa13ec4
Improve CollapsibleCode component
m-bert Jan 12, 2026
e250c68
Use CollapsibleCode
m-bert Jan 12, 2026
1c4e142
Update variable
m-bert Jan 12, 2026
2afec03
Remove old state manager guide
m-bert Jan 12, 2026
b54932a
Fix details component
m-bert Jan 12, 2026
66ddc2b
Remove manual guide
m-bert Jan 12, 2026
404e465
Fix broken link
m-bert Jan 12, 2026
fc3fcd2
Remove CodeWithTypes
m-bert Jan 12, 2026
cc3f815
Move autoworkletization
m-bert Jan 12, 2026
fbfb9fc
Update autoworkletization
m-bert Jan 12, 2026
cc46156
Remove bold
m-bert Jan 12, 2026
68103e4
Update packages/docs-gesture-handler/docs/fundamentals/gesture-detect…
m-bert Jan 26, 2026
e58292d
Update packages/docs-gesture-handler/docs/fundamentals/gesture-detect…
m-bert Jan 26, 2026
ef9235b
Update packages/docs-gesture-handler/docs/fundamentals/gesture-detect…
m-bert Jan 26, 2026
a58babb
Review suggestions #1
m-bert Jan 26, 2026
9939cfd
Review suggestions 2
m-bert Jan 26, 2026
d7e38d4
Improve CollapsibleCode component
m-bert Jan 12, 2026
af2b3bf
Interaction with Reanimated
m-bert Jan 26, 2026
65c4bf5
Add Animated
m-bert Jan 26, 2026
79a2ff3
Merge branch 'next' into @mbert/docs-detector
m-bert Jan 26, 2026
bc735eb
Add use cases
m-bert Jan 26, 2026
d157b24
Move reusing gestures to redbox
m-bert Jan 26, 2026
f70bf74
Update packages/docs-gesture-handler/docs/fundamentals/animated-inter…
m-bert Jan 26, 2026
37e99bf
Update packages/docs-gesture-handler/docs/fundamentals/animated-inter…
m-bert Jan 26, 2026
bf6061a
Update packages/docs-gesture-handler/docs/fundamentals/gesture-detect…
m-bert Jan 26, 2026
72f7eb4
Update packages/docs-gesture-handler/docs/fundamentals/gesture-detect…
m-bert Jan 26, 2026
51be282
Update packages/docs-gesture-handler/docs/fundamentals/gesture-detect…
m-bert Jan 26, 2026
f69643e
Update packages/docs-gesture-handler/docs/fundamentals/gesture-detect…
m-bert Jan 26, 2026
dc19675
Update packages/docs-gesture-handler/docs/fundamentals/reanimated-int…
m-bert Jan 26, 2026
4ec4ebb
Update packages/docs-gesture-handler/docs/fundamentals/gesture-detect…
m-bert Jan 26, 2026
dbaae0e
Turning off reanimated
m-bert Jan 26, 2026
7157558
Merge branch '@mbert/docs-detector' of github.com:software-mansion/re…
m-bert Jan 26, 2026
4f8e6dc
Mention all detectors
m-bert Jan 26, 2026
16eb6cb
Merge branch 'next' into @mbert/docs-detector
m-bert Jan 26, 2026
d8cd247
Merge branch '@mbert/docs-detector' into @mbert/docs-state-manager
m-bert Jan 26, 2026
268a9b1
Update examples
m-bert Jan 26, 2026
d671e4f
Update packages/docs-gesture-handler/docs/gestures/use-rotation-gestu…
m-bert Jan 26, 2026
481e165
Update packages/docs-gesture-handler/docs/gestures/use-pinch-gesture.mdx
m-bert Jan 26, 2026
bb13f99
Merge branch '@mbert/docs-state-manager' of github.com:software-mansi…
m-bert Jan 26, 2026
f64e319
Review 1
m-bert Jan 26, 2026
d39af79
Update packages/docs-gesture-handler/docs/fundamentals/reanimated-int…
m-bert Jan 27, 2026
2df4f82
Update packages/docs-gesture-handler/docs/fundamentals/reanimated-int…
m-bert Jan 27, 2026
67faf23
Merge branch '@mbert/docs-detector' into @mbert/docs-state-manager
m-bert Jan 27, 2026
63d78f4
Merge branch 'next' into @mbert/docs-state-manager
m-bert Jan 28, 2026
9ad871b
Update table
m-bert Jan 28, 2026
c0afea2
Add tip
m-bert Jan 28, 2026
d02cd15
Merge branch 'next' into @mbert/docs-state-manager
m-bert Jan 28, 2026
bd65c24
Rephrase tip
m-bert Jan 29, 2026
efea146
Mention didSucceed
m-bert Jan 29, 2026
2cd0bb5
Rephrase onUpdate
m-bert Jan 29, 2026
8cfc145
Merge branch 'next' into @mbert/docs-state-manager
m-bert Jan 29, 2026
aa9186a
Update packages/docs-gesture-handler/docs/under-the-hood/state.md
m-bert Jan 29, 2026
8e580e4
Copilot review
m-bert Jan 29, 2026
072804b
Merge branch 'next' into @mbert/docs-state-manager
m-bert Feb 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
181 changes: 181 additions & 0 deletions packages/docs-gesture-handler/docs/fundamentals/callbacks-events.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,181 @@
---
id: callbacks-events
title: Gesture callbacks & events
sidebar_label: Gesture callbacks & events
sidebar_position: 7
---

import {GestureEventFlowChart, TouchEventFlowChart} from '@site/src/examples/CallbacksFlowCharts'
import CollapsibleCode from '@site/src/components/CollapsibleCode';
Comment thread
m-bert marked this conversation as resolved.
Outdated

At any given time, each handler instance has an assigned [state](/docs/under-the-hood/state) that can change when new touch events occur or can be forced to change by the touch system in certain circumstances. You can hook into state transitions using specific [gesture callbacks](#callbacks).

When `Reanimated` is installed, all callbacks are automatically workletized. For more details, refer to the [Integration with Reanimated](/docs/fundamentals/reanimated-interactions#automatic-workletization-of-gesture-callbacks) section.

## Callbacks flow

### GestureEvent callbacks

<GestureEventFlowChart />

Note that some of these callbacks are complementary:
Comment thread
akwasniewski marked this conversation as resolved.

- if `onBegin` was called, it is guaranteed that `onFinalize` will be called later.
- if `onActivate` was called, it is guaranteed that `onDeactivate` will be called later.

### TouchEvent callbacks

<TouchEventFlowChart />

## Callbacks

### onBegin

```ts
onBegin: (event: GestureEvent<HandlerData>) => void
```

Called when a handler begins to recognize gestures. If `onBegin` was called, it is guaranteed that `onFinalize` will be called later.
Comment thread
akwasniewski marked this conversation as resolved.

### onActivate

```ts
onActivate: (event: GestureEvent<HandlerData>) => void
```

Called when activation criteria for handler are met. If `onActivate` was called, it is guaranteed that `onDeactivate` will be called later.
Comment thread
akwasniewski marked this conversation as resolved.

### onUpdate

```ts
onUpdate: (event: GestureEvent<HandlerData>) => void
```

Called every time a gesture is updated after it has started.
Comment thread
j-piasecki marked this conversation as resolved.
Outdated
Comment thread
akwasniewski marked this conversation as resolved.
Outdated

### onDeactivate

```ts
onDeactivate: (event: GestureEvent<HandlerData>, didSucceed: boolean) => void
```

Called after when handler stops recognizing gestures, but only if handler activated. It is called before `onFinalize`. If the handler was interrupted, the `didSucceed` argument is set to `false`. Otherwise it is set to `true`.

### onFinalize

```ts
onFinalize: (event: GestureEvent<HandlerData>, didSucceed: boolean) => void
```

Called when handler stops recognizing gestures. If handler managed to activate, the `didSucceed` argument is set to `true` and `onFinalize` will be called right after `onDeactivate`. Otherwise it is set to `false`.

### onTouchesDown

```ts
onTouchesDown: (event: GestureTouchEvent) => void
```

Called when new pointers are placed on the screen. It may carry information about more than one pointer because the events are batched.

### onTouchesMove

```ts
onTouchesMove: (event: GestureTouchEvent) => void
```

Called when pointers are moved on the screen. It may carry information about more than one pointer because the events are batched.

### onTouchesUp

```ts
onTouchesUp: (event: GestureTouchEvent) => void
```

Called when pointers are lifted from the screen. It may carry information about more than one pointer because the events are batched.

### onTouchesCancelled

```ts
onTouchesCancelled: (event: GestureTouchEvent) => void
```

Called when there will be no more information about this pointer. It may be called because the gesture has ended or was interrupted. It may carry information about more than one pointer because the events are batched.

## Events

### GestureEvent

<CollapsibleCode
label="Show composed types definitions"
expandedLabel="Hide composed types definitions"
lineBounds={[0, 4]}
src={`
export type GestureEvent<HandlerData> = {
handlerTag: number;
numberOfPointers: number;
pointerType: PointerType;
} & HandlerData;

export enum PointerType {
TOUCH,
STYLUS,
MOUSE,
KEY,
OTHER,
}
`}/>

`GestureEvent` contains properties common to all gestures (`handlerTag`, `numberOfPointers`, `pointerType`) along with gesture-specific data defined in each gesture's documentation.

### TouchEvent

<CollapsibleCode
label="Show composed types definitions"
expandedLabel="Hide composed types definitions"
lineBounds={[0, 8]}
src={`
export type GestureTouchEvent = {
handlerTag: number;
numberOfTouches: number;
state: State;
eventType: TouchEventType;
allTouches: TouchData[];
changedTouches: TouchData[];
pointerType: PointerType;
};

export const State = {
UNDETERMINED: 0,
FAILED: 1,
BEGAN: 2,
CANCELLED: 3,
ACTIVE: 4,
END: 5,
} as const;

export const TouchEventType = {
UNDETERMINED: 0,
TOUCHES_DOWN: 1,
TOUCHES_MOVE: 2,
TOUCHES_UP: 3,
TOUCHES_CANCEL: 4,
} as const;

export const TouchEventType = {
UNDETERMINED: 0,
TOUCHES_DOWN: 1,
TOUCHES_MOVE: 2,
TOUCHES_UP: 3,
TOUCHES_CANCEL: 4,
} as const;

Comment thread
m-bert marked this conversation as resolved.
Outdated
export enum PointerType {
TOUCH,
STYLUS,
MOUSE,
KEY,
OTHER,
}
`}/>

`TouchEvent` carries information about raw touch events, like touching the screen or moving the finger.
160 changes: 160 additions & 0 deletions packages/docs-gesture-handler/docs/fundamentals/state-manager.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
---
id: state-manager
title: State manager
sidebar_label: State manager
sidebar_position: 6
---

import CollapsibleCode from '@site/src/components/CollapsibleCode';

RNGH3 allows to manually control gestures lifecycle by using `GestureStateManager`.

## State management

Manual state management is based on `handlerTag`. There are two ways of manual state control.

### Inside gesture definition

If you want to manipulate gesture's state in its callbacks, you can get `handlerTag` from event parameter.

<CollapsibleCode
label="Show full example"
expandedLabel="Hide full example"
lineBounds={[9, 17]}
src={`
Comment thread
m-bert marked this conversation as resolved.
Outdated
import { StyleSheet, View } from 'react-native';
import {
GestureDetector,
GestureHandlerRootView,
GestureStateManager,
useLongPressGesture,
} from 'react-native-gesture-handler';

export default function App() {
const longPress = useLongPressGesture({
onTouchesDown: (e) => {
// highlight-next-line
GestureStateManager.activate(e.handlerTag);
},
onActivate: () => {
console.log('LongPress activated!');
},
});

return (
<GestureHandlerRootView style={styles.container}>
<GestureDetector gesture={longPress}>
<View style={styles.box} />
</GestureDetector>
</GestureHandlerRootView>
);
}

const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
justifyContent: 'space-around',
},

box: {
width: 150,
height: 150,
backgroundColor: 'blue',
},
});
`}/>


### Outside gesture definition

If you want to control gesture lifecycle outside of it, you can use `handlerTag` from created gesture object.

<CollapsibleCode
label="Show full example"
expandedLabel="Hide full example"
lineBounds={[10, 21]}
src={`
Comment thread
m-bert marked this conversation as resolved.
Outdated
import { StyleSheet, View } from 'react-native';
import {
GestureDetector,
GestureHandlerRootView,
GestureStateManager,
useLongPressGesture,
usePanGesture,
} from 'react-native-gesture-handler';

export default function App() {
const pan = usePanGesture({
onActivate: () => {
console.log('Pan activated!');
},
});

const longPress = useLongPressGesture({
onActivate: () => {
// highlight-next-line
GestureStateManager.activate(pan.handlerTag);
},
});

return (
<GestureHandlerRootView style={styles.container}>
<GestureDetector gesture={longPress}>
<View style={styles.box} />
</GestureDetector>
<GestureDetector gesture={pan}>
<View style={styles.box} />
</GestureDetector>
</GestureHandlerRootView>
);
}

const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
justifyContent: 'space-around',
},

box: {
width: 150,
height: 150,
backgroundColor: 'blue',
},
});
`}/>

## Methods

### begin

```tsx
begin: (handlerTag: number) => void;
```

Triggers [`onBegin`](/docs/fundamentals/callbacks-events#onbegin) callback on gesture with specified `handlerTag`.

### activate

```tsx
activate: (handlerTag: number) => void;
```

Triggers [`onActivate`](/docs/fundamentals/callbacks-events#onactivate) callback on gesture with specified `handlerTag`.

### deactivate

```tsx
deactivate: (handlerTag: number) => void;
```

If the gesture had activated, it triggers the [`onDeactivate`](/docs/fundamentals/callbacks-events#ondeactivate) callback. It also triggers the [`onFinalize`](/docs/fundamentals/callbacks-events#onfinalize) callback on gesture with the specified `handlerTag`.

### fail

```tsx
fail: (handlerTag: number) => void;
```

Triggers [`onFinalize`](/docs/fundamentals/callbacks-events#onfinalize) callback on gesture with specified `handlerTag`. If gesture had activated, it will also trigger [`onDeactivate`](/docs/fundamentals/callbacks-events#ondeactivate) callback.
Loading
Loading