Get Started
Components
- Accordion
- Alert
- Alert Dialog
- Aspect Ratio
- Attachment
- Avatar
- Badge
- Breadcrumb
- Bubble
- Button
- Button Group
- Card
- Checkbox
- Collapsible
- Combobox
- Context Menu
- Date Picker (Lite)
- Dialog
- Direction
- Drawer
- Dropdown Menu
- Empty
- Field
- Hover Card
- Input
- Input Group
- Input OTP (Lite)
- Item
- Kbd
- Label
- Marker
- Menubar
- Message
- Native Select
- Navigation Menu
- Pagination
- Popover
- Progress
- Radio Group
- Scroll Area
- Select
- Separator
- Sheet
- Sidebar
- Skeleton
- Slider
- Spinner
- Switch
- Table
- Tabs
- Textarea
- Toast
- Toggle
- Toggle Group
- Tooltip
import { Skeleton } from "@/components/ui/skeleton"
export function SkeletonDemo() {
return (
<div class="flex items-center gap-4">
<Skeleton class="h-12 w-12 rounded-full" />
<div class="space-y-2">
<Skeleton class="h-4 w-[250px]" />
<Skeleton class="h-4 w-[200px]" />
</div>
</div>
)
}Installation
pnpm dlx shadcnui-hono-jsx@latest add skeletonnpx shadcnui-hono-jsx@latest add skeletonyarn dlx shadcnui-hono-jsx@latest add skeletonbunx shadcnui-hono-jsx@latest add skeletonUsage
import { Skeleton } from "@/components/ui/skeleton"<Skeleton class="h-[20px] w-[100px] rounded-full" />Avatar
import { Skeleton } from "@/components/ui/skeleton"
export function SkeletonAvatar() {
return (
<div class="flex w-fit items-center gap-4">
<Skeleton class="size-10 shrink-0 rounded-full" />
<div class="grid gap-2">
<Skeleton class="h-4 w-[150px]" />
<Skeleton class="h-4 w-[100px]" />
</div>
</div>
)
}Card
import { Card, CardContent, CardHeader } from "@/components/ui/card"
import { Skeleton } from "@/components/ui/skeleton"
export function SkeletonCard() {
return (
<Card class="w-full max-w-xs">
<CardHeader>
<Skeleton class="h-4 w-2/3" />
<Skeleton class="h-4 w-1/2" />
</CardHeader>
<CardContent>
<Skeleton class="aspect-video w-full" />
</CardContent>
</Card>
)
}Text
import { Skeleton } from "@/components/ui/skeleton"
export function SkeletonText() {
return (
<div class="flex w-full max-w-xs flex-col gap-2">
<Skeleton class="h-4 w-full" />
<Skeleton class="h-4 w-full" />
<Skeleton class="h-4 w-3/4" />
</div>
)
}Form
import { Skeleton } from "@/components/ui/skeleton"
export function SkeletonForm() {
return (
<div class="flex w-full max-w-xs flex-col gap-7">
<div class="flex flex-col gap-3">
<Skeleton class="h-4 w-20" />
<Skeleton class="h-8 w-full" />
</div>
<div class="flex flex-col gap-3">
<Skeleton class="h-4 w-24" />
<Skeleton class="h-8 w-full" />
</div>
<Skeleton class="h-8 w-24" />
</div>
)
}Table
import { Skeleton } from "@/components/ui/skeleton"
export function SkeletonTable() {
return (
<div class="flex w-full max-w-sm flex-col gap-2">
{Array.from({ length: 5 }).map((_, index) => (
<div class="flex gap-4" key={index}>
<Skeleton class="h-4 flex-1" />
<Skeleton class="h-4 w-24" />
<Skeleton class="h-4 w-20" />
</div>
))}
</div>
)
}RTL
To enable RTL support in shadcn/ui, see the RTL configuration guide.
// This example sets dir and uses useTranslation because this site is not RTL.
// In an RTL app you won't need them; see the RTL guide.
import {
type Translations,
useTranslation,
} from "@/components/language-selector"
import { Skeleton } from "@/components/ui/skeleton"
const translations: Translations = {
en: {
dir: "ltr",
values: {},
},
ar: {
dir: "rtl",
values: {},
},
he: {
dir: "rtl",
values: {},
},
}
export function SkeletonRtl() {
const { dir } = useTranslation(translations, "ar")
return (
<div class="flex items-center gap-4" dir={dir}>
<Skeleton class="h-12 w-12 rounded-full" />
<div class="space-y-2">
<Skeleton class="h-4 w-[250px]" />
<Skeleton class="h-4 w-[200px]" />
</div>
</div>
)
}Notes
- Accepts
classinstead ofclassName. - Upstream documentation: shadcn/ui Skeleton. See also Differences from shadcn/ui.