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
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2.0.17
|
|
4
|
+
|
|
5
|
+
- Prevent pointer events handled by resize handles from triggering elements behind/underneath (#338)
|
|
6
|
+
|
|
7
|
+
## 2.0.16
|
|
8
|
+
|
|
9
|
+
- Replaced .toPrecision() with .toFixed() to avoid undesirable layout shift (#323)
|
|
10
|
+
|
|
3
11
|
## 2.0.15
|
|
4
12
|
|
|
5
13
|
- Better account for high-precision sizes with `onCollapse` and `onExpand` callbacks (#325)
|
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@ React components for resizable panel groups/layouts
|
|
|
6
6
|
import { Panel, PanelGroup, PanelResizeHandle } from "react-resizable-panels";
|
|
7
7
|
|
|
8
8
|
<PanelGroup autoSaveId="example" direction="horizontal">
|
|
9
|
-
<Panel
|
|
9
|
+
<Panel defaultSize={25}>
|
|
10
10
|
<SourcesExplorer />
|
|
11
11
|
</Panel>
|
|
12
12
|
<PanelResizeHandle />
|
|
@@ -14,7 +14,7 @@ import { Panel, PanelGroup, PanelResizeHandle } from "react-resizable-panels";
|
|
|
14
14
|
<SourceViewer />
|
|
15
15
|
</Panel>
|
|
16
16
|
<PanelResizeHandle />
|
|
17
|
-
<Panel
|
|
17
|
+
<Panel defaultSize={25}>
|
|
18
18
|
<Console />
|
|
19
19
|
</Panel>
|
|
20
20
|
</PanelGroup>;
|
|
@@ -74,7 +74,7 @@ import { Panel, PanelGroup, PanelResizeHandle } from "react-resizable-panels";
|
|
|
74
74
|
`Panel` components also expose an imperative API for manual resizing:
|
|
75
75
|
| method | description |
|
|
76
76
|
| :----------------------- | :--------------------------------------------------------------------------------- |
|
|
77
|
-
| `collapse()`
|
|
77
|
+
| `collapse()` | If panel is `collapsible`, collapse it fully. |
|
|
78
78
|
| `expand()` | If panel is currently _collapsed_, expand it to its most recent size. |
|
|
79
79
|
| `getId(): string` | Gets the ID of the panel. |
|
|
80
80
|
| `getSize(): number` | Gets the current size of the panel as a percentage (`1 - 100`). |
|
|
@@ -47,6 +47,8 @@ const {
|
|
|
47
47
|
const useId = React__namespace["useId".toString()];
|
|
48
48
|
const useLayoutEffect_do_not_use_directly = useLayoutEffect;
|
|
49
49
|
|
|
50
|
+
// The "contextmenu" event is not supported as a PointerEvent in all browsers yet, so MouseEvent still need to be handled
|
|
51
|
+
|
|
50
52
|
const PanelGroupContext = createContext(null);
|
|
51
53
|
PanelGroupContext.displayName = "PanelGroupContext";
|
|
52
54
|
|
|
@@ -261,27 +263,26 @@ function setGlobalCursorStyle(state, constraintFlags) {
|
|
|
261
263
|
function isKeyDown(event) {
|
|
262
264
|
return event.type === "keydown";
|
|
263
265
|
}
|
|
266
|
+
function isPointerEvent(event) {
|
|
267
|
+
return event.type.startsWith("pointer");
|
|
268
|
+
}
|
|
264
269
|
function isMouseEvent(event) {
|
|
265
270
|
return event.type.startsWith("mouse");
|
|
266
271
|
}
|
|
267
|
-
function isTouchEvent(event) {
|
|
268
|
-
return event.type.startsWith("touch");
|
|
269
|
-
}
|
|
270
272
|
|
|
271
273
|
function getResizeEventCoordinates(event) {
|
|
272
|
-
if (
|
|
274
|
+
if (isPointerEvent(event)) {
|
|
275
|
+
if (event.isPrimary) {
|
|
276
|
+
return {
|
|
277
|
+
x: event.clientX,
|
|
278
|
+
y: event.clientY
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
} else if (isMouseEvent(event)) {
|
|
273
282
|
return {
|
|
274
283
|
x: event.clientX,
|
|
275
284
|
y: event.clientY
|
|
276
285
|
};
|
|
277
|
-
} else if (isTouchEvent(event)) {
|
|
278
|
-
const touch = event.touches[0];
|
|
279
|
-
if (touch && touch.clientX && touch.clientY) {
|
|
280
|
-
return {
|
|
281
|
-
x: touch.clientX,
|
|
282
|
-
y: touch.clientY
|
|
283
|
-
};
|
|
284
|
-
}
|
|
285
286
|
}
|
|
286
287
|
return {
|
|
287
288
|
x: Infinity,
|
|
@@ -473,6 +474,7 @@ function handlePointerDown(event) {
|
|
|
473
474
|
if (intersectingHandles.length > 0) {
|
|
474
475
|
updateResizeHandlerStates("down", event);
|
|
475
476
|
event.preventDefault();
|
|
477
|
+
event.stopPropagation();
|
|
476
478
|
}
|
|
477
479
|
}
|
|
478
480
|
function handlePointerMove(event) {
|
|
@@ -621,15 +623,12 @@ function updateListeners() {
|
|
|
621
623
|
body
|
|
622
624
|
} = ownerDocument;
|
|
623
625
|
body.removeEventListener("contextmenu", handlePointerUp);
|
|
624
|
-
body.removeEventListener("
|
|
625
|
-
body.removeEventListener("
|
|
626
|
-
body.removeEventListener("
|
|
627
|
-
body.removeEventListener("touchmove", handlePointerMove);
|
|
628
|
-
body.removeEventListener("touchstart", handlePointerDown);
|
|
626
|
+
body.removeEventListener("pointerdown", handlePointerDown);
|
|
627
|
+
body.removeEventListener("pointerleave", handlePointerMove);
|
|
628
|
+
body.removeEventListener("pointermove", handlePointerMove);
|
|
629
629
|
});
|
|
630
|
-
window.removeEventListener("
|
|
631
|
-
window.removeEventListener("
|
|
632
|
-
window.removeEventListener("touchend", handlePointerUp);
|
|
630
|
+
window.removeEventListener("pointerup", handlePointerUp);
|
|
631
|
+
window.removeEventListener("pointercancel", handlePointerUp);
|
|
633
632
|
if (registeredResizeHandlers.size > 0) {
|
|
634
633
|
if (isPointerDown) {
|
|
635
634
|
if (intersectingHandles.length > 0) {
|
|
@@ -639,29 +638,23 @@ function updateListeners() {
|
|
|
639
638
|
} = ownerDocument;
|
|
640
639
|
if (count > 0) {
|
|
641
640
|
body.addEventListener("contextmenu", handlePointerUp);
|
|
642
|
-
body.addEventListener("
|
|
643
|
-
body.addEventListener("
|
|
644
|
-
body.addEventListener("touchmove", handlePointerMove, {
|
|
645
|
-
passive: false
|
|
646
|
-
});
|
|
641
|
+
body.addEventListener("pointerleave", handlePointerMove);
|
|
642
|
+
body.addEventListener("pointermove", handlePointerMove);
|
|
647
643
|
}
|
|
648
644
|
});
|
|
649
645
|
}
|
|
650
|
-
window.addEventListener("
|
|
651
|
-
window.addEventListener("
|
|
652
|
-
window.addEventListener("touchend", handlePointerUp);
|
|
646
|
+
window.addEventListener("pointerup", handlePointerUp);
|
|
647
|
+
window.addEventListener("pointercancel", handlePointerUp);
|
|
653
648
|
} else {
|
|
654
649
|
ownerDocumentCounts.forEach((count, ownerDocument) => {
|
|
655
650
|
const {
|
|
656
651
|
body
|
|
657
652
|
} = ownerDocument;
|
|
658
653
|
if (count > 0) {
|
|
659
|
-
body.addEventListener("
|
|
660
|
-
|
|
661
|
-
body.addEventListener("touchmove", handlePointerMove, {
|
|
662
|
-
passive: false
|
|
654
|
+
body.addEventListener("pointerdown", handlePointerDown, {
|
|
655
|
+
capture: true
|
|
663
656
|
});
|
|
664
|
-
body.addEventListener("
|
|
657
|
+
body.addEventListener("pointermove", handlePointerMove);
|
|
665
658
|
}
|
|
666
659
|
});
|
|
667
660
|
}
|
|
@@ -1949,7 +1942,7 @@ function PanelGroupWithForwardedRef({
|
|
|
1949
1942
|
|
|
1950
1943
|
// Only update the cursor for layout changes triggered by touch/mouse events (not keyboard)
|
|
1951
1944
|
// Update the cursor even if the layout hasn't changed (we may need to show an invalid cursor state)
|
|
1952
|
-
if (
|
|
1945
|
+
if (isPointerEvent(event) || isMouseEvent(event)) {
|
|
1953
1946
|
// Watch for multiple subsequent deltas; this might occur for tiny cursor movements.
|
|
1954
1947
|
// In this case, Panel sizes might not change–
|
|
1955
1948
|
// but updating cursor in this scenario would cause a flicker.
|
|
@@ -47,6 +47,8 @@ const {
|
|
|
47
47
|
const useId = React__namespace["useId".toString()];
|
|
48
48
|
const useLayoutEffect_do_not_use_directly = useLayoutEffect;
|
|
49
49
|
|
|
50
|
+
// The "contextmenu" event is not supported as a PointerEvent in all browsers yet, so MouseEvent still need to be handled
|
|
51
|
+
|
|
50
52
|
const PanelGroupContext = createContext(null);
|
|
51
53
|
PanelGroupContext.displayName = "PanelGroupContext";
|
|
52
54
|
|
|
@@ -267,27 +269,26 @@ function setGlobalCursorStyle(state, constraintFlags) {
|
|
|
267
269
|
function isKeyDown(event) {
|
|
268
270
|
return event.type === "keydown";
|
|
269
271
|
}
|
|
272
|
+
function isPointerEvent(event) {
|
|
273
|
+
return event.type.startsWith("pointer");
|
|
274
|
+
}
|
|
270
275
|
function isMouseEvent(event) {
|
|
271
276
|
return event.type.startsWith("mouse");
|
|
272
277
|
}
|
|
273
|
-
function isTouchEvent(event) {
|
|
274
|
-
return event.type.startsWith("touch");
|
|
275
|
-
}
|
|
276
278
|
|
|
277
279
|
function getResizeEventCoordinates(event) {
|
|
278
|
-
if (
|
|
280
|
+
if (isPointerEvent(event)) {
|
|
281
|
+
if (event.isPrimary) {
|
|
282
|
+
return {
|
|
283
|
+
x: event.clientX,
|
|
284
|
+
y: event.clientY
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
} else if (isMouseEvent(event)) {
|
|
279
288
|
return {
|
|
280
289
|
x: event.clientX,
|
|
281
290
|
y: event.clientY
|
|
282
291
|
};
|
|
283
|
-
} else if (isTouchEvent(event)) {
|
|
284
|
-
const touch = event.touches[0];
|
|
285
|
-
if (touch && touch.clientX && touch.clientY) {
|
|
286
|
-
return {
|
|
287
|
-
x: touch.clientX,
|
|
288
|
-
y: touch.clientY
|
|
289
|
-
};
|
|
290
|
-
}
|
|
291
292
|
}
|
|
292
293
|
return {
|
|
293
294
|
x: Infinity,
|
|
@@ -479,6 +480,7 @@ function handlePointerDown(event) {
|
|
|
479
480
|
if (intersectingHandles.length > 0) {
|
|
480
481
|
updateResizeHandlerStates("down", event);
|
|
481
482
|
event.preventDefault();
|
|
483
|
+
event.stopPropagation();
|
|
482
484
|
}
|
|
483
485
|
}
|
|
484
486
|
function handlePointerMove(event) {
|
|
@@ -627,15 +629,12 @@ function updateListeners() {
|
|
|
627
629
|
body
|
|
628
630
|
} = ownerDocument;
|
|
629
631
|
body.removeEventListener("contextmenu", handlePointerUp);
|
|
630
|
-
body.removeEventListener("
|
|
631
|
-
body.removeEventListener("
|
|
632
|
-
body.removeEventListener("
|
|
633
|
-
body.removeEventListener("touchmove", handlePointerMove);
|
|
634
|
-
body.removeEventListener("touchstart", handlePointerDown);
|
|
632
|
+
body.removeEventListener("pointerdown", handlePointerDown);
|
|
633
|
+
body.removeEventListener("pointerleave", handlePointerMove);
|
|
634
|
+
body.removeEventListener("pointermove", handlePointerMove);
|
|
635
635
|
});
|
|
636
|
-
window.removeEventListener("
|
|
637
|
-
window.removeEventListener("
|
|
638
|
-
window.removeEventListener("touchend", handlePointerUp);
|
|
636
|
+
window.removeEventListener("pointerup", handlePointerUp);
|
|
637
|
+
window.removeEventListener("pointercancel", handlePointerUp);
|
|
639
638
|
if (registeredResizeHandlers.size > 0) {
|
|
640
639
|
if (isPointerDown) {
|
|
641
640
|
if (intersectingHandles.length > 0) {
|
|
@@ -645,29 +644,23 @@ function updateListeners() {
|
|
|
645
644
|
} = ownerDocument;
|
|
646
645
|
if (count > 0) {
|
|
647
646
|
body.addEventListener("contextmenu", handlePointerUp);
|
|
648
|
-
body.addEventListener("
|
|
649
|
-
body.addEventListener("
|
|
650
|
-
body.addEventListener("touchmove", handlePointerMove, {
|
|
651
|
-
passive: false
|
|
652
|
-
});
|
|
647
|
+
body.addEventListener("pointerleave", handlePointerMove);
|
|
648
|
+
body.addEventListener("pointermove", handlePointerMove);
|
|
653
649
|
}
|
|
654
650
|
});
|
|
655
651
|
}
|
|
656
|
-
window.addEventListener("
|
|
657
|
-
window.addEventListener("
|
|
658
|
-
window.addEventListener("touchend", handlePointerUp);
|
|
652
|
+
window.addEventListener("pointerup", handlePointerUp);
|
|
653
|
+
window.addEventListener("pointercancel", handlePointerUp);
|
|
659
654
|
} else {
|
|
660
655
|
ownerDocumentCounts.forEach((count, ownerDocument) => {
|
|
661
656
|
const {
|
|
662
657
|
body
|
|
663
658
|
} = ownerDocument;
|
|
664
659
|
if (count > 0) {
|
|
665
|
-
body.addEventListener("
|
|
666
|
-
|
|
667
|
-
body.addEventListener("touchmove", handlePointerMove, {
|
|
668
|
-
passive: false
|
|
660
|
+
body.addEventListener("pointerdown", handlePointerDown, {
|
|
661
|
+
capture: true
|
|
669
662
|
});
|
|
670
|
-
body.addEventListener("
|
|
663
|
+
body.addEventListener("pointermove", handlePointerMove);
|
|
671
664
|
}
|
|
672
665
|
});
|
|
673
666
|
}
|
|
@@ -2055,7 +2048,7 @@ function PanelGroupWithForwardedRef({
|
|
|
2055
2048
|
|
|
2056
2049
|
// Only update the cursor for layout changes triggered by touch/mouse events (not keyboard)
|
|
2057
2050
|
// Update the cursor even if the layout hasn't changed (we may need to show an invalid cursor state)
|
|
2058
|
-
if (
|
|
2051
|
+
if (isPointerEvent(event) || isMouseEvent(event)) {
|
|
2059
2052
|
// Watch for multiple subsequent deltas; this might occur for tiny cursor movements.
|
|
2060
2053
|
// In this case, Panel sizes might not change–
|
|
2061
2054
|
// but updating cursor in this scenario would cause a flicker.
|
|
@@ -23,6 +23,8 @@ const {
|
|
|
23
23
|
const useId = React["useId".toString()];
|
|
24
24
|
const useLayoutEffect_do_not_use_directly = useLayoutEffect;
|
|
25
25
|
|
|
26
|
+
// The "contextmenu" event is not supported as a PointerEvent in all browsers yet, so MouseEvent still need to be handled
|
|
27
|
+
|
|
26
28
|
const PanelGroupContext = createContext(null);
|
|
27
29
|
PanelGroupContext.displayName = "PanelGroupContext";
|
|
28
30
|
|
|
@@ -243,27 +245,26 @@ function setGlobalCursorStyle(state, constraintFlags) {
|
|
|
243
245
|
function isKeyDown(event) {
|
|
244
246
|
return event.type === "keydown";
|
|
245
247
|
}
|
|
248
|
+
function isPointerEvent(event) {
|
|
249
|
+
return event.type.startsWith("pointer");
|
|
250
|
+
}
|
|
246
251
|
function isMouseEvent(event) {
|
|
247
252
|
return event.type.startsWith("mouse");
|
|
248
253
|
}
|
|
249
|
-
function isTouchEvent(event) {
|
|
250
|
-
return event.type.startsWith("touch");
|
|
251
|
-
}
|
|
252
254
|
|
|
253
255
|
function getResizeEventCoordinates(event) {
|
|
254
|
-
if (
|
|
256
|
+
if (isPointerEvent(event)) {
|
|
257
|
+
if (event.isPrimary) {
|
|
258
|
+
return {
|
|
259
|
+
x: event.clientX,
|
|
260
|
+
y: event.clientY
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
} else if (isMouseEvent(event)) {
|
|
255
264
|
return {
|
|
256
265
|
x: event.clientX,
|
|
257
266
|
y: event.clientY
|
|
258
267
|
};
|
|
259
|
-
} else if (isTouchEvent(event)) {
|
|
260
|
-
const touch = event.touches[0];
|
|
261
|
-
if (touch && touch.clientX && touch.clientY) {
|
|
262
|
-
return {
|
|
263
|
-
x: touch.clientX,
|
|
264
|
-
y: touch.clientY
|
|
265
|
-
};
|
|
266
|
-
}
|
|
267
268
|
}
|
|
268
269
|
return {
|
|
269
270
|
x: Infinity,
|
|
@@ -455,6 +456,7 @@ function handlePointerDown(event) {
|
|
|
455
456
|
if (intersectingHandles.length > 0) {
|
|
456
457
|
updateResizeHandlerStates("down", event);
|
|
457
458
|
event.preventDefault();
|
|
459
|
+
event.stopPropagation();
|
|
458
460
|
}
|
|
459
461
|
}
|
|
460
462
|
function handlePointerMove(event) {
|
|
@@ -603,15 +605,12 @@ function updateListeners() {
|
|
|
603
605
|
body
|
|
604
606
|
} = ownerDocument;
|
|
605
607
|
body.removeEventListener("contextmenu", handlePointerUp);
|
|
606
|
-
body.removeEventListener("
|
|
607
|
-
body.removeEventListener("
|
|
608
|
-
body.removeEventListener("
|
|
609
|
-
body.removeEventListener("touchmove", handlePointerMove);
|
|
610
|
-
body.removeEventListener("touchstart", handlePointerDown);
|
|
608
|
+
body.removeEventListener("pointerdown", handlePointerDown);
|
|
609
|
+
body.removeEventListener("pointerleave", handlePointerMove);
|
|
610
|
+
body.removeEventListener("pointermove", handlePointerMove);
|
|
611
611
|
});
|
|
612
|
-
window.removeEventListener("
|
|
613
|
-
window.removeEventListener("
|
|
614
|
-
window.removeEventListener("touchend", handlePointerUp);
|
|
612
|
+
window.removeEventListener("pointerup", handlePointerUp);
|
|
613
|
+
window.removeEventListener("pointercancel", handlePointerUp);
|
|
615
614
|
if (registeredResizeHandlers.size > 0) {
|
|
616
615
|
if (isPointerDown) {
|
|
617
616
|
if (intersectingHandles.length > 0) {
|
|
@@ -621,29 +620,23 @@ function updateListeners() {
|
|
|
621
620
|
} = ownerDocument;
|
|
622
621
|
if (count > 0) {
|
|
623
622
|
body.addEventListener("contextmenu", handlePointerUp);
|
|
624
|
-
body.addEventListener("
|
|
625
|
-
body.addEventListener("
|
|
626
|
-
body.addEventListener("touchmove", handlePointerMove, {
|
|
627
|
-
passive: false
|
|
628
|
-
});
|
|
623
|
+
body.addEventListener("pointerleave", handlePointerMove);
|
|
624
|
+
body.addEventListener("pointermove", handlePointerMove);
|
|
629
625
|
}
|
|
630
626
|
});
|
|
631
627
|
}
|
|
632
|
-
window.addEventListener("
|
|
633
|
-
window.addEventListener("
|
|
634
|
-
window.addEventListener("touchend", handlePointerUp);
|
|
628
|
+
window.addEventListener("pointerup", handlePointerUp);
|
|
629
|
+
window.addEventListener("pointercancel", handlePointerUp);
|
|
635
630
|
} else {
|
|
636
631
|
ownerDocumentCounts.forEach((count, ownerDocument) => {
|
|
637
632
|
const {
|
|
638
633
|
body
|
|
639
634
|
} = ownerDocument;
|
|
640
635
|
if (count > 0) {
|
|
641
|
-
body.addEventListener("
|
|
642
|
-
|
|
643
|
-
body.addEventListener("touchmove", handlePointerMove, {
|
|
644
|
-
passive: false
|
|
636
|
+
body.addEventListener("pointerdown", handlePointerDown, {
|
|
637
|
+
capture: true
|
|
645
638
|
});
|
|
646
|
-
body.addEventListener("
|
|
639
|
+
body.addEventListener("pointermove", handlePointerMove);
|
|
647
640
|
}
|
|
648
641
|
});
|
|
649
642
|
}
|
|
@@ -2031,7 +2024,7 @@ function PanelGroupWithForwardedRef({
|
|
|
2031
2024
|
|
|
2032
2025
|
// Only update the cursor for layout changes triggered by touch/mouse events (not keyboard)
|
|
2033
2026
|
// Update the cursor even if the layout hasn't changed (we may need to show an invalid cursor state)
|
|
2034
|
-
if (
|
|
2027
|
+
if (isPointerEvent(event) || isMouseEvent(event)) {
|
|
2035
2028
|
// Watch for multiple subsequent deltas; this might occur for tiny cursor movements.
|
|
2036
2029
|
// In this case, Panel sizes might not change–
|
|
2037
2030
|
// but updating cursor in this scenario would cause a flicker.
|
|
@@ -23,6 +23,8 @@ const {
|
|
|
23
23
|
const useId = React["useId".toString()];
|
|
24
24
|
const useLayoutEffect_do_not_use_directly = useLayoutEffect;
|
|
25
25
|
|
|
26
|
+
// The "contextmenu" event is not supported as a PointerEvent in all browsers yet, so MouseEvent still need to be handled
|
|
27
|
+
|
|
26
28
|
const PanelGroupContext = createContext(null);
|
|
27
29
|
PanelGroupContext.displayName = "PanelGroupContext";
|
|
28
30
|
|
|
@@ -237,27 +239,26 @@ function setGlobalCursorStyle(state, constraintFlags) {
|
|
|
237
239
|
function isKeyDown(event) {
|
|
238
240
|
return event.type === "keydown";
|
|
239
241
|
}
|
|
242
|
+
function isPointerEvent(event) {
|
|
243
|
+
return event.type.startsWith("pointer");
|
|
244
|
+
}
|
|
240
245
|
function isMouseEvent(event) {
|
|
241
246
|
return event.type.startsWith("mouse");
|
|
242
247
|
}
|
|
243
|
-
function isTouchEvent(event) {
|
|
244
|
-
return event.type.startsWith("touch");
|
|
245
|
-
}
|
|
246
248
|
|
|
247
249
|
function getResizeEventCoordinates(event) {
|
|
248
|
-
if (
|
|
250
|
+
if (isPointerEvent(event)) {
|
|
251
|
+
if (event.isPrimary) {
|
|
252
|
+
return {
|
|
253
|
+
x: event.clientX,
|
|
254
|
+
y: event.clientY
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
} else if (isMouseEvent(event)) {
|
|
249
258
|
return {
|
|
250
259
|
x: event.clientX,
|
|
251
260
|
y: event.clientY
|
|
252
261
|
};
|
|
253
|
-
} else if (isTouchEvent(event)) {
|
|
254
|
-
const touch = event.touches[0];
|
|
255
|
-
if (touch && touch.clientX && touch.clientY) {
|
|
256
|
-
return {
|
|
257
|
-
x: touch.clientX,
|
|
258
|
-
y: touch.clientY
|
|
259
|
-
};
|
|
260
|
-
}
|
|
261
262
|
}
|
|
262
263
|
return {
|
|
263
264
|
x: Infinity,
|
|
@@ -449,6 +450,7 @@ function handlePointerDown(event) {
|
|
|
449
450
|
if (intersectingHandles.length > 0) {
|
|
450
451
|
updateResizeHandlerStates("down", event);
|
|
451
452
|
event.preventDefault();
|
|
453
|
+
event.stopPropagation();
|
|
452
454
|
}
|
|
453
455
|
}
|
|
454
456
|
function handlePointerMove(event) {
|
|
@@ -597,15 +599,12 @@ function updateListeners() {
|
|
|
597
599
|
body
|
|
598
600
|
} = ownerDocument;
|
|
599
601
|
body.removeEventListener("contextmenu", handlePointerUp);
|
|
600
|
-
body.removeEventListener("
|
|
601
|
-
body.removeEventListener("
|
|
602
|
-
body.removeEventListener("
|
|
603
|
-
body.removeEventListener("touchmove", handlePointerMove);
|
|
604
|
-
body.removeEventListener("touchstart", handlePointerDown);
|
|
602
|
+
body.removeEventListener("pointerdown", handlePointerDown);
|
|
603
|
+
body.removeEventListener("pointerleave", handlePointerMove);
|
|
604
|
+
body.removeEventListener("pointermove", handlePointerMove);
|
|
605
605
|
});
|
|
606
|
-
window.removeEventListener("
|
|
607
|
-
window.removeEventListener("
|
|
608
|
-
window.removeEventListener("touchend", handlePointerUp);
|
|
606
|
+
window.removeEventListener("pointerup", handlePointerUp);
|
|
607
|
+
window.removeEventListener("pointercancel", handlePointerUp);
|
|
609
608
|
if (registeredResizeHandlers.size > 0) {
|
|
610
609
|
if (isPointerDown) {
|
|
611
610
|
if (intersectingHandles.length > 0) {
|
|
@@ -615,29 +614,23 @@ function updateListeners() {
|
|
|
615
614
|
} = ownerDocument;
|
|
616
615
|
if (count > 0) {
|
|
617
616
|
body.addEventListener("contextmenu", handlePointerUp);
|
|
618
|
-
body.addEventListener("
|
|
619
|
-
body.addEventListener("
|
|
620
|
-
body.addEventListener("touchmove", handlePointerMove, {
|
|
621
|
-
passive: false
|
|
622
|
-
});
|
|
617
|
+
body.addEventListener("pointerleave", handlePointerMove);
|
|
618
|
+
body.addEventListener("pointermove", handlePointerMove);
|
|
623
619
|
}
|
|
624
620
|
});
|
|
625
621
|
}
|
|
626
|
-
window.addEventListener("
|
|
627
|
-
window.addEventListener("
|
|
628
|
-
window.addEventListener("touchend", handlePointerUp);
|
|
622
|
+
window.addEventListener("pointerup", handlePointerUp);
|
|
623
|
+
window.addEventListener("pointercancel", handlePointerUp);
|
|
629
624
|
} else {
|
|
630
625
|
ownerDocumentCounts.forEach((count, ownerDocument) => {
|
|
631
626
|
const {
|
|
632
627
|
body
|
|
633
628
|
} = ownerDocument;
|
|
634
629
|
if (count > 0) {
|
|
635
|
-
body.addEventListener("
|
|
636
|
-
|
|
637
|
-
body.addEventListener("touchmove", handlePointerMove, {
|
|
638
|
-
passive: false
|
|
630
|
+
body.addEventListener("pointerdown", handlePointerDown, {
|
|
631
|
+
capture: true
|
|
639
632
|
});
|
|
640
|
-
body.addEventListener("
|
|
633
|
+
body.addEventListener("pointermove", handlePointerMove);
|
|
641
634
|
}
|
|
642
635
|
});
|
|
643
636
|
}
|
|
@@ -1925,7 +1918,7 @@ function PanelGroupWithForwardedRef({
|
|
|
1925
1918
|
|
|
1926
1919
|
// Only update the cursor for layout changes triggered by touch/mouse events (not keyboard)
|
|
1927
1920
|
// Update the cursor even if the layout hasn't changed (we may need to show an invalid cursor state)
|
|
1928
|
-
if (
|
|
1921
|
+
if (isPointerEvent(event) || isMouseEvent(event)) {
|
|
1929
1922
|
// Watch for multiple subsequent deltas; this might occur for tiny cursor movements.
|
|
1930
1923
|
// In this case, Panel sizes might not change–
|
|
1931
1924
|
// but updating cursor in this scenario would cause a flicker.
|
|
@@ -49,6 +49,8 @@ const {
|
|
|
49
49
|
const useId = React__namespace["useId".toString()];
|
|
50
50
|
const useLayoutEffect_do_not_use_directly = useLayoutEffect;
|
|
51
51
|
|
|
52
|
+
// The "contextmenu" event is not supported as a PointerEvent in all browsers yet, so MouseEvent still need to be handled
|
|
53
|
+
|
|
52
54
|
const PanelGroupContext = createContext(null);
|
|
53
55
|
PanelGroupContext.displayName = "PanelGroupContext";
|
|
54
56
|
|
|
@@ -263,27 +265,26 @@ function setGlobalCursorStyle(state, constraintFlags) {
|
|
|
263
265
|
function isKeyDown(event) {
|
|
264
266
|
return event.type === "keydown";
|
|
265
267
|
}
|
|
268
|
+
function isPointerEvent(event) {
|
|
269
|
+
return event.type.startsWith("pointer");
|
|
270
|
+
}
|
|
266
271
|
function isMouseEvent(event) {
|
|
267
272
|
return event.type.startsWith("mouse");
|
|
268
273
|
}
|
|
269
|
-
function isTouchEvent(event) {
|
|
270
|
-
return event.type.startsWith("touch");
|
|
271
|
-
}
|
|
272
274
|
|
|
273
275
|
function getResizeEventCoordinates(event) {
|
|
274
|
-
if (
|
|
276
|
+
if (isPointerEvent(event)) {
|
|
277
|
+
if (event.isPrimary) {
|
|
278
|
+
return {
|
|
279
|
+
x: event.clientX,
|
|
280
|
+
y: event.clientY
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
} else if (isMouseEvent(event)) {
|
|
275
284
|
return {
|
|
276
285
|
x: event.clientX,
|
|
277
286
|
y: event.clientY
|
|
278
287
|
};
|
|
279
|
-
} else if (isTouchEvent(event)) {
|
|
280
|
-
const touch = event.touches[0];
|
|
281
|
-
if (touch && touch.clientX && touch.clientY) {
|
|
282
|
-
return {
|
|
283
|
-
x: touch.clientX,
|
|
284
|
-
y: touch.clientY
|
|
285
|
-
};
|
|
286
|
-
}
|
|
287
288
|
}
|
|
288
289
|
return {
|
|
289
290
|
x: Infinity,
|
|
@@ -475,6 +476,7 @@ function handlePointerDown(event) {
|
|
|
475
476
|
if (intersectingHandles.length > 0) {
|
|
476
477
|
updateResizeHandlerStates("down", event);
|
|
477
478
|
event.preventDefault();
|
|
479
|
+
event.stopPropagation();
|
|
478
480
|
}
|
|
479
481
|
}
|
|
480
482
|
function handlePointerMove(event) {
|
|
@@ -623,15 +625,12 @@ function updateListeners() {
|
|
|
623
625
|
body
|
|
624
626
|
} = ownerDocument;
|
|
625
627
|
body.removeEventListener("contextmenu", handlePointerUp);
|
|
626
|
-
body.removeEventListener("
|
|
627
|
-
body.removeEventListener("
|
|
628
|
-
body.removeEventListener("
|
|
629
|
-
body.removeEventListener("touchmove", handlePointerMove);
|
|
630
|
-
body.removeEventListener("touchstart", handlePointerDown);
|
|
628
|
+
body.removeEventListener("pointerdown", handlePointerDown);
|
|
629
|
+
body.removeEventListener("pointerleave", handlePointerMove);
|
|
630
|
+
body.removeEventListener("pointermove", handlePointerMove);
|
|
631
631
|
});
|
|
632
|
-
window.removeEventListener("
|
|
633
|
-
window.removeEventListener("
|
|
634
|
-
window.removeEventListener("touchend", handlePointerUp);
|
|
632
|
+
window.removeEventListener("pointerup", handlePointerUp);
|
|
633
|
+
window.removeEventListener("pointercancel", handlePointerUp);
|
|
635
634
|
if (registeredResizeHandlers.size > 0) {
|
|
636
635
|
if (isPointerDown) {
|
|
637
636
|
if (intersectingHandles.length > 0) {
|
|
@@ -641,29 +640,23 @@ function updateListeners() {
|
|
|
641
640
|
} = ownerDocument;
|
|
642
641
|
if (count > 0) {
|
|
643
642
|
body.addEventListener("contextmenu", handlePointerUp);
|
|
644
|
-
body.addEventListener("
|
|
645
|
-
body.addEventListener("
|
|
646
|
-
body.addEventListener("touchmove", handlePointerMove, {
|
|
647
|
-
passive: false
|
|
648
|
-
});
|
|
643
|
+
body.addEventListener("pointerleave", handlePointerMove);
|
|
644
|
+
body.addEventListener("pointermove", handlePointerMove);
|
|
649
645
|
}
|
|
650
646
|
});
|
|
651
647
|
}
|
|
652
|
-
window.addEventListener("
|
|
653
|
-
window.addEventListener("
|
|
654
|
-
window.addEventListener("touchend", handlePointerUp);
|
|
648
|
+
window.addEventListener("pointerup", handlePointerUp);
|
|
649
|
+
window.addEventListener("pointercancel", handlePointerUp);
|
|
655
650
|
} else {
|
|
656
651
|
ownerDocumentCounts.forEach((count, ownerDocument) => {
|
|
657
652
|
const {
|
|
658
653
|
body
|
|
659
654
|
} = ownerDocument;
|
|
660
655
|
if (count > 0) {
|
|
661
|
-
body.addEventListener("
|
|
662
|
-
|
|
663
|
-
body.addEventListener("touchmove", handlePointerMove, {
|
|
664
|
-
passive: false
|
|
656
|
+
body.addEventListener("pointerdown", handlePointerDown, {
|
|
657
|
+
capture: true
|
|
665
658
|
});
|
|
666
|
-
body.addEventListener("
|
|
659
|
+
body.addEventListener("pointermove", handlePointerMove);
|
|
667
660
|
}
|
|
668
661
|
});
|
|
669
662
|
}
|
|
@@ -1951,7 +1944,7 @@ function PanelGroupWithForwardedRef({
|
|
|
1951
1944
|
|
|
1952
1945
|
// Only update the cursor for layout changes triggered by touch/mouse events (not keyboard)
|
|
1953
1946
|
// Update the cursor even if the layout hasn't changed (we may need to show an invalid cursor state)
|
|
1954
|
-
if (
|
|
1947
|
+
if (isPointerEvent(event) || isMouseEvent(event)) {
|
|
1955
1948
|
// Watch for multiple subsequent deltas; this might occur for tiny cursor movements.
|
|
1956
1949
|
// In this case, Panel sizes might not change–
|
|
1957
1950
|
// but updating cursor in this scenario would cause a flicker.
|