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.
@@ -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 (isMouseEvent(event)) {
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("mousedown", handlePointerDown);
614
- body.removeEventListener("mouseleave", handlePointerMove);
615
- body.removeEventListener("mousemove", handlePointerMove);
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("mouseup", handlePointerUp);
620
- window.removeEventListener("touchcancel", handlePointerUp);
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("mouseleave", handlePointerMove);
632
- body.addEventListener("mousemove", handlePointerMove);
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("mouseup", handlePointerUp);
640
- window.addEventListener("touchcancel", handlePointerUp);
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("mousedown", handlePointerDown);
649
- body.addEventListener("mousemove", handlePointerMove);
650
- body.addEventListener("touchmove", handlePointerMove, {
651
- passive: false
643
+ body.addEventListener("pointerdown", handlePointerDown, {
644
+ capture: true
652
645
  });
653
- body.addEventListener("touchstart", handlePointerDown);
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.toFixed(3).localeCompare(Math.abs(delta).toFixed(3), undefined, {
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.toFixed(precision) : "1";
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.toFixed(precision);
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 (isMouseEvent(event) || isTouchEvent(event)) {
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.
@@ -2304,6 +2297,7 @@ function PanelResizeHandle({
2304
2297
  tagName: Type = "div",
2305
2298
  ...rest
2306
2299
  }) {
2300
+ var _hitAreaMargins$coars, _hitAreaMargins$fine;
2307
2301
  const elementRef = useRef(null);
2308
2302
 
2309
2303
  // Use a ref to guard against users passing inline props
@@ -2343,8 +2337,12 @@ function PanelResizeHandle({
2343
2337
  setResizeHandler(() => resizeHandler);
2344
2338
  }
2345
2339
  }, [disabled, resizeHandleId, registerResizeHandleWithParentGroup]);
2340
+
2341
+ // Extract hit area margins before passing them to the effect's dependency array
2342
+ // so that inline object values won't trigger re-renders
2343
+ const coarseHitAreaMargins = (_hitAreaMargins$coars = hitAreaMargins === null || hitAreaMargins === void 0 ? void 0 : hitAreaMargins.coarse) !== null && _hitAreaMargins$coars !== void 0 ? _hitAreaMargins$coars : 15;
2344
+ const fineHitAreaMargins = (_hitAreaMargins$fine = hitAreaMargins === null || hitAreaMargins === void 0 ? void 0 : hitAreaMargins.fine) !== null && _hitAreaMargins$fine !== void 0 ? _hitAreaMargins$fine : 5;
2346
2345
  useEffect(() => {
2347
- var _hitAreaMargins$coars, _hitAreaMargins$fine;
2348
2346
  if (disabled || resizeHandler == null) {
2349
2347
  return;
2350
2348
  }
@@ -2394,12 +2392,10 @@ function PanelResizeHandle({
2394
2392
  }
2395
2393
  };
2396
2394
  return registerResizeHandle(resizeHandleId, element, direction, {
2397
- // Coarse inputs (e.g. finger/touch)
2398
- coarse: (_hitAreaMargins$coars = hitAreaMargins === null || hitAreaMargins === void 0 ? void 0 : hitAreaMargins.coarse) !== null && _hitAreaMargins$coars !== void 0 ? _hitAreaMargins$coars : 15,
2399
- // Fine inputs (e.g. mouse)
2400
- fine: (_hitAreaMargins$fine = hitAreaMargins === null || hitAreaMargins === void 0 ? void 0 : hitAreaMargins.fine) !== null && _hitAreaMargins$fine !== void 0 ? _hitAreaMargins$fine : 5
2395
+ coarse: coarseHitAreaMargins,
2396
+ fine: fineHitAreaMargins
2401
2397
  }, setResizeHandlerState);
2402
- }, [direction, disabled, hitAreaMargins, registerResizeHandleWithParentGroup, resizeHandleId, resizeHandler, startDragging, stopDragging]);
2398
+ }, [coarseHitAreaMargins, direction, disabled, fineHitAreaMargins, registerResizeHandleWithParentGroup, resizeHandleId, resizeHandler, startDragging, stopDragging]);
2403
2399
  useWindowSplitterResizeHandlerBehavior({
2404
2400
  disabled,
2405
2401
  handleId: resizeHandleId,
@@ -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 (isMouseEvent(event)) {
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("mousedown", handlePointerDown);
600
- body.removeEventListener("mouseleave", handlePointerMove);
601
- body.removeEventListener("mousemove", handlePointerMove);
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("mouseup", handlePointerUp);
606
- window.removeEventListener("touchcancel", handlePointerUp);
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("mouseleave", handlePointerMove);
618
- body.addEventListener("mousemove", handlePointerMove);
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("mouseup", handlePointerUp);
626
- window.addEventListener("touchcancel", handlePointerUp);
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("mousedown", handlePointerDown);
635
- body.addEventListener("mousemove", handlePointerMove);
636
- body.addEventListener("touchmove", handlePointerMove, {
637
- passive: false
629
+ body.addEventListener("pointerdown", handlePointerDown, {
630
+ capture: true
638
631
  });
639
- body.addEventListener("touchstart", handlePointerDown);
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.toFixed(3).localeCompare(Math.abs(delta).toFixed(3), undefined, {
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.toFixed(precision) : "1";
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.toFixed(precision);
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 (isMouseEvent(event) || isTouchEvent(event)) {
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.
@@ -2096,6 +2089,7 @@ function PanelResizeHandle({
2096
2089
  tagName: Type = "div",
2097
2090
  ...rest
2098
2091
  }) {
2092
+ var _hitAreaMargins$coars, _hitAreaMargins$fine;
2099
2093
  const elementRef = useRef(null);
2100
2094
 
2101
2095
  // Use a ref to guard against users passing inline props
@@ -2132,8 +2126,12 @@ function PanelResizeHandle({
2132
2126
  setResizeHandler(() => resizeHandler);
2133
2127
  }
2134
2128
  }, [disabled, resizeHandleId, registerResizeHandleWithParentGroup]);
2129
+
2130
+ // Extract hit area margins before passing them to the effect's dependency array
2131
+ // so that inline object values won't trigger re-renders
2132
+ const coarseHitAreaMargins = (_hitAreaMargins$coars = hitAreaMargins === null || hitAreaMargins === void 0 ? void 0 : hitAreaMargins.coarse) !== null && _hitAreaMargins$coars !== void 0 ? _hitAreaMargins$coars : 15;
2133
+ const fineHitAreaMargins = (_hitAreaMargins$fine = hitAreaMargins === null || hitAreaMargins === void 0 ? void 0 : hitAreaMargins.fine) !== null && _hitAreaMargins$fine !== void 0 ? _hitAreaMargins$fine : 5;
2135
2134
  useEffect(() => {
2136
- var _hitAreaMargins$coars, _hitAreaMargins$fine;
2137
2135
  if (disabled || resizeHandler == null) {
2138
2136
  return;
2139
2137
  }
@@ -2183,12 +2181,10 @@ function PanelResizeHandle({
2183
2181
  }
2184
2182
  };
2185
2183
  return registerResizeHandle(resizeHandleId, element, direction, {
2186
- // Coarse inputs (e.g. finger/touch)
2187
- coarse: (_hitAreaMargins$coars = hitAreaMargins === null || hitAreaMargins === void 0 ? void 0 : hitAreaMargins.coarse) !== null && _hitAreaMargins$coars !== void 0 ? _hitAreaMargins$coars : 15,
2188
- // Fine inputs (e.g. mouse)
2189
- fine: (_hitAreaMargins$fine = hitAreaMargins === null || hitAreaMargins === void 0 ? void 0 : hitAreaMargins.fine) !== null && _hitAreaMargins$fine !== void 0 ? _hitAreaMargins$fine : 5
2184
+ coarse: coarseHitAreaMargins,
2185
+ fine: fineHitAreaMargins
2190
2186
  }, setResizeHandlerState);
2191
- }, [direction, disabled, hitAreaMargins, registerResizeHandleWithParentGroup, resizeHandleId, resizeHandler, startDragging, stopDragging]);
2187
+ }, [coarseHitAreaMargins, direction, disabled, fineHitAreaMargins, registerResizeHandleWithParentGroup, resizeHandleId, resizeHandler, startDragging, stopDragging]);
2192
2188
  useWindowSplitterResizeHandlerBehavior({
2193
2189
  disabled,
2194
2190
  handleId: resizeHandleId,
@@ -22,6 +22,8 @@ const {
22
22
  // `toString()` prevents bundlers from trying to `import { useId } from 'react'`
23
23
  const useId = React["useId".toString()];
24
24
 
25
+ // The "contextmenu" event is not supported as a PointerEvent in all browsers yet, so MouseEvent still need to be handled
26
+
25
27
  const PanelGroupContext = createContext(null);
26
28
  PanelGroupContext.displayName = "PanelGroupContext";
27
29
 
@@ -212,27 +214,26 @@ function setGlobalCursorStyle(state, constraintFlags) {
212
214
  function isKeyDown(event) {
213
215
  return event.type === "keydown";
214
216
  }
217
+ function isPointerEvent(event) {
218
+ return event.type.startsWith("pointer");
219
+ }
215
220
  function isMouseEvent(event) {
216
221
  return event.type.startsWith("mouse");
217
222
  }
218
- function isTouchEvent(event) {
219
- return event.type.startsWith("touch");
220
- }
221
223
 
222
224
  function getResizeEventCoordinates(event) {
223
- if (isMouseEvent(event)) {
225
+ if (isPointerEvent(event)) {
226
+ if (event.isPrimary) {
227
+ return {
228
+ x: event.clientX,
229
+ y: event.clientY
230
+ };
231
+ }
232
+ } else if (isMouseEvent(event)) {
224
233
  return {
225
234
  x: event.clientX,
226
235
  y: event.clientY
227
236
  };
228
- } else if (isTouchEvent(event)) {
229
- const touch = event.touches[0];
230
- if (touch && touch.clientX && touch.clientY) {
231
- return {
232
- x: touch.clientX,
233
- y: touch.clientY
234
- };
235
- }
236
237
  }
237
238
  return {
238
239
  x: Infinity,
@@ -424,6 +425,7 @@ function handlePointerDown(event) {
424
425
  if (intersectingHandles.length > 0) {
425
426
  updateResizeHandlerStates("down", event);
426
427
  event.preventDefault();
428
+ event.stopPropagation();
427
429
  }
428
430
  }
429
431
  function handlePointerMove(event) {
@@ -572,15 +574,12 @@ function updateListeners() {
572
574
  body
573
575
  } = ownerDocument;
574
576
  body.removeEventListener("contextmenu", handlePointerUp);
575
- body.removeEventListener("mousedown", handlePointerDown);
576
- body.removeEventListener("mouseleave", handlePointerMove);
577
- body.removeEventListener("mousemove", handlePointerMove);
578
- body.removeEventListener("touchmove", handlePointerMove);
579
- body.removeEventListener("touchstart", handlePointerDown);
577
+ body.removeEventListener("pointerdown", handlePointerDown);
578
+ body.removeEventListener("pointerleave", handlePointerMove);
579
+ body.removeEventListener("pointermove", handlePointerMove);
580
580
  });
581
- window.removeEventListener("mouseup", handlePointerUp);
582
- window.removeEventListener("touchcancel", handlePointerUp);
583
- window.removeEventListener("touchend", handlePointerUp);
581
+ window.removeEventListener("pointerup", handlePointerUp);
582
+ window.removeEventListener("pointercancel", handlePointerUp);
584
583
  if (registeredResizeHandlers.size > 0) {
585
584
  if (isPointerDown) {
586
585
  if (intersectingHandles.length > 0) {
@@ -590,29 +589,23 @@ function updateListeners() {
590
589
  } = ownerDocument;
591
590
  if (count > 0) {
592
591
  body.addEventListener("contextmenu", handlePointerUp);
593
- body.addEventListener("mouseleave", handlePointerMove);
594
- body.addEventListener("mousemove", handlePointerMove);
595
- body.addEventListener("touchmove", handlePointerMove, {
596
- passive: false
597
- });
592
+ body.addEventListener("pointerleave", handlePointerMove);
593
+ body.addEventListener("pointermove", handlePointerMove);
598
594
  }
599
595
  });
600
596
  }
601
- window.addEventListener("mouseup", handlePointerUp);
602
- window.addEventListener("touchcancel", handlePointerUp);
603
- window.addEventListener("touchend", handlePointerUp);
597
+ window.addEventListener("pointerup", handlePointerUp);
598
+ window.addEventListener("pointercancel", handlePointerUp);
604
599
  } else {
605
600
  ownerDocumentCounts.forEach((count, ownerDocument) => {
606
601
  const {
607
602
  body
608
603
  } = ownerDocument;
609
604
  if (count > 0) {
610
- body.addEventListener("mousedown", handlePointerDown);
611
- body.addEventListener("mousemove", handlePointerMove);
612
- body.addEventListener("touchmove", handlePointerMove, {
613
- passive: false
605
+ body.addEventListener("pointerdown", handlePointerDown, {
606
+ capture: true
614
607
  });
615
- body.addEventListener("touchstart", handlePointerDown);
608
+ body.addEventListener("pointermove", handlePointerMove);
616
609
  }
617
610
  });
618
611
  }
@@ -851,7 +844,7 @@ function adjustLayoutByDelta({
851
844
  if (!fuzzyNumbersEqual(prevSize, safeSize)) {
852
845
  deltaApplied += prevSize - safeSize;
853
846
  nextLayout[index] = safeSize;
854
- if (deltaApplied.toFixed(3).localeCompare(Math.abs(delta).toFixed(3), undefined, {
847
+ if (deltaApplied.toPrecision(3).localeCompare(Math.abs(delta).toPrecision(3), undefined, {
855
848
  numeric: true
856
849
  }) >= 0) {
857
850
  break;
@@ -1217,12 +1210,12 @@ function computePanelFlexBoxStyle({
1217
1210
  if (size == null) {
1218
1211
  // Initial render (before panels have registered themselves)
1219
1212
  // In order to support server rendering, fall back to default size if provided
1220
- flexGrow = defaultSize != undefined ? defaultSize.toFixed(precision) : "1";
1213
+ flexGrow = defaultSize != undefined ? defaultSize.toPrecision(precision) : "1";
1221
1214
  } else if (panelData.length === 1) {
1222
1215
  // Special case: Single panel group should always fill full width/height
1223
1216
  flexGrow = "1";
1224
1217
  } else {
1225
- flexGrow = size.toFixed(precision);
1218
+ flexGrow = size.toPrecision(precision);
1226
1219
  }
1227
1220
  return {
1228
1221
  flexBasis: 0,
@@ -1806,7 +1799,7 @@ function PanelGroupWithForwardedRef({
1806
1799
 
1807
1800
  // Only update the cursor for layout changes triggered by touch/mouse events (not keyboard)
1808
1801
  // Update the cursor even if the layout hasn't changed (we may need to show an invalid cursor state)
1809
- if (isMouseEvent(event) || isTouchEvent(event)) {
1802
+ if (isPointerEvent(event) || isMouseEvent(event)) {
1810
1803
  // Watch for multiple subsequent deltas; this might occur for tiny cursor movements.
1811
1804
  // In this case, Panel sizes might not change–
1812
1805
  // but updating cursor in this scenario would cause a flicker.
@@ -2072,6 +2065,7 @@ function PanelResizeHandle({
2072
2065
  tagName: Type = "div",
2073
2066
  ...rest
2074
2067
  }) {
2068
+ var _hitAreaMargins$coars, _hitAreaMargins$fine;
2075
2069
  const elementRef = useRef(null);
2076
2070
 
2077
2071
  // Use a ref to guard against users passing inline props
@@ -2108,8 +2102,12 @@ function PanelResizeHandle({
2108
2102
  setResizeHandler(() => resizeHandler);
2109
2103
  }
2110
2104
  }, [disabled, resizeHandleId, registerResizeHandleWithParentGroup]);
2105
+
2106
+ // Extract hit area margins before passing them to the effect's dependency array
2107
+ // so that inline object values won't trigger re-renders
2108
+ const coarseHitAreaMargins = (_hitAreaMargins$coars = hitAreaMargins === null || hitAreaMargins === void 0 ? void 0 : hitAreaMargins.coarse) !== null && _hitAreaMargins$coars !== void 0 ? _hitAreaMargins$coars : 15;
2109
+ const fineHitAreaMargins = (_hitAreaMargins$fine = hitAreaMargins === null || hitAreaMargins === void 0 ? void 0 : hitAreaMargins.fine) !== null && _hitAreaMargins$fine !== void 0 ? _hitAreaMargins$fine : 5;
2111
2110
  useEffect(() => {
2112
- var _hitAreaMargins$coars, _hitAreaMargins$fine;
2113
2111
  if (disabled || resizeHandler == null) {
2114
2112
  return;
2115
2113
  }
@@ -2159,12 +2157,10 @@ function PanelResizeHandle({
2159
2157
  }
2160
2158
  };
2161
2159
  return registerResizeHandle(resizeHandleId, element, direction, {
2162
- // Coarse inputs (e.g. finger/touch)
2163
- coarse: (_hitAreaMargins$coars = hitAreaMargins === null || hitAreaMargins === void 0 ? void 0 : hitAreaMargins.coarse) !== null && _hitAreaMargins$coars !== void 0 ? _hitAreaMargins$coars : 15,
2164
- // Fine inputs (e.g. mouse)
2165
- fine: (_hitAreaMargins$fine = hitAreaMargins === null || hitAreaMargins === void 0 ? void 0 : hitAreaMargins.fine) !== null && _hitAreaMargins$fine !== void 0 ? _hitAreaMargins$fine : 5
2160
+ coarse: coarseHitAreaMargins,
2161
+ fine: fineHitAreaMargins
2166
2162
  }, setResizeHandlerState);
2167
- }, [direction, disabled, hitAreaMargins, registerResizeHandleWithParentGroup, resizeHandleId, resizeHandler, startDragging, stopDragging]);
2163
+ }, [coarseHitAreaMargins, direction, disabled, fineHitAreaMargins, registerResizeHandleWithParentGroup, resizeHandleId, resizeHandler, startDragging, stopDragging]);
2168
2164
  useWindowSplitterResizeHandlerBehavior({
2169
2165
  disabled,
2170
2166
  handleId: resizeHandleId,