zephyr-agent
Version:
Zephyr plugin agent
52 lines (51 loc) • 1.65 kB
JavaScript
import "node:module";
import { brightBlueBgName } from "./debug.mjs";
import { isTTY, purple } from "./picocolor.mjs";
const SPINNER_FRAMES = [
'⠋',
'⠙',
'⠹',
'⠸',
'⠼',
'⠴',
'⠦',
'⠧',
'⠇',
'⠏'
];
const SPIN_INTERVAL_MS = 100;
const SPIN_DURATION_MS = 900;
const SUCCESS_HOLD_MS = 250;
const hideCursor = ()=>process.stdout.write('\u001B[?25l');
const showCursor = ()=>process.stdout.write('\u001B[?25h');
const clearLine = ()=>process.stdout.write('\u001B[2K\r');
async function showSuccessAnimation(message = 'Build complete!') {
if (!isTTY || !process.stdout.isTTY) return;
return new Promise((resolve)=>{
let frameIndex = 0;
let timeout = null;
const formatLine = (symbol)=>`${brightBlueBgName} ${purple(symbol)} ${purple(message)}`;
const stopSpinner = ()=>{
clearInterval(interval);
if (timeout) clearTimeout(timeout);
};
const interval = setInterval(()=>{
clearLine();
process.stdout.write(formatLine(SPINNER_FRAMES[frameIndex]));
frameIndex = (frameIndex + 1) % SPINNER_FRAMES.length;
}, SPIN_INTERVAL_MS);
hideCursor();
timeout = setTimeout(()=>{
stopSpinner();
clearLine();
process.stdout.write(formatLine('✓'));
timeout = setTimeout(()=>{
process.stdout.write('\n');
showCursor();
resolve();
}, SUCCESS_HOLD_MS);
}, SPIN_DURATION_MS);
});
}
export { showSuccessAnimation };
//# sourceMappingURL=success-animation.mjs.map