Компонент Popover в Chakra UI используется для отображения временных интерактивных окон, связанных с элементами интерфейса, такими как кнопки или ссылки. Popover отличается от модального окна тем, что он привязан к элементу и не блокирует весь экран. Он идеально подходит для подсказок, всплывающих форм и небольших интерактивных панелей.
В Chakra UI Popover состоит из нескольких ключевых компонентов, которые можно комбинировать:
import { Button, Popover, PopoverTrigger, PopoverContent, PopoverHeader, PopoverBody, PopoverArrow, PopoverCloseButton } from "@chakra-ui/react";
function BasicPopover() {
return (
<Popover>
<PopoverTrigger>
<Button>Открыть Popover</Button>
</PopoverTrigger>
<PopoverContent>
<PopoverArrow />
<PopoverCloseButton />
<PopoverHeader>Заголовок</PopoverHeader>
<PopoverBody>Это тело Popover с информацией.</PopoverBody>
</PopoverContent>
</Popover>
);
}
В этом примере при нажатии на кнопку открывается всплывающее окно с заголовком, стрелкой и кнопкой закрытия.
Popover может управляться как внутренне (по умолчанию), так и внешне через контролируемый state с помощью хука useDisclosure. Это позволяет открывать и закрывать Popover программно.
import { useDisclosure, Button, Popover, PopoverTrigger, PopoverContent, PopoverBody } from "@chakra-ui/react";
function ControlledPopover() {
const { isOpen, onOpen, onClose } = useDisclosure();
return (
<>
<Button onCl ick={onOpen}>Открыть Popover</Button>
<Popover isOpen={isOpen} onCl ose={onClose}>
<PopoverTrigger>
<Button>Триггер</Button>
</PopoverTrigger>
<PopoverContent>
<PopoverBody>Контролируемый Popover</PopoverBody>
</PopoverContent>
</Popover>
</>
);
}
Использование useDisclosure предоставляет три метода: isOpen, onOpen и onClose, позволяя гибко управлять состоянием Popover из внешнего кода.
Popover по умолчанию позиционируется относительно триггерного
элемента. Для управления позиционированием используется проп
placement, который принимает значения:
top, bottom, left,
right, а также их варианты с -start и
-end.
<Popover placement="right-start">
<PopoverTrigger>
<Button>Попробовать Right-Start</Button>
</PopoverTrigger>
<PopoverContent>
<PopoverBody>Popover справа сверху</PopoverBody>
</PopoverContent>
</Popover>
Кроме того, можно управлять поведением закрытия Popover через проп closeOnBlur (закрытие при клике вне Popover) и closeOnEsc (закрытие по клавише Escape).
Chakra UI поддерживает анимацию открытия и закрытия Popover через
встроенные transition-пропсы. Например, можно задать
motionPreset: scale,
slideInBottom, slideInRight.
<Popover motionPreset="scale">
<PopoverTrigger>
<Button>Popover с анимацией</Button>
</PopoverTrigger>
<PopoverContent>
<PopoverBody>Анимация Scale</PopoverBody>
</PopoverContent>
</Popover>
Popover часто используется для небольших форм, селектов или подтверждений действий. Все интерактивные элементы внутри Popover остаются фокусируемыми и управляемыми.
<Popover>
<PopoverTrigger>
<Button>Ввод текста</Button>
</PopoverTrigger>
<PopoverContent>
<PopoverArrow />
<PopoverBody>
<input type="text" placeholder="Введите значение" />
<Button mt={2}>Отправить</Button>
</PopoverBody>
</PopoverContent>
</Popover>
Важно помнить, что Popover автоматически управляет фокусом при открытии, возвращая его к триггеру после закрытия, что обеспечивает корректную доступность.
Popover можно легко интегрировать с IconButton, Avatar, Menu и другими интерактивными элементами. Например, создание Popover для аватара пользователя:
<Popover>
<PopoverTrigger>
<Avatar name="Иван Иванов" />
</PopoverTrigger>
<PopoverContent>
<PopoverArrow />
<PopoverHeader>Профиль</PopoverHeader>
<PopoverBody>
Настройки аккаунта и действия
</PopoverBody>
</PopoverContent>
</Popover>
Такой подход позволяет создавать компактные и интуитивно понятные всплывающие панели для взаимодействия пользователя с интерфейсом.
Popover в Chakra UI предоставляет гибкий, настраиваемый и доступный способ отображения всплывающих элементов интерфейса, сохраняя при этом легкость интеграции с другими компонентами библиотеки.