react-resizable-panels 2.0.15 → 2.0.17
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/CHANGELOG.md +8 -0
- package/README.md +3 -3
- package/dist/declarations/src/types.d.ts +1 -1
- package/dist/react-resizable-panels.browser.cjs.js +27 -34
- package/dist/react-resizable-panels.browser.development.cjs.js +27 -34
- package/dist/react-resizable-panels.browser.development.esm.js +27 -34
- package/dist/react-resizable-panels.browser.esm.js +27 -34
- package/dist/react-resizable-panels.cjs.js +27 -34
- package/dist/react-resizable-panels.development.cjs.js +27 -34
- package/dist/react-resizable-panels.development.esm.js +27 -34
- package/dist/react-resizable-panels.development.node.cjs.js +27 -34
- package/dist/react-resizable-panels.development.node.esm.js +27 -34
- package/dist/react-resizable-panels.esm.js +27 -34
- package/dist/react-resizable-panels.node.cjs.js +27 -34
- package/dist/react-resizable-panels.node.esm.js +27 -34
- package/package.json +1 -1
- package/src/PanelGroup.ts +2 -2
- package/src/PanelGroupContext.ts +2 -1
- package/src/PanelResizeHandle.test.tsx +11 -11
- package/src/PanelResizeHandleRegistry.ts +13 -21
- package/src/types.ts +2 -1
- package/src/utils/events/getResizeEventCoordinates.ts +9 -10
- package/src/utils/events/index.ts +4 -4
- package/src/utils/test-utils.ts +3 -0
|
@@ -46,6 +46,8 @@ const {
|
|
|
46
46
|
// `toString()` prevents bundlers from trying to `import { useId } from 'react'`
|
|
47
47
|
const useId = React__namespace["useId".toString()];
|
|
48
48
|
|
|
49
|
+
// The "contextmenu" event is not supported as a PointerEvent in all browsers yet, so MouseEvent still need to be handled
|
|
50
|
+
|
|
49
51
|
const PanelGroupContext = createContext(null);
|
|
50
52
|
PanelGroupContext.displayName = "PanelGroupContext";
|
|
51
53
|
|
|
@@ -225,27 +227,26 @@ function setGlobalCursorStyle(state, constraintFlags) {
|
|
|
225
227
|
function isKeyDown(event) {
|
|
226
228
|
return event.type === "keydown";
|
|
227
229
|
}
|
|
230
|
+
function isPointerEvent(event) {
|
|
231
|
+
return event.type.startsWith("pointer");
|
|
232
|
+
}
|
|
228
233
|
function isMouseEvent(event) {
|
|
229
234
|
return event.type.startsWith("mouse");
|
|
230
235
|
}
|
|
231
|
-
function isTouchEvent(event) {
|
|
232
|
-
return event.type.startsWith("touch");
|
|
233
|
-
}
|
|
234
236
|
|
|
235
237
|
function getResizeEventCoordinates(event) {
|
|
236
|
-
if (
|
|
238
|
+
if (isPointerEvent(event)) {
|
|
239
|
+
if (event.isPrimary) {
|
|
240
|
+
return {
|
|
241
|
+
x: event.clientX,
|
|
242
|
+
y: event.clientY
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
} else if (isMouseEvent(event)) {
|
|
237
246
|
return {
|
|
238
247
|
x: event.clientX,
|
|
239
248
|
y: event.clientY
|
|
240
249
|
};
|
|
241
|
-
} else if (isTouchEvent(event)) {
|
|
242
|
-
const touch = event.touches[0];
|
|
243
|
-
if (touch && touch.clientX && touch.clientY) {
|
|
244
|
-
return {
|
|
245
|
-
x: touch.clientX,
|
|
246
|
-
y: touch.clientY
|
|
247
|
-
};
|
|
248
|
-
}
|
|
249
250
|
}
|
|
250
251
|
return {
|
|
251
252
|
x: Infinity,
|
|
@@ -437,6 +438,7 @@ function handlePointerDown(event) {
|
|
|
437
438
|
if (intersectingHandles.length > 0) {
|
|
438
439
|
updateResizeHandlerStates("down", event);
|
|
439
440
|
event.preventDefault();
|
|
441
|
+
event.stopPropagation();
|
|
440
442
|
}
|
|
441
443
|
}
|
|
442
444
|
function handlePointerMove(event) {
|
|
@@ -585,15 +587,12 @@ function updateListeners() {
|
|
|
585
587
|
body
|
|
586
588
|
} = ownerDocument;
|
|
587
589
|
body.removeEventListener("contextmenu", handlePointerUp);
|
|
588
|
-
body.removeEventListener("
|
|
589
|
-
body.removeEventListener("
|
|
590
|
-
body.removeEventListener("
|
|
591
|
-
body.removeEventListener("touchmove", handlePointerMove);
|
|
592
|
-
body.removeEventListener("touchstart", handlePointerDown);
|
|
590
|
+
body.removeEventListener("pointerdown", handlePointerDown);
|
|
591
|
+
body.removeEventListener("pointerleave", handlePointerMove);
|
|
592
|
+
body.removeEventListener("pointermove", handlePointerMove);
|
|
593
593
|
});
|
|
594
|
-
window.removeEventListener("
|
|
595
|
-
window.removeEventListener("
|
|
596
|
-
window.removeEventListener("touchend", handlePointerUp);
|
|
594
|
+
window.removeEventListener("pointerup", handlePointerUp);
|
|
595
|
+
window.removeEventListener("pointercancel", handlePointerUp);
|
|
597
596
|
if (registeredResizeHandlers.size > 0) {
|
|
598
597
|
if (isPointerDown) {
|
|
599
598
|
if (intersectingHandles.length > 0) {
|
|
@@ -603,29 +602,23 @@ function updateListeners() {
|
|
|
603
602
|
} = ownerDocument;
|
|
604
603
|
if (count > 0) {
|
|
605
604
|
body.addEventListener("contextmenu", handlePointerUp);
|
|
606
|
-
body.addEventListener("
|
|
607
|
-
body.addEventListener("
|
|
608
|
-
body.addEventListener("touchmove", handlePointerMove, {
|
|
609
|
-
passive: false
|
|
610
|
-
});
|
|
605
|
+
body.addEventListener("pointerleave", handlePointerMove);
|
|
606
|
+
body.addEventListener("pointermove", handlePointerMove);
|
|
611
607
|
}
|
|
612
608
|
});
|
|
613
609
|
}
|
|
614
|
-
window.addEventListener("
|
|
615
|
-
window.addEventListener("
|
|
616
|
-
window.addEventListener("touchend", handlePointerUp);
|
|
610
|
+
window.addEventListener("pointerup", handlePointerUp);
|
|
611
|
+
window.addEventListener("pointercancel", handlePointerUp);
|
|
617
612
|
} else {
|
|
618
613
|
ownerDocumentCounts.forEach((count, ownerDocument) => {
|
|
619
614
|
const {
|
|
620
615
|
body
|
|
621
616
|
} = ownerDocument;
|
|
622
617
|
if (count > 0) {
|
|
623
|
-
body.addEventListener("
|
|
624
|
-
|
|
625
|
-
body.addEventListener("touchmove", handlePointerMove, {
|
|
626
|
-
passive: false
|
|
618
|
+
body.addEventListener("pointerdown", handlePointerDown, {
|
|
619
|
+
capture: true
|
|
627
620
|
});
|
|
628
|
-
body.addEventListener("
|
|
621
|
+
body.addEventListener("pointermove", handlePointerMove);
|
|
629
622
|
}
|
|
630
623
|
});
|
|
631
624
|
}
|
|
@@ -1729,7 +1722,7 @@ function PanelGroupWithForwardedRef({
|
|
|
1729
1722
|
|
|
1730
1723
|
// Only update the cursor for layout changes triggered by touch/mouse events (not keyboard)
|
|
1731
1724
|
// Update the cursor even if the layout hasn't changed (we may need to show an invalid cursor state)
|
|
1732
|
-
if (
|
|
1725
|
+
if (isPointerEvent(event) || isMouseEvent(event)) {
|
|
1733
1726
|
// Watch for multiple subsequent deltas; this might occur for tiny cursor movements.
|
|
1734
1727
|
// In this case, Panel sizes might not change–
|
|
1735
1728
|
// but updating cursor in this scenario would cause a flicker.
|
|
@@ -22,6 +22,8 @@ const {
|
|
|
22
22
|
// `toString()` prevents bundlers from trying to `import { useId } from 'react'`
|
|
23
23
|
const useId = React["useId".toString()];
|
|
24
24
|
|
|
25
|
+
// The "contextmenu" event is not supported as a PointerEvent in all browsers yet, so MouseEvent still need to be handled
|
|
26
|
+
|
|
25
27
|
const PanelGroupContext = createContext(null);
|
|
26
28
|
PanelGroupContext.displayName = "PanelGroupContext";
|
|
27
29
|
|
|
@@ -201,27 +203,26 @@ function setGlobalCursorStyle(state, constraintFlags) {
|
|
|
201
203
|
function isKeyDown(event) {
|
|
202
204
|
return event.type === "keydown";
|
|
203
205
|
}
|
|
206
|
+
function isPointerEvent(event) {
|
|
207
|
+
return event.type.startsWith("pointer");
|
|
208
|
+
}
|
|
204
209
|
function isMouseEvent(event) {
|
|
205
210
|
return event.type.startsWith("mouse");
|
|
206
211
|
}
|
|
207
|
-
function isTouchEvent(event) {
|
|
208
|
-
return event.type.startsWith("touch");
|
|
209
|
-
}
|
|
210
212
|
|
|
211
213
|
function getResizeEventCoordinates(event) {
|
|
212
|
-
if (
|
|
214
|
+
if (isPointerEvent(event)) {
|
|
215
|
+
if (event.isPrimary) {
|
|
216
|
+
return {
|
|
217
|
+
x: event.clientX,
|
|
218
|
+
y: event.clientY
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
} else if (isMouseEvent(event)) {
|
|
213
222
|
return {
|
|
214
223
|
x: event.clientX,
|
|
215
224
|
y: event.clientY
|
|
216
225
|
};
|
|
217
|
-
} else if (isTouchEvent(event)) {
|
|
218
|
-
const touch = event.touches[0];
|
|
219
|
-
if (touch && touch.clientX && touch.clientY) {
|
|
220
|
-
return {
|
|
221
|
-
x: touch.clientX,
|
|
222
|
-
y: touch.clientY
|
|
223
|
-
};
|
|
224
|
-
}
|
|
225
226
|
}
|
|
226
227
|
return {
|
|
227
228
|
x: Infinity,
|
|
@@ -413,6 +414,7 @@ function handlePointerDown(event) {
|
|
|
413
414
|
if (intersectingHandles.length > 0) {
|
|
414
415
|
updateResizeHandlerStates("down", event);
|
|
415
416
|
event.preventDefault();
|
|
417
|
+
event.stopPropagation();
|
|
416
418
|
}
|
|
417
419
|
}
|
|
418
420
|
function handlePointerMove(event) {
|
|
@@ -561,15 +563,12 @@ function updateListeners() {
|
|
|
561
563
|
body
|
|
562
564
|
} = ownerDocument;
|
|
563
565
|
body.removeEventListener("contextmenu", handlePointerUp);
|
|
564
|
-
body.removeEventListener("
|
|
565
|
-
body.removeEventListener("
|
|
566
|
-
body.removeEventListener("
|
|
567
|
-
body.removeEventListener("touchmove", handlePointerMove);
|
|
568
|
-
body.removeEventListener("touchstart", handlePointerDown);
|
|
566
|
+
body.removeEventListener("pointerdown", handlePointerDown);
|
|
567
|
+
body.removeEventListener("pointerleave", handlePointerMove);
|
|
568
|
+
body.removeEventListener("pointermove", handlePointerMove);
|
|
569
569
|
});
|
|
570
|
-
window.removeEventListener("
|
|
571
|
-
window.removeEventListener("
|
|
572
|
-
window.removeEventListener("touchend", handlePointerUp);
|
|
570
|
+
window.removeEventListener("pointerup", handlePointerUp);
|
|
571
|
+
window.removeEventListener("pointercancel", handlePointerUp);
|
|
573
572
|
if (registeredResizeHandlers.size > 0) {
|
|
574
573
|
if (isPointerDown) {
|
|
575
574
|
if (intersectingHandles.length > 0) {
|
|
@@ -579,29 +578,23 @@ function updateListeners() {
|
|
|
579
578
|
} = ownerDocument;
|
|
580
579
|
if (count > 0) {
|
|
581
580
|
body.addEventListener("contextmenu", handlePointerUp);
|
|
582
|
-
body.addEventListener("
|
|
583
|
-
body.addEventListener("
|
|
584
|
-
body.addEventListener("touchmove", handlePointerMove, {
|
|
585
|
-
passive: false
|
|
586
|
-
});
|
|
581
|
+
body.addEventListener("pointerleave", handlePointerMove);
|
|
582
|
+
body.addEventListener("pointermove", handlePointerMove);
|
|
587
583
|
}
|
|
588
584
|
});
|
|
589
585
|
}
|
|
590
|
-
window.addEventListener("
|
|
591
|
-
window.addEventListener("
|
|
592
|
-
window.addEventListener("touchend", handlePointerUp);
|
|
586
|
+
window.addEventListener("pointerup", handlePointerUp);
|
|
587
|
+
window.addEventListener("pointercancel", handlePointerUp);
|
|
593
588
|
} else {
|
|
594
589
|
ownerDocumentCounts.forEach((count, ownerDocument) => {
|
|
595
590
|
const {
|
|
596
591
|
body
|
|
597
592
|
} = ownerDocument;
|
|
598
593
|
if (count > 0) {
|
|
599
|
-
body.addEventListener("
|
|
600
|
-
|
|
601
|
-
body.addEventListener("touchmove", handlePointerMove, {
|
|
602
|
-
passive: false
|
|
594
|
+
body.addEventListener("pointerdown", handlePointerDown, {
|
|
595
|
+
capture: true
|
|
603
596
|
});
|
|
604
|
-
body.addEventListener("
|
|
597
|
+
body.addEventListener("pointermove", handlePointerMove);
|
|
605
598
|
}
|
|
606
599
|
});
|
|
607
600
|
}
|
|
@@ -1705,7 +1698,7 @@ function PanelGroupWithForwardedRef({
|
|
|
1705
1698
|
|
|
1706
1699
|
// Only update the cursor for layout changes triggered by touch/mouse events (not keyboard)
|
|
1707
1700
|
// Update the cursor even if the layout hasn't changed (we may need to show an invalid cursor state)
|
|
1708
|
-
if (
|
|
1701
|
+
if (isPointerEvent(event) || isMouseEvent(event)) {
|
|
1709
1702
|
// Watch for multiple subsequent deltas; this might occur for tiny cursor movements.
|
|
1710
1703
|
// In this case, Panel sizes might not change–
|
|
1711
1704
|
// but updating cursor in this scenario would cause a flicker.
|
package/package.json
CHANGED
package/src/PanelGroup.ts
CHANGED
|
@@ -28,7 +28,7 @@ import { computePanelFlexBoxStyle } from "./utils/computePanelFlexBoxStyle";
|
|
|
28
28
|
import debounce from "./utils/debounce";
|
|
29
29
|
import { determinePivotIndices } from "./utils/determinePivotIndices";
|
|
30
30
|
import { getResizeHandleElement } from "./utils/dom/getResizeHandleElement";
|
|
31
|
-
import { isKeyDown, isMouseEvent,
|
|
31
|
+
import { isKeyDown, isMouseEvent, isPointerEvent } from "./utils/events";
|
|
32
32
|
import { getResizeEventCursorPosition } from "./utils/events/getResizeEventCursorPosition";
|
|
33
33
|
import { initializeDefaultStorage } from "./utils/initializeDefaultStorage";
|
|
34
34
|
import {
|
|
@@ -658,7 +658,7 @@ function PanelGroupWithForwardedRef({
|
|
|
658
658
|
|
|
659
659
|
// Only update the cursor for layout changes triggered by touch/mouse events (not keyboard)
|
|
660
660
|
// Update the cursor even if the layout hasn't changed (we may need to show an invalid cursor state)
|
|
661
|
-
if (
|
|
661
|
+
if (isPointerEvent(event) || isMouseEvent(event)) {
|
|
662
662
|
// Watch for multiple subsequent deltas; this might occur for tiny cursor movements.
|
|
663
663
|
// In this case, Panel sizes might not change–
|
|
664
664
|
// but updating cursor in this scenario would cause a flicker.
|
package/src/PanelGroupContext.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { PanelConstraints, PanelData } from "./Panel";
|
|
2
2
|
import { CSSProperties, createContext } from "./vendor/react";
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
// The "contextmenu" event is not supported as a PointerEvent in all browsers yet, so MouseEvent still need to be handled
|
|
5
|
+
export type ResizeEvent = KeyboardEvent | PointerEvent | MouseEvent;
|
|
5
6
|
export type ResizeHandler = (event: ResizeEvent) => void;
|
|
6
7
|
|
|
7
8
|
export type DragState = {
|
|
@@ -127,18 +127,18 @@ describe("PanelResizeHandle", () => {
|
|
|
127
127
|
});
|
|
128
128
|
|
|
129
129
|
act(() => {
|
|
130
|
-
dispatchPointerEvent("
|
|
130
|
+
dispatchPointerEvent("pointermove", leftElement);
|
|
131
131
|
});
|
|
132
132
|
expect(onDragging).not.toHaveBeenCalled();
|
|
133
133
|
|
|
134
134
|
act(() => {
|
|
135
|
-
dispatchPointerEvent("
|
|
135
|
+
dispatchPointerEvent("pointerdown", leftElement);
|
|
136
136
|
});
|
|
137
137
|
expect(onDragging).toHaveBeenCalledTimes(1);
|
|
138
138
|
expect(onDragging).toHaveBeenCalledWith(true);
|
|
139
139
|
|
|
140
140
|
act(() => {
|
|
141
|
-
dispatchPointerEvent("
|
|
141
|
+
dispatchPointerEvent("pointerup", leftElement);
|
|
142
142
|
});
|
|
143
143
|
expect(onDragging).toHaveBeenCalledTimes(2);
|
|
144
144
|
expect(onDragging).toHaveBeenCalledWith(false);
|
|
@@ -154,20 +154,20 @@ describe("PanelResizeHandle", () => {
|
|
|
154
154
|
});
|
|
155
155
|
|
|
156
156
|
act(() => {
|
|
157
|
-
dispatchPointerEvent("
|
|
157
|
+
dispatchPointerEvent("pointermove", leftElement);
|
|
158
158
|
});
|
|
159
159
|
expect(onDraggingLeft).not.toHaveBeenCalled();
|
|
160
160
|
expect(onDraggingRight).not.toHaveBeenCalled();
|
|
161
161
|
|
|
162
162
|
act(() => {
|
|
163
|
-
dispatchPointerEvent("
|
|
163
|
+
dispatchPointerEvent("pointerdown", leftElement);
|
|
164
164
|
});
|
|
165
165
|
expect(onDraggingLeft).toHaveBeenCalledTimes(1);
|
|
166
166
|
expect(onDraggingLeft).toHaveBeenCalledWith(true);
|
|
167
167
|
expect(onDraggingRight).not.toHaveBeenCalled();
|
|
168
168
|
|
|
169
169
|
act(() => {
|
|
170
|
-
dispatchPointerEvent("
|
|
170
|
+
dispatchPointerEvent("pointerup", leftElement);
|
|
171
171
|
});
|
|
172
172
|
expect(onDraggingLeft).toHaveBeenCalledTimes(2);
|
|
173
173
|
expect(onDraggingLeft).toHaveBeenCalledWith(false);
|
|
@@ -209,7 +209,7 @@ describe("PanelResizeHandle", () => {
|
|
|
209
209
|
verifyAttribute(rightElement, "data-resize-handle-state", "inactive");
|
|
210
210
|
|
|
211
211
|
act(() => {
|
|
212
|
-
dispatchPointerEvent("
|
|
212
|
+
dispatchPointerEvent("pointermove", leftElement);
|
|
213
213
|
});
|
|
214
214
|
verifyAttribute(leftElement, "data-resize-handle-active", null);
|
|
215
215
|
verifyAttribute(rightElement, "data-resize-handle-active", null);
|
|
@@ -217,7 +217,7 @@ describe("PanelResizeHandle", () => {
|
|
|
217
217
|
verifyAttribute(rightElement, "data-resize-handle-state", "inactive");
|
|
218
218
|
|
|
219
219
|
act(() => {
|
|
220
|
-
dispatchPointerEvent("
|
|
220
|
+
dispatchPointerEvent("pointerdown", leftElement);
|
|
221
221
|
});
|
|
222
222
|
verifyAttribute(leftElement, "data-resize-handle-active", "pointer");
|
|
223
223
|
verifyAttribute(rightElement, "data-resize-handle-active", null);
|
|
@@ -225,7 +225,7 @@ describe("PanelResizeHandle", () => {
|
|
|
225
225
|
verifyAttribute(rightElement, "data-resize-handle-state", "inactive");
|
|
226
226
|
|
|
227
227
|
act(() => {
|
|
228
|
-
dispatchPointerEvent("
|
|
228
|
+
dispatchPointerEvent("pointermove", leftElement);
|
|
229
229
|
});
|
|
230
230
|
verifyAttribute(leftElement, "data-resize-handle-active", "pointer");
|
|
231
231
|
verifyAttribute(rightElement, "data-resize-handle-active", null);
|
|
@@ -233,7 +233,7 @@ describe("PanelResizeHandle", () => {
|
|
|
233
233
|
verifyAttribute(rightElement, "data-resize-handle-state", "inactive");
|
|
234
234
|
|
|
235
235
|
act(() => {
|
|
236
|
-
dispatchPointerEvent("
|
|
236
|
+
dispatchPointerEvent("pointerup", leftElement);
|
|
237
237
|
});
|
|
238
238
|
verifyAttribute(leftElement, "data-resize-handle-active", null);
|
|
239
239
|
verifyAttribute(rightElement, "data-resize-handle-active", null);
|
|
@@ -241,7 +241,7 @@ describe("PanelResizeHandle", () => {
|
|
|
241
241
|
verifyAttribute(rightElement, "data-resize-handle-state", "inactive");
|
|
242
242
|
|
|
243
243
|
act(() => {
|
|
244
|
-
dispatchPointerEvent("
|
|
244
|
+
dispatchPointerEvent("pointermove", rightElement);
|
|
245
245
|
});
|
|
246
246
|
verifyAttribute(leftElement, "data-resize-handle-active", null);
|
|
247
247
|
verifyAttribute(rightElement, "data-resize-handle-active", null);
|
|
@@ -89,6 +89,7 @@ function handlePointerDown(event: ResizeEvent) {
|
|
|
89
89
|
updateResizeHandlerStates("down", event);
|
|
90
90
|
|
|
91
91
|
event.preventDefault();
|
|
92
|
+
event.stopPropagation();
|
|
92
93
|
}
|
|
93
94
|
}
|
|
94
95
|
|
|
@@ -258,16 +259,13 @@ function updateListeners() {
|
|
|
258
259
|
const { body } = ownerDocument;
|
|
259
260
|
|
|
260
261
|
body.removeEventListener("contextmenu", handlePointerUp);
|
|
261
|
-
body.removeEventListener("
|
|
262
|
-
body.removeEventListener("
|
|
263
|
-
body.removeEventListener("
|
|
264
|
-
body.removeEventListener("touchmove", handlePointerMove);
|
|
265
|
-
body.removeEventListener("touchstart", handlePointerDown);
|
|
262
|
+
body.removeEventListener("pointerdown", handlePointerDown);
|
|
263
|
+
body.removeEventListener("pointerleave", handlePointerMove);
|
|
264
|
+
body.removeEventListener("pointermove", handlePointerMove);
|
|
266
265
|
});
|
|
267
266
|
|
|
268
|
-
window.removeEventListener("
|
|
269
|
-
window.removeEventListener("
|
|
270
|
-
window.removeEventListener("touchend", handlePointerUp);
|
|
267
|
+
window.removeEventListener("pointerup", handlePointerUp);
|
|
268
|
+
window.removeEventListener("pointercancel", handlePointerUp);
|
|
271
269
|
|
|
272
270
|
if (registeredResizeHandlers.size > 0) {
|
|
273
271
|
if (isPointerDown) {
|
|
@@ -277,29 +275,23 @@ function updateListeners() {
|
|
|
277
275
|
|
|
278
276
|
if (count > 0) {
|
|
279
277
|
body.addEventListener("contextmenu", handlePointerUp);
|
|
280
|
-
body.addEventListener("
|
|
281
|
-
body.addEventListener("
|
|
282
|
-
body.addEventListener("touchmove", handlePointerMove, {
|
|
283
|
-
passive: false,
|
|
284
|
-
});
|
|
278
|
+
body.addEventListener("pointerleave", handlePointerMove);
|
|
279
|
+
body.addEventListener("pointermove", handlePointerMove);
|
|
285
280
|
}
|
|
286
281
|
});
|
|
287
282
|
}
|
|
288
283
|
|
|
289
|
-
window.addEventListener("
|
|
290
|
-
window.addEventListener("
|
|
291
|
-
window.addEventListener("touchend", handlePointerUp);
|
|
284
|
+
window.addEventListener("pointerup", handlePointerUp);
|
|
285
|
+
window.addEventListener("pointercancel", handlePointerUp);
|
|
292
286
|
} else {
|
|
293
287
|
ownerDocumentCounts.forEach((count, ownerDocument) => {
|
|
294
288
|
const { body } = ownerDocument;
|
|
295
289
|
|
|
296
290
|
if (count > 0) {
|
|
297
|
-
body.addEventListener("
|
|
298
|
-
|
|
299
|
-
body.addEventListener("touchmove", handlePointerMove, {
|
|
300
|
-
passive: false,
|
|
291
|
+
body.addEventListener("pointerdown", handlePointerDown, {
|
|
292
|
+
capture: true,
|
|
301
293
|
});
|
|
302
|
-
body.addEventListener("
|
|
294
|
+
body.addEventListener("pointermove", handlePointerMove);
|
|
303
295
|
}
|
|
304
296
|
});
|
|
305
297
|
}
|
package/src/types.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export type Direction = "horizontal" | "vertical";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
// The "contextmenu" event is not supported as a PointerEvent in all browsers yet, so MouseEvent still need to be handled
|
|
4
|
+
export type ResizeEvent = KeyboardEvent | PointerEvent | MouseEvent;
|
|
4
5
|
export type ResizeHandler = (event: ResizeEvent) => void;
|
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
import { ResizeEvent } from "../../types";
|
|
2
|
-
import { isMouseEvent,
|
|
2
|
+
import { isMouseEvent, isPointerEvent } from ".";
|
|
3
3
|
|
|
4
4
|
export function getResizeEventCoordinates(event: ResizeEvent) {
|
|
5
|
-
if (
|
|
5
|
+
if (isPointerEvent(event)) {
|
|
6
|
+
if (event.isPrimary) {
|
|
7
|
+
return {
|
|
8
|
+
x: event.clientX,
|
|
9
|
+
y: event.clientY,
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
} else if (isMouseEvent(event)) {
|
|
6
13
|
return {
|
|
7
14
|
x: event.clientX,
|
|
8
15
|
y: event.clientY,
|
|
9
16
|
};
|
|
10
|
-
} else if (isTouchEvent(event)) {
|
|
11
|
-
const touch = event.touches[0];
|
|
12
|
-
if (touch && touch.clientX && touch.clientY) {
|
|
13
|
-
return {
|
|
14
|
-
x: touch.clientX,
|
|
15
|
-
y: touch.clientY,
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
17
|
}
|
|
19
18
|
|
|
20
19
|
return {
|
|
@@ -4,10 +4,10 @@ export function isKeyDown(event: ResizeEvent): event is KeyboardEvent {
|
|
|
4
4
|
return event.type === "keydown";
|
|
5
5
|
}
|
|
6
6
|
|
|
7
|
-
export function
|
|
8
|
-
return event.type.startsWith("
|
|
7
|
+
export function isPointerEvent(event: ResizeEvent): event is PointerEvent {
|
|
8
|
+
return event.type.startsWith("pointer");
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
export function
|
|
12
|
-
return event.type.startsWith("
|
|
11
|
+
export function isMouseEvent(event: ResizeEvent): event is MouseEvent {
|
|
12
|
+
return event.type.startsWith("mouse");
|
|
13
13
|
}
|