( sizes: readonly number[], index: number, minSizes?: readonly number[], )
| 264 | * @returns Updated sizes with collapsed panel |
| 265 | */ |
| 266 | export function collapsePanel( |
| 267 | sizes: readonly number[], |
| 268 | index: number, |
| 269 | minSizes?: readonly number[], |
| 270 | ): readonly number[] { |
| 271 | if (index < 0 || index >= sizes.length) { |
| 272 | return sizes; |
| 273 | } |
| 274 | |
| 275 | const newSizes = [...sizes]; |
| 276 | const currentSize = sizes[index] ?? 0; |
| 277 | const minSize = minSizes?.[index] ?? 0; |
| 278 | const delta = currentSize - minSize; |
| 279 | |
| 280 | if (delta <= 0) { |
| 281 | return sizes; |
| 282 | } |
| 283 | |
| 284 | newSizes[index] = minSize; |
| 285 | |
| 286 | // Distribute delta to adjacent panels |
| 287 | if (index > 0) { |
| 288 | newSizes[index - 1] = (newSizes[index - 1] ?? 0) + delta; |
| 289 | } else if (index < sizes.length - 1) { |
| 290 | newSizes[index + 1] = (newSizes[index + 1] ?? 0) + delta; |
| 291 | } |
| 292 | |
| 293 | return Object.freeze(newSizes); |
| 294 | } |
| 295 | |
| 296 | /** |
| 297 | * Expand a collapsed panel. |
no outgoing calls
no test coverage detected