Components

Popover

Displays rich content in a portal, triggered by a button.

Installation

Cortexcn
pnpm dlx shadcn@latest add @cortexcn/popover

Usage

import { Popover, PopoverAnchor, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger } from "@/components/popover";

Examples

Basic

import { Button } from "@/components/button"import { Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger } from "@/components/popover"export function PopoverBasic() {  return (    <div className="flex flex-col gap-6">      <Popover>        <PopoverTrigger asChild>          <Button variant="outline">Open Popover</Button>        </PopoverTrigger>        <PopoverContent align="start">          <PopoverHeader>            <PopoverTitle>Dimensions</PopoverTitle>            <PopoverDescription>              Set the dimensions for the layer.            </PopoverDescription>          </PopoverHeader>        </PopoverContent>      </Popover>    </div>  )}

With form

import { Button } from "@/components/button"import { Field, FieldGroup, FieldLabel } from "@/components/field"import { Input } from "@/components/input"import { Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger } from "@/components/popover"export function PopoverWithForm() {  return (    <div className="flex flex-col gap-6">      <Popover>        <PopoverTrigger asChild>          <Button variant="outline">Open Popover</Button>        </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>    </div>  )}

Alignments

import { Button } from "@/components/button"import { Popover, PopoverContent, PopoverTrigger } from "@/components/popover"export function PopoverAlignments() {  return (    <div className="flex flex-col gap-6">      <div className="flex gap-6">        <Popover>          <PopoverTrigger asChild>            <Button variant="outline" size="sm">              Start            </Button>          </PopoverTrigger>          <PopoverContent align="start" className="w-40">            Aligned to start          </PopoverContent>        </Popover>        <Popover>          <PopoverTrigger asChild>            <Button variant="outline" size="sm">              Center            </Button>          </PopoverTrigger>          <PopoverContent align="center" className="w-40">            Aligned to center          </PopoverContent>        </Popover>        <Popover>          <PopoverTrigger asChild>            <Button variant="outline" size="sm">              End            </Button>          </PopoverTrigger>          <PopoverContent align="end" className="w-40">            Aligned to end          </PopoverContent>        </Popover>      </div>    </div>  )}

In dialog

import { Button } from "@/components/button"import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from "@/components/dialog"import { Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger } from "@/components/popover"export function PopoverInDialog() {  return (    <div className="flex flex-col gap-6">      <Dialog>        <DialogTrigger asChild>          <Button variant="outline">Open Dialog</Button>        </DialogTrigger>        <DialogContent>          <DialogHeader>            <DialogTitle>Popover Example</DialogTitle>            <DialogDescription>              Click the button below to see the popover.            </DialogDescription>          </DialogHeader>          <Popover>            <PopoverTrigger asChild>              <Button variant="outline" className="w-fit">                Open Popover              </Button>            </PopoverTrigger>            <PopoverContent align="start">              <PopoverHeader>                <PopoverTitle>Popover in Dialog</PopoverTitle>                <PopoverDescription>                  This popover appears inside a dialog. Click the button to open                  it.                </PopoverDescription>              </PopoverHeader>            </PopoverContent>          </Popover>        </DialogContent>      </Dialog>    </div>  )}

Adapted from the shadcn/ui Popover (MIT).