UNPKG

@earendil-works/pi-coding-agent

Version:

Coding agent CLI with read, bash, edit, write tools and session management

54 lines 1.97 kB
import { CancellableLoader, Container, Loader, Spacer, Text } from "@earendil-works/pi-tui"; import { DynamicBorder } from "./dynamic-border.js"; import { keyHint } from "./keybinding-hints.js"; /** Loader wrapped with borders for extension UI */ export class BorderedLoader extends Container { loader; cancellable; signalController; constructor(tui, theme, message, options) { super(); this.cancellable = options?.cancellable ?? true; const borderColor = (s) => theme.fg("border", s); this.addChild(new DynamicBorder(borderColor)); if (this.cancellable) { this.loader = new CancellableLoader(tui, (s) => theme.fg("accent", s), (s) => theme.fg("muted", s), message); } else { this.signalController = new AbortController(); this.loader = new Loader(tui, (s) => theme.fg("accent", s), (s) => theme.fg("muted", s), message); } this.addChild(this.loader); if (this.cancellable) { this.addChild(new Spacer(1)); this.addChild(new Text(keyHint("tui.select.cancel", "cancel"), 1, 0)); } this.addChild(new Spacer(1)); this.addChild(new DynamicBorder(borderColor)); } get signal() { if (this.cancellable) { return this.loader.signal; } return this.signalController?.signal ?? new AbortController().signal; } set onAbort(fn) { if (this.cancellable) { this.loader.onAbort = fn; } } handleInput(data) { if (this.cancellable) { this.loader.handleInput(data); } } dispose() { if ("dispose" in this.loader && typeof this.loader.dispose === "function") { this.loader.dispose(); } else if ("stop" in this.loader && typeof this.loader.stop === "function") { this.loader.stop(); } } } //# sourceMappingURL=bordered-loader.js.map