SPB Git forge
38commits 1branches 0releases
338.7 MBsize
maindefault branch
4 h agolast push
HTML 53.9% TypeScript 44.5% JavaScript 0.6% SQL 0.5%
1.2 KB · 34 lines tsx
Raw Blame History
1import { cn } from "./cn";23export function Skeleton({ className, style }: { className?: string; style?: React.CSSProperties }) {4  return <span aria-hidden className={cn("block animate-pulse-soft rounded-xs bg-surface-3", className)} style={style} />;5}67export function SkeletonText({ lines = 3, className }: { lines?: number; className?: string }) {8  return (9    <div className={cn("flex flex-col gap-2", className)} aria-hidden>10      {Array.from({ length: lines }).map((_, i) => (11        <Skeleton key={i} className="h-3" style={{ width: `${100 - (i % 3) * 18}%` }} />12      ))}13    </div>14  );15}1617export function SkeletonRows({ rows = 6, className }: { rows?: number; className?: string }) {18  return (19    <div className={cn("divide-y divide-hair", className)} aria-hidden>20      {Array.from({ length: rows }).map((_, i) => (21        <div key={i} className="flex items-center gap-3 py-2.5">22          <Skeleton className="size-2 rounded-full" />23          <Skeleton className="h-3 flex-1" style={{ maxWidth: `${55 + (i % 4) * 10}%` }} />24          <Skeleton className="h-3 w-12" />25        </div>26      ))}27    </div>28  );29}3031export function SkeletonBlock({ className }: { className?: string }) {32  return <Skeleton className={cn("h-40 w-full", className)} />;33}34