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Тип / вариантыНазначениеПо умолчанию
childrenReactNodePopover.Trigger с элементом-триггером и Popover.Content с содержимым.—
openbooleanУправляемое состояние открытия.—
defaultOpenbooleanНачальное состояние без внешнего управления.false
onOpenChange(open: boolean) => voidВызывается при открытии и закрытии.—
placementPopoverPlacementtop · 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
portalbooleanРендерит попап в портал в конце body.false
Popover.Trigger.iconbooleanДобавляет Button-триггеру шеврон справа, если у него нет своего rightIcon. false — оставить кнопку как есть.true
Popover.Content.search{ value, onChange, placeholder? }Строка поиска над содержимым.—
Popover.Content.contentClassNamestringКласс прокручиваемой области содержимого.—
Popover.Content.classNamestringКласс панели попапа.—

Нативные HTML-атрибуты поддерживаются там, где компонент рендерит соответствующий элемент. Параметры className управляют только оформлением.