import * as React from 'react'
import { Text, useTheme } from '../../ink.js'
import { getTheme, type Theme } from '../../utils/theme.js'
import { interpolateColor, parseRGB, toRGBColor } from './utils.js'
type Props = {
char: string
flashOpacity: number
messageColor: keyof Theme
shimmerColor: keyof Theme
}
export function FlashingChar({
char,
flashOpacity,
messageColor,
shimmerColor,
}: Props): React.ReactNode {
const [themeName] = useTheme()
const theme = getTheme(themeName)
const baseColorStr = theme[messageColor]
const shimmerColorStr = theme[shimmerColor]
const baseRGB = baseColorStr ? parseRGB(baseColorStr) : null
const shimmerRGB = shimmerColorStr ? parseRGB(shimmerColorStr) : null
if (baseRGB && shimmerRGB) {
// Smooth interpolation between colors
const interpolated = interpolateColor(baseRGB, shimmerRGB, flashOpacity)
return {char}
}
// Fallback for ANSI themes: binary switch
const shouldUseShimmer = flashOpacity > 0.5
return (
{char}
)
}