Esqueleto
Un bloque de marcador de posición que parpadea para tarjetas, avatares y tablas mientras se cargan los datos, con ese estilo neobrutalista de bordes gruesos.
import { Skeleton } from "@/components/ui/skeleton"
export function SkeletonDemo() {El skeleton es un marcador de posición pulsante que conserva la forma de una parte de la interfaz mientras se cargan sus datos. Es un único div —sin primitiva debajo— con animate-pulse, un fondo apagado y el borde grueso de la receta neobrutalista.
Recurre a este componente cuando:
- Tarjetas y listas — replica la disposición final para que el contenido aparezca sin provocar saltos.
- Avatares y medios — reserva el círculo o el recuadro de la miniatura antes de que llegue la imagen.
- Tablas y formularios — mantén filas y campos en su sitio durante una carga lenta.
Instalación#
pnpm dlx shadcn@latest add https://neobrutalism.com/r/base/skeleton.jsonnpx shadcn@latest add https://neobrutalism.com/r/base/skeleton.jsonyarn dlx shadcn@latest add https://neobrutalism.com/r/base/skeleton.jsonbunx --bun shadcn@latest add https://neobrutalism.com/r/base/skeleton.json
Copia y pega el siguiente código en tu proyecto.
import { cn } from "@/lib/utils"
function Skeleton({ className, ...props }: React.ComponentProps<"div">) {
return (
<div
data-slot="skeleton"
className={cn("animate-pulse rounded border-2 bg-muted", className)}
{...props}
/>
)
}
export { Skeleton }
Ajusta las rutas de importación a la estructura de tu proyecto.
Uso#
import { Skeleton } from "@/components/ui/skeleton"<Skeleton className="h-[20px] w-[100px] rounded-full" />Ejemplos#
Avatar#
import { Skeleton } from "@/components/ui/skeleton"
export function SkeletonAvatar() {Tarjeta#
import { Card, CardContent, CardHeader } from "@/components/ui/card"
import { Skeleton } from "@/components/ui/skeleton"
Texto#
import { Skeleton } from "@/components/ui/skeleton"
export function SkeletonText() {Formulario#
import { Skeleton } from "@/components/ui/skeleton"
export function SkeletonForm() {Tabla#
import { Skeleton } from "@/components/ui/skeleton"
export function SkeletonTable() {RTL#
Para activar el soporte RTL en Neobrutalism, consulta la guía de configuración de RTL.
"use client"
import * as React from "react"Accesibilidad#
Los skeletons son decorativos: ocúltalos de la tecnología de asistencia con aria-hidden="true" para que los lectores de pantalla no anuncien cajas vacías que parpadean. Comunica el estado de carga por otra vía: define aria-busy="true" en la región que se está cargando, o actualiza una región viva oculta visualmente («Cargando resultados…») que se limpie cuando aterrice el contenido. En cuanto se renderice el contenido real, elimina los skeletons del DOM por completo.