diff --git a/src/ui/suggestions.tsx b/src/ui/suggestions.tsx
index cad8155..90df6ff 100644
--- a/src/ui/suggestions.tsx
+++ b/src/ui/suggestions.tsx
@@ -1,25 +1,41 @@
import React, { useState, useCallback, useEffect } from "react";
import { Text, useInput, Box, measureElement, DOMElement } from "ink";
+import wrapAnsi from "wrap-ansi";
import { Suggestion } from "../runtime/model.js";
const MaxSuggestions = 5;
const SuggestionWidth = 40;
const DescriptionWidth = 30;
+const DescriptionMaxHeight = 6;
const BorderWidth = 2;
const ActiveSuggestionBackgroundColor = "#7D56F4";
function Description({ description }: { description: string }) {
+ wrapAnsi(description, DescriptionWidth, { hard: true });
if (description.length !== 0) {
return (
- {description}
+ {truncateDescription(description, DescriptionMaxHeight)}
);
}
}
+function truncateDescription(description: string, maxHeight: number) {
+ const wrappedText = wrapAnsi(description, DescriptionWidth - BorderWidth, {
+ trim: false,
+ hard: true,
+ });
+ const lines = wrappedText.split("\n");
+ const truncatedLines = lines.slice(0, maxHeight);
+ if (lines.length > maxHeight) {
+ truncatedLines[maxHeight - 1] = [...truncatedLines[maxHeight - 1]].slice(0, -1).join("") + "…";
+ }
+ return truncatedLines.join("\n");
+}
+
function SuggestionList({ suggestions, activeSuggestionIdx }: { suggestions: Suggestion[]; activeSuggestionIdx: number }) {
return (