33 lines
686 B
TypeScript
33 lines
686 B
TypeScript
|
|
import { cn } from '@/lib/utils'
|
||
|
|
|
||
|
|
interface SkeletonProps {
|
||
|
|
className?: string
|
||
|
|
}
|
||
|
|
|
||
|
|
export function Skeleton({ className }: SkeletonProps) {
|
||
|
|
return (
|
||
|
|
<div
|
||
|
|
className={cn(
|
||
|
|
'animate-pulse rounded-[14px] bg-text-secondary/8',
|
||
|
|
className
|
||
|
|
)}
|
||
|
|
/>
|
||
|
|
)
|
||
|
|
}
|
||
|
|
|
||
|
|
export function SkeletonText({ lines = 1, className }: { lines?: number; className?: string }) {
|
||
|
|
return (
|
||
|
|
<div className={cn('space-y-2', className)}>
|
||
|
|
{Array.from({ length: lines }).map((_, i) => (
|
||
|
|
<Skeleton
|
||
|
|
key={i}
|
||
|
|
className={cn(
|
||
|
|
'h-4',
|
||
|
|
i === lines - 1 && lines > 1 ? 'w-3/4' : 'w-full'
|
||
|
|
)}
|
||
|
|
/>
|
||
|
|
))}
|
||
|
|
</div>
|
||
|
|
)
|
||
|
|
}
|