Skip to content

← All components

Navigation and interaction

Popover

Light-dismiss non-modal floating content.

Live example

Semantic detailsHelpful contextual content.

Usage

Each example includes the complete adapter-specific parameter reference. Copy it as a starting point, then remove options your use case does not need.

React

tsx
import { Popover } from "@cofob/design-system-react";

/**
 * Complete Popover parameter reference.
 * @param open/defaultOpen
 *   type: boolean; controlled or initial state
 *   default: false
 *   example: true
 * @param onOpenChange
 *   type: (open: boolean) => void
 *   default: —
 *   example: {handleOpenChange}
 * @param trigger
 *   type: ReactNode | Svelte snippet with trigger controls
 *   default: —
 *   example: <Button>Open</Button> / trigger snippet
 * @param triggerLabel/label
 *   type: string
 *   default: "Toggle popover" / "Open popover"
 *   example: "Accessible label"
 * @param placement
 *   type: "top" | "right" | "bottom" | "left"
 *   default: "bottom"
 *   example: "bottom"
 * @param children
 *   type: ReactNode | Svelte Snippet | child HTML
 *   default: —
 *   example: children / snippet / child HTML
 * @param div attributes
 *   type: native element attributes
 *   default: —
 *   example: class / style / aria-* / data-*
 */
export function PopoverExample() {
  return (
    <Popover trigger="Open">Content</Popover>
  );
}

Svelte

svelte
<script lang="ts">
  import { Popover } from "@cofob/design-system-svelte";

  // Complete Popover parameter reference.
  // open/defaultOpen
  //   type: boolean; controlled or initial state
  //   default: false
  //   example: true
  // onOpenChange
  //   type: (open: boolean) => void
  //   default: —
  //   example: {handleOpenChange}
  // trigger
  //   type: ReactNode | Svelte snippet with trigger controls
  //   default: —
  //   example: <Button>Open</Button> / trigger snippet
  // triggerLabel/label
  //   type: string
  //   default: "Toggle popover" / "Open popover"
  //   example: "Accessible label"
  // placement
  //   type: "top" | "right" | "bottom" | "left"
  //   default: "bottom"
  //   example: "bottom"
  // children
  //   type: ReactNode | Svelte Snippet | child HTML
  //   default: —
  //   example: children / snippet / child HTML
  // div attributes
  //   type: native element attributes
  //   default: —
  //   example: class / style / aria-* / data-*
</script>

<Popover label="Open">Content</Popover>

HTML

html
<!--
  Complete Popover parameter reference.
  open/defaultOpen
    type: boolean; controlled or initial state
    default: false
    example: true
  onOpenChange
    type: (open: boolean) => void
    default: —
    example: {handleOpenChange}
  trigger
    type: ReactNode | Svelte snippet with trigger controls
    default: —
    example: <Button>Open</Button> / trigger snippet
  triggerLabel/label
    type: string
    default: "Toggle popover" / "Open popover"
    example: "Accessible label"
  placement
    type: "top" | "right" | "bottom" | "left"
    default: "bottom"
    example: "bottom"
  children
    type: ReactNode | Svelte Snippet | child HTML
    default: —
    example: children / snippet / child HTML
  div attributes
    type: native element attributes
    default: —
    example: class / style / aria-* / data-*
-->
<div class="cf-popover" popover data-cf-popover>Content</div>

<script type="module">
  import { initDesignSystem } from "@cofob/design-system-css";

  const designSystem = initDesignSystem(document);
  window.addEventListener("pagehide", () => designSystem.destroy(), { once: true });
</script>

Parameters

Adapter differences are explicit. Native element attributes are forwarded in React and Svelte and can be written directly in HTML.

ParameterTypeDefaultAdaptersExampleDescription
open/defaultOpenboolean; controlled or initial statefalseReact · Svelte · HTMLtrueUse open/bind:open for controlled state or defaultOpen for initial state.
onOpenChange(open: boolean) => voidReact · Svelte · HTML{handleOpenChange}Reports every user-driven open state transition.
triggerReactNode | Svelte snippet with trigger controlsReact · Svelte · HTML<Button>Open</Button> / trigger snippetTrigger content; Svelte snippets receive accessible trigger controls.
triggerLabel/labelstring"Toggle popover" / "Open popover"React · Svelte · HTML"Accessible label"Accessible trigger name; adapter name differs.
placement"top" | "right" | "bottom" | "left""bottom"React · Svelte · HTML"bottom"Preferred side; collision handling may choose a safer position.
childrenReactNode | Svelte Snippet | child HTMLReact · Svelte · HTMLchildren / snippet / child HTMLIdiomatic adapter composition content.
div attributesnative element attributesReact · Svelte · HTMLclass / style / aria-* / data-*Forwards native class/style, accessibility, event, and data attributes to the root element.