react-resizable-panels
Version:
React components for resizable panel groups/layouts
46 lines (38 loc) • 1.07 kB
text/typescript
import { PanelData } from "../Panel";
import { assert } from "./assert";
export function calculateAriaValues({
layout,
panelsArray,
pivotIndices,
}: {
layout: number[];
panelsArray: PanelData[];
pivotIndices: number[];
}) {
let currentMinSize = 0;
let currentMaxSize = 100;
let totalMinSize = 0;
let totalMaxSize = 0;
const firstIndex = pivotIndices[0];
assert(firstIndex != null, "No pivot index found");
// A panel's effective min/max sizes also need to account for other panel's sizes.
panelsArray.forEach((panelData, index) => {
const { constraints } = panelData;
const { maxSize = 100, minSize = 0 } = constraints;
if (index === firstIndex) {
currentMinSize = minSize;
currentMaxSize = maxSize;
} else {
totalMinSize += minSize;
totalMaxSize += maxSize;
}
});
const valueMax = Math.min(currentMaxSize, 100 - totalMinSize);
const valueMin = Math.max(currentMinSize, 100 - totalMaxSize);
const valueNow = layout[firstIndex];
return {
valueMax,
valueMin,
valueNow,
};
}