Alert
Sahifa ichidagi doimiy xabar: 6 rang, 3 variant, harakat tugmasi, yopish va banner rejimi.
'use client';
import { Alert } from '@akhatmirzo/ui';
export default function AlertColors() {
return (
<div className="flex w-full max-w-xl flex-col gap-3">
<Alert title="Yangi versiya chiqdi">
Sahifani yangilang — o'zgarishlar darhol kuchga kiradi.
</Alert>
<Alert color="success" title="Buyurtma qabul qilindi">
Kuryer bugun 18:00 gacha qo'ng'iroq qiladi.
</Alert>
<Alert color="warning" title="Obuna 3 kundan keyin tugaydi">
To'lovni hozir qilsangiz, ma'lumotlaringiz saqlanib qoladi.
</Alert>
<Alert color="danger" title="To'lov o'tmadi">
Kartada mablag' yetarli emas. Boshqa kartani sinab ko'ring.
</Alert>
<Alert color="primary" title="Maslahat">
Tez qidirish uchun Ctrl + K ni bosing.
</Alert>
<Alert color="neutral" title="Qoralama saqlandi" />
</div>
);
}
Import
import { Alert } from '@akhatmirzo/ui';Qachon ishlatish
- Sahifada qolishi kerak bo'lgan xabar uchun — obuna tugashi, to'lov xatosi, formadagi umumiy muammo. Alert o'zi yo'qolmaydi va kontent oqimida turadi.
- Qisqa, vaqtinchalik xabar uchun — "Saqlandi", "Nusxa olindi" —
Toastishlating. - Rangni ma'noga moslang:
danger— xato,warning— ogohlantirish,success— muvaffaqiyat,info— ma'lumot. Sarlavha muammoni o'zi aytsin — faqat rangga tayanmang. - Bitta harakat yetarli — "Qayta urinish", "To'lash". Ko'p tugmali xabar o'rniga
Dialogni ko'rib chiqing. - Yopishni ilova boshqaradi —
onCloseda Alert'ni o'zingiz olib tashlaysiz.
Ranglar
color: info (standart), neutral, primary, success, warning, danger. Har bir rangga
mos ichki ikonka bor: ⓘ, ✓, △, ⊗. O'z ikonkangizni icon bilan bering, icon={false} —
ikonkasiz.
Variantlar
variant: soft (standart) — och fon, outline — rangli chegara va oddiy fon, solid — to'q
fon, eng ko'p e'tibor tortadi.
'use client';
import { Alert } from '@akhatmirzo/ui';
export default function AlertVariants() {
return (
<div className="flex w-full max-w-xl flex-col gap-3">
<Alert color="success" variant="soft" title="Soft">
Yumshoq fon — standart ko'rinish.
</Alert>
<Alert color="success" variant="outline" title="Outline">
Rangli chegara va oddiy fon.
</Alert>
<Alert color="success" variant="solid" title="Solid">
To'q fon — eng ko'p e'tibor tortadi.
</Alert>
</div>
);
}
Harakat va yopish
action — o'ng tomondagi tugma (tor ekranda matn ostiga tushadi). onClose berilsa, ✕ tugmasi
chiqadi.
'use client';
import { Alert, Button } from '@akhatmirzo/ui';
import { useState } from 'react';
export default function AlertActions() {
const [open, setOpen] = useState(true);
if (!open) {
return (
<Button size="sm" onClick={() => setOpen(true)}>
Xabarni qaytarish
</Button>
);
}
return (
<Alert
className="max-w-xl"
color="danger"
title="To'lov o'tmadi"
action={
<Button size="sm" variant="outline">
Qayta urinish
</Button>
}
onClose={() => setOpen(false)}
>
Bank to'lovni rad etdi. Karta ma'lumotlarini tekshiring.
</Alert>
);
}
Banner
banner — sahifa tepasi uchun: burchaklar to'g'ri, faqat pastki chegara, kontent markazda.
'use client';
import { Alert, Button } from '@akhatmirzo/ui';
import { useState } from 'react';
export default function AlertBanner() {
const [open, setOpen] = useState(true);
return (
<div className="w-full overflow-hidden rounded-lg border border-border bg-surface">
{open && (
<Alert banner color="primary" onClose={() => setOpen(false)}>
Bugun 23:00 dan 01:00 gacha texnik ishlar olib boriladi.
</Alert>
)}
<div className="flex items-center justify-between gap-3 p-6 text-sm text-text-muted">
Sahifa kontenti
{!open && (
<Button size="sm" onClick={() => setOpen(true)}>
Qaytarish
</Button>
)}
</div>
</div>
);
}
Props
Alert qolgan barcha <div> atributlarini qabul qiladi (color va title dan tashqari — ular
prop sifatida band).
| Prop | Tip | Standart | Tavsif |
|---|---|---|---|
color | 'neutral' | 'primary' | 'success' | 'warning' | 'danger' | 'info' | 'info' | Rang (ma'no) va ichki ikonka |
variant | 'soft' | 'outline' | 'solid' | 'soft' | Ko'rinish |
title | ReactNode | — | Qalin sarlavha |
icon | ReactNode | false | — | Ikonka. Standart — rangga mos ichki SVG; false — ikonkasiz |
action | ReactNode | — | O'ng tomondagi harakat (tor ekranda matn ostida) |
onClose | () => void | — | Berilsa — ✕ tugmasi chiqadi |
banner | boolean | false | Sahifa tepasi uchun: radius 0, faqat pastki chegara, kontent markazda |
labels | { close?: string } | { close: 'Yopish' } | ✕ tugmasining aria-label matni |
Data atributlari
Ildiz elementda: data-color, data-variant, data-banner (banner rejimida). Stilni boshqa
elementga qo'llash uchun alertVariants ham eksport qilinadi.
Accessibility
- Rol rangga qarab:
dangervawarning—role="alert"(ekran o'quvchi darhol o'qiydi), qolganlari —role="status"(navbat bilan o'qiladi). Kerak bo'lsaroleni o'zingiz bering. - Rang yagona signal emas — ikonka va sarlavha ham xabar turini bildiradi. Ikonka
aria-hidden. - ✕ tugmasi — haqiqiy
<button>,Tabbilan fokuslanadi,Enter/Spacebilan bosiladi. Yorlig'ilabels.closebilan o'zgaradi. - Sahifa yuklanganda allaqachon bor Alert'lar e'lon qilinmasligi mumkin —
role="alert"asosan keyin paydo bo'lgan xabarlar uchun ishlaydi.