fix(tui): render the checkboxes in the to-do list items

This commit is contained in:
Sviatoslav Abakumov
2026-05-10 22:14:43 +04:00
parent f348a06294
commit 863341fbf5
2 changed files with 12 additions and 2 deletions

View File

@@ -556,8 +556,10 @@ export class Markdown implements Component {
for (let i = 0; i < token.items.length; i++) {
const item = token.items[i];
const bullet = token.ordered ? `${startNumber + i}. ` : "- ";
const firstPrefix = indent + this.theme.listBullet(bullet);
const continuationPrefix = indent + " ".repeat(visibleWidth(bullet));
const taskMarker = item.task ? `[${item.checked ? "x" : " "}] ` : "";
const marker = bullet + taskMarker;
const firstPrefix = indent + this.theme.listBullet(marker);
const continuationPrefix = indent + " ".repeat(visibleWidth(marker));
const itemWidth = Math.max(1, width - visibleWidth(firstPrefix));
let renderedAnyLine = false;

View File

@@ -124,6 +124,14 @@ describe("Markdown component", () => {
assert.ok(plainLines.some((line) => line.includes("2. Second ordered")));
});
it("should render task list markers", () => {
const markdown = new Markdown("- [ ] beep\n- [x] boop", 0, 0, defaultMarkdownTheme);
const lines = markdown.render(80).map((line) => stripAnsi(line).trimEnd());
assert.deepStrictEqual(lines, ["- [ ] beep", "- [x] boop"]);
});
it("should maintain numbering when code blocks are not indented (LLM output)", () => {
// When code blocks aren't indented, marked parses each item as a separate list.
// We use token.start to preserve the original numbering.