function PopoverDemo(props) {
const [pos, setPos] = React.useState('top')
const [open, setOpen] = React.useState(true)
return (
<Box>
<Heading as="h3" sx={{fontSize: 3}}>
Caret Position
</Heading>
<CaretSelector current={pos} onChange={setPos} />
<Heading as="h3" sx={{fontSize: 3}}>
Popover Visibility
</Heading>
<Box my={2}>
<label>
<input type="checkbox" value={open} checked={open} onChange={() => setOpen(open => !open)} /> Open
</label>
</Box>
<Box position="relative" pt={4}>
<Popover relative open={open} caret={pos}>
<Popover.Content>
<Heading sx={{fontSize: 2}}>
<code>{pos}</code> caret
</Heading>
<Text as="p">Message about this particular piece of UI.</Text>
<Button onClick={() => setOpen(false)}>Got it!</Button>
</Popover.Content>
</Popover>
</Box>
</Box>
)
}
function CaretSelector(props) {
const choices = [
'top',
'bottom',
'left',
'right',
'left-bottom',
'left-top',
'right-bottom',
'right-top',
'top-left',
'bottom-left',
'top-right',
'bottom-right'
].map(dir => (
<label>
<input
key={dir}
type="radio"
name="caret"
value={dir}
checked={dir === props.current}
onChange={() => props.onChange(dir)}
/>{' '}
{dir}
</label>
))
return (
<Box display="grid" gridTemplateColumns="repeat(4, auto)" gridGap={3} my={2}>
{choices}
</Box>
)
}
render(<PopoverDemo />)