Popover
Allow users to view additional information or actions relevant to a specific element within a floating container anchored to the trigger
#Examples
Use Popovers sparingly to avoid cluttering the interface and distracting users from their primary tasks. Popover is composed of:
- Trigger Element: The button that, when interacted with, opens the popover. View Button appearance. Consider using descriptive labels or icons for the trigger element to clarify its purpose.
- Popover Container: The floating box that houses the popover content. Ensure sufficient padding and spacing within the container for readability.
- Content Area: The space within the popover for text, icons, links, or other interactive elements. Prioritize the most important information at the top.
- Close Button (optional): A button to dismiss the popover. Place it consistently (e.g., button-right corner) and use a recognizable icon (e.g., "x").
- Footer (optional): Use Action bar for actions or additional information related to the entire popover. Clearly separate the footer from the main content area visually. View Footer variant
#Default
The default variant includes a button trigger with a chevron icon, popover content area, and optional close button. Here's an example of a default implementation of the Popover component. Assign the firstFocusableRef property to the first focusable element in the popover.
<Popover
	popoverContent={(id, firstFocusableRef, { setIsOpen }) => (
		<div id={id}>
			<Content>
				<Button onClick={() => setIsOpen(false)} ref={firstFocusableRef}>
					Close popover
				</Button>
			</Content>
		</div>
	)}
	buttonContent="Button"
/>#Button appearance
Customize the Button's appearance using the ButtonProps property. This allows you to change the button's style, size, and other visual attributes.
<Popover
	popoverContent={(id, firstFocusableRef, { setIsOpen }) => (
		<div id={id}>
			<Content>
				<Button onClick={() => setIsOpen(false)} ref={firstFocusableRef}>
					Close popover
				</Button>
			</Content>
		</div>
	)}
	buttonContent="Button"
	buttonProps={{ variant: "primary", size: "large" }}
/>Hide the chevron icon using the hideChevron property if it's not needed.
<Popover
	aria-label="Edit"
	popoverContent={(id, firstFocusableRef, { setIsOpen }) => (
		<div id={id}>
			<Content>
				<Button onClick={() => setIsOpen(false)} ref={firstFocusableRef}>
					Close popover
				</Button>
			</Content>
		</div>
	)}
	buttonContent={
		<Icon>
			<IconEdit />
		</Icon>
	}
	hideChevron
/>#Popover placement
Choose a placement that ensures the popover is visible and doesn't obstruct important content. Use the placement property to control popover positioning relative to the trigger element.
<Popover
	popoverContent={(id, firstFocusableRef, { setIsOpen }) => (
		<div id={id}>
			<Content>
				<Button onClick={() => setIsOpen(false)} ref={firstFocusableRef}>
					Close popover
				</Button>
			</Content>
		</div>
	)}
	buttonContent="Button"
	placement="top"
/>#Start open
Use the startOpen property to display the popover immediately when the page loads. This is generally not recommended for most use cases.
<Popover
	popoverContent={(id, firstFocusableRef, { setIsOpen }) => (
		<div id={id}>
			<Content>
				<Button onClick={() => setIsOpen(false)} ref={firstFocusableRef}>
					Close popover
				</Button>
			</Content>
		</div>
	)}
	buttonContent="Button"
	startOpen
/>#Footer
Popovers can optionally contain a footer. This section is intended for information and actions that relate to the Popover as a whole. In most cases, that will be the Action bar component, which provides users with a set of actions related to the completion of a task.
Add a footer by placing a Popover.Footer component in Popover as its s its last child.
<Popover
	popoverContent={(id, firstFocusableRef, { setIsOpen }) => (
		<div id={id}>
			<Content>
				<Button onClick={() => setIsOpen(false)} ref={firstFocusableRef}>
					Close popover
				</Button>
			</Content>
			<Popover.Footer>
				<ActionBar
					primary={{ children: "Primary", onClick: console.log }}
					cancel={{ children: "Cancel", onClick: console.log }}
				/>
			</Popover.Footer>
		</div>
	)}
	buttonContent="Button"
/>#Properties
| Property | Description | Defined | Value | 
|---|---|---|---|
| popoverContentRequired | functioncontent for popover element over dropdown | ||
| elementText and other content for dropdown menu | |||
| objectProps to affect the styling of the dropdown button | |||
| labelledByPopoverOptional | booleanIf set to true, popover label may be set to the id, if isOpen is also true | ||
| placementOptional | "auto" | "auto-end" | "auto-start" | "bottom" | "bottom-end" | "bottom-start" | "left" | "left-end" | "left-start" | "right" | "right-end" | "right-start" | "top" | "top-end" | "top-start"Preferred placement for the popover | ||
| allowedAutoPlacementsOptional | literal-union[]Allowed placements for the popover when using an "auto" value for the "placement" prop | ||
| strategyOptional | "absolute" | "fixed"Position popover using fixed or absolute | ||
| objectreference sent to basePopover element | |||
| startOpenOptional | booleanIf set to true the dropdown will open automatically | ||
| invalidOptional | booleanIs the dropdown in an invalid state | ||
| containerClassNameOptional | stringClassname for container of both dropdown and popover | ||
| hideChevronOptional | booleanIf set to true, chevron icon will be hidden | ||
| noMinWidthOptional | booleanIf true, the default minimum width won't be set | ||
| noMaxWidthOptional | booleanIf true, the default maximum width won't be set | ||
| disabledOptional | booleanMakes the component non-interactive | ||
| aria-labelOptional | stringDescribe what happens if the button is clicked (for icon only buttons) | ||
| aria-haspopupOptional | "dialog" | "listbox" | "menu"What type of content is expanded. Should only be set if the content has the corrosponding 'role' | ||
| onCloseOptional | functionCallback for onClose events | ||
| onClearOptional | functionCallback for clearing the dropdown (displays clear button when provided) | ||
| tooltipOptional |  | string | number | elementTooltip text | ||
| tooltipPlacementOptional | "bottom" | "bottom-end" | "bottom-start" | "left" | "left-end" | "left-start" | "right" | "right-end" | "right-start" | "top" | "top-end" | "top-start"Tooltip placement | ||
| updateKeysOptional | unknown[]Key to control updates to the placement of the popover. Provide a different value when an update is desired | ||
| data-componentOptional | stringName of the component. Should only be set by components since it needs to stable. Used to track component usage | ||
| data-observe-keyOptional | stringUnique string, used by external script e.g. for event tracking | ||
| classNameOptional | stringCustom className that's applied to the outermost element (only intended for special cases) | ||
| styleOptional | objectStyle object to apply custom inline styles (only intended for special cases) | ||
| tabIndexOptional | numberTab index of the outermost HTML element of the component | ||
| onKeyDownOptional | functionCallback for onKeyDown event | ||
| onMouseDownOptional | functionCallback for onMouseDown event | ||
| onMouseEnterOptional | functionCallback for onMouseEnter event | ||
| onMouseLeaveOptional | functionCallback for onMouseLeave event | ||
| onFocusOptional | functionCallback for onFocus event | ||
| onBlurOptional | functionCallback for onBlur event | 
#Guidelines
#Best practices
#Do not use when
#Accessibility
Explore detailed guidelines for this component: Accessibility Specifications