@msobiecki/react-marauders-path 1.24.0 → 1.24.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.
- package/dist/index.es.d.ts +276 -0
- package/dist/index.es.js +761 -0
- package/package.json +1 -1
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
import { RefObject } from 'react';
|
|
2
|
+
|
|
3
|
+
export declare interface CombinationActiveKey {
|
|
4
|
+
pressedAt: number;
|
|
5
|
+
releasedAt?: number;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export declare interface CombinationState {
|
|
9
|
+
activeKeys: Map<Key, CombinationActiveKey>;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export declare interface DragData {
|
|
13
|
+
deltaX: number;
|
|
14
|
+
deltaY: number;
|
|
15
|
+
movementX: number;
|
|
16
|
+
movementY: number;
|
|
17
|
+
duration: number;
|
|
18
|
+
startX: number;
|
|
19
|
+
startY: number;
|
|
20
|
+
endX: number;
|
|
21
|
+
endY: number;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export declare type DragEventPointerType = (typeof DragEventPointerTypes)[keyof typeof DragEventPointerTypes];
|
|
25
|
+
|
|
26
|
+
export declare const DragEventPointerTypes: {
|
|
27
|
+
readonly Touch: "touch";
|
|
28
|
+
readonly Mouse: "mouse";
|
|
29
|
+
readonly Pen: "pen";
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export declare interface DragOptions {
|
|
33
|
+
eventPointerTypes: DragEventPointerType[];
|
|
34
|
+
eventCapture: boolean;
|
|
35
|
+
eventOnce: boolean;
|
|
36
|
+
eventStopImmediatePropagation: boolean;
|
|
37
|
+
threshold: number;
|
|
38
|
+
container: {
|
|
39
|
+
current: HTMLElement | null;
|
|
40
|
+
};
|
|
41
|
+
raf: boolean;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export declare interface DragState {
|
|
45
|
+
startX: number;
|
|
46
|
+
startY: number;
|
|
47
|
+
lastX: number;
|
|
48
|
+
lastY: number;
|
|
49
|
+
startTime: number;
|
|
50
|
+
active: boolean;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export declare type Key = string;
|
|
54
|
+
|
|
55
|
+
export declare type KeyChord = (Key | Key[])[];
|
|
56
|
+
|
|
57
|
+
export declare type KeyEvent = Key | Key[];
|
|
58
|
+
|
|
59
|
+
export declare type KeyEventType = (typeof KeyEventTypes)[keyof typeof KeyEventTypes];
|
|
60
|
+
|
|
61
|
+
export declare const KeyEventTypes: {
|
|
62
|
+
readonly KeyUp: "keyup";
|
|
63
|
+
readonly KeyDown: "keydown";
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
export declare interface KeyOptions {
|
|
67
|
+
eventType: KeyEventType;
|
|
68
|
+
eventRepeat: boolean;
|
|
69
|
+
eventCapture: boolean;
|
|
70
|
+
eventOnce: boolean;
|
|
71
|
+
eventStopImmediatePropagation: boolean;
|
|
72
|
+
sequenceThreshold: number;
|
|
73
|
+
combinationThreshold: number;
|
|
74
|
+
container: RefObject<HTMLElement | null>;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export declare interface PinchData {
|
|
78
|
+
distance: number;
|
|
79
|
+
delta: number;
|
|
80
|
+
totalDelta: number;
|
|
81
|
+
scale: number;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export declare type PinchEventPointerType = (typeof PinchEventPointerTypes)[keyof typeof PinchEventPointerTypes];
|
|
85
|
+
|
|
86
|
+
export declare const PinchEventPointerTypes: {
|
|
87
|
+
readonly Touch: "touch";
|
|
88
|
+
readonly Mouse: "mouse";
|
|
89
|
+
readonly Pen: "pen";
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
export declare interface PinchOptions {
|
|
93
|
+
eventPointerTypes: PinchEventPointerType[];
|
|
94
|
+
eventCapture: boolean;
|
|
95
|
+
eventOnce: boolean;
|
|
96
|
+
eventStopImmediatePropagation: boolean;
|
|
97
|
+
threshold: number;
|
|
98
|
+
container: {
|
|
99
|
+
current: HTMLElement | null;
|
|
100
|
+
};
|
|
101
|
+
raf: boolean;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export declare interface PinchState {
|
|
105
|
+
pointers: Map<number, PointerEvent>;
|
|
106
|
+
startDistance: number;
|
|
107
|
+
lastDistance: number;
|
|
108
|
+
active: boolean;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export declare interface SequenceState {
|
|
112
|
+
key: Key;
|
|
113
|
+
chord: KeyChord;
|
|
114
|
+
index: number;
|
|
115
|
+
sequenceTimeout: ReturnType<typeof setTimeout> | null;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export declare interface SwipeData {
|
|
119
|
+
deltaX: number;
|
|
120
|
+
deltaY: number;
|
|
121
|
+
velocity: number;
|
|
122
|
+
duration: number;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export declare type SwipeDirection = (typeof SwipeDirections)[keyof typeof SwipeDirections];
|
|
126
|
+
|
|
127
|
+
export declare const SwipeDirections: {
|
|
128
|
+
readonly Left: "left";
|
|
129
|
+
readonly Right: "right";
|
|
130
|
+
readonly Up: "up";
|
|
131
|
+
readonly Down: "down";
|
|
132
|
+
readonly Horizontal: "horizontal";
|
|
133
|
+
readonly Vertical: "vertical";
|
|
134
|
+
readonly Both: "both";
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
export declare type SwipeEventPointerType = (typeof SwipeEventPointerTypes)[keyof typeof SwipeEventPointerTypes];
|
|
138
|
+
|
|
139
|
+
export declare const SwipeEventPointerTypes: {
|
|
140
|
+
readonly Touch: "touch";
|
|
141
|
+
readonly Mouse: "mouse";
|
|
142
|
+
readonly Pen: "pen";
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
export declare interface SwipeOptions {
|
|
146
|
+
eventPointerTypes: SwipeEventPointerType[];
|
|
147
|
+
eventCapture: boolean;
|
|
148
|
+
eventOnce: boolean;
|
|
149
|
+
eventStopImmediatePropagation: boolean;
|
|
150
|
+
threshold: number;
|
|
151
|
+
velocity: number;
|
|
152
|
+
container: {
|
|
153
|
+
current: HTMLElement | null;
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export declare interface SwipeState {
|
|
158
|
+
startX: number;
|
|
159
|
+
startY: number;
|
|
160
|
+
startTime: number;
|
|
161
|
+
active: boolean;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
export declare const useDrag: (dragCallback: UseDragCallback, options?: UseDragOptions) => void;
|
|
165
|
+
|
|
166
|
+
export declare type UseDragCallback = ((event: PointerEvent, data: DragData) => boolean) | ((event: PointerEvent, data: DragData) => void);
|
|
167
|
+
|
|
168
|
+
export declare type UseDragOptions = Partial<DragOptions>;
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* React hook for handling keyboard events with support for key sequences and combinations.
|
|
172
|
+
*
|
|
173
|
+
* Enables listening for single key presses, key combinations, and sequential key presses.
|
|
174
|
+
* Supports customizable options like event type, repeat handling, and one-time listeners.
|
|
175
|
+
*
|
|
176
|
+
* @template T - The callback function type
|
|
177
|
+
* @param {UseKeySchema} key - Single key, combination, sequence, or array of patterns to listen for
|
|
178
|
+
* @param {UseKeyCallback} keyCallback - Callback function invoked when key pattern matches
|
|
179
|
+
* @param {UseKeyOptions} [options] - Configuration options for the hook
|
|
180
|
+
* @param {KeyEventType} [options.eventType=KeyEventTypes.KeyUp] - Type of keyboard event ('keydown' or 'keyup')
|
|
181
|
+
* @param {boolean} [options.eventRepeat=false] - Allow repeated key presses to trigger callback
|
|
182
|
+
* @param {boolean} [options.eventCapture=false] - Use event capture phase instead of bubbling
|
|
183
|
+
* @param {boolean} [options.eventOnce=false] - Trigger callback only once
|
|
184
|
+
* @param {boolean} [options.eventStopImmediatePropagation=false] - Stop immediate propagation
|
|
185
|
+
* @param {number} [options.sequenceThreshold=1000] - Timeout in ms between sequence keys
|
|
186
|
+
* @param {number} [options.combinationThreshold=200] - Timeout in ms between combination keys
|
|
187
|
+
* @param {RefObject<HTMLElement>} [options.container] - DOM element to attach listener to (default: window)
|
|
188
|
+
*
|
|
189
|
+
* @example
|
|
190
|
+
* // Single key schema
|
|
191
|
+
* useKey('a', (event, key) => console.log(`Pressed ${key}`));
|
|
192
|
+
*
|
|
193
|
+
* @example
|
|
194
|
+
* // Multiple patterns of single key schema
|
|
195
|
+
* useKey(['a', 'b', 'c'], (event, key) => console.log(`Pressed ${key}`));
|
|
196
|
+
*
|
|
197
|
+
* @example
|
|
198
|
+
* // Combination key schema
|
|
199
|
+
* useKey('a+b', (event, key) => {
|
|
200
|
+
* console.log(`Pressed ${key}`);
|
|
201
|
+
* });
|
|
202
|
+
*
|
|
203
|
+
* @example
|
|
204
|
+
* // Multiple patterns of combination key schema
|
|
205
|
+
* useKey(['a+b', 'c+d'], (event, key) => {
|
|
206
|
+
* console.log(`Pressed ${key}`);
|
|
207
|
+
* });
|
|
208
|
+
*
|
|
209
|
+
* @example
|
|
210
|
+
* // Sequential key schema
|
|
211
|
+
* useKey('ArrowUp ArrowUp ArrowDown ArrowDown', (event, key) => {
|
|
212
|
+
* console.log(`Pressed ${key}`);
|
|
213
|
+
* });
|
|
214
|
+
*
|
|
215
|
+
* @example
|
|
216
|
+
* // Multiple patterns of sequential key schema
|
|
217
|
+
* useKey(['ArrowUp ArrowUp ArrowDown ArrowDown', 'ArrowLeft ArrowRight'], (event, key) => {
|
|
218
|
+
* console.log(`Pressed ${key}`);
|
|
219
|
+
* });
|
|
220
|
+
*
|
|
221
|
+
* @example
|
|
222
|
+
* // Using options to listen for a key on keydown event and stop propagation
|
|
223
|
+
* useKey('Any', handleSubmit, {
|
|
224
|
+
* eventType: KeyEventTypes.KeyDown,
|
|
225
|
+
* eventStopImmediatePropagation: true,
|
|
226
|
+
* container: inputRef
|
|
227
|
+
* });
|
|
228
|
+
*
|
|
229
|
+
*/
|
|
230
|
+
export declare const useKey: (key: UseKeySchema, keyCallback: UseKeyCallback, options?: UseKeyOptions) => void;
|
|
231
|
+
|
|
232
|
+
export declare type UseKeyCallback = ((event: KeyboardEvent, key: Key, ...properties: unknown[]) => boolean) | ((event: KeyboardEvent, key: Key, ...properties: unknown[]) => void);
|
|
233
|
+
|
|
234
|
+
export declare type UseKeyOptions = Partial<KeyOptions>;
|
|
235
|
+
|
|
236
|
+
export declare type UseKeySchema = KeyEvent;
|
|
237
|
+
|
|
238
|
+
export declare const usePinch: (pinchCallback: UsePinchCallback, options?: UsePinchOptions) => void;
|
|
239
|
+
|
|
240
|
+
export declare type UsePinchCallback = ((event: PointerEvent, data: PinchData) => boolean) | ((event: PointerEvent, data: PinchData) => void);
|
|
241
|
+
|
|
242
|
+
export declare type UsePinchOptions = Partial<PinchOptions>;
|
|
243
|
+
|
|
244
|
+
export declare const useSwipe: (swipe: UseSwipeSchema, swipeCallback: UseSwipeCallback, options?: UseSwipeOptions) => void;
|
|
245
|
+
|
|
246
|
+
export declare type UseSwipeCallback = ((event: PointerEvent, direction: SwipeDirection, data: SwipeData, ...properties: unknown[]) => boolean) | ((event: PointerEvent, direction: SwipeDirection, data: SwipeData, ...properties: unknown[]) => void);
|
|
247
|
+
|
|
248
|
+
export declare type UseSwipeOptions = Partial<SwipeOptions>;
|
|
249
|
+
|
|
250
|
+
export declare type UseSwipeSchema = SwipeDirection | SwipeDirection[];
|
|
251
|
+
|
|
252
|
+
export declare const useWheel: (wheelCallback: UseWheelCallback, options?: UseWheelOptions) => void;
|
|
253
|
+
|
|
254
|
+
export declare type UseWheelCallback = ((event: WheelEvent, delta: WheelData, ...properties: unknown[]) => void) | ((event: WheelEvent, delta: WheelData, ...properties: unknown[]) => boolean);
|
|
255
|
+
|
|
256
|
+
export declare type UseWheelOptions = Partial<WheelOptions>;
|
|
257
|
+
|
|
258
|
+
export declare interface WheelData {
|
|
259
|
+
deltaX: number;
|
|
260
|
+
deltaY: number;
|
|
261
|
+
deltaZ: number;
|
|
262
|
+
deltaMode: number;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
export declare interface WheelOptions {
|
|
266
|
+
eventPassive: boolean;
|
|
267
|
+
eventCapture: boolean;
|
|
268
|
+
eventOnce: boolean;
|
|
269
|
+
eventStopImmediatePropagation: boolean;
|
|
270
|
+
container: {
|
|
271
|
+
current: HTMLElement | null;
|
|
272
|
+
};
|
|
273
|
+
raf: boolean;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
export { }
|
package/dist/index.es.js
ADDED
|
@@ -0,0 +1,761 @@
|
|
|
1
|
+
import { useRef as E, useCallback as u, useEffect as x } from "react";
|
|
2
|
+
const k = (n, s, c, r) => {
|
|
3
|
+
r.stopImmediate && n.stopImmediatePropagation(), c(n, s) && n.preventDefault(), r.once && r.onOnce?.();
|
|
4
|
+
}, Z = {
|
|
5
|
+
eventPointerTypes: ["touch", "mouse", "pen"],
|
|
6
|
+
eventCapture: !1,
|
|
7
|
+
eventOnce: !1,
|
|
8
|
+
eventStopImmediatePropagation: !1,
|
|
9
|
+
threshold: 0,
|
|
10
|
+
container: { current: null },
|
|
11
|
+
raf: !1
|
|
12
|
+
}, ie = (n, s = {}) => {
|
|
13
|
+
const {
|
|
14
|
+
eventPointerTypes: c,
|
|
15
|
+
eventCapture: r,
|
|
16
|
+
eventOnce: a,
|
|
17
|
+
eventStopImmediatePropagation: p,
|
|
18
|
+
threshold: f,
|
|
19
|
+
container: R,
|
|
20
|
+
raf: O
|
|
21
|
+
} = { ...Z, ...s }, T = E(null), m = E(null), y = E(null), h = E(null), A = E(null), d = E({
|
|
22
|
+
startX: 0,
|
|
23
|
+
startY: 0,
|
|
24
|
+
lastX: 0,
|
|
25
|
+
lastY: 0,
|
|
26
|
+
startTime: 0,
|
|
27
|
+
active: !1
|
|
28
|
+
}), S = u(() => {
|
|
29
|
+
m.current?.abort();
|
|
30
|
+
}, []), L = u(() => {
|
|
31
|
+
y.current = null;
|
|
32
|
+
const e = h.current, t = A.current;
|
|
33
|
+
!e || !t || (k(t, e, n, {
|
|
34
|
+
stopImmediate: p,
|
|
35
|
+
once: a,
|
|
36
|
+
onOnce: () => {
|
|
37
|
+
S();
|
|
38
|
+
}
|
|
39
|
+
}), h.current = null, A.current = null);
|
|
40
|
+
}, [n, p, a, S]), g = u(
|
|
41
|
+
(e) => {
|
|
42
|
+
e.isPrimary && c.includes(e.pointerType) && (d.current = {
|
|
43
|
+
startX: e.clientX,
|
|
44
|
+
startY: e.clientY,
|
|
45
|
+
lastX: e.clientX,
|
|
46
|
+
lastY: e.clientY,
|
|
47
|
+
startTime: Date.now(),
|
|
48
|
+
active: !0
|
|
49
|
+
});
|
|
50
|
+
},
|
|
51
|
+
[c]
|
|
52
|
+
), Y = u(
|
|
53
|
+
(e) => {
|
|
54
|
+
const t = d.current;
|
|
55
|
+
if (!t.active || !e.isPrimary || !c.includes(e.pointerType))
|
|
56
|
+
return;
|
|
57
|
+
const D = e.clientX - t.startX, P = e.clientY - t.startY, v = e.clientX - t.lastX, M = e.clientY - t.lastY;
|
|
58
|
+
if (Math.hypot(D, P) < f) return;
|
|
59
|
+
const i = Date.now() - t.startTime, l = {
|
|
60
|
+
deltaX: D,
|
|
61
|
+
deltaY: P,
|
|
62
|
+
movementX: v,
|
|
63
|
+
movementY: M,
|
|
64
|
+
duration: i,
|
|
65
|
+
startX: t.startX,
|
|
66
|
+
startY: t.startY,
|
|
67
|
+
endX: e.clientX,
|
|
68
|
+
endY: e.clientY
|
|
69
|
+
};
|
|
70
|
+
if (t.lastX = e.clientX, t.lastY = e.clientY, !O) {
|
|
71
|
+
k(e, l, n, {
|
|
72
|
+
stopImmediate: p,
|
|
73
|
+
once: a,
|
|
74
|
+
onOnce: () => {
|
|
75
|
+
S();
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
h.current = l, A.current = e, y.current === null && (y.current = requestAnimationFrame(L));
|
|
81
|
+
},
|
|
82
|
+
[
|
|
83
|
+
c,
|
|
84
|
+
f,
|
|
85
|
+
O,
|
|
86
|
+
n,
|
|
87
|
+
p,
|
|
88
|
+
a,
|
|
89
|
+
S,
|
|
90
|
+
L
|
|
91
|
+
]
|
|
92
|
+
), X = u(
|
|
93
|
+
(e) => {
|
|
94
|
+
e.isPrimary && c.includes(e.pointerType) && (d.current.active = !1);
|
|
95
|
+
},
|
|
96
|
+
[c]
|
|
97
|
+
), K = u(() => {
|
|
98
|
+
d.current.active = !1;
|
|
99
|
+
}, []);
|
|
100
|
+
x(() => {
|
|
101
|
+
T.current = R?.current ?? globalThis, m.current = new AbortController();
|
|
102
|
+
const e = (v) => g(v), t = (v) => Y(v), D = (v) => X(v), P = () => K();
|
|
103
|
+
return T.current.addEventListener(
|
|
104
|
+
"pointerdown",
|
|
105
|
+
e,
|
|
106
|
+
{
|
|
107
|
+
capture: r,
|
|
108
|
+
signal: m.current.signal
|
|
109
|
+
}
|
|
110
|
+
), T.current.addEventListener(
|
|
111
|
+
"pointermove",
|
|
112
|
+
t,
|
|
113
|
+
{
|
|
114
|
+
capture: r,
|
|
115
|
+
signal: m.current.signal
|
|
116
|
+
}
|
|
117
|
+
), T.current.addEventListener("pointerup", D, {
|
|
118
|
+
capture: r,
|
|
119
|
+
signal: m.current.signal
|
|
120
|
+
}), T.current.addEventListener(
|
|
121
|
+
"pointercancel",
|
|
122
|
+
P,
|
|
123
|
+
{
|
|
124
|
+
capture: r,
|
|
125
|
+
signal: m.current.signal
|
|
126
|
+
}
|
|
127
|
+
), () => {
|
|
128
|
+
m.current?.abort(), d.current.active = !1, y.current !== null && cancelAnimationFrame(y.current);
|
|
129
|
+
};
|
|
130
|
+
}, [
|
|
131
|
+
R,
|
|
132
|
+
r,
|
|
133
|
+
g,
|
|
134
|
+
Y,
|
|
135
|
+
X,
|
|
136
|
+
K
|
|
137
|
+
]);
|
|
138
|
+
}, ue = {
|
|
139
|
+
Touch: "touch",
|
|
140
|
+
Mouse: "mouse",
|
|
141
|
+
Pen: "pen"
|
|
142
|
+
}, F = {
|
|
143
|
+
KeyUp: "keyup",
|
|
144
|
+
KeyDown: "keydown"
|
|
145
|
+
}, U = {
|
|
146
|
+
ENTER: "Enter",
|
|
147
|
+
ESC: "Escape",
|
|
148
|
+
ESCAPE: "Escape",
|
|
149
|
+
SPACE: "Space",
|
|
150
|
+
TAB: "Tab",
|
|
151
|
+
SHIFT: "Shift",
|
|
152
|
+
CONTROL: "Control",
|
|
153
|
+
CTRL: "Control",
|
|
154
|
+
ALT: "Alt",
|
|
155
|
+
META: "Meta",
|
|
156
|
+
ARROWUP: "ArrowUp",
|
|
157
|
+
ARROWDOWN: "ArrowDown",
|
|
158
|
+
ARROWLEFT: "ArrowLeft",
|
|
159
|
+
ARROWRIGHT: "ArrowRight",
|
|
160
|
+
BACKSPACE: "Backspace",
|
|
161
|
+
DELETE: "Delete",
|
|
162
|
+
DEL: "Delete",
|
|
163
|
+
INSERT: "Insert",
|
|
164
|
+
HOME: "Home",
|
|
165
|
+
END: "End",
|
|
166
|
+
PAGEUP: "PageUp",
|
|
167
|
+
PAGEDOWN: "PageDown",
|
|
168
|
+
CONTEXTMENU: "ContextMenu",
|
|
169
|
+
CAPSLOCK: "CapsLock",
|
|
170
|
+
NUMLOCK: "NumLock",
|
|
171
|
+
SCROLLLOCK: "ScrollLock",
|
|
172
|
+
ANY: "Any"
|
|
173
|
+
// Special key to match any key in sequences
|
|
174
|
+
}, _ = (n) => {
|
|
175
|
+
if (!n)
|
|
176
|
+
return n;
|
|
177
|
+
const s = n.trim(), c = s.toUpperCase();
|
|
178
|
+
return c in U ? U[c] : s.length === 1 ? s.toLowerCase() : s[0].toUpperCase() + s.slice(1).toLowerCase();
|
|
179
|
+
}, J = (n) => n.split(" ").filter(Boolean).map(
|
|
180
|
+
(s) => s.split("+").map((c) => _(c)).join("+")
|
|
181
|
+
).join(" "), Q = (n) => (Array.isArray(n) ? n : [n]).map((c) => {
|
|
182
|
+
const r = J(c), p = r.split(" ").filter((f) => f.length > 0).map(
|
|
183
|
+
(f) => f.includes("+") ? f.split("+") : f
|
|
184
|
+
);
|
|
185
|
+
return {
|
|
186
|
+
key: r,
|
|
187
|
+
chord: p,
|
|
188
|
+
index: 0,
|
|
189
|
+
sequenceTimeout: null
|
|
190
|
+
};
|
|
191
|
+
}), ee = (n, s) => {
|
|
192
|
+
const c = { ...n, index: 0, sequenceTimeout: null };
|
|
193
|
+
return n.sequenceTimeout && clearTimeout(n.sequenceTimeout), s.map(
|
|
194
|
+
(r) => r === n ? c : r
|
|
195
|
+
);
|
|
196
|
+
}, B = (n, s, c, r) => {
|
|
197
|
+
const a = {
|
|
198
|
+
...n,
|
|
199
|
+
index: n.index + 1,
|
|
200
|
+
sequenceTimeout: n.sequenceTimeout
|
|
201
|
+
};
|
|
202
|
+
c && (a.sequenceTimeout && clearTimeout(a.sequenceTimeout), a.sequenceTimeout = setTimeout(
|
|
203
|
+
() => r(a),
|
|
204
|
+
c
|
|
205
|
+
));
|
|
206
|
+
const p = s.map(
|
|
207
|
+
(f) => f === n ? a : f
|
|
208
|
+
);
|
|
209
|
+
return [a, p];
|
|
210
|
+
}, q = (n, s, c, r) => {
|
|
211
|
+
r.stopImmediate && n.stopImmediatePropagation(), c(n, s) && n.preventDefault(), r.once && r.onOnce?.();
|
|
212
|
+
}, te = (n, s) => !(!s.repeat && n.repeat), $ = {
|
|
213
|
+
eventType: F.KeyUp,
|
|
214
|
+
eventRepeat: !1,
|
|
215
|
+
eventCapture: !1,
|
|
216
|
+
eventOnce: !1,
|
|
217
|
+
eventStopImmediatePropagation: !1,
|
|
218
|
+
sequenceThreshold: 1e3,
|
|
219
|
+
combinationThreshold: 200,
|
|
220
|
+
container: { current: null }
|
|
221
|
+
}, le = (n, s, c = $) => {
|
|
222
|
+
const {
|
|
223
|
+
eventType: r,
|
|
224
|
+
eventRepeat: a,
|
|
225
|
+
eventCapture: p,
|
|
226
|
+
eventOnce: f,
|
|
227
|
+
eventStopImmediatePropagation: R,
|
|
228
|
+
sequenceThreshold: O,
|
|
229
|
+
combinationThreshold: T,
|
|
230
|
+
container: m
|
|
231
|
+
} = { ...$, ...c }, y = E(null), h = E(null), A = E({
|
|
232
|
+
activeKeys: /* @__PURE__ */ new Map()
|
|
233
|
+
}), d = E([]), S = u(() => {
|
|
234
|
+
h.current && h.current.abort();
|
|
235
|
+
}, []), L = u(() => {
|
|
236
|
+
A.current.activeKeys.clear();
|
|
237
|
+
}, []), g = u((o) => {
|
|
238
|
+
d.current = ee(
|
|
239
|
+
o,
|
|
240
|
+
d.current
|
|
241
|
+
);
|
|
242
|
+
}, []), Y = u(
|
|
243
|
+
(o) => te(o, {
|
|
244
|
+
repeat: a
|
|
245
|
+
}),
|
|
246
|
+
[a]
|
|
247
|
+
), X = u((o) => {
|
|
248
|
+
const i = o.key === " " ? U.SPACE : o.key;
|
|
249
|
+
A.current.activeKeys.set(i, {
|
|
250
|
+
pressedAt: Date.now()
|
|
251
|
+
});
|
|
252
|
+
}, []), K = u((o) => {
|
|
253
|
+
const i = o.key === " " ? U.SPACE : o.key, l = A.current.activeKeys.get(i);
|
|
254
|
+
l && (l.releasedAt = Date.now());
|
|
255
|
+
}, []), e = u(() => {
|
|
256
|
+
const o = Date.now(), i = A.current;
|
|
257
|
+
[...i.activeKeys.entries()].forEach(([l, w]) => {
|
|
258
|
+
r === F.KeyDown ? w.releasedAt && i.activeKeys.delete(l) : w.releasedAt && o - w.releasedAt > T && i.activeKeys.delete(l);
|
|
259
|
+
});
|
|
260
|
+
}, [r, T]), t = u(
|
|
261
|
+
(o, i) => {
|
|
262
|
+
if (r === F.KeyDown)
|
|
263
|
+
return i.size === o.length && o.every((l) => l === U.ANY ? i.size > 0 : i.has(l));
|
|
264
|
+
if (r === F.KeyUp) {
|
|
265
|
+
const l = o.map((C) => {
|
|
266
|
+
if (C === U.ANY) {
|
|
267
|
+
const H = [...i.entries()].at(-1);
|
|
268
|
+
return H ? H[1] : void 0;
|
|
269
|
+
}
|
|
270
|
+
return i.get(C);
|
|
271
|
+
});
|
|
272
|
+
if (l.some((C) => !C?.releasedAt))
|
|
273
|
+
return !1;
|
|
274
|
+
const w = l.map((C) => C?.pressedAt).filter((C) => C !== void 0), I = l.map((C) => C?.releasedAt).filter((C) => C !== void 0), N = Math.min(...I), W = Math.max(...I);
|
|
275
|
+
return !(Math.max(...w) > N || W - N > T);
|
|
276
|
+
}
|
|
277
|
+
return !1;
|
|
278
|
+
},
|
|
279
|
+
[r, T]
|
|
280
|
+
), D = u(
|
|
281
|
+
(o, i) => {
|
|
282
|
+
const l = i.chord[0];
|
|
283
|
+
if (Array.isArray(l)) {
|
|
284
|
+
const { activeKeys: I } = A.current;
|
|
285
|
+
if (!t(l, I))
|
|
286
|
+
return;
|
|
287
|
+
q(o, i.key, s, {
|
|
288
|
+
stopImmediate: R,
|
|
289
|
+
once: f,
|
|
290
|
+
onOnce: () => {
|
|
291
|
+
S();
|
|
292
|
+
}
|
|
293
|
+
});
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
const w = o.key === " " ? U.SPACE : o.key;
|
|
297
|
+
l !== U.ANY && l !== w || q(o, i.key, s, {
|
|
298
|
+
stopImmediate: R,
|
|
299
|
+
once: f,
|
|
300
|
+
onOnce: () => {
|
|
301
|
+
S();
|
|
302
|
+
}
|
|
303
|
+
});
|
|
304
|
+
},
|
|
305
|
+
[
|
|
306
|
+
R,
|
|
307
|
+
f,
|
|
308
|
+
s,
|
|
309
|
+
t,
|
|
310
|
+
S
|
|
311
|
+
]
|
|
312
|
+
), P = u(
|
|
313
|
+
(o, i) => {
|
|
314
|
+
const l = i.chord[i.index];
|
|
315
|
+
if (Array.isArray(l)) {
|
|
316
|
+
const { activeKeys: W } = A.current;
|
|
317
|
+
if (!t(l, W))
|
|
318
|
+
return;
|
|
319
|
+
const [z, C] = B(
|
|
320
|
+
i,
|
|
321
|
+
d.current,
|
|
322
|
+
O,
|
|
323
|
+
g
|
|
324
|
+
);
|
|
325
|
+
d.current = C, z.index === z.chord.length && (q(o, z.key, s, {
|
|
326
|
+
stopImmediate: R,
|
|
327
|
+
once: f,
|
|
328
|
+
onOnce: () => {
|
|
329
|
+
S();
|
|
330
|
+
}
|
|
331
|
+
}), g(z));
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
const w = o.key === " " ? U.SPACE : o.key;
|
|
335
|
+
if (l !== U.ANY && l !== w) {
|
|
336
|
+
g(i);
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
const [I, N] = B(
|
|
340
|
+
i,
|
|
341
|
+
d.current,
|
|
342
|
+
O,
|
|
343
|
+
g
|
|
344
|
+
);
|
|
345
|
+
d.current = N, I.index === I.chord.length && (q(o, I.key, s, {
|
|
346
|
+
stopImmediate: R,
|
|
347
|
+
once: f,
|
|
348
|
+
onOnce: () => {
|
|
349
|
+
S();
|
|
350
|
+
}
|
|
351
|
+
}), g(I));
|
|
352
|
+
},
|
|
353
|
+
[
|
|
354
|
+
f,
|
|
355
|
+
R,
|
|
356
|
+
O,
|
|
357
|
+
s,
|
|
358
|
+
g,
|
|
359
|
+
t,
|
|
360
|
+
S
|
|
361
|
+
]
|
|
362
|
+
), v = u(
|
|
363
|
+
(o) => {
|
|
364
|
+
d.current.forEach((i) => {
|
|
365
|
+
i.chord.length === 1 ? D(o, i) : P(o, i);
|
|
366
|
+
});
|
|
367
|
+
},
|
|
368
|
+
[D, P]
|
|
369
|
+
), M = u(
|
|
370
|
+
(o) => {
|
|
371
|
+
Y(o) && (e(), v(o));
|
|
372
|
+
},
|
|
373
|
+
[Y, e, v]
|
|
374
|
+
);
|
|
375
|
+
x(() => {
|
|
376
|
+
d.current = Q(n);
|
|
377
|
+
}, [n]), x(() => {
|
|
378
|
+
y.current = m?.current ?? globalThis, h.current = new AbortController();
|
|
379
|
+
const o = (w) => X(w);
|
|
380
|
+
y.current.addEventListener("keydown", o, {
|
|
381
|
+
capture: p,
|
|
382
|
+
signal: h.current.signal
|
|
383
|
+
});
|
|
384
|
+
const i = (w) => K(w);
|
|
385
|
+
y.current.addEventListener("keyup", i, {
|
|
386
|
+
capture: p,
|
|
387
|
+
signal: h.current.signal
|
|
388
|
+
});
|
|
389
|
+
const l = (w) => M(w);
|
|
390
|
+
return y.current.addEventListener(r, l, {
|
|
391
|
+
capture: p,
|
|
392
|
+
signal: h.current.signal
|
|
393
|
+
}), () => {
|
|
394
|
+
h.current?.abort(), L(), d.current.forEach((w) => g(w));
|
|
395
|
+
};
|
|
396
|
+
}, [
|
|
397
|
+
r,
|
|
398
|
+
p,
|
|
399
|
+
m,
|
|
400
|
+
X,
|
|
401
|
+
K,
|
|
402
|
+
M,
|
|
403
|
+
L,
|
|
404
|
+
g
|
|
405
|
+
]);
|
|
406
|
+
}, G = (n, s, c, r) => {
|
|
407
|
+
r.stopImmediate && n.stopImmediatePropagation(), c(n, s) && n.preventDefault(), r.once && r.onOnce?.();
|
|
408
|
+
}, ne = {
|
|
409
|
+
eventPointerTypes: ["touch"],
|
|
410
|
+
eventCapture: !1,
|
|
411
|
+
eventOnce: !1,
|
|
412
|
+
eventStopImmediatePropagation: !1,
|
|
413
|
+
threshold: 0,
|
|
414
|
+
container: { current: null },
|
|
415
|
+
raf: !1
|
|
416
|
+
}, de = (n, s = {}) => {
|
|
417
|
+
const {
|
|
418
|
+
eventPointerTypes: c,
|
|
419
|
+
eventCapture: r,
|
|
420
|
+
eventOnce: a,
|
|
421
|
+
eventStopImmediatePropagation: p,
|
|
422
|
+
threshold: f,
|
|
423
|
+
container: R,
|
|
424
|
+
raf: O
|
|
425
|
+
} = { ...ne, ...s }, T = E(null), m = E(null), y = E(null), h = E(null), A = E(null), d = E({
|
|
426
|
+
pointers: /* @__PURE__ */ new Map(),
|
|
427
|
+
startDistance: 0,
|
|
428
|
+
lastDistance: 0,
|
|
429
|
+
active: !1
|
|
430
|
+
}), S = u(() => {
|
|
431
|
+
m.current?.abort();
|
|
432
|
+
}, []), L = u(() => {
|
|
433
|
+
y.current = null;
|
|
434
|
+
const e = h.current, t = A.current;
|
|
435
|
+
!e || !t || (G(t, e, n, {
|
|
436
|
+
stopImmediate: p,
|
|
437
|
+
once: a,
|
|
438
|
+
onOnce: () => S()
|
|
439
|
+
}), h.current = null, A.current = null);
|
|
440
|
+
}, [
|
|
441
|
+
n,
|
|
442
|
+
p,
|
|
443
|
+
a,
|
|
444
|
+
S
|
|
445
|
+
]), g = u(
|
|
446
|
+
(e) => {
|
|
447
|
+
if (!c.includes(e.pointerType))
|
|
448
|
+
return;
|
|
449
|
+
const t = d.current;
|
|
450
|
+
if (t.pointers.set(e.pointerId, e), t.pointers.size === 2) {
|
|
451
|
+
const [D, P] = [...t.pointers.values()], v = P.clientX - D.clientX, M = P.clientY - D.clientY, o = Math.hypot(v, M);
|
|
452
|
+
t.startDistance = o, t.lastDistance = o, t.active = !0;
|
|
453
|
+
}
|
|
454
|
+
},
|
|
455
|
+
[c]
|
|
456
|
+
), Y = u(
|
|
457
|
+
(e) => {
|
|
458
|
+
const t = d.current;
|
|
459
|
+
if (!t.active || !t.pointers.has(e.pointerId) || (t.pointers.set(e.pointerId, e), t.pointers.size < 2)) return;
|
|
460
|
+
const [D, P] = [...t.pointers.values()], v = P.clientX - D.clientX, M = P.clientY - D.clientY, o = Math.hypot(v, M), i = o - t.lastDistance, l = o - t.startDistance;
|
|
461
|
+
if (Math.abs(l) < f) return;
|
|
462
|
+
const w = o / t.startDistance, I = {
|
|
463
|
+
distance: o,
|
|
464
|
+
delta: i,
|
|
465
|
+
totalDelta: l,
|
|
466
|
+
scale: w
|
|
467
|
+
};
|
|
468
|
+
if (t.lastDistance = o, !O) {
|
|
469
|
+
G(e, I, n, {
|
|
470
|
+
stopImmediate: p,
|
|
471
|
+
once: a,
|
|
472
|
+
onOnce: () => S()
|
|
473
|
+
});
|
|
474
|
+
return;
|
|
475
|
+
}
|
|
476
|
+
h.current = I, A.current = e, y.current === null && (y.current = requestAnimationFrame(L));
|
|
477
|
+
},
|
|
478
|
+
[
|
|
479
|
+
f,
|
|
480
|
+
O,
|
|
481
|
+
n,
|
|
482
|
+
p,
|
|
483
|
+
a,
|
|
484
|
+
S,
|
|
485
|
+
L
|
|
486
|
+
]
|
|
487
|
+
), X = u((e) => {
|
|
488
|
+
const t = d.current;
|
|
489
|
+
t.pointers.delete(e.pointerId), t.pointers.size < 2 && (t.active = !1, t.startDistance = 0, t.lastDistance = 0);
|
|
490
|
+
}, []), K = u((e) => {
|
|
491
|
+
const t = d.current;
|
|
492
|
+
t.pointers.delete(e.pointerId), t.active = !1;
|
|
493
|
+
}, []);
|
|
494
|
+
x(() => {
|
|
495
|
+
T.current = R?.current ?? globalThis, m.current = new AbortController();
|
|
496
|
+
const e = (v) => g(v), t = (v) => Y(v), D = (v) => X(v), P = (v) => K(v);
|
|
497
|
+
return T.current.addEventListener(
|
|
498
|
+
"pointerdown",
|
|
499
|
+
e,
|
|
500
|
+
{
|
|
501
|
+
capture: r,
|
|
502
|
+
signal: m.current.signal
|
|
503
|
+
}
|
|
504
|
+
), T.current.addEventListener(
|
|
505
|
+
"pointermove",
|
|
506
|
+
t,
|
|
507
|
+
{
|
|
508
|
+
capture: r,
|
|
509
|
+
signal: m.current.signal
|
|
510
|
+
}
|
|
511
|
+
), T.current.addEventListener("pointerup", D, {
|
|
512
|
+
capture: r,
|
|
513
|
+
signal: m.current.signal
|
|
514
|
+
}), T.current.addEventListener(
|
|
515
|
+
"pointercancel",
|
|
516
|
+
P,
|
|
517
|
+
{
|
|
518
|
+
capture: r,
|
|
519
|
+
signal: m.current.signal
|
|
520
|
+
}
|
|
521
|
+
), () => {
|
|
522
|
+
m.current?.abort(), d.current.active = !1, d.current.pointers.clear(), y.current !== null && cancelAnimationFrame(y.current);
|
|
523
|
+
};
|
|
524
|
+
}, [
|
|
525
|
+
R,
|
|
526
|
+
r,
|
|
527
|
+
g,
|
|
528
|
+
Y,
|
|
529
|
+
X,
|
|
530
|
+
K
|
|
531
|
+
]);
|
|
532
|
+
}, pe = {
|
|
533
|
+
Touch: "touch",
|
|
534
|
+
Mouse: "mouse",
|
|
535
|
+
Pen: "pen"
|
|
536
|
+
}, b = {
|
|
537
|
+
Left: "left",
|
|
538
|
+
Right: "right",
|
|
539
|
+
Up: "up",
|
|
540
|
+
Down: "down",
|
|
541
|
+
Horizontal: "horizontal",
|
|
542
|
+
Vertical: "vertical",
|
|
543
|
+
Both: "both"
|
|
544
|
+
}, fe = {
|
|
545
|
+
Touch: "touch",
|
|
546
|
+
Mouse: "mouse",
|
|
547
|
+
Pen: "pen"
|
|
548
|
+
}, re = (n) => Array.isArray(n) ? n : [n], oe = (n, s, c, r, a) => {
|
|
549
|
+
a.stopImmediate && n.stopImmediatePropagation(), r(n, s, c) && n.preventDefault(), a.once && a.onOnce?.();
|
|
550
|
+
}, se = {
|
|
551
|
+
eventPointerTypes: ["touch", "mouse", "pen"],
|
|
552
|
+
eventCapture: !1,
|
|
553
|
+
eventOnce: !1,
|
|
554
|
+
eventStopImmediatePropagation: !1,
|
|
555
|
+
threshold: 50,
|
|
556
|
+
velocity: 0.3,
|
|
557
|
+
container: { current: null }
|
|
558
|
+
}, me = (n, s, c = {}) => {
|
|
559
|
+
const {
|
|
560
|
+
eventPointerTypes: r,
|
|
561
|
+
eventCapture: a,
|
|
562
|
+
eventOnce: p,
|
|
563
|
+
eventStopImmediatePropagation: f,
|
|
564
|
+
threshold: R,
|
|
565
|
+
velocity: O,
|
|
566
|
+
container: T
|
|
567
|
+
} = { ...se, ...c }, m = E([]), y = E(null), h = E(null), A = E({
|
|
568
|
+
startX: 0,
|
|
569
|
+
startY: 0,
|
|
570
|
+
startTime: 0,
|
|
571
|
+
active: !1
|
|
572
|
+
}), d = u(() => {
|
|
573
|
+
h.current?.abort();
|
|
574
|
+
}, []), S = u(
|
|
575
|
+
(e, t) => {
|
|
576
|
+
const D = Math.abs(e), P = Math.abs(t);
|
|
577
|
+
return D > P ? e > 0 ? b.Right : b.Left : t > 0 ? b.Down : b.Up;
|
|
578
|
+
},
|
|
579
|
+
[]
|
|
580
|
+
), L = u((e) => {
|
|
581
|
+
const t = m.current;
|
|
582
|
+
return t.includes(b.Both) || t.includes(b.Horizontal) && (e === b.Left || e === b.Right) || t.includes(b.Vertical) && (e === b.Up || e === b.Down) ? !0 : t.includes(e);
|
|
583
|
+
}, []), g = u(
|
|
584
|
+
(e) => {
|
|
585
|
+
e.isPrimary && r.includes(e.pointerType) && (A.current = {
|
|
586
|
+
startX: e.clientX,
|
|
587
|
+
startY: e.clientY,
|
|
588
|
+
startTime: Date.now(),
|
|
589
|
+
active: !0
|
|
590
|
+
});
|
|
591
|
+
},
|
|
592
|
+
[r]
|
|
593
|
+
), Y = u(
|
|
594
|
+
(e) => {
|
|
595
|
+
const t = A.current;
|
|
596
|
+
if (!t.active)
|
|
597
|
+
return;
|
|
598
|
+
t.active = !1;
|
|
599
|
+
const D = Date.now() - t.startTime;
|
|
600
|
+
if (D === 0)
|
|
601
|
+
return;
|
|
602
|
+
const P = e.clientX - t.startX, v = e.clientY - t.startY, M = Math.hypot(P, v), o = M / D;
|
|
603
|
+
if (M < R || o < O)
|
|
604
|
+
return;
|
|
605
|
+
const i = S(P, v);
|
|
606
|
+
if (!L(i))
|
|
607
|
+
return;
|
|
608
|
+
oe(e, i, {
|
|
609
|
+
deltaX: P,
|
|
610
|
+
deltaY: v,
|
|
611
|
+
velocity: o,
|
|
612
|
+
duration: D
|
|
613
|
+
}, s, {
|
|
614
|
+
stopImmediate: f,
|
|
615
|
+
once: p,
|
|
616
|
+
onOnce: () => {
|
|
617
|
+
d();
|
|
618
|
+
}
|
|
619
|
+
});
|
|
620
|
+
},
|
|
621
|
+
[
|
|
622
|
+
R,
|
|
623
|
+
O,
|
|
624
|
+
S,
|
|
625
|
+
L,
|
|
626
|
+
s,
|
|
627
|
+
p,
|
|
628
|
+
f,
|
|
629
|
+
d
|
|
630
|
+
]
|
|
631
|
+
), X = u(
|
|
632
|
+
(e) => {
|
|
633
|
+
e.isPrimary && r.includes(e.pointerType) && Y(e);
|
|
634
|
+
},
|
|
635
|
+
[Y, r]
|
|
636
|
+
), K = u(() => {
|
|
637
|
+
A.current.active = !1;
|
|
638
|
+
}, []);
|
|
639
|
+
x(() => {
|
|
640
|
+
m.current = re(n);
|
|
641
|
+
}, [n]), x(() => {
|
|
642
|
+
y.current = T?.current ?? globalThis, h.current = new AbortController();
|
|
643
|
+
const e = (P) => g(P);
|
|
644
|
+
y.current.addEventListener(
|
|
645
|
+
"pointerdown",
|
|
646
|
+
e,
|
|
647
|
+
{
|
|
648
|
+
capture: a,
|
|
649
|
+
signal: h.current.signal
|
|
650
|
+
}
|
|
651
|
+
);
|
|
652
|
+
const t = (P) => X(P);
|
|
653
|
+
y.current.addEventListener("pointerup", t, {
|
|
654
|
+
capture: a,
|
|
655
|
+
signal: h.current.signal
|
|
656
|
+
});
|
|
657
|
+
const D = () => K();
|
|
658
|
+
return y.current.addEventListener(
|
|
659
|
+
"pointercancel",
|
|
660
|
+
D,
|
|
661
|
+
{
|
|
662
|
+
capture: a,
|
|
663
|
+
signal: h.current.signal
|
|
664
|
+
}
|
|
665
|
+
), () => {
|
|
666
|
+
h.current?.abort(), A.current.active = !1;
|
|
667
|
+
};
|
|
668
|
+
}, [
|
|
669
|
+
T,
|
|
670
|
+
a,
|
|
671
|
+
g,
|
|
672
|
+
X,
|
|
673
|
+
K
|
|
674
|
+
]);
|
|
675
|
+
}, V = (n, s, c, r) => {
|
|
676
|
+
r.stopImmediate && n.stopImmediatePropagation(), c(n, s) && n.preventDefault(), r.once && r.onOnce?.();
|
|
677
|
+
}, j = {
|
|
678
|
+
eventPassive: !0,
|
|
679
|
+
eventCapture: !1,
|
|
680
|
+
eventOnce: !1,
|
|
681
|
+
eventStopImmediatePropagation: !1,
|
|
682
|
+
container: { current: null },
|
|
683
|
+
raf: !1
|
|
684
|
+
}, he = (n, s = j) => {
|
|
685
|
+
const {
|
|
686
|
+
eventPassive: c,
|
|
687
|
+
eventCapture: r,
|
|
688
|
+
eventOnce: a,
|
|
689
|
+
eventStopImmediatePropagation: p,
|
|
690
|
+
container: f,
|
|
691
|
+
raf: R
|
|
692
|
+
} = { ...j, ...s }, O = E(null), T = E(null), m = E(null), y = E(null), h = E(null), A = u(() => {
|
|
693
|
+
T.current?.abort();
|
|
694
|
+
}, []), d = u(() => {
|
|
695
|
+
m.current = null;
|
|
696
|
+
const L = y.current, g = h.current;
|
|
697
|
+
!L || !g || (V(g, L, n, {
|
|
698
|
+
stopImmediate: p,
|
|
699
|
+
once: a,
|
|
700
|
+
onOnce: () => {
|
|
701
|
+
A();
|
|
702
|
+
}
|
|
703
|
+
}), y.current = null, h.current = null);
|
|
704
|
+
}, [
|
|
705
|
+
n,
|
|
706
|
+
p,
|
|
707
|
+
a,
|
|
708
|
+
A
|
|
709
|
+
]), S = u(
|
|
710
|
+
(L) => {
|
|
711
|
+
const g = {
|
|
712
|
+
deltaX: L.deltaX,
|
|
713
|
+
deltaY: L.deltaY,
|
|
714
|
+
deltaZ: L.deltaZ,
|
|
715
|
+
deltaMode: L.deltaMode
|
|
716
|
+
};
|
|
717
|
+
if (!R) {
|
|
718
|
+
V(L, g, n, {
|
|
719
|
+
stopImmediate: p,
|
|
720
|
+
once: a,
|
|
721
|
+
onOnce: () => {
|
|
722
|
+
A();
|
|
723
|
+
}
|
|
724
|
+
});
|
|
725
|
+
return;
|
|
726
|
+
}
|
|
727
|
+
y.current = g, h.current = L, m.current === null && (m.current = requestAnimationFrame(d));
|
|
728
|
+
},
|
|
729
|
+
[
|
|
730
|
+
R,
|
|
731
|
+
n,
|
|
732
|
+
p,
|
|
733
|
+
a,
|
|
734
|
+
A,
|
|
735
|
+
d
|
|
736
|
+
]
|
|
737
|
+
);
|
|
738
|
+
x(() => {
|
|
739
|
+
O.current = f?.current ?? globalThis, T.current = new AbortController();
|
|
740
|
+
const L = (g) => S(g);
|
|
741
|
+
return O.current.addEventListener("wheel", L, {
|
|
742
|
+
passive: c,
|
|
743
|
+
capture: r,
|
|
744
|
+
signal: T.current.signal
|
|
745
|
+
}), () => {
|
|
746
|
+
T.current?.abort(), m.current !== null && cancelAnimationFrame(m.current);
|
|
747
|
+
};
|
|
748
|
+
}, [f, c, r, S]);
|
|
749
|
+
};
|
|
750
|
+
export {
|
|
751
|
+
ue as DragEventPointerTypes,
|
|
752
|
+
F as KeyEventTypes,
|
|
753
|
+
pe as PinchEventPointerTypes,
|
|
754
|
+
b as SwipeDirections,
|
|
755
|
+
fe as SwipeEventPointerTypes,
|
|
756
|
+
ie as useDrag,
|
|
757
|
+
le as useKey,
|
|
758
|
+
de as usePinch,
|
|
759
|
+
me as useSwipe,
|
|
760
|
+
he as useWheel
|
|
761
|
+
};
|