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 +1 -2
- package/dist/react-resizable-panels.browser.development.js +6 -4
- package/dist/react-resizable-panels.browser.js +6 -4
- package/dist/react-resizable-panels.development.edge-light.js +6 -4
- package/dist/react-resizable-panels.development.js +6 -4
- package/dist/react-resizable-panels.edge-light.js +6 -4
- package/dist/react-resizable-panels.js +6 -4
- package/package.json +12 -12
- package/LICENSE +0 -21
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
|
|
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 &&
|
|
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.
|
|
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.
|
|
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.
|
|
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 &&
|
|
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.
|
|
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.
|
|
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.
|
|
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 &&
|
|
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.
|
|
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.
|
|
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.
|
|
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 &&
|
|
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.
|
|
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.
|
|
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.
|
|
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 &&
|
|
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.
|
|
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.
|
|
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.
|
|
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 &&
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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.
|