gesturx 1.2.0 → 1.6.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/README.md CHANGED
@@ -4,7 +4,7 @@ Modern multi touch gesture recognizer using rxjs.
4
4
 
5
5
  # Documentation
6
6
 
7
- Head over the [wiki](https://github.com/mbret/gesturx/wiki).
7
+ Head over the [documentation](https://github.com/mbret/gesturx/wiki/Documentation).
8
8
 
9
9
  # Demo
10
10
 
package/dist/index.d.ts CHANGED
@@ -1,57 +1,45 @@
1
1
  import { BehaviorSubject } from 'rxjs';
2
2
  import { Observable } from 'rxjs';
3
+ import { ObservedValueOf } from 'rxjs';
3
4
 
4
- export declare const createManager: ({ afterEventReceived, recognizers, }: {
5
- recognizers: (TapRecognizer | PanRecognizer | SwipeRecognizer | RotateRecognizer | PinchRecognizer)[];
6
- afterEventReceived?: (event: PointerEvent) => PointerEvent;
7
- }) => {
8
- events$: Observable<PanEvent | SwipeEvent | TapEvent | RotateEvent | PinchEvent>;
9
- initialize: (container: HTMLElement) => void;
10
- recognizers: (PanRecognizer | SwipeRecognizer | TapRecognizer | RotateRecognizer | PinchRecognizer)[];
11
- };
12
-
13
- export declare type Manager = ReturnType<typeof createManager>;
14
-
15
- declare type Options = {
5
+ declare type PanConfig = {
16
6
  posThreshold?: number;
17
- };
18
-
19
- declare type Options_2 = {
7
+ delay?: number;
20
8
  /**
21
- * The minimum velocity (px/ms) that the gesture has to obtain by the end event.
9
+ * Number of inputs to trigger the event.
10
+ * Default to 1
22
11
  */
23
- escapeVelocity?: number;
24
12
  numInputs?: number;
25
- maxRestTime?: number;
26
- posThreshold?: number;
27
13
  };
28
14
 
29
- declare interface Options_3 extends RecognizerOptions {
30
- multiTapThreshold?: number;
31
- maximumPressTime?: number;
32
- maxTaps?: number;
33
- posThreshold?: number;
15
+ export declare interface PanEvent extends RecognizerEvent {
16
+ type: "panStart" | "panMove" | "panEnd";
34
17
  }
35
18
 
36
- declare type Options_4 = {
37
- posThreshold?: number;
38
- };
39
-
40
- declare type Options_5 = {
41
- posThreshold?: number;
42
- };
43
-
44
- export declare interface PanEvent extends RecognizerEvent {
19
+ declare interface PanEvent_2 extends RecognizerEvent {
45
20
  type: "panStart" | "panMove" | "panEnd";
46
21
  }
47
22
 
48
- export declare class PanRecognizer extends Recognizer<Options> {
49
- protected options: Options;
23
+ export declare class PanRecognizer extends Recognizer<PanRecognizerOptions, PanEvent> implements PanRecognizerInterface {
50
24
  events$: Observable<PanEvent>;
51
25
  start$: Observable<PanEvent>;
52
26
  end$: Observable<PanEvent>;
53
- fingers$: Observable<number>;
54
- constructor(options?: Options);
27
+ constructor(config?: RecognizerConfig<PanRecognizerOptions>);
28
+ update(config: RecognizerConfig<PanRecognizerOptions>): void;
29
+ }
30
+
31
+ declare interface PanRecognizerInterface extends Recognizer<PanRecognizerOptions, PanEvent_2> {
32
+ events$: Observable<PanEvent_2>;
33
+ update(options: RecognizerConfig<PanRecognizerOptions>): void;
34
+ }
35
+
36
+ declare interface PanRecognizerOptions {
37
+ /**
38
+ * @default 15
39
+ */
40
+ posThreshold?: number;
41
+ delay?: number;
42
+ numInputs?: number;
55
43
  }
56
44
 
57
45
  export declare interface PinchEvent extends RecognizerEvent {
@@ -71,24 +59,106 @@ export declare interface PinchEvent extends RecognizerEvent {
71
59
  deltaDistanceScale: number;
72
60
  }
73
61
 
74
- export declare class PinchRecognizer extends Recognizer<Options_5> {
75
- protected options: Options_5;
62
+ export declare class PinchRecognizer extends Recognizer<PinchRecognizerOptions, PinchEvent> implements PinchRecognizerInterface {
63
+ events$: Observable<PinchEvent>;
64
+ constructor(config?: RecognizerConfig<PinchRecognizerOptions>);
65
+ update(options: RecognizerConfig<PinchRecognizerOptions>): void;
66
+ }
67
+
68
+ declare interface PinchRecognizerInterface extends Recognizer<PinchRecognizerOptions, PinchEvent> {
76
69
  events$: Observable<PinchEvent>;
77
- constructor(options?: Options_5);
70
+ update(options: RecognizerConfig<PinchRecognizerOptions>): void;
71
+ }
72
+
73
+ declare interface PinchRecognizerOptions {
74
+ posThreshold?: number;
75
+ }
76
+
77
+ export declare class Recognizable<T extends Recognizer<any, any>[]> implements RecognizableInterface<T> {
78
+ protected options: {
79
+ recognizers: T;
80
+ afterEventReceived?: (event: PointerEvent) => PointerEvent;
81
+ };
82
+ events$: Observable<ObservedValueOf<T[number]["events$"]>>;
83
+ recognizers: T;
84
+ state$: Observable<RecognizableState>;
85
+ constructor(options: {
86
+ recognizers: T;
87
+ afterEventReceived?: (event: PointerEvent) => PointerEvent;
88
+ });
89
+ initialize(container: HTMLElement): void;
90
+ }
91
+
92
+ declare interface RecognizableInterface<T extends Recognizer<any, any>[]> {
93
+ /**
94
+ * List of recognizers registered.
95
+ *
96
+ * You can access them directly from here if needed.
97
+ */
98
+ readonly recognizers: T;
99
+ /**
100
+ * Dispatch events from all recognizer in one place.
101
+ */
102
+ readonly events$: Observable<ObservedValueOf<T[number]["events$"]>>;
103
+ /**
104
+ * Global state based on registered recognizers.
105
+ *
106
+ * It is similar to the recognizer state but is a conveniant access
107
+ * which merge all their state together.
108
+ */
109
+ readonly state$: Observable<RecognizableState>;
110
+ /**
111
+ * Initialize the instance with a given html element.
112
+ *
113
+ * You can only initialize one element per instance but you can
114
+ * change the element and call the method again if needed.
115
+ */
116
+ initialize(container: HTMLElement): void;
78
117
  }
79
118
 
80
- declare class Recognizer<Options> {
81
- protected config$: BehaviorSubject<RecognizerConfig<Options>>;
82
- protected validConfig$: Observable<ValidRecognizerConfig<Options>>;
83
- constructor(options: Options);
84
- initialize(config: RecognizerConfig<Options>): void;
85
- update(options: Options): void;
119
+ declare type RecognizableState = {
120
+ /**
121
+ * Number of maximum simultaneous fingers currently registered
122
+ * by all recognizers.
123
+ *
124
+ * You can use this to detect how many fingers are touching the screen.
125
+ *
126
+ * This is assuming one of your recognizer is registering gestures.
127
+ */
128
+ fingers: number;
129
+ };
130
+
131
+ export declare abstract class Recognizer<Options extends Record<any, any>, Event extends RecognizerEvent> {
132
+ protected configSubject: BehaviorSubject<RecognizerConfig<Options> & {
133
+ panConfig?: PanConfig | undefined;
134
+ }>;
135
+ protected panEvent$: Observable<PanEvent>;
136
+ protected pointerEvent$: Observable<PointerEvent>;
137
+ protected pointerDown$: Observable<PointerEvent>;
138
+ protected pointerUp$: Observable<PointerEvent>;
139
+ protected pointerCancel$: Observable<PointerEvent>;
140
+ protected pointerMove$: Observable<PointerEvent>;
141
+ protected pointerOff$: Observable<PointerEvent>;
142
+ state$: Observable<State>;
143
+ abstract events$: Observable<Event>;
144
+ protected failWith$: Observable<unknown>;
145
+ protected config$: Observable<RecognizerConfig<Options> & {
146
+ panConfig?: PanConfig | undefined;
147
+ } & {
148
+ container: HTMLElement;
149
+ }>;
150
+ constructor(config?: RecognizerConfig<Options>, panConfig?: PanConfig);
151
+ private updateInternal;
152
+ update(config: Partial<RecognizerConfig<Options>>, panConfig?: PanConfig): void;
86
153
  }
87
154
 
88
- declare type RecognizerConfig<Options> = {
155
+ export declare type RecognizerConfig<Options> = {
89
156
  container?: HTMLElement;
90
157
  afterEventReceived?: (event: PointerEvent) => PointerEvent;
91
158
  options?: Options;
159
+ failWith?: {
160
+ start$: Observable<unknown>;
161
+ }[];
92
162
  };
93
163
 
94
164
  declare interface RecognizerEvent {
@@ -134,14 +204,8 @@ declare interface RecognizerEvent {
134
204
  pointersAverageDistance: number;
135
205
  }
136
206
 
137
- declare interface RecognizerOptions {
138
- failWith?: {
139
- start$: Observable<unknown>;
140
- }[];
141
- }
142
-
143
- export declare interface RotateEvent extends RecognizerEvent {
144
- type: "rotate" | "rotateStart" | "rotateEnd";
207
+ declare interface RotateEvent extends RecognizerEvent {
208
+ type: "rotateMove" | "rotateStart" | "rotateEnd";
145
209
  /**
146
210
  * Current rotation angle
147
211
  */
@@ -152,13 +216,37 @@ export declare interface RotateEvent extends RecognizerEvent {
152
216
  deltaAngle: number;
153
217
  }
154
218
 
155
- export declare class RotateRecognizer extends Recognizer<Options_4> {
156
- protected options: Options_4;
219
+ export declare class RotateRecognizer extends Recognizer<RotateRecognizerOptions, RotateEvent> implements RotateRecognizerInterface {
220
+ events$: Observable<RotateEvent>;
221
+ constructor(config?: RecognizerConfig<RotateRecognizerOptions>);
222
+ update(options: RecognizerConfig<RotateRecognizerOptions>): void;
223
+ }
224
+
225
+ declare interface RotateRecognizerInterface extends Recognizer<RotateRecognizerOptions, RotateEvent> {
157
226
  events$: Observable<RotateEvent>;
158
- constructor(options?: Options_4);
227
+ update(options: RecognizerConfig<RotateRecognizerOptions>): void;
159
228
  }
160
229
 
161
- export declare interface SwipeEvent extends RecognizerEvent {
230
+ declare interface RotateRecognizerOptions {
231
+ /**
232
+ * @default 15
233
+ */
234
+ posThreshold?: number;
235
+ /**
236
+ * Minimum fingers required to trigger.
237
+ *
238
+ * A value lower than 2 will not work
239
+ *
240
+ * @default 2
241
+ */
242
+ numInputs?: number;
243
+ }
244
+
245
+ export declare type State = {
246
+ fingers: number;
247
+ };
248
+
249
+ declare interface SwipeEvent extends RecognizerEvent {
162
250
  type: "swipe";
163
251
  /**
164
252
  * Angle between first pointer and last one in degree
@@ -170,23 +258,80 @@ export declare interface SwipeEvent extends RecognizerEvent {
170
258
  angle: number;
171
259
  }
172
260
 
173
- export declare class SwipeRecognizer extends Recognizer<Options_2> {
174
- protected options: Options_2;
261
+ export declare class SwipeRecognizer extends Recognizer<SwipeRecognizerOptions, SwipeEvent> implements SwipeRecognizerInterface {
175
262
  events$: Observable<SwipeEvent>;
176
- constructor(options?: Options_2);
263
+ constructor(config?: RecognizerConfig<SwipeRecognizerOptions>);
264
+ update(config: RecognizerConfig<SwipeRecognizerOptions>): void;
177
265
  }
178
266
 
179
- export declare interface TapEvent extends RecognizerEvent {
267
+ declare interface SwipeRecognizerInterface extends Recognizer<SwipeRecognizerOptions, SwipeEvent> {
268
+ events$: Observable<SwipeEvent>;
269
+ update(options: RecognizerConfig<SwipeRecognizerOptions>): void;
270
+ }
271
+
272
+ declare interface SwipeRecognizerOptions {
273
+ /**
274
+ * The minimum velocity (px/ms) that the gesture has to obtain by the end event.
275
+ *
276
+ * @default 0.9
277
+ */
278
+ escapeVelocity?: number;
279
+ }
280
+
281
+ declare interface TapEvent extends RecognizerEvent {
180
282
  type: "tap";
181
283
  taps: number;
182
284
  }
183
285
 
184
- export declare class TapRecognizer extends Recognizer<Options_3> {
185
- protected options: Options_3;
286
+ export declare class TapRecognizer extends Recognizer<TapRecognizerOptions, TapEvent> implements TapRecognizerInterface {
287
+ events$: Observable<TapEvent>;
288
+ constructor(options?: RecognizerConfig<TapRecognizerOptions>);
289
+ update(config: RecognizerConfig<TapRecognizerOptions>): void;
290
+ }
291
+
292
+ declare interface TapRecognizerInterface extends Recognizer<TapRecognizerOptions, TapEvent> {
186
293
  events$: Observable<TapEvent>;
187
- constructor(options: Options_3);
294
+ update(options: RecognizerConfig<TapRecognizerOptions>): void;
188
295
  }
189
296
 
190
- declare type ValidRecognizerConfig<Options> = Required<Pick<RecognizerConfig<Options>, "container">> & RecognizerConfig<Options>;
297
+ declare interface TapRecognizerOptions {
298
+ /**
299
+ * Introduce a delay before recognizing a tap. This can be used to register more taps.
300
+ *
301
+ *
302
+ * A longer time will delay the click event but make it easier to multi taps.
303
+ * Try to find a good balance between latency and accessibility.
304
+ *
305
+ * @default 0
306
+ */
307
+ multiTapThreshold?: number;
308
+ /**
309
+ * Maximum time you allow a finger to be pressed on the screen before cancelling the gesture.
310
+ *
311
+ * This can be used to allow long press for example.
312
+ * The default value does not really allow long press but rather accomodate for slower
313
+ * taps.
314
+ *
315
+ * @default 150
316
+ */
317
+ maximumPressTime?: number;
318
+ /**
319
+ * Maximum number of taps allowed for the gesture. Going above will ignore the gesture.
320
+ * Going below will register a gesture with the number of taps.
321
+ *
322
+ * For example you can allow single and double tap only by setting `2` as value.
323
+ *
324
+ * @default 1
325
+ */
326
+ maxTaps?: number;
327
+ /**
328
+ * A tolerance value which allows the user to move their finger about a radius measured in pixels.
329
+ * This allows the Tap gesture to be triggered more easily since a User might move their
330
+ * finger slightly during a tap event.
331
+ *
332
+ * @default 10
333
+ */
334
+ tolerance?: number;
335
+ }
191
336
 
192
337
  export { }