MazPopover
MazPopover is a versatile Vue component for displaying content in overlays that bypass overflow constraints of parent elements
Basic usage
Adaptive trigger
The adaptive
trigger mode automatically adapts to the user's device:
- Desktop: Uses hover behavior (mouseenter/mouseleave)
- Mobile/Touch devices: Uses click behavior
This provides the best user experience across all devices without requiring manual configuration.
Positions
TIP
The position prop is used to position the popover relative to the trigger. The chosen position will force the popover to be displayed in the chosen position.
Advanced positions
Prefer position and fallback position
TIP
The prefer-position and fallback-position props are used to position the popover relative to the trigger. The prefer-position is the position that will be used if it's available, and the fallback-position is the position that will be used if the prefer-position is not available.
When you not specify a fallback position, the popover will fallback on the best position available.
Colors
Tooltip role
A directive is available to more easily add a tooltip to an element, see vTooltip for more information.
Controlled popover
Menu example
Keep open on hover
With this option, the popover will stay open when you hover over it (a timeout is used to close the popover after a certain time).
Form example
Configuration options
Persistent (no auto-close)
Custom offset
Custom styling
Disabled state
Events
Event Log:
Position values
auto
- Automatically choose best positiontop
,bottom
,left
,right
- Basic positionstop-start
,top-end
- Top with start/end alignmentbottom-start
,bottom-end
- Bottom with start/end alignmentleft-start
,left-end
- Left with start/end alignmentright-start
,right-end
- Right with start/end alignment
Accessibility
MazPopover follows WAI-ARIA guidelines:
- Focus management: Automatically manages focus when opening/closing
- Keyboard navigation: Supports Escape key and Tab navigation
- ARIA attributes: Proper
role
,aria-modal
,aria-labelledby
, etc. - Screen reader support: Appropriate roles for different use cases
Best practices
- Use
role="tooltip"
for simple informational overlays - Use
role="dialog"
for interactive content - Provide meaningful
aria-labelledby
oraria-describedby
attributes - Ensure trigger elements are focusable and have proper labels
Props
Name | Description | Type | Required | Default | Possible values |
---|---|---|---|---|---|
model-value | v-model Controls the popover open state | boolean | No | false | - |
position | Position of the popover relative to trigger Position of the popover relative to trigger | MazPopoverPosition | No | auto | auto, top, bottom, left, right, top-start, top-end, bottom-start, bottom-end, left-start, left-end, right-start, right-end |
prefer-position | Preferred position of the popover relative to trigger when auto position is used Preferred position of the popover relative to trigger | MazPopoverPreferPosition | No | bottom-start | auto, top, bottom, left, right, top-start, top-end, bottom-start, bottom-end, left-start, left-end, right-start, right-end |
fallback-position | Fallback position of the popover relative to trigger when prefer position is not visible Fallback position of the popover relative to trigger | MazPopoverFallbackPosition | No | auto | auto, top, bottom, left, right, top-start, top-end, bottom-start, bottom-end, left-start, left-end, right-start, right-end |
trigger | How the popover is triggered How the popover is triggered. 'adaptive' uses hover on desktop and click on mobile | MazPopoverTrigger | No | click | click, hover, manual, adaptive |
role | ARIA role for accessibility ARIA role for accessibility | MazPopoverRole | No | dialog | dialog, tooltip |
aria-label | ARIA label for the popover | string | No | undefined | - |
announce-changes | Announce content changes to screen readers | boolean | No | false | - |
disabled | Disables the popover Disables the popover | boolean | No | false | - |
offset | Distance between trigger and popover in pixels | number | No | 8 | - |
delay | Delay before showing/hiding in milliseconds | number | No | 0 | - |
hover-delay | Delay before closing on hover in milliseconds | number | No | 150 | - |
transition | CSS transition name for animations | "scale-pop" | "scale-fade" | string | No | popover | - |
teleport-to | Teleport target selector | string | No | body | - |
overlay-class | Additional CSS classes for the overlay wrapper | Native type | No | undefined | - |
panel-class | Additional CSS classes for the popover panel | Native type | No | undefined | - |
panel-style | Inline styles for the popover panel | Native type | No | undefined | - |
close-on-click-outside | Close popover when clicking outside | boolean | No | true | - |
close-on-escape | Close popover when pressing Escape key | boolean | No | true | - |
persistent | Prevent auto-close (ignores click outside and escape key) | boolean | No | false | - |
id | Custom ID for the popover element | string | No | undefined | - |
aria-labelledby | ARIA labelledby attribute for accessibility | string | No | undefined | - |
aria-describedby | ARIA describedby attribute for accessibility | string | No | undefined | - |
color | Color variant of the popover | MazColor | "background" | No | background | primary, secondary, accent, info, success, warning, destructive, contrast, background |
trap-focus | Trap focus inside the popover | boolean | No | true | - |
keep-open-on-hover | Keep popover open when hovering over the panel | boolean | No | false | - |
block | The popover will be full width of the trigger | boolean | No | false | - |
position-reference | CSS selector or element reference to use for positioning calculations When provided, the popover will position relative to this element instead of the trigger Useful for components with labels where you want to position relative to the actual input Example: "input" or "#my-input" or HTMLElement | string | HTMLElement | No | undefined | - |
Events
Event name | Properties | Description |
---|---|---|
update:model-value | value boolean - The new open state | Emitted when popover state changes |
open | Emitted when popover opens | |
close | Emitted when popover closes | |
after-close-animation | Emitted after the close animation | |
toggle | value boolean - The new open state | Emitted when popover toggles |
Slots
Name | Description | Bindings |
---|---|---|
trigger | Trigger element content | open function - Function to open the popoverclose function - Function to close the popovertoggle function - Function to toggle the popoveris-open boolean - Current open state of the popovertrigger 'click' | 'hover' | 'manual' - The trigger type |
default | Popover content | open function - Function to open the popoverclose function - Function to close the popovertoggle function - Function to toggle the popoveris-open boolean - Current open state of the popover |
Expose
open
Open the popover
@description
Programmatically open the popover@usage
mazPopoverInstance.value?.open()
close
Close the popover
@description
Programmatically close the popover@usage
mazPopoverInstance.value?.close()
toggle
Toggle the popover
@description
Programmatically toggle the popover open/close state@usage
mazPopoverInstance.value?.toggle()
isOpen
Check if the popover is open
@description
Reactive reference to the popover open state@usage
const isPopoverOpen = mazPopoverInstance.value?.isOpen
updatePosition
Update the popover position
@description
Manually recalculate and update the popover position@usage
mazPopoverInstance.value?.updatePosition()