Skip to main content
Vuetify0 is now in alpha!
Vuetify0 Logo
Theme
Mode
Palettes
Accessibility
Vuetify One
Sign in to Vuetify One

Access premium tools across the Vuetify ecosystem — Bin, Play, Studio, and more.

Not a subscriber? See what's included

Dialog

A headless modal dialog component using the native HTML dialog element.


Renders elementIntermediateApr 5, 2026
Browser Support: Native Dialog
Chrome 37+ Edge 79+ Firefox 98+ Safari 15.4+ Opera 24+
Uses the native dialog element with showModal(). Safari 15.4+ is required; older versions have no support.

Usage

The Dialog component leverages the native showModal() API for proper modal behavior including focus trapping, backdrop rendering, and escape key handling. It provides v-model support for open/closed state management.

Basic Modal Dialog

A modal dialog with title, description, and cancel/confirm buttons using the native HTML <dialog> element.

Deactivate account

This will permanently deactivate your account.

Are you sure you want to deactivate your account? All of your data will be permanently removed from our servers. This action cannot be undone.

Features

Click-Outside Dismissal

By default, clicking the backdrop closes the dialog. Set closeOnClickOutside to false on Dialog.Content to prevent this:

vue
<template>
  <Dialog.Content :close-on-click-outside="false">
    <!-- Dialog won't close on backdrop click -->
  </Dialog.Content>
</template>

Blocking Dialogs

The blocking prop disables scrim-based dismissal entirely — the dialog can only be closed programmatically. Use this for critical confirmations where the user must make an explicit choice:

vue
<template>
  <Dialog.Content blocking>
    <!-- No scrim, no click-outside close — must use Dialog.Close or v-model -->
  </Dialog.Content>
</template>

Anatomy

Anatomy
<script setup lang="ts">
  import { Dialog } from '@vuetify/v0'
</script>

<template>
  <Dialog.Root>
    <Dialog.Activator />

    <Dialog.Content>
      <Dialog.Title />

      <Dialog.Description />

      <Dialog.Close />
    </Dialog.Content>
  </Dialog.Root>
</template>

API Reference

The following API details are for all variations of the Dialog component.

Dialog.Root

Props

namespace

string | undefined

Namespace for dependency injection

Default: "v0:dialog"

id

string | undefined

Unique identifier for the dialog (auto-generated if not provided)

modelValue

boolean | undefined

Default: false

Events

update:model-value

[value: boolean]

Slots

default

DialogRootSlotProps

Dialog.Activator

Props

namespace

string | undefined

Namespace for dependency injection

Default: "v0:dialog"

Slots

default

DialogActivatorSlotProps

Dialog.Close

Props

namespace

string | undefined

Namespace for dependency injection

Default: "v0:dialog"

Slots

default

DialogCloseSlotProps

Dialog.Content

Props

namespace

string | undefined

Namespace for dependency injection

Default: "v0:dialog"

closeOnClickOutside

boolean | undefined

Close dialog when clicking outside content

Default: true

blocking

boolean | undefined

Whether this dialog blocks scrim dismissal

Default: false

Events

cancel

[e: Event]

close

[e: Event]

Slots

default

DialogContentSlotProps

Dialog.Description

Props

namespace

string | undefined

Namespace for dependency injection

Default: "v0:dialog"

Slots

default

DialogDescriptionSlotProps

Dialog.Title

Props

namespace

string | undefined

Namespace for dependency injection

Default: "v0:dialog"

Slots

default

DialogTitleSlotProps
Was this page helpful?

© 2016-1970 Vuetify, LLC
Ctrl+/