Popover
Попап с произвольным содержимым; из него собирается меню.
Соберите Popover.Trigger с одним элементом-триггером (обычно Button) и Popover.Content. Внутрь можно положить Popover.Item — получится меню, после выбора пункта оно закрывается само, — или любую разметку. placement задаёт сторону и выравнивание (bottom-start по умолчанию, bottom-end, top и т. д.); при нехватке места попап переворачивается и сдвигается, не уходя за край экрана. Открытие можно контролировать через open и onOpenChange, portal выносит попап в конец body, search у Popover.Content добавляет строку поиска. Если триггер — Button без собственного rightIcon, Popover.Trigger сам добавляет шеврон справа; отключить это можно через icon={false}.
Живой пример
Настройки примера
Использование
import { UserCircleIcon } from '@heroicons/react/24/outline';
import { Badge, Button, Popover } from '@prosazhin/pbcomponents';
<Popover placement='bottom-end'>
<Popover.Trigger>
<Button>Open menu</Button>
</Popover.Trigger>
<Popover.Content>
<Popover.Item
leftIcon={UserCircleIcon}
badge={<Badge color='secondary'>2</Badge>}
>
My orders
</Popover.Item>
<Popover.Item>Profile settings</Popover.Item>
<Popover.Item borderTop>Sign out</Popover.Item>
</Popover.Content>
</Popover>;API компонента
Составные части: Popover.Trigger, Popover.Content, Popover.Item.
| Prop | Тип / варианты | Назначение | По умолчанию |
|---|---|---|---|
children | ReactNode | Popover.Trigger с элементом-триггером и Popover.Content с содержимым. | — |
open | boolean | Управляемое состояние открытия. | — |
defaultOpen | boolean | Начальное состояние без внешнего управления. | false |
onOpenChange | (open: boolean) => void | Вызывается при открытии и закрытии. | — |
placement | PopoverPlacementtop · top-start · top-end · bottom · bottom-start · bottom-end · left · left-start · left-end · right · right-start · right-end | Сторона и выравнивание относительно триггера: top, bottom-start, right-end и т. д. При нехватке места попап переворачивается и сдвигается. | bottom-start |
portal | boolean | Рендерит попап в портал в конце body. | false |
Popover.Trigger.icon | boolean | Добавляет Button-триггеру шеврон справа, если у него нет своего rightIcon. false — оставить кнопку как есть. | true |
Popover.Content.search | { value, onChange, placeholder? } | Строка поиска над содержимым. | — |
Popover.Content.contentClassName | string | Класс прокручиваемой области содержимого. | — |
Popover.Content.className | string | Класс панели попапа. | — |
Нативные HTML-атрибуты поддерживаются там, где компонент рендерит соответствующий элемент. Параметры className управляют только оформлением.