UIPackage
Menu

Framework

Change language

Boilerplate repo

Dialog

dialogui

Free-form modal primitive — composable from `Dialog`, `DialogTrigger`, `DialogContent`, and friends. Use for forms, info cards, pickers, and any custom modal layout. For confirm/destructive prompts, prefer the prebuilt `AlertModal` shortcut.

Also available for React ->

When to use which

Decision Guide

Dialogs capture immediate user focus for critical actions. Sheets slide in from screen edges for deep secondary forms, while Popovers provide lightweight contextual cards.

ComponentRole
Dialogcurrent

Critical confirmations, destructive warnings, or focused single-purpose tasks requiring user resolution.

Modal Window
Sheet

Complex edit forms, filter panes, or shopping carts that retain underlying page context.

Off-Canvas Slide-Over
Drawer

Mobile bottom sheets, touch-friendly sliding panels, or secondary inspection trays.

Edge Panel / Bottom Sheet
Popover

Small contextual dropdowns, color pickers, date pickers, or inline configuration flyouts.

Contextual Floating Card
  • Urgent confirmation or focused prompt → Dialog
  • Side panel for deep form editing → Sheet (view)
  • Mobile bottom sheet or gesture tray → Drawer (view)
  • Anchored contextual flyout or controls → Popover (view)

Installation

$npx shadcn-vue@latest add https://uipkge.dev/r/vue/dialog.json
Named registry:npx shadcn-vue@latest add @uipkge/dialogInstalls to:app/components/ui/dialog/

Examples

Loading interactive previews…

Used by

Files installed (11)

  • app/components/ui/dialog/Dialog.vue0.6 kB
    <script setup lang="ts">
    import { computed } from 'vue'
    import type { DialogRootEmits, DialogRootProps } from 'reka-ui'
    import { DialogRoot, useForwardPropsEmits } from 'reka-ui'
    
    const props = defineProps<DialogRootProps>()
    const emits = defineEmits<DialogRootEmits>()
    
    const forwarded = useForwardPropsEmits(props, emits)
    
    // Merge forwarded with slotProps to ensure state is passed through
    const mergedProps = computed(() => ({
      ...forwarded.value,
    }))
    </script>
    
    <template>
      <DialogRoot v-slot="slotProps" v-bind="mergedProps">
        <slot v-bind="slotProps" />
      </DialogRoot>
    </template>
    
  • app/components/ui/dialog/DialogClose.vue0.3 kB
  • app/components/ui/dialog/DialogContent.vue2.2 kB
  • app/components/ui/dialog/DialogDescription.vue0.7 kB
  • app/components/ui/dialog/DialogFooter.vue0.6 kB
  • app/components/ui/dialog/DialogHeader.vue0.3 kB
  • app/components/ui/dialog/DialogOverlay.vue0.9 kB
  • app/components/ui/dialog/DialogScrollContent.vue2.2 kB
  • app/components/ui/dialog/DialogTitle.vue0.6 kB
  • app/components/ui/dialog/DialogTrigger.vue0.4 kB
  • app/components/ui/dialog/index.ts0.6 kB

Raw manifest:https://uipkge.dev/r/vue/dialog.json