gesturx 1.5.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/dist/index.d.ts CHANGED
@@ -2,69 +2,44 @@ import { BehaviorSubject } from 'rxjs';
2
2
  import { Observable } from 'rxjs';
3
3
  import { ObservedValueOf } from 'rxjs';
4
4
 
5
- export declare const createManager: ({ afterEventReceived, recognizers, }: {
6
- recognizers: (TapRecognizer | PanRecognizer | SwipeRecognizer | RotateRecognizer | PinchRecognizer)[];
7
- afterEventReceived?: (event: PointerEvent) => PointerEvent;
8
- }) => {
9
- events$: Observable<PanEvent | SwipeEvent | TapEvent | RotateEvent | PinchEvent>;
10
- initialize: (container: HTMLElement) => void;
11
- recognizers: (PanRecognizer | SwipeRecognizer | TapRecognizer | RotateRecognizer | PinchRecognizer)[];
12
- };
13
-
14
- export declare class Manager {
15
- protected options: {
16
- recognizers: Recognizer_2[];
17
- afterEventReceived?: (event: PointerEvent) => PointerEvent;
18
- };
19
- readonly events$: Observable<ObservedValueOf<Recognizer_2["events$"]>>;
20
- recognizers: Recognizer_2[];
21
- constructor(options: {
22
- recognizers: Recognizer_2[];
23
- afterEventReceived?: (event: PointerEvent) => PointerEvent;
24
- });
25
- initialize(container: HTMLElement): void;
26
- }
27
-
28
- declare type Options = {
5
+ declare type PanConfig = {
29
6
  posThreshold?: number;
30
- };
31
-
32
- declare type Options_2 = {
7
+ delay?: number;
33
8
  /**
34
- * 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
35
11
  */
36
- escapeVelocity?: number;
37
12
  numInputs?: number;
38
- maxRestTime?: number;
39
- posThreshold?: number;
40
13
  };
41
14
 
42
- declare interface Options_3 extends RecognizerOptions {
43
- multiTapThreshold?: number;
44
- maximumPressTime?: number;
45
- maxTaps?: number;
46
- posThreshold?: number;
15
+ export declare interface PanEvent extends RecognizerEvent {
16
+ type: "panStart" | "panMove" | "panEnd";
47
17
  }
48
18
 
49
- declare type Options_4 = {
50
- posThreshold?: number;
51
- };
52
-
53
- declare type Options_5 = {
54
- posThreshold?: number;
55
- };
56
-
57
- export declare interface PanEvent extends RecognizerEvent {
19
+ declare interface PanEvent_2 extends RecognizerEvent {
58
20
  type: "panStart" | "panMove" | "panEnd";
59
21
  }
60
22
 
61
- export declare class PanRecognizer extends Recognizer<Options> {
62
- protected options: Options;
23
+ export declare class PanRecognizer extends Recognizer<PanRecognizerOptions, PanEvent> implements PanRecognizerInterface {
63
24
  events$: Observable<PanEvent>;
64
25
  start$: Observable<PanEvent>;
65
26
  end$: Observable<PanEvent>;
66
- fingers$: Observable<number>;
67
- 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;
68
43
  }
69
44
 
70
45
  export declare interface PinchEvent extends RecognizerEvent {
@@ -84,26 +59,106 @@ export declare interface PinchEvent extends RecognizerEvent {
84
59
  deltaDistanceScale: number;
85
60
  }
86
61
 
87
- export declare class PinchRecognizer extends Recognizer<Options_5> {
88
- 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> {
89
69
  events$: Observable<PinchEvent>;
90
- 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;
91
90
  }
92
91
 
93
- declare class Recognizer<Options> {
94
- protected config$: BehaviorSubject<RecognizerConfig<Options>>;
95
- protected validConfig$: Observable<ValidRecognizerConfig<Options>>;
96
- constructor(options: Options);
97
- initialize(config: RecognizerConfig<Options>): void;
98
- update(options: Options): void;
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;
99
117
  }
100
118
 
101
- declare type Recognizer_2 = TapRecognizer | PanRecognizer | SwipeRecognizer | RotateRecognizer | PinchRecognizer;
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;
153
+ }
102
154
 
103
- declare type RecognizerConfig<Options> = {
155
+ export declare type RecognizerConfig<Options> = {
104
156
  container?: HTMLElement;
105
157
  afterEventReceived?: (event: PointerEvent) => PointerEvent;
106
158
  options?: Options;
159
+ failWith?: {
160
+ start$: Observable<unknown>;
161
+ }[];
107
162
  };
108
163
 
109
164
  declare interface RecognizerEvent {
@@ -149,14 +204,8 @@ declare interface RecognizerEvent {
149
204
  pointersAverageDistance: number;
150
205
  }
151
206
 
152
- declare interface RecognizerOptions {
153
- failWith?: {
154
- start$: Observable<unknown>;
155
- }[];
156
- }
157
-
158
- export declare interface RotateEvent extends RecognizerEvent {
159
- type: "rotate" | "rotateStart" | "rotateEnd";
207
+ declare interface RotateEvent extends RecognizerEvent {
208
+ type: "rotateMove" | "rotateStart" | "rotateEnd";
160
209
  /**
161
210
  * Current rotation angle
162
211
  */
@@ -167,13 +216,37 @@ export declare interface RotateEvent extends RecognizerEvent {
167
216
  deltaAngle: number;
168
217
  }
169
218
 
170
- export declare class RotateRecognizer extends Recognizer<Options_4> {
171
- protected options: Options_4;
219
+ export declare class RotateRecognizer extends Recognizer<RotateRecognizerOptions, RotateEvent> implements RotateRecognizerInterface {
172
220
  events$: Observable<RotateEvent>;
173
- constructor(options?: Options_4);
221
+ constructor(config?: RecognizerConfig<RotateRecognizerOptions>);
222
+ update(options: RecognizerConfig<RotateRecognizerOptions>): void;
174
223
  }
175
224
 
176
- export declare interface SwipeEvent extends RecognizerEvent {
225
+ declare interface RotateRecognizerInterface extends Recognizer<RotateRecognizerOptions, RotateEvent> {
226
+ events$: Observable<RotateEvent>;
227
+ update(options: RecognizerConfig<RotateRecognizerOptions>): void;
228
+ }
229
+
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 {
177
250
  type: "swipe";
178
251
  /**
179
252
  * Angle between first pointer and last one in degree
@@ -185,23 +258,80 @@ export declare interface SwipeEvent extends RecognizerEvent {
185
258
  angle: number;
186
259
  }
187
260
 
188
- export declare class SwipeRecognizer extends Recognizer<Options_2> {
189
- protected options: Options_2;
261
+ export declare class SwipeRecognizer extends Recognizer<SwipeRecognizerOptions, SwipeEvent> implements SwipeRecognizerInterface {
262
+ events$: Observable<SwipeEvent>;
263
+ constructor(config?: RecognizerConfig<SwipeRecognizerOptions>);
264
+ update(config: RecognizerConfig<SwipeRecognizerOptions>): void;
265
+ }
266
+
267
+ declare interface SwipeRecognizerInterface extends Recognizer<SwipeRecognizerOptions, SwipeEvent> {
190
268
  events$: Observable<SwipeEvent>;
191
- constructor(options?: Options_2);
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;
192
279
  }
193
280
 
194
- export declare interface TapEvent extends RecognizerEvent {
281
+ declare interface TapEvent extends RecognizerEvent {
195
282
  type: "tap";
196
283
  taps: number;
197
284
  }
198
285
 
199
- export declare class TapRecognizer extends Recognizer<Options_3> {
200
- 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> {
201
293
  events$: Observable<TapEvent>;
202
- constructor(options: Options_3);
294
+ update(options: RecognizerConfig<TapRecognizerOptions>): void;
203
295
  }
204
296
 
205
- 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
+ }
206
336
 
207
337
  export { }