AI Input - Mechanical & Steampunk
A dynamic, steampunk-inspired AI input component with animated effects, recording, and sending actions.
The AIInputIndustrial component provides a futuristic, industrial-style text input with built-in send and record controls.
It uses Framer Motion for animations and supports dynamic props for customization.
INDUSTRIAL AI UNIT
MODEL: IA-2024 | STATUS: READY
TEMP: 98°C
PRESSURE: 100 PSI
READY
GSAP
Framer Motion
Import
import AIInputIndustrial from "@/components/ui/ai-input-industrial"Basic Usage
<AIInputIndustrial />Example Usage
This example shows how to integrate AIInputIndustrial with a backend or external API.
When the user sends a command, it will make a fetch request to /api/chat and display the response.
"use client"
import { useState } from "react"
import AIInputIndustrial from "@/components/ui/ai-input-industrial"
export default function IndustrialChatExample() {
const [messages, setMessages] = useState<{ role: string; text: string }[]>([])
const handleSend = async (message: string) => {
// Add user message
setMessages((prev) => [...prev, { role: "user", text: message }])
try {
const res = await fetch("/api/chat", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ message }),
})
const data = await res.json()
// Add AI response
setMessages((prev) => [...prev, { role: "ai", text: data.reply }])
} catch (err) {
setMessages((prev) => [
...prev,
{ role: "ai", text: "⚠️ Error: Failed to fetch response" },
])
}
}
return (
<div className="space-y-6">
<div className="p-4 rounded-lg border border-gray-700 bg-gray-900 text-gray-200 font-mono">
{messages.length === 0 && (
<p className="text-gray-500">No messages yet...</p>
)}
{messages.map((m, i) => (
<p key={i} className={m.role === "user" ? "text-orange-400" : "text-green-400"}>
<strong>{m.role.toUpperCase()}:</strong> {m.text}
</p>
))}
</div>
<AIInputIndustrial
placeholder="Enter your industrial command..."
onSend={handleSend}
temperature={95}
pressure={110}
status="READY"
/>
</div>
)
}