Components / AI Chat Interfaces
AI Streaming Text
A typewriter-style streaming text component that simulates token-by-token AI response generation with cursor animation.
Components / AI Chat Interfaces
A typewriter-style streaming text component that simulates token-by-token AI response generation with cursor animation.
"use client";
import React, { useState, useEffect } from "react";
interface StreamingTextProps {
text: string;
speed?: number;
onComplete?: () => void;
}
export default function AIStreamingText({ text, speed = 30, onComplete }: StreamingTextProps) {
const [displayed, setDisplayed] = useState("");
const [isComplete, setIsComplete] = useState(false);
useEffect(() => {
setDisplayed("");
setIsComplete(false);
let i = 0;
const interval = setInterval(() => {
if (i < text.length) {
setDisplayed(text.slice(0, i + 1));
i++;
} else {
clearInterval(interval);
setIsComplete(true);
onComplete?.();
}
}, speed);
return () => clearInterval(interval);
}, [text, speed]);
return (
<div className="text-sm leading-relaxed text-zinc-800 dark:text-zinc-200">
{displayed}
{!isComplete && (
<span className="inline-block w-2 h-4 ml-0.5 bg-zinc-800 dark:bg-zinc-200 animate-pulse" />
)}
</div>
);
}react npm install react