From d00dc33aa352e46458c21f46f02e2a28ae71317b Mon Sep 17 00:00:00 2001 From: can1357 Date: Thu, 1 Jan 2026 08:41:40 +0100 Subject: [PATCH] fix(tui): strip Format chars that crash string-width --- packages/tui/src/utils.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/tui/src/utils.ts b/packages/tui/src/utils.ts index dace78c1c..44f1c0764 100644 --- a/packages/tui/src/utils.ts +++ b/packages/tui/src/utils.ts @@ -1,11 +1,15 @@ import stringWidth from "string-width"; +// Format characters that crash string-width (Format but not Default_Ignorable_Code_Point) +const CRASHING_FORMAT_CHARS = + /[\u0600-\u0605\u06DD\u070F\u0890\u0891\u08E2\uFFF9-\uFFFB\u{110BD}\u{110CD}\u{13430}-\u{1343F}\u{1BCA0}-\u{1BCA3}]/gu; + /** * Calculate the visible width of a string in terminal columns. */ export function visibleWidth(str: string): number { if (!str) return 0; - const normalized = str.replace(/\t/g, " "); + const normalized = str.replace(/\t/g, " ").replace(CRASHING_FORMAT_CHARS, ""); return stringWidth(normalized); }