Popover
Popovers are perfect for floating panels with arbitrary content like navigation menus, mobile menus and flyout menus.
Usage
Basic Usage
Popovers are built using the VPopover, VPopoverButton, and VPopoverPanel components.
Clicking the VPopoverButton will automatically open/close the VPopoverPanel. When the panel is open, clicking anywhere outside of its contents, pressing the Escape key, or tabbing away from it will close the Popover.
Placement
You can change the panel placement via placement prop.
Here are list of the valid placements:
export const popoverPlacements = [
"top",
"right",
"bottom",
"left",
"bottom-start",
"bottom-end",
"top-start",
"top-end",
"left-start",
"left-end",
"right-start",
"right-end",
] as const;
export type VPopoverPlacement = typeof popoverPlacements[number];export const popoverPlacements = [
"top",
"right",
"bottom",
"left",
"bottom-start",
"bottom-end",
"top-start",
"top-end",
"left-start",
"left-end",
"right-start",
"right-end",
] as const;
export type VPopoverPlacement = typeof popoverPlacements[number];Overlay
If you'd like to style a backdrop over your application UI whenever you open a VPopover, use the VPopoverOverlay component:
Group
When rendering several related Popovers, for example in a site's header navigation, use the VPopoverGroup component. This ensures panels stay open while users are tabbing between Popovers within a group, but closes any open panel once the user tabs outside of the group:
List
Here's an example of using VList with VPopover:
Props
| Name | Type | Default |
|---|---|---|
placement | VPopoverPlacement | bottom |
Events
None
Slots
| Name | Props | Description |
|---|---|---|
default | {} | The default Vue slot |
CSS Variables
:root {
--v-popover-margin: var(--size-spacing-2);
--v-popover-bg-color: white;
--v-popover-border-color: var(--color-gray-300);
}:root {
--v-popover-margin: var(--size-spacing-2);
--v-popover-bg-color: white;
--v-popover-border-color: var(--color-gray-300);
}Standalone Installation
You can also install the VPopover component individually via @morpheme/popover package:
npm i @morpheme/popovernpm i @morpheme/popover<script setup lang="ts">
import VPopover from "@morpheme/popover";
</script>
<template>
<VPopover />
</template><script setup lang="ts">
import VPopover from "@morpheme/popover";
</script>
<template>
<VPopover />
</template>Storybook
View Storybook documentation here.
Morpheme