Files
ui/docs/content/3.components/popover.md
2024-10-22 22:52:38 +02:00

208 lines
3.7 KiB
Markdown

---
description: A non-modal dialog that floats around a trigger element.
links:
- label: Popover
icon: i-custom-radix-vue
to: https://www.radix-vue.com/components/popover.html
- label: GitHub
icon: i-simple-icons-github
to: https://github.com/nuxt/ui/tree/v3/src/runtime/components/Popover.vue
---
## Usage
Use a [Button](/components/button) or any other component in the default slot of the Popover.
Then, use the `#content` slot to add the content displayed when the Popover is open.
::component-code
---
prettier: true
slots:
default: |
<UButton label="Open" color="neutral" variant="subtle" />
content: |
<Placeholder class="size-48 m-4 inline-flex" />
---
:u-button{label="Open" color="neutral" variant="subtle"}
#content
:placeholder{class="size-48 m-4 inline-flex"}
::
### Mode
Use the `mode` prop to change the mode of the Popover. Defaults to `click`.
::component-code
---
prettier: true
items:
mode:
- click
- hover
props:
mode: 'hover'
slots:
default: |
<UButton label="Open" color="neutral" variant="subtle" />
content: |
<Placeholder class="size-48 m-4 inline-flex" />
---
:u-button{label="Open" color="neutral" variant="subtle"}
#content
:placeholder{class="size-48 m-4 inline-flex"}
::
::note
When using the `hover` mode, the Radix Vue [HoverCard](https://www.radix-vue.com/components/hover-card.html) component is used instead of the [Popover](https://www.radix-vue.com/components/popover.html).
::
### Delay
When using the `hover` mode, you can use the `open-delay` and `close-delay` props to control the delay before the Popover is opened or closed.
::component-code
---
prettier: true
ignore:
- mode
props:
mode: 'hover'
openDelay: 500
closeDelay: 300
slots:
default: |
<UButton label="Open" color="neutral" variant="subtle" />
content: |
<Placeholder class="size-48 m-4 inline-flex" />
---
:u-button{label="Open" color="neutral" variant="subtle"}
#content
:placeholder{class="size-48 m-4 inline-flex"}
::
### Content
Use the `content` prop to control how the Popover content is rendered, like its `align` or `side` for example.
::component-code
---
prettier: true
items:
content.align:
- start
- center
- end
content.side:
- right
- left
- top
- bottom
props:
content:
align: center
side: bottom
sideOffset: 8
slots:
default: |
<UButton label="Open" color="neutral" variant="subtle" />
content: |
<Placeholder class="size-48 m-4 inline-flex" />
---
:u-button{label="Open" color="neutral" variant="subtle"}
#content
:placeholder{class="size-48 m-4 inline-flex"}
::
### Arrow
Use the `arrow` prop to display an arrow on the Popover.
::component-code
---
prettier: true
ignore:
- arrow
props:
arrow: true
slots:
default: |
<UButton label="Open" color="neutral" variant="subtle" />
content: |
<Placeholder class="size-48 m-4 inline-flex" />
---
:u-button{label="Open" color="neutral" variant="subtle"}
#content
:placeholder{class="size-48 m-4 inline-flex"}
::
## Examples
### Control open state
You can control the open state by using the `default-open` prop or the `v-model:open` directive.
::component-example
---
name: 'popover-open-example'
---
::
::note
In this example, leveraging [defineShortcuts](/composables/define-shortcuts), you can toggle the Popover by pressing :kbd{value="O"}.
::
### With command palette
You can use a [CommandPalette](/components/command-palette) component inside the Popover's content.
::component-example
---
collapse: true
name: 'popover-command-palette-example'
---
::
## API
### Props
:component-props
### Slots
:component-slots
### Emits
:component-emits
## Theme
:component-theme