import { type Component, Container, type SelectItem, SelectList } from "@mariozechner/pi-tui"; import chalk from "chalk"; /** * Dynamic border component that adjusts to viewport width */ class DynamicBorder implements Component { render(width: number): string[] { return [chalk.blue("─".repeat(Math.max(1, width)))]; } } /** * Component that renders a queue mode selector with borders */ export class QueueModeSelectorComponent extends Container { private selectList: SelectList; constructor( currentMode: "all" | "one-at-a-time", onSelect: (mode: "all" | "one-at-a-time") => void, onCancel: () => void, ) { super(); const queueModes: SelectItem[] = [ { value: "one-at-a-time", label: "one-at-a-time", description: "Process queued messages one by one (recommended)", }, { value: "all", label: "all", description: "Process all queued messages at once" }, ]; // Add top border this.addChild(new DynamicBorder()); // Create selector this.selectList = new SelectList(queueModes, 2); // Preselect current mode const currentIndex = queueModes.findIndex((item) => item.value === currentMode); if (currentIndex !== -1) { this.selectList.setSelectedIndex(currentIndex); } this.selectList.onSelect = (item) => { onSelect(item.value as "all" | "one-at-a-time"); }; this.selectList.onCancel = () => { onCancel(); }; this.addChild(this.selectList); // Add bottom border this.addChild(new DynamicBorder()); } getSelectList(): SelectList { return this.selectList; } }