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.
@@ -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 (isMouseEvent(event)) {
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("mousedown", handlePointerDown);
601
- body.removeEventListener("mouseleave", handlePointerMove);
602
- body.removeEventListener("mousemove", handlePointerMove);
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("mouseup", handlePointerUp);
607
- window.removeEventListener("touchcancel", handlePointerUp);
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("mouseleave", handlePointerMove);
619
- body.addEventListener("mousemove", handlePointerMove);
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("mouseup", handlePointerUp);
627
- window.addEventListener("touchcancel", handlePointerUp);
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("mousedown", handlePointerDown);
636
- body.addEventListener("mousemove", handlePointerMove);
637
- body.addEventListener("touchmove", handlePointerMove, {
638
- passive: false
630
+ body.addEventListener("pointerdown", handlePointerDown, {
631
+ capture: true
639
632
  });
640
- body.addEventListener("touchstart", handlePointerDown);
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.toFixed(3).localeCompare(Math.abs(delta).toFixed(3), undefined, {
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.toFixed(precision) : "1";
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.toFixed(precision);
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 (isMouseEvent(event) || isTouchEvent(event)) {
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
- // Coarse inputs (e.g. finger/touch)
2285
- coarse: (_hitAreaMargins$coars = hitAreaMargins === null || hitAreaMargins === void 0 ? void 0 : hitAreaMargins.coarse) !== null && _hitAreaMargins$coars !== void 0 ? _hitAreaMargins$coars : 15,
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, hitAreaMargins, registerResizeHandleWithParentGroup, resizeHandleId, resizeHandler, startDragging, stopDragging]);
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 (isMouseEvent(event)) {
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("mousedown", handlePointerDown);
627
- body.removeEventListener("mouseleave", handlePointerMove);
628
- body.removeEventListener("mousemove", handlePointerMove);
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("mouseup", handlePointerUp);
633
- window.removeEventListener("touchcancel", handlePointerUp);
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("mouseleave", handlePointerMove);
645
- body.addEventListener("mousemove", handlePointerMove);
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("mouseup", handlePointerUp);
653
- window.addEventListener("touchcancel", handlePointerUp);
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("mousedown", handlePointerDown);
662
- body.addEventListener("mousemove", handlePointerMove);
663
- body.addEventListener("touchmove", handlePointerMove, {
664
- passive: false
656
+ body.addEventListener("pointerdown", handlePointerDown, {
657
+ capture: true
665
658
  });
666
- body.addEventListener("touchstart", handlePointerDown);
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.toFixed(3).localeCompare(Math.abs(delta).toFixed(3), undefined, {
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.toFixed(precision) : "1";
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.toFixed(precision);
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 (isMouseEvent(event) || isTouchEvent(event)) {
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
- // Coarse inputs (e.g. finger/touch)
2311
- coarse: (_hitAreaMargins$coars = hitAreaMargins === null || hitAreaMargins === void 0 ? void 0 : hitAreaMargins.coarse) !== null && _hitAreaMargins$coars !== void 0 ? _hitAreaMargins$coars : 15,
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, hitAreaMargins, registerResizeHandleWithParentGroup, resizeHandleId, resizeHandler, startDragging, stopDragging]);
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 (isMouseEvent(event)) {
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("mousedown", handlePointerDown);
638
- body.removeEventListener("mouseleave", handlePointerMove);
639
- body.removeEventListener("mousemove", handlePointerMove);
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("mouseup", handlePointerUp);
644
- window.removeEventListener("touchcancel", handlePointerUp);
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("mouseleave", handlePointerMove);
656
- body.addEventListener("mousemove", handlePointerMove);
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("mouseup", handlePointerUp);
664
- window.addEventListener("touchcancel", handlePointerUp);
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("mousedown", handlePointerDown);
673
- body.addEventListener("mousemove", handlePointerMove);
674
- body.addEventListener("touchmove", handlePointerMove, {
675
- passive: false
667
+ body.addEventListener("pointerdown", handlePointerDown, {
668
+ capture: true
676
669
  });
677
- body.addEventListener("touchstart", handlePointerDown);
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.toFixed(3).localeCompare(Math.abs(delta).toFixed(3), undefined, {
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.toFixed(precision) : "1";
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.toFixed(precision);
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 (isMouseEvent(event) || isTouchEvent(event)) {
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
- // Coarse inputs (e.g. finger/touch)
2422
- coarse: (_hitAreaMargins$coars = hitAreaMargins === null || hitAreaMargins === void 0 ? void 0 : hitAreaMargins.coarse) !== null && _hitAreaMargins$coars !== void 0 ? _hitAreaMargins$coars : 15,
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, hitAreaMargins, registerResizeHandleWithParentGroup, resizeHandleId, resizeHandler, startDragging, stopDragging]);
2422
+ }, [coarseHitAreaMargins, direction, disabled, fineHitAreaMargins, registerResizeHandleWithParentGroup, resizeHandleId, resizeHandler, startDragging, stopDragging]);
2427
2423
  useWindowSplitterResizeHandlerBehavior({
2428
2424
  disabled,
2429
2425
  handleId: resizeHandleId,