[READ-ONLY] Mirror of https://github.com/bombshell-dev/tty. Platform independent 2D layout engine for terminal applications based on Clay bomb.sh/docs/tty
Something went wrong. Try again.
1.3 kB · 37 lines
TypeScript
1234567891011121314151617181920212223242526272829303132333435363738/** * square — an aspect-ratio helper. * * Terminal cells are roughly twice as tall as they are wide (~1:2 w:h; the * bombshell sneak peek measured a 16x34px cell). A box that should *read* as a * square therefore needs about two columns for every row. This helper hides the * manual fudge factor that demos otherwise hand-roll. * * Lift target: this is a candidate primitive for `bombshell-dev/ui`. When the * renderer exposes the real cell pixel size, `CELL_W_PER_H` can be replaced by * `cellHeightPx / cellWidthPx` instead of this 2:1 constant. */
import { fixed, type SizingAxis } from "../../../mod.ts";
/** Approximate columns-per-row for a visually square cell. */export const CELL_W_PER_H = 2;
export interface SquareSize { width: SizingAxis; height: SizingAxis;}
/** Number of columns that reads as square for the given row count. */export function squareCols(rows: number): number { return Math.max(1, Math.round(rows * CELL_W_PER_H));}
/** * Fixed sizing for a box that reads as a square `rows` cells tall. * * @example * open("tile", { layout: square(3) }) // 6 cols wide, 3 rows tall */export function square(rows: number): SquareSize { return { width: fixed(squareCols(rows)), height: fixed(rows) };}