(itemCount: number, maxColumns: number)
| 12 | * Tries to create a balanced grid (e.g. 2x2 instead of 3x1 + 1) while respecting max columns. |
| 13 | */ |
| 14 | export function computeSmartColumns(itemCount: number, maxColumns: number): number { |
| 15 | if (itemCount === 0) return 1 |
| 16 | if (itemCount <= maxColumns) return itemCount |
| 17 | |
| 18 | // If we can make a perfect grid with maxColumns, do it |
| 19 | if (itemCount % maxColumns === 0) return maxColumns |
| 20 | |
| 21 | // Special case for 4 items on a 3-column screen: prefer 2x2 over 3+1 |
| 22 | if (itemCount === 4 && maxColumns === 3) return 2 |
| 23 | |
| 24 | // Iterate down from maxColumns to find a divisor or better balance |
| 25 | // We prioritize using more columns (larger width) over perfect balance, unless it's very egregious |
| 26 | for (let c = maxColumns; c >= 2; c--) { |
| 27 | // If perfect match (divisor) |
| 28 | if (itemCount % c === 0) return c |
| 29 | } |
| 30 | |
| 31 | // Default to max columns if no nice divisor found |
| 32 | return maxColumns |
| 33 | } |
no outgoing calls
no test coverage detected