Popover

A floating panel triggered by a button click. Built on bits-ui popover primitives.

Preview

<script>
  import { Popover, PopoverTrigger, PopoverContent } from '@vultra/ui';
  import { Button } from '@vultra/ui';
</script>

<Popover>
  <PopoverTrigger><Button variant="outline">Open popover</Button></PopoverTrigger>
  <PopoverContent class="w-80">
    <div class="grid gap-4">
      <div class="space-y-2">
        <h4 class="font-medium leading-none">Dimensions</h4>
        <p class="text-sm text-muted-foreground">Set the dimensions for the layer.</p>
      </div>
    </div>
  </PopoverContent>
</Popover>

With Form

<script>
  import { Popover, PopoverTrigger, PopoverContent } from '@vultra/ui';
  import { Button } from '@vultra/ui';
  import { Input } from '@vultra/ui';
  import { Label } from '@vultra/ui';
</script>

<Popover>
  <PopoverTrigger><Button variant="outline">Settings</Button></PopoverTrigger>
  <PopoverContent class="w-80">
    <div class="grid gap-4">
      <div class="space-y-2">
        <h4 class="font-medium leading-none">Width</h4>
        <p class="text-sm text-muted-foreground">Adjust the width.</p>
      </div>
      <div class="grid gap-2">
        <div class="grid grid-cols-3 items-center gap-4">
          <Label for="width">Width</Label>
          <Input id="width" value="100%" class="col-span-2 h-8" />
        </div>
      </div>
    </div>
  </PopoverContent>
</Popover>

Structure

  • Popover — root (manages open state, bindable open prop)
  • PopoverTrigger — the element that opens the popover
  • PopoverContent — the floating panel (rendered in a portal)
  • PopoverHeader — header region
  • PopoverTitle — heading inside the popover
  • PopoverDescription — description text
  • PopoverClose — closes the popover

Props

Popover

PropTypeDefaultDescription
openbooleanfalseOpen state (bindable)

PopoverContent

PropTypeDefaultDescription
sideOffsetnumber4Distance from trigger (px)
align'start' \| 'center' \| 'end''center'Alignment relative to trigger
classstringAdditional classes

Accessibility

  • Trigger uses aria-haspopup="true" and aria-expanded to indicate state.
  • Focus is trapped inside the popover when open.
  • Closes on Escape key press.
  • Closes on outside click.
  • role="dialog" with aria-labelledby and aria-describedby.
  • Focus returns to trigger when closed.

Install

npx @vultra/cli add popover