MCPcopy Create free account
hub / github.com/RtlZeroMemory/Rezi / normalizePanelCellSizes

Function normalizePanelCellSizes

packages/core/src/widgets/splitPane.ts:25–81  ·  view source on GitHub ↗
(
  sizes: number[],
  availableForPanels: number,
  minSizes?: readonly number[],
  maxSizes?: readonly number[],
)

Source from the content-addressed store, hash-verified

23}>;
24
25function normalizePanelCellSizes(
26 sizes: number[],
27 availableForPanels: number,
28 minSizes?: readonly number[],
29 maxSizes?: readonly number[],
30): void {
31 // Apply min/max constraints
32 for (let i = 0; i < sizes.length; i++) {
33 const minSize = minSizes?.[i] ?? 0;
34 const maxSize = maxSizes?.[i] ?? availableForPanels;
35 const size = sizes[i] ?? 0;
36 sizes[i] = Math.max(minSize, Math.min(maxSize, size));
37 }
38
39 // Distribute remainder / shrink overshoot to fit available space
40 const totalSize = sizes.reduce((a, b) => a + (b ?? 0), 0);
41 const remainder = availableForPanels - totalSize;
42 if (remainder > 0) {
43 let r = remainder;
44 while (r > 0) {
45 let progressed = false;
46 for (let i = 0; i < sizes.length && r > 0; i++) {
47 const currentSize = sizes[i] ?? 0;
48 const maxSize = maxSizes?.[i] ?? availableForPanels;
49 if (currentSize < maxSize) {
50 sizes[i] = currentSize + 1;
51 r--;
52 progressed = true;
53 }
54 }
55 if (!progressed) break;
56 }
57 } else if (remainder < 0) {
58 let overshoot = -remainder;
59
60 // First pass: shrink but respect minSizes.
61 for (let i = sizes.length - 1; i >= 0 && overshoot > 0; i--) {
62 const currentSize = sizes[i] ?? 0;
63 const minSize = minSizes?.[i] ?? 0;
64 const canReduce = Math.max(0, currentSize - minSize);
65 if (canReduce === 0) continue;
66 const delta = Math.min(overshoot, canReduce);
67 sizes[i] = currentSize - delta;
68 overshoot -= delta;
69 }
70
71 // Second pass: if constraints are impossible (sum(minSizes) > available), shrink below mins down to 0.
72 for (let i = sizes.length - 1; i >= 0 && overshoot > 0; i--) {
73 const currentSize = sizes[i] ?? 0;
74 const canReduce = Math.max(0, currentSize);
75 if (canReduce === 0) continue;
76 const delta = Math.min(overshoot, canReduce);
77 sizes[i] = currentSize - delta;
78 overshoot -= delta;
79 }
80 }
81}
82

Callers 2

computePanelSizesFunction · 0.85
computePanelCellSizesFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected