Popover

free

Popover floats details, quick forms, and secondary controls next to a trigger.

import Button from '@/components/ui/button';
import Popover from '@/components/ui/popover';

export default function UsageDemo() {

Installation

Add this component with the NateUI CLI.

npx nateui@latest add Popover

Examples

Basic

import { PiArrowUpRight, PiSquaresFour } from 'react-icons/pi'
import Popover from '@/components/ui/popover';

export default function BasicDemo() {

Trigger

import { PiArrowUpRight, PiSquaresFour } from 'react-icons/pi'
import Popover from '@/components/ui/popover';

const content = (

Custom Trigger

import { PiSealCheck } from 'react-icons/pi'
import Avatar from '@/components/ui/avatar';
import Button from '@/components/ui/button';
import Tag from '@/components/ui/tag';

Placement

import { PiArrowUpRight, PiSquaresFour } from 'react-icons/pi'
import Popover from '@/components/ui/popover';

const content = (

Controlled

import { useState } from 'react';
import Calendar from '@/components/ui/calendar';
import Popover from '@/components/ui/popover';

API

Popover renders a title (or a renderTrigger element) as the trigger and floats its children in a portalled panel. Open state is uncontrolled by default, or controlled with open and onOpenChange.

PropDescriptionTypeDefault
titleLabel for the default trigger. Rendered inside the built-in button when renderTrigger is not set.string | ReactNode-
renderTriggerCustom element used as the trigger, replacing the default button.ReactNode-
childrenContent rendered inside the floating panel.ReactNode-
triggerHow the panel opens.'click' | 'hover''click'
placementSide and alignment the panel opens from, relative to the trigger.Placement'bottom'
openControls the open state. Pair with onOpenChange.boolean-
onOpenChangeCalled when the open state should change.(open: boolean) => void-
widthWidth of the panel body.number | string-
modalTraps focus within the panel while open.booleanfalse
classNameClass names applied to the panel body.string-
...nativePropsNative div props applied to the floating panel.Omit<ComponentProps<'div'>, 'title'>-

Types

type Placement =
  | 'top'
  | 'top-start'
  | 'top-end'
  | 'bottom'
  | 'bottom-start'
  | 'bottom-end'
  | 'right'
  | 'right-start'
  | 'right-end'
  | 'left'
  | 'left-start'
  | 'left-end';