Progress
Jarayon ko'rsatkichi — chiziq (Progress) va doira (ProgressCircle): aniq va noaniq holat, 4 rang, 3 o'lcham.
'use client';
import { Progress } from '@akhatmirzo/ui';
export default function ProgressBasic() {
return (
<div className="flex w-full max-w-md flex-col gap-6">
<Progress value={64} label="Yuklanmoqda" showValue />
<Progress
value={3}
max={5}
label="Profil to'ldirildi"
showValue
formatValue={(value, max) => `${value} / ${max}`}
/>
</div>
);
}
Import
import { Progress, ProgressCircle } from '@akhatmirzo/ui';Qachon ishlatish
- Davomiyligi ma'lum jarayon uchun — fayl yuklash, eksport, profilni to'ldirish darajasi.
- Qancha vaqt ketishi noma'lum bo'lsa —
value={null}(noaniq holat) bering. - Qisqa kutish uchun (1 soniyadan kam) — progress shart emas; tugma ichida
Spinneryetarli. - Doira — kartochka, avatar yonida yoki joy tor bo'lganda; chiziq — ro'yxat va formalarda.
- Qiymatni matn bilan ham ko'rsating (
showValue) — foydalanuvchi aniq raqamni ko'rsin.
Noaniq holat
value berilmasa yoki null bo'lsa — chiziqda bo'lak chapdan o'ngga yuradi, doira aylanadi.
Harakatni kamaytirish yoqilgan bo'lsa (prefers-reduced-motion), faqat yumshoq miltillash qoladi.
'use client';
import { Progress, ProgressCircle } from '@akhatmirzo/ui';
export default function ProgressIndeterminate() {
return (
<div className="flex w-full max-w-md flex-col gap-6">
<Progress value={null} label="Fayl tayyorlanmoqda" />
<ProgressCircle value={null} label="Yuklanmoqda" />
</div>
);
}
Ranglar va o'lchamlar
color: primary (standart), success, warning, danger. size: sm — 4px, md — 8px,
lg — 12px chiziq.
'use client';
import { Progress } from '@akhatmirzo/ui';
export default function ProgressColorsSizes() {
return (
<div className="flex w-full max-w-md flex-col gap-5">
<Progress value={40} size="sm" aria-label="Kichik chiziq" />
<Progress value={55} color="success" aria-label="O'rta chiziq" />
<Progress value={80} size="lg" color="warning" aria-label="Katta chiziq" />
<Progress value={95} color="danger" label="Disk to'lib bormoqda" showValue />
</div>
);
}
ProgressCircle
Doira o'lchamlari: sm — 24px, md — 40px, lg — 64px. showValue qiymatni markazda
ko'rsatadi (sm da joy yetmaydi, shuning uchun ko'rsatilmaydi). Doirada label ko'rinmaydi —
ekran o'quvchi uchun nom bo'ladi.
'use client';
import { ProgressCircle } from '@akhatmirzo/ui';
export default function ProgressCircleDemo() {
return (
<div className="flex flex-wrap items-center gap-6">
<ProgressCircle value={30} size="sm" label="Sinxronlash" />
<ProgressCircle value={58} showValue label="Saqlash" />
<ProgressCircle value={72} size="lg" showValue label="Kurs" color="success" />
<ProgressCircle value={100} size="lg" showValue label="Tayyor" color="success" />
</div>
);
}
Jonli misol
Qiymat o'zgarganda chiziq 300ms davomida silliq siljiydi. Tugagach rangni success ga
almashtirish mumkin.
'use client';
import { Button, Progress } from '@akhatmirzo/ui';
import { useEffect, useState } from 'react';
export default function ProgressUpload() {
const [value, setValue] = useState(0);
const [running, setRunning] = useState(false);
useEffect(() => {
if (!running) return;
const id = setInterval(() => setValue((v) => Math.min(v + 8, 100)), 300);
return () => clearInterval(id);
}, [running]);
const done = value === 100;
if (done && running) setRunning(false);
return (
<div className="flex w-full max-w-md flex-col gap-4">
<Progress value={value} label="hisobot.pdf" showValue color={done ? 'success' : 'primary'} />
<Button
size="sm"
className="self-start"
disabled={running}
onClick={() => {
setValue(0);
setRunning(true);
}}
>
{done ? 'Qayta yuklash' : 'Yuklashni boshlash'}
</Button>
</div>
);
}
Props
Progress va ProgressCircle bir xil proplarni oladi va qolgan barcha <div> atributlarini
ildizga uzatadi (color dan tashqari).
| Prop | Tip | Standart | Tavsif |
|---|---|---|---|
value | number | null | null | Joriy qiymat (0 dan max gacha chegaralanadi); null — noaniq holat |
max | number | 100 | Maksimal qiymat |
color | 'primary' | 'success' | 'warning' | 'danger' | 'primary' | To'lgan qism rangi |
size | 'sm' | 'md' | 'lg' | 'md' | Chiziq: 4 / 8 / 12px; doira: 24 / 40 / 64px |
label | ReactNode | — | Chiziqda — ustida chapda; doirada — ko'rinmas nom (aria-label) |
showValue | boolean | false | Qiymat matni: chiziqda o'ngda, doirada markazda (sm doirada yo'q) |
formatValue | (value: number, max: number) => string | "64%" | Qiymat matni — ko'rinadigan va aria-valuetext uchun |
Data atributlari
Ildiz elementda: data-state (indeterminate · loading · complete), data-color,
data-size.
Accessibility
role="progressbar"—aria-valuemin,aria-valuemax,aria-valuenowvaaria-valuetext(formatValuenatijasi) avtomatik qo'yiladi.- Noaniq holatda
aria-valuenowvaaria-valuetextqo'yilmaydi — ekran o'quvchi buni "band" deb tushunadi. - Nom majburiy:
labelbering yokiaria-label/aria-labelledbyni o'zingiz qo'ying. Chiziqdalabelaria-labelledbyorqali ulanadi; doirada matnlilabelaria-labelbo'ladi. - Ko'rinadigan qiymat
aria-hidden— u allaqachonaria-valuetextda o'qiladi. - Harakatni kamaytirish yoqilganda siljish va aylanish o'chadi, faqat miltillash qoladi.