80 lines
2.9 KiB
TypeScript
80 lines
2.9 KiB
TypeScript
import { Skeleton } from "@/components/ui/skeleton"
|
|
|
|
export default function ChatLoading() {
|
|
return (
|
|
<div className="h-[calc(100vh-8rem)] flex">
|
|
{/* Sidebar */}
|
|
<div className="w-80 border-r bg-white flex flex-col">
|
|
<div className="p-4 border-b">
|
|
<div className="flex items-center justify-between mb-4">
|
|
<Skeleton className="h-6 w-24" />
|
|
<Skeleton className="h-8 w-8" />
|
|
</div>
|
|
<Skeleton className="h-10 w-full" />
|
|
</div>
|
|
|
|
<div className="flex-1 overflow-y-auto">
|
|
{[...Array(5)].map((_, i) => (
|
|
<div key={i} className="p-4 border-b">
|
|
<div className="flex items-start space-x-3">
|
|
<Skeleton className="h-12 w-12 rounded-full" />
|
|
<div className="flex-1">
|
|
<div className="flex items-center justify-between">
|
|
<Skeleton className="h-4 w-24" />
|
|
<Skeleton className="h-3 w-12" />
|
|
</div>
|
|
<Skeleton className="h-3 w-32 mt-2" />
|
|
<Skeleton className="h-3 w-16 mt-1" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
))}
|
|
</div>
|
|
</div>
|
|
|
|
{/* Main Chat Area */}
|
|
<div className="flex-1 flex flex-col">
|
|
{/* Header */}
|
|
<div className="p-4 border-b bg-white">
|
|
<div className="flex items-center justify-between">
|
|
<div className="flex items-center space-x-3">
|
|
<Skeleton className="h-10 w-10 rounded-full" />
|
|
<div>
|
|
<Skeleton className="h-4 w-32" />
|
|
<Skeleton className="h-3 w-20 mt-1" />
|
|
</div>
|
|
</div>
|
|
<div className="flex items-center space-x-2">
|
|
<Skeleton className="h-8 w-8" />
|
|
<Skeleton className="h-8 w-8" />
|
|
<Skeleton className="h-8 w-8" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{/* Messages */}
|
|
<div className="flex-1 overflow-y-auto p-4 space-y-4 bg-gray-50">
|
|
{[...Array(6)].map((_, i) => (
|
|
<div key={i} className={`flex ${i % 2 === 0 ? "justify-start" : "justify-end"}`}>
|
|
<div className={`max-w-xs lg:max-w-md p-4 rounded-lg ${i % 2 === 0 ? "bg-white" : "bg-blue-600"}`}>
|
|
<Skeleton className={`h-4 w-48 ${i % 2 !== 0 ? "bg-blue-500" : ""}`} />
|
|
<Skeleton className={`h-3 w-16 mt-2 ${i % 2 !== 0 ? "bg-blue-500" : ""}`} />
|
|
</div>
|
|
</div>
|
|
))}
|
|
</div>
|
|
|
|
{/* Input */}
|
|
<div className="p-4 border-t bg-white">
|
|
<div className="flex items-end space-x-2">
|
|
<Skeleton className="h-8 w-8" />
|
|
<Skeleton className="h-20 flex-1" />
|
|
<Skeleton className="h-8 w-8" />
|
|
<Skeleton className="h-8 w-16" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|