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.
@@ -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
- const size = isHorizontal ? width : height;
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;
@@ -1,5 +1,5 @@
1
1
  import { PRECISION } from "../constants";
2
- import { Direction, PanelData } from "../types";
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
- export function getOffset(
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
- direction: Direction,
73
- sizes: number[],
74
- height: number,
75
- width: number
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
- let scaledOffset = 0;
80
+ const panelsArray = panelsMapToSortedArray(panels);
85
81
 
86
- for (index = index - 1; index >= 0; index--) {
87
- const panel = panelsArray[index];
88
- scaledOffset += getSize(panels, panel.id, direction, sizes, height, width);
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 Math.round(scaledOffset);
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) => panel.minSize.toPrecision(2))
12
- .sort()
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