Files
Webklar.com/node_modules/react-resizable-panels/src/utils/calculateUnsafeDefaultLayout.ts
Basilosaurusrex f027651f9b main repo
2025-11-24 18:09:40 +01:00

51 lines
1.4 KiB
TypeScript

import { PanelData } from "../Panel";
import { assert } from "./assert";
export function calculateUnsafeDefaultLayout({
panelDataArray,
}: {
panelDataArray: PanelData[];
}): number[] {
const layout = Array<number>(panelDataArray.length);
const panelConstraintsArray = panelDataArray.map(
(panelData) => panelData.constraints
);
let numPanelsWithSizes = 0;
let remainingSize = 100;
// Distribute default sizes first
for (let index = 0; index < panelDataArray.length; index++) {
const panelConstraints = panelConstraintsArray[index];
assert(panelConstraints, `Panel constraints not found for index ${index}`);
const { defaultSize } = panelConstraints;
if (defaultSize != null) {
numPanelsWithSizes++;
layout[index] = defaultSize;
remainingSize -= defaultSize;
}
}
// Remaining size should be distributed evenly between panels without default sizes
for (let index = 0; index < panelDataArray.length; index++) {
const panelConstraints = panelConstraintsArray[index];
assert(panelConstraints, `Panel constraints not found for index ${index}`);
const { defaultSize } = panelConstraints;
if (defaultSize != null) {
continue;
}
const numRemainingPanels = panelDataArray.length - numPanelsWithSizes;
const size = remainingSize / numRemainingPanels;
numPanelsWithSizes++;
layout[index] = size;
remainingSize -= size;
}
return layout;
}