About
Queued, streaming, stopped, complete, and failed response states with stop and retry actions.
Built with React and Tailwind. Copy the prompt and paste it into Claude Code, Cursor or Lovable: your agent adds Uai Blocks Response Status to your project and fits it to your theme.
Code
How Uai Blocks Response Status is used: the demo's code. The component's own source comes with a free account.
Usage.tsx
"use client";
import {ThemeProvider as LibraryDemoThemeProvider} from "next-themes";
"use client";
import { type CSSProperties, useEffect, useState } from "react";
import {
ResponseStatus,
ResponseStatusActions,
ResponseStatusDetail,
ResponseStatusIndicator,
ResponseStatusLabel,
ResponseStatusRetry,
ResponseStatusStop,
type ResponseStatusValue,
type ResponseStatusVariant,
} from "@/components/ui/uai-response-status";
const demoButton: CSSProperties = {
height: 28,
padding: "0 12px",
border: 0,
borderRadius: 999,
background: "var(--uai-surface-raised)",
color: "var(--uai-text)",
font: "inherit",
fontSize: 12.5,
fontWeight: 500,
cursor: "pointer",
};
export function ResponseStatusPreview({ variant = "inline" }: { variant?: ResponseStatusVariant }) {
const [status, setStatus] = useState<ResponseStatusValue>("queued");
const [tokens, setTokens] = useState(0);
useEffect(() => {
if (status === "queued") {
const timer = window.setTimeout(() => setStatus("streaming"), 1200);
return () => window.clearTimeout(timer);
}
if (status !== "streaming") return;
if (tokens >= 420) {
setStatus("complete");
return;
}
const timer = window.setTimeout(() => setTokens((count) => count + 12), 80);
return () => window.clearTimeout(timer);
}, [status, tokens]);
const restart = () => {
setTokens(0);
setStatus("queued");
};
return (
<div
style={{ display: "grid", gap: 20, justifyItems: variant === "bar" ? "stretch" : "start" }}
>
<ResponseStatus variant={variant} status={status}>
<ResponseStatusIndicator />
<ResponseStatusLabel />
<ResponseStatusDetail>
{status === "queued" ? "2nd in queue" : `${tokens} tokens`}
</ResponseStatusDetail>
<ResponseStatusActions>
<ResponseStatusStop onClick={() => setStatus("stopped")} />
<ResponseStatusRetry onClick={restart} />
</ResponseStatusActions>
</ResponseStatus>
<div style={{ display: "flex", gap: 8, flexWrap: "wrap" }}>
<button type="button" onClick={restart} style={demoButton}>
Restart
</button>
<button type="button" onClick={() => setStatus("failed")} style={demoButton}>
Simulate failure
</button>
</div>
</div>
);
}
function SourceSpecimen(){return <ResponseStatusPreview/>}
export default function LibraryRegistryPreview(){return <LibraryDemoThemeProvider defaultTheme="dark" enableSystem={false}><div data-component-demo data-demo-theme="dark" data-theme="dark" className="dark" style={{background:"var(--background)",color:"var(--foreground)"}}><div className="relative w-full min-w-0 max-w-5xl min-h-[400px] flex items-center justify-center"><SourceSpecimen/></div></div></LibraryDemoThemeProvider>}







