Урок 21. Справочник: части, состояния, анимации

📁 Раздел: shadcn/ui ⏱️ Время изучения: ~55 мин 🎯 Сложность: Продвинутая

⚡ Кратко

Части оверлеев, состояния data-open/data-closed и классы анимаций из tw-animate-css.

Установка

npx shadcn@latest add dialog sheet dropdown-menu tabs popover tooltip sonner

Части компонентов

КомпонентЧасти
DialogDialogTrigger, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter, DialogClose
Sheetте же части плюс сторона появления
DropdownMenuDropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuLabel, DropdownMenuCheckboxItem
TabsTabsList, TabsTrigger, TabsContent
PopoverPopoverTrigger, PopoverContent
TooltipTooltipTrigger, TooltipContent

Состояния

АтрибутКогдаКласс
data-openэлемент открытdata-open:animate-in
data-closedэлемент закрываетсяdata-closed:animate-out
data-highlightedпункт меню под курсором или стрелкойdata-highlighted:bg-muted
data-checkedотмеченный пунктdata-checked:font-medium
data-sideсторона появления поповераdata-[side=top]:slide-in-from-bottom-2
data-selectedактивная вкладкаdata-selected:bg-background
⚠️ Проверить по документации: набор data-атрибутов зависит от примитива. У Base UI это data-open, у Radix — data-[state=open]. Смотрите исходник компонента в своём проекте.

Классы анимаций (tw-animate-css)

КлассЭффект
animate-in / animate-outбазовый вход и выход
fade-in-0 / fade-out-0прозрачность
zoom-in-95 / zoom-out-95масштаб
slide-in-from-top-2выезд сверху
slide-in-from-rightвыезд справа (панели)
duration-100длительность

Полезные пропсы

ПропЧто делает
open / onOpenChangeуправляемое состояние оверлея
defaultOpenоткрыт при первой отрисовке
modalблокировать ли страницу под окном
renderотрисовать триггер своим компонентом
showCloseButtonпоказывать ли крестик в диалоге

Клавиатура

КлавишаДиалогМенюВкладки
Escзакрытьзакрыть—
Tabвнутри окна по кругузакрыть и перейти дальшек панели
Стрелки—переход между пунктамипереключение вкладок
Enterподтвердитьвыбрать пунктактивировать
Буква—переход к пункту на эту букву—