@react-native-oh-tpl/react-native-gesture-handler 2.12.9 → 2.14.1

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.
Files changed (104) hide show
  1. package/DrawerLayout/index.ts +2 -0
  2. package/Swipeable/index.ts +2 -0
  3. package/harmony/gesture_handler.har +0 -0
  4. package/lib/commonjs/RNGestureHandlerModule.js +2 -3
  5. package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
  6. package/lib/commonjs/components/GestureHandlerRootView.js +3 -3
  7. package/lib/commonjs/components/GestureHandlerRootView.js.map +1 -1
  8. package/lib/commonjs/handlers/createHandler.js +15 -18
  9. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  10. package/lib/commonjs/index.js +94 -137
  11. package/lib/commonjs/index.js.map +1 -1
  12. package/lib/commonjs/specs/NativeRNGestureHandlerModule.js +1 -2
  13. package/lib/commonjs/specs/NativeRNGestureHandlerModule.js.map +1 -1
  14. package/lib/commonjs/specs/RNGestureHandlerButtonNativeComponent.js +2 -3
  15. package/lib/commonjs/specs/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  16. package/lib/commonjs/specs/RNGestureHandlerRootViewNativeComponent.js +2 -3
  17. package/lib/commonjs/specs/RNGestureHandlerRootViewNativeComponent.js.map +1 -1
  18. package/lib/module/RNGestureHandlerModule.js.map +1 -1
  19. package/lib/module/components/GestureHandlerRootView.js.map +1 -1
  20. package/lib/module/handlers/createHandler.js +12 -15
  21. package/lib/module/handlers/createHandler.js.map +1 -1
  22. package/lib/module/index.js +10 -141
  23. package/lib/module/index.js.map +1 -1
  24. package/lib/module/specs/NativeRNGestureHandlerModule.js.map +1 -1
  25. package/lib/module/specs/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  26. package/lib/module/specs/RNGestureHandlerRootViewNativeComponent.js.map +1 -1
  27. package/lib/typescript/RNGestureHandlerModule.d.ts +2 -2
  28. package/lib/typescript/components/GestureHandlerRootView.d.ts +6 -6
  29. package/lib/typescript/handlers/createHandler.d.ts +11 -11
  30. package/lib/typescript/index.d.ts +42 -9
  31. package/lib/typescript/index.d.ts.map +1 -1
  32. package/lib/typescript/specs/NativeRNGestureHandlerModule.d.ts +14 -14
  33. package/lib/typescript/specs/RNGestureHandlerButtonNativeComponent.d.ts +14 -14
  34. package/lib/typescript/specs/RNGestureHandlerRootViewNativeComponent.d.ts +6 -6
  35. package/package.json +74 -66
  36. package/src/RNGestureHandlerModule.ts +4 -4
  37. package/src/components/GestureHandlerRootView.tsx +23 -23
  38. package/src/handlers/createHandler.tsx +534 -534
  39. package/src/index.ts +172 -172
  40. package/src/specs/NativeRNGestureHandlerModule.ts +26 -26
  41. package/src/specs/RNGestureHandlerButtonNativeComponent.ts +18 -18
  42. package/src/specs/RNGestureHandlerRootViewNativeComponent.ts +6 -6
  43. package/harmony/gesture_handler/BuildProfile.ets +0 -5
  44. package/harmony/gesture_handler/build-profile.json5 +0 -19
  45. package/harmony/gesture_handler/hvigorfile.ts +0 -2
  46. package/harmony/gesture_handler/index.ets +0 -3
  47. package/harmony/gesture_handler/oh-package-lock.json5 +0 -17
  48. package/harmony/gesture_handler/oh-package.json5 +0 -12
  49. package/harmony/gesture_handler/src/main/cpp/CMakeLists.txt +0 -8
  50. package/harmony/gesture_handler/src/main/cpp/GestureHandlerPackage.cpp +0 -103
  51. package/harmony/gesture_handler/src/main/cpp/GestureHandlerPackage.h +0 -21
  52. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerButtonComponentDescriptor.h +0 -36
  53. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerButtonComponentInstance.h +0 -27
  54. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerButtonJSIBinder.h +0 -32
  55. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerModule.cpp +0 -22
  56. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerModule.h +0 -15
  57. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerPackage.h +0 -72
  58. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerRootViewComponentDescriptor.h +0 -36
  59. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerRootViewComponentInstance.h +0 -78
  60. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerRootViewJSIBinder.h +0 -25
  61. package/harmony/gesture_handler/src/main/ets/CircularBuffer.ts +0 -42
  62. package/harmony/gesture_handler/src/main/ets/Event.ts +0 -68
  63. package/harmony/gesture_handler/src/main/ets/EventDispatcher.ts +0 -53
  64. package/harmony/gesture_handler/src/main/ets/GestureHandler.ts +0 -663
  65. package/harmony/gesture_handler/src/main/ets/GestureHandlerArkUIAdapter.ts +0 -203
  66. package/harmony/gesture_handler/src/main/ets/GestureHandlerFactory.ts +0 -45
  67. package/harmony/gesture_handler/src/main/ets/GestureHandlerOrchestrator.ts +0 -280
  68. package/harmony/gesture_handler/src/main/ets/GestureHandlerPackage.ts +0 -22
  69. package/harmony/gesture_handler/src/main/ets/GestureHandlerRegistry.ts +0 -28
  70. package/harmony/gesture_handler/src/main/ets/InteractionManager.ts +0 -109
  71. package/harmony/gesture_handler/src/main/ets/LeastSquareSolver.ts +0 -182
  72. package/harmony/gesture_handler/src/main/ets/NativeViewGestureHandler.ts +0 -115
  73. package/harmony/gesture_handler/src/main/ets/OutgoingEvent.ts +0 -34
  74. package/harmony/gesture_handler/src/main/ets/PanGestureHandler.ts +0 -328
  75. package/harmony/gesture_handler/src/main/ets/PointerTracker.ts +0 -239
  76. package/harmony/gesture_handler/src/main/ets/RNGHError.ts +0 -5
  77. package/harmony/gesture_handler/src/main/ets/RNGHLogger.ts +0 -48
  78. package/harmony/gesture_handler/src/main/ets/RNGHRootTouchHandlerArkTS.ts +0 -60
  79. package/harmony/gesture_handler/src/main/ets/RNGHRootTouchHandlerCAPI.ts +0 -87
  80. package/harmony/gesture_handler/src/main/ets/RNGestureHandlerButton.ets +0 -38
  81. package/harmony/gesture_handler/src/main/ets/RNGestureHandlerModule.ts +0 -183
  82. package/harmony/gesture_handler/src/main/ets/RNGestureHandlerRootView.ets +0 -53
  83. package/harmony/gesture_handler/src/main/ets/RNOHScrollLocker.ts +0 -23
  84. package/harmony/gesture_handler/src/main/ets/State.ts +0 -47
  85. package/harmony/gesture_handler/src/main/ets/TapGestureHandler.ts +0 -206
  86. package/harmony/gesture_handler/src/main/ets/Vector2D.ts +0 -36
  87. package/harmony/gesture_handler/src/main/ets/VelocityTracker.ts +0 -98
  88. package/harmony/gesture_handler/src/main/ets/View.ts +0 -71
  89. package/harmony/gesture_handler/src/main/ets/ViewRegistry.ts +0 -43
  90. package/harmony/gesture_handler/src/main/ets/namespace/RNGestureHandlerButton.ts +0 -140
  91. package/harmony/gesture_handler/src/main/ets/namespace/RNGestureHandlerModule.ts +0 -25
  92. package/harmony/gesture_handler/src/main/ets/namespace/RNGestureHandlerRootView.ts +0 -101
  93. package/harmony/gesture_handler/src/main/ets/namespace/ts.ts +0 -3
  94. package/harmony/gesture_handler/src/main/ets/pages/Index.ets +0 -17
  95. package/harmony/gesture_handler/src/main/ets/types.ts +0 -25
  96. package/harmony/gesture_handler/src/main/ets/webviewability/WebviewAbility.ts +0 -41
  97. package/harmony/gesture_handler/src/main/module.json5 +0 -7
  98. package/harmony/gesture_handler/src/main/resources/base/element/color.json +0 -8
  99. package/harmony/gesture_handler/src/main/resources/base/element/string.json +0 -16
  100. package/harmony/gesture_handler/src/main/resources/base/media/icon.png +0 -0
  101. package/harmony/gesture_handler/src/main/resources/base/profile/main_pages.json +0 -5
  102. package/harmony/gesture_handler/src/main/resources/en_US/element/string.json +0 -16
  103. package/harmony/gesture_handler/src/main/resources/zh_CN/element/string.json +0 -16
  104. package/harmony/gesture_handler/ts.ts +0 -2
@@ -1,182 +0,0 @@
1
- // Implementation taken from Flutter's LeastSquareSolver
2
- // https://github.com/flutter/flutter/blob/master/packages/flutter/lib/src/gestures/lsq_solver.dart
3
-
4
- class Vector {
5
- private offset: number;
6
- private length: number;
7
- private elements: number[];
8
-
9
- constructor(length: number) {
10
- this.offset = 0;
11
- this.length = length;
12
- this.elements = new Array<number>(length);
13
- }
14
-
15
- public static fromVOL(
16
- values: number[],
17
- offset: number,
18
- length: number
19
- ): Vector {
20
- const result = new Vector(0);
21
-
22
- result.offset = offset;
23
- result.length = length;
24
- result.elements = values;
25
-
26
- return result;
27
- }
28
-
29
- public get(index: number): number {
30
- return this.elements[this.offset + index];
31
- }
32
-
33
- public set(index: number, value: number): void {
34
- this.elements[this.offset + index] = value;
35
- }
36
-
37
- public dot(other: Vector): number {
38
- let result = 0;
39
- for (let i = 0; i < this.length; i++) {
40
- result += this.get(i) * other.get(i);
41
- }
42
- return result;
43
- }
44
-
45
- public norm() {
46
- return Math.sqrt(this.dot(this));
47
- }
48
- }
49
-
50
- class Matrix {
51
- private columns: number;
52
- private elements: number[];
53
-
54
- constructor(rows: number, columns: number) {
55
- this.columns = columns;
56
- this.elements = new Array<number>(rows * columns);
57
- }
58
-
59
- public get(row: number, column: number): number {
60
- return this.elements[row * this.columns + column];
61
- }
62
-
63
- public set(row: number, column: number, value: number): void {
64
- this.elements[row * this.columns + column] = value;
65
- }
66
-
67
- public getRow(row: number): Vector {
68
- return Vector.fromVOL(this.elements, row * this.columns, this.columns);
69
- }
70
- }
71
-
72
- /// An nth degree polynomial fit to a dataset.
73
- class PolynomialFit {
74
- /// The polynomial coefficients of the fit.
75
- ///
76
- /// For each `i`, the element `coefficients[i]` is the coefficient of
77
- /// the `i`-th power of the variable.
78
- public coefficients: number[];
79
-
80
- /// Creates a polynomial fit of the given degree.
81
- ///
82
- /// There are n + 1 coefficients in a fit of degree n.
83
- constructor(degree: number) {
84
- this.coefficients = new Array<number>(degree + 1);
85
- }
86
- }
87
-
88
- const precisionErrorTolerance = 1e-10;
89
-
90
- /// Uses the least-squares algorithm to fit a polynomial to a set of data.
91
- export class LeastSquareSolver {
92
- /// The x-coordinates of each data point.
93
- private x: number[];
94
- /// The y-coordinates of each data point.
95
- private y: number[];
96
- /// The weight to use for each data point.
97
- private w: number[];
98
-
99
- /// Creates a least-squares solver.
100
- ///
101
- /// The [x], [y], and [w] arguments must not be null.
102
- constructor(x: number[], y: number[], w: number[]) {
103
- this.x = x;
104
- this.y = y;
105
- this.w = w;
106
- }
107
-
108
- /// Fits a polynomial of the given degree to the data points.
109
- ///
110
- /// When there is not enough data to fit a curve null is returned.
111
- public solve(degree: number): PolynomialFit | null {
112
- if (degree > this.x.length) {
113
- // Not enough data to fit a curve.
114
- return null;
115
- }
116
-
117
- const result = new PolynomialFit(degree);
118
-
119
- // Shorthands for the purpose of notation equivalence to original C++ code.
120
- const m = this.x.length;
121
- const n = degree + 1;
122
-
123
- // Expand the X vector to a matrix A, pre-multiplied by the weights.
124
- const a = new Matrix(n, m);
125
- for (let h = 0; h < m; h++) {
126
- a.set(0, h, this.w[h]);
127
-
128
- for (let i = 1; i < n; i++) {
129
- a.set(i, h, a.get(i - 1, h) * this.x[h]);
130
- }
131
- }
132
-
133
- // Apply the Gram-Schmidt process to A to obtain its QR decomposition.
134
-
135
- // Orthonormal basis, column-major ordVectorer.
136
- const q = new Matrix(n, m);
137
- // Upper triangular matrix, row-major order.
138
- const r = new Matrix(n, m);
139
-
140
- for (let j = 0; j < n; j += 1) {
141
- for (let h = 0; h < m; h += 1) {
142
- q.set(j, h, a.get(j, h));
143
- }
144
- for (let i = 0; i < j; i += 1) {
145
- const dot = q.getRow(j).dot(q.getRow(i));
146
- for (let h = 0; h < m; h += 1) {
147
- q.set(j, h, q.get(j, h) - dot * q.get(i, h));
148
- }
149
- }
150
-
151
- const norm = q.getRow(j).norm();
152
- if (norm < precisionErrorTolerance) {
153
- // Vectors are linearly dependent or zero so no solution.
154
- return null;
155
- }
156
-
157
- const inverseNorm = 1.0 / norm;
158
- for (let h = 0; h < m; h += 1) {
159
- q.set(j, h, q.get(j, h) * inverseNorm);
160
- }
161
- for (let i = 0; i < n; i += 1) {
162
- r.set(j, i, i < j ? 0.0 : q.getRow(j).dot(a.getRow(i)));
163
- }
164
- }
165
-
166
- // Solve R B = Qt W Y to find B. This is easy because R is upper triangular.
167
- // We just work from bottom-right to top-left calculating B's coefficients.
168
- const wy = new Vector(m);
169
- for (let h = 0; h < m; h += 1) {
170
- wy.set(h, this.y[h] * this.w[h]);
171
- }
172
- for (let i = n - 1; i >= 0; i -= 1) {
173
- result.coefficients[i] = q.getRow(i).dot(wy);
174
- for (let j = n - 1; j > i; j -= 1) {
175
- result.coefficients[i] -= r.get(i, j) * result.coefficients[j];
176
- }
177
- result.coefficients[i] /= r.get(i, i);
178
- }
179
-
180
- return result;
181
- }
182
- }
@@ -1,115 +0,0 @@
1
- import { GestureHandler, GestureHandlerDependencies, DEFAULT_TOUCH_SLOP } from "./GestureHandler"
2
- import { Vector2D } from './Vector2D';
3
- import { State } from "./State"
4
- import { AdaptedEvent } from './Event';
5
-
6
- export class NativeViewGestureHandler extends GestureHandler {
7
- private minDistSq = DEFAULT_TOUCH_SLOP * DEFAULT_TOUCH_SLOP;
8
-
9
- protected startPos = new Vector2D()
10
-
11
- public canBeInterrupted() {
12
- return !(this.config.disallowInterruption ?? false)
13
- }
14
-
15
- constructor(deps: GestureHandlerDependencies) {
16
- super({ ...deps, logger: deps.logger.cloneWithPrefix("NativeViewGestureHandler") })
17
- }
18
-
19
- public getDefaultConfig() {
20
- return {}
21
- }
22
-
23
- public onPointerDown(e: AdaptedEvent) {
24
- this.tracker.addToTracker(e);
25
- super.onPointerDown(e);
26
- this.onNewPointer();
27
- }
28
-
29
- protected onNewPointer() {
30
- this.startPos = this.tracker.getLastAvgPos();
31
- if (this.currentState !== State.UNDETERMINED)
32
- return;
33
- this.begin();
34
- this.activate();
35
- }
36
-
37
- public onAdditionalPointerAdd(e: AdaptedEvent) {
38
- this.tracker.addToTracker(e);
39
- super.onPointerDown(e);
40
- this.onNewPointer();
41
- }
42
-
43
- public onPointerMove(e: AdaptedEvent): void {
44
- this.tracker.track(e);
45
- const {x: dx, y: dy} = this.startPos.clone().subtract(this.tracker.getLastAvgPos()).value
46
- const distSq = dx * dx + dy * dy;
47
-
48
- if (distSq >= this.minDistSq) {
49
- if (this.currentState === State.ACTIVE) {
50
- this.cancel();
51
- } else if (this.currentState === State.BEGAN) {
52
- this.activate();
53
- }
54
- }
55
- }
56
-
57
- public onPointerLeave(): void {
58
- // TODO: add this method to GestureHandler
59
- if (this.currentState === State.BEGAN || this.currentState === State.ACTIVE) {
60
- this.cancel();
61
- }
62
- }
63
-
64
- public onPointerUp(event: AdaptedEvent): void {
65
- super.onPointerUp(event);
66
- this.onAnyPointerUp(event);
67
- }
68
-
69
- private onAnyPointerUp(e: AdaptedEvent) {
70
- this.tracker.removeFromTracker(e.pointerId);
71
- if (this.tracker.getTrackedPointersCount() === 0) {
72
- if (this.currentState === State.ACTIVE) {
73
- this.end();
74
- } else {
75
- this.fail();
76
- }
77
- }
78
- }
79
-
80
- public onAdditionalPointerRemove(e: AdaptedEvent) {
81
- super.onAdditionalPointerRemove(e)
82
- this.onAnyPointerUp(e)
83
- }
84
-
85
- public shouldRecognizeSimultaneously(handler: GestureHandler): boolean {
86
- if (super.shouldRecognizeSimultaneously(handler)) {
87
- return true;
88
- }
89
- if (
90
- handler instanceof NativeViewGestureHandler &&
91
- handler.getState() === State.ACTIVE &&
92
- !handler.canBeInterrupted()
93
- ) {
94
- return false;
95
- }
96
-
97
- if (
98
- this.currentState === State.ACTIVE &&
99
- handler.getState() === State.ACTIVE &&
100
- this.canBeInterrupted()
101
- ) {
102
- return false;
103
- }
104
-
105
- return (
106
- this.currentState === State.ACTIVE &&
107
- this.canBeInterrupted() &&
108
- handler.getTag() > 0
109
- );
110
- }
111
-
112
- public shouldBeCancelledByOther(_handler: GestureHandler): boolean {
113
- return this.canBeInterrupted();
114
- }
115
- }
@@ -1,34 +0,0 @@
1
- import { State } from "./State"
2
- import { TouchEventType } from "./Event"
3
-
4
- export interface GestureEventPayload {
5
- handlerTag: number;
6
- numberOfPointers: number;
7
- state: State;
8
- }
9
-
10
- export interface HandlerStateChangeEventPayload extends GestureEventPayload {
11
- oldState: State;
12
- }
13
-
14
- export type GestureUpdateEvent<GestureEventPayloadT = Record<string, unknown>> = GestureEventPayload
15
- & GestureEventPayloadT
16
-
17
- export type GestureStateChangeEvent<GestureStateChangeEventPayloadT = Record<string, unknown>> = HandlerStateChangeEventPayload & GestureStateChangeEventPayloadT
18
-
19
- export type TouchData = {
20
- id: number;
21
- x: number;
22
- y: number;
23
- absoluteX: number;
24
- absoluteY: number;
25
- };
26
-
27
- export type GestureTouchEvent = {
28
- handlerTag: number;
29
- numberOfTouches: number;
30
- state: State;
31
- eventType: TouchEventType;
32
- allTouches: TouchData[];
33
- changedTouches: TouchData[];
34
- };
@@ -1,328 +0,0 @@
1
- import { GestureHandler, GestureConfig, GestureHandlerDependencies, DEFAULT_TOUCH_SLOP } from "./GestureHandler"
2
- import { AdaptedEvent } from "./Event"
3
- import { State } from "./State"
4
- import { Vector2D } from "./Vector2D"
5
-
6
- const DEFAULT_MIN_DIST_SQ = DEFAULT_TOUCH_SLOP * DEFAULT_TOUCH_SLOP;
7
-
8
- type PanGestureHandlerConfig = GestureConfig
9
-
10
- export class PanGestureHandler extends GestureHandler<PanGestureHandlerConfig> {
11
- private startPos = new Vector2D();
12
- private offset = new Vector2D()
13
- private lastPos = new Vector2D();
14
- private velocity = new Vector2D();
15
- private activationTimeout = 0;
16
-
17
- private get failOffsetXStart() {
18
- if (this.config.failOffsetXStart === undefined
19
- && this.config.failOffsetXEnd === undefined)
20
- return undefined
21
- return this.config.failOffsetXStart ?? Number.MIN_SAFE_INTEGER
22
- }
23
-
24
- private get failOffsetXEnd() {
25
- if (this.config.failOffsetXStart === undefined
26
- && this.config.failOffsetXEnd === undefined)
27
- return undefined
28
- return this.config.failOffsetXEnd ?? Number.MAX_SAFE_INTEGER
29
- }
30
-
31
- private get failOffsetYStart() {
32
- if (this.config.failOffsetYStart === undefined
33
- && this.config.failOffsetYEnd === undefined)
34
- return undefined
35
- return this.config.failOffsetYStart ?? Number.MIN_SAFE_INTEGER
36
- }
37
-
38
- private get failOffsetYEnd() {
39
- return this.config.failOffsetYEnd ?? Number.MAX_SAFE_INTEGER
40
- }
41
-
42
- private get activeOffsetXStart() {
43
- if (this.config.activeOffsetXStart === undefined
44
- && this.config.activeOffsetXEnd === undefined)
45
- return undefined
46
- return this.config.activeOffsetXStart ?? Number.MIN_SAFE_INTEGER
47
- }
48
-
49
- private get activeOffsetXEnd() {
50
- if (this.config.activeOffsetXStart === undefined
51
- && this.config.activeOffsetXEnd === undefined)
52
- return undefined
53
- return this.config.activeOffsetXEnd ?? Number.MAX_SAFE_INTEGER
54
- }
55
-
56
- private get activeOffsetYStart() {
57
- if (this.config.activeOffsetYStart === undefined
58
- && this.config.activeOffsetYEnd === undefined)
59
- return undefined
60
- return this.config.activeOffsetYStart ?? Number.MIN_SAFE_INTEGER
61
- }
62
-
63
- private get activeOffsetYEnd() {
64
- if (this.config.activeOffsetYStart === undefined
65
- && this.config.activeOffsetYEnd === undefined)
66
- return undefined
67
- return this.config.activeOffsetYEnd ?? Number.MAX_SAFE_INTEGER
68
- }
69
-
70
- private get minVelocityX() {
71
- return this.config.minVelocityX ?? this.config.minVelocity ?? Number.MAX_SAFE_INTEGER
72
- }
73
-
74
- private get minVelocityY() {
75
- return this.config.minVelocityY ?? this.config.minVelocityY ?? Number.MAX_SAFE_INTEGER
76
- }
77
-
78
- private minVelocitySq = Number.MAX_SAFE_INTEGER
79
-
80
- private get minPointers() {
81
- return this.config.minPointers ?? 1
82
- }
83
-
84
- private unlockScrolls: (() => void) | undefined
85
-
86
- public constructor(deps: GestureHandlerDependencies) {
87
- super({ ...deps, logger: deps.logger.cloneWithPrefix("PanGestureHandler") })
88
- }
89
-
90
- public onPointerDown(e) {
91
- this.tracker.addToTracker(e);
92
- super.onPointerDown(e);
93
- this.lastPos = this.tracker.getLastAvgPos()
94
- this.startPos = this.lastPos.clone()
95
- this.tryBegin(e);
96
- this.tryActivating();
97
- }
98
-
99
- private tryActivating(): void {
100
- if (this.currentState === State.BEGAN) {
101
- if (this.shouldFail()) {
102
- this.fail();
103
- } else if (this.shouldActivate()) {
104
- this.activate();
105
- }
106
- }
107
- }
108
-
109
- private shouldFail(): boolean {
110
- const {x: dx, y: dy} = this.getTranslation().value;
111
- const distanceSq = dx * dx + dy * dy;
112
- if (this.activateAfterLongPress > 0 && distanceSq > DEFAULT_MIN_DIST_SQ) {
113
- this.clearActivationTimeout();
114
- return true;
115
- }
116
- if (this.failOffsetXStart !== Number.MIN_SAFE_INTEGER && dx < this.failOffsetXStart) {
117
- return true;
118
- }
119
- if (this.failOffsetXEnd !== Number.MAX_SAFE_INTEGER && dx > this.failOffsetXEnd) {
120
- return true;
121
- }
122
- if (this.failOffsetYStart !== Number.MIN_SAFE_INTEGER && dy < this.failOffsetYStart) {
123
- return true;
124
- }
125
- return (this.failOffsetYEnd !== Number.MAX_SAFE_INTEGER && dy > this.failOffsetYEnd);
126
- }
127
-
128
- private getTranslation() {
129
- return this.lastPos.clone().subtract(this.startPos).add(this.offset)
130
- }
131
-
132
- private shouldActivate(): boolean {
133
- const {x: dx, y: dy} = this.getTranslation().value;
134
- if (this.activeOffsetXStart !== Number.MAX_SAFE_INTEGER && dx < this.activeOffsetXStart
135
- ) {
136
- return true;
137
- }
138
- if (this.activeOffsetXEnd !== Number.MIN_SAFE_INTEGER && dx > this.activeOffsetXEnd) {
139
- return true;
140
- }
141
- if (this.activeOffsetYStart !== Number.MAX_SAFE_INTEGER && dy < this.activeOffsetYStart) {
142
- return true;
143
- }
144
- if (this.activeOffsetYEnd !== Number.MIN_SAFE_INTEGER && dy > this.activeOffsetYEnd) {
145
- return true;
146
- }
147
- const distanceSq: number = dx * dx + dy * dy;
148
- if (this.minDistSq !== Number.MAX_SAFE_INTEGER && distanceSq >= this.minDistSq) {
149
- return true;
150
- }
151
- const {x: vx, y: vy} = this.velocity
152
- if (
153
- this.minVelocityX !== Number.MAX_SAFE_INTEGER &&
154
- ((this.minVelocityX < 0 && vx <= this.minVelocityX) ||
155
- (this.minVelocityX >= 0 && this.minVelocityX <= vx))
156
- ) {
157
- return true;
158
- }
159
- if (
160
- this.minVelocityY !== Number.MAX_SAFE_INTEGER &&
161
- ((this.minVelocityY < 0 && vy <= this.minVelocityY) ||
162
- (this.minVelocityY >= 0 && this.minVelocityY <= vy))
163
- ) {
164
- return true;
165
- }
166
- const velocitySq: number = vx * vx + vy * vy;
167
- return (
168
- this.minVelocitySq !== Number.MAX_SAFE_INTEGER &&
169
- velocitySq >= this.minVelocitySq
170
- );
171
- }
172
-
173
- private clearActivationTimeout(): void {
174
- clearTimeout(this.activationTimeout);
175
- }
176
-
177
- private tryBegin(e: AdaptedEvent): void {
178
- if (
179
- this.currentState === State.UNDETERMINED &&
180
- this.tracker.getTrackedPointersCount() >= this.minPointers
181
- ) {
182
- this.resetProgress();
183
- this.offset = new Vector2D();
184
- this.velocity = new Vector2D();
185
-
186
- this.begin();
187
-
188
- if (this.activateAfterLongPress > 0) {
189
- this.activationTimeout = setTimeout(() => {
190
- this.activate();
191
- }, this.activateAfterLongPress);
192
- }
193
- } else {
194
- this.velocity = this.tracker.getVelocity(e.pointerId)
195
- }
196
- }
197
-
198
- public getDefaultConfig() {
199
- return {}
200
- }
201
-
202
- private get activateAfterLongPress() {
203
- return this.config.activateAfterLongPress ?? 0
204
- }
205
-
206
- private get minDistSq() {
207
- if (this.config.minDist !== undefined) {
208
- return this.config.minDist * this.config.minDist;
209
- } else if (this.hasCustomActivationCriteria()) {
210
- return Number.MAX_SAFE_INTEGER;
211
- }
212
- return DEFAULT_MIN_DIST_SQ
213
- }
214
-
215
- private hasCustomActivationCriteria() {
216
- const criterias: (keyof PanGestureHandlerConfig)[] = [
217
- 'activeOffsetXStart',
218
- 'activeOffsetXEnd',
219
- 'failOffsetXStart',
220
- 'failOffsetXEnd',
221
- 'activeOffsetYStart',
222
- 'activeOffsetYEnd',
223
- 'failOffsetYStart',
224
- 'failOffsetYEnd',
225
- 'minVelocityX',
226
- 'minVelocityY',
227
- ]
228
- for (const key in this.config) {
229
- if (criterias.indexOf(key as keyof PanGestureHandlerConfig) >= 0) {
230
- return true
231
- }
232
- }
233
- return false
234
- }
235
-
236
- public onAdditionalPointerAdd(event: AdaptedEvent): void {
237
- this.tracker.addToTracker(event);
238
- super.onAdditionalPointerAdd(event);
239
- this.tryBegin(event);
240
- this.offset.add(this.lastPos).subtract(this.startPos)
241
- this.lastPos = this.tracker.getLastAvgPos()
242
- this.startPos = this.lastPos.clone()
243
- if (this.tracker.getTrackedPointersCount() > (this.config.maxPointers ?? 10)) {
244
- if (this.currentState === State.ACTIVE) {
245
- this.cancel();
246
- } else {
247
- this.fail();
248
- }
249
- } else {
250
- this.tryActivating();
251
- }
252
- }
253
-
254
- public onPointerUp(event: AdaptedEvent): void {
255
- super.onPointerUp(event);
256
- if (this.currentState === State.ACTIVE) {
257
- this.lastPos = this.tracker.getLastAvgPos();
258
- }
259
- this.tracker.removeFromTracker(event.pointerId);
260
- if (this.currentState === State.ACTIVE) {
261
- this.end();
262
- } else {
263
- this.resetProgress();
264
- this.fail();
265
- }
266
- }
267
-
268
- public onAdditionalPointerRemove(event: AdaptedEvent): void {
269
- super.onAdditionalPointerRemove(event);
270
- this.tracker.removeFromTracker(event.pointerId);
271
- this.offset.add(this.lastPos).subtract(this.startPos)
272
- this.lastPos = this.tracker.getLastAvgPos()
273
- this.startPos = this.lastPos.clone()
274
- if (
275
- !(
276
- this.currentState === State.ACTIVE &&
277
- this.tracker.getTrackedPointersCount() < this.minPointers
278
- )
279
- ) {
280
- this.tryActivating();
281
- }
282
- }
283
-
284
- public onPointerMove(event: AdaptedEvent): void {
285
- this.tracker.track(event);
286
- this.lastPos = this.tracker.getLastAvgPos()
287
- this.velocity = this.tracker.getVelocity(event.pointerId)
288
- this.tryActivating();
289
- super.onPointerMove(event);
290
- }
291
-
292
- public onPointerOutOfBounds(event: AdaptedEvent): void {
293
- if (this.shouldCancelWhenOutside) {
294
- return;
295
- }
296
- this.tracker.track(event);
297
- this.lastPos = this.tracker.getLastAvgPos()
298
- this.velocity = this.tracker.getVelocity(event.pointerId)
299
- this.tryActivating();
300
- if (this.currentState === State.ACTIVE) {
301
- super.onPointerOutOfBounds(event);
302
- }
303
- }
304
-
305
- protected transformNativeEvent() {
306
- const rect = this.view.getBoundingRect();
307
- const translation = this.getTranslation()
308
- return {
309
- translationX: translation.x,
310
- translationY: translation.y,
311
- absoluteX: this.tracker.getLastAvgX(),
312
- absoluteY: this.tracker.getLastAvgY(),
313
- velocityX: this.velocity.x,
314
- velocityY: this.velocity.y,
315
- x: this.tracker.getLastAvgX() - rect.x,
316
- y: this.tracker.getLastAvgY() - rect.y,
317
- };
318
- }
319
-
320
- protected stateDidChange(newState: State, oldState: State) {
321
- super.stateDidChange(newState, oldState)
322
- if (newState === State.BEGAN) {
323
- this.unlockScrolls = this.scrollLocker.lockScrollContainingViewTag(this.view.getTag())
324
- } else if (newState !== State.ACTIVE) {
325
- this.unlockScrolls?.()
326
- }
327
- }
328
- }