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.
@@ -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.
@@ -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
 
@@ -239,27 +241,26 @@ function setGlobalCursorStyle(state, constraintFlags) {
239
241
  function isKeyDown(event) {
240
242
  return event.type === "keydown";
241
243
  }
244
+ function isPointerEvent(event) {
245
+ return event.type.startsWith("pointer");
246
+ }
242
247
  function isMouseEvent(event) {
243
248
  return event.type.startsWith("mouse");
244
249
  }
245
- function isTouchEvent(event) {
246
- return event.type.startsWith("touch");
247
- }
248
250
 
249
251
  function getResizeEventCoordinates(event) {
250
- if (isMouseEvent(event)) {
252
+ if (isPointerEvent(event)) {
253
+ if (event.isPrimary) {
254
+ return {
255
+ x: event.clientX,
256
+ y: event.clientY
257
+ };
258
+ }
259
+ } else if (isMouseEvent(event)) {
251
260
  return {
252
261
  x: event.clientX,
253
262
  y: event.clientY
254
263
  };
255
- } else if (isTouchEvent(event)) {
256
- const touch = event.touches[0];
257
- if (touch && touch.clientX && touch.clientY) {
258
- return {
259
- x: touch.clientX,
260
- y: touch.clientY
261
- };
262
- }
263
264
  }
264
265
  return {
265
266
  x: Infinity,
@@ -451,6 +452,7 @@ function handlePointerDown(event) {
451
452
  if (intersectingHandles.length > 0) {
452
453
  updateResizeHandlerStates("down", event);
453
454
  event.preventDefault();
455
+ event.stopPropagation();
454
456
  }
455
457
  }
456
458
  function handlePointerMove(event) {
@@ -599,15 +601,12 @@ function updateListeners() {
599
601
  body
600
602
  } = ownerDocument;
601
603
  body.removeEventListener("contextmenu", handlePointerUp);
602
- body.removeEventListener("mousedown", handlePointerDown);
603
- body.removeEventListener("mouseleave", handlePointerMove);
604
- body.removeEventListener("mousemove", handlePointerMove);
605
- body.removeEventListener("touchmove", handlePointerMove);
606
- body.removeEventListener("touchstart", handlePointerDown);
604
+ body.removeEventListener("pointerdown", handlePointerDown);
605
+ body.removeEventListener("pointerleave", handlePointerMove);
606
+ body.removeEventListener("pointermove", handlePointerMove);
607
607
  });
608
- window.removeEventListener("mouseup", handlePointerUp);
609
- window.removeEventListener("touchcancel", handlePointerUp);
610
- window.removeEventListener("touchend", handlePointerUp);
608
+ window.removeEventListener("pointerup", handlePointerUp);
609
+ window.removeEventListener("pointercancel", handlePointerUp);
611
610
  if (registeredResizeHandlers.size > 0) {
612
611
  if (isPointerDown) {
613
612
  if (intersectingHandles.length > 0) {
@@ -617,29 +616,23 @@ function updateListeners() {
617
616
  } = ownerDocument;
618
617
  if (count > 0) {
619
618
  body.addEventListener("contextmenu", handlePointerUp);
620
- body.addEventListener("mouseleave", handlePointerMove);
621
- body.addEventListener("mousemove", handlePointerMove);
622
- body.addEventListener("touchmove", handlePointerMove, {
623
- passive: false
624
- });
619
+ body.addEventListener("pointerleave", handlePointerMove);
620
+ body.addEventListener("pointermove", handlePointerMove);
625
621
  }
626
622
  });
627
623
  }
628
- window.addEventListener("mouseup", handlePointerUp);
629
- window.addEventListener("touchcancel", handlePointerUp);
630
- window.addEventListener("touchend", handlePointerUp);
624
+ window.addEventListener("pointerup", handlePointerUp);
625
+ window.addEventListener("pointercancel", handlePointerUp);
631
626
  } else {
632
627
  ownerDocumentCounts.forEach((count, ownerDocument) => {
633
628
  const {
634
629
  body
635
630
  } = ownerDocument;
636
631
  if (count > 0) {
637
- body.addEventListener("mousedown", handlePointerDown);
638
- body.addEventListener("mousemove", handlePointerMove);
639
- body.addEventListener("touchmove", handlePointerMove, {
640
- passive: false
632
+ body.addEventListener("pointerdown", handlePointerDown, {
633
+ capture: true
641
634
  });
642
- body.addEventListener("touchstart", handlePointerDown);
635
+ body.addEventListener("pointermove", handlePointerMove);
643
636
  }
644
637
  });
645
638
  }
@@ -878,7 +871,7 @@ function adjustLayoutByDelta({
878
871
  if (!fuzzyNumbersEqual(prevSize, safeSize)) {
879
872
  deltaApplied += prevSize - safeSize;
880
873
  nextLayout[index] = safeSize;
881
- if (deltaApplied.toFixed(3).localeCompare(Math.abs(delta).toFixed(3), undefined, {
874
+ if (deltaApplied.toPrecision(3).localeCompare(Math.abs(delta).toPrecision(3), undefined, {
882
875
  numeric: true
883
876
  }) >= 0) {
884
877
  break;
@@ -1358,12 +1351,12 @@ function computePanelFlexBoxStyle({
1358
1351
  if (size == null) {
1359
1352
  // Initial render (before panels have registered themselves)
1360
1353
  // In order to support server rendering, fall back to default size if provided
1361
- flexGrow = defaultSize != undefined ? defaultSize.toFixed(precision) : "1";
1354
+ flexGrow = defaultSize != undefined ? defaultSize.toPrecision(precision) : "1";
1362
1355
  } else if (panelData.length === 1) {
1363
1356
  // Special case: Single panel group should always fill full width/height
1364
1357
  flexGrow = "1";
1365
1358
  } else {
1366
- flexGrow = size.toFixed(precision);
1359
+ flexGrow = size.toPrecision(precision);
1367
1360
  }
1368
1361
  return {
1369
1362
  flexBasis: 0,
@@ -1927,7 +1920,7 @@ function PanelGroupWithForwardedRef({
1927
1920
 
1928
1921
  // Only update the cursor for layout changes triggered by touch/mouse events (not keyboard)
1929
1922
  // Update the cursor even if the layout hasn't changed (we may need to show an invalid cursor state)
1930
- if (isMouseEvent(event) || isTouchEvent(event)) {
1923
+ if (isPointerEvent(event) || isMouseEvent(event)) {
1931
1924
  // Watch for multiple subsequent deltas; this might occur for tiny cursor movements.
1932
1925
  // In this case, Panel sizes might not change–
1933
1926
  // 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
 
@@ -225,27 +227,26 @@ function setGlobalCursorStyle(state, constraintFlags) {
225
227
  function isKeyDown(event) {
226
228
  return event.type === "keydown";
227
229
  }
230
+ function isPointerEvent(event) {
231
+ return event.type.startsWith("pointer");
232
+ }
228
233
  function isMouseEvent(event) {
229
234
  return event.type.startsWith("mouse");
230
235
  }
231
- function isTouchEvent(event) {
232
- return event.type.startsWith("touch");
233
- }
234
236
 
235
237
  function getResizeEventCoordinates(event) {
236
- if (isMouseEvent(event)) {
238
+ if (isPointerEvent(event)) {
239
+ if (event.isPrimary) {
240
+ return {
241
+ x: event.clientX,
242
+ y: event.clientY
243
+ };
244
+ }
245
+ } else if (isMouseEvent(event)) {
237
246
  return {
238
247
  x: event.clientX,
239
248
  y: event.clientY
240
249
  };
241
- } else if (isTouchEvent(event)) {
242
- const touch = event.touches[0];
243
- if (touch && touch.clientX && touch.clientY) {
244
- return {
245
- x: touch.clientX,
246
- y: touch.clientY
247
- };
248
- }
249
250
  }
250
251
  return {
251
252
  x: Infinity,
@@ -437,6 +438,7 @@ function handlePointerDown(event) {
437
438
  if (intersectingHandles.length > 0) {
438
439
  updateResizeHandlerStates("down", event);
439
440
  event.preventDefault();
441
+ event.stopPropagation();
440
442
  }
441
443
  }
442
444
  function handlePointerMove(event) {
@@ -585,15 +587,12 @@ function updateListeners() {
585
587
  body
586
588
  } = ownerDocument;
587
589
  body.removeEventListener("contextmenu", handlePointerUp);
588
- body.removeEventListener("mousedown", handlePointerDown);
589
- body.removeEventListener("mouseleave", handlePointerMove);
590
- body.removeEventListener("mousemove", handlePointerMove);
591
- body.removeEventListener("touchmove", handlePointerMove);
592
- body.removeEventListener("touchstart", handlePointerDown);
590
+ body.removeEventListener("pointerdown", handlePointerDown);
591
+ body.removeEventListener("pointerleave", handlePointerMove);
592
+ body.removeEventListener("pointermove", handlePointerMove);
593
593
  });
594
- window.removeEventListener("mouseup", handlePointerUp);
595
- window.removeEventListener("touchcancel", handlePointerUp);
596
- window.removeEventListener("touchend", handlePointerUp);
594
+ window.removeEventListener("pointerup", handlePointerUp);
595
+ window.removeEventListener("pointercancel", handlePointerUp);
597
596
  if (registeredResizeHandlers.size > 0) {
598
597
  if (isPointerDown) {
599
598
  if (intersectingHandles.length > 0) {
@@ -603,29 +602,23 @@ function updateListeners() {
603
602
  } = ownerDocument;
604
603
  if (count > 0) {
605
604
  body.addEventListener("contextmenu", handlePointerUp);
606
- body.addEventListener("mouseleave", handlePointerMove);
607
- body.addEventListener("mousemove", handlePointerMove);
608
- body.addEventListener("touchmove", handlePointerMove, {
609
- passive: false
610
- });
605
+ body.addEventListener("pointerleave", handlePointerMove);
606
+ body.addEventListener("pointermove", handlePointerMove);
611
607
  }
612
608
  });
613
609
  }
614
- window.addEventListener("mouseup", handlePointerUp);
615
- window.addEventListener("touchcancel", handlePointerUp);
616
- window.addEventListener("touchend", handlePointerUp);
610
+ window.addEventListener("pointerup", handlePointerUp);
611
+ window.addEventListener("pointercancel", handlePointerUp);
617
612
  } else {
618
613
  ownerDocumentCounts.forEach((count, ownerDocument) => {
619
614
  const {
620
615
  body
621
616
  } = ownerDocument;
622
617
  if (count > 0) {
623
- body.addEventListener("mousedown", handlePointerDown);
624
- body.addEventListener("mousemove", handlePointerMove);
625
- body.addEventListener("touchmove", handlePointerMove, {
626
- passive: false
618
+ body.addEventListener("pointerdown", handlePointerDown, {
619
+ capture: true
627
620
  });
628
- body.addEventListener("touchstart", handlePointerDown);
621
+ body.addEventListener("pointermove", handlePointerMove);
629
622
  }
630
623
  });
631
624
  }
@@ -864,7 +857,7 @@ function adjustLayoutByDelta({
864
857
  if (!fuzzyNumbersEqual(prevSize, safeSize)) {
865
858
  deltaApplied += prevSize - safeSize;
866
859
  nextLayout[index] = safeSize;
867
- if (deltaApplied.toFixed(3).localeCompare(Math.abs(delta).toFixed(3), undefined, {
860
+ if (deltaApplied.toPrecision(3).localeCompare(Math.abs(delta).toPrecision(3), undefined, {
868
861
  numeric: true
869
862
  }) >= 0) {
870
863
  break;
@@ -1230,12 +1223,12 @@ function computePanelFlexBoxStyle({
1230
1223
  if (size == null) {
1231
1224
  // Initial render (before panels have registered themselves)
1232
1225
  // In order to support server rendering, fall back to default size if provided
1233
- flexGrow = defaultSize != undefined ? defaultSize.toFixed(precision) : "1";
1226
+ flexGrow = defaultSize != undefined ? defaultSize.toPrecision(precision) : "1";
1234
1227
  } else if (panelData.length === 1) {
1235
1228
  // Special case: Single panel group should always fill full width/height
1236
1229
  flexGrow = "1";
1237
1230
  } else {
1238
- flexGrow = size.toFixed(precision);
1231
+ flexGrow = size.toPrecision(precision);
1239
1232
  }
1240
1233
  return {
1241
1234
  flexBasis: 0,
@@ -1729,7 +1722,7 @@ function PanelGroupWithForwardedRef({
1729
1722
 
1730
1723
  // Only update the cursor for layout changes triggered by touch/mouse events (not keyboard)
1731
1724
  // Update the cursor even if the layout hasn't changed (we may need to show an invalid cursor state)
1732
- if (isMouseEvent(event) || isTouchEvent(event)) {
1725
+ if (isPointerEvent(event) || isMouseEvent(event)) {
1733
1726
  // Watch for multiple subsequent deltas; this might occur for tiny cursor movements.
1734
1727
  // In this case, Panel sizes might not change–
1735
1728
  // but updating cursor in this scenario would cause a flicker.
@@ -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
 
@@ -201,27 +203,26 @@ function setGlobalCursorStyle(state, constraintFlags) {
201
203
  function isKeyDown(event) {
202
204
  return event.type === "keydown";
203
205
  }
206
+ function isPointerEvent(event) {
207
+ return event.type.startsWith("pointer");
208
+ }
204
209
  function isMouseEvent(event) {
205
210
  return event.type.startsWith("mouse");
206
211
  }
207
- function isTouchEvent(event) {
208
- return event.type.startsWith("touch");
209
- }
210
212
 
211
213
  function getResizeEventCoordinates(event) {
212
- if (isMouseEvent(event)) {
214
+ if (isPointerEvent(event)) {
215
+ if (event.isPrimary) {
216
+ return {
217
+ x: event.clientX,
218
+ y: event.clientY
219
+ };
220
+ }
221
+ } else if (isMouseEvent(event)) {
213
222
  return {
214
223
  x: event.clientX,
215
224
  y: event.clientY
216
225
  };
217
- } else if (isTouchEvent(event)) {
218
- const touch = event.touches[0];
219
- if (touch && touch.clientX && touch.clientY) {
220
- return {
221
- x: touch.clientX,
222
- y: touch.clientY
223
- };
224
- }
225
226
  }
226
227
  return {
227
228
  x: Infinity,
@@ -413,6 +414,7 @@ function handlePointerDown(event) {
413
414
  if (intersectingHandles.length > 0) {
414
415
  updateResizeHandlerStates("down", event);
415
416
  event.preventDefault();
417
+ event.stopPropagation();
416
418
  }
417
419
  }
418
420
  function handlePointerMove(event) {
@@ -561,15 +563,12 @@ function updateListeners() {
561
563
  body
562
564
  } = ownerDocument;
563
565
  body.removeEventListener("contextmenu", handlePointerUp);
564
- body.removeEventListener("mousedown", handlePointerDown);
565
- body.removeEventListener("mouseleave", handlePointerMove);
566
- body.removeEventListener("mousemove", handlePointerMove);
567
- body.removeEventListener("touchmove", handlePointerMove);
568
- body.removeEventListener("touchstart", handlePointerDown);
566
+ body.removeEventListener("pointerdown", handlePointerDown);
567
+ body.removeEventListener("pointerleave", handlePointerMove);
568
+ body.removeEventListener("pointermove", handlePointerMove);
569
569
  });
570
- window.removeEventListener("mouseup", handlePointerUp);
571
- window.removeEventListener("touchcancel", handlePointerUp);
572
- window.removeEventListener("touchend", handlePointerUp);
570
+ window.removeEventListener("pointerup", handlePointerUp);
571
+ window.removeEventListener("pointercancel", handlePointerUp);
573
572
  if (registeredResizeHandlers.size > 0) {
574
573
  if (isPointerDown) {
575
574
  if (intersectingHandles.length > 0) {
@@ -579,29 +578,23 @@ function updateListeners() {
579
578
  } = ownerDocument;
580
579
  if (count > 0) {
581
580
  body.addEventListener("contextmenu", handlePointerUp);
582
- body.addEventListener("mouseleave", handlePointerMove);
583
- body.addEventListener("mousemove", handlePointerMove);
584
- body.addEventListener("touchmove", handlePointerMove, {
585
- passive: false
586
- });
581
+ body.addEventListener("pointerleave", handlePointerMove);
582
+ body.addEventListener("pointermove", handlePointerMove);
587
583
  }
588
584
  });
589
585
  }
590
- window.addEventListener("mouseup", handlePointerUp);
591
- window.addEventListener("touchcancel", handlePointerUp);
592
- window.addEventListener("touchend", handlePointerUp);
586
+ window.addEventListener("pointerup", handlePointerUp);
587
+ window.addEventListener("pointercancel", handlePointerUp);
593
588
  } else {
594
589
  ownerDocumentCounts.forEach((count, ownerDocument) => {
595
590
  const {
596
591
  body
597
592
  } = ownerDocument;
598
593
  if (count > 0) {
599
- body.addEventListener("mousedown", handlePointerDown);
600
- body.addEventListener("mousemove", handlePointerMove);
601
- body.addEventListener("touchmove", handlePointerMove, {
602
- passive: false
594
+ body.addEventListener("pointerdown", handlePointerDown, {
595
+ capture: true
603
596
  });
604
- body.addEventListener("touchstart", handlePointerDown);
597
+ body.addEventListener("pointermove", handlePointerMove);
605
598
  }
606
599
  });
607
600
  }
@@ -840,7 +833,7 @@ function adjustLayoutByDelta({
840
833
  if (!fuzzyNumbersEqual(prevSize, safeSize)) {
841
834
  deltaApplied += prevSize - safeSize;
842
835
  nextLayout[index] = safeSize;
843
- if (deltaApplied.toFixed(3).localeCompare(Math.abs(delta).toFixed(3), undefined, {
836
+ if (deltaApplied.toPrecision(3).localeCompare(Math.abs(delta).toPrecision(3), undefined, {
844
837
  numeric: true
845
838
  }) >= 0) {
846
839
  break;
@@ -1206,12 +1199,12 @@ function computePanelFlexBoxStyle({
1206
1199
  if (size == null) {
1207
1200
  // Initial render (before panels have registered themselves)
1208
1201
  // In order to support server rendering, fall back to default size if provided
1209
- flexGrow = defaultSize != undefined ? defaultSize.toFixed(precision) : "1";
1202
+ flexGrow = defaultSize != undefined ? defaultSize.toPrecision(precision) : "1";
1210
1203
  } else if (panelData.length === 1) {
1211
1204
  // Special case: Single panel group should always fill full width/height
1212
1205
  flexGrow = "1";
1213
1206
  } else {
1214
- flexGrow = size.toFixed(precision);
1207
+ flexGrow = size.toPrecision(precision);
1215
1208
  }
1216
1209
  return {
1217
1210
  flexBasis: 0,
@@ -1705,7 +1698,7 @@ function PanelGroupWithForwardedRef({
1705
1698
 
1706
1699
  // Only update the cursor for layout changes triggered by touch/mouse events (not keyboard)
1707
1700
  // Update the cursor even if the layout hasn't changed (we may need to show an invalid cursor state)
1708
- if (isMouseEvent(event) || isTouchEvent(event)) {
1701
+ if (isPointerEvent(event) || isMouseEvent(event)) {
1709
1702
  // Watch for multiple subsequent deltas; this might occur for tiny cursor movements.
1710
1703
  // In this case, Panel sizes might not change–
1711
1704
  // but updating cursor in this scenario would cause a flicker.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-resizable-panels",
3
- "version": "2.0.16",
3
+ "version": "2.0.17",
4
4
  "description": "React components for resizable panel groups/layouts",
5
5
  "author": "Brian Vaughn <brian.david.vaughn@gmail.com>",
6
6
  "license": "MIT",
package/src/PanelGroup.ts CHANGED
@@ -28,7 +28,7 @@ import { computePanelFlexBoxStyle } from "./utils/computePanelFlexBoxStyle";
28
28
  import debounce from "./utils/debounce";
29
29
  import { determinePivotIndices } from "./utils/determinePivotIndices";
30
30
  import { getResizeHandleElement } from "./utils/dom/getResizeHandleElement";
31
- import { isKeyDown, isMouseEvent, isTouchEvent } from "./utils/events";
31
+ import { isKeyDown, isMouseEvent, isPointerEvent } from "./utils/events";
32
32
  import { getResizeEventCursorPosition } from "./utils/events/getResizeEventCursorPosition";
33
33
  import { initializeDefaultStorage } from "./utils/initializeDefaultStorage";
34
34
  import {
@@ -658,7 +658,7 @@ function PanelGroupWithForwardedRef({
658
658
 
659
659
  // Only update the cursor for layout changes triggered by touch/mouse events (not keyboard)
660
660
  // Update the cursor even if the layout hasn't changed (we may need to show an invalid cursor state)
661
- if (isMouseEvent(event) || isTouchEvent(event)) {
661
+ if (isPointerEvent(event) || isMouseEvent(event)) {
662
662
  // Watch for multiple subsequent deltas; this might occur for tiny cursor movements.
663
663
  // In this case, Panel sizes might not change–
664
664
  // but updating cursor in this scenario would cause a flicker.
@@ -1,7 +1,8 @@
1
1
  import { PanelConstraints, PanelData } from "./Panel";
2
2
  import { CSSProperties, createContext } from "./vendor/react";
3
3
 
4
- export type ResizeEvent = KeyboardEvent | MouseEvent | TouchEvent;
4
+ // The "contextmenu" event is not supported as a PointerEvent in all browsers yet, so MouseEvent still need to be handled
5
+ export type ResizeEvent = KeyboardEvent | PointerEvent | MouseEvent;
5
6
  export type ResizeHandler = (event: ResizeEvent) => void;
6
7
 
7
8
  export type DragState = {