Popover
Displays rich content in a portal, triggered by a button.
Loading…
"use client"
import { Button } from "@/components/ui/button"
import { Field, FieldGroup, FieldLabel } from "@/components/ui/field"
import { Input } from "@/components/ui/input"
import {
Popover,
PopoverContent,
PopoverDescription,
PopoverHeader,
PopoverTitle,
PopoverTrigger,
} from "@/components/ui/popover"
export default function PopoverDemo() {
return (
<Popover>
<PopoverTrigger render={<Button variant="outline" />}>
Open popover
</PopoverTrigger>
<PopoverContent className="w-80">
<PopoverHeader>
<PopoverTitle>Dimensions</PopoverTitle>
<PopoverDescription>
Set the dimensions for the layer.
</PopoverDescription>
</PopoverHeader>
<FieldGroup>
<Field orientation="horizontal">
<FieldLabel htmlFor="width">Width</FieldLabel>
<Input id="width" defaultValue="100%" />
</Field>
<Field orientation="horizontal">
<FieldLabel htmlFor="maxWidth">Max. width</FieldLabel>
<Input id="maxWidth" defaultValue="300px" />
</Field>
<Field orientation="horizontal">
<FieldLabel htmlFor="height">Height</FieldLabel>
<Input id="height" defaultValue="25px" />
</Field>
<Field orientation="horizontal">
<FieldLabel htmlFor="maxHeight">Max. height</FieldLabel>
<Input id="maxHeight" defaultValue="none" />
</Field>
</FieldGroup>
</PopoverContent>
</Popover>
)
}Installation
pnpm dlx shadcn@latest add @kickresume/popoverUsage
import { Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger } from "@/components/ui/popover"<Popover>
<PopoverTrigger render={<Button variant="outline" />}>
Open popover
</PopoverTrigger>
<PopoverContent className="w-80">
<PopoverHeader>
<PopoverTitle>Dimensions</PopoverTitle>
<PopoverDescription>
Set the dimensions for the layer.
</PopoverDescription>
</PopoverHeader>
<FieldGroup>
<Field orientation="horizontal">
<FieldLabel htmlFor="width">Width</FieldLabel>
<Input id="width" defaultValue="100%" />
</Field>
<Field orientation="horizontal">
<FieldLabel htmlFor="maxWidth">Max. width</FieldLabel>
<Input id="maxWidth" defaultValue="300px" />
</Field>
<Field orientation="horizontal">
<FieldLabel htmlFor="height">Height</FieldLabel>
<Input id="height" defaultValue="25px" />
</Field>
<Field orientation="horizontal">
<FieldLabel htmlFor="maxHeight">Max. height</FieldLabel>
<Input id="maxHeight" defaultValue="none" />
</Field>
</FieldGroup>
</PopoverContent>
</Popover>Composition
Use the following composition to build a Popover:
Popover
├── PopoverTrigger
└── PopoverContentExamples
Basic
A simple popover with a header, title, and description.
Loading…
"use client"
import { Button } from "@/components/ui/button"
import {
Popover,
PopoverContent,
PopoverDescription,
PopoverHeader,
PopoverTitle,
PopoverTrigger,
} from "@/components/ui/popover"
export default function PopoverBasic() {
return (
<Popover>
<PopoverTrigger render={<Button variant="outline" className="w-fit" />}>
Open Popover
</PopoverTrigger>
<PopoverContent align="start">
<PopoverHeader>
<PopoverTitle>Dimensions</PopoverTitle>
<PopoverDescription>
Set the dimensions for the layer.
</PopoverDescription>
</PopoverHeader>
</PopoverContent>
</Popover>
)
}Align
Use the align prop on PopoverContent to control the horizontal alignment.
Loading…
"use client"
import { Button } from "@/components/ui/button"
import {
Popover,
PopoverContent,
PopoverTrigger,
} from "@/components/ui/popover"
export default function PopoverAlignments() {
return (
<div className="flex gap-6">
<Popover>
<PopoverTrigger render={<Button variant="outline" size="sm" />}>
Start
</PopoverTrigger>
<PopoverContent align="start" className="w-40">
Aligned to start
</PopoverContent>
</Popover>
<Popover>
<PopoverTrigger render={<Button variant="outline" size="sm" />}>
Center
</PopoverTrigger>
<PopoverContent align="center" className="w-40">
Aligned to center
</PopoverContent>
</Popover>
<Popover>
<PopoverTrigger render={<Button variant="outline" size="sm" />}>
End
</PopoverTrigger>
<PopoverContent align="end" className="w-40">
Aligned to end
</PopoverContent>
</Popover>
</div>
)
}With Form
A popover with form fields inside.
Loading…
"use client"
import { Button } from "@/components/ui/button"
import { Field, FieldGroup, FieldLabel } from "@/components/ui/field"
import { Input } from "@/components/ui/input"
import {
Popover,
PopoverContent,
PopoverDescription,
PopoverHeader,
PopoverTitle,
PopoverTrigger,
} from "@/components/ui/popover"
export default function PopoverForm() {
return (
<Popover>
<PopoverTrigger render={<Button variant="outline" />}>
Open Popover
</PopoverTrigger>
<PopoverContent className="w-64" align="start">
<PopoverHeader>
<PopoverTitle>Dimensions</PopoverTitle>
<PopoverDescription>
Set the dimensions for the layer.
</PopoverDescription>
</PopoverHeader>
<FieldGroup className="gap-4">
<Field orientation="horizontal">
<FieldLabel htmlFor="width" className="w-1/2">
Width
</FieldLabel>
<Input id="width" defaultValue="100%" />
</Field>
<Field orientation="horizontal">
<FieldLabel htmlFor="height" className="w-1/2">
Height
</FieldLabel>
<Input id="height" defaultValue="25px" />
</Field>
</FieldGroup>
</PopoverContent>
</Popover>
)
}API Reference
See the Base UI Popover documentation.