Popover

Floating content boxes triggered by click — with title, body, arrow, and 4 placement directions.

This component requires softui.js for interactive behavior.

Default (Bottom)

<div class="sui-popover">
  <button class="sui-btn sui-btn-primary" data-sui-popover aria-expanded="false" aria-haspopup="true">
    Click Me
  </button>
  <div class="sui-popover-content" role="dialog">
    <div class="sui-popover-header">Popover Title</div>
    <div class="sui-popover-body">This is a default popover that appears below the trigger. Click outside or press Escape to dismiss.</div>
  </div>
</div>

Directions

<!-- Bottom (default) -->
<div class="sui-popover">
  <button class="sui-btn sui-btn-primary" data-sui-popover aria-expanded="false" aria-haspopup="true">Bottom</button>
  <div class="sui-popover-content" role="dialog">
    <div class="sui-popover-header">Bottom</div>
    <div class="sui-popover-body">Default placement below the trigger.</div>
  </div>
</div>

<!-- Top -->
<div class="sui-popover sui-popover-top">
  <button class="sui-btn sui-btn-primary" data-sui-popover aria-expanded="false" aria-haspopup="true">Top</button>
  <div class="sui-popover-content" role="dialog">
    <div class="sui-popover-header">Top</div>
    <div class="sui-popover-body">Appears above the trigger.</div>
  </div>
</div>

<!-- Left -->
<div class="sui-popover sui-popover-left">
  <button class="sui-btn sui-btn-primary" data-sui-popover aria-expanded="false" aria-haspopup="true">Left</button>
  <div class="sui-popover-content" role="dialog">
    <div class="sui-popover-header">Left</div>
    <div class="sui-popover-body">Appears to the left.</div>
  </div>
</div>

<!-- Right -->
<div class="sui-popover sui-popover-right">
  <button class="sui-btn sui-btn-primary" data-sui-popover aria-expanded="false" aria-haspopup="true">Right</button>
  <div class="sui-popover-content" role="dialog">
    <div class="sui-popover-header">Right</div>
    <div class="sui-popover-body">Appears to the right.</div>
  </div>
</div>

Alignment

Control where the popover aligns relative to the trigger. Default is centered.

<!-- Start-aligned -->
<div class="sui-popover sui-popover-start">
  <button class="sui-btn sui-btn-primary" data-sui-popover aria-expanded="false" aria-haspopup="true">Start</button>
  <div class="sui-popover-content" role="dialog">
    <div class="sui-popover-header">Start Aligned</div>
    <div class="sui-popover-body">Left edge aligns with the trigger's left edge.</div>
  </div>
</div>

<!-- Center (default) -->
<div class="sui-popover">
  <button class="sui-btn sui-btn-primary" data-sui-popover aria-expanded="false" aria-haspopup="true">Center</button>
  <div class="sui-popover-content" role="dialog">
    <div class="sui-popover-header">Center Aligned</div>
    <div class="sui-popover-body">Default — centered on the trigger.</div>
  </div>
</div>

<!-- End-aligned -->
<div class="sui-popover sui-popover-end">
  <button class="sui-btn sui-btn-primary" data-sui-popover aria-expanded="false" aria-haspopup="true">End</button>
  <div class="sui-popover-content" role="dialog">
    <div class="sui-popover-header">End Aligned</div>
    <div class="sui-popover-body">Right edge aligns with the trigger's right edge.</div>
  </div>
</div>

With Close Button

<div class="sui-popover">
  <button class="sui-btn sui-btn-primary" data-sui-popover aria-expanded="false" aria-haspopup="true">Dismissible</button>
  <div class="sui-popover-content" role="dialog">
    <div class="sui-popover-header">
      Dismissible
      <button class="sui-popover-close" aria-label="Close"></button>
    </div>
    <div class="sui-popover-body">Click the X button, click outside, or press Escape to close this popover.</div>
  </div>
</div>

With Form

<div class="sui-popover sui-popover-start">
  <button class="sui-btn" data-sui-popover>Set Dimensions</button>
  <div class="sui-popover-content" role="dialog">
    <div class="sui-popover-header">
      Dimensions
      <button class="sui-popover-close" aria-label="Close"></button>
    </div>
    <div class="sui-popover-body">
      <div class="sui-form-group">
        <label class="sui-label">Width</label>
        <input type="text" class="sui-input" value="100%">
      </div>
      <div class="sui-form-group">
        <label class="sui-label">Max Width</label>
        <input type="text" class="sui-input" value="320px">
      </div>
      <div class="sui-form-group">
        <label class="sui-label">Height</label>
        <input type="text" class="sui-input" value="auto">
      </div>
    </div>
    <div class="sui-popover-footer">
      <button class="sui-btn sui-btn-primary sui-btn-sm">Apply</button>
    </div>
  </div>
</div>

Rich Content

<div class="sui-popover sui-popover-start">
  <button class="sui-btn sui-btn-primary" data-sui-popover aria-expanded="false" aria-haspopup="true">User Profile</button>
  <div class="sui-popover-content" role="dialog" style="min-width:280px;">
    <div class="sui-popover-header">
      John Doe
      <button class="sui-popover-close" aria-label="Close"></button>
    </div>
    <div class="sui-popover-body">
      <div style="display:flex;align-items:center;gap:12px;margin-bottom:12px;">
        <div class="sui-avatar sui-avatar-sm" style="background:var(--sui-primary);color:#fff;font-weight:600;display:flex;align-items:center;justify-content:center;flex-shrink:0;">JD</div>
        <div>
          <div style="font-weight:600;color:var(--sui-text);font-size:14px;">Product Designer</div>
          <div style="color:var(--sui-text-muted);font-size:12px;">Joined March 2024</div>
        </div>
      </div>
      <p style="margin:0;">Building neumorphic interfaces and design systems for modern web applications.</p>
    </div>
    <div class="sui-popover-footer" style="justify-content:flex-start;">
      <button class="sui-btn sui-btn-primary sui-btn-sm">Follow</button>
      <button class="sui-btn sui-btn-sm">Message</button>
    </div>
  </div>
</div>

No Header

<div class="sui-popover">
  <button class="sui-btn" data-sui-popover aria-expanded="false" aria-haspopup="true">Simple Popover</button>
  <div class="sui-popover-content" role="dialog">
    <div class="sui-popover-body">A simple popover with just body content — no header or title needed.</div>
  </div>
</div>

Delete this item?

This action cannot be undone. This will permanently delete the item and remove all associated data.