mirror of
https://github.com/getcompanion-ai/co-mono.git
synced 2026-04-15 19:05:11 +00:00
Fixed rendering artifact where duplicate bottom borders appeared when components dynamically shifted positions (e.g., Ctrl+C in agent clearing status container). Root cause: Container wasn't reporting as "changed" when cleared (0 children), causing differential renderer to skip re-rendering that area. Solution: Container now tracks previousChildCount and reports changed when child count changes, ensuring proper re-rendering when containers are cleared. - Added comprehensive test reproducing the layout shift artifact - Fixed Container to track and report child count changes - All tests pass including new layout shift artifact test
55 lines
No EOL
1.2 KiB
TypeScript
55 lines
No EOL
1.2 KiB
TypeScript
import { TUI, SelectList } from "../src/index.js";
|
|
import { readdirSync, statSync } from "fs";
|
|
import { join } from "path";
|
|
|
|
const ui = new TUI();
|
|
ui.start();
|
|
let currentPath = process.cwd();
|
|
|
|
function createFileList(path: string) {
|
|
const entries = readdirSync(path).map((entry) => {
|
|
const fullPath = join(path, entry);
|
|
const isDir = statSync(fullPath).isDirectory();
|
|
return {
|
|
value: entry,
|
|
label: entry,
|
|
description: isDir ? "directory" : "file",
|
|
};
|
|
});
|
|
|
|
// Add parent directory option
|
|
if (path !== "/") {
|
|
entries.unshift({
|
|
value: "..",
|
|
label: "..",
|
|
description: "parent directory",
|
|
});
|
|
}
|
|
|
|
return entries;
|
|
}
|
|
|
|
function showDirectory(path: string) {
|
|
ui.clear();
|
|
|
|
const entries = createFileList(path);
|
|
const fileList = new SelectList(entries, 10);
|
|
|
|
fileList.onSelect = (item) => {
|
|
if (item.value === "..") {
|
|
currentPath = join(currentPath, "..");
|
|
showDirectory(currentPath);
|
|
} else if (item.description === "directory") {
|
|
currentPath = join(currentPath, item.value);
|
|
showDirectory(currentPath);
|
|
} else {
|
|
console.log(`Selected file: ${join(currentPath, item.value)}`);
|
|
ui.stop();
|
|
}
|
|
};
|
|
|
|
ui.addChild(fileList);
|
|
ui.setFocus(fileList);
|
|
}
|
|
|
|
showDirectory(currentPath); |