Tooltip
Hover yoki fokusda chiqadigan qisqa izoh; klaviatura yorlig'i bilan.
'use client';
import { IconButton, Tooltip } from '@akhatmirzo/ui';
import { Copy, Heart, Share2, Trash2 } from 'lucide-react';
export default function TooltipBasic() {
return (
<div className="flex flex-wrap items-center gap-2">
<Tooltip content="Nusxa olish" shortcut={['mod', 'C']}>
<IconButton variant="outline" aria-label="Nusxa olish">
<Copy />
</IconButton>
</Tooltip>
<Tooltip content="Ulashish">
<IconButton variant="outline" aria-label="Ulashish">
<Share2 />
</IconButton>
</Tooltip>
<Tooltip content="Sevimlilarga qo'shish">
<IconButton variant="outline" aria-label="Sevimlilarga qo'shish">
<Heart />
</IconButton>
</Tooltip>
<Tooltip content="O'chirish" shortcut={['Del']}>
<IconButton variant="ghost" aria-label="O'chirish">
<Trash2 />
</IconButton>
</Tooltip>
</div>
);
}
Import
import { Tooltip, TooltipProvider } from '@akhatmirzo/ui';Qachon ishlatish
- Ikonka tugmani tushuntirish —
IconButtonning vazifasini so'z bilan aytish va qisqa yo'lni (⌘C) ko'rsatish uchun eng ko'p ishlatiladi. - Faqat qisqa matn. Ichida tugma yoki havola bo'lmaydi — interaktiv kontent kerak bo'lsa,
Popoveroling. - Muhim ma'lumotni yashirmang. Telefonda tooltip umuman chiqmaydi, shuning uchun usiz ham tushunarli bo'lmagan matnni sahifaning o'ziga yozing.
aria-labelning o'rnini bosmaydi. Ikonka tugmaga baribiraria-labelyozing; tooltip — ko'zi ko'radigan foydalanuvchi uchun qo'shimcha.
TooltipProvider
Ilova ildiziga bitta TooltipProvider qo'ying: barcha tooltiplar umumiy kechikishni bo'lishadi
va biridan ikkinchisiga o'tganda kechikishsiz ochiladi (yuqoridagi misolda tugmalar orasida
yurib ko'ring). Provider bo'lmasa ham tooltip ishlaydi — har biri o'z provider'ini yaratadi, faqat
bu "kechikishsiz o'tish" yo'qoladi.
'use client';
import { TooltipProvider } from '@akhatmirzo/ui';
import type { ReactNode } from 'react';
export function Providers({ children }: { children: ReactNode }) {
return <TooltipProvider delay={300}>{children}</TooltipProvider>;
}Tomonlar
side — top (standart), right, bottom, left. Ekran chetiga yetsa, tooltip o'zi teskari
tomonga o'tadi.
'use client';
import { Button, Tooltip } from '@akhatmirzo/ui';
export default function TooltipSides() {
return (
<div className="flex flex-wrap items-center gap-3">
{(['top', 'right', 'bottom', 'left'] as const).map((side) => (
<Tooltip key={side} content={`Tomon: ${side}`} side={side}>
<Button variant="outline">{side}</Button>
</Tooltip>
))}
</div>
);
}
Kechikish va uzun matn
delay — ochilishdan oldingi kutish, ms. Standart qiymat provider'dan olinadi (300). Matn 240px
dan uzun bo'lsa, keyingi qatorga o'raladi — lekin tooltip matni bir-ikki qatordan oshmagani
ma'qul.
'use client';
import { Button, Tooltip } from '@akhatmirzo/ui';
export default function TooltipDelay() {
return (
<div className="flex flex-wrap items-center gap-3">
<Tooltip content="Darhol chiqadi" delay={0}>
<Button>delay=0</Button>
</Tooltip>
<Tooltip content="Bir soniya kutadi" delay={1000}>
<Button>delay=1000</Button>
</Tooltip>
<Tooltip content="Uzun izoh 240px dan oshsa, keyingi qatorga o'raladi: buyurtma holati har 5 daqiqada yangilanadi.">
<Button>Uzun matn</Button>
</Tooltip>
</div>
);
}
O'chirilgan tugmada
O'chirilgan (disabled) tugma hodisalarni qabul qilmaydi, shuning uchun tooltip unga to'g'ridan-
to'g'ri ishlamaydi. Tugmani tabIndex={0} li span ga o'rang — klaviatura foydalanuvchisi ham
sababni ko'radi.
'use client';
import { Button, Tooltip } from '@akhatmirzo/ui';
export default function TooltipDisabledButton() {
return (
<Tooltip content="Ruxsat yo'q: faqat administrator saqlay oladi">
<span tabIndex={0} className="focus-ring inline-flex rounded-lg">
<Button variant="primary" disabled>
Saqlash
</Button>
</span>
</Tooltip>
);
}
Boshqariladigan rejim va disabled
open + onOpenChange bilan tooltipni koddan ochasiz. disabled tooltipni vaqtincha o'chiradi —
trigger o'zgarishsiz qoladi. content bo'sh bo'lsa ham tooltip chizilmaydi.
'use client';
import { Button, Tooltip } from '@akhatmirzo/ui';
import { useState } from 'react';
export default function TooltipControlled() {
const [open, setOpen] = useState(false);
return (
<div className="flex flex-wrap items-center gap-3">
<Button variant="outline" onClick={() => setOpen((o) => !o)}>
{open ? 'Yashirish' : "Ko'rsatish"}
</Button>
<Tooltip content="Boshqariladigan tooltip" open={open} onOpenChange={setOpen}>
<Button>Nishon</Button>
</Tooltip>
<Tooltip content="Bu matn chiqmaydi" disabled>
<Button>disabled</Button>
</Tooltip>
</div>
);
}
Props
Tooltip
Radix Tooltip.Content ning qolgan prop'lari (alignOffset, avoidCollisions,
onEscapeKeyDown ...) va className tooltip paneliga uzatiladi.
| Prop | Tip | Standart | Tavsif |
|---|---|---|---|
contentmajburiy | ReactNode | — | Qisqa matn. Bo'sh bo'lsa — tooltip chiqmaydi |
childrenmajburiy | ReactElement | — | Trigger — ref va hodisalarni qabul qiladigan bitta element |
side | 'top' | 'right' | 'bottom' | 'left' | 'top' | Qaysi tomonda chiqadi |
align | 'start' | 'center' | 'end' | 'center' | Trigger bo'ylab tekislash |
sideOffset | number | 6 | Triggerdan masofa, px |
collisionPadding | number | 8 | Ekran chetidan minimal masofa, px |
delay | number | — | Ochilish kechikishi, ms (standart — provider'dan yoki 300) |
shortcut | string[] | — | Matn yonida Kbd: ['mod', 'C'] |
open | boolean | — | Boshqariladigan rejim |
defaultOpen | boolean | false | Boshida ochiq |
onOpenChange | (open: boolean) => void | — | Ochilib-yopilganda |
disabled | boolean | false | Tooltipni vaqtincha o'chiradi |
TooltipProvider
Tooltip.Provider nomi bilan ham mavjud.
| Prop | Tip | Standart | Tavsif |
|---|---|---|---|
delay | number | 300 | Ochilish kechikishi, ms |
skipDelay | number | 300 | Shu vaqt ichida qo'shni tooltip kechikishsiz ochiladi, ms |
childrenmajburiy | ReactNode | — | Ilova |
Data atributlari
| Atribut | Qayerda | Qiymat |
|---|---|---|
data-state | panel | delayed-open · instant-open · closed |
data-side | panel | top · right · bottom · left |
data-slot | panel | tooltip |
Klaviatura
| Tugma | Harakat |
|---|---|
Tab (fokus) | Trigger fokus olganda tooltip chiqadi |
Esc | Tooltipni yopadi |
Accessibility
- Bog'lanish. Ochiq paytda trigger
aria-describedbyorqali tooltip matniga ulanadi — ekran o'quvchi tugma nomidan keyin izohni o'qiydi. - Klaviatura fokusida ham chiqadi, faqat sichqoncha uchun emas.
- Sensorli qurilmalarda (hover yo'q, qo'pol ko'rsatkich) tooltip ochilmaydi — barmoq bosishi tugmaning o'zini ishga tushiradi.
- Rang. Teskari rangda chiziladi (
bg-text,text-background) — yorug' va qorong'i rejimda kontrast saqlanadi. - Kamroq harakat.
prefers-reduced-motionda faqat shaffoflik animatsiyasi.