Files
letta-code/src/cli/components/ShimmerText.tsx
Charles Packer c32e43cac8 chore: misc UI improvements (#317)
Co-authored-by: Letta <noreply@letta.com>
2025-12-18 22:21:48 -08:00

41 lines
1.2 KiB
TypeScript

import chalk from "chalk";
import { Text } from "ink";
import type React from "react";
import { colors } from "./colors.js";
interface ShimmerTextProps {
color?: string;
boldPrefix?: string;
message: string;
shimmerOffset: number;
}
export const ShimmerText: React.FC<ShimmerTextProps> = ({
color = colors.status.processing,
boldPrefix,
message,
shimmerOffset,
}) => {
const fullText = `${boldPrefix ? `${boldPrefix} ` : ""}${message}`;
const prefixLength = boldPrefix ? boldPrefix.length + 1 : 0; // +1 for space
// Create the shimmer effect - simple 3-char highlight
const shimmerText = fullText
.split("")
.map((char, i) => {
// Check if this character is within the 3-char shimmer window
const isInShimmer = i >= shimmerOffset && i < shimmerOffset + 3;
const isInPrefix = i < prefixLength;
if (isInShimmer) {
const styledChar = chalk.hex(colors.status.processingShimmer)(char);
return isInPrefix ? chalk.bold(styledChar) : styledChar;
}
const styledChar = chalk.hex(color)(char);
return isInPrefix ? chalk.bold(styledChar) : styledChar;
})
.join("");
return <Text>{shimmerText}</Text>;
};