Files
ui/docs/content/3.components/modal.md
2024-09-04 11:05:21 +02:00

6.5 KiB

description, links
description links
A dialog window that can be used to display a message or request user input.
label icon to
Dialog i-custom-radix-vue https://www.radix-vue.com/components/dialog.html
label icon to
GitHub i-simple-icons-github https://github.com/benjamincanac/ui3/tree/dev/src/runtime/components/Modal.vue

Usage

Use a Button or any other component in the default slot of the Modal.

Then, use the #content slot to add the content displayed when the Modal is open.

::component-code

prettier: true class: 'justify-center' slots: default: |

<UButton label="Open" color="gray" variant="subtle" />

content: |

<Placeholder class="h-48 m-4" />

:u-button{label="Open" color="gray" variant="subtle"}

#content :placeholder{class="h-48 m-4"} ::

You can also use the #header{lang="ts-type"}, #body{lang="ts-type"} and #footer{lang="ts-type"} slots to customize the Modal's content.

Title

Use the title prop to set the title of the Modal's header.

::component-code

prettier: true class: 'justify-center' props: title: 'Modal with title' slots: default: |

<UButton label="Open" color="gray" variant="subtle" />

body: |

<Placeholder class="h-48" />

:u-button{label="Open" color="gray" variant="subtle"}

#body :placeholder{class="h-48"} ::

Description

Use the description prop to set the description of the Modal's header.

::component-code

prettier: true class: 'justify-center' ignore:

  • title props: title: 'Modal with description' description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.' slots: default: |

body: |

<Placeholder class="h-48" />

:u-button{label="Open" color="gray" variant="subtle"}

#body :placeholder{class="h-48"} ::

Close

Use the close prop to customize or hide the close button displayed in the Modal's header. You can pass all the props of the Button component to customize it.

::tip The close button is not displayed if the #content slot is used as it's a part of the header. ::

Use the close-icon prop to customize the button Icon. Defaults to i-heroicons-x-mark-20-solid.

::component-code

prettier: true class: 'justify-center' ignore:

  • title

  • close.color

  • close.variant props: title: 'Modal with close button' close: color: primary variant: outline class: 'rounded-full' closeIcon: '' slots: default: |

body: |

<Placeholder class="h-48" />

:u-button{label="Open" color="gray" variant="subtle"}

#body :placeholder{class="h-48"} ::

::tip You can customize this icon globally in your app.config.ts under ui.icons.close key. ::

Overlay

Use the overlay prop to control whether the Modal has an overlay or not. Defaults to true.

::component-code

prettier: true ignore:

  • title class: 'justify-center' props: overlay: false title: 'Modal without overlay' slots: default: |

body: |

<Placeholder class="h-48" />

:u-button{label="Open" color="gray" variant="subtle"}

#body :placeholder{class="h-48"} ::

Transition

Use the transition prop to control whether the Modal is animated or not. Defaults to true.

::component-code

prettier: true ignore:

  • title class: 'justify-center' props: transition: false title: 'Modal without transition' slots: default: |

body: |

<Placeholder class="h-48" />

:u-button{label="Open" color="gray" variant="subtle"}

#body :placeholder{class="h-48"} ::

Fullscreen

Use the fullscreen prop to make the Modal fullscreen.

::component-code

prettier: true ignore:

  • title

  • fullscreen class: 'justify-center' props: fullscreen: true title: 'Modal fullscreen' slots: default: |

body: |

<Placeholder class="h-full" />

:u-button{label="Open" color="gray" variant="subtle"}

#body :placeholder{class="h-full"} ::

Prevent close

Use the prevent-close prop to prevent the Modal from being closed when clicking outside of it.

::component-code

prettier: true ignore:

  • title

  • preventClose class: 'justify-center' props: preventClose: true title: 'Modal prevent close' slots: default: |

body: |

<Placeholder class="h-48" />

:u-button{label="Open" color="gray" variant="subtle"}

#body :placeholder{class="h-48"} ::

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: 'modal-open-example' class: 'justify-center'

::

::note In this example, press :kbd{value="O"} to toggle the Modal. ::

::tip This allows you to move the trigger outside of the Modal or remove it entirely. ::

Control programatically

You can use the useModal composable to open a Modal programatically.

::important Make sure to wrap your app with the App component that instantiates the ModalProvider component. ::

First, create a modal component that will be opened programatically:

::component-example

name: 'modal-example' preview: false

::

Then, use it in your app:

::component-example

name: 'modal-programmatic-example' class: 'justify-center'

::

::tip You can close the modal within the modal component by calling modal.close(). ::

Nested modals

You can nest modals within each other.

::component-example

name: 'modal-nested-example' class: 'justify-center'

::

Use the #footer slot to add content after the Modal's body.

::component-example

name: 'modal-footer-slot-example' class: 'justify-center'

::

With command palette

You can use the CommandPalette component inside the Modal's content.

::component-example

collapse: true name: 'modal-command-palette-example' class: 'justify-center'

::

API

Props

::component-props

ignore:

  • as
  • to
  • target
  • active
  • activeClass
  • inactiveClass
  • exactActiveClass
  • ariaCurrentValue
  • href
  • rel
  • noRel
  • prefetch
  • noPrefetch
  • prefetchedClass
  • replace
  • exact
  • exactQuery
  • exactHash
  • external

::

Slots

:component-slots

Emits

:component-emits

Theme

:component-theme