react-resizable-panels 3.0.4 → 3.0.6-alpha.0

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/README.md CHANGED
@@ -80,7 +80,6 @@ import { Panel, PanelGroup, PanelResizeHandle } from "react-resizable-panels";
80
80
  | `getSize(): number` | Gets the current size of the panel as a percentage (`1 - 100`). |
81
81
  | `isCollapsed(): boolean` | Returns `true` if the panel is currently _collapsed_ (`size === 0`). |
82
82
  | `isExpanded(): boolean` | Returns `true` if the panel is currently _not collapsed_ (`!isCollapsed()`). |
83
- | `getSize(): number` | Returns the most recently committed size of the panel as a percentage (`1 - 100`). |
84
83
  | `resize(size: number)` | Resize panel to the specified _percentage_ (`1 - 100`). |
85
84
 
86
85
  ### `PanelResizeHandle`
@@ -124,7 +123,7 @@ The `Panel` API doesn't _require_ `id` and `order` props because they aren't nec
124
123
  </PanelGroup>
125
124
  ```
126
125
 
127
- ### Can a attach a ref to the DOM elements?
126
+ ### Can I attach a ref to the DOM elements?
128
127
 
129
128
  No. I think exposing two refs (one for the component's imperative API and one for a DOM element) would be awkward. This library does export several utility methods for accessing the underlying DOM elements though. For example:
130
129
 
@@ -525,7 +525,9 @@ function handlePointerMove(event) {
525
525
 
526
526
  // Edge case (see #340)
527
527
  // Detect when the pointer has been released outside an iframe on a different domain
528
- if (isPointerDown && event.buttons === 0) {
528
+ if (isPointerDown &&
529
+ // Skip this check for "pointerleave" events, else Firefox triggers a false positive (see #514)
530
+ event.type !== "pointerleave" && event.buttons === 0) {
529
531
  isPointerDown = false;
530
532
  updateResizeHandlerStates("up", event);
531
533
  }
@@ -957,7 +959,7 @@ function adjustLayoutByDelta({
957
959
  if (!fuzzyNumbersEqual(prevSize, safeSize)) {
958
960
  deltaApplied += prevSize - safeSize;
959
961
  nextLayout[index] = safeSize;
960
- if (deltaApplied.toPrecision(3).localeCompare(Math.abs(delta).toPrecision(3), undefined, {
962
+ if (deltaApplied.toFixed(3).localeCompare(Math.abs(delta).toFixed(3), undefined, {
961
963
  numeric: true
962
964
  }) >= 0) {
963
965
  break;
@@ -1455,12 +1457,12 @@ function computePanelFlexBoxStyle({
1455
1457
  if (size == null) {
1456
1458
  // Initial render (before panels have registered themselves)
1457
1459
  // In order to support server rendering, fall back to default size if provided
1458
- flexGrow = defaultSize != undefined ? defaultSize.toPrecision(precision) : "1";
1460
+ flexGrow = defaultSize != undefined ? defaultSize.toFixed(precision) : "1";
1459
1461
  } else if (panelData.length === 1) {
1460
1462
  // Special case: Single panel group should always fill full width/height
1461
1463
  flexGrow = "1";
1462
1464
  } else {
1463
- flexGrow = size.toPrecision(precision);
1465
+ flexGrow = size.toFixed(precision);
1464
1466
  }
1465
1467
  return {
1466
1468
  flexBasis: 0,
@@ -519,7 +519,9 @@ function handlePointerMove(event) {
519
519
 
520
520
  // Edge case (see #340)
521
521
  // Detect when the pointer has been released outside an iframe on a different domain
522
- if (isPointerDown && event.buttons === 0) {
522
+ if (isPointerDown &&
523
+ // Skip this check for "pointerleave" events, else Firefox triggers a false positive (see #514)
524
+ event.type !== "pointerleave" && event.buttons === 0) {
523
525
  isPointerDown = false;
524
526
  updateResizeHandlerStates("up", event);
525
527
  }
@@ -951,7 +953,7 @@ function adjustLayoutByDelta({
951
953
  if (!fuzzyNumbersEqual(prevSize, safeSize)) {
952
954
  deltaApplied += prevSize - safeSize;
953
955
  nextLayout[index] = safeSize;
954
- if (deltaApplied.toPrecision(3).localeCompare(Math.abs(delta).toPrecision(3), undefined, {
956
+ if (deltaApplied.toFixed(3).localeCompare(Math.abs(delta).toFixed(3), undefined, {
955
957
  numeric: true
956
958
  }) >= 0) {
957
959
  break;
@@ -1439,12 +1441,12 @@ function computePanelFlexBoxStyle({
1439
1441
  if (size == null) {
1440
1442
  // Initial render (before panels have registered themselves)
1441
1443
  // In order to support server rendering, fall back to default size if provided
1442
- flexGrow = defaultSize != undefined ? defaultSize.toPrecision(precision) : "1";
1444
+ flexGrow = defaultSize != undefined ? defaultSize.toFixed(precision) : "1";
1443
1445
  } else if (panelData.length === 1) {
1444
1446
  // Special case: Single panel group should always fill full width/height
1445
1447
  flexGrow = "1";
1446
1448
  } else {
1447
- flexGrow = size.toPrecision(precision);
1449
+ flexGrow = size.toFixed(precision);
1448
1450
  }
1449
1451
  return {
1450
1452
  flexBasis: 0,
@@ -495,7 +495,9 @@ function handlePointerMove(event) {
495
495
 
496
496
  // Edge case (see #340)
497
497
  // Detect when the pointer has been released outside an iframe on a different domain
498
- if (isPointerDown && event.buttons === 0) {
498
+ if (isPointerDown &&
499
+ // Skip this check for "pointerleave" events, else Firefox triggers a false positive (see #514)
500
+ event.type !== "pointerleave" && event.buttons === 0) {
499
501
  isPointerDown = false;
500
502
  updateResizeHandlerStates("up", event);
501
503
  }
@@ -927,7 +929,7 @@ function adjustLayoutByDelta({
927
929
  if (!fuzzyNumbersEqual(prevSize, safeSize)) {
928
930
  deltaApplied += prevSize - safeSize;
929
931
  nextLayout[index] = safeSize;
930
- if (deltaApplied.toPrecision(3).localeCompare(Math.abs(delta).toPrecision(3), undefined, {
932
+ if (deltaApplied.toFixed(3).localeCompare(Math.abs(delta).toFixed(3), undefined, {
931
933
  numeric: true
932
934
  }) >= 0) {
933
935
  break;
@@ -1301,12 +1303,12 @@ function computePanelFlexBoxStyle({
1301
1303
  if (size == null) {
1302
1304
  // Initial render (before panels have registered themselves)
1303
1305
  // In order to support server rendering, fall back to default size if provided
1304
- flexGrow = defaultSize != undefined ? defaultSize.toPrecision(precision) : "1";
1306
+ flexGrow = defaultSize != undefined ? defaultSize.toFixed(precision) : "1";
1305
1307
  } else if (panelData.length === 1) {
1306
1308
  // Special case: Single panel group should always fill full width/height
1307
1309
  flexGrow = "1";
1308
1310
  } else {
1309
- flexGrow = size.toPrecision(precision);
1311
+ flexGrow = size.toFixed(precision);
1310
1312
  }
1311
1313
  return {
1312
1314
  flexBasis: 0,
@@ -532,7 +532,9 @@ function handlePointerMove(event) {
532
532
 
533
533
  // Edge case (see #340)
534
534
  // Detect when the pointer has been released outside an iframe on a different domain
535
- if (isPointerDown && event.buttons === 0) {
535
+ if (isPointerDown &&
536
+ // Skip this check for "pointerleave" events, else Firefox triggers a false positive (see #514)
537
+ event.type !== "pointerleave" && event.buttons === 0) {
536
538
  isPointerDown = false;
537
539
  updateResizeHandlerStates("up", event);
538
540
  }
@@ -964,7 +966,7 @@ function adjustLayoutByDelta({
964
966
  if (!fuzzyNumbersEqual(prevSize, safeSize)) {
965
967
  deltaApplied += prevSize - safeSize;
966
968
  nextLayout[index] = safeSize;
967
- if (deltaApplied.toPrecision(3).localeCompare(Math.abs(delta).toPrecision(3), undefined, {
969
+ if (deltaApplied.toFixed(3).localeCompare(Math.abs(delta).toFixed(3), undefined, {
968
970
  numeric: true
969
971
  }) >= 0) {
970
972
  break;
@@ -1462,12 +1464,12 @@ function computePanelFlexBoxStyle({
1462
1464
  if (size == null) {
1463
1465
  // Initial render (before panels have registered themselves)
1464
1466
  // In order to support server rendering, fall back to default size if provided
1465
- flexGrow = defaultSize != undefined ? defaultSize.toPrecision(precision) : "1";
1467
+ flexGrow = defaultSize != undefined ? defaultSize.toFixed(precision) : "1";
1466
1468
  } else if (panelData.length === 1) {
1467
1469
  // Special case: Single panel group should always fill full width/height
1468
1470
  flexGrow = "1";
1469
1471
  } else {
1470
- flexGrow = size.toPrecision(precision);
1472
+ flexGrow = size.toFixed(precision);
1471
1473
  }
1472
1474
  return {
1473
1475
  flexBasis: 0,
@@ -484,7 +484,9 @@ function handlePointerMove(event) {
484
484
 
485
485
  // Edge case (see #340)
486
486
  // Detect when the pointer has been released outside an iframe on a different domain
487
- if (isPointerDown && event.buttons === 0) {
487
+ if (isPointerDown &&
488
+ // Skip this check for "pointerleave" events, else Firefox triggers a false positive (see #514)
489
+ event.type !== "pointerleave" && event.buttons === 0) {
488
490
  isPointerDown = false;
489
491
  updateResizeHandlerStates("up", event);
490
492
  }
@@ -916,7 +918,7 @@ function adjustLayoutByDelta({
916
918
  if (!fuzzyNumbersEqual(prevSize, safeSize)) {
917
919
  deltaApplied += prevSize - safeSize;
918
920
  nextLayout[index] = safeSize;
919
- if (deltaApplied.toPrecision(3).localeCompare(Math.abs(delta).toPrecision(3), undefined, {
921
+ if (deltaApplied.toFixed(3).localeCompare(Math.abs(delta).toFixed(3), undefined, {
920
922
  numeric: true
921
923
  }) >= 0) {
922
924
  break;
@@ -1290,12 +1292,12 @@ function computePanelFlexBoxStyle({
1290
1292
  if (size == null) {
1291
1293
  // Initial render (before panels have registered themselves)
1292
1294
  // In order to support server rendering, fall back to default size if provided
1293
- flexGrow = defaultSize != undefined ? defaultSize.toPrecision(precision) : "1";
1295
+ flexGrow = defaultSize != undefined ? defaultSize.toFixed(precision) : "1";
1294
1296
  } else if (panelData.length === 1) {
1295
1297
  // Special case: Single panel group should always fill full width/height
1296
1298
  flexGrow = "1";
1297
1299
  } else {
1298
- flexGrow = size.toPrecision(precision);
1300
+ flexGrow = size.toFixed(precision);
1299
1301
  }
1300
1302
  return {
1301
1303
  flexBasis: 0,
@@ -521,7 +521,9 @@ function handlePointerMove(event) {
521
521
 
522
522
  // Edge case (see #340)
523
523
  // Detect when the pointer has been released outside an iframe on a different domain
524
- if (isPointerDown && event.buttons === 0) {
524
+ if (isPointerDown &&
525
+ // Skip this check for "pointerleave" events, else Firefox triggers a false positive (see #514)
526
+ event.type !== "pointerleave" && event.buttons === 0) {
525
527
  isPointerDown = false;
526
528
  updateResizeHandlerStates("up", event);
527
529
  }
@@ -953,7 +955,7 @@ function adjustLayoutByDelta({
953
955
  if (!fuzzyNumbersEqual(prevSize, safeSize)) {
954
956
  deltaApplied += prevSize - safeSize;
955
957
  nextLayout[index] = safeSize;
956
- if (deltaApplied.toPrecision(3).localeCompare(Math.abs(delta).toPrecision(3), undefined, {
958
+ if (deltaApplied.toFixed(3).localeCompare(Math.abs(delta).toFixed(3), undefined, {
957
959
  numeric: true
958
960
  }) >= 0) {
959
961
  break;
@@ -1441,12 +1443,12 @@ function computePanelFlexBoxStyle({
1441
1443
  if (size == null) {
1442
1444
  // Initial render (before panels have registered themselves)
1443
1445
  // In order to support server rendering, fall back to default size if provided
1444
- flexGrow = defaultSize != undefined ? defaultSize.toPrecision(precision) : "1";
1446
+ flexGrow = defaultSize != undefined ? defaultSize.toFixed(precision) : "1";
1445
1447
  } else if (panelData.length === 1) {
1446
1448
  // Special case: Single panel group should always fill full width/height
1447
1449
  flexGrow = "1";
1448
1450
  } else {
1449
- flexGrow = size.toPrecision(precision);
1451
+ flexGrow = size.toFixed(precision);
1450
1452
  }
1451
1453
  return {
1452
1454
  flexBasis: 0,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-resizable-panels",
3
- "version": "3.0.4",
3
+ "version": "3.0.6-alpha.0",
4
4
  "type": "module",
5
5
  "description": "React components for resizable panel groups/layouts",
6
6
  "author": "Brian Vaughn <brian.david.vaughn@gmail.com>",
@@ -51,6 +51,15 @@
51
51
  }
52
52
  },
53
53
  "types": "dist/react-resizable-panels.d.ts",
54
+ "scripts": {
55
+ "clear": "pnpm run clear:builds & pnpm run clear:node_modules",
56
+ "clear:builds": "rm -rf ./packages/*/dist",
57
+ "clear:node_modules": "rm -rf ./node_modules",
58
+ "lint": "eslint \"src/**/*.{ts,tsx}\"",
59
+ "test:browser": "vitest",
60
+ "test:node": "vitest -c vitest.node.config.ts",
61
+ "watch": "parcel watch --port=2345"
62
+ },
54
63
  "devDependencies": {
55
64
  "@babel/plugin-proposal-nullish-coalescing-operator": "7.18.6",
56
65
  "@babel/plugin-proposal-optional-chaining": "7.21.0",
@@ -68,14 +77,5 @@
68
77
  },
69
78
  "browserslist": [
70
79
  "Chrome 79"
71
- ],
72
- "scripts": {
73
- "clear": "pnpm run clear:builds & pnpm run clear:node_modules",
74
- "clear:builds": "rm -rf ./packages/*/dist",
75
- "clear:node_modules": "rm -rf ./node_modules",
76
- "lint": "eslint \"src/**/*.{ts,tsx}\"",
77
- "test:browser": "vitest",
78
- "test:node": "vitest -c vitest.node.config.ts",
79
- "watch": "parcel watch --port=2345"
80
- }
81
- }
80
+ ]
81
+ }
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2023 Brian Vaughn
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.