react-native-gesture-handler 2.14.0 → 2.14.1
Sign up to get free protection for your applications and to get access to all the features.
- package/lib/commonjs/components/gestureHandlerRootHOC.js.map +1 -1
- package/lib/commonjs/components/touchables/TouchableWithoutFeedback.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gestureStateManager.js +39 -37
- package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -1
- package/lib/commonjs/web/handlers/FlingGestureHandler.js +4 -6
- package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/commonjs/web/tools/PointerEventManager.js +5 -3
- package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
- package/lib/module/components/gestureHandlerRootHOC.js.map +1 -1
- package/lib/module/components/touchables/TouchableWithoutFeedback.js.map +1 -1
- package/lib/module/handlers/gestures/gestureStateManager.js +44 -42
- package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -1
- package/lib/module/web/handlers/FlingGestureHandler.js +4 -6
- package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/module/web/tools/PointerEventManager.js +4 -3
- package/lib/module/web/tools/PointerEventManager.js.map +1 -1
- package/lib/typescript/components/gestureHandlerRootHOC.d.ts +1 -1
- package/lib/typescript/components/touchables/TouchableWithoutFeedback.d.ts +1 -1
- package/lib/typescript/handlers/gestures/gestureStateManager.d.ts +3 -1
- package/package.json +1 -1
- package/src/components/gestureHandlerRootHOC.tsx +1 -3
- package/src/components/touchables/TouchableWithoutFeedback.tsx +3 -3
- package/src/handlers/gestures/gestureStateManager.ts +42 -40
- package/src/web/handlers/FlingGestureHandler.ts +5 -5
- package/src/web/tools/PointerEventManager.ts +5 -3
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["gestureHandlerRootHOC.tsx"],"names":["gestureHandlerRootHOC","Component","containerStyles","Wrapper","props","styles","container","displayName","name","StyleSheet","create","flex"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;;;;;;;AAEe,SAASA,qBAAT,
|
1
|
+
{"version":3,"sources":["gestureHandlerRootHOC.tsx"],"names":["gestureHandlerRootHOC","Component","containerStyles","Wrapper","props","styles","container","displayName","name","StyleSheet","create","flex"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;;;;;;;AAEe,SAASA,qBAAT,CACbC,SADa,EAEbC,eAFa,EAGW;AACxB,WAASC,OAAT,CAAiBC,KAAjB,EAA2B;AACzB,wBACE,oBAAC,+BAAD;AAAwB,MAAA,KAAK,EAAE,CAACC,MAAM,CAACC,SAAR,EAAmBJ,eAAnB;AAA/B,oBACE,oBAAC,SAAD,EAAeE,KAAf,CADF,CADF;AAKD;;AAEDD,EAAAA,OAAO,CAACI,WAAR,GAAuB,yBACrBN,SAAS,CAACM,WAAV,IAAyBN,SAAS,CAACO,IACpC,GAFD,CATwB,CAaxB;;AACA,qCAAqBL,OAArB,EAA8BF,SAA9B;AAEA,SAAOE,OAAP;AACD;;AAED,MAAME,MAAM,GAAGI,wBAAWC,MAAX,CAAkB;AAC/BJ,EAAAA,SAAS,EAAE;AAAEK,IAAAA,IAAI,EAAE;AAAR;AADoB,CAAlB,CAAf","sourcesContent":["import * as React from 'react';\nimport { StyleSheet, StyleProp, ViewStyle } from 'react-native';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\nimport GestureHandlerRootView from './GestureHandlerRootView';\n\nexport default function gestureHandlerRootHOC<P extends object>(\n Component: React.ComponentType<P>,\n containerStyles?: StyleProp<ViewStyle>\n): React.ComponentType<P> {\n function Wrapper(props: P) {\n return (\n <GestureHandlerRootView style={[styles.container, containerStyles]}>\n <Component {...props} />\n </GestureHandlerRootView>\n );\n }\n\n Wrapper.displayName = `gestureHandlerRootHOC(${\n Component.displayName || Component.name\n })`;\n\n // @ts-ignore - hoistNonReactStatics uses old version of @types/react\n hoistNonReactStatics(Wrapper, Component);\n\n return Wrapper;\n}\n\nconst styles = StyleSheet.create({\n container: { flex: 1 },\n});\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["TouchableWithoutFeedback.tsx"],"names":["TouchableWithoutFeedback","React","forwardRef","props","ref","defaultProps","GenericTouchable"],"mappings":";;;;;;;AAAA;;AAEA;;;;;;;;;;AAIA,MAAMA,wBAAwB,gBAAGC,KAAK,CAACC,UAAN,CAG/B,CAACC,KAAD,EAAQC,GAAR,kBAAgB,oBAAC,yBAAD;AAAkB,EAAA,GAAG,EAAEA;AAAvB,GAAgCD,KAAhC,EAHe,CAAjC;AAKAH,wBAAwB,CAACK,YAAzB,GAAwCC,0BAAiBD,YAAzD;eAEeL,wB","sourcesContent":["import * as React from 'react';\nimport { PropsWithChildren } from 'react';\nimport GenericTouchable, { GenericTouchableProps } from './GenericTouchable';\n\nexport type TouchableWithoutFeedbackProps =
|
1
|
+
{"version":3,"sources":["TouchableWithoutFeedback.tsx"],"names":["TouchableWithoutFeedback","React","forwardRef","props","ref","defaultProps","GenericTouchable"],"mappings":";;;;;;;AAAA;;AAEA;;;;;;;;;;AAIA,MAAMA,wBAAwB,gBAAGC,KAAK,CAACC,UAAN,CAG/B,CAACC,KAAD,EAAQC,GAAR,kBAAgB,oBAAC,yBAAD;AAAkB,EAAA,GAAG,EAAEA;AAAvB,GAAgCD,KAAhC,EAHe,CAAjC;AAKAH,wBAAwB,CAACK,YAAzB,GAAwCC,0BAAiBD,YAAzD;eAEeL,wB","sourcesContent":["import * as React from 'react';\nimport { PropsWithChildren } from 'react';\nimport GenericTouchable, { GenericTouchableProps } from './GenericTouchable';\n\nexport type TouchableWithoutFeedbackProps = GenericTouchableProps;\n\nconst TouchableWithoutFeedback = React.forwardRef<\n GenericTouchable,\n PropsWithChildren<TouchableWithoutFeedbackProps>\n>((props, ref) => <GenericTouchable ref={ref} {...props} />);\n\nTouchableWithoutFeedback.defaultProps = GenericTouchable.defaultProps;\n\nexport default TouchableWithoutFeedback;\n"]}
|
@@ -16,50 +16,52 @@ const warningMessage = (0, _utils.tagMessage)('react-native-reanimated is requir
|
|
16
16
|
|
17
17
|
const REANIMATED_AVAILABLE = (_reanimatedWrapper.Reanimated === null || _reanimatedWrapper.Reanimated === void 0 ? void 0 : _reanimatedWrapper.Reanimated.useSharedValue) !== undefined;
|
18
18
|
const setGestureState = _reanimatedWrapper.Reanimated === null || _reanimatedWrapper.Reanimated === void 0 ? void 0 : _reanimatedWrapper.Reanimated.setGestureState;
|
19
|
-
const GestureStateManager = {
|
20
|
-
create(handlerTag) {
|
21
|
-
'worklet';
|
22
19
|
|
23
|
-
|
24
|
-
|
25
|
-
|
20
|
+
function create(handlerTag) {
|
21
|
+
'worklet';
|
22
|
+
|
23
|
+
return {
|
24
|
+
begin: () => {
|
25
|
+
'worklet';
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
27
|
+
if (REANIMATED_AVAILABLE) {
|
28
|
+
setGestureState(handlerTag, _State.State.BEGAN);
|
29
|
+
} else {
|
30
|
+
console.warn(warningMessage);
|
31
|
+
}
|
32
|
+
},
|
33
|
+
activate: () => {
|
34
|
+
'worklet';
|
35
35
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
36
|
+
if (REANIMATED_AVAILABLE) {
|
37
|
+
setGestureState(handlerTag, _State.State.ACTIVE);
|
38
|
+
} else {
|
39
|
+
console.warn(warningMessage);
|
40
|
+
}
|
41
|
+
},
|
42
|
+
fail: () => {
|
43
|
+
'worklet';
|
44
44
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
45
|
+
if (REANIMATED_AVAILABLE) {
|
46
|
+
setGestureState(handlerTag, _State.State.FAILED);
|
47
|
+
} else {
|
48
|
+
console.warn(warningMessage);
|
49
|
+
}
|
50
|
+
},
|
51
|
+
end: () => {
|
52
|
+
'worklet';
|
53
53
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
}
|
54
|
+
if (REANIMATED_AVAILABLE) {
|
55
|
+
setGestureState(handlerTag, _State.State.END);
|
56
|
+
} else {
|
57
|
+
console.warn(warningMessage);
|
59
58
|
}
|
60
|
-
}
|
61
|
-
}
|
59
|
+
}
|
60
|
+
};
|
61
|
+
}
|
62
62
|
|
63
|
+
const GestureStateManager = {
|
64
|
+
create
|
63
65
|
};
|
64
66
|
exports.GestureStateManager = GestureStateManager;
|
65
67
|
//# sourceMappingURL=gestureStateManager.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["gestureStateManager.ts"],"names":["warningMessage","REANIMATED_AVAILABLE","useSharedValue","undefined","setGestureState","Reanimated","
|
1
|
+
{"version":3,"sources":["gestureStateManager.ts"],"names":["warningMessage","REANIMATED_AVAILABLE","useSharedValue","undefined","setGestureState","Reanimated","create","handlerTag","begin","State","BEGAN","console","warn","activate","ACTIVE","fail","FAILED","end","END","GestureStateManager"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AASA,MAAMA,cAAc,GAAG,uBACrB,kFADqB,CAAvB,C,CAIA;AACA;;AACA,MAAMC,oBAAoB,GAAG,6HAAYC,cAAZ,MAA+BC,SAA5D;AACA,MAAMC,eAAe,GAAGC,6BAAH,aAAGA,6BAAH,uBAAGA,8BAAYD,eAApC;;AAEA,SAASE,MAAT,CAAgBC,UAAhB,EAA6D;AAC3D;;AACA,SAAO;AACLC,IAAAA,KAAK,EAAE,MAAM;AACX;;AACA,UAAIP,oBAAJ,EAA0B;AACxBG,QAAAA,eAAe,CAACG,UAAD,EAAaE,aAAMC,KAAnB,CAAf;AACD,OAFD,MAEO;AACLC,QAAAA,OAAO,CAACC,IAAR,CAAaZ,cAAb;AACD;AACF,KARI;AAULa,IAAAA,QAAQ,EAAE,MAAM;AACd;;AACA,UAAIZ,oBAAJ,EAA0B;AACxBG,QAAAA,eAAe,CAACG,UAAD,EAAaE,aAAMK,MAAnB,CAAf;AACD,OAFD,MAEO;AACLH,QAAAA,OAAO,CAACC,IAAR,CAAaZ,cAAb;AACD;AACF,KAjBI;AAmBLe,IAAAA,IAAI,EAAE,MAAM;AACV;;AACA,UAAId,oBAAJ,EAA0B;AACxBG,QAAAA,eAAe,CAACG,UAAD,EAAaE,aAAMO,MAAnB,CAAf;AACD,OAFD,MAEO;AACLL,QAAAA,OAAO,CAACC,IAAR,CAAaZ,cAAb;AACD;AACF,KA1BI;AA4BLiB,IAAAA,GAAG,EAAE,MAAM;AACT;;AACA,UAAIhB,oBAAJ,EAA0B;AACxBG,QAAAA,eAAe,CAACG,UAAD,EAAaE,aAAMS,GAAnB,CAAf;AACD,OAFD,MAEO;AACLP,QAAAA,OAAO,CAACC,IAAR,CAAaZ,cAAb;AACD;AACF;AAnCI,GAAP;AAqCD;;AAEM,MAAMmB,mBAAmB,GAAG;AACjCb,EAAAA;AADiC,CAA5B","sourcesContent":["import { Reanimated } from './reanimatedWrapper';\nimport { State } from '../../State';\nimport { tagMessage } from '../../utils';\n\nexport interface GestureStateManagerType {\n begin: () => void;\n activate: () => void;\n fail: () => void;\n end: () => void;\n}\n\nconst warningMessage = tagMessage(\n 'react-native-reanimated is required in order to use synchronous state management'\n);\n\n// check if reanimated module is available, but look for useSharedValue as conditional\n// require of reanimated can sometimes return content of `utils.ts` file (?)\nconst REANIMATED_AVAILABLE = Reanimated?.useSharedValue !== undefined;\nconst setGestureState = Reanimated?.setGestureState;\n\nfunction create(handlerTag: number): GestureStateManagerType {\n 'worklet';\n return {\n begin: () => {\n 'worklet';\n if (REANIMATED_AVAILABLE) {\n setGestureState(handlerTag, State.BEGAN);\n } else {\n console.warn(warningMessage);\n }\n },\n\n activate: () => {\n 'worklet';\n if (REANIMATED_AVAILABLE) {\n setGestureState(handlerTag, State.ACTIVE);\n } else {\n console.warn(warningMessage);\n }\n },\n\n fail: () => {\n 'worklet';\n if (REANIMATED_AVAILABLE) {\n setGestureState(handlerTag, State.FAILED);\n } else {\n console.warn(warningMessage);\n }\n },\n\n end: () => {\n 'worklet';\n if (REANIMATED_AVAILABLE) {\n setGestureState(handlerTag, State.END);\n } else {\n console.warn(warningMessage);\n }\n },\n };\n}\n\nexport const GestureStateManager = {\n create,\n};\n"]}
|
@@ -16,7 +16,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
16
16
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
17
17
|
|
18
18
|
const DEFAULT_MAX_DURATION_MS = 800;
|
19
|
-
const DEFAULT_MIN_ACCEPTABLE_DELTA =
|
19
|
+
const DEFAULT_MIN_ACCEPTABLE_DELTA = 32;
|
20
20
|
const DEFAULT_DIRECTION = _constants.Direction.RIGHT;
|
21
21
|
const DEFAULT_NUMBER_OF_TOUCHES_REQUIRED = 1;
|
22
22
|
|
@@ -141,13 +141,11 @@ class FlingGestureHandler extends _GestureHandler.default {
|
|
141
141
|
}
|
142
142
|
|
143
143
|
onUp(event) {
|
144
|
-
this.
|
145
|
-
|
146
|
-
if (this.currentState !== _State.State.BEGAN) {
|
147
|
-
return;
|
144
|
+
if (this.currentState === _State.State.BEGAN) {
|
145
|
+
this.endFling();
|
148
146
|
}
|
149
147
|
|
150
|
-
this.
|
148
|
+
this.tracker.removeFromTracker(event.pointerId);
|
151
149
|
}
|
152
150
|
|
153
151
|
activate(force) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["FlingGestureHandler.ts"],"names":["DEFAULT_MAX_DURATION_MS","DEFAULT_MIN_ACCEPTABLE_DELTA","DEFAULT_DIRECTION","Direction","RIGHT","DEFAULT_NUMBER_OF_TOUCHES_REQUIRED","FlingGestureHandler","GestureHandler","NaN","init","ref","propsRef","updateGestureConfig","enabled","props","config","direction","numberOfPointers","numberOfPointersRequired","startFling","startX","tracker","getLastX","keyPointer","startY","getLastY","begin","maxNumberOfPointersSimultaneously","delayTimeout","setTimeout","fail","maxDurationMs","tryEndFling","minAcceptableDelta","LEFT","UP","DOWN","clearTimeout","activate","endFling","onPointerDown","event","addToTracker","pointerId","newPointerAction","onPointerAdd","currentState","State","UNDETERMINED","BEGAN","getTrackedPointersCount","onPointerMove","track","onPointerUp","onUp","onPointerRemove","removeFromTracker","force","end","resetConfig"],"mappings":";;;;;;;AAAA;;AACA;;AAGA;;;;;;AAEA,MAAMA,uBAAuB,GAAG,GAAhC;AACA,MAAMC,4BAA4B,GAAG,
|
1
|
+
{"version":3,"sources":["FlingGestureHandler.ts"],"names":["DEFAULT_MAX_DURATION_MS","DEFAULT_MIN_ACCEPTABLE_DELTA","DEFAULT_DIRECTION","Direction","RIGHT","DEFAULT_NUMBER_OF_TOUCHES_REQUIRED","FlingGestureHandler","GestureHandler","NaN","init","ref","propsRef","updateGestureConfig","enabled","props","config","direction","numberOfPointers","numberOfPointersRequired","startFling","startX","tracker","getLastX","keyPointer","startY","getLastY","begin","maxNumberOfPointersSimultaneously","delayTimeout","setTimeout","fail","maxDurationMs","tryEndFling","minAcceptableDelta","LEFT","UP","DOWN","clearTimeout","activate","endFling","onPointerDown","event","addToTracker","pointerId","newPointerAction","onPointerAdd","currentState","State","UNDETERMINED","BEGAN","getTrackedPointersCount","onPointerMove","track","onPointerUp","onUp","onPointerRemove","removeFromTracker","force","end","resetConfig"],"mappings":"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","sourcesContent":["import { State } from '../../State';\nimport { Direction } from '../constants';\nimport { AdaptedEvent, Config } from '../interfaces';\n\nimport GestureHandler from './GestureHandler';\n\nconst DEFAULT_MAX_DURATION_MS = 800;\nconst DEFAULT_MIN_ACCEPTABLE_DELTA = 32;\nconst DEFAULT_DIRECTION = Direction.RIGHT;\nconst DEFAULT_NUMBER_OF_TOUCHES_REQUIRED = 1;\n\nexport default class FlingGestureHandler extends GestureHandler {\n private numberOfPointersRequired = DEFAULT_NUMBER_OF_TOUCHES_REQUIRED;\n private direction = DEFAULT_DIRECTION;\n\n private maxDurationMs = DEFAULT_MAX_DURATION_MS;\n private minAcceptableDelta = DEFAULT_MIN_ACCEPTABLE_DELTA;\n private delayTimeout!: number;\n\n private startX = 0;\n private startY = 0;\n\n private maxNumberOfPointersSimultaneously = 0;\n private keyPointer = NaN;\n\n public init(ref: number, propsRef: React.RefObject<unknown>): void {\n super.init(ref, propsRef);\n }\n\n public updateGestureConfig({ enabled = true, ...props }: Config): void {\n super.updateGestureConfig({ enabled: enabled, ...props });\n\n if (this.config.direction) {\n this.direction = this.config.direction;\n }\n\n if (this.config.numberOfPointers) {\n this.numberOfPointersRequired = this.config.numberOfPointers;\n }\n }\n\n private startFling(): void {\n this.startX = this.tracker.getLastX(this.keyPointer);\n this.startY = this.tracker.getLastY(this.keyPointer);\n\n this.begin();\n\n this.maxNumberOfPointersSimultaneously = 1;\n\n this.delayTimeout = setTimeout(() => this.fail(), this.maxDurationMs);\n }\n\n private tryEndFling(): boolean {\n if (\n this.maxNumberOfPointersSimultaneously ===\n this.numberOfPointersRequired &&\n ((this.direction & Direction.RIGHT &&\n this.tracker.getLastX(this.keyPointer) - this.startX >\n this.minAcceptableDelta) ||\n (this.direction & Direction.LEFT &&\n this.startX - this.tracker.getLastX(this.keyPointer) >\n this.minAcceptableDelta) ||\n (this.direction & Direction.UP &&\n this.startY - this.tracker.getLastY(this.keyPointer) >\n this.minAcceptableDelta) ||\n (this.direction & Direction.DOWN &&\n this.tracker.getLastY(this.keyPointer) - this.startY >\n this.minAcceptableDelta))\n ) {\n clearTimeout(this.delayTimeout);\n this.activate();\n\n return true;\n }\n\n return false;\n }\n\n private endFling() {\n if (!this.tryEndFling()) {\n this.fail();\n }\n }\n\n protected onPointerDown(event: AdaptedEvent): void {\n this.tracker.addToTracker(event);\n this.keyPointer = event.pointerId;\n\n super.onPointerDown(event);\n this.newPointerAction();\n }\n\n protected onPointerAdd(event: AdaptedEvent): void {\n this.tracker.addToTracker(event);\n super.onPointerAdd(event);\n this.newPointerAction();\n }\n\n private newPointerAction(): void {\n if (this.currentState === State.UNDETERMINED) {\n this.startFling();\n }\n\n if (this.currentState !== State.BEGAN) {\n return;\n }\n\n this.tryEndFling();\n\n if (\n this.tracker.getTrackedPointersCount() >\n this.maxNumberOfPointersSimultaneously\n ) {\n this.maxNumberOfPointersSimultaneously =\n this.tracker.getTrackedPointersCount();\n }\n }\n\n protected onPointerMove(event: AdaptedEvent): void {\n this.tracker.track(event);\n\n if (this.currentState !== State.BEGAN) {\n return;\n }\n\n this.tryEndFling();\n\n super.onPointerMove(event);\n }\n\n protected onPointerUp(event: AdaptedEvent): void {\n super.onPointerUp(event);\n this.onUp(event);\n\n this.keyPointer = NaN;\n }\n\n protected onPointerRemove(event: AdaptedEvent): void {\n super.onPointerRemove(event);\n this.onUp(event);\n }\n\n private onUp(event: AdaptedEvent): void {\n if (this.currentState === State.BEGAN) {\n this.endFling();\n }\n\n this.tracker.removeFromTracker(event.pointerId);\n }\n\n public activate(force?: boolean): void {\n super.activate(force);\n this.end();\n }\n\n protected resetConfig(): void {\n super.resetConfig();\n this.numberOfPointersRequired = DEFAULT_NUMBER_OF_TOUCHES_REQUIRED;\n this.direction = DEFAULT_DIRECTION;\n }\n}\n"]}
|
@@ -15,6 +15,8 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
15
15
|
|
16
16
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
17
17
|
|
18
|
+
const POINTER_CAPTURE_EXCLUDE_LIST = new Set(['SELECT', 'INPUT']);
|
19
|
+
|
18
20
|
class PointerEventManager extends _EventManager.default {
|
19
21
|
constructor(...args) {
|
20
22
|
super(...args);
|
@@ -38,7 +40,7 @@ class PointerEventManager extends _EventManager.default {
|
|
38
40
|
const adaptedEvent = this.mapEvent(event, _interfaces.EventTypes.DOWN);
|
39
41
|
const target = event.target;
|
40
42
|
|
41
|
-
if (target
|
43
|
+
if (!POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)) {
|
42
44
|
target.setPointerCapture(adaptedEvent.pointerId);
|
43
45
|
}
|
44
46
|
|
@@ -68,7 +70,7 @@ class PointerEventManager extends _EventManager.default {
|
|
68
70
|
const adaptedEvent = this.mapEvent(event, _interfaces.EventTypes.UP);
|
69
71
|
const target = event.target;
|
70
72
|
|
71
|
-
if (target
|
73
|
+
if (!POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)) {
|
72
74
|
target.releasePointerCapture(adaptedEvent.pointerId);
|
73
75
|
}
|
74
76
|
|
@@ -101,7 +103,7 @@ class PointerEventManager extends _EventManager.default {
|
|
101
103
|
// pointer moves until it succeeds.
|
102
104
|
// God, I do love web development.
|
103
105
|
|
104
|
-
if (!target.hasPointerCapture(event.pointerId) && target
|
106
|
+
if (!target.hasPointerCapture(event.pointerId) && !POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)) {
|
105
107
|
target.setPointerCapture(event.pointerId);
|
106
108
|
}
|
107
109
|
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["PointerEventManager.ts"],"names":["PointerEventManager","EventManager","Set","setListeners","view","addEventListener","event","pointerType","PointerType","TOUCH","x","clientX","y","clientY","adaptedEvent","mapEvent","EventTypes","DOWN","target","HTMLDivElement","setPointerCapture","pointerId","markAsInBounds","trackedPointers","add","activePointersCounter","eventType","ADDITIONAL_POINTER_DOWN","onPointerAdd","onPointerDown","UP","releasePointerCapture","markAsOutOfBounds","delete","ADDITIONAL_POINTER_UP","onPointerRemove","onPointerUp","MOVE","hasPointerCapture","inBounds","pointerIndex","pointersInBounds","indexOf","ENTER","onPointerEnter","onPointerMove","LEAVE","onPointerLeave","onPointerOutOfBounds","CANCEL","onPointerCancel","clear","onPointerMoveOver","onPointerMoveOut","has","offsetX","offsetY","buttons","time","timeStamp","resetManager"],"mappings":"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","sourcesContent":["import { AdaptedEvent, EventTypes, PointerType } from '../interfaces';\nimport EventManager from './EventManager';\nimport { isPointerInBounds } from '../utils';\n\nexport default class PointerEventManager extends EventManager<HTMLElement> {\n private trackedPointers = new Set<number>();\n\n public setListeners(): void {\n this.view.addEventListener('pointerdown', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n if (\n !isPointerInBounds(this.view, { x: event.clientX, y: event.clientY })\n ) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.DOWN);\n const target = event.target as HTMLElement;\n\n if (target instanceof HTMLDivElement) {\n target.setPointerCapture(adaptedEvent.pointerId);\n }\n\n this.markAsInBounds(adaptedEvent.pointerId);\n this.trackedPointers.add(adaptedEvent.pointerId);\n\n if (++this.activePointersCounter > 1) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;\n this.onPointerAdd(adaptedEvent);\n } else {\n this.onPointerDown(adaptedEvent);\n }\n });\n\n this.view.addEventListener('pointerup', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n // When we call reset on gesture handlers, it also resets their event managers\n // In some handlers (like RotationGestureHandler) reset is called before all pointers leave view\n // This means, that activePointersCounter will be set to 0, while there are still remaining pointers on view\n // Removing them will end in activePointersCounter going below 0, therefore handlers won't behave properly\n if (this.activePointersCounter === 0) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.UP);\n const target = event.target as HTMLElement;\n\n if (target instanceof HTMLDivElement) {\n target.releasePointerCapture(adaptedEvent.pointerId);\n }\n\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n this.trackedPointers.delete(adaptedEvent.pointerId);\n\n if (--this.activePointersCounter > 0) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_UP;\n this.onPointerRemove(adaptedEvent);\n } else {\n this.onPointerUp(adaptedEvent);\n }\n });\n\n this.view.addEventListener('pointermove', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.MOVE);\n const target = event.target as HTMLElement;\n\n // You may be wondering why are we setting pointer capture here, when we\n // already set it in `pointerdown` handler. Well, that's a great question,\n // for which I don't have an answer. Specification (https://www.w3.org/TR/pointerevents2/#dom-element-setpointercapture)\n // says that the requirement for `setPointerCapture` to work is that pointer\n // must be in 'active buttons state`, otherwise it will fail silently, which\n // is lovely. Obviously, when `pointerdown` is fired, one of the buttons\n // (when using mouse) is pressed, but that doesn't mean that `setPointerCapture`\n // will succeed, for some reason. Since it fails silently, we don't actually know\n // if it worked or not (there's `gotpointercapture` event, but the complexity of\n // incorporating it here seems stupid), so we just call it again here, every time\n // pointer moves until it succeeds.\n // God, I do love web development.\n if (\n !target.hasPointerCapture(event.pointerId) &&\n target instanceof HTMLDivElement\n ) {\n target.setPointerCapture(event.pointerId);\n }\n\n const inBounds: boolean = isPointerInBounds(this.view, {\n x: adaptedEvent.x,\n y: adaptedEvent.y,\n });\n\n const pointerIndex: number = this.pointersInBounds.indexOf(\n adaptedEvent.pointerId\n );\n\n if (inBounds) {\n if (pointerIndex < 0) {\n adaptedEvent.eventType = EventTypes.ENTER;\n this.onPointerEnter(adaptedEvent);\n this.markAsInBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerMove(adaptedEvent);\n }\n } else {\n if (pointerIndex >= 0) {\n adaptedEvent.eventType = EventTypes.LEAVE;\n this.onPointerLeave(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerOutOfBounds(adaptedEvent);\n }\n }\n });\n\n this.view.addEventListener('pointercancel', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.CANCEL\n );\n\n this.onPointerCancel(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n this.activePointersCounter = 0;\n this.trackedPointers.clear();\n });\n\n // onPointerEnter and onPointerLeave are triggered by a custom logic responsible for\n // handling shouldCancelWhenOutside flag, and are unreliable unless the pointer is down.\n // We therefore use pointerenter and pointerleave events to handle the hover gesture,\n // mapping them to onPointerMoveOver and onPointerMoveOut respectively.\n\n this.view.addEventListener('pointerenter', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.ENTER);\n\n this.onPointerMoveOver(adaptedEvent);\n });\n\n this.view.addEventListener('pointerleave', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.LEAVE);\n\n this.onPointerMoveOut(adaptedEvent);\n });\n\n this.view.addEventListener(\n 'lostpointercapture',\n (event: PointerEvent): void => {\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.CANCEL\n );\n\n if (this.trackedPointers.has(adaptedEvent.pointerId)) {\n // in some cases the `pointerup` event is not fired, but `lostpointercapture` is\n // we simulate the `pointercancel` event here to make sure the gesture handler stops tracking it\n this.onPointerCancel(adaptedEvent);\n\n this.activePointersCounter = 0;\n this.trackedPointers.clear();\n }\n }\n );\n }\n\n protected mapEvent(event: PointerEvent, eventType: EventTypes): AdaptedEvent {\n return {\n x: event.clientX,\n y: event.clientY,\n offsetX: event.offsetX,\n offsetY: event.offsetY,\n pointerId: event.pointerId,\n eventType: eventType,\n pointerType: event.pointerType as PointerType,\n buttons: event.buttons,\n time: event.timeStamp,\n };\n }\n\n public resetManager(): void {\n super.resetManager();\n this.trackedPointers.clear();\n }\n}\n"]}
|
1
|
+
{"version":3,"sources":["PointerEventManager.ts"],"names":["POINTER_CAPTURE_EXCLUDE_LIST","Set","PointerEventManager","EventManager","setListeners","view","addEventListener","event","pointerType","PointerType","TOUCH","x","clientX","y","clientY","adaptedEvent","mapEvent","EventTypes","DOWN","target","has","tagName","setPointerCapture","pointerId","markAsInBounds","trackedPointers","add","activePointersCounter","eventType","ADDITIONAL_POINTER_DOWN","onPointerAdd","onPointerDown","UP","releasePointerCapture","markAsOutOfBounds","delete","ADDITIONAL_POINTER_UP","onPointerRemove","onPointerUp","MOVE","hasPointerCapture","inBounds","pointerIndex","pointersInBounds","indexOf","ENTER","onPointerEnter","onPointerMove","LEAVE","onPointerLeave","onPointerOutOfBounds","CANCEL","onPointerCancel","clear","onPointerMoveOver","onPointerMoveOut","offsetX","offsetY","buttons","time","timeStamp","resetManager"],"mappings":"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","sourcesContent":["import { AdaptedEvent, EventTypes, PointerType } from '../interfaces';\nimport EventManager from './EventManager';\nimport { isPointerInBounds } from '../utils';\n\nconst POINTER_CAPTURE_EXCLUDE_LIST = new Set<string>(['SELECT', 'INPUT']);\n\nexport default class PointerEventManager extends EventManager<HTMLElement> {\n private trackedPointers = new Set<number>();\n\n public setListeners(): void {\n this.view.addEventListener('pointerdown', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n if (\n !isPointerInBounds(this.view, { x: event.clientX, y: event.clientY })\n ) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.DOWN);\n const target = event.target as HTMLElement;\n\n if (!POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)) {\n target.setPointerCapture(adaptedEvent.pointerId);\n }\n\n this.markAsInBounds(adaptedEvent.pointerId);\n this.trackedPointers.add(adaptedEvent.pointerId);\n\n if (++this.activePointersCounter > 1) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;\n this.onPointerAdd(adaptedEvent);\n } else {\n this.onPointerDown(adaptedEvent);\n }\n });\n\n this.view.addEventListener('pointerup', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n // When we call reset on gesture handlers, it also resets their event managers\n // In some handlers (like RotationGestureHandler) reset is called before all pointers leave view\n // This means, that activePointersCounter will be set to 0, while there are still remaining pointers on view\n // Removing them will end in activePointersCounter going below 0, therefore handlers won't behave properly\n if (this.activePointersCounter === 0) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.UP);\n const target = event.target as HTMLElement;\n\n if (!POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)) {\n target.releasePointerCapture(adaptedEvent.pointerId);\n }\n\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n this.trackedPointers.delete(adaptedEvent.pointerId);\n\n if (--this.activePointersCounter > 0) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_UP;\n this.onPointerRemove(adaptedEvent);\n } else {\n this.onPointerUp(adaptedEvent);\n }\n });\n\n this.view.addEventListener('pointermove', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.MOVE);\n const target = event.target as HTMLElement;\n\n // You may be wondering why are we setting pointer capture here, when we\n // already set it in `pointerdown` handler. Well, that's a great question,\n // for which I don't have an answer. Specification (https://www.w3.org/TR/pointerevents2/#dom-element-setpointercapture)\n // says that the requirement for `setPointerCapture` to work is that pointer\n // must be in 'active buttons state`, otherwise it will fail silently, which\n // is lovely. Obviously, when `pointerdown` is fired, one of the buttons\n // (when using mouse) is pressed, but that doesn't mean that `setPointerCapture`\n // will succeed, for some reason. Since it fails silently, we don't actually know\n // if it worked or not (there's `gotpointercapture` event, but the complexity of\n // incorporating it here seems stupid), so we just call it again here, every time\n // pointer moves until it succeeds.\n // God, I do love web development.\n if (\n !target.hasPointerCapture(event.pointerId) &&\n !POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)\n ) {\n target.setPointerCapture(event.pointerId);\n }\n\n const inBounds: boolean = isPointerInBounds(this.view, {\n x: adaptedEvent.x,\n y: adaptedEvent.y,\n });\n\n const pointerIndex: number = this.pointersInBounds.indexOf(\n adaptedEvent.pointerId\n );\n\n if (inBounds) {\n if (pointerIndex < 0) {\n adaptedEvent.eventType = EventTypes.ENTER;\n this.onPointerEnter(adaptedEvent);\n this.markAsInBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerMove(adaptedEvent);\n }\n } else {\n if (pointerIndex >= 0) {\n adaptedEvent.eventType = EventTypes.LEAVE;\n this.onPointerLeave(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerOutOfBounds(adaptedEvent);\n }\n }\n });\n\n this.view.addEventListener('pointercancel', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.CANCEL\n );\n\n this.onPointerCancel(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n this.activePointersCounter = 0;\n this.trackedPointers.clear();\n });\n\n // onPointerEnter and onPointerLeave are triggered by a custom logic responsible for\n // handling shouldCancelWhenOutside flag, and are unreliable unless the pointer is down.\n // We therefore use pointerenter and pointerleave events to handle the hover gesture,\n // mapping them to onPointerMoveOver and onPointerMoveOut respectively.\n\n this.view.addEventListener('pointerenter', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.ENTER);\n\n this.onPointerMoveOver(adaptedEvent);\n });\n\n this.view.addEventListener('pointerleave', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.LEAVE);\n\n this.onPointerMoveOut(adaptedEvent);\n });\n\n this.view.addEventListener(\n 'lostpointercapture',\n (event: PointerEvent): void => {\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.CANCEL\n );\n\n if (this.trackedPointers.has(adaptedEvent.pointerId)) {\n // in some cases the `pointerup` event is not fired, but `lostpointercapture` is\n // we simulate the `pointercancel` event here to make sure the gesture handler stops tracking it\n this.onPointerCancel(adaptedEvent);\n\n this.activePointersCounter = 0;\n this.trackedPointers.clear();\n }\n }\n );\n }\n\n protected mapEvent(event: PointerEvent, eventType: EventTypes): AdaptedEvent {\n return {\n x: event.clientX,\n y: event.clientY,\n offsetX: event.offsetX,\n offsetY: event.offsetY,\n pointerId: event.pointerId,\n eventType: eventType,\n pointerType: event.pointerType as PointerType,\n buttons: event.buttons,\n time: event.timeStamp,\n };\n }\n\n public resetManager(): void {\n super.resetManager();\n this.trackedPointers.clear();\n }\n}\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["gestureHandlerRootHOC.tsx"],"names":["React","StyleSheet","hoistNonReactStatics","GestureHandlerRootView","gestureHandlerRootHOC","Component","containerStyles","Wrapper","props","styles","container","displayName","name","create","flex"],"mappings":"AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AACA,SAASC,UAAT,QAAiD,cAAjD;AACA,OAAOC,oBAAP,MAAiC,yBAAjC;AACA,OAAOC,sBAAP,MAAmC,0BAAnC;AAEA,eAAe,SAASC,qBAAT,
|
1
|
+
{"version":3,"sources":["gestureHandlerRootHOC.tsx"],"names":["React","StyleSheet","hoistNonReactStatics","GestureHandlerRootView","gestureHandlerRootHOC","Component","containerStyles","Wrapper","props","styles","container","displayName","name","create","flex"],"mappings":"AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AACA,SAASC,UAAT,QAAiD,cAAjD;AACA,OAAOC,oBAAP,MAAiC,yBAAjC;AACA,OAAOC,sBAAP,MAAmC,0BAAnC;AAEA,eAAe,SAASC,qBAAT,CACbC,SADa,EAEbC,eAFa,EAGW;AACxB,WAASC,OAAT,CAAiBC,KAAjB,EAA2B;AACzB,wBACE,oBAAC,sBAAD;AAAwB,MAAA,KAAK,EAAE,CAACC,MAAM,CAACC,SAAR,EAAmBJ,eAAnB;AAA/B,oBACE,oBAAC,SAAD,EAAeE,KAAf,CADF,CADF;AAKD;;AAEDD,EAAAA,OAAO,CAACI,WAAR,GAAuB,yBACrBN,SAAS,CAACM,WAAV,IAAyBN,SAAS,CAACO,IACpC,GAFD,CATwB,CAaxB;;AACAV,EAAAA,oBAAoB,CAACK,OAAD,EAAUF,SAAV,CAApB;AAEA,SAAOE,OAAP;AACD;AAED,MAAME,MAAM,GAAGR,UAAU,CAACY,MAAX,CAAkB;AAC/BH,EAAAA,SAAS,EAAE;AAAEI,IAAAA,IAAI,EAAE;AAAR;AADoB,CAAlB,CAAf","sourcesContent":["import * as React from 'react';\nimport { StyleSheet, StyleProp, ViewStyle } from 'react-native';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\nimport GestureHandlerRootView from './GestureHandlerRootView';\n\nexport default function gestureHandlerRootHOC<P extends object>(\n Component: React.ComponentType<P>,\n containerStyles?: StyleProp<ViewStyle>\n): React.ComponentType<P> {\n function Wrapper(props: P) {\n return (\n <GestureHandlerRootView style={[styles.container, containerStyles]}>\n <Component {...props} />\n </GestureHandlerRootView>\n );\n }\n\n Wrapper.displayName = `gestureHandlerRootHOC(${\n Component.displayName || Component.name\n })`;\n\n // @ts-ignore - hoistNonReactStatics uses old version of @types/react\n hoistNonReactStatics(Wrapper, Component);\n\n return Wrapper;\n}\n\nconst styles = StyleSheet.create({\n container: { flex: 1 },\n});\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["TouchableWithoutFeedback.tsx"],"names":["React","GenericTouchable","TouchableWithoutFeedback","forwardRef","props","ref","defaultProps"],"mappings":";;AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AAEA,OAAOC,gBAAP,MAAwD,oBAAxD;AAIA,MAAMC,wBAAwB,gBAAGF,KAAK,CAACG,UAAN,CAG/B,CAACC,KAAD,EAAQC,GAAR,kBAAgB,oBAAC,gBAAD;AAAkB,EAAA,GAAG,EAAEA;AAAvB,GAAgCD,KAAhC,EAHe,CAAjC;AAKAF,wBAAwB,CAACI,YAAzB,GAAwCL,gBAAgB,CAACK,YAAzD;AAEA,eAAeJ,wBAAf","sourcesContent":["import * as React from 'react';\nimport { PropsWithChildren } from 'react';\nimport GenericTouchable, { GenericTouchableProps } from './GenericTouchable';\n\nexport type TouchableWithoutFeedbackProps =
|
1
|
+
{"version":3,"sources":["TouchableWithoutFeedback.tsx"],"names":["React","GenericTouchable","TouchableWithoutFeedback","forwardRef","props","ref","defaultProps"],"mappings":";;AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AAEA,OAAOC,gBAAP,MAAwD,oBAAxD;AAIA,MAAMC,wBAAwB,gBAAGF,KAAK,CAACG,UAAN,CAG/B,CAACC,KAAD,EAAQC,GAAR,kBAAgB,oBAAC,gBAAD;AAAkB,EAAA,GAAG,EAAEA;AAAvB,GAAgCD,KAAhC,EAHe,CAAjC;AAKAF,wBAAwB,CAACI,YAAzB,GAAwCL,gBAAgB,CAACK,YAAzD;AAEA,eAAeJ,wBAAf","sourcesContent":["import * as React from 'react';\nimport { PropsWithChildren } from 'react';\nimport GenericTouchable, { GenericTouchableProps } from './GenericTouchable';\n\nexport type TouchableWithoutFeedbackProps = GenericTouchableProps;\n\nconst TouchableWithoutFeedback = React.forwardRef<\n GenericTouchable,\n PropsWithChildren<TouchableWithoutFeedbackProps>\n>((props, ref) => <GenericTouchable ref={ref} {...props} />);\n\nTouchableWithoutFeedback.defaultProps = GenericTouchable.defaultProps;\n\nexport default TouchableWithoutFeedback;\n"]}
|
@@ -6,49 +6,51 @@ const warningMessage = tagMessage('react-native-reanimated is required in order
|
|
6
6
|
|
7
7
|
const REANIMATED_AVAILABLE = (Reanimated === null || Reanimated === void 0 ? void 0 : Reanimated.useSharedValue) !== undefined;
|
8
8
|
const setGestureState = Reanimated === null || Reanimated === void 0 ? void 0 : Reanimated.setGestureState;
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
}
|
31
|
-
},
|
32
|
-
fail: () => {
|
33
|
-
'worklet';
|
34
|
-
|
35
|
-
if (REANIMATED_AVAILABLE) {
|
36
|
-
setGestureState(handlerTag, State.FAILED);
|
37
|
-
} else {
|
38
|
-
console.warn(warningMessage);
|
39
|
-
}
|
40
|
-
},
|
41
|
-
end: () => {
|
42
|
-
'worklet';
|
43
|
-
|
44
|
-
if (REANIMATED_AVAILABLE) {
|
45
|
-
setGestureState(handlerTag, State.END);
|
46
|
-
} else {
|
47
|
-
console.warn(warningMessage);
|
48
|
-
}
|
9
|
+
|
10
|
+
function create(handlerTag) {
|
11
|
+
'worklet';
|
12
|
+
|
13
|
+
return {
|
14
|
+
begin: () => {
|
15
|
+
'worklet';
|
16
|
+
|
17
|
+
if (REANIMATED_AVAILABLE) {
|
18
|
+
setGestureState(handlerTag, State.BEGAN);
|
19
|
+
} else {
|
20
|
+
console.warn(warningMessage);
|
21
|
+
}
|
22
|
+
},
|
23
|
+
activate: () => {
|
24
|
+
'worklet';
|
25
|
+
|
26
|
+
if (REANIMATED_AVAILABLE) {
|
27
|
+
setGestureState(handlerTag, State.ACTIVE);
|
28
|
+
} else {
|
29
|
+
console.warn(warningMessage);
|
49
30
|
}
|
50
|
-
}
|
51
|
-
|
31
|
+
},
|
32
|
+
fail: () => {
|
33
|
+
'worklet';
|
52
34
|
|
35
|
+
if (REANIMATED_AVAILABLE) {
|
36
|
+
setGestureState(handlerTag, State.FAILED);
|
37
|
+
} else {
|
38
|
+
console.warn(warningMessage);
|
39
|
+
}
|
40
|
+
},
|
41
|
+
end: () => {
|
42
|
+
'worklet';
|
43
|
+
|
44
|
+
if (REANIMATED_AVAILABLE) {
|
45
|
+
setGestureState(handlerTag, State.END);
|
46
|
+
} else {
|
47
|
+
console.warn(warningMessage);
|
48
|
+
}
|
49
|
+
}
|
50
|
+
};
|
51
|
+
}
|
52
|
+
|
53
|
+
export const GestureStateManager = {
|
54
|
+
create
|
53
55
|
};
|
54
56
|
//# sourceMappingURL=gestureStateManager.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["gestureStateManager.ts"],"names":["Reanimated","State","tagMessage","warningMessage","REANIMATED_AVAILABLE","useSharedValue","undefined","setGestureState","
|
1
|
+
{"version":3,"sources":["gestureStateManager.ts"],"names":["Reanimated","State","tagMessage","warningMessage","REANIMATED_AVAILABLE","useSharedValue","undefined","setGestureState","create","handlerTag","begin","BEGAN","console","warn","activate","ACTIVE","fail","FAILED","end","END","GestureStateManager"],"mappings":"AAAA,SAASA,UAAT,QAA2B,qBAA3B;AACA,SAASC,KAAT,QAAsB,aAAtB;AACA,SAASC,UAAT,QAA2B,aAA3B;AASA,MAAMC,cAAc,GAAGD,UAAU,CAC/B,kFAD+B,CAAjC,C,CAIA;AACA;;AACA,MAAME,oBAAoB,GAAG,CAAAJ,UAAU,SAAV,IAAAA,UAAU,WAAV,YAAAA,UAAU,CAAEK,cAAZ,MAA+BC,SAA5D;AACA,MAAMC,eAAe,GAAGP,UAAH,aAAGA,UAAH,uBAAGA,UAAU,CAAEO,eAApC;;AAEA,SAASC,MAAT,CAAgBC,UAAhB,EAA6D;AAC3D;;AACA,SAAO;AACLC,IAAAA,KAAK,EAAE,MAAM;AACX;;AACA,UAAIN,oBAAJ,EAA0B;AACxBG,QAAAA,eAAe,CAACE,UAAD,EAAaR,KAAK,CAACU,KAAnB,CAAf;AACD,OAFD,MAEO;AACLC,QAAAA,OAAO,CAACC,IAAR,CAAaV,cAAb;AACD;AACF,KARI;AAULW,IAAAA,QAAQ,EAAE,MAAM;AACd;;AACA,UAAIV,oBAAJ,EAA0B;AACxBG,QAAAA,eAAe,CAACE,UAAD,EAAaR,KAAK,CAACc,MAAnB,CAAf;AACD,OAFD,MAEO;AACLH,QAAAA,OAAO,CAACC,IAAR,CAAaV,cAAb;AACD;AACF,KAjBI;AAmBLa,IAAAA,IAAI,EAAE,MAAM;AACV;;AACA,UAAIZ,oBAAJ,EAA0B;AACxBG,QAAAA,eAAe,CAACE,UAAD,EAAaR,KAAK,CAACgB,MAAnB,CAAf;AACD,OAFD,MAEO;AACLL,QAAAA,OAAO,CAACC,IAAR,CAAaV,cAAb;AACD;AACF,KA1BI;AA4BLe,IAAAA,GAAG,EAAE,MAAM;AACT;;AACA,UAAId,oBAAJ,EAA0B;AACxBG,QAAAA,eAAe,CAACE,UAAD,EAAaR,KAAK,CAACkB,GAAnB,CAAf;AACD,OAFD,MAEO;AACLP,QAAAA,OAAO,CAACC,IAAR,CAAaV,cAAb;AACD;AACF;AAnCI,GAAP;AAqCD;;AAED,OAAO,MAAMiB,mBAAmB,GAAG;AACjCZ,EAAAA;AADiC,CAA5B","sourcesContent":["import { Reanimated } from './reanimatedWrapper';\nimport { State } from '../../State';\nimport { tagMessage } from '../../utils';\n\nexport interface GestureStateManagerType {\n begin: () => void;\n activate: () => void;\n fail: () => void;\n end: () => void;\n}\n\nconst warningMessage = tagMessage(\n 'react-native-reanimated is required in order to use synchronous state management'\n);\n\n// check if reanimated module is available, but look for useSharedValue as conditional\n// require of reanimated can sometimes return content of `utils.ts` file (?)\nconst REANIMATED_AVAILABLE = Reanimated?.useSharedValue !== undefined;\nconst setGestureState = Reanimated?.setGestureState;\n\nfunction create(handlerTag: number): GestureStateManagerType {\n 'worklet';\n return {\n begin: () => {\n 'worklet';\n if (REANIMATED_AVAILABLE) {\n setGestureState(handlerTag, State.BEGAN);\n } else {\n console.warn(warningMessage);\n }\n },\n\n activate: () => {\n 'worklet';\n if (REANIMATED_AVAILABLE) {\n setGestureState(handlerTag, State.ACTIVE);\n } else {\n console.warn(warningMessage);\n }\n },\n\n fail: () => {\n 'worklet';\n if (REANIMATED_AVAILABLE) {\n setGestureState(handlerTag, State.FAILED);\n } else {\n console.warn(warningMessage);\n }\n },\n\n end: () => {\n 'worklet';\n if (REANIMATED_AVAILABLE) {\n setGestureState(handlerTag, State.END);\n } else {\n console.warn(warningMessage);\n }\n },\n };\n}\n\nexport const GestureStateManager = {\n create,\n};\n"]}
|
@@ -4,7 +4,7 @@ import { State } from '../../State';
|
|
4
4
|
import { Direction } from '../constants';
|
5
5
|
import GestureHandler from './GestureHandler';
|
6
6
|
const DEFAULT_MAX_DURATION_MS = 800;
|
7
|
-
const DEFAULT_MIN_ACCEPTABLE_DELTA =
|
7
|
+
const DEFAULT_MIN_ACCEPTABLE_DELTA = 32;
|
8
8
|
const DEFAULT_DIRECTION = Direction.RIGHT;
|
9
9
|
const DEFAULT_NUMBER_OF_TOUCHES_REQUIRED = 1;
|
10
10
|
export default class FlingGestureHandler extends GestureHandler {
|
@@ -128,13 +128,11 @@ export default class FlingGestureHandler extends GestureHandler {
|
|
128
128
|
}
|
129
129
|
|
130
130
|
onUp(event) {
|
131
|
-
this.
|
132
|
-
|
133
|
-
if (this.currentState !== State.BEGAN) {
|
134
|
-
return;
|
131
|
+
if (this.currentState === State.BEGAN) {
|
132
|
+
this.endFling();
|
135
133
|
}
|
136
134
|
|
137
|
-
this.
|
135
|
+
this.tracker.removeFromTracker(event.pointerId);
|
138
136
|
}
|
139
137
|
|
140
138
|
activate(force) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["FlingGestureHandler.ts"],"names":["State","Direction","GestureHandler","DEFAULT_MAX_DURATION_MS","DEFAULT_MIN_ACCEPTABLE_DELTA","DEFAULT_DIRECTION","RIGHT","DEFAULT_NUMBER_OF_TOUCHES_REQUIRED","FlingGestureHandler","NaN","init","ref","propsRef","updateGestureConfig","enabled","props","config","direction","numberOfPointers","numberOfPointersRequired","startFling","startX","tracker","getLastX","keyPointer","startY","getLastY","begin","maxNumberOfPointersSimultaneously","delayTimeout","setTimeout","fail","maxDurationMs","tryEndFling","minAcceptableDelta","LEFT","UP","DOWN","clearTimeout","activate","endFling","onPointerDown","event","addToTracker","pointerId","newPointerAction","onPointerAdd","currentState","UNDETERMINED","BEGAN","getTrackedPointersCount","onPointerMove","track","onPointerUp","onUp","onPointerRemove","removeFromTracker","force","end","resetConfig"],"mappings":";;AAAA,SAASA,KAAT,QAAsB,aAAtB;AACA,SAASC,SAAT,QAA0B,cAA1B;AAGA,OAAOC,cAAP,MAA2B,kBAA3B;AAEA,MAAMC,uBAAuB,GAAG,GAAhC;AACA,MAAMC,4BAA4B,GAAG,
|
1
|
+
{"version":3,"sources":["FlingGestureHandler.ts"],"names":["State","Direction","GestureHandler","DEFAULT_MAX_DURATION_MS","DEFAULT_MIN_ACCEPTABLE_DELTA","DEFAULT_DIRECTION","RIGHT","DEFAULT_NUMBER_OF_TOUCHES_REQUIRED","FlingGestureHandler","NaN","init","ref","propsRef","updateGestureConfig","enabled","props","config","direction","numberOfPointers","numberOfPointersRequired","startFling","startX","tracker","getLastX","keyPointer","startY","getLastY","begin","maxNumberOfPointersSimultaneously","delayTimeout","setTimeout","fail","maxDurationMs","tryEndFling","minAcceptableDelta","LEFT","UP","DOWN","clearTimeout","activate","endFling","onPointerDown","event","addToTracker","pointerId","newPointerAction","onPointerAdd","currentState","UNDETERMINED","BEGAN","getTrackedPointersCount","onPointerMove","track","onPointerUp","onUp","onPointerRemove","removeFromTracker","force","end","resetConfig"],"mappings":"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","sourcesContent":["import { State } from '../../State';\nimport { Direction } from '../constants';\nimport { AdaptedEvent, Config } from '../interfaces';\n\nimport GestureHandler from './GestureHandler';\n\nconst DEFAULT_MAX_DURATION_MS = 800;\nconst DEFAULT_MIN_ACCEPTABLE_DELTA = 32;\nconst DEFAULT_DIRECTION = Direction.RIGHT;\nconst DEFAULT_NUMBER_OF_TOUCHES_REQUIRED = 1;\n\nexport default class FlingGestureHandler extends GestureHandler {\n private numberOfPointersRequired = DEFAULT_NUMBER_OF_TOUCHES_REQUIRED;\n private direction = DEFAULT_DIRECTION;\n\n private maxDurationMs = DEFAULT_MAX_DURATION_MS;\n private minAcceptableDelta = DEFAULT_MIN_ACCEPTABLE_DELTA;\n private delayTimeout!: number;\n\n private startX = 0;\n private startY = 0;\n\n private maxNumberOfPointersSimultaneously = 0;\n private keyPointer = NaN;\n\n public init(ref: number, propsRef: React.RefObject<unknown>): void {\n super.init(ref, propsRef);\n }\n\n public updateGestureConfig({ enabled = true, ...props }: Config): void {\n super.updateGestureConfig({ enabled: enabled, ...props });\n\n if (this.config.direction) {\n this.direction = this.config.direction;\n }\n\n if (this.config.numberOfPointers) {\n this.numberOfPointersRequired = this.config.numberOfPointers;\n }\n }\n\n private startFling(): void {\n this.startX = this.tracker.getLastX(this.keyPointer);\n this.startY = this.tracker.getLastY(this.keyPointer);\n\n this.begin();\n\n this.maxNumberOfPointersSimultaneously = 1;\n\n this.delayTimeout = setTimeout(() => this.fail(), this.maxDurationMs);\n }\n\n private tryEndFling(): boolean {\n if (\n this.maxNumberOfPointersSimultaneously ===\n this.numberOfPointersRequired &&\n ((this.direction & Direction.RIGHT &&\n this.tracker.getLastX(this.keyPointer) - this.startX >\n this.minAcceptableDelta) ||\n (this.direction & Direction.LEFT &&\n this.startX - this.tracker.getLastX(this.keyPointer) >\n this.minAcceptableDelta) ||\n (this.direction & Direction.UP &&\n this.startY - this.tracker.getLastY(this.keyPointer) >\n this.minAcceptableDelta) ||\n (this.direction & Direction.DOWN &&\n this.tracker.getLastY(this.keyPointer) - this.startY >\n this.minAcceptableDelta))\n ) {\n clearTimeout(this.delayTimeout);\n this.activate();\n\n return true;\n }\n\n return false;\n }\n\n private endFling() {\n if (!this.tryEndFling()) {\n this.fail();\n }\n }\n\n protected onPointerDown(event: AdaptedEvent): void {\n this.tracker.addToTracker(event);\n this.keyPointer = event.pointerId;\n\n super.onPointerDown(event);\n this.newPointerAction();\n }\n\n protected onPointerAdd(event: AdaptedEvent): void {\n this.tracker.addToTracker(event);\n super.onPointerAdd(event);\n this.newPointerAction();\n }\n\n private newPointerAction(): void {\n if (this.currentState === State.UNDETERMINED) {\n this.startFling();\n }\n\n if (this.currentState !== State.BEGAN) {\n return;\n }\n\n this.tryEndFling();\n\n if (\n this.tracker.getTrackedPointersCount() >\n this.maxNumberOfPointersSimultaneously\n ) {\n this.maxNumberOfPointersSimultaneously =\n this.tracker.getTrackedPointersCount();\n }\n }\n\n protected onPointerMove(event: AdaptedEvent): void {\n this.tracker.track(event);\n\n if (this.currentState !== State.BEGAN) {\n return;\n }\n\n this.tryEndFling();\n\n super.onPointerMove(event);\n }\n\n protected onPointerUp(event: AdaptedEvent): void {\n super.onPointerUp(event);\n this.onUp(event);\n\n this.keyPointer = NaN;\n }\n\n protected onPointerRemove(event: AdaptedEvent): void {\n super.onPointerRemove(event);\n this.onUp(event);\n }\n\n private onUp(event: AdaptedEvent): void {\n if (this.currentState === State.BEGAN) {\n this.endFling();\n }\n\n this.tracker.removeFromTracker(event.pointerId);\n }\n\n public activate(force?: boolean): void {\n super.activate(force);\n this.end();\n }\n\n protected resetConfig(): void {\n super.resetConfig();\n this.numberOfPointersRequired = DEFAULT_NUMBER_OF_TOUCHES_REQUIRED;\n this.direction = DEFAULT_DIRECTION;\n }\n}\n"]}
|
@@ -3,6 +3,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
|
3
3
|
import { EventTypes, PointerType } from '../interfaces';
|
4
4
|
import EventManager from './EventManager';
|
5
5
|
import { isPointerInBounds } from '../utils';
|
6
|
+
const POINTER_CAPTURE_EXCLUDE_LIST = new Set(['SELECT', 'INPUT']);
|
6
7
|
export default class PointerEventManager extends EventManager {
|
7
8
|
constructor(...args) {
|
8
9
|
super(...args);
|
@@ -26,7 +27,7 @@ export default class PointerEventManager extends EventManager {
|
|
26
27
|
const adaptedEvent = this.mapEvent(event, EventTypes.DOWN);
|
27
28
|
const target = event.target;
|
28
29
|
|
29
|
-
if (target
|
30
|
+
if (!POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)) {
|
30
31
|
target.setPointerCapture(adaptedEvent.pointerId);
|
31
32
|
}
|
32
33
|
|
@@ -56,7 +57,7 @@ export default class PointerEventManager extends EventManager {
|
|
56
57
|
const adaptedEvent = this.mapEvent(event, EventTypes.UP);
|
57
58
|
const target = event.target;
|
58
59
|
|
59
|
-
if (target
|
60
|
+
if (!POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)) {
|
60
61
|
target.releasePointerCapture(adaptedEvent.pointerId);
|
61
62
|
}
|
62
63
|
|
@@ -89,7 +90,7 @@ export default class PointerEventManager extends EventManager {
|
|
89
90
|
// pointer moves until it succeeds.
|
90
91
|
// God, I do love web development.
|
91
92
|
|
92
|
-
if (!target.hasPointerCapture(event.pointerId) && target
|
93
|
+
if (!target.hasPointerCapture(event.pointerId) && !POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)) {
|
93
94
|
target.setPointerCapture(event.pointerId);
|
94
95
|
}
|
95
96
|
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["PointerEventManager.ts"],"names":["EventTypes","PointerType","EventManager","isPointerInBounds","PointerEventManager","Set","setListeners","view","addEventListener","event","pointerType","TOUCH","x","clientX","y","clientY","adaptedEvent","mapEvent","DOWN","target","HTMLDivElement","setPointerCapture","pointerId","markAsInBounds","trackedPointers","add","activePointersCounter","eventType","ADDITIONAL_POINTER_DOWN","onPointerAdd","onPointerDown","UP","releasePointerCapture","markAsOutOfBounds","delete","ADDITIONAL_POINTER_UP","onPointerRemove","onPointerUp","MOVE","hasPointerCapture","inBounds","pointerIndex","pointersInBounds","indexOf","ENTER","onPointerEnter","onPointerMove","LEAVE","onPointerLeave","onPointerOutOfBounds","CANCEL","onPointerCancel","clear","onPointerMoveOver","onPointerMoveOut","has","offsetX","offsetY","buttons","time","timeStamp","resetManager"],"mappings":";;AAAA,SAAuBA,UAAvB,EAAmCC,WAAnC,QAAsD,eAAtD;AACA,OAAOC,YAAP,MAAyB,gBAAzB;AACA,SAASC,iBAAT,QAAkC,UAAlC;AAEA,eAAe,MAAMC,mBAAN,SAAkCF,YAAlC,CAA4D;AAAA;AAAA;;AAAA,6CAC/C,IAAIG,GAAJ,EAD+C;AAAA;;AAGlEC,EAAAA,YAAY,GAAS;AAC1B,SAAKC,IAAL,CAAUC,gBAAV,CAA2B,aAA3B,EAA2CC,KAAD,IAA+B;AACvE,UAAIA,KAAK,CAACC,WAAN,KAAsBT,WAAW,CAACU,KAAtC,EAA6C;AAC3C;AACD;;AACD,UACE,CAACR,iBAAiB,CAAC,KAAKI,IAAN,EAAY;AAAEK,QAAAA,CAAC,EAAEH,KAAK,CAACI,OAAX;AAAoBC,QAAAA,CAAC,EAAEL,KAAK,CAACM;AAA7B,OAAZ,CADpB,EAEE;AACA;AACD;;AAED,YAAMC,YAA0B,GAAG,KAAKC,QAAL,CAAcR,KAAd,EAAqBT,UAAU,CAACkB,IAAhC,CAAnC;AACA,YAAMC,MAAM,GAAGV,KAAK,CAACU,MAArB;;AAEA,UAAIA,MAAM,YAAYC,cAAtB,EAAsC;AACpCD,QAAAA,MAAM,CAACE,iBAAP,CAAyBL,YAAY,CAACM,SAAtC;AACD;;AAED,WAAKC,cAAL,CAAoBP,YAAY,CAACM,SAAjC;AACA,WAAKE,eAAL,CAAqBC,GAArB,CAAyBT,YAAY,CAACM,SAAtC;;AAEA,UAAI,EAAE,KAAKI,qBAAP,GAA+B,CAAnC,EAAsC;AACpCV,QAAAA,YAAY,CAACW,SAAb,GAAyB3B,UAAU,CAAC4B,uBAApC;AACA,aAAKC,YAAL,CAAkBb,YAAlB;AACD,OAHD,MAGO;AACL,aAAKc,aAAL,CAAmBd,YAAnB;AACD;AACF,KA1BD;AA4BA,SAAKT,IAAL,CAAUC,gBAAV,CAA2B,WAA3B,EAAyCC,KAAD,IAA+B;AACrE,UAAIA,KAAK,CAACC,WAAN,KAAsBT,WAAW,CAACU,KAAtC,EAA6C;AAC3C;AACD,OAHoE,CAKrE;AACA;AACA;AACA;;;AACA,UAAI,KAAKe,qBAAL,KAA+B,CAAnC,EAAsC;AACpC;AACD;;AAED,YAAMV,YAA0B,GAAG,KAAKC,QAAL,CAAcR,KAAd,EAAqBT,UAAU,CAAC+B,EAAhC,CAAnC;AACA,YAAMZ,MAAM,GAAGV,KAAK,CAACU,MAArB;;AAEA,UAAIA,MAAM,YAAYC,cAAtB,EAAsC;AACpCD,QAAAA,MAAM,CAACa,qBAAP,CAA6BhB,YAAY,CAACM,SAA1C;AACD;;AAED,WAAKW,iBAAL,CAAuBjB,YAAY,CAACM,SAApC;AACA,WAAKE,eAAL,CAAqBU,MAArB,CAA4BlB,YAAY,CAACM,SAAzC;;AAEA,UAAI,EAAE,KAAKI,qBAAP,GAA+B,CAAnC,EAAsC;AACpCV,QAAAA,YAAY,CAACW,SAAb,GAAyB3B,UAAU,CAACmC,qBAApC;AACA,aAAKC,eAAL,CAAqBpB,YAArB;AACD,OAHD,MAGO;AACL,aAAKqB,WAAL,CAAiBrB,YAAjB;AACD;AACF,KA7BD;AA+BA,SAAKT,IAAL,CAAUC,gBAAV,CAA2B,aAA3B,EAA2CC,KAAD,IAA+B;AACvE,UAAIA,KAAK,CAACC,WAAN,KAAsBT,WAAW,CAACU,KAAtC,EAA6C;AAC3C;AACD;;AAED,YAAMK,YAA0B,GAAG,KAAKC,QAAL,CAAcR,KAAd,EAAqBT,UAAU,CAACsC,IAAhC,CAAnC;AACA,YAAMnB,MAAM,GAAGV,KAAK,CAACU,MAArB,CANuE,CAQvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,UACE,CAACA,MAAM,CAACoB,iBAAP,CAAyB9B,KAAK,CAACa,SAA/B,CAAD,IACAH,MAAM,YAAYC,cAFpB,EAGE;AACAD,QAAAA,MAAM,CAACE,iBAAP,CAAyBZ,KAAK,CAACa,SAA/B;AACD;;AAED,YAAMkB,QAAiB,GAAGrC,iBAAiB,CAAC,KAAKI,IAAN,EAAY;AACrDK,QAAAA,CAAC,EAAEI,YAAY,CAACJ,CADqC;AAErDE,QAAAA,CAAC,EAAEE,YAAY,CAACF;AAFqC,OAAZ,CAA3C;AAKA,YAAM2B,YAAoB,GAAG,KAAKC,gBAAL,CAAsBC,OAAtB,CAC3B3B,YAAY,CAACM,SADc,CAA7B;;AAIA,UAAIkB,QAAJ,EAAc;AACZ,YAAIC,YAAY,GAAG,CAAnB,EAAsB;AACpBzB,UAAAA,YAAY,CAACW,SAAb,GAAyB3B,UAAU,CAAC4C,KAApC;AACA,eAAKC,cAAL,CAAoB7B,YAApB;AACA,eAAKO,cAAL,CAAoBP,YAAY,CAACM,SAAjC;AACD,SAJD,MAIO;AACL,eAAKwB,aAAL,CAAmB9B,YAAnB;AACD;AACF,OARD,MAQO;AACL,YAAIyB,YAAY,IAAI,CAApB,EAAuB;AACrBzB,UAAAA,YAAY,CAACW,SAAb,GAAyB3B,UAAU,CAAC+C,KAApC;AACA,eAAKC,cAAL,CAAoBhC,YAApB;AACA,eAAKiB,iBAAL,CAAuBjB,YAAY,CAACM,SAApC;AACD,SAJD,MAIO;AACL,eAAK2B,oBAAL,CAA0BjC,YAA1B;AACD;AACF;AACF,KArDD;AAuDA,SAAKT,IAAL,CAAUC,gBAAV,CAA2B,eAA3B,EAA6CC,KAAD,IAA+B;AACzE,UAAIA,KAAK,CAACC,WAAN,KAAsBT,WAAW,CAACU,KAAtC,EAA6C;AAC3C;AACD;;AAED,YAAMK,YAA0B,GAAG,KAAKC,QAAL,CACjCR,KADiC,EAEjCT,UAAU,CAACkD,MAFsB,CAAnC;AAKA,WAAKC,eAAL,CAAqBnC,YAArB;AACA,WAAKiB,iBAAL,CAAuBjB,YAAY,CAACM,SAApC;AACA,WAAKI,qBAAL,GAA6B,CAA7B;AACA,WAAKF,eAAL,CAAqB4B,KAArB;AACD,KAdD,EAnH0B,CAmI1B;AACA;AACA;AACA;;AAEA,SAAK7C,IAAL,CAAUC,gBAAV,CAA2B,cAA3B,EAA4CC,KAAD,IAA+B;AACxE,UAAIA,KAAK,CAACC,WAAN,KAAsBT,WAAW,CAACU,KAAtC,EAA6C;AAC3C;AACD;;AAED,YAAMK,YAA0B,GAAG,KAAKC,QAAL,CAAcR,KAAd,EAAqBT,UAAU,CAAC4C,KAAhC,CAAnC;AAEA,WAAKS,iBAAL,CAAuBrC,YAAvB;AACD,KARD;AAUA,SAAKT,IAAL,CAAUC,gBAAV,CAA2B,cAA3B,EAA4CC,KAAD,IAA+B;AACxE,UAAIA,KAAK,CAACC,WAAN,KAAsBT,WAAW,CAACU,KAAtC,EAA6C;AAC3C;AACD;;AAED,YAAMK,YAA0B,GAAG,KAAKC,QAAL,CAAcR,KAAd,EAAqBT,UAAU,CAAC+C,KAAhC,CAAnC;AAEA,WAAKO,gBAAL,CAAsBtC,YAAtB;AACD,KARD;AAUA,SAAKT,IAAL,CAAUC,gBAAV,CACE,oBADF,EAEGC,KAAD,IAA+B;AAC7B,YAAMO,YAA0B,GAAG,KAAKC,QAAL,CACjCR,KADiC,EAEjCT,UAAU,CAACkD,MAFsB,CAAnC;;AAKA,UAAI,KAAK1B,eAAL,CAAqB+B,GAArB,CAAyBvC,YAAY,CAACM,SAAtC,CAAJ,EAAsD;AACpD;AACA;AACA,aAAK6B,eAAL,CAAqBnC,YAArB;AAEA,aAAKU,qBAAL,GAA6B,CAA7B;AACA,aAAKF,eAAL,CAAqB4B,KAArB;AACD;AACF,KAhBH;AAkBD;;AAESnC,EAAAA,QAAQ,CAACR,KAAD,EAAsBkB,SAAtB,EAA2D;AAC3E,WAAO;AACLf,MAAAA,CAAC,EAAEH,KAAK,CAACI,OADJ;AAELC,MAAAA,CAAC,EAAEL,KAAK,CAACM,OAFJ;AAGLyC,MAAAA,OAAO,EAAE/C,KAAK,CAAC+C,OAHV;AAILC,MAAAA,OAAO,EAAEhD,KAAK,CAACgD,OAJV;AAKLnC,MAAAA,SAAS,EAAEb,KAAK,CAACa,SALZ;AAMLK,MAAAA,SAAS,EAAEA,SANN;AAOLjB,MAAAA,WAAW,EAAED,KAAK,CAACC,WAPd;AAQLgD,MAAAA,OAAO,EAAEjD,KAAK,CAACiD,OARV;AASLC,MAAAA,IAAI,EAAElD,KAAK,CAACmD;AATP,KAAP;AAWD;;AAEMC,EAAAA,YAAY,GAAS;AAC1B,UAAMA,YAAN;AACA,SAAKrC,eAAL,CAAqB4B,KAArB;AACD;;AApMwE","sourcesContent":["import { AdaptedEvent, EventTypes, PointerType } from '../interfaces';\nimport EventManager from './EventManager';\nimport { isPointerInBounds } from '../utils';\n\nexport default class PointerEventManager extends EventManager<HTMLElement> {\n private trackedPointers = new Set<number>();\n\n public setListeners(): void {\n this.view.addEventListener('pointerdown', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n if (\n !isPointerInBounds(this.view, { x: event.clientX, y: event.clientY })\n ) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.DOWN);\n const target = event.target as HTMLElement;\n\n if (target instanceof HTMLDivElement) {\n target.setPointerCapture(adaptedEvent.pointerId);\n }\n\n this.markAsInBounds(adaptedEvent.pointerId);\n this.trackedPointers.add(adaptedEvent.pointerId);\n\n if (++this.activePointersCounter > 1) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;\n this.onPointerAdd(adaptedEvent);\n } else {\n this.onPointerDown(adaptedEvent);\n }\n });\n\n this.view.addEventListener('pointerup', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n // When we call reset on gesture handlers, it also resets their event managers\n // In some handlers (like RotationGestureHandler) reset is called before all pointers leave view\n // This means, that activePointersCounter will be set to 0, while there are still remaining pointers on view\n // Removing them will end in activePointersCounter going below 0, therefore handlers won't behave properly\n if (this.activePointersCounter === 0) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.UP);\n const target = event.target as HTMLElement;\n\n if (target instanceof HTMLDivElement) {\n target.releasePointerCapture(adaptedEvent.pointerId);\n }\n\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n this.trackedPointers.delete(adaptedEvent.pointerId);\n\n if (--this.activePointersCounter > 0) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_UP;\n this.onPointerRemove(adaptedEvent);\n } else {\n this.onPointerUp(adaptedEvent);\n }\n });\n\n this.view.addEventListener('pointermove', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.MOVE);\n const target = event.target as HTMLElement;\n\n // You may be wondering why are we setting pointer capture here, when we\n // already set it in `pointerdown` handler. Well, that's a great question,\n // for which I don't have an answer. Specification (https://www.w3.org/TR/pointerevents2/#dom-element-setpointercapture)\n // says that the requirement for `setPointerCapture` to work is that pointer\n // must be in 'active buttons state`, otherwise it will fail silently, which\n // is lovely. Obviously, when `pointerdown` is fired, one of the buttons\n // (when using mouse) is pressed, but that doesn't mean that `setPointerCapture`\n // will succeed, for some reason. Since it fails silently, we don't actually know\n // if it worked or not (there's `gotpointercapture` event, but the complexity of\n // incorporating it here seems stupid), so we just call it again here, every time\n // pointer moves until it succeeds.\n // God, I do love web development.\n if (\n !target.hasPointerCapture(event.pointerId) &&\n target instanceof HTMLDivElement\n ) {\n target.setPointerCapture(event.pointerId);\n }\n\n const inBounds: boolean = isPointerInBounds(this.view, {\n x: adaptedEvent.x,\n y: adaptedEvent.y,\n });\n\n const pointerIndex: number = this.pointersInBounds.indexOf(\n adaptedEvent.pointerId\n );\n\n if (inBounds) {\n if (pointerIndex < 0) {\n adaptedEvent.eventType = EventTypes.ENTER;\n this.onPointerEnter(adaptedEvent);\n this.markAsInBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerMove(adaptedEvent);\n }\n } else {\n if (pointerIndex >= 0) {\n adaptedEvent.eventType = EventTypes.LEAVE;\n this.onPointerLeave(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerOutOfBounds(adaptedEvent);\n }\n }\n });\n\n this.view.addEventListener('pointercancel', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.CANCEL\n );\n\n this.onPointerCancel(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n this.activePointersCounter = 0;\n this.trackedPointers.clear();\n });\n\n // onPointerEnter and onPointerLeave are triggered by a custom logic responsible for\n // handling shouldCancelWhenOutside flag, and are unreliable unless the pointer is down.\n // We therefore use pointerenter and pointerleave events to handle the hover gesture,\n // mapping them to onPointerMoveOver and onPointerMoveOut respectively.\n\n this.view.addEventListener('pointerenter', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.ENTER);\n\n this.onPointerMoveOver(adaptedEvent);\n });\n\n this.view.addEventListener('pointerleave', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.LEAVE);\n\n this.onPointerMoveOut(adaptedEvent);\n });\n\n this.view.addEventListener(\n 'lostpointercapture',\n (event: PointerEvent): void => {\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.CANCEL\n );\n\n if (this.trackedPointers.has(adaptedEvent.pointerId)) {\n // in some cases the `pointerup` event is not fired, but `lostpointercapture` is\n // we simulate the `pointercancel` event here to make sure the gesture handler stops tracking it\n this.onPointerCancel(adaptedEvent);\n\n this.activePointersCounter = 0;\n this.trackedPointers.clear();\n }\n }\n );\n }\n\n protected mapEvent(event: PointerEvent, eventType: EventTypes): AdaptedEvent {\n return {\n x: event.clientX,\n y: event.clientY,\n offsetX: event.offsetX,\n offsetY: event.offsetY,\n pointerId: event.pointerId,\n eventType: eventType,\n pointerType: event.pointerType as PointerType,\n buttons: event.buttons,\n time: event.timeStamp,\n };\n }\n\n public resetManager(): void {\n super.resetManager();\n this.trackedPointers.clear();\n }\n}\n"]}
|
1
|
+
{"version":3,"sources":["PointerEventManager.ts"],"names":["EventTypes","PointerType","EventManager","isPointerInBounds","POINTER_CAPTURE_EXCLUDE_LIST","Set","PointerEventManager","setListeners","view","addEventListener","event","pointerType","TOUCH","x","clientX","y","clientY","adaptedEvent","mapEvent","DOWN","target","has","tagName","setPointerCapture","pointerId","markAsInBounds","trackedPointers","add","activePointersCounter","eventType","ADDITIONAL_POINTER_DOWN","onPointerAdd","onPointerDown","UP","releasePointerCapture","markAsOutOfBounds","delete","ADDITIONAL_POINTER_UP","onPointerRemove","onPointerUp","MOVE","hasPointerCapture","inBounds","pointerIndex","pointersInBounds","indexOf","ENTER","onPointerEnter","onPointerMove","LEAVE","onPointerLeave","onPointerOutOfBounds","CANCEL","onPointerCancel","clear","onPointerMoveOver","onPointerMoveOut","offsetX","offsetY","buttons","time","timeStamp","resetManager"],"mappings":"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","sourcesContent":["import { AdaptedEvent, EventTypes, PointerType } from '../interfaces';\nimport EventManager from './EventManager';\nimport { isPointerInBounds } from '../utils';\n\nconst POINTER_CAPTURE_EXCLUDE_LIST = new Set<string>(['SELECT', 'INPUT']);\n\nexport default class PointerEventManager extends EventManager<HTMLElement> {\n private trackedPointers = new Set<number>();\n\n public setListeners(): void {\n this.view.addEventListener('pointerdown', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n if (\n !isPointerInBounds(this.view, { x: event.clientX, y: event.clientY })\n ) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.DOWN);\n const target = event.target as HTMLElement;\n\n if (!POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)) {\n target.setPointerCapture(adaptedEvent.pointerId);\n }\n\n this.markAsInBounds(adaptedEvent.pointerId);\n this.trackedPointers.add(adaptedEvent.pointerId);\n\n if (++this.activePointersCounter > 1) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;\n this.onPointerAdd(adaptedEvent);\n } else {\n this.onPointerDown(adaptedEvent);\n }\n });\n\n this.view.addEventListener('pointerup', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n // When we call reset on gesture handlers, it also resets their event managers\n // In some handlers (like RotationGestureHandler) reset is called before all pointers leave view\n // This means, that activePointersCounter will be set to 0, while there are still remaining pointers on view\n // Removing them will end in activePointersCounter going below 0, therefore handlers won't behave properly\n if (this.activePointersCounter === 0) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.UP);\n const target = event.target as HTMLElement;\n\n if (!POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)) {\n target.releasePointerCapture(adaptedEvent.pointerId);\n }\n\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n this.trackedPointers.delete(adaptedEvent.pointerId);\n\n if (--this.activePointersCounter > 0) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_UP;\n this.onPointerRemove(adaptedEvent);\n } else {\n this.onPointerUp(adaptedEvent);\n }\n });\n\n this.view.addEventListener('pointermove', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.MOVE);\n const target = event.target as HTMLElement;\n\n // You may be wondering why are we setting pointer capture here, when we\n // already set it in `pointerdown` handler. Well, that's a great question,\n // for which I don't have an answer. Specification (https://www.w3.org/TR/pointerevents2/#dom-element-setpointercapture)\n // says that the requirement for `setPointerCapture` to work is that pointer\n // must be in 'active buttons state`, otherwise it will fail silently, which\n // is lovely. Obviously, when `pointerdown` is fired, one of the buttons\n // (when using mouse) is pressed, but that doesn't mean that `setPointerCapture`\n // will succeed, for some reason. Since it fails silently, we don't actually know\n // if it worked or not (there's `gotpointercapture` event, but the complexity of\n // incorporating it here seems stupid), so we just call it again here, every time\n // pointer moves until it succeeds.\n // God, I do love web development.\n if (\n !target.hasPointerCapture(event.pointerId) &&\n !POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)\n ) {\n target.setPointerCapture(event.pointerId);\n }\n\n const inBounds: boolean = isPointerInBounds(this.view, {\n x: adaptedEvent.x,\n y: adaptedEvent.y,\n });\n\n const pointerIndex: number = this.pointersInBounds.indexOf(\n adaptedEvent.pointerId\n );\n\n if (inBounds) {\n if (pointerIndex < 0) {\n adaptedEvent.eventType = EventTypes.ENTER;\n this.onPointerEnter(adaptedEvent);\n this.markAsInBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerMove(adaptedEvent);\n }\n } else {\n if (pointerIndex >= 0) {\n adaptedEvent.eventType = EventTypes.LEAVE;\n this.onPointerLeave(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerOutOfBounds(adaptedEvent);\n }\n }\n });\n\n this.view.addEventListener('pointercancel', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.CANCEL\n );\n\n this.onPointerCancel(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n this.activePointersCounter = 0;\n this.trackedPointers.clear();\n });\n\n // onPointerEnter and onPointerLeave are triggered by a custom logic responsible for\n // handling shouldCancelWhenOutside flag, and are unreliable unless the pointer is down.\n // We therefore use pointerenter and pointerleave events to handle the hover gesture,\n // mapping them to onPointerMoveOver and onPointerMoveOut respectively.\n\n this.view.addEventListener('pointerenter', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.ENTER);\n\n this.onPointerMoveOver(adaptedEvent);\n });\n\n this.view.addEventListener('pointerleave', (event: PointerEvent): void => {\n if (event.pointerType === PointerType.TOUCH) {\n return;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.LEAVE);\n\n this.onPointerMoveOut(adaptedEvent);\n });\n\n this.view.addEventListener(\n 'lostpointercapture',\n (event: PointerEvent): void => {\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.CANCEL\n );\n\n if (this.trackedPointers.has(adaptedEvent.pointerId)) {\n // in some cases the `pointerup` event is not fired, but `lostpointercapture` is\n // we simulate the `pointercancel` event here to make sure the gesture handler stops tracking it\n this.onPointerCancel(adaptedEvent);\n\n this.activePointersCounter = 0;\n this.trackedPointers.clear();\n }\n }\n );\n }\n\n protected mapEvent(event: PointerEvent, eventType: EventTypes): AdaptedEvent {\n return {\n x: event.clientX,\n y: event.clientY,\n offsetX: event.offsetX,\n offsetY: event.offsetY,\n pointerId: event.pointerId,\n eventType: eventType,\n pointerType: event.pointerType as PointerType,\n buttons: event.buttons,\n time: event.timeStamp,\n };\n }\n\n public resetManager(): void {\n super.resetManager();\n this.trackedPointers.clear();\n }\n}\n"]}
|
@@ -1,3 +1,3 @@
|
|
1
1
|
import * as React from 'react';
|
2
2
|
import { StyleProp, ViewStyle } from 'react-native';
|
3
|
-
export default function gestureHandlerRootHOC<P extends
|
3
|
+
export default function gestureHandlerRootHOC<P extends object>(Component: React.ComponentType<P>, containerStyles?: StyleProp<ViewStyle>): React.ComponentType<P>;
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import * as React from 'react';
|
2
2
|
import GenericTouchable, { GenericTouchableProps } from './GenericTouchable';
|
3
|
-
export type TouchableWithoutFeedbackProps =
|
3
|
+
export type TouchableWithoutFeedbackProps = GenericTouchableProps;
|
4
4
|
declare const TouchableWithoutFeedback: React.ForwardRefExoticComponent<GenericTouchableProps & {
|
5
5
|
children?: React.ReactNode;
|
6
6
|
} & React.RefAttributes<GenericTouchable>>;
|
@@ -4,6 +4,8 @@ export interface GestureStateManagerType {
|
|
4
4
|
fail: () => void;
|
5
5
|
end: () => void;
|
6
6
|
}
|
7
|
+
declare function create(handlerTag: number): GestureStateManagerType;
|
7
8
|
export declare const GestureStateManager: {
|
8
|
-
create
|
9
|
+
create: typeof create;
|
9
10
|
};
|
11
|
+
export {};
|
package/package.json
CHANGED
@@ -3,9 +3,7 @@ import { StyleSheet, StyleProp, ViewStyle } from 'react-native';
|
|
3
3
|
import hoistNonReactStatics from 'hoist-non-react-statics';
|
4
4
|
import GestureHandlerRootView from './GestureHandlerRootView';
|
5
5
|
|
6
|
-
export default function gestureHandlerRootHOC<
|
7
|
-
P extends Record<string, unknown>
|
8
|
-
>(
|
6
|
+
export default function gestureHandlerRootHOC<P extends object>(
|
9
7
|
Component: React.ComponentType<P>,
|
10
8
|
containerStyles?: StyleProp<ViewStyle>
|
11
9
|
): React.ComponentType<P> {
|
@@ -2,11 +2,11 @@ import * as React from 'react';
|
|
2
2
|
import { PropsWithChildren } from 'react';
|
3
3
|
import GenericTouchable, { GenericTouchableProps } from './GenericTouchable';
|
4
4
|
|
5
|
-
export type TouchableWithoutFeedbackProps =
|
5
|
+
export type TouchableWithoutFeedbackProps = GenericTouchableProps;
|
6
6
|
|
7
7
|
const TouchableWithoutFeedback = React.forwardRef<
|
8
|
-
|
9
|
-
PropsWithChildren<
|
8
|
+
GenericTouchable,
|
9
|
+
PropsWithChildren<TouchableWithoutFeedbackProps>
|
10
10
|
>((props, ref) => <GenericTouchable ref={ref} {...props} />);
|
11
11
|
|
12
12
|
TouchableWithoutFeedback.defaultProps = GenericTouchable.defaultProps;
|
@@ -18,45 +18,47 @@ const warningMessage = tagMessage(
|
|
18
18
|
const REANIMATED_AVAILABLE = Reanimated?.useSharedValue !== undefined;
|
19
19
|
const setGestureState = Reanimated?.setGestureState;
|
20
20
|
|
21
|
+
function create(handlerTag: number): GestureStateManagerType {
|
22
|
+
'worklet';
|
23
|
+
return {
|
24
|
+
begin: () => {
|
25
|
+
'worklet';
|
26
|
+
if (REANIMATED_AVAILABLE) {
|
27
|
+
setGestureState(handlerTag, State.BEGAN);
|
28
|
+
} else {
|
29
|
+
console.warn(warningMessage);
|
30
|
+
}
|
31
|
+
},
|
32
|
+
|
33
|
+
activate: () => {
|
34
|
+
'worklet';
|
35
|
+
if (REANIMATED_AVAILABLE) {
|
36
|
+
setGestureState(handlerTag, State.ACTIVE);
|
37
|
+
} else {
|
38
|
+
console.warn(warningMessage);
|
39
|
+
}
|
40
|
+
},
|
41
|
+
|
42
|
+
fail: () => {
|
43
|
+
'worklet';
|
44
|
+
if (REANIMATED_AVAILABLE) {
|
45
|
+
setGestureState(handlerTag, State.FAILED);
|
46
|
+
} else {
|
47
|
+
console.warn(warningMessage);
|
48
|
+
}
|
49
|
+
},
|
50
|
+
|
51
|
+
end: () => {
|
52
|
+
'worklet';
|
53
|
+
if (REANIMATED_AVAILABLE) {
|
54
|
+
setGestureState(handlerTag, State.END);
|
55
|
+
} else {
|
56
|
+
console.warn(warningMessage);
|
57
|
+
}
|
58
|
+
},
|
59
|
+
};
|
60
|
+
}
|
61
|
+
|
21
62
|
export const GestureStateManager = {
|
22
|
-
create
|
23
|
-
'worklet';
|
24
|
-
return {
|
25
|
-
begin: () => {
|
26
|
-
'worklet';
|
27
|
-
if (REANIMATED_AVAILABLE) {
|
28
|
-
setGestureState(handlerTag, State.BEGAN);
|
29
|
-
} else {
|
30
|
-
console.warn(warningMessage);
|
31
|
-
}
|
32
|
-
},
|
33
|
-
|
34
|
-
activate: () => {
|
35
|
-
'worklet';
|
36
|
-
if (REANIMATED_AVAILABLE) {
|
37
|
-
setGestureState(handlerTag, State.ACTIVE);
|
38
|
-
} else {
|
39
|
-
console.warn(warningMessage);
|
40
|
-
}
|
41
|
-
},
|
42
|
-
|
43
|
-
fail: () => {
|
44
|
-
'worklet';
|
45
|
-
if (REANIMATED_AVAILABLE) {
|
46
|
-
setGestureState(handlerTag, State.FAILED);
|
47
|
-
} else {
|
48
|
-
console.warn(warningMessage);
|
49
|
-
}
|
50
|
-
},
|
51
|
-
|
52
|
-
end: () => {
|
53
|
-
'worklet';
|
54
|
-
if (REANIMATED_AVAILABLE) {
|
55
|
-
setGestureState(handlerTag, State.END);
|
56
|
-
} else {
|
57
|
-
console.warn(warningMessage);
|
58
|
-
}
|
59
|
-
},
|
60
|
-
};
|
61
|
-
},
|
63
|
+
create,
|
62
64
|
};
|
@@ -5,7 +5,7 @@ import { AdaptedEvent, Config } from '../interfaces';
|
|
5
5
|
import GestureHandler from './GestureHandler';
|
6
6
|
|
7
7
|
const DEFAULT_MAX_DURATION_MS = 800;
|
8
|
-
const DEFAULT_MIN_ACCEPTABLE_DELTA =
|
8
|
+
const DEFAULT_MIN_ACCEPTABLE_DELTA = 32;
|
9
9
|
const DEFAULT_DIRECTION = Direction.RIGHT;
|
10
10
|
const DEFAULT_NUMBER_OF_TOUCHES_REQUIRED = 1;
|
11
11
|
|
@@ -141,11 +141,11 @@ export default class FlingGestureHandler extends GestureHandler {
|
|
141
141
|
}
|
142
142
|
|
143
143
|
private onUp(event: AdaptedEvent): void {
|
144
|
-
this.
|
145
|
-
|
146
|
-
return;
|
144
|
+
if (this.currentState === State.BEGAN) {
|
145
|
+
this.endFling();
|
147
146
|
}
|
148
|
-
|
147
|
+
|
148
|
+
this.tracker.removeFromTracker(event.pointerId);
|
149
149
|
}
|
150
150
|
|
151
151
|
public activate(force?: boolean): void {
|
@@ -2,6 +2,8 @@ import { AdaptedEvent, EventTypes, PointerType } from '../interfaces';
|
|
2
2
|
import EventManager from './EventManager';
|
3
3
|
import { isPointerInBounds } from '../utils';
|
4
4
|
|
5
|
+
const POINTER_CAPTURE_EXCLUDE_LIST = new Set<string>(['SELECT', 'INPUT']);
|
6
|
+
|
5
7
|
export default class PointerEventManager extends EventManager<HTMLElement> {
|
6
8
|
private trackedPointers = new Set<number>();
|
7
9
|
|
@@ -19,7 +21,7 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
|
|
19
21
|
const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.DOWN);
|
20
22
|
const target = event.target as HTMLElement;
|
21
23
|
|
22
|
-
if (target
|
24
|
+
if (!POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)) {
|
23
25
|
target.setPointerCapture(adaptedEvent.pointerId);
|
24
26
|
}
|
25
27
|
|
@@ -50,7 +52,7 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
|
|
50
52
|
const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.UP);
|
51
53
|
const target = event.target as HTMLElement;
|
52
54
|
|
53
|
-
if (target
|
55
|
+
if (!POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)) {
|
54
56
|
target.releasePointerCapture(adaptedEvent.pointerId);
|
55
57
|
}
|
56
58
|
|
@@ -87,7 +89,7 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
|
|
87
89
|
// God, I do love web development.
|
88
90
|
if (
|
89
91
|
!target.hasPointerCapture(event.pointerId) &&
|
90
|
-
target
|
92
|
+
!POINTER_CAPTURE_EXCLUDE_LIST.has(target.tagName)
|
91
93
|
) {
|
92
94
|
target.setPointerCapture(event.pointerId);
|
93
95
|
}
|