Spaces:
Build error
Build error
Upload components/RobotShowcase.js with huggingface_hub
Browse files- components/RobotShowcase.js +143 -0
components/RobotShowcase.js
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { useState } from 'react';
|
| 2 |
+
import { Battery, Wifi, Cpu as CpuIcon, Activity } from 'lucide-react';
|
| 3 |
+
|
| 4 |
+
const robots = [
|
| 5 |
+
{
|
| 6 |
+
id: 1,
|
| 7 |
+
name: "Nexus One",
|
| 8 |
+
role: "Home Assistant",
|
| 9 |
+
description: "Perfect for daily chores, elderly care, and home security. Equipped with gentle touch sensors and emotional AI.",
|
| 10 |
+
stats: { battery: "48h", wifi: "6E", cpu: "Q1", activity: "Low" },
|
| 11 |
+
color: "from-blue-500 to-cyan-400"
|
| 12 |
+
},
|
| 13 |
+
{
|
| 14 |
+
id: 2,
|
| 15 |
+
name: "Nexus Pro",
|
| 16 |
+
role: "Industrial Worker",
|
| 17 |
+
description: "Heavy lifting, precision assembly, and hazardous environment exploration. Built with titanium alloy chassis.",
|
| 18 |
+
stats: { battery: "72h", wifi: "Mesh", cpu: "Q2", activity: "High" },
|
| 19 |
+
color: "from-orange-500 to-red-500"
|
| 20 |
+
},
|
| 21 |
+
{
|
| 22 |
+
id: 3,
|
| 23 |
+
name: "Nexus Medical",
|
| 24 |
+
role: "Surgical Assistant",
|
| 25 |
+
description: "Sub-millimeter precision for surgical procedures. Sterilizable exterior and advanced biometric scanning.",
|
| 26 |
+
stats: { battery: "24h", wifi: "Secure", cpu: "Q3", activity: "Med" },
|
| 27 |
+
color: "from-emerald-500 to-green-400"
|
| 28 |
+
}
|
| 29 |
+
];
|
| 30 |
+
|
| 31 |
+
export default function RobotShowcase() {
|
| 32 |
+
const [activeRobot, setActiveRobot] = useState(robots[0]);
|
| 33 |
+
|
| 34 |
+
return (
|
| 35 |
+
<section id="models" className="py-24 bg-surface relative">
|
| 36 |
+
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
| 37 |
+
<div className="text-center mb-16">
|
| 38 |
+
<h2 className="text-3xl md:text-5xl font-bold mb-4">Choose Your <span className="text-gradient">Companion</span></h2>
|
| 39 |
+
<p className="text-gray-400 max-w-2xl mx-auto">Select the model that fits your needs. From home assistance to industrial applications.</p>
|
| 40 |
+
</div>
|
| 41 |
+
|
| 42 |
+
<div className="grid grid-cols-1 lg:grid-cols-2 gap-12 items-center">
|
| 43 |
+
{/* Robot Visualizer */}
|
| 44 |
+
<div className="relative h-[500px] w-full glass-panel flex items-center justify-center overflow-hidden group">
|
| 45 |
+
<div className={`absolute inset-0 bg-gradient-to-br ${activeRobot.color} opacity-10 group-hover:opacity-20 transition-opacity duration-500`}></div>
|
| 46 |
+
|
| 47 |
+
{/* Abstract Robot Representation */}
|
| 48 |
+
<div className="relative z-10 animate-float">
|
| 49 |
+
<div className="w-64 h-96 bg-gradient-to-b from-gray-800 to-black rounded-[3rem] border border-white/20 shadow-2xl relative overflow-hidden flex flex-col items-center pt-12">
|
| 50 |
+
{/* Head */}
|
| 51 |
+
<div className="w-32 h-32 rounded-full bg-gray-900 border-2 border-primary/50 shadow-[0_0_30px_rgba(0,240,255,0.3)] mb-8 flex items-center justify-center">
|
| 52 |
+
<div className="w-24 h-8 bg-primary/20 rounded-full flex items-center justify-center space-x-2">
|
| 53 |
+
<div className="w-2 h-2 bg-primary rounded-full animate-pulse"></div>
|
| 54 |
+
<div className="w-2 h-2 bg-primary rounded-full animate-pulse" style={{ animationDelay: '0.2s'}}></div>
|
| 55 |
+
</div>
|
| 56 |
+
</div>
|
| 57 |
+
|
| 58 |
+
{/* Body Details */}
|
| 59 |
+
<div className="w-full px-8 space-y-4">
|
| 60 |
+
<div className="h-2 w-full bg-gray-800 rounded-full overflow-hidden">
|
| 61 |
+
<div className={`h-full bg-gradient-to-r ${activeRobot.color} w-3/4`}></div>
|
| 62 |
+
</div>
|
| 63 |
+
<div className="h-2 w-2/3 mx-auto bg-gray-800 rounded-full"></div>
|
| 64 |
+
<div className="h-2 w-1/2 mx-auto bg-gray-800 rounded-full"></div>
|
| 65 |
+
</div>
|
| 66 |
+
|
| 67 |
+
{/* Chest Display */}
|
| 68 |
+
<div className="mt-12 w-40 h-24 bg-black/50 rounded-xl border border-white/10 flex items-center justify-center">
|
| 69 |
+
<Activity className="text-primary h-8 w-8 animate-pulse" />
|
| 70 |
+
</div>
|
| 71 |
+
</div>
|
| 72 |
+
</div>
|
| 73 |
+
</div>
|
| 74 |
+
|
| 75 |
+
{/* Controls & Info */}
|
| 76 |
+
<div className="space-y-8">
|
| 77 |
+
<div className="flex space-x-4 overflow-x-auto pb-4">
|
| 78 |
+
{robots.map((robot) => (
|
| 79 |
+
<button
|
| 80 |
+
key={robot.id}
|
| 81 |
+
onClick={() => setActiveRobot(robot)}
|
| 82 |
+
className={`flex-shrink-0 px-6 py-4 rounded-xl border transition-all duration-300 text-left min-w-[160px] ${
|
| 83 |
+
activeRobot.id === robot.id
|
| 84 |
+
? `bg-white/10 border-primary text-white`
|
| 85 |
+
: 'bg-transparent border-white/10 text-gray-400 hover:border-white/30'
|
| 86 |
+
}`}
|
| 87 |
+
>
|
| 88 |
+
<div className="font-bold text-lg">{robot.name}</div>
|
| 89 |
+
<div className="text-xs opacity-70">{robot.role}</div>
|
| 90 |
+
</button>
|
| 91 |
+
))}
|
| 92 |
+
</div>
|
| 93 |
+
|
| 94 |
+
<div className="glass-panel p-8">
|
| 95 |
+
<h3 className="text-2xl font-bold mb-2">{activeRobot.name}</h3>
|
| 96 |
+
<div className="inline-block px-3 py-1 bg-primary/10 text-primary text-xs font-mono rounded mb-4">
|
| 97 |
+
{activeRobot.role.toUpperCase()}
|
| 98 |
+
</div>
|
| 99 |
+
<p className="text-gray-300 mb-8 leading-relaxed">
|
| 100 |
+
{activeRobot.description}
|
| 101 |
+
</p>
|
| 102 |
+
|
| 103 |
+
<div className="grid grid-cols-2 gap-4 mb-8">
|
| 104 |
+
<div className="bg-black/20 p-4 rounded-lg flex items-center space-x-3">
|
| 105 |
+
<Battery className="text-primary h-5 w-5" />
|
| 106 |
+
<div>
|
| 107 |
+
<div className="text-xs text-gray-500">Battery Life</div>
|
| 108 |
+
<div className="font-mono font-bold">{activeRobot.stats.battery}</div>
|
| 109 |
+
</div>
|
| 110 |
+
</div>
|
| 111 |
+
<div className="bg-black/20 p-4 rounded-lg flex items-center space-x-3">
|
| 112 |
+
<Wifi className="text-primary h-5 w-5" />
|
| 113 |
+
<div>
|
| 114 |
+
<div className="text-xs text-gray-500">Connectivity</div>
|
| 115 |
+
<div className="font-mono font-bold">{activeRobot.stats.wifi}</div>
|
| 116 |
+
</div>
|
| 117 |
+
</div>
|
| 118 |
+
<div className="bg-black/20 p-4 rounded-lg flex items-center space-x-3">
|
| 119 |
+
<CpuIcon className="text-primary h-5 w-5" />
|
| 120 |
+
<div>
|
| 121 |
+
<div className="text-xs text-gray-500">Processor</div>
|
| 122 |
+
<div className="font-mono font-bold">{activeRobot.stats.cpu}</div>
|
| 123 |
+
</div>
|
| 124 |
+
</div>
|
| 125 |
+
<div className="bg-black/20 p-4 rounded-lg flex items-center space-x-3">
|
| 126 |
+
<Activity className="text-primary h-5 w-5" />
|
| 127 |
+
<div>
|
| 128 |
+
<div className="text-xs text-gray-500">Activity Level</div>
|
| 129 |
+
<div className="font-mono font-bold">{activeRobot.stats.activity}</div>
|
| 130 |
+
</div>
|
| 131 |
+
</div>
|
| 132 |
+
</div>
|
| 133 |
+
|
| 134 |
+
<button className="w-full py-4 bg-white text-dark font-bold rounded-lg hover:bg-gray-200 transition-colors">
|
| 135 |
+
Configure {activeRobot.name}
|
| 136 |
+
</button>
|
| 137 |
+
</div>
|
| 138 |
+
</div>
|
| 139 |
+
</div>
|
| 140 |
+
</div>
|
| 141 |
+
</section>
|
| 142 |
+
);
|
| 143 |
+
}
|