react-native-gesture-handler 2.19.0 → 2.20.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.
- package/android/build.gradle +7 -12
- package/android/fabric/src/main/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +1 -1
- package/android/paper/src/main/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureUtils.kt +1 -0
- package/android/src/main/java/com/swmansion/gesturehandler/core/HoverGestureHandler.kt +11 -0
- package/android/src/main/java/com/swmansion/gesturehandler/core/PanGestureHandler.kt +8 -0
- package/android/src/main/java/com/swmansion/gesturehandler/core/StylusData.kt +103 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +24 -15
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/HoverGestureHandlerEventDataBuilder.kt +7 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/PanGestureHandlerEventDataBuilder.kt +7 -0
- package/android/src/main/jni/CMakeLists.txt +18 -9
- package/apple/Handlers/RNLongPressHandler.m +2 -0
- package/apple/Handlers/RNPanHandler.m +57 -7
- package/apple/Handlers/RNRotationHandler.m +1 -1
- package/apple/RNGHStylusData.h +77 -0
- package/apple/RNGHStylusData.m +37 -0
- package/apple/RNGestureHandlerButtonComponentView.mm +35 -0
- package/apple/RNGestureHandlerEvents.h +3 -1
- package/apple/RNGestureHandlerEvents.m +11 -3
- package/lib/commonjs/components/GestureButtons.js +5 -1
- package/lib/commonjs/components/GestureButtons.js.map +1 -1
- package/lib/commonjs/components/GestureComponents.js.map +1 -1
- package/lib/commonjs/components/Pressable/Pressable.js +5 -14
- package/lib/commonjs/components/Pressable/Pressable.js.map +1 -1
- package/lib/commonjs/components/Pressable/utils.js +1 -23
- package/lib/commonjs/components/Pressable/utils.js.map +1 -1
- package/lib/commonjs/handlers/GestureHandlerEventPayload.js +4 -0
- package/lib/commonjs/handlers/createHandler.js +2 -1
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/hoverGesture.js.map +1 -1
- package/lib/commonjs/jestUtils/jestUtils.js +12 -4
- package/lib/commonjs/jestUtils/jestUtils.js.map +1 -1
- package/lib/commonjs/web/handlers/GestureHandler.js +1 -3
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/HoverGestureHandler.js +18 -1
- package/lib/commonjs/web/handlers/HoverGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PanGestureHandler.js +8 -1
- package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/commonjs/web/interfaces.js.map +1 -1
- package/lib/commonjs/web/tools/EventManager.js.map +1 -1
- package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js +0 -3
- package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js.map +1 -1
- package/lib/commonjs/web/tools/PointerEventManager.js +3 -37
- package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
- package/lib/commonjs/web/utils.js +173 -0
- package/lib/commonjs/web/utils.js.map +1 -1
- package/lib/module/components/GestureButtons.js +5 -1
- package/lib/module/components/GestureButtons.js.map +1 -1
- package/lib/module/components/GestureComponents.js.map +1 -1
- package/lib/module/components/Pressable/Pressable.js +7 -14
- package/lib/module/components/Pressable/Pressable.js.map +1 -1
- package/lib/module/components/Pressable/utils.js +1 -22
- package/lib/module/components/Pressable/utils.js.map +1 -1
- package/lib/module/handlers/GestureHandlerEventPayload.js +1 -1
- package/lib/module/handlers/createHandler.js +2 -1
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/gestures/gesture.js.map +1 -1
- package/lib/module/handlers/gestures/hoverGesture.js.map +1 -1
- package/lib/module/jestUtils/jestUtils.js +12 -4
- package/lib/module/jestUtils/jestUtils.js.map +1 -1
- package/lib/module/web/handlers/GestureHandler.js +1 -3
- package/lib/module/web/handlers/GestureHandler.js.map +1 -1
- package/lib/module/web/handlers/HoverGestureHandler.js +18 -1
- package/lib/module/web/handlers/HoverGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PanGestureHandler.js +8 -1
- package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/module/web/interfaces.js.map +1 -1
- package/lib/module/web/tools/EventManager.js.map +1 -1
- package/lib/module/web/tools/GestureHandlerWebDelegate.js +0 -2
- package/lib/module/web/tools/GestureHandlerWebDelegate.js.map +1 -1
- package/lib/module/web/tools/PointerEventManager.js +4 -38
- package/lib/module/web/tools/PointerEventManager.js.map +1 -1
- package/lib/module/web/utils.js +170 -0
- package/lib/module/web/utils.js.map +1 -1
- package/lib/typescript/components/GestureComponents.d.ts +1 -1
- package/lib/typescript/components/Pressable/utils.d.ts +3 -5
- package/lib/typescript/handlers/GestureHandlerEventPayload.d.ts +35 -0
- package/lib/typescript/handlers/gestures/gesture.d.ts +2 -2
- package/lib/typescript/handlers/gestures/hoverGesture.d.ts +1 -6
- package/lib/typescript/handlers/handlersRegistry.d.ts +1 -1
- package/lib/typescript/jestUtils/jestUtils.d.ts +1 -1
- package/lib/typescript/web/handlers/HoverGestureHandler.d.ts +2 -0
- package/lib/typescript/web/handlers/PanGestureHandler.d.ts +3 -1
- package/lib/typescript/web/interfaces.d.ts +8 -3
- package/lib/typescript/web/tools/EventManager.d.ts +2 -2
- package/lib/typescript/web/utils.d.ts +2 -1
- package/package.json +1 -1
- package/src/components/GestureButtons.tsx +2 -1
- package/src/components/GestureComponents.tsx +1 -1
- package/src/components/Pressable/Pressable.tsx +16 -29
- package/src/components/Pressable/utils.ts +5 -49
- package/src/handlers/GestureHandlerEventPayload.ts +42 -0
- package/src/handlers/createHandler.tsx +1 -0
- package/src/handlers/gestures/gesture.ts +3 -1
- package/src/handlers/gestures/hoverGesture.ts +1 -7
- package/src/jestUtils/jestUtils.ts +9 -1
- package/src/web/handlers/GestureHandler.ts +1 -1
- package/src/web/handlers/HoverGestureHandler.ts +16 -2
- package/src/web/handlers/PanGestureHandler.ts +10 -1
- package/src/web/interfaces.ts +9 -3
- package/src/web/tools/EventManager.ts +2 -4
- package/src/web/tools/GestureHandlerWebDelegate.ts +0 -2
- package/src/web/tools/PointerEventManager.ts +2 -38
- package/src/web/utils.ts +174 -1
- package/lib/commonjs/web/tools/TouchEventManager.js +0 -164
- package/lib/commonjs/web/tools/TouchEventManager.js.map +0 -1
- package/lib/module/web/tools/TouchEventManager.js +0 -149
- package/lib/module/web/tools/TouchEventManager.js.map +0 -1
- package/lib/typescript/web/tools/TouchEventManager.d.ts +0 -11
- package/src/web/tools/TouchEventManager.ts +0 -175
package/lib/module/web/utils.js
CHANGED
|
@@ -39,4 +39,174 @@ export function calculateViewScale(view) {
|
|
|
39
39
|
|
|
40
40
|
return resultScales;
|
|
41
41
|
}
|
|
42
|
+
export function tryExtractStylusData(event) {
|
|
43
|
+
const pointerType = PointerTypeMapping.get(event.pointerType);
|
|
44
|
+
|
|
45
|
+
if (pointerType !== PointerType.STYLUS) {
|
|
46
|
+
return;
|
|
47
|
+
} // @ts-ignore This property exists (https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent#instance_properties)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
const eventAzimuthAngle = event.azimuthAngle; // @ts-ignore This property exists (https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent#instance_properties)
|
|
51
|
+
|
|
52
|
+
const eventAltitudeAngle = event.altitudeAngle;
|
|
53
|
+
|
|
54
|
+
if (event.tiltX === 0 && event.tiltY === 0) {
|
|
55
|
+
// If we are in this branch, it means that either tilt properties are not supported and we have to calculate them from altitude and azimuth angles,
|
|
56
|
+
// or stylus is perpendicular to the screen and we can use altitude / azimuth instead of tilt
|
|
57
|
+
// If azimuth and altitude are undefined in this branch, it means that we are either perpendicular to the screen,
|
|
58
|
+
// or that none of the position sets is supported. In that case, we can treat stylus as perpendicular
|
|
59
|
+
if (eventAzimuthAngle === undefined || eventAltitudeAngle === undefined) {
|
|
60
|
+
return {
|
|
61
|
+
tiltX: 0,
|
|
62
|
+
tiltY: 0,
|
|
63
|
+
azimuthAngle: Math.PI / 2,
|
|
64
|
+
altitudeAngle: Math.PI / 2,
|
|
65
|
+
pressure: event.pressure
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const {
|
|
70
|
+
tiltX,
|
|
71
|
+
tiltY
|
|
72
|
+
} = spherical2tilt(eventAltitudeAngle, eventAzimuthAngle);
|
|
73
|
+
return {
|
|
74
|
+
tiltX,
|
|
75
|
+
tiltY,
|
|
76
|
+
azimuthAngle: eventAzimuthAngle,
|
|
77
|
+
altitudeAngle: eventAltitudeAngle,
|
|
78
|
+
pressure: event.pressure
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const {
|
|
83
|
+
altitudeAngle,
|
|
84
|
+
azimuthAngle
|
|
85
|
+
} = tilt2spherical(event.tiltX, event.tiltY);
|
|
86
|
+
return {
|
|
87
|
+
tiltX: event.tiltX,
|
|
88
|
+
tiltY: event.tiltY,
|
|
89
|
+
azimuthAngle,
|
|
90
|
+
altitudeAngle,
|
|
91
|
+
pressure: event.pressure
|
|
92
|
+
};
|
|
93
|
+
} // `altitudeAngle` and `azimuthAngle` are experimental properties, which are not supported on Firefox and Safari.
|
|
94
|
+
// Given that, we use `tilt` properties and algorithm that converts one value to another.
|
|
95
|
+
//
|
|
96
|
+
// Source: https://w3c.github.io/pointerevents/#converting-between-tiltx-tilty-and-altitudeangle-azimuthangle
|
|
97
|
+
|
|
98
|
+
function tilt2spherical(tiltX, tiltY) {
|
|
99
|
+
const tiltXrad = tiltX * Math.PI / 180;
|
|
100
|
+
const tiltYrad = tiltY * Math.PI / 180; // calculate azimuth angle
|
|
101
|
+
|
|
102
|
+
let azimuthAngle = 0;
|
|
103
|
+
|
|
104
|
+
if (tiltX === 0) {
|
|
105
|
+
if (tiltY > 0) {
|
|
106
|
+
azimuthAngle = Math.PI / 2;
|
|
107
|
+
} else if (tiltY < 0) {
|
|
108
|
+
azimuthAngle = 3 * Math.PI / 2;
|
|
109
|
+
}
|
|
110
|
+
} else if (tiltY === 0) {
|
|
111
|
+
if (tiltX < 0) {
|
|
112
|
+
azimuthAngle = Math.PI;
|
|
113
|
+
}
|
|
114
|
+
} else if (Math.abs(tiltX) === 90 || Math.abs(tiltY) === 90) {
|
|
115
|
+
// not enough information to calculate azimuth
|
|
116
|
+
azimuthAngle = 0;
|
|
117
|
+
} else {
|
|
118
|
+
// Non-boundary case: neither tiltX nor tiltY is equal to 0 or +-90
|
|
119
|
+
const tanX = Math.tan(tiltXrad);
|
|
120
|
+
const tanY = Math.tan(tiltYrad);
|
|
121
|
+
azimuthAngle = Math.atan2(tanY, tanX);
|
|
122
|
+
|
|
123
|
+
if (azimuthAngle < 0) {
|
|
124
|
+
azimuthAngle += 2 * Math.PI;
|
|
125
|
+
}
|
|
126
|
+
} // calculate altitude angle
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
let altitudeAngle = 0;
|
|
130
|
+
|
|
131
|
+
if (Math.abs(tiltX) === 90 || Math.abs(tiltY) === 90) {
|
|
132
|
+
altitudeAngle = 0;
|
|
133
|
+
} else if (tiltX === 0) {
|
|
134
|
+
altitudeAngle = Math.PI / 2 - Math.abs(tiltYrad);
|
|
135
|
+
} else if (tiltY === 0) {
|
|
136
|
+
altitudeAngle = Math.PI / 2 - Math.abs(tiltXrad);
|
|
137
|
+
} else {
|
|
138
|
+
// Non-boundary case: neither tiltX nor tiltY is equal to 0 or +-90
|
|
139
|
+
altitudeAngle = Math.atan(1.0 / Math.sqrt(Math.pow(Math.tan(tiltXrad), 2) + Math.pow(Math.tan(tiltYrad), 2)));
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
return {
|
|
143
|
+
altitudeAngle: altitudeAngle,
|
|
144
|
+
azimuthAngle: azimuthAngle
|
|
145
|
+
};
|
|
146
|
+
} // If we are on a platform that doesn't support `tiltX` and `tiltY`, we have to calculate them from `altitude` and `azimuth` angles.
|
|
147
|
+
//
|
|
148
|
+
// Source: https://w3c.github.io/pointerevents/#converting-between-tiltx-tilty-and-altitudeangle-azimuthangle
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
function spherical2tilt(altitudeAngle, azimuthAngle) {
|
|
152
|
+
const radToDeg = 180 / Math.PI;
|
|
153
|
+
let tiltXrad = 0;
|
|
154
|
+
let tiltYrad = 0;
|
|
155
|
+
|
|
156
|
+
if (altitudeAngle === 0) {
|
|
157
|
+
// the pen is in the X-Y plane
|
|
158
|
+
if (azimuthAngle === 0 || azimuthAngle === 2 * Math.PI) {
|
|
159
|
+
// pen is on positive X axis
|
|
160
|
+
tiltXrad = Math.PI / 2;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
if (azimuthAngle === Math.PI / 2) {
|
|
164
|
+
// pen is on positive Y axis
|
|
165
|
+
tiltYrad = Math.PI / 2;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
if (azimuthAngle === Math.PI) {
|
|
169
|
+
// pen is on negative X axis
|
|
170
|
+
tiltXrad = -Math.PI / 2;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (azimuthAngle === 3 * Math.PI / 2) {
|
|
174
|
+
// pen is on negative Y axis
|
|
175
|
+
tiltYrad = -Math.PI / 2;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
if (azimuthAngle > 0 && azimuthAngle < Math.PI / 2) {
|
|
179
|
+
tiltXrad = Math.PI / 2;
|
|
180
|
+
tiltYrad = Math.PI / 2;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
if (azimuthAngle > Math.PI / 2 && azimuthAngle < Math.PI) {
|
|
184
|
+
tiltXrad = -Math.PI / 2;
|
|
185
|
+
tiltYrad = Math.PI / 2;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
if (azimuthAngle > Math.PI && azimuthAngle < 3 * Math.PI / 2) {
|
|
189
|
+
tiltXrad = -Math.PI / 2;
|
|
190
|
+
tiltYrad = -Math.PI / 2;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
if (azimuthAngle > 3 * Math.PI / 2 && azimuthAngle < 2 * Math.PI) {
|
|
194
|
+
tiltXrad = Math.PI / 2;
|
|
195
|
+
tiltYrad = -Math.PI / 2;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
if (altitudeAngle !== 0) {
|
|
200
|
+
const tanAlt = Math.tan(altitudeAngle);
|
|
201
|
+
tiltXrad = Math.atan(Math.cos(azimuthAngle) / tanAlt);
|
|
202
|
+
tiltYrad = Math.atan(Math.sin(azimuthAngle) / tanAlt);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
const tiltX = Math.round(tiltXrad * radToDeg);
|
|
206
|
+
const tiltY = Math.round(tiltYrad * radToDeg);
|
|
207
|
+
return {
|
|
208
|
+
tiltX,
|
|
209
|
+
tiltY
|
|
210
|
+
};
|
|
211
|
+
}
|
|
42
212
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["utils.ts"],"names":["PointerType","isPointerInBounds","view","x","y","rect","getBoundingClientRect","left","right","top","bottom","PointerTypeMapping","Map","MOUSE","TOUCH","STYLUS","OTHER","degToRad","degrees","Math","PI","coneToDeviation","cos","calculateViewScale","styles","getComputedStyle","resultScales","scaleX","scaleY","scale","undefined","scales","split","parseFloat","matrixElements","RegExp","exec","transform","matrixElementsArray"],"mappings":"AAAA,SAASA,WAAT,QAA4B,gBAA5B;AAGA,OAAO,SAASC,iBAAT,CAA2BC,IAA3B,EAA8C;AAAEC,EAAAA,CAAF;AAAKC,EAAAA;AAAL,CAA9C,EAAwE;AAC7E,QAAMC,IAAa,GAAGH,IAAI,CAACI,qBAAL,EAAtB;AAEA,SAAOH,CAAC,IAAIE,IAAI,CAACE,IAAV,IAAkBJ,CAAC,IAAIE,IAAI,CAACG,KAA5B,IAAqCJ,CAAC,IAAIC,IAAI,CAACI,GAA/C,IAAsDL,CAAC,IAAIC,IAAI,CAACK,MAAvE;AACD;AAED,OAAO,MAAMC,kBAAkB,GAAG,IAAIC,GAAJ,CAA6B,CAC7D,CAAC,OAAD,EAAUZ,WAAW,CAACa,KAAtB,CAD6D,EAE7D,CAAC,OAAD,EAAUb,WAAW,CAACc,KAAtB,CAF6D,EAG7D,CAAC,KAAD,EAAQd,WAAW,CAACe,MAApB,CAH6D,EAI7D,CAAC,MAAD,EAASf,WAAW,CAACgB,KAArB,CAJ6D,CAA7B,CAA3B;AAOP,OAAO,MAAMC,QAAQ,GAAIC,OAAD,IAAsBA,OAAO,GAAGC,IAAI,CAACC,EAAhB,GAAsB,GAA5D;AAEP,OAAO,MAAMC,eAAe,GAAIH,OAAD,IAC7BC,IAAI,CAACG,GAAL,CAASL,QAAQ,CAACC,OAAO,GAAG,CAAX,CAAjB,CADK;AAGP,OAAO,SAASK,kBAAT,CAA4BrB,IAA5B,EAA+C;AAAA;;AACpD,QAAMsB,MAAM,GAAGC,gBAAgB,CAACvB,IAAD,CAA/B;AAEA,QAAMwB,YAAY,GAAG;AACnBC,IAAAA,MAAM,EAAE,CADW;AAEnBC,IAAAA,MAAM,EAAE;AAFW,GAArB,CAHoD,CAQpD;;AACA,MAAIJ,MAAM,CAACK,KAAP,KAAiBC,SAAjB,IAA8BN,MAAM,CAACK,KAAP,KAAiB,MAAnD,EAA2D;AACzD,UAAME,MAAM,GAAGP,MAAM,CAACK,KAAP,CAAaG,KAAb,CAAmB,GAAnB,CAAf;;AAEA,QAAID,MAAM,CAAC,CAAD,CAAV,EAAe;AACbL,MAAAA,YAAY,CAACC,MAAb,GAAsBM,UAAU,CAACF,MAAM,CAAC,CAAD,CAAP,CAAhC;AACD;;AAEDL,IAAAA,YAAY,CAACE,MAAb,GAAsBG,MAAM,CAAC,CAAD,CAAN,GAClBE,UAAU,CAACF,MAAM,CAAC,CAAD,CAAP,CADQ,GAElBE,UAAU,CAACF,MAAM,CAAC,CAAD,CAAP,CAFd;AAGD,GAnBmD,CAqBpD;;;AACA,QAAMG,cAAc,mBAAG,IAAIC,MAAJ,CAAW,gBAAX,EAA6BC,IAA7B,CACrBZ,MAAM,CAACa,SADc,CAAH,iDAAG,aAEnB,CAFmB,CAAvB;;AAIA,MAAIH,cAAJ,EAAoB;AAClB,UAAMI,mBAAmB,GAAGJ,cAAc,CAACF,KAAf,CAAqB,IAArB,CAA5B;AAEAN,IAAAA,YAAY,CAACC,MAAb,IAAuBM,UAAU,CAACK,mBAAmB,CAAC,CAAD,CAApB,CAAjC;AACAZ,IAAAA,YAAY,CAACE,MAAb,IAAuBK,UAAU,CAACK,mBAAmB,CAAC,CAAD,CAApB,CAAjC;AACD;;AAED,SAAOZ,YAAP;AACD","sourcesContent":["import { PointerType } from '../PointerType';\nimport { Point } from './interfaces';\n\nexport function isPointerInBounds(view: HTMLElement, { x, y }: Point): boolean {\n const rect: DOMRect = view.getBoundingClientRect();\n\n return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;\n}\n\nexport const PointerTypeMapping = new Map<string, PointerType>([\n ['mouse', PointerType.MOUSE],\n ['touch', PointerType.TOUCH],\n ['pen', PointerType.STYLUS],\n ['none', PointerType.OTHER],\n]);\n\nexport const degToRad = (degrees: number) => (degrees * Math.PI) / 180;\n\nexport const coneToDeviation = (degrees: number) =>\n Math.cos(degToRad(degrees / 2));\n\nexport function calculateViewScale(view: HTMLElement) {\n const styles = getComputedStyle(view);\n\n const resultScales = {\n scaleX: 1,\n scaleY: 1,\n };\n\n // Get scales from scale property\n if (styles.scale !== undefined && styles.scale !== 'none') {\n const scales = styles.scale.split(' ');\n\n if (scales[0]) {\n resultScales.scaleX = parseFloat(scales[0]);\n }\n\n resultScales.scaleY = scales[1]\n ? parseFloat(scales[1])\n : parseFloat(scales[0]);\n }\n\n // Get scales from transform property\n const matrixElements = new RegExp(/matrix\\((.+)\\)/).exec(\n styles.transform\n )?.[1];\n\n if (matrixElements) {\n const matrixElementsArray = matrixElements.split(', ');\n\n resultScales.scaleX *= parseFloat(matrixElementsArray[0]);\n resultScales.scaleY *= parseFloat(matrixElementsArray[3]);\n }\n\n return resultScales;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["utils.ts"],"names":["PointerType","isPointerInBounds","view","x","y","rect","getBoundingClientRect","left","right","top","bottom","PointerTypeMapping","Map","MOUSE","TOUCH","STYLUS","OTHER","degToRad","degrees","Math","PI","coneToDeviation","cos","calculateViewScale","styles","getComputedStyle","resultScales","scaleX","scaleY","scale","undefined","scales","split","parseFloat","matrixElements","RegExp","exec","transform","matrixElementsArray","tryExtractStylusData","event","pointerType","get","eventAzimuthAngle","azimuthAngle","eventAltitudeAngle","altitudeAngle","tiltX","tiltY","pressure","spherical2tilt","tilt2spherical","tiltXrad","tiltYrad","abs","tanX","tan","tanY","atan2","atan","sqrt","pow","radToDeg","tanAlt","sin","round"],"mappings":"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","sourcesContent":["import { PointerType } from '../PointerType';\nimport type { Point, StylusData } from './interfaces';\n\nexport function isPointerInBounds(view: HTMLElement, { x, y }: Point): boolean {\n const rect: DOMRect = view.getBoundingClientRect();\n\n return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;\n}\n\nexport const PointerTypeMapping = new Map<string, PointerType>([\n ['mouse', PointerType.MOUSE],\n ['touch', PointerType.TOUCH],\n ['pen', PointerType.STYLUS],\n ['none', PointerType.OTHER],\n]);\n\nexport const degToRad = (degrees: number) => (degrees * Math.PI) / 180;\n\nexport const coneToDeviation = (degrees: number) =>\n Math.cos(degToRad(degrees / 2));\n\nexport function calculateViewScale(view: HTMLElement) {\n const styles = getComputedStyle(view);\n\n const resultScales = {\n scaleX: 1,\n scaleY: 1,\n };\n\n // Get scales from scale property\n if (styles.scale !== undefined && styles.scale !== 'none') {\n const scales = styles.scale.split(' ');\n\n if (scales[0]) {\n resultScales.scaleX = parseFloat(scales[0]);\n }\n\n resultScales.scaleY = scales[1]\n ? parseFloat(scales[1])\n : parseFloat(scales[0]);\n }\n\n // Get scales from transform property\n const matrixElements = new RegExp(/matrix\\((.+)\\)/).exec(\n styles.transform\n )?.[1];\n\n if (matrixElements) {\n const matrixElementsArray = matrixElements.split(', ');\n\n resultScales.scaleX *= parseFloat(matrixElementsArray[0]);\n resultScales.scaleY *= parseFloat(matrixElementsArray[3]);\n }\n\n return resultScales;\n}\n\nexport function tryExtractStylusData(\n event: PointerEvent\n): StylusData | undefined {\n const pointerType = PointerTypeMapping.get(event.pointerType);\n\n if (pointerType !== PointerType.STYLUS) {\n return;\n }\n\n // @ts-ignore This property exists (https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent#instance_properties)\n const eventAzimuthAngle: number | undefined = event.azimuthAngle;\n // @ts-ignore This property exists (https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent#instance_properties)\n const eventAltitudeAngle: number | undefined = event.altitudeAngle;\n\n if (event.tiltX === 0 && event.tiltY === 0) {\n // If we are in this branch, it means that either tilt properties are not supported and we have to calculate them from altitude and azimuth angles,\n // or stylus is perpendicular to the screen and we can use altitude / azimuth instead of tilt\n\n // If azimuth and altitude are undefined in this branch, it means that we are either perpendicular to the screen,\n // or that none of the position sets is supported. In that case, we can treat stylus as perpendicular\n if (eventAzimuthAngle === undefined || eventAltitudeAngle === undefined) {\n return {\n tiltX: 0,\n tiltY: 0,\n azimuthAngle: Math.PI / 2,\n altitudeAngle: Math.PI / 2,\n pressure: event.pressure,\n };\n }\n\n const { tiltX, tiltY } = spherical2tilt(\n eventAltitudeAngle,\n eventAzimuthAngle\n );\n\n return {\n tiltX,\n tiltY,\n azimuthAngle: eventAzimuthAngle,\n altitudeAngle: eventAltitudeAngle,\n pressure: event.pressure,\n };\n }\n\n const { altitudeAngle, azimuthAngle } = tilt2spherical(\n event.tiltX,\n event.tiltY\n );\n\n return {\n tiltX: event.tiltX,\n tiltY: event.tiltY,\n azimuthAngle,\n altitudeAngle,\n pressure: event.pressure,\n };\n}\n\n// `altitudeAngle` and `azimuthAngle` are experimental properties, which are not supported on Firefox and Safari.\n// Given that, we use `tilt` properties and algorithm that converts one value to another.\n//\n// Source: https://w3c.github.io/pointerevents/#converting-between-tiltx-tilty-and-altitudeangle-azimuthangle\nfunction tilt2spherical(tiltX: number, tiltY: number) {\n const tiltXrad = (tiltX * Math.PI) / 180;\n const tiltYrad = (tiltY * Math.PI) / 180;\n\n // calculate azimuth angle\n let azimuthAngle = 0;\n\n if (tiltX === 0) {\n if (tiltY > 0) {\n azimuthAngle = Math.PI / 2;\n } else if (tiltY < 0) {\n azimuthAngle = (3 * Math.PI) / 2;\n }\n } else if (tiltY === 0) {\n if (tiltX < 0) {\n azimuthAngle = Math.PI;\n }\n } else if (Math.abs(tiltX) === 90 || Math.abs(tiltY) === 90) {\n // not enough information to calculate azimuth\n azimuthAngle = 0;\n } else {\n // Non-boundary case: neither tiltX nor tiltY is equal to 0 or +-90\n const tanX = Math.tan(tiltXrad);\n const tanY = Math.tan(tiltYrad);\n\n azimuthAngle = Math.atan2(tanY, tanX);\n if (azimuthAngle < 0) {\n azimuthAngle += 2 * Math.PI;\n }\n }\n\n // calculate altitude angle\n let altitudeAngle = 0;\n\n if (Math.abs(tiltX) === 90 || Math.abs(tiltY) === 90) {\n altitudeAngle = 0;\n } else if (tiltX === 0) {\n altitudeAngle = Math.PI / 2 - Math.abs(tiltYrad);\n } else if (tiltY === 0) {\n altitudeAngle = Math.PI / 2 - Math.abs(tiltXrad);\n } else {\n // Non-boundary case: neither tiltX nor tiltY is equal to 0 or +-90\n altitudeAngle = Math.atan(\n 1.0 /\n Math.sqrt(\n Math.pow(Math.tan(tiltXrad), 2) + Math.pow(Math.tan(tiltYrad), 2)\n )\n );\n }\n\n return { altitudeAngle: altitudeAngle, azimuthAngle: azimuthAngle };\n}\n\n// If we are on a platform that doesn't support `tiltX` and `tiltY`, we have to calculate them from `altitude` and `azimuth` angles.\n//\n// Source: https://w3c.github.io/pointerevents/#converting-between-tiltx-tilty-and-altitudeangle-azimuthangle\nfunction spherical2tilt(altitudeAngle: number, azimuthAngle: number) {\n const radToDeg = 180 / Math.PI;\n\n let tiltXrad = 0;\n let tiltYrad = 0;\n\n if (altitudeAngle === 0) {\n // the pen is in the X-Y plane\n if (azimuthAngle === 0 || azimuthAngle === 2 * Math.PI) {\n // pen is on positive X axis\n tiltXrad = Math.PI / 2;\n }\n if (azimuthAngle === Math.PI / 2) {\n // pen is on positive Y axis\n tiltYrad = Math.PI / 2;\n }\n if (azimuthAngle === Math.PI) {\n // pen is on negative X axis\n tiltXrad = -Math.PI / 2;\n }\n if (azimuthAngle === (3 * Math.PI) / 2) {\n // pen is on negative Y axis\n tiltYrad = -Math.PI / 2;\n }\n if (azimuthAngle > 0 && azimuthAngle < Math.PI / 2) {\n tiltXrad = Math.PI / 2;\n tiltYrad = Math.PI / 2;\n }\n if (azimuthAngle > Math.PI / 2 && azimuthAngle < Math.PI) {\n tiltXrad = -Math.PI / 2;\n tiltYrad = Math.PI / 2;\n }\n if (azimuthAngle > Math.PI && azimuthAngle < (3 * Math.PI) / 2) {\n tiltXrad = -Math.PI / 2;\n tiltYrad = -Math.PI / 2;\n }\n if (azimuthAngle > (3 * Math.PI) / 2 && azimuthAngle < 2 * Math.PI) {\n tiltXrad = Math.PI / 2;\n tiltYrad = -Math.PI / 2;\n }\n }\n\n if (altitudeAngle !== 0) {\n const tanAlt = Math.tan(altitudeAngle);\n\n tiltXrad = Math.atan(Math.cos(azimuthAngle) / tanAlt);\n tiltYrad = Math.atan(Math.sin(azimuthAngle) / tanAlt);\n }\n\n const tiltX = Math.round(tiltXrad * radToDeg);\n const tiltY = Math.round(tiltYrad * radToDeg);\n\n return { tiltX, tiltY };\n}\n"]}
|
|
@@ -17,6 +17,6 @@ export declare const DrawerLayoutAndroid: React.ForwardRefExoticComponent<RNDraw
|
|
|
17
17
|
children?: React.ReactNode;
|
|
18
18
|
} & NativeViewGestureHandlerProps & React.RefAttributes<React.ComponentType<any>>>;
|
|
19
19
|
export type DrawerLayoutAndroid = typeof DrawerLayoutAndroid & RNDrawerLayoutAndroid;
|
|
20
|
-
export declare const FlatList: <ItemT = any>(props: React.PropsWithChildren<RNFlatListProps<ItemT> & React.RefAttributes<FlatList<ItemT>> & NativeViewGestureHandlerProps>, ref: React.ForwardedRef<FlatList<ItemT>>) => ReactElement | null;
|
|
20
|
+
export declare const FlatList: <ItemT = any>(props: React.PropsWithChildren<Omit<RNFlatListProps<ItemT>, "renderScrollComponent"> & React.RefAttributes<FlatList<ItemT>> & NativeViewGestureHandlerProps>, ref: React.ForwardedRef<FlatList<ItemT>>) => ReactElement | null;
|
|
21
21
|
export type FlatList<ItemT = any> = typeof FlatList & RNFlatList<ItemT>;
|
|
22
22
|
export {};
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { Insets
|
|
2
|
-
import { LongPressGestureHandlerEventPayload } from '../../handlers/GestureHandlerEventPayload';
|
|
1
|
+
import { Insets } from 'react-native';
|
|
2
|
+
import { HoverGestureHandlerEventPayload, LongPressGestureHandlerEventPayload } from '../../handlers/GestureHandlerEventPayload';
|
|
3
3
|
import { TouchData, GestureStateChangeEvent, GestureTouchEvent } from '../../handlers/gestureHandlerCommon';
|
|
4
|
-
import { HoverGestureHandlerEventPayload } from '../../handlers/gestures/hoverGesture';
|
|
5
4
|
import { PressableEvent } from './PressableProps';
|
|
6
5
|
declare const numberAsInset: (value: number) => Insets;
|
|
7
6
|
declare const addInsets: (a: Insets, b: Insets) => Insets;
|
|
@@ -11,5 +10,4 @@ declare const isTouchWithinInset: (dimensions: {
|
|
|
11
10
|
}, inset: Insets, touch?: TouchData) => boolean;
|
|
12
11
|
declare const gestureToPressableEvent: (event: GestureStateChangeEvent<HoverGestureHandlerEventPayload | LongPressGestureHandlerEventPayload>) => PressableEvent;
|
|
13
12
|
declare const gestureTouchToPressableEvent: (event: GestureTouchEvent) => PressableEvent;
|
|
14
|
-
|
|
15
|
-
export { numberAsInset, addInsets, isTouchWithinInset, gestureToPressableEvent, gestureTouchToPressableEvent, splitStyles, };
|
|
13
|
+
export { numberAsInset, addInsets, isTouchWithinInset, gestureToPressableEvent, gestureTouchToPressableEvent, };
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { StylusData } from '../web/interfaces';
|
|
1
2
|
export type FlingGestureHandlerEventPayload = {
|
|
2
3
|
x: number;
|
|
3
4
|
y: number;
|
|
@@ -104,6 +105,10 @@ export type PanGestureHandlerEventPayload = {
|
|
|
104
105
|
* value is expressed in point units per second.
|
|
105
106
|
*/
|
|
106
107
|
velocityY: number;
|
|
108
|
+
/**
|
|
109
|
+
* Object containing additional stylus data.
|
|
110
|
+
*/
|
|
111
|
+
stylusData: StylusData | undefined;
|
|
107
112
|
};
|
|
108
113
|
export type PinchGestureHandlerEventPayload = {
|
|
109
114
|
/**
|
|
@@ -157,3 +162,33 @@ export type RotationGestureHandlerEventPayload = {
|
|
|
157
162
|
*/
|
|
158
163
|
velocity: number;
|
|
159
164
|
};
|
|
165
|
+
export type HoverGestureHandlerEventPayload = {
|
|
166
|
+
/**
|
|
167
|
+
* X coordinate of the current position of the pointer relative to the view
|
|
168
|
+
* attached to the handler. Expressed in point units.
|
|
169
|
+
*/
|
|
170
|
+
x: number;
|
|
171
|
+
/**
|
|
172
|
+
* Y coordinate of the current position of the pointer relative to the view
|
|
173
|
+
* attached to the handler. Expressed in point units.
|
|
174
|
+
*/
|
|
175
|
+
y: number;
|
|
176
|
+
/**
|
|
177
|
+
* X coordinate of the current position of the pointer relative to the window.
|
|
178
|
+
* The value is expressed in point units. It is recommended to use it instead
|
|
179
|
+
* of `x` in cases when the original view can be transformed as an
|
|
180
|
+
* effect of the gesture.
|
|
181
|
+
*/
|
|
182
|
+
absoluteX: number;
|
|
183
|
+
/**
|
|
184
|
+
* Y coordinate of the current position of the pointer relative to the window.
|
|
185
|
+
* The value is expressed in point units. It is recommended to use it instead
|
|
186
|
+
* of `y` in cases when the original view can be transformed as an
|
|
187
|
+
* effect of the gesture.
|
|
188
|
+
*/
|
|
189
|
+
absoluteY: number;
|
|
190
|
+
/**
|
|
191
|
+
* Object containing additional stylus data.
|
|
192
|
+
*/
|
|
193
|
+
stylusData: StylusData | undefined;
|
|
194
|
+
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { HitSlop, CommonGestureConfig, GestureTouchEvent, GestureStateChangeEvent, GestureUpdateEvent, ActiveCursor, MouseButton } from '../gestureHandlerCommon';
|
|
3
3
|
import { GestureStateManagerType } from './gestureStateManager';
|
|
4
|
-
import type { FlingGestureHandlerEventPayload, ForceTouchGestureHandlerEventPayload, LongPressGestureHandlerEventPayload, PanGestureHandlerEventPayload, PinchGestureHandlerEventPayload, RotationGestureHandlerEventPayload, TapGestureHandlerEventPayload, NativeViewGestureHandlerPayload } from '../GestureHandlerEventPayload';
|
|
5
|
-
export type GestureType = BaseGesture<Record<string, unknown>> | BaseGesture<Record<string, never>> | BaseGesture<TapGestureHandlerEventPayload> | BaseGesture<PanGestureHandlerEventPayload> | BaseGesture<LongPressGestureHandlerEventPayload> | BaseGesture<RotationGestureHandlerEventPayload> | BaseGesture<PinchGestureHandlerEventPayload> | BaseGesture<FlingGestureHandlerEventPayload> | BaseGesture<ForceTouchGestureHandlerEventPayload> | BaseGesture<NativeViewGestureHandlerPayload>;
|
|
4
|
+
import type { FlingGestureHandlerEventPayload, ForceTouchGestureHandlerEventPayload, LongPressGestureHandlerEventPayload, PanGestureHandlerEventPayload, PinchGestureHandlerEventPayload, RotationGestureHandlerEventPayload, TapGestureHandlerEventPayload, NativeViewGestureHandlerPayload, HoverGestureHandlerEventPayload } from '../GestureHandlerEventPayload';
|
|
5
|
+
export type GestureType = BaseGesture<Record<string, unknown>> | BaseGesture<Record<string, never>> | BaseGesture<TapGestureHandlerEventPayload> | BaseGesture<PanGestureHandlerEventPayload> | BaseGesture<LongPressGestureHandlerEventPayload> | BaseGesture<RotationGestureHandlerEventPayload> | BaseGesture<PinchGestureHandlerEventPayload> | BaseGesture<FlingGestureHandlerEventPayload> | BaseGesture<ForceTouchGestureHandlerEventPayload> | BaseGesture<NativeViewGestureHandlerPayload> | BaseGesture<HoverGestureHandlerEventPayload>;
|
|
6
6
|
export type GestureRef = number | GestureType | React.RefObject<GestureType | undefined> | React.RefObject<React.ComponentType | undefined>;
|
|
7
7
|
export interface BaseGestureConfig extends CommonGestureConfig, Record<string, unknown> {
|
|
8
8
|
ref?: React.MutableRefObject<GestureType | undefined>;
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
import { BaseGestureConfig, ContinousBaseGesture } from './gesture';
|
|
2
2
|
import { GestureUpdateEvent } from '../gestureHandlerCommon';
|
|
3
|
-
|
|
4
|
-
x: number;
|
|
5
|
-
y: number;
|
|
6
|
-
absoluteX: number;
|
|
7
|
-
absoluteY: number;
|
|
8
|
-
};
|
|
3
|
+
import type { HoverGestureHandlerEventPayload } from '../GestureHandlerEventPayload';
|
|
9
4
|
export type HoverGestureChangeEventPayload = {
|
|
10
5
|
changeX: number;
|
|
11
6
|
changeY: number;
|
|
@@ -6,7 +6,7 @@ export declare function registerOldGestureHandler(handlerTag: number, handler: G
|
|
|
6
6
|
export declare function unregisterHandler(handlerTag: number, testID?: string): void;
|
|
7
7
|
export declare function findHandler(handlerTag: number): GestureType | undefined;
|
|
8
8
|
export declare function findOldGestureHandler(handlerTag: number): GestureHandlerCallbacks | undefined;
|
|
9
|
-
export declare function findHandlerByTestID(testID: string): import("./gestures/gesture").BaseGesture<Record<string, unknown>> | import("./gestures/gesture").BaseGesture<Record<string, never>> | import("./gestures/gesture").BaseGesture<import("./GestureHandlerEventPayload").TapGestureHandlerEventPayload> | import("./gestures/gesture").BaseGesture<import("./GestureHandlerEventPayload").PanGestureHandlerEventPayload> | import("./gestures/gesture").BaseGesture<import("./GestureHandlerEventPayload").LongPressGestureHandlerEventPayload> | import("./gestures/gesture").BaseGesture<import("./GestureHandlerEventPayload").RotationGestureHandlerEventPayload> | import("./gestures/gesture").BaseGesture<import("./GestureHandlerEventPayload").PinchGestureHandlerEventPayload> | import("./gestures/gesture").BaseGesture<import("./GestureHandlerEventPayload").ForceTouchGestureHandlerEventPayload> | import("./gestures/gesture").BaseGesture<import("./GestureHandlerEventPayload").NativeViewGestureHandlerPayload> | null;
|
|
9
|
+
export declare function findHandlerByTestID(testID: string): import("./gestures/gesture").BaseGesture<Record<string, unknown>> | import("./gestures/gesture").BaseGesture<Record<string, never>> | import("./gestures/gesture").BaseGesture<import("./GestureHandlerEventPayload").TapGestureHandlerEventPayload> | import("./gestures/gesture").BaseGesture<import("./GestureHandlerEventPayload").PanGestureHandlerEventPayload> | import("./gestures/gesture").BaseGesture<import("./GestureHandlerEventPayload").LongPressGestureHandlerEventPayload> | import("./gestures/gesture").BaseGesture<import("./GestureHandlerEventPayload").RotationGestureHandlerEventPayload> | import("./gestures/gesture").BaseGesture<import("./GestureHandlerEventPayload").PinchGestureHandlerEventPayload> | import("./gestures/gesture").BaseGesture<import("./GestureHandlerEventPayload").ForceTouchGestureHandlerEventPayload> | import("./gestures/gesture").BaseGesture<import("./GestureHandlerEventPayload").NativeViewGestureHandlerPayload> | import("./gestures/gesture").BaseGesture<import("./GestureHandlerEventPayload").HoverGestureHandlerEventPayload> | null;
|
|
10
10
|
export interface GestureHandlerCallbacks {
|
|
11
11
|
onGestureEvent: (event: GestureEvent<any>) => void;
|
|
12
12
|
onGestureStateChange: (event: HandlerStateChangeEvent<any>) => void;
|
|
@@ -26,5 +26,5 @@ type ClassComponentConstructor<P> = new (props: P) => React.Component<P, any, an
|
|
|
26
26
|
type ExtractPayloadFromProps<T> = T extends BaseGestureHandlerProps<infer TPayload> ? TPayload : never;
|
|
27
27
|
type ExtractConfig<T> = T extends BaseGesture<infer TGesturePayload> ? TGesturePayload : T extends ClassComponentConstructor<infer THandlerProps> ? ExtractPayloadFromProps<THandlerProps> : Record<string, unknown>;
|
|
28
28
|
export declare function fireGestureHandler<THandler extends AllGestures | AllHandlers>(componentOrGesture: ReactTestInstance | GestureType, eventList?: Partial<GestureHandlerTestEvent<ExtractConfig<THandler>>>[]): void;
|
|
29
|
-
export declare function getByGestureTestId(testID: string): BaseGesture<Record<string, unknown>> | BaseGesture<Record<string, never>> | BaseGesture<TapGestureHandlerEventPayload> | BaseGesture<PanGestureHandlerEventPayload> | BaseGesture<LongPressGestureHandlerEventPayload> | BaseGesture<RotationGestureHandlerEventPayload> | BaseGesture<PinchGestureHandlerEventPayload> | BaseGesture<ForceTouchGestureHandlerEventPayload> | BaseGesture<NativeViewGestureHandlerPayload>;
|
|
29
|
+
export declare function getByGestureTestId(testID: string): BaseGesture<Record<string, unknown>> | BaseGesture<Record<string, never>> | BaseGesture<TapGestureHandlerEventPayload> | BaseGesture<PanGestureHandlerEventPayload> | BaseGesture<LongPressGestureHandlerEventPayload> | BaseGesture<RotationGestureHandlerEventPayload> | BaseGesture<PinchGestureHandlerEventPayload> | BaseGesture<ForceTouchGestureHandlerEventPayload> | BaseGesture<NativeViewGestureHandlerPayload> | BaseGesture<import("../handlers/GestureHandlerEventPayload").HoverGestureHandlerEventPayload>;
|
|
30
30
|
export {};
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
import { AdaptedEvent, Config } from '../interfaces';
|
|
3
3
|
import GestureHandler from './GestureHandler';
|
|
4
4
|
export default class HoverGestureHandler extends GestureHandler {
|
|
5
|
+
private stylusData;
|
|
5
6
|
init(ref: number, propsRef: React.RefObject<unknown>): void;
|
|
7
|
+
protected transformNativeEvent(): Record<string, unknown>;
|
|
6
8
|
updateGestureConfig({ enabled, ...props }: Config): void;
|
|
7
9
|
protected onPointerMoveOver(event: AdaptedEvent): void;
|
|
8
10
|
protected onPointerMoveOut(event: AdaptedEvent): void;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import { AdaptedEvent, Config } from '../interfaces';
|
|
2
|
+
import { AdaptedEvent, Config, StylusData } from '../interfaces';
|
|
3
3
|
import GestureHandler from './GestureHandler';
|
|
4
4
|
export default class PanGestureHandler extends GestureHandler {
|
|
5
5
|
private readonly customActivationProperties;
|
|
@@ -25,6 +25,7 @@ export default class PanGestureHandler extends GestureHandler {
|
|
|
25
25
|
private offsetY;
|
|
26
26
|
private lastX;
|
|
27
27
|
private lastY;
|
|
28
|
+
private stylusData;
|
|
28
29
|
private activateAfterLongPress;
|
|
29
30
|
private activationTimeout;
|
|
30
31
|
init(ref: number, propsRef: React.RefObject<unknown>): void;
|
|
@@ -35,6 +36,7 @@ export default class PanGestureHandler extends GestureHandler {
|
|
|
35
36
|
translationY: number;
|
|
36
37
|
velocityX: number;
|
|
37
38
|
velocityY: number;
|
|
39
|
+
stylusData: StylusData | undefined;
|
|
38
40
|
};
|
|
39
41
|
private getTranslationX;
|
|
40
42
|
private getTranslationY;
|
|
@@ -102,6 +102,13 @@ export interface PropsRef {
|
|
|
102
102
|
onGestureHandlerEvent: () => void;
|
|
103
103
|
onGestureHandlerStateChange: () => void;
|
|
104
104
|
}
|
|
105
|
+
export interface StylusData {
|
|
106
|
+
tiltX: number;
|
|
107
|
+
tiltY: number;
|
|
108
|
+
azimuthAngle: number;
|
|
109
|
+
altitudeAngle: number;
|
|
110
|
+
pressure: number;
|
|
111
|
+
}
|
|
105
112
|
export interface AdaptedEvent {
|
|
106
113
|
x: number;
|
|
107
114
|
y: number;
|
|
@@ -112,9 +119,7 @@ export interface AdaptedEvent {
|
|
|
112
119
|
pointerType: PointerType;
|
|
113
120
|
time: number;
|
|
114
121
|
button?: MouseButton;
|
|
115
|
-
|
|
116
|
-
changedTouches?: TouchList;
|
|
117
|
-
touchEventType?: TouchEventType;
|
|
122
|
+
stylusData?: StylusData;
|
|
118
123
|
}
|
|
119
124
|
export declare enum EventTypes {
|
|
120
125
|
DOWN = 0,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AdaptedEvent, EventTypes
|
|
1
|
+
import { AdaptedEvent, EventTypes } from '../interfaces';
|
|
2
2
|
type PointerEventCallback = (event: AdaptedEvent) => void;
|
|
3
3
|
export default abstract class EventManager<T> {
|
|
4
4
|
protected readonly view: T;
|
|
@@ -7,7 +7,7 @@ export default abstract class EventManager<T> {
|
|
|
7
7
|
constructor(view: T);
|
|
8
8
|
abstract registerListeners(): void;
|
|
9
9
|
abstract unregisterListeners(): void;
|
|
10
|
-
protected abstract mapEvent(event: Event, eventType: EventTypes
|
|
10
|
+
protected abstract mapEvent(event: Event, eventType: EventTypes): AdaptedEvent;
|
|
11
11
|
protected onPointerDown(_event: AdaptedEvent): void;
|
|
12
12
|
protected onPointerAdd(_event: AdaptedEvent): void;
|
|
13
13
|
protected onPointerUp(_event: AdaptedEvent): void;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { PointerType } from '../PointerType';
|
|
2
|
-
import { Point } from './interfaces';
|
|
2
|
+
import type { Point, StylusData } from './interfaces';
|
|
3
3
|
export declare function isPointerInBounds(view: HTMLElement, { x, y }: Point): boolean;
|
|
4
4
|
export declare const PointerTypeMapping: Map<string, PointerType>;
|
|
5
5
|
export declare const degToRad: (degrees: number) => number;
|
|
@@ -8,3 +8,4 @@ export declare function calculateViewScale(view: HTMLElement): {
|
|
|
8
8
|
scaleX: number;
|
|
9
9
|
scaleY: number;
|
|
10
10
|
};
|
|
11
|
+
export declare function tryExtractStylusData(event: PointerEvent): StylusData | undefined;
|
package/package.json
CHANGED
|
@@ -120,12 +120,13 @@ class InnerBaseButton extends React.Component<BaseButtonWithRefProps> {
|
|
|
120
120
|
};
|
|
121
121
|
|
|
122
122
|
render() {
|
|
123
|
-
const { rippleColor, ...rest } = this.props;
|
|
123
|
+
const { rippleColor, style, ...rest } = this.props;
|
|
124
124
|
|
|
125
125
|
return (
|
|
126
126
|
<RawButton
|
|
127
127
|
ref={this.props.innerRef}
|
|
128
128
|
rippleColor={processColor(rippleColor)}
|
|
129
|
+
style={[style, Platform.OS === 'ios' && { cursor: undefined }]}
|
|
129
130
|
{...rest}
|
|
130
131
|
onGestureEvent={this.onGestureEvent}
|
|
131
132
|
onHandlerStateChange={this.onHandlerStateChange}
|
|
@@ -138,7 +138,7 @@ export const FlatList = React.forwardRef((props, ref) => {
|
|
|
138
138
|
);
|
|
139
139
|
}) as <ItemT = any>(
|
|
140
140
|
props: PropsWithChildren<
|
|
141
|
-
RNFlatListProps<ItemT> &
|
|
141
|
+
Omit<RNFlatListProps<ItemT>, 'renderScrollComponent'> &
|
|
142
142
|
RefAttributes<FlatList<ItemT>> &
|
|
143
143
|
NativeViewGestureHandlerProps
|
|
144
144
|
>,
|
|
@@ -9,7 +9,6 @@ import {
|
|
|
9
9
|
View,
|
|
10
10
|
ViewStyle,
|
|
11
11
|
processColor,
|
|
12
|
-
StyleSheet,
|
|
13
12
|
} from 'react-native';
|
|
14
13
|
import NativeButton from '../GestureHandlerButton';
|
|
15
14
|
import {
|
|
@@ -18,7 +17,6 @@ import {
|
|
|
18
17
|
isTouchWithinInset,
|
|
19
18
|
gestureTouchToPressableEvent,
|
|
20
19
|
addInsets,
|
|
21
|
-
splitStyles,
|
|
22
20
|
} from './utils';
|
|
23
21
|
import { PressabilityDebugView } from '../../handlers/PressabilityDebugView';
|
|
24
22
|
import { GestureTouchEvent } from '../../handlers/gestureHandlerCommon';
|
|
@@ -386,33 +384,22 @@ export default function Pressable(props: PressableProps) {
|
|
|
386
384
|
? children({ pressed: pressedState })
|
|
387
385
|
: children;
|
|
388
386
|
|
|
389
|
-
const flattenedStyles = StyleSheet.flatten(styleProp ?? {});
|
|
390
|
-
|
|
391
|
-
const [innerStyles, outerStyles] = splitStyles(flattenedStyles);
|
|
392
|
-
|
|
393
387
|
return (
|
|
394
|
-
<
|
|
395
|
-
<
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
{childrenProp}
|
|
411
|
-
{__DEV__ ? (
|
|
412
|
-
<PressabilityDebugView color="red" hitSlop={normalizedHitSlop} />
|
|
413
|
-
) : null}
|
|
414
|
-
</NativeButton>
|
|
415
|
-
</GestureDetector>
|
|
416
|
-
</View>
|
|
388
|
+
<GestureDetector gesture={gesture}>
|
|
389
|
+
<NativeButton
|
|
390
|
+
{...remainingProps}
|
|
391
|
+
ref={pressableRef}
|
|
392
|
+
hitSlop={appliedHitSlop}
|
|
393
|
+
enabled={isPressableEnabled}
|
|
394
|
+
touchSoundDisabled={android_disableSound ?? undefined}
|
|
395
|
+
rippleColor={processColor(android_ripple?.color ?? defaultRippleColor)}
|
|
396
|
+
rippleRadius={android_ripple?.radius ?? undefined}
|
|
397
|
+
style={[pointerStyle, styleProp]}>
|
|
398
|
+
{childrenProp}
|
|
399
|
+
{__DEV__ ? (
|
|
400
|
+
<PressabilityDebugView color="red" hitSlop={normalizedHitSlop} />
|
|
401
|
+
) : null}
|
|
402
|
+
</NativeButton>
|
|
403
|
+
</GestureDetector>
|
|
417
404
|
);
|
|
418
405
|
}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { Insets
|
|
2
|
-
import {
|
|
1
|
+
import { Insets } from 'react-native';
|
|
2
|
+
import {
|
|
3
|
+
HoverGestureHandlerEventPayload,
|
|
4
|
+
LongPressGestureHandlerEventPayload,
|
|
5
|
+
} from '../../handlers/GestureHandlerEventPayload';
|
|
3
6
|
import {
|
|
4
7
|
TouchData,
|
|
5
8
|
GestureStateChangeEvent,
|
|
6
9
|
GestureTouchEvent,
|
|
7
10
|
} from '../../handlers/gestureHandlerCommon';
|
|
8
|
-
import { HoverGestureHandlerEventPayload } from '../../handlers/gestures/hoverGesture';
|
|
9
11
|
import { InnerPressableEvent, PressableEvent } from './PressableProps';
|
|
10
12
|
|
|
11
13
|
const numberAsInset = (value: number): Insets => ({
|
|
@@ -125,56 +127,10 @@ const gestureTouchToPressableEvent = (
|
|
|
125
127
|
};
|
|
126
128
|
};
|
|
127
129
|
|
|
128
|
-
type StylePropKeys = (keyof ViewStyle)[];
|
|
129
|
-
|
|
130
|
-
// Source:
|
|
131
|
-
// - From ViewStyle extracted FlexStyle sub-interface which contains all of the box-model manipulating props.
|
|
132
|
-
// - From FlexStyle handpicked those styles, which act on the inner part of the box-model.
|
|
133
|
-
const innerStyleKeys = new Set([
|
|
134
|
-
'alignContent',
|
|
135
|
-
'alignItems',
|
|
136
|
-
'flexBasis',
|
|
137
|
-
'flexDirection',
|
|
138
|
-
'flexWrap',
|
|
139
|
-
'rowGap',
|
|
140
|
-
'gap',
|
|
141
|
-
'columnGap',
|
|
142
|
-
'justifyContent',
|
|
143
|
-
'overflow',
|
|
144
|
-
'padding',
|
|
145
|
-
'paddingBottom',
|
|
146
|
-
'paddingEnd',
|
|
147
|
-
'paddingHorizontal',
|
|
148
|
-
'paddingLeft',
|
|
149
|
-
'paddingRight',
|
|
150
|
-
'paddingStart',
|
|
151
|
-
'paddingTop',
|
|
152
|
-
'paddingVertical',
|
|
153
|
-
'start',
|
|
154
|
-
'end',
|
|
155
|
-
'direction', // iOS only
|
|
156
|
-
] as StylePropKeys);
|
|
157
|
-
|
|
158
|
-
const splitStyles = (from: ViewStyle): [ViewStyle, ViewStyle] => {
|
|
159
|
-
const outerStyles: Record<string, unknown> = {};
|
|
160
|
-
const innerStyles: Record<string, unknown> = {};
|
|
161
|
-
|
|
162
|
-
for (const key in from) {
|
|
163
|
-
if (innerStyleKeys.has(key as keyof ViewStyle)) {
|
|
164
|
-
innerStyles[key] = from[key as keyof ViewStyle];
|
|
165
|
-
} else {
|
|
166
|
-
outerStyles[key] = from[key as keyof ViewStyle];
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
return [innerStyles, outerStyles];
|
|
171
|
-
};
|
|
172
|
-
|
|
173
130
|
export {
|
|
174
131
|
numberAsInset,
|
|
175
132
|
addInsets,
|
|
176
133
|
isTouchWithinInset,
|
|
177
134
|
gestureToPressableEvent,
|
|
178
135
|
gestureTouchToPressableEvent,
|
|
179
|
-
splitStyles,
|
|
180
136
|
};
|