mirror of
https://bitbucket.org/siakitem/my-pi.git
synced 2026-08-28 16:45:22 +00:00
28 lines
871 B
TypeScript
28 lines
871 B
TypeScript
import { truncateToWidth, wrapTextWithAnsi } from "@earendil-works/pi-tui";
|
|
|
|
/**
|
|
* Fit rendered lines to a terminal width, so each returned entry is a single
|
|
* visual row no wider than `width`.
|
|
*
|
|
* Long lines are wrapped rather than clipped so no content is lost; the final
|
|
* `truncateToWidth` guards the edge cases `wrapTextWithAnsi` cannot split (a
|
|
* lone wide grapheme). A width of zero or less yields no rows.
|
|
*
|
|
* Shared by the `ctx.ui.custom` dialog — whose contract requires it — and by
|
|
* any renderer that must count rows, since a row count is only meaningful
|
|
* after wrapping.
|
|
*/
|
|
export function fitLinesToWidth(
|
|
lines: readonly string[],
|
|
width: number,
|
|
): string[] {
|
|
if (width <= 0) {
|
|
return [];
|
|
}
|
|
return lines.flatMap((line) =>
|
|
wrapTextWithAnsi(line, width).map((wrapped) =>
|
|
truncateToWidth(wrapped, width),
|
|
),
|
|
);
|
|
}
|