Skeleton
Yuklanayotgan kontentning o'rnini egallab turadigan shimmer bloklar va matn qatorlari.
'use client';
import { Avatar, Button, Card, Skeleton } from '@akhatmirzo/ui';
import { useState } from 'react';
export default function SkeletonLoadingCard() {
const [loading, setLoading] = useState(true);
return (
<div className="flex w-full max-w-md flex-col items-start gap-3">
<Button size="sm" onClick={() => setLoading((l) => !l)}>
{loading ? "Kontentni ko'rsatish" : 'Yuklanish holati'}
</Button>
<Card variant="outline" className="w-full" aria-busy={loading}>
<div className="flex items-center gap-3">
{loading ? (
<Skeleton variant="circle" className="size-10" />
) : (
<Avatar name="Malika Rahimova" />
)}
<div className="flex flex-1 flex-col gap-2">
{loading ? (
<Skeleton className="h-4 w-2/5" />
) : (
<b className="text-sm">Malika Rahimova</b>
)}
{loading ? (
<Skeleton className="h-3 w-1/4" />
) : (
<span className="text-xs text-text-muted">2 soat oldin</span>
)}
</div>
</div>
{loading ? (
<Skeleton.Text lines={3} />
) : (
<p className="text-sm">
Buyurtma vaqtida yetib keldi, kuryer juda xushmuomala edi. Keyingi safar ham shu
do'kondan olaman.
</p>
)}
</Card>
</div>
);
}
Import
import { Skeleton } from '@akhatmirzo/ui';Qachon ishlatish
- Kontentning shakli oldindan ma'lum bo'lsa — kartalar, ro'yxatlar, profil, jadval. Yuklangandan keyin sahifa "sakramaydi".
- Haqiqiy kontentga o'xshatib quring: avatar o'rniga doira, sarlavha o'rniga qisqa qator,
matn o'rniga
Skeleton.Text. - Shakli noma'lum yoki qisqa kutishlar (tugma bosilgandan keyin) uchun
SpinneryokiButtondagiloadingmos. - Ota elementga
aria-busyqo'ying — skeletonlarning o'zi ekran o'quvchidan yashiringan.
Shakllar
O'lcham className orqali beriladi (h-4 w-32, size-10). variant="circle" — avatar o'rni
uchun doira; standart rect burchaklari yumaloqlangan to'rtburchak.
'use client';
import { Skeleton } from '@akhatmirzo/ui';
export default function SkeletonShapes() {
return (
<div className="flex flex-wrap items-center gap-4">
<Skeleton variant="circle" className="size-12" />
<Skeleton className="h-4 w-32" />
<Skeleton className="h-10 w-28 rounded-lg" />
</div>
);
}
Matn qatorlari
Skeleton.Text — lines ta qator, oxirgisi 60% kenglikda: haqiqiy paragrafga o'xshaydi.
'use client';
import { Skeleton } from '@akhatmirzo/ui';
export default function SkeletonTextDemo() {
return (
<div className="grid w-full max-w-lg grid-cols-1 gap-6 sm:grid-cols-2">
<Skeleton.Text lines={1} />
<Skeleton.Text lines={4} />
</div>
);
}
Props
Skeleton
Skeleton qolgan barcha <div> atributlarini qabul qiladi.
| Prop | Tip | Standart | Tavsif |
|---|---|---|---|
variant | 'rect' | 'circle' | 'rect' | circle — avatar o'rni uchun doira |
className | string | — | O'lcham va shakl: h-4 w-32, size-10, rounded-lg |
Skeleton.Text
SkeletonText nomi bilan ham eksport qilinadi. Qolgan <div> atributlarini qabul qiladi.
| Prop | Tip | Standart | Tavsif |
|---|---|---|---|
lines | number | 3 | Qatorlar soni; bittadan ko'p bo'lsa, oxirgisi 60% kenglikda |
Accessibility
aria-hidden="true"— skeletonlar ekran o'quvchiga ko'rinmaydi, bo'sh bloklar o'qilmaydi.- Yuklanish holatini ota elementda bildiring:
aria-busy={loading}(yuqoridagi misoldaCardda). Kerak bo'lsa, yashirin "Yuklanmoqda" matnini qo'shing. - Kamaytirilgan harakat. Tizimda "reduce motion" yoqilgan bo'lsa, shimmer o'rniga yumshoq pulsatsiya ishlatiladi.