This library provides flexible, accessible, and customizable dialog components for Vue 3 using the native <dialog>
element.
- Accessible out-of-the-box with native
<dialog>
support HtmlDialog.vue
: customizable dialog with backdrop, escape key, click-to-close, transitions, and moreFullNativeDialog.vue
: lightweight, native dialog with transitions- Simple imperative API via
ref
- Fully typed with TypeScript
- Animatable with custom classes
npm install vue-html-dialog
or with:
yarn add vue-html-dialog
or with:
pnpm add vue-html-dialog
Or use it directly via CDN:
<script src="https://unpkg.com/vue-html-dialog"></script>
import { HtmlDialog, FullNativeDialog } from 'vue-html-dialog'
import 'vue-html-dialog/vue-html-dialog.css'
const app = createApp(App)
app.component('HtmlDialog', HtmlDialog)
app.component('FullNativeDialog', FullNativeDialog)
<template>
<button @click="showDialog">Open Dialog</button>
<HtmlDialog ref="dialogRef" :model-value="true" @close="onClose">
<p>This is the content of the dialog.</p>
</HtmlDialog>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import { HtmlDialog } from 'vue-html-dialog'
const dialogRef = ref()
function showDialog() {
dialogRef.value?.openDialog()
}
function onClose() {
console.log('Dialog closed')
}
</script>
Prop | Type | Default | Description |
---|---|---|---|
modelValue |
boolean |
false |
Controls dialog visibility |
showBackdrop |
boolean |
true |
Shows a backdrop |
closeOnBackdropClick |
boolean |
true |
Closes on backdrop click |
closeOnOutsideClick |
boolean |
true |
Closes on outside click (when no backdrop) |
closeOnEscape |
boolean |
true |
Closes on Escape key |
showCloseButton |
boolean |
true |
Shows close × button |
enterActiveClass |
string |
'fade-enter-active' |
Transition class on enter |
leaveActiveClass |
string |
'fade-leave-active' |
Transition class on leave |
transitionDuration |
number |
300 |
Transition time in ms |
- Default slot: Content inside the dialog.
Event | Description |
---|---|
open |
Fires when dialog opens |
close |
Fires when dialog closes |
This component is a lightweight wrapper around the native <dialog>
element, providing a simple way to create dialogs with transitions.
Prop | Type | Default | Description |
---|---|---|---|
modelValue |
boolean |
false |
Controls dialog visibility |
showBackdrop |
boolean |
true |
Shows a backdrop |
closeOnBackdropClick |
boolean |
true |
Closes on backdrop click |
closeOnOutsideClick |
boolean |
true |
Closes on outside click (when no backdrop) |
closeOnEscape |
boolean |
true |
Closes on Escape key |
showCloseButton |
boolean |
true |
Shows close × button |
enterActiveClass |
string |
'fade-enter-active' |
Transition class on enter |
leaveActiveClass |
string |
'fade-leave-active' |
Transition class on leave |
transitionDuration |
number |
300 |
Transition time in ms |
- Default slot: Content inside the dialog.
Event | Description |
---|---|
update:modelValue |
Syncs dialog visibility |
open |
Fires when dialog opens |
close |
Fires when dialog closes |
If you used a previous version of this library, please note that the component API has changed:
HtmlDialog
is the new name for the classic dialog component and now has props and events for better control.FullNativeDialog
is new
MIT