react-resizable-panels 0.0.14 → 0.0.16
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/CHANGELOG.md +8 -0
- package/README.md +7 -14
- package/dist/react-resizable-panels.d.ts +2 -7
- package/dist/react-resizable-panels.d.ts.map +1 -1
- package/dist/react-resizable-panels.js +89 -100
- package/dist/react-resizable-panels.js.map +1 -1
- package/dist/react-resizable-panels.module.js +90 -100
- package/dist/react-resizable-panels.module.js.map +1 -1
- package/package.json +1 -1
- package/src/Panel.tsx +18 -8
- package/src/PanelContexts.ts +1 -4
- package/src/PanelGroup.tsx +62 -63
- package/src/PanelResizeHandle.tsx +10 -4
- package/src/constants.ts +1 -1
- package/src/hooks/useWindowSplitterBehavior.ts +11 -8
- package/src/index.ts +1 -2
- package/src/utils/coordinates.ts +10 -7
- package/src/utils/group.ts +22 -42
- package/src/utils/serialization.ts +5 -2
package/src/utils/coordinates.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Direction, ResizeEvent } from "../types";
|
|
2
|
-
import { getResizeHandle } from "./group";
|
|
2
|
+
import { getPanelGroup, getResizeHandle } from "./group";
|
|
3
3
|
|
|
4
4
|
export type Coordinates = {
|
|
5
5
|
movement: number;
|
|
@@ -39,13 +39,16 @@ export function getDragOffset(
|
|
|
39
39
|
// https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/movementX
|
|
40
40
|
export function getMovement(
|
|
41
41
|
event: ResizeEvent,
|
|
42
|
+
groupId: string,
|
|
42
43
|
handleId: string,
|
|
43
|
-
{ height, width }: Size,
|
|
44
44
|
direction: Direction,
|
|
45
45
|
initialOffset: number
|
|
46
46
|
): number {
|
|
47
47
|
const isHorizontal = direction === "horizontal";
|
|
48
|
-
|
|
48
|
+
|
|
49
|
+
const groupElement = getPanelGroup(groupId);
|
|
50
|
+
const rect = groupElement.getBoundingClientRect();
|
|
51
|
+
const size = isHorizontal ? rect.width : rect.height;
|
|
49
52
|
|
|
50
53
|
if (isKeyDown(event)) {
|
|
51
54
|
const denominator = event.shiftKey ? 10 : 100;
|
|
@@ -53,13 +56,13 @@ export function getMovement(
|
|
|
53
56
|
|
|
54
57
|
switch (event.key) {
|
|
55
58
|
case "ArrowDown":
|
|
56
|
-
return delta;
|
|
59
|
+
return isHorizontal ? 0 : delta;
|
|
57
60
|
case "ArrowLeft":
|
|
58
|
-
return -delta;
|
|
61
|
+
return isHorizontal ? -delta : 0;
|
|
59
62
|
case "ArrowRight":
|
|
60
|
-
return delta;
|
|
63
|
+
return isHorizontal ? delta : 0;
|
|
61
64
|
case "ArrowUp":
|
|
62
|
-
return -delta;
|
|
65
|
+
return isHorizontal ? 0 : -delta;
|
|
63
66
|
case "End":
|
|
64
67
|
if (isHorizontal) {
|
|
65
68
|
return size;
|
package/src/utils/group.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { PRECISION } from "../constants";
|
|
2
|
-
import {
|
|
2
|
+
import { PanelData } from "../types";
|
|
3
3
|
|
|
4
4
|
export function adjustByDelta(
|
|
5
5
|
panels: Map<string, PanelData>,
|
|
@@ -66,29 +66,26 @@ export function adjustByDelta(
|
|
|
66
66
|
return nextSizes;
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
-
|
|
69
|
+
// This method returns a number between 1 and 100 representing
|
|
70
|
+
// the % of the group's overall space this panel should occupy.
|
|
71
|
+
export function getFlexGrow(
|
|
70
72
|
panels: Map<string, PanelData>,
|
|
71
73
|
id: string,
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
): number {
|
|
77
|
-
const panelsArray = panelsMapToSortedArray(panels);
|
|
78
|
-
|
|
79
|
-
let index = panelsArray.findIndex((panel) => panel.id === id);
|
|
80
|
-
if (index < 0) {
|
|
81
|
-
return 0;
|
|
74
|
+
sizes: number[]
|
|
75
|
+
): string {
|
|
76
|
+
if (panels.size === 1) {
|
|
77
|
+
return "100";
|
|
82
78
|
}
|
|
83
79
|
|
|
84
|
-
|
|
80
|
+
const panelsArray = panelsMapToSortedArray(panels);
|
|
85
81
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
82
|
+
const index = panelsArray.findIndex((panel) => panel.id === id);
|
|
83
|
+
const size = sizes[index];
|
|
84
|
+
if (size == null) {
|
|
85
|
+
return "0";
|
|
89
86
|
}
|
|
90
87
|
|
|
91
|
-
return
|
|
88
|
+
return size.toPrecision(PRECISION);
|
|
92
89
|
}
|
|
93
90
|
|
|
94
91
|
export function getPanel(id: string): HTMLDivElement | null {
|
|
@@ -99,6 +96,14 @@ export function getPanel(id: string): HTMLDivElement | null {
|
|
|
99
96
|
return null;
|
|
100
97
|
}
|
|
101
98
|
|
|
99
|
+
export function getPanelGroup(id: string): HTMLDivElement | null {
|
|
100
|
+
const element = document.querySelector(`[data-panel-group-id="${id}"]`);
|
|
101
|
+
if (element) {
|
|
102
|
+
return element as HTMLDivElement;
|
|
103
|
+
}
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
|
|
102
107
|
export function getResizeHandle(id: string): HTMLDivElement | null {
|
|
103
108
|
const element = document.querySelector(
|
|
104
109
|
`[data-panel-resize-handle-id="${id}"]`
|
|
@@ -149,28 +154,3 @@ export function panelsMapToSortedArray(
|
|
|
149
154
|
): PanelData[] {
|
|
150
155
|
return Array.from(panels.values()).sort((a, b) => a.order - b.order);
|
|
151
156
|
}
|
|
152
|
-
|
|
153
|
-
export function getSize(
|
|
154
|
-
panels: Map<string, PanelData>,
|
|
155
|
-
id: string,
|
|
156
|
-
direction: Direction,
|
|
157
|
-
sizes: number[],
|
|
158
|
-
height: number,
|
|
159
|
-
width: number
|
|
160
|
-
): number {
|
|
161
|
-
const totalSize = direction === "horizontal" ? width : height;
|
|
162
|
-
|
|
163
|
-
if (panels.size === 1) {
|
|
164
|
-
return totalSize;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
const panelsArray = panelsMapToSortedArray(panels);
|
|
168
|
-
|
|
169
|
-
const index = panelsArray.findIndex((panel) => panel.id === id);
|
|
170
|
-
const size = sizes[index];
|
|
171
|
-
if (size == null) {
|
|
172
|
-
return 0;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
return Math.round(size * totalSize);
|
|
176
|
-
}
|
|
@@ -8,8 +8,11 @@ type SerializedPanelGroupState = { [panelIds: string]: number[] };
|
|
|
8
8
|
// Pre-sorting by minSize allows remembering layouts even if panels are re-ordered/dragged.
|
|
9
9
|
function getSerializationKey(panels: PanelData[]): string {
|
|
10
10
|
return panels
|
|
11
|
-
.map((panel) =>
|
|
12
|
-
|
|
11
|
+
.map((panel) => {
|
|
12
|
+
const { minSize, order } = panel;
|
|
13
|
+
return order ? `${order}:${minSize}` : `${minSize}`;
|
|
14
|
+
})
|
|
15
|
+
.sort((a, b) => a.localeCompare(b))
|
|
13
16
|
.join(",");
|
|
14
17
|
}
|
|
15
18
|
|