Skip to content

Commit aa7b168

Browse files
committed
fix: 'distributeSizes' also need consider divider size
1 parent d44fc1b commit aa7b168

2 files changed

Lines changed: 22 additions & 7 deletions

File tree

src/components/SplitPane.tsx

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -118,18 +118,25 @@ export function SplitPane(props: SplitPaneProps) {
118118
return { minSizes: mins, maxSizes: maxs };
119119
}, [containerSize, paneCount, paneConfigs]);
120120

121+
// Caluclate space for dividers
122+
const calculateDividersTotalSize = useCallback(
123+
(containerSz: number) => {
124+
return (
125+
(paneCount - 1) * convertToPixels(dividerSize ?? '0px', containerSz)
126+
);
127+
},
128+
[paneCount, dividerSize]
129+
);
130+
121131
// Calculate initial sizes from pane configs
122132
const calculateInitialSizes = useCallback(
123133
(containerSz: number): number[] => {
124134
if (containerSz === 0) {
125135
return new Array(paneCount).fill(0);
126136
}
127137

128-
// Caluclate space for dividers
129-
const dividerSpace =
130-
(paneConfigs.length - 1) *
131-
convertToPixels(dividerSize ?? '0px', containerSz);
132-
containerSz -= dividerSpace;
138+
// Subtract space for dividers
139+
containerSz -= calculateDividersTotalSize(containerSz);
133140

134141
// First pass: calculate sizes for panes with explicit sizes
135142
const sizes: (number | null)[] = paneConfigs.map((config) => {
@@ -214,7 +221,11 @@ export function SplitPane(props: SplitPaneProps) {
214221
return calculateInitialSizes(newContainerSize);
215222
}
216223
// For uncontrolled panes, distribute proportionally
217-
return distributeSizes(currentSizes, newContainerSize);
224+
return distributeSizes(
225+
currentSizes,
226+
newContainerSize,
227+
calculateDividersTotalSize(newContainerSize)
228+
);
218229
}
219230

220231
// First measurement - use initial sizes

src/utils/calculations.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,12 @@ export function snapToPoint(
5353
*/
5454
export function distributeSizes(
5555
currentSizes: number[],
56-
newContainerSize: number
56+
newContainerSize: number,
57+
dividersTotalSize: number = 0
5758
): number[] {
59+
// Subtract space for dividers
60+
newContainerSize -= dividersTotalSize;
61+
5862
const totalCurrentSize = currentSizes.reduce((sum, size) => sum + size, 0);
5963

6064
if (totalCurrentSize === 0) {

0 commit comments

Comments
 (0)