Popover
Positions floating content next to an anchor, portaled above the page. It is built on
Modal, so it inherits the portal, optional backdrop, focus management,
scroll lock, and Escape / click-away close - then adds anchor positioning
(anchorOrigin / transformOrigin / marginThreshold).
import { useState } from 'react'
import { Popover } from '@soroush.tech/design-system/Popover'
import { Button } from '@soroush.tech/design-system/Button'
function Example() {
const [anchor, setAnchor] = useState<HTMLElement | null>(null)
return (
<>
<Button onClick={(event) => setAnchor(event.currentTarget)}>Open</Button>
<Popover
open={Boolean(anchor)}
anchorEl={anchor}
onClose={() => setAnchor(null)}
anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}
>
<p>Popover content</p>
</Popover>
</>
)
}
Examples
Default
<Popover
anchorReference="anchorEl"
anchorOriginVertical="bottom"
anchorOriginHorizontal="left"
transformOriginVertical="top"
transformOriginHorizontal="left"
marginThreshold={2}
elevation={8}
hasBackdrop={false}
disableScrollLock={false}
disableAriaHidden={false}
shouldAutoFocus
shouldTrapFocus
shouldEnforceFocus
shouldRestoreFocus
shouldKeepMounted={false}
layer="modal"
/>
With Backdrop
<Popover
anchorReference="anchorEl"
anchorOriginVertical="bottom"
anchorOriginHorizontal="left"
transformOriginVertical="top"
transformOriginHorizontal="left"
marginThreshold={2}
elevation={8}
hasBackdrop
disableScrollLock={false}
disableAriaHidden={false}
shouldAutoFocus
shouldTrapFocus
shouldEnforceFocus
shouldRestoreFocus
shouldKeepMounted={false}
layer="modal"
/>
Bottom
<Popover
anchorReference="anchorEl"
anchorOriginVertical="bottom"
anchorOriginHorizontal="left"
transformOriginVertical="top"
transformOriginHorizontal="left"
marginThreshold={2}
elevation={8}
hasBackdrop={false}
disableScrollLock={false}
disableAriaHidden={false}
shouldAutoFocus
shouldTrapFocus
shouldEnforceFocus
shouldRestoreFocus
shouldKeepMounted={false}
layer="modal"
/>
Top
<Popover
anchorReference="anchorEl"
anchorOriginVertical="top"
anchorOriginHorizontal="left"
transformOriginVertical="bottom"
transformOriginHorizontal="left"
marginThreshold={2}
elevation={8}
hasBackdrop={false}
disableScrollLock={false}
disableAriaHidden={false}
shouldAutoFocus
shouldTrapFocus
shouldEnforceFocus
shouldRestoreFocus
shouldKeepMounted={false}
layer="modal"
/>
Right
<Popover
anchorReference="anchorEl"
anchorOriginVertical="top"
anchorOriginHorizontal="right"
transformOriginVertical="top"
transformOriginHorizontal="left"
marginThreshold={2}
elevation={8}
hasBackdrop={false}
disableScrollLock={false}
disableAriaHidden={false}
shouldAutoFocus
shouldTrapFocus
shouldEnforceFocus
shouldRestoreFocus
shouldKeepMounted={false}
layer="modal"
/>
Left
<Popover
anchorReference="anchorEl"
anchorOriginVertical="top"
anchorOriginHorizontal="left"
transformOriginVertical="top"
transformOriginHorizontal="right"
marginThreshold={2}
elevation={8}
hasBackdrop={false}
disableScrollLock={false}
disableAriaHidden={false}
shouldAutoFocus
shouldTrapFocus
shouldEnforceFocus
shouldRestoreFocus
shouldKeepMounted={false}
layer="modal"
/>