react-resizable-panels 2.0.16 → 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 +5 -1
- package/README.md +3 -3
- package/dist/declarations/src/types.d.ts +1 -1
- package/dist/react-resizable-panels.browser.cjs.js +30 -37
- package/dist/react-resizable-panels.browser.development.cjs.js +30 -37
- package/dist/react-resizable-panels.browser.development.esm.js +30 -37
- package/dist/react-resizable-panels.browser.esm.js +30 -37
- package/dist/react-resizable-panels.cjs.js +30 -37
- package/dist/react-resizable-panels.development.cjs.js +30 -37
- package/dist/react-resizable-panels.development.esm.js +30 -37
- package/dist/react-resizable-panels.development.node.cjs.js +30 -37
- package/dist/react-resizable-panels.development.node.esm.js +30 -37
- package/dist/react-resizable-panels.esm.js +30 -37
- package/dist/react-resizable-panels.node.cjs.js +30 -37
- package/dist/react-resizable-panels.node.esm.js +30 -37
- 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/adjustLayoutByDelta.ts +2 -2
- package/src/utils/computePanelFlexBoxStyle.ts +3 -2
- package/src/utils/events/getResizeEventCoordinates.ts +9 -10
- package/src/utils/events/index.ts +4 -4
- package/src/utils/test-utils.ts +3 -0
|
@@ -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
|
}
|
|
@@ -902,7 +895,7 @@ function adjustLayoutByDelta({
|
|
|
902
895
|
if (!fuzzyNumbersEqual(prevSize, safeSize)) {
|
|
903
896
|
deltaApplied += prevSize - safeSize;
|
|
904
897
|
nextLayout[index] = safeSize;
|
|
905
|
-
if (deltaApplied.
|
|
898
|
+
if (deltaApplied.toPrecision(3).localeCompare(Math.abs(delta).toPrecision(3), undefined, {
|
|
906
899
|
numeric: true
|
|
907
900
|
}) >= 0) {
|
|
908
901
|
break;
|
|
@@ -1382,12 +1375,12 @@ function computePanelFlexBoxStyle({
|
|
|
1382
1375
|
if (size == null) {
|
|
1383
1376
|
// Initial render (before panels have registered themselves)
|
|
1384
1377
|
// In order to support server rendering, fall back to default size if provided
|
|
1385
|
-
flexGrow = defaultSize != undefined ? defaultSize.
|
|
1378
|
+
flexGrow = defaultSize != undefined ? defaultSize.toPrecision(precision) : "1";
|
|
1386
1379
|
} else if (panelData.length === 1) {
|
|
1387
1380
|
// Special case: Single panel group should always fill full width/height
|
|
1388
1381
|
flexGrow = "1";
|
|
1389
1382
|
} else {
|
|
1390
|
-
flexGrow = size.
|
|
1383
|
+
flexGrow = size.toPrecision(precision);
|
|
1391
1384
|
}
|
|
1392
1385
|
return {
|
|
1393
1386
|
flexBasis: 0,
|
|
@@ -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.
|
|
@@ -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
|
|
|
@@ -274,27 +276,26 @@ function setGlobalCursorStyle(state, constraintFlags) {
|
|
|
274
276
|
function isKeyDown(event) {
|
|
275
277
|
return event.type === "keydown";
|
|
276
278
|
}
|
|
279
|
+
function isPointerEvent(event) {
|
|
280
|
+
return event.type.startsWith("pointer");
|
|
281
|
+
}
|
|
277
282
|
function isMouseEvent(event) {
|
|
278
283
|
return event.type.startsWith("mouse");
|
|
279
284
|
}
|
|
280
|
-
function isTouchEvent(event) {
|
|
281
|
-
return event.type.startsWith("touch");
|
|
282
|
-
}
|
|
283
285
|
|
|
284
286
|
function getResizeEventCoordinates(event) {
|
|
285
|
-
if (
|
|
287
|
+
if (isPointerEvent(event)) {
|
|
288
|
+
if (event.isPrimary) {
|
|
289
|
+
return {
|
|
290
|
+
x: event.clientX,
|
|
291
|
+
y: event.clientY
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
} else if (isMouseEvent(event)) {
|
|
286
295
|
return {
|
|
287
296
|
x: event.clientX,
|
|
288
297
|
y: event.clientY
|
|
289
298
|
};
|
|
290
|
-
} else if (isTouchEvent(event)) {
|
|
291
|
-
const touch = event.touches[0];
|
|
292
|
-
if (touch && touch.clientX && touch.clientY) {
|
|
293
|
-
return {
|
|
294
|
-
x: touch.clientX,
|
|
295
|
-
y: touch.clientY
|
|
296
|
-
};
|
|
297
|
-
}
|
|
298
299
|
}
|
|
299
300
|
return {
|
|
300
301
|
x: Infinity,
|
|
@@ -486,6 +487,7 @@ function handlePointerDown(event) {
|
|
|
486
487
|
if (intersectingHandles.length > 0) {
|
|
487
488
|
updateResizeHandlerStates("down", event);
|
|
488
489
|
event.preventDefault();
|
|
490
|
+
event.stopPropagation();
|
|
489
491
|
}
|
|
490
492
|
}
|
|
491
493
|
function handlePointerMove(event) {
|
|
@@ -634,15 +636,12 @@ function updateListeners() {
|
|
|
634
636
|
body
|
|
635
637
|
} = ownerDocument;
|
|
636
638
|
body.removeEventListener("contextmenu", handlePointerUp);
|
|
637
|
-
body.removeEventListener("
|
|
638
|
-
body.removeEventListener("
|
|
639
|
-
body.removeEventListener("
|
|
640
|
-
body.removeEventListener("touchmove", handlePointerMove);
|
|
641
|
-
body.removeEventListener("touchstart", handlePointerDown);
|
|
639
|
+
body.removeEventListener("pointerdown", handlePointerDown);
|
|
640
|
+
body.removeEventListener("pointerleave", handlePointerMove);
|
|
641
|
+
body.removeEventListener("pointermove", handlePointerMove);
|
|
642
642
|
});
|
|
643
|
-
window.removeEventListener("
|
|
644
|
-
window.removeEventListener("
|
|
645
|
-
window.removeEventListener("touchend", handlePointerUp);
|
|
643
|
+
window.removeEventListener("pointerup", handlePointerUp);
|
|
644
|
+
window.removeEventListener("pointercancel", handlePointerUp);
|
|
646
645
|
if (registeredResizeHandlers.size > 0) {
|
|
647
646
|
if (isPointerDown) {
|
|
648
647
|
if (intersectingHandles.length > 0) {
|
|
@@ -652,29 +651,23 @@ function updateListeners() {
|
|
|
652
651
|
} = ownerDocument;
|
|
653
652
|
if (count > 0) {
|
|
654
653
|
body.addEventListener("contextmenu", handlePointerUp);
|
|
655
|
-
body.addEventListener("
|
|
656
|
-
body.addEventListener("
|
|
657
|
-
body.addEventListener("touchmove", handlePointerMove, {
|
|
658
|
-
passive: false
|
|
659
|
-
});
|
|
654
|
+
body.addEventListener("pointerleave", handlePointerMove);
|
|
655
|
+
body.addEventListener("pointermove", handlePointerMove);
|
|
660
656
|
}
|
|
661
657
|
});
|
|
662
658
|
}
|
|
663
|
-
window.addEventListener("
|
|
664
|
-
window.addEventListener("
|
|
665
|
-
window.addEventListener("touchend", handlePointerUp);
|
|
659
|
+
window.addEventListener("pointerup", handlePointerUp);
|
|
660
|
+
window.addEventListener("pointercancel", handlePointerUp);
|
|
666
661
|
} else {
|
|
667
662
|
ownerDocumentCounts.forEach((count, ownerDocument) => {
|
|
668
663
|
const {
|
|
669
664
|
body
|
|
670
665
|
} = ownerDocument;
|
|
671
666
|
if (count > 0) {
|
|
672
|
-
body.addEventListener("
|
|
673
|
-
|
|
674
|
-
body.addEventListener("touchmove", handlePointerMove, {
|
|
675
|
-
passive: false
|
|
667
|
+
body.addEventListener("pointerdown", handlePointerDown, {
|
|
668
|
+
capture: true
|
|
676
669
|
});
|
|
677
|
-
body.addEventListener("
|
|
670
|
+
body.addEventListener("pointermove", handlePointerMove);
|
|
678
671
|
}
|
|
679
672
|
});
|
|
680
673
|
}
|
|
@@ -913,7 +906,7 @@ function adjustLayoutByDelta({
|
|
|
913
906
|
if (!fuzzyNumbersEqual(prevSize, safeSize)) {
|
|
914
907
|
deltaApplied += prevSize - safeSize;
|
|
915
908
|
nextLayout[index] = safeSize;
|
|
916
|
-
if (deltaApplied.
|
|
909
|
+
if (deltaApplied.toPrecision(3).localeCompare(Math.abs(delta).toPrecision(3), undefined, {
|
|
917
910
|
numeric: true
|
|
918
911
|
}) >= 0) {
|
|
919
912
|
break;
|
|
@@ -1403,12 +1396,12 @@ function computePanelFlexBoxStyle({
|
|
|
1403
1396
|
if (size == null) {
|
|
1404
1397
|
// Initial render (before panels have registered themselves)
|
|
1405
1398
|
// In order to support server rendering, fall back to default size if provided
|
|
1406
|
-
flexGrow = defaultSize != undefined ? defaultSize.
|
|
1399
|
+
flexGrow = defaultSize != undefined ? defaultSize.toPrecision(precision) : "1";
|
|
1407
1400
|
} else if (panelData.length === 1) {
|
|
1408
1401
|
// Special case: Single panel group should always fill full width/height
|
|
1409
1402
|
flexGrow = "1";
|
|
1410
1403
|
} else {
|
|
1411
|
-
flexGrow = size.
|
|
1404
|
+
flexGrow = size.toPrecision(precision);
|
|
1412
1405
|
}
|
|
1413
1406
|
return {
|
|
1414
1407
|
flexBasis: 0,
|
|
@@ -2062,7 +2055,7 @@ function PanelGroupWithForwardedRef({
|
|
|
2062
2055
|
|
|
2063
2056
|
// Only update the cursor for layout changes triggered by touch/mouse events (not keyboard)
|
|
2064
2057
|
// Update the cursor even if the layout hasn't changed (we may need to show an invalid cursor state)
|
|
2065
|
-
if (
|
|
2058
|
+
if (isPointerEvent(event) || isMouseEvent(event)) {
|
|
2066
2059
|
// Watch for multiple subsequent deltas; this might occur for tiny cursor movements.
|
|
2067
2060
|
// In this case, Panel sizes might not change–
|
|
2068
2061
|
// but updating cursor in this scenario would cause a flicker.
|
|
@@ -25,6 +25,8 @@ const {
|
|
|
25
25
|
const useId = React["useId".toString()];
|
|
26
26
|
const useLayoutEffect_do_not_use_directly = useLayoutEffect;
|
|
27
27
|
|
|
28
|
+
// The "contextmenu" event is not supported as a PointerEvent in all browsers yet, so MouseEvent still need to be handled
|
|
29
|
+
|
|
28
30
|
const PanelGroupContext = createContext(null);
|
|
29
31
|
PanelGroupContext.displayName = "PanelGroupContext";
|
|
30
32
|
|
|
@@ -250,27 +252,26 @@ function setGlobalCursorStyle(state, constraintFlags) {
|
|
|
250
252
|
function isKeyDown(event) {
|
|
251
253
|
return event.type === "keydown";
|
|
252
254
|
}
|
|
255
|
+
function isPointerEvent(event) {
|
|
256
|
+
return event.type.startsWith("pointer");
|
|
257
|
+
}
|
|
253
258
|
function isMouseEvent(event) {
|
|
254
259
|
return event.type.startsWith("mouse");
|
|
255
260
|
}
|
|
256
|
-
function isTouchEvent(event) {
|
|
257
|
-
return event.type.startsWith("touch");
|
|
258
|
-
}
|
|
259
261
|
|
|
260
262
|
function getResizeEventCoordinates(event) {
|
|
261
|
-
if (
|
|
263
|
+
if (isPointerEvent(event)) {
|
|
264
|
+
if (event.isPrimary) {
|
|
265
|
+
return {
|
|
266
|
+
x: event.clientX,
|
|
267
|
+
y: event.clientY
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
} else if (isMouseEvent(event)) {
|
|
262
271
|
return {
|
|
263
272
|
x: event.clientX,
|
|
264
273
|
y: event.clientY
|
|
265
274
|
};
|
|
266
|
-
} else if (isTouchEvent(event)) {
|
|
267
|
-
const touch = event.touches[0];
|
|
268
|
-
if (touch && touch.clientX && touch.clientY) {
|
|
269
|
-
return {
|
|
270
|
-
x: touch.clientX,
|
|
271
|
-
y: touch.clientY
|
|
272
|
-
};
|
|
273
|
-
}
|
|
274
275
|
}
|
|
275
276
|
return {
|
|
276
277
|
x: Infinity,
|
|
@@ -462,6 +463,7 @@ function handlePointerDown(event) {
|
|
|
462
463
|
if (intersectingHandles.length > 0) {
|
|
463
464
|
updateResizeHandlerStates("down", event);
|
|
464
465
|
event.preventDefault();
|
|
466
|
+
event.stopPropagation();
|
|
465
467
|
}
|
|
466
468
|
}
|
|
467
469
|
function handlePointerMove(event) {
|
|
@@ -610,15 +612,12 @@ function updateListeners() {
|
|
|
610
612
|
body
|
|
611
613
|
} = ownerDocument;
|
|
612
614
|
body.removeEventListener("contextmenu", handlePointerUp);
|
|
613
|
-
body.removeEventListener("
|
|
614
|
-
body.removeEventListener("
|
|
615
|
-
body.removeEventListener("
|
|
616
|
-
body.removeEventListener("touchmove", handlePointerMove);
|
|
617
|
-
body.removeEventListener("touchstart", handlePointerDown);
|
|
615
|
+
body.removeEventListener("pointerdown", handlePointerDown);
|
|
616
|
+
body.removeEventListener("pointerleave", handlePointerMove);
|
|
617
|
+
body.removeEventListener("pointermove", handlePointerMove);
|
|
618
618
|
});
|
|
619
|
-
window.removeEventListener("
|
|
620
|
-
window.removeEventListener("
|
|
621
|
-
window.removeEventListener("touchend", handlePointerUp);
|
|
619
|
+
window.removeEventListener("pointerup", handlePointerUp);
|
|
620
|
+
window.removeEventListener("pointercancel", handlePointerUp);
|
|
622
621
|
if (registeredResizeHandlers.size > 0) {
|
|
623
622
|
if (isPointerDown) {
|
|
624
623
|
if (intersectingHandles.length > 0) {
|
|
@@ -628,29 +627,23 @@ function updateListeners() {
|
|
|
628
627
|
} = ownerDocument;
|
|
629
628
|
if (count > 0) {
|
|
630
629
|
body.addEventListener("contextmenu", handlePointerUp);
|
|
631
|
-
body.addEventListener("
|
|
632
|
-
body.addEventListener("
|
|
633
|
-
body.addEventListener("touchmove", handlePointerMove, {
|
|
634
|
-
passive: false
|
|
635
|
-
});
|
|
630
|
+
body.addEventListener("pointerleave", handlePointerMove);
|
|
631
|
+
body.addEventListener("pointermove", handlePointerMove);
|
|
636
632
|
}
|
|
637
633
|
});
|
|
638
634
|
}
|
|
639
|
-
window.addEventListener("
|
|
640
|
-
window.addEventListener("
|
|
641
|
-
window.addEventListener("touchend", handlePointerUp);
|
|
635
|
+
window.addEventListener("pointerup", handlePointerUp);
|
|
636
|
+
window.addEventListener("pointercancel", handlePointerUp);
|
|
642
637
|
} else {
|
|
643
638
|
ownerDocumentCounts.forEach((count, ownerDocument) => {
|
|
644
639
|
const {
|
|
645
640
|
body
|
|
646
641
|
} = ownerDocument;
|
|
647
642
|
if (count > 0) {
|
|
648
|
-
body.addEventListener("
|
|
649
|
-
|
|
650
|
-
body.addEventListener("touchmove", handlePointerMove, {
|
|
651
|
-
passive: false
|
|
643
|
+
body.addEventListener("pointerdown", handlePointerDown, {
|
|
644
|
+
capture: true
|
|
652
645
|
});
|
|
653
|
-
body.addEventListener("
|
|
646
|
+
body.addEventListener("pointermove", handlePointerMove);
|
|
654
647
|
}
|
|
655
648
|
});
|
|
656
649
|
}
|
|
@@ -889,7 +882,7 @@ function adjustLayoutByDelta({
|
|
|
889
882
|
if (!fuzzyNumbersEqual(prevSize, safeSize)) {
|
|
890
883
|
deltaApplied += prevSize - safeSize;
|
|
891
884
|
nextLayout[index] = safeSize;
|
|
892
|
-
if (deltaApplied.
|
|
885
|
+
if (deltaApplied.toPrecision(3).localeCompare(Math.abs(delta).toPrecision(3), undefined, {
|
|
893
886
|
numeric: true
|
|
894
887
|
}) >= 0) {
|
|
895
888
|
break;
|
|
@@ -1379,12 +1372,12 @@ function computePanelFlexBoxStyle({
|
|
|
1379
1372
|
if (size == null) {
|
|
1380
1373
|
// Initial render (before panels have registered themselves)
|
|
1381
1374
|
// In order to support server rendering, fall back to default size if provided
|
|
1382
|
-
flexGrow = defaultSize != undefined ? defaultSize.
|
|
1375
|
+
flexGrow = defaultSize != undefined ? defaultSize.toPrecision(precision) : "1";
|
|
1383
1376
|
} else if (panelData.length === 1) {
|
|
1384
1377
|
// Special case: Single panel group should always fill full width/height
|
|
1385
1378
|
flexGrow = "1";
|
|
1386
1379
|
} else {
|
|
1387
|
-
flexGrow = size.
|
|
1380
|
+
flexGrow = size.toPrecision(precision);
|
|
1388
1381
|
}
|
|
1389
1382
|
return {
|
|
1390
1383
|
flexBasis: 0,
|
|
@@ -2038,7 +2031,7 @@ function PanelGroupWithForwardedRef({
|
|
|
2038
2031
|
|
|
2039
2032
|
// Only update the cursor for layout changes triggered by touch/mouse events (not keyboard)
|
|
2040
2033
|
// Update the cursor even if the layout hasn't changed (we may need to show an invalid cursor state)
|
|
2041
|
-
if (
|
|
2034
|
+
if (isPointerEvent(event) || isMouseEvent(event)) {
|
|
2042
2035
|
// Watch for multiple subsequent deltas; this might occur for tiny cursor movements.
|
|
2043
2036
|
// In this case, Panel sizes might not change–
|
|
2044
2037
|
// but updating cursor in this scenario would cause a flicker.
|
|
@@ -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
|
|
|
@@ -236,27 +238,26 @@ function setGlobalCursorStyle(state, constraintFlags) {
|
|
|
236
238
|
function isKeyDown(event) {
|
|
237
239
|
return event.type === "keydown";
|
|
238
240
|
}
|
|
241
|
+
function isPointerEvent(event) {
|
|
242
|
+
return event.type.startsWith("pointer");
|
|
243
|
+
}
|
|
239
244
|
function isMouseEvent(event) {
|
|
240
245
|
return event.type.startsWith("mouse");
|
|
241
246
|
}
|
|
242
|
-
function isTouchEvent(event) {
|
|
243
|
-
return event.type.startsWith("touch");
|
|
244
|
-
}
|
|
245
247
|
|
|
246
248
|
function getResizeEventCoordinates(event) {
|
|
247
|
-
if (
|
|
249
|
+
if (isPointerEvent(event)) {
|
|
250
|
+
if (event.isPrimary) {
|
|
251
|
+
return {
|
|
252
|
+
x: event.clientX,
|
|
253
|
+
y: event.clientY
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
} else if (isMouseEvent(event)) {
|
|
248
257
|
return {
|
|
249
258
|
x: event.clientX,
|
|
250
259
|
y: event.clientY
|
|
251
260
|
};
|
|
252
|
-
} else if (isTouchEvent(event)) {
|
|
253
|
-
const touch = event.touches[0];
|
|
254
|
-
if (touch && touch.clientX && touch.clientY) {
|
|
255
|
-
return {
|
|
256
|
-
x: touch.clientX,
|
|
257
|
-
y: touch.clientY
|
|
258
|
-
};
|
|
259
|
-
}
|
|
260
261
|
}
|
|
261
262
|
return {
|
|
262
263
|
x: Infinity,
|
|
@@ -448,6 +449,7 @@ function handlePointerDown(event) {
|
|
|
448
449
|
if (intersectingHandles.length > 0) {
|
|
449
450
|
updateResizeHandlerStates("down", event);
|
|
450
451
|
event.preventDefault();
|
|
452
|
+
event.stopPropagation();
|
|
451
453
|
}
|
|
452
454
|
}
|
|
453
455
|
function handlePointerMove(event) {
|
|
@@ -596,15 +598,12 @@ function updateListeners() {
|
|
|
596
598
|
body
|
|
597
599
|
} = ownerDocument;
|
|
598
600
|
body.removeEventListener("contextmenu", handlePointerUp);
|
|
599
|
-
body.removeEventListener("
|
|
600
|
-
body.removeEventListener("
|
|
601
|
-
body.removeEventListener("
|
|
602
|
-
body.removeEventListener("touchmove", handlePointerMove);
|
|
603
|
-
body.removeEventListener("touchstart", handlePointerDown);
|
|
601
|
+
body.removeEventListener("pointerdown", handlePointerDown);
|
|
602
|
+
body.removeEventListener("pointerleave", handlePointerMove);
|
|
603
|
+
body.removeEventListener("pointermove", handlePointerMove);
|
|
604
604
|
});
|
|
605
|
-
window.removeEventListener("
|
|
606
|
-
window.removeEventListener("
|
|
607
|
-
window.removeEventListener("touchend", handlePointerUp);
|
|
605
|
+
window.removeEventListener("pointerup", handlePointerUp);
|
|
606
|
+
window.removeEventListener("pointercancel", handlePointerUp);
|
|
608
607
|
if (registeredResizeHandlers.size > 0) {
|
|
609
608
|
if (isPointerDown) {
|
|
610
609
|
if (intersectingHandles.length > 0) {
|
|
@@ -614,29 +613,23 @@ function updateListeners() {
|
|
|
614
613
|
} = ownerDocument;
|
|
615
614
|
if (count > 0) {
|
|
616
615
|
body.addEventListener("contextmenu", handlePointerUp);
|
|
617
|
-
body.addEventListener("
|
|
618
|
-
body.addEventListener("
|
|
619
|
-
body.addEventListener("touchmove", handlePointerMove, {
|
|
620
|
-
passive: false
|
|
621
|
-
});
|
|
616
|
+
body.addEventListener("pointerleave", handlePointerMove);
|
|
617
|
+
body.addEventListener("pointermove", handlePointerMove);
|
|
622
618
|
}
|
|
623
619
|
});
|
|
624
620
|
}
|
|
625
|
-
window.addEventListener("
|
|
626
|
-
window.addEventListener("
|
|
627
|
-
window.addEventListener("touchend", handlePointerUp);
|
|
621
|
+
window.addEventListener("pointerup", handlePointerUp);
|
|
622
|
+
window.addEventListener("pointercancel", handlePointerUp);
|
|
628
623
|
} else {
|
|
629
624
|
ownerDocumentCounts.forEach((count, ownerDocument) => {
|
|
630
625
|
const {
|
|
631
626
|
body
|
|
632
627
|
} = ownerDocument;
|
|
633
628
|
if (count > 0) {
|
|
634
|
-
body.addEventListener("
|
|
635
|
-
|
|
636
|
-
body.addEventListener("touchmove", handlePointerMove, {
|
|
637
|
-
passive: false
|
|
629
|
+
body.addEventListener("pointerdown", handlePointerDown, {
|
|
630
|
+
capture: true
|
|
638
631
|
});
|
|
639
|
-
body.addEventListener("
|
|
632
|
+
body.addEventListener("pointermove", handlePointerMove);
|
|
640
633
|
}
|
|
641
634
|
});
|
|
642
635
|
}
|
|
@@ -875,7 +868,7 @@ function adjustLayoutByDelta({
|
|
|
875
868
|
if (!fuzzyNumbersEqual(prevSize, safeSize)) {
|
|
876
869
|
deltaApplied += prevSize - safeSize;
|
|
877
870
|
nextLayout[index] = safeSize;
|
|
878
|
-
if (deltaApplied.
|
|
871
|
+
if (deltaApplied.toPrecision(3).localeCompare(Math.abs(delta).toPrecision(3), undefined, {
|
|
879
872
|
numeric: true
|
|
880
873
|
}) >= 0) {
|
|
881
874
|
break;
|
|
@@ -1241,12 +1234,12 @@ function computePanelFlexBoxStyle({
|
|
|
1241
1234
|
if (size == null) {
|
|
1242
1235
|
// Initial render (before panels have registered themselves)
|
|
1243
1236
|
// In order to support server rendering, fall back to default size if provided
|
|
1244
|
-
flexGrow = defaultSize != undefined ? defaultSize.
|
|
1237
|
+
flexGrow = defaultSize != undefined ? defaultSize.toPrecision(precision) : "1";
|
|
1245
1238
|
} else if (panelData.length === 1) {
|
|
1246
1239
|
// Special case: Single panel group should always fill full width/height
|
|
1247
1240
|
flexGrow = "1";
|
|
1248
1241
|
} else {
|
|
1249
|
-
flexGrow = size.
|
|
1242
|
+
flexGrow = size.toPrecision(precision);
|
|
1250
1243
|
}
|
|
1251
1244
|
return {
|
|
1252
1245
|
flexBasis: 0,
|
|
@@ -1830,7 +1823,7 @@ function PanelGroupWithForwardedRef({
|
|
|
1830
1823
|
|
|
1831
1824
|
// Only update the cursor for layout changes triggered by touch/mouse events (not keyboard)
|
|
1832
1825
|
// Update the cursor even if the layout hasn't changed (we may need to show an invalid cursor state)
|
|
1833
|
-
if (
|
|
1826
|
+
if (isPointerEvent(event) || isMouseEvent(event)) {
|
|
1834
1827
|
// Watch for multiple subsequent deltas; this might occur for tiny cursor movements.
|
|
1835
1828
|
// In this case, Panel sizes might not change–
|
|
1836
1829
|
// but updating cursor in this scenario would cause a flicker.
|