react-native-gesture-handler 2.22.0-rc.1 → 2.22.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.
@@ -0,0 +1,85 @@
1
+ package com.swmansion.gesturehandler
2
+
3
+ import com.facebook.react.BaseReactPackage
4
+ import com.facebook.react.ViewManagerOnDemandReactPackage
5
+ import com.facebook.react.bridge.ModuleSpec
6
+ import com.facebook.react.bridge.NativeModule
7
+ import com.facebook.react.bridge.ReactApplicationContext
8
+ import com.facebook.react.module.annotations.ReactModule
9
+ import com.facebook.react.module.annotations.ReactModuleList
10
+ import com.facebook.react.module.model.ReactModuleInfo
11
+ import com.facebook.react.module.model.ReactModuleInfoProvider
12
+ import com.facebook.react.uimanager.ViewManager
13
+ import com.swmansion.gesturehandler.react.RNGestureHandlerButtonViewManager
14
+ import com.swmansion.gesturehandler.react.RNGestureHandlerModule
15
+ import com.swmansion.gesturehandler.react.RNGestureHandlerRootViewManager
16
+
17
+ @ReactModuleList(
18
+ nativeModules = [
19
+ RNGestureHandlerModule::class
20
+ ]
21
+ )
22
+ class RNGestureHandlerPackage : BaseReactPackage(), ViewManagerOnDemandReactPackage {
23
+ private val viewManagers: Map<String, ModuleSpec> by lazy {
24
+ mapOf(
25
+ RNGestureHandlerRootViewManager.REACT_CLASS to ModuleSpec.viewManagerSpec {
26
+ RNGestureHandlerRootViewManager()
27
+ },
28
+ RNGestureHandlerButtonViewManager.REACT_CLASS to ModuleSpec.viewManagerSpec {
29
+ RNGestureHandlerButtonViewManager()
30
+ }
31
+ )
32
+ }
33
+
34
+ override fun createViewManagers(reactContext: ReactApplicationContext) =
35
+ listOf<ViewManager<*, *>>(
36
+ RNGestureHandlerRootViewManager(),
37
+ RNGestureHandlerButtonViewManager()
38
+ )
39
+
40
+ override fun getViewManagerNames(reactContext: ReactApplicationContext) =
41
+ viewManagers.keys.toList()
42
+
43
+ override fun getViewManagers(reactContext: ReactApplicationContext): MutableList<ModuleSpec> =
44
+ viewManagers.values.toMutableList()
45
+
46
+ override fun createViewManager(
47
+ reactContext: ReactApplicationContext,
48
+ viewManagerName: String
49
+ ) = viewManagers[viewManagerName]?.provider?.get() as? ViewManager<*, *>
50
+
51
+ override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? {
52
+ return if (name == RNGestureHandlerModule.NAME) {
53
+ RNGestureHandlerModule(reactContext)
54
+ } else {
55
+ null
56
+ }
57
+ }
58
+
59
+ override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
60
+ try {
61
+ val reactModuleInfoProviderClass =
62
+ Class.forName("com.swmansion.gesturehandler.RNGestureHandlerPackage$\$ReactModuleInfoProvider")
63
+ return reactModuleInfoProviderClass.getDeclaredConstructor().newInstance() as ReactModuleInfoProvider
64
+ } catch (e: ClassNotFoundException) {
65
+ return ReactModuleInfoProvider {
66
+ val reactModule: ReactModule = RNGestureHandlerModule::class.java.getAnnotation(ReactModule::class.java)!!
67
+
68
+ mutableMapOf(
69
+ RNGestureHandlerModule.NAME to ReactModuleInfo(
70
+ reactModule.name,
71
+ RNGestureHandlerModule::class.java.name,
72
+ reactModule.canOverrideExistingModule,
73
+ reactModule.needsEagerInit,
74
+ reactModule.isCxxModule,
75
+ true
76
+ )
77
+ )
78
+ }
79
+ } catch (e: InstantiationException) {
80
+ throw RuntimeException("No ReactModuleInfoProvider for RNGestureHandlerPackage$\$ReactModuleInfoProvider", e)
81
+ } catch (e: IllegalAccessException) {
82
+ throw RuntimeException("No ReactModuleInfoProvider for RNGestureHandlerPackage$\$ReactModuleInfoProvider", e)
83
+ }
84
+ }
85
+ }
@@ -0,0 +1,85 @@
1
+ package com.swmansion.gesturehandler
2
+
3
+ import com.facebook.react.BaseReactPackage
4
+ import com.facebook.react.ViewManagerOnDemandReactPackage
5
+ import com.facebook.react.bridge.ModuleSpec
6
+ import com.facebook.react.bridge.NativeModule
7
+ import com.facebook.react.bridge.ReactApplicationContext
8
+ import com.facebook.react.module.annotations.ReactModule
9
+ import com.facebook.react.module.annotations.ReactModuleList
10
+ import com.facebook.react.module.model.ReactModuleInfo
11
+ import com.facebook.react.module.model.ReactModuleInfoProvider
12
+ import com.facebook.react.uimanager.ViewManager
13
+ import com.swmansion.gesturehandler.react.RNGestureHandlerButtonViewManager
14
+ import com.swmansion.gesturehandler.react.RNGestureHandlerModule
15
+ import com.swmansion.gesturehandler.react.RNGestureHandlerRootViewManager
16
+
17
+ @ReactModuleList(
18
+ nativeModules = [
19
+ RNGestureHandlerModule::class
20
+ ]
21
+ )
22
+ class RNGestureHandlerPackage : BaseReactPackage(), ViewManagerOnDemandReactPackage {
23
+ private val viewManagers: Map<String, ModuleSpec> by lazy {
24
+ mapOf(
25
+ RNGestureHandlerRootViewManager.REACT_CLASS to ModuleSpec.viewManagerSpec {
26
+ RNGestureHandlerRootViewManager()
27
+ },
28
+ RNGestureHandlerButtonViewManager.REACT_CLASS to ModuleSpec.viewManagerSpec {
29
+ RNGestureHandlerButtonViewManager()
30
+ }
31
+ )
32
+ }
33
+
34
+ override fun createViewManagers(reactContext: ReactApplicationContext) =
35
+ listOf<ViewManager<*, *>>(
36
+ RNGestureHandlerRootViewManager(),
37
+ RNGestureHandlerButtonViewManager()
38
+ )
39
+
40
+ override fun getViewManagerNames(reactContext: ReactApplicationContext?) =
41
+ viewManagers.keys.toList()
42
+
43
+ override fun getViewManagers(reactContext: ReactApplicationContext?): MutableList<ModuleSpec> =
44
+ viewManagers.values.toMutableList()
45
+
46
+ override fun createViewManager(
47
+ reactContext: ReactApplicationContext?,
48
+ viewManagerName: String?
49
+ ) = viewManagers[viewManagerName]?.provider?.get() as? ViewManager<*, *>
50
+
51
+ override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? {
52
+ return if (name == RNGestureHandlerModule.NAME) {
53
+ RNGestureHandlerModule(reactContext)
54
+ } else {
55
+ null
56
+ }
57
+ }
58
+
59
+ override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
60
+ try {
61
+ val reactModuleInfoProviderClass =
62
+ Class.forName("com.swmansion.gesturehandler.RNGestureHandlerPackage$\$ReactModuleInfoProvider")
63
+ return reactModuleInfoProviderClass.getDeclaredConstructor().newInstance() as ReactModuleInfoProvider
64
+ } catch (e: ClassNotFoundException) {
65
+ return ReactModuleInfoProvider {
66
+ val reactModule: ReactModule = RNGestureHandlerModule::class.java.getAnnotation(ReactModule::class.java)!!
67
+
68
+ mutableMapOf(
69
+ RNGestureHandlerModule.NAME to ReactModuleInfo(
70
+ reactModule.name,
71
+ RNGestureHandlerModule::class.java.name,
72
+ reactModule.canOverrideExistingModule,
73
+ reactModule.needsEagerInit,
74
+ reactModule.isCxxModule,
75
+ true
76
+ )
77
+ )
78
+ }
79
+ } catch (e: InstantiationException) {
80
+ throw RuntimeException("No ReactModuleInfoProvider for RNGestureHandlerPackage$\$ReactModuleInfoProvider", e)
81
+ } catch (e: IllegalAccessException) {
82
+ throw RuntimeException("No ReactModuleInfoProvider for RNGestureHandlerPackage$\$ReactModuleInfoProvider", e)
83
+ }
84
+ }
85
+ }
@@ -121,6 +121,12 @@ class LongPressGestureHandler extends _GestureHandler.default {
121
121
  this.checkDistanceFail();
122
122
  }
123
123
 
124
+ onPointerOutOfBounds(event) {
125
+ super.onPointerOutOfBounds(event);
126
+ this.tracker.track(event);
127
+ this.checkDistanceFail();
128
+ }
129
+
124
130
  onPointerUp(event) {
125
131
  super.onPointerUp(event);
126
132
  this.tracker.removeFromTracker(event.pointerId);
@@ -1 +1 @@
1
- {"version":3,"sources":["LongPressGestureHandler.ts"],"names":["DEFAULT_MIN_DURATION_MS","DEFAULT_MAX_DIST_DP","SCALING_FACTOR","LongPressGestureHandler","GestureHandler","defaultMaxDistSq","init","ref","propsRef","config","enableContextMenu","undefined","transformNativeEvent","duration","Date","now","startTime","updateGestureConfig","enabled","props","minDurationMs","maxDist","maxDistSq","numberOfPointers","resetConfig","onStateChange","_newState","_oldState","clearTimeout","activationTimeout","onPointerDown","event","isButtonInConfig","button","tracker","addToTracker","startX","x","startY","y","tryBegin","tryActivate","tryToSendTouchEvent","onPointerAdd","getTrackedPointersCount","fail","absoluteCoordsAverage","getAbsoluteCoordsAverage","onPointerMove","track","checkDistanceFail","onPointerUp","removeFromTracker","pointerId","currentState","State","ACTIVE","end","onPointerRemove","getState","UNDETERMINED","previousTime","begin","setTimeout","activate","dx","dy","distSq","cancel"],"mappings":"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","sourcesContent":["import { State } from '../../State';\nimport { AdaptedEvent, Config } from '../interfaces';\n\nimport GestureHandler from './GestureHandler';\n\nconst DEFAULT_MIN_DURATION_MS = 500;\nconst DEFAULT_MAX_DIST_DP = 10;\nconst SCALING_FACTOR = 10;\n\nexport default class LongPressGestureHandler extends GestureHandler {\n private minDurationMs = DEFAULT_MIN_DURATION_MS;\n private defaultMaxDistSq = DEFAULT_MAX_DIST_DP * SCALING_FACTOR;\n\n private maxDistSq = this.defaultMaxDistSq;\n private numberOfPointers = 1;\n private startX = 0;\n private startY = 0;\n\n private startTime = 0;\n private previousTime = 0;\n\n private activationTimeout: number | undefined;\n\n public init(ref: number, propsRef: React.RefObject<unknown>) {\n if (this.config.enableContextMenu === undefined) {\n this.config.enableContextMenu = false;\n }\n\n super.init(ref, propsRef);\n }\n\n protected transformNativeEvent() {\n return {\n ...super.transformNativeEvent(),\n duration: Date.now() - this.startTime,\n };\n }\n\n public updateGestureConfig({ enabled = true, ...props }: Config): void {\n super.updateGestureConfig({ enabled: enabled, ...props });\n\n if (this.config.minDurationMs !== undefined) {\n this.minDurationMs = this.config.minDurationMs;\n }\n\n if (this.config.maxDist !== undefined) {\n this.maxDistSq = this.config.maxDist * this.config.maxDist;\n }\n\n if (this.config.numberOfPointers !== undefined) {\n this.numberOfPointers = this.config.numberOfPointers;\n }\n }\n\n protected resetConfig(): void {\n super.resetConfig();\n this.minDurationMs = DEFAULT_MIN_DURATION_MS;\n this.maxDistSq = this.defaultMaxDistSq;\n }\n\n protected onStateChange(_newState: State, _oldState: State): void {\n clearTimeout(this.activationTimeout);\n }\n\n protected onPointerDown(event: AdaptedEvent): void {\n if (!this.isButtonInConfig(event.button)) {\n return;\n }\n\n this.tracker.addToTracker(event);\n super.onPointerDown(event);\n\n this.startX = event.x;\n this.startY = event.y;\n\n this.tryBegin();\n this.tryActivate();\n\n this.tryToSendTouchEvent(event);\n }\n protected onPointerAdd(event: AdaptedEvent): void {\n super.onPointerAdd(event);\n this.tracker.addToTracker(event);\n\n if (this.tracker.getTrackedPointersCount() > this.numberOfPointers) {\n this.fail();\n return;\n }\n\n const absoluteCoordsAverage = this.tracker.getAbsoluteCoordsAverage();\n\n this.startX = absoluteCoordsAverage.x;\n this.startY = absoluteCoordsAverage.y;\n\n this.tryActivate();\n }\n\n protected onPointerMove(event: AdaptedEvent): void {\n super.onPointerMove(event);\n this.tracker.track(event);\n this.checkDistanceFail();\n }\n\n protected onPointerUp(event: AdaptedEvent): void {\n super.onPointerUp(event);\n this.tracker.removeFromTracker(event.pointerId);\n\n if (this.currentState === State.ACTIVE) {\n this.end();\n } else {\n this.fail();\n }\n }\n\n protected onPointerRemove(event: AdaptedEvent): void {\n super.onPointerRemove(event);\n this.tracker.removeFromTracker(event.pointerId);\n\n if (\n this.tracker.getTrackedPointersCount() < this.numberOfPointers &&\n this.getState() !== State.ACTIVE\n ) {\n this.fail();\n }\n }\n\n private tryBegin(): void {\n if (this.currentState !== State.UNDETERMINED) {\n return;\n }\n\n this.previousTime = Date.now();\n this.startTime = this.previousTime;\n\n this.begin();\n }\n\n private tryActivate(): void {\n if (this.tracker.getTrackedPointersCount() !== this.numberOfPointers) {\n return;\n }\n\n if (this.minDurationMs > 0) {\n this.activationTimeout = setTimeout(() => {\n this.activate();\n }, this.minDurationMs);\n } else if (this.minDurationMs === 0) {\n this.activate();\n }\n }\n\n private checkDistanceFail(): void {\n const absoluteCoordsAverage = this.tracker.getAbsoluteCoordsAverage();\n\n const dx = absoluteCoordsAverage.x - this.startX;\n const dy = absoluteCoordsAverage.y - this.startY;\n const distSq = dx * dx + dy * dy;\n\n if (distSq <= this.maxDistSq) {\n return;\n }\n\n if (this.currentState === State.ACTIVE) {\n this.cancel();\n } else {\n this.fail();\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["LongPressGestureHandler.ts"],"names":["DEFAULT_MIN_DURATION_MS","DEFAULT_MAX_DIST_DP","SCALING_FACTOR","LongPressGestureHandler","GestureHandler","defaultMaxDistSq","init","ref","propsRef","config","enableContextMenu","undefined","transformNativeEvent","duration","Date","now","startTime","updateGestureConfig","enabled","props","minDurationMs","maxDist","maxDistSq","numberOfPointers","resetConfig","onStateChange","_newState","_oldState","clearTimeout","activationTimeout","onPointerDown","event","isButtonInConfig","button","tracker","addToTracker","startX","x","startY","y","tryBegin","tryActivate","tryToSendTouchEvent","onPointerAdd","getTrackedPointersCount","fail","absoluteCoordsAverage","getAbsoluteCoordsAverage","onPointerMove","track","checkDistanceFail","onPointerOutOfBounds","onPointerUp","removeFromTracker","pointerId","currentState","State","ACTIVE","end","onPointerRemove","getState","UNDETERMINED","previousTime","begin","setTimeout","activate","dx","dy","distSq","cancel"],"mappings":"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","sourcesContent":["import { State } from '../../State';\nimport { AdaptedEvent, Config } from '../interfaces';\n\nimport GestureHandler from './GestureHandler';\n\nconst DEFAULT_MIN_DURATION_MS = 500;\nconst DEFAULT_MAX_DIST_DP = 10;\nconst SCALING_FACTOR = 10;\n\nexport default class LongPressGestureHandler extends GestureHandler {\n private minDurationMs = DEFAULT_MIN_DURATION_MS;\n private defaultMaxDistSq = DEFAULT_MAX_DIST_DP * SCALING_FACTOR;\n\n private maxDistSq = this.defaultMaxDistSq;\n private numberOfPointers = 1;\n private startX = 0;\n private startY = 0;\n\n private startTime = 0;\n private previousTime = 0;\n\n private activationTimeout: number | undefined;\n\n public init(ref: number, propsRef: React.RefObject<unknown>) {\n if (this.config.enableContextMenu === undefined) {\n this.config.enableContextMenu = false;\n }\n\n super.init(ref, propsRef);\n }\n\n protected transformNativeEvent() {\n return {\n ...super.transformNativeEvent(),\n duration: Date.now() - this.startTime,\n };\n }\n\n public updateGestureConfig({ enabled = true, ...props }: Config): void {\n super.updateGestureConfig({ enabled: enabled, ...props });\n\n if (this.config.minDurationMs !== undefined) {\n this.minDurationMs = this.config.minDurationMs;\n }\n\n if (this.config.maxDist !== undefined) {\n this.maxDistSq = this.config.maxDist * this.config.maxDist;\n }\n\n if (this.config.numberOfPointers !== undefined) {\n this.numberOfPointers = this.config.numberOfPointers;\n }\n }\n\n protected resetConfig(): void {\n super.resetConfig();\n this.minDurationMs = DEFAULT_MIN_DURATION_MS;\n this.maxDistSq = this.defaultMaxDistSq;\n }\n\n protected onStateChange(_newState: State, _oldState: State): void {\n clearTimeout(this.activationTimeout);\n }\n\n protected onPointerDown(event: AdaptedEvent): void {\n if (!this.isButtonInConfig(event.button)) {\n return;\n }\n\n this.tracker.addToTracker(event);\n super.onPointerDown(event);\n\n this.startX = event.x;\n this.startY = event.y;\n\n this.tryBegin();\n this.tryActivate();\n\n this.tryToSendTouchEvent(event);\n }\n protected onPointerAdd(event: AdaptedEvent): void {\n super.onPointerAdd(event);\n this.tracker.addToTracker(event);\n\n if (this.tracker.getTrackedPointersCount() > this.numberOfPointers) {\n this.fail();\n return;\n }\n\n const absoluteCoordsAverage = this.tracker.getAbsoluteCoordsAverage();\n\n this.startX = absoluteCoordsAverage.x;\n this.startY = absoluteCoordsAverage.y;\n\n this.tryActivate();\n }\n\n protected onPointerMove(event: AdaptedEvent): void {\n super.onPointerMove(event);\n this.tracker.track(event);\n this.checkDistanceFail();\n }\n\n protected onPointerOutOfBounds(event: AdaptedEvent): void {\n super.onPointerOutOfBounds(event);\n this.tracker.track(event);\n this.checkDistanceFail();\n }\n\n protected onPointerUp(event: AdaptedEvent): void {\n super.onPointerUp(event);\n this.tracker.removeFromTracker(event.pointerId);\n\n if (this.currentState === State.ACTIVE) {\n this.end();\n } else {\n this.fail();\n }\n }\n\n protected onPointerRemove(event: AdaptedEvent): void {\n super.onPointerRemove(event);\n this.tracker.removeFromTracker(event.pointerId);\n\n if (\n this.tracker.getTrackedPointersCount() < this.numberOfPointers &&\n this.getState() !== State.ACTIVE\n ) {\n this.fail();\n }\n }\n\n private tryBegin(): void {\n if (this.currentState !== State.UNDETERMINED) {\n return;\n }\n\n this.previousTime = Date.now();\n this.startTime = this.previousTime;\n\n this.begin();\n }\n\n private tryActivate(): void {\n if (this.tracker.getTrackedPointersCount() !== this.numberOfPointers) {\n return;\n }\n\n if (this.minDurationMs > 0) {\n this.activationTimeout = setTimeout(() => {\n this.activate();\n }, this.minDurationMs);\n } else if (this.minDurationMs === 0) {\n this.activate();\n }\n }\n\n private checkDistanceFail(): void {\n const absoluteCoordsAverage = this.tracker.getAbsoluteCoordsAverage();\n\n const dx = absoluteCoordsAverage.x - this.startX;\n const dy = absoluteCoordsAverage.y - this.startY;\n const distSq = dx * dx + dy * dy;\n\n if (distSq <= this.maxDistSq) {\n return;\n }\n\n if (this.currentState === State.ACTIVE) {\n this.cancel();\n } else {\n this.fail();\n }\n }\n}\n"]}
@@ -109,6 +109,12 @@ export default class LongPressGestureHandler extends GestureHandler {
109
109
  this.checkDistanceFail();
110
110
  }
111
111
 
112
+ onPointerOutOfBounds(event) {
113
+ super.onPointerOutOfBounds(event);
114
+ this.tracker.track(event);
115
+ this.checkDistanceFail();
116
+ }
117
+
112
118
  onPointerUp(event) {
113
119
  super.onPointerUp(event);
114
120
  this.tracker.removeFromTracker(event.pointerId);
@@ -1 +1 @@
1
- {"version":3,"sources":["LongPressGestureHandler.ts"],"names":["State","GestureHandler","DEFAULT_MIN_DURATION_MS","DEFAULT_MAX_DIST_DP","SCALING_FACTOR","LongPressGestureHandler","defaultMaxDistSq","init","ref","propsRef","config","enableContextMenu","undefined","transformNativeEvent","duration","Date","now","startTime","updateGestureConfig","enabled","props","minDurationMs","maxDist","maxDistSq","numberOfPointers","resetConfig","onStateChange","_newState","_oldState","clearTimeout","activationTimeout","onPointerDown","event","isButtonInConfig","button","tracker","addToTracker","startX","x","startY","y","tryBegin","tryActivate","tryToSendTouchEvent","onPointerAdd","getTrackedPointersCount","fail","absoluteCoordsAverage","getAbsoluteCoordsAverage","onPointerMove","track","checkDistanceFail","onPointerUp","removeFromTracker","pointerId","currentState","ACTIVE","end","onPointerRemove","getState","UNDETERMINED","previousTime","begin","setTimeout","activate","dx","dy","distSq","cancel"],"mappings":"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","sourcesContent":["import { State } from '../../State';\nimport { AdaptedEvent, Config } from '../interfaces';\n\nimport GestureHandler from './GestureHandler';\n\nconst DEFAULT_MIN_DURATION_MS = 500;\nconst DEFAULT_MAX_DIST_DP = 10;\nconst SCALING_FACTOR = 10;\n\nexport default class LongPressGestureHandler extends GestureHandler {\n private minDurationMs = DEFAULT_MIN_DURATION_MS;\n private defaultMaxDistSq = DEFAULT_MAX_DIST_DP * SCALING_FACTOR;\n\n private maxDistSq = this.defaultMaxDistSq;\n private numberOfPointers = 1;\n private startX = 0;\n private startY = 0;\n\n private startTime = 0;\n private previousTime = 0;\n\n private activationTimeout: number | undefined;\n\n public init(ref: number, propsRef: React.RefObject<unknown>) {\n if (this.config.enableContextMenu === undefined) {\n this.config.enableContextMenu = false;\n }\n\n super.init(ref, propsRef);\n }\n\n protected transformNativeEvent() {\n return {\n ...super.transformNativeEvent(),\n duration: Date.now() - this.startTime,\n };\n }\n\n public updateGestureConfig({ enabled = true, ...props }: Config): void {\n super.updateGestureConfig({ enabled: enabled, ...props });\n\n if (this.config.minDurationMs !== undefined) {\n this.minDurationMs = this.config.minDurationMs;\n }\n\n if (this.config.maxDist !== undefined) {\n this.maxDistSq = this.config.maxDist * this.config.maxDist;\n }\n\n if (this.config.numberOfPointers !== undefined) {\n this.numberOfPointers = this.config.numberOfPointers;\n }\n }\n\n protected resetConfig(): void {\n super.resetConfig();\n this.minDurationMs = DEFAULT_MIN_DURATION_MS;\n this.maxDistSq = this.defaultMaxDistSq;\n }\n\n protected onStateChange(_newState: State, _oldState: State): void {\n clearTimeout(this.activationTimeout);\n }\n\n protected onPointerDown(event: AdaptedEvent): void {\n if (!this.isButtonInConfig(event.button)) {\n return;\n }\n\n this.tracker.addToTracker(event);\n super.onPointerDown(event);\n\n this.startX = event.x;\n this.startY = event.y;\n\n this.tryBegin();\n this.tryActivate();\n\n this.tryToSendTouchEvent(event);\n }\n protected onPointerAdd(event: AdaptedEvent): void {\n super.onPointerAdd(event);\n this.tracker.addToTracker(event);\n\n if (this.tracker.getTrackedPointersCount() > this.numberOfPointers) {\n this.fail();\n return;\n }\n\n const absoluteCoordsAverage = this.tracker.getAbsoluteCoordsAverage();\n\n this.startX = absoluteCoordsAverage.x;\n this.startY = absoluteCoordsAverage.y;\n\n this.tryActivate();\n }\n\n protected onPointerMove(event: AdaptedEvent): void {\n super.onPointerMove(event);\n this.tracker.track(event);\n this.checkDistanceFail();\n }\n\n protected onPointerUp(event: AdaptedEvent): void {\n super.onPointerUp(event);\n this.tracker.removeFromTracker(event.pointerId);\n\n if (this.currentState === State.ACTIVE) {\n this.end();\n } else {\n this.fail();\n }\n }\n\n protected onPointerRemove(event: AdaptedEvent): void {\n super.onPointerRemove(event);\n this.tracker.removeFromTracker(event.pointerId);\n\n if (\n this.tracker.getTrackedPointersCount() < this.numberOfPointers &&\n this.getState() !== State.ACTIVE\n ) {\n this.fail();\n }\n }\n\n private tryBegin(): void {\n if (this.currentState !== State.UNDETERMINED) {\n return;\n }\n\n this.previousTime = Date.now();\n this.startTime = this.previousTime;\n\n this.begin();\n }\n\n private tryActivate(): void {\n if (this.tracker.getTrackedPointersCount() !== this.numberOfPointers) {\n return;\n }\n\n if (this.minDurationMs > 0) {\n this.activationTimeout = setTimeout(() => {\n this.activate();\n }, this.minDurationMs);\n } else if (this.minDurationMs === 0) {\n this.activate();\n }\n }\n\n private checkDistanceFail(): void {\n const absoluteCoordsAverage = this.tracker.getAbsoluteCoordsAverage();\n\n const dx = absoluteCoordsAverage.x - this.startX;\n const dy = absoluteCoordsAverage.y - this.startY;\n const distSq = dx * dx + dy * dy;\n\n if (distSq <= this.maxDistSq) {\n return;\n }\n\n if (this.currentState === State.ACTIVE) {\n this.cancel();\n } else {\n this.fail();\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["LongPressGestureHandler.ts"],"names":["State","GestureHandler","DEFAULT_MIN_DURATION_MS","DEFAULT_MAX_DIST_DP","SCALING_FACTOR","LongPressGestureHandler","defaultMaxDistSq","init","ref","propsRef","config","enableContextMenu","undefined","transformNativeEvent","duration","Date","now","startTime","updateGestureConfig","enabled","props","minDurationMs","maxDist","maxDistSq","numberOfPointers","resetConfig","onStateChange","_newState","_oldState","clearTimeout","activationTimeout","onPointerDown","event","isButtonInConfig","button","tracker","addToTracker","startX","x","startY","y","tryBegin","tryActivate","tryToSendTouchEvent","onPointerAdd","getTrackedPointersCount","fail","absoluteCoordsAverage","getAbsoluteCoordsAverage","onPointerMove","track","checkDistanceFail","onPointerOutOfBounds","onPointerUp","removeFromTracker","pointerId","currentState","ACTIVE","end","onPointerRemove","getState","UNDETERMINED","previousTime","begin","setTimeout","activate","dx","dy","distSq","cancel"],"mappings":"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","sourcesContent":["import { State } from '../../State';\nimport { AdaptedEvent, Config } from '../interfaces';\n\nimport GestureHandler from './GestureHandler';\n\nconst DEFAULT_MIN_DURATION_MS = 500;\nconst DEFAULT_MAX_DIST_DP = 10;\nconst SCALING_FACTOR = 10;\n\nexport default class LongPressGestureHandler extends GestureHandler {\n private minDurationMs = DEFAULT_MIN_DURATION_MS;\n private defaultMaxDistSq = DEFAULT_MAX_DIST_DP * SCALING_FACTOR;\n\n private maxDistSq = this.defaultMaxDistSq;\n private numberOfPointers = 1;\n private startX = 0;\n private startY = 0;\n\n private startTime = 0;\n private previousTime = 0;\n\n private activationTimeout: number | undefined;\n\n public init(ref: number, propsRef: React.RefObject<unknown>) {\n if (this.config.enableContextMenu === undefined) {\n this.config.enableContextMenu = false;\n }\n\n super.init(ref, propsRef);\n }\n\n protected transformNativeEvent() {\n return {\n ...super.transformNativeEvent(),\n duration: Date.now() - this.startTime,\n };\n }\n\n public updateGestureConfig({ enabled = true, ...props }: Config): void {\n super.updateGestureConfig({ enabled: enabled, ...props });\n\n if (this.config.minDurationMs !== undefined) {\n this.minDurationMs = this.config.minDurationMs;\n }\n\n if (this.config.maxDist !== undefined) {\n this.maxDistSq = this.config.maxDist * this.config.maxDist;\n }\n\n if (this.config.numberOfPointers !== undefined) {\n this.numberOfPointers = this.config.numberOfPointers;\n }\n }\n\n protected resetConfig(): void {\n super.resetConfig();\n this.minDurationMs = DEFAULT_MIN_DURATION_MS;\n this.maxDistSq = this.defaultMaxDistSq;\n }\n\n protected onStateChange(_newState: State, _oldState: State): void {\n clearTimeout(this.activationTimeout);\n }\n\n protected onPointerDown(event: AdaptedEvent): void {\n if (!this.isButtonInConfig(event.button)) {\n return;\n }\n\n this.tracker.addToTracker(event);\n super.onPointerDown(event);\n\n this.startX = event.x;\n this.startY = event.y;\n\n this.tryBegin();\n this.tryActivate();\n\n this.tryToSendTouchEvent(event);\n }\n protected onPointerAdd(event: AdaptedEvent): void {\n super.onPointerAdd(event);\n this.tracker.addToTracker(event);\n\n if (this.tracker.getTrackedPointersCount() > this.numberOfPointers) {\n this.fail();\n return;\n }\n\n const absoluteCoordsAverage = this.tracker.getAbsoluteCoordsAverage();\n\n this.startX = absoluteCoordsAverage.x;\n this.startY = absoluteCoordsAverage.y;\n\n this.tryActivate();\n }\n\n protected onPointerMove(event: AdaptedEvent): void {\n super.onPointerMove(event);\n this.tracker.track(event);\n this.checkDistanceFail();\n }\n\n protected onPointerOutOfBounds(event: AdaptedEvent): void {\n super.onPointerOutOfBounds(event);\n this.tracker.track(event);\n this.checkDistanceFail();\n }\n\n protected onPointerUp(event: AdaptedEvent): void {\n super.onPointerUp(event);\n this.tracker.removeFromTracker(event.pointerId);\n\n if (this.currentState === State.ACTIVE) {\n this.end();\n } else {\n this.fail();\n }\n }\n\n protected onPointerRemove(event: AdaptedEvent): void {\n super.onPointerRemove(event);\n this.tracker.removeFromTracker(event.pointerId);\n\n if (\n this.tracker.getTrackedPointersCount() < this.numberOfPointers &&\n this.getState() !== State.ACTIVE\n ) {\n this.fail();\n }\n }\n\n private tryBegin(): void {\n if (this.currentState !== State.UNDETERMINED) {\n return;\n }\n\n this.previousTime = Date.now();\n this.startTime = this.previousTime;\n\n this.begin();\n }\n\n private tryActivate(): void {\n if (this.tracker.getTrackedPointersCount() !== this.numberOfPointers) {\n return;\n }\n\n if (this.minDurationMs > 0) {\n this.activationTimeout = setTimeout(() => {\n this.activate();\n }, this.minDurationMs);\n } else if (this.minDurationMs === 0) {\n this.activate();\n }\n }\n\n private checkDistanceFail(): void {\n const absoluteCoordsAverage = this.tracker.getAbsoluteCoordsAverage();\n\n const dx = absoluteCoordsAverage.x - this.startX;\n const dy = absoluteCoordsAverage.y - this.startY;\n const distSq = dx * dx + dy * dy;\n\n if (distSq <= this.maxDistSq) {\n return;\n }\n\n if (this.currentState === State.ACTIVE) {\n this.cancel();\n } else {\n this.fail();\n }\n }\n}\n"]}
@@ -22,6 +22,7 @@ export default class LongPressGestureHandler extends GestureHandler {
22
22
  protected onPointerDown(event: AdaptedEvent): void;
23
23
  protected onPointerAdd(event: AdaptedEvent): void;
24
24
  protected onPointerMove(event: AdaptedEvent): void;
25
+ protected onPointerOutOfBounds(event: AdaptedEvent): void;
25
26
  protected onPointerUp(event: AdaptedEvent): void;
26
27
  protected onPointerRemove(event: AdaptedEvent): void;
27
28
  private tryBegin;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-gesture-handler",
3
- "version": "2.22.0-rc.1",
3
+ "version": "2.22.0",
4
4
  "description": "Declarative API exposing native platform touch and gesture system to React Native",
5
5
  "scripts": {
6
6
  "prepare": "bob build && husky install",
@@ -39,6 +39,8 @@
39
39
  "android/common/src/main/java/",
40
40
  "android/reanimated/src/main/java/",
41
41
  "android/noreanimated/src/main/java/",
42
+ "android/package77/",
43
+ "android/packageDeprecated/",
42
44
  "apple/",
43
45
  "Swipeable/",
44
46
  "ReanimatedSwipeable/",
@@ -101,6 +101,12 @@ export default class LongPressGestureHandler extends GestureHandler {
101
101
  this.checkDistanceFail();
102
102
  }
103
103
 
104
+ protected onPointerOutOfBounds(event: AdaptedEvent): void {
105
+ super.onPointerOutOfBounds(event);
106
+ this.tracker.track(event);
107
+ this.checkDistanceFail();
108
+ }
109
+
104
110
  protected onPointerUp(event: AdaptedEvent): void {
105
111
  super.onPointerUp(event);
106
112
  this.tracker.removeFromTracker(event.pointerId);