react-resizable-panels 2.0.16 → 2.0.18
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 +9 -1
- package/README.md +3 -3
- package/dist/declarations/src/types.d.ts +1 -1
- package/dist/react-resizable-panels.browser.cjs.js +39 -43
- package/dist/react-resizable-panels.browser.development.cjs.js +39 -43
- package/dist/react-resizable-panels.browser.development.esm.js +39 -43
- package/dist/react-resizable-panels.browser.esm.js +39 -43
- package/dist/react-resizable-panels.cjs.js +39 -43
- package/dist/react-resizable-panels.development.cjs.js +39 -43
- package/dist/react-resizable-panels.development.esm.js +39 -43
- package/dist/react-resizable-panels.development.node.cjs.js +39 -43
- package/dist/react-resizable-panels.development.node.esm.js +39 -43
- package/dist/react-resizable-panels.esm.js +39 -43
- package/dist/react-resizable-panels.node.cjs.js +39 -43
- package/dist/react-resizable-panels.node.esm.js +39 -43
- 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/PanelResizeHandle.ts +9 -5
- 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
|
@@ -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
|
}
|
|
@@ -876,7 +869,7 @@ function adjustLayoutByDelta({
|
|
|
876
869
|
if (!fuzzyNumbersEqual(prevSize, safeSize)) {
|
|
877
870
|
deltaApplied += prevSize - safeSize;
|
|
878
871
|
nextLayout[index] = safeSize;
|
|
879
|
-
if (deltaApplied.
|
|
872
|
+
if (deltaApplied.toPrecision(3).localeCompare(Math.abs(delta).toPrecision(3), undefined, {
|
|
880
873
|
numeric: true
|
|
881
874
|
}) >= 0) {
|
|
882
875
|
break;
|
|
@@ -1356,12 +1349,12 @@ function computePanelFlexBoxStyle({
|
|
|
1356
1349
|
if (size == null) {
|
|
1357
1350
|
// Initial render (before panels have registered themselves)
|
|
1358
1351
|
// In order to support server rendering, fall back to default size if provided
|
|
1359
|
-
flexGrow = defaultSize != undefined ? defaultSize.
|
|
1352
|
+
flexGrow = defaultSize != undefined ? defaultSize.toPrecision(precision) : "1";
|
|
1360
1353
|
} else if (panelData.length === 1) {
|
|
1361
1354
|
// Special case: Single panel group should always fill full width/height
|
|
1362
1355
|
flexGrow = "1";
|
|
1363
1356
|
} else {
|
|
1364
|
-
flexGrow = size.
|
|
1357
|
+
flexGrow = size.toPrecision(precision);
|
|
1365
1358
|
}
|
|
1366
1359
|
return {
|
|
1367
1360
|
flexBasis: 0,
|
|
@@ -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.
|
|
@@ -2191,6 +2184,7 @@ function PanelResizeHandle({
|
|
|
2191
2184
|
tagName: Type = "div",
|
|
2192
2185
|
...rest
|
|
2193
2186
|
}) {
|
|
2187
|
+
var _hitAreaMargins$coars, _hitAreaMargins$fine;
|
|
2194
2188
|
const elementRef = useRef(null);
|
|
2195
2189
|
|
|
2196
2190
|
// Use a ref to guard against users passing inline props
|
|
@@ -2230,8 +2224,12 @@ function PanelResizeHandle({
|
|
|
2230
2224
|
setResizeHandler(() => resizeHandler);
|
|
2231
2225
|
}
|
|
2232
2226
|
}, [disabled, resizeHandleId, registerResizeHandleWithParentGroup]);
|
|
2227
|
+
|
|
2228
|
+
// Extract hit area margins before passing them to the effect's dependency array
|
|
2229
|
+
// so that inline object values won't trigger re-renders
|
|
2230
|
+
const coarseHitAreaMargins = (_hitAreaMargins$coars = hitAreaMargins === null || hitAreaMargins === void 0 ? void 0 : hitAreaMargins.coarse) !== null && _hitAreaMargins$coars !== void 0 ? _hitAreaMargins$coars : 15;
|
|
2231
|
+
const fineHitAreaMargins = (_hitAreaMargins$fine = hitAreaMargins === null || hitAreaMargins === void 0 ? void 0 : hitAreaMargins.fine) !== null && _hitAreaMargins$fine !== void 0 ? _hitAreaMargins$fine : 5;
|
|
2233
2232
|
useEffect(() => {
|
|
2234
|
-
var _hitAreaMargins$coars, _hitAreaMargins$fine;
|
|
2235
2233
|
if (disabled || resizeHandler == null) {
|
|
2236
2234
|
return;
|
|
2237
2235
|
}
|
|
@@ -2281,12 +2279,10 @@ function PanelResizeHandle({
|
|
|
2281
2279
|
}
|
|
2282
2280
|
};
|
|
2283
2281
|
return registerResizeHandle(resizeHandleId, element, direction, {
|
|
2284
|
-
|
|
2285
|
-
|
|
2286
|
-
// Fine inputs (e.g. mouse)
|
|
2287
|
-
fine: (_hitAreaMargins$fine = hitAreaMargins === null || hitAreaMargins === void 0 ? void 0 : hitAreaMargins.fine) !== null && _hitAreaMargins$fine !== void 0 ? _hitAreaMargins$fine : 5
|
|
2282
|
+
coarse: coarseHitAreaMargins,
|
|
2283
|
+
fine: fineHitAreaMargins
|
|
2288
2284
|
}, setResizeHandlerState);
|
|
2289
|
-
}, [direction, disabled,
|
|
2285
|
+
}, [coarseHitAreaMargins, direction, disabled, fineHitAreaMargins, registerResizeHandleWithParentGroup, resizeHandleId, resizeHandler, startDragging, stopDragging]);
|
|
2290
2286
|
useWindowSplitterResizeHandlerBehavior({
|
|
2291
2287
|
disabled,
|
|
2292
2288
|
handleId: resizeHandleId,
|
|
@@ -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.
|
|
@@ -2217,6 +2210,7 @@ function PanelResizeHandle({
|
|
|
2217
2210
|
tagName: Type = "div",
|
|
2218
2211
|
...rest
|
|
2219
2212
|
}) {
|
|
2213
|
+
var _hitAreaMargins$coars, _hitAreaMargins$fine;
|
|
2220
2214
|
const elementRef = useRef(null);
|
|
2221
2215
|
|
|
2222
2216
|
// Use a ref to guard against users passing inline props
|
|
@@ -2256,8 +2250,12 @@ function PanelResizeHandle({
|
|
|
2256
2250
|
setResizeHandler(() => resizeHandler);
|
|
2257
2251
|
}
|
|
2258
2252
|
}, [disabled, resizeHandleId, registerResizeHandleWithParentGroup]);
|
|
2253
|
+
|
|
2254
|
+
// Extract hit area margins before passing them to the effect's dependency array
|
|
2255
|
+
// so that inline object values won't trigger re-renders
|
|
2256
|
+
const coarseHitAreaMargins = (_hitAreaMargins$coars = hitAreaMargins === null || hitAreaMargins === void 0 ? void 0 : hitAreaMargins.coarse) !== null && _hitAreaMargins$coars !== void 0 ? _hitAreaMargins$coars : 15;
|
|
2257
|
+
const fineHitAreaMargins = (_hitAreaMargins$fine = hitAreaMargins === null || hitAreaMargins === void 0 ? void 0 : hitAreaMargins.fine) !== null && _hitAreaMargins$fine !== void 0 ? _hitAreaMargins$fine : 5;
|
|
2259
2258
|
useEffect(() => {
|
|
2260
|
-
var _hitAreaMargins$coars, _hitAreaMargins$fine;
|
|
2261
2259
|
if (disabled || resizeHandler == null) {
|
|
2262
2260
|
return;
|
|
2263
2261
|
}
|
|
@@ -2307,12 +2305,10 @@ function PanelResizeHandle({
|
|
|
2307
2305
|
}
|
|
2308
2306
|
};
|
|
2309
2307
|
return registerResizeHandle(resizeHandleId, element, direction, {
|
|
2310
|
-
|
|
2311
|
-
|
|
2312
|
-
// Fine inputs (e.g. mouse)
|
|
2313
|
-
fine: (_hitAreaMargins$fine = hitAreaMargins === null || hitAreaMargins === void 0 ? void 0 : hitAreaMargins.fine) !== null && _hitAreaMargins$fine !== void 0 ? _hitAreaMargins$fine : 5
|
|
2308
|
+
coarse: coarseHitAreaMargins,
|
|
2309
|
+
fine: fineHitAreaMargins
|
|
2314
2310
|
}, setResizeHandlerState);
|
|
2315
|
-
}, [direction, disabled,
|
|
2311
|
+
}, [coarseHitAreaMargins, direction, disabled, fineHitAreaMargins, registerResizeHandleWithParentGroup, resizeHandleId, resizeHandler, startDragging, stopDragging]);
|
|
2316
2312
|
useWindowSplitterResizeHandlerBehavior({
|
|
2317
2313
|
disabled,
|
|
2318
2314
|
handleId: resizeHandleId,
|
|
@@ -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.
|
|
@@ -2328,6 +2321,7 @@ function PanelResizeHandle({
|
|
|
2328
2321
|
tagName: Type = "div",
|
|
2329
2322
|
...rest
|
|
2330
2323
|
}) {
|
|
2324
|
+
var _hitAreaMargins$coars, _hitAreaMargins$fine;
|
|
2331
2325
|
const elementRef = useRef(null);
|
|
2332
2326
|
|
|
2333
2327
|
// Use a ref to guard against users passing inline props
|
|
@@ -2367,8 +2361,12 @@ function PanelResizeHandle({
|
|
|
2367
2361
|
setResizeHandler(() => resizeHandler);
|
|
2368
2362
|
}
|
|
2369
2363
|
}, [disabled, resizeHandleId, registerResizeHandleWithParentGroup]);
|
|
2364
|
+
|
|
2365
|
+
// Extract hit area margins before passing them to the effect's dependency array
|
|
2366
|
+
// so that inline object values won't trigger re-renders
|
|
2367
|
+
const coarseHitAreaMargins = (_hitAreaMargins$coars = hitAreaMargins === null || hitAreaMargins === void 0 ? void 0 : hitAreaMargins.coarse) !== null && _hitAreaMargins$coars !== void 0 ? _hitAreaMargins$coars : 15;
|
|
2368
|
+
const fineHitAreaMargins = (_hitAreaMargins$fine = hitAreaMargins === null || hitAreaMargins === void 0 ? void 0 : hitAreaMargins.fine) !== null && _hitAreaMargins$fine !== void 0 ? _hitAreaMargins$fine : 5;
|
|
2370
2369
|
useEffect(() => {
|
|
2371
|
-
var _hitAreaMargins$coars, _hitAreaMargins$fine;
|
|
2372
2370
|
if (disabled || resizeHandler == null) {
|
|
2373
2371
|
return;
|
|
2374
2372
|
}
|
|
@@ -2418,12 +2416,10 @@ function PanelResizeHandle({
|
|
|
2418
2416
|
}
|
|
2419
2417
|
};
|
|
2420
2418
|
return registerResizeHandle(resizeHandleId, element, direction, {
|
|
2421
|
-
|
|
2422
|
-
|
|
2423
|
-
// Fine inputs (e.g. mouse)
|
|
2424
|
-
fine: (_hitAreaMargins$fine = hitAreaMargins === null || hitAreaMargins === void 0 ? void 0 : hitAreaMargins.fine) !== null && _hitAreaMargins$fine !== void 0 ? _hitAreaMargins$fine : 5
|
|
2419
|
+
coarse: coarseHitAreaMargins,
|
|
2420
|
+
fine: fineHitAreaMargins
|
|
2425
2421
|
}, setResizeHandlerState);
|
|
2426
|
-
}, [direction, disabled,
|
|
2422
|
+
}, [coarseHitAreaMargins, direction, disabled, fineHitAreaMargins, registerResizeHandleWithParentGroup, resizeHandleId, resizeHandler, startDragging, stopDragging]);
|
|
2427
2423
|
useWindowSplitterResizeHandlerBehavior({
|
|
2428
2424
|
disabled,
|
|
2429
2425
|
handleId: resizeHandleId,
|