diff --git a/.changeset/smooth-turtles-fix.md b/.changeset/smooth-turtles-fix.md new file mode 100644 index 00000000..c5a3491d --- /dev/null +++ b/.changeset/smooth-turtles-fix.md @@ -0,0 +1,5 @@ +--- +'@clack/prompts': patch +--- + +Fix terminal cursor line-tracking offsets in MultiSelectPrompt to prevent option text from visually overwriting itself on smaller displays. diff --git a/packages/prompts/src/multi-select.ts b/packages/prompts/src/multi-select.ts index e5db7069..0a94c5d2 100644 --- a/packages/prompts/src/multi-select.ts +++ b/packages/prompts/src/multi-select.ts @@ -170,7 +170,7 @@ export const multiselect = (opts: MultiSelectOptions) => { ) .join('\n'); // Calculate rowPadding: title lines + footer lines (error message + trailing newline) - const titleLineCount = title.split('\n').length; + const titleLineCount = title.split('\n').length - 1; const footerLineCount = footer.split('\n').length + 1; // footer + trailing newline return `${title}${prefix}${limitOptions({ output: opts.output, @@ -184,7 +184,7 @@ export const multiselect = (opts: MultiSelectOptions) => { } default: { const prefix = hasGuide ? `${styleText('cyan', S_BAR)} ` : ''; - const titleLineCount = title.split('\n').length; + const titleLineCount = title.split('\n').length - 1; const footerLines = showInstructions ? formatInstructionFooter(MULTISELECT_INSTRUCTIONS, hasGuide) : hasGuide