@@ -42,6 +42,7 @@ const props = withDefaults(
4242 closeOnClickOverlay: true ,
4343 closeOnPressEscape: true ,
4444 destroyOnClose: true ,
45+ openAutoFocus: false ,
4546 },
4647)
4748
@@ -55,13 +56,8 @@ const slots = defineSlots<{
5556
5657const dialogContentRef = useTemplateRef (' dialogContentRef' )
5758const dialogHeaderRef = ref ()
58- const dialogAreaRef = useTemplateRef (' dialogAreaRef' )
5959const dialogRef = ref ()
6060
61- defineExpose ({
62- areaRef: dialogAreaRef ,
63- })
64-
6561const modalId = shallowRef (props .id ?? useId ())
6662const isOpen = ref (props .modelValue )
6763const isMaximize = ref (props .maximize )
@@ -174,6 +170,13 @@ async function onCancel() {
174170 }
175171}
176172
173+ function handleOpenAutoFocus(e : Event ) {
174+ if (! props .openAutoFocus ) {
175+ e .preventDefault ()
176+ e .stopPropagation ()
177+ }
178+ }
179+
177180function handleFocusOutside(e : Event ) {
178181 e .preventDefault ()
179182 e .stopPropagation ()
@@ -222,13 +225,13 @@ function handleAnimationEnd() {
222225 :maximize =" isMaximize"
223226 :maximizable =" props.maximizable"
224227 :force-mount =" forceMount"
225- :class =" cn('left-0 right-0 top-0 md:top-[5vh] flex flex-col p-0 gap-0 mx-auto h-[calc-size(auto,size)] min-h-full md:min-h-auto max-h-full md:max-h-[90vh] translate-x-0 translate-y-0', props.class, {
228+ :class =" cn('left-0 right-0 top-0 md:top-[5vh] flex flex-col p-0 gap-0 mx-auto h-[calc-size(auto,size)] min-h-full overflow-hidden md:min-h-auto max-h-full md:max-h-[90vh] translate-x-0 translate-y-0', props.class, {
226229 'md:top-0 size-full max-w-full max-h-full md:max-h-full': isMaximize,
227230 'md:top-1/2 md:-translate-y-1/2!': props.alignCenter,
228231 'duration-0': isDragging,
229232 'hidden': isClosed,
230233 })"
231- @open-auto-focus =" handleFocusOutside "
234+ @open-auto-focus =" handleOpenAutoFocus "
232235 @close-auto-focus =" handleFocusOutside"
233236 @focus-outside =" handleFocusOutside"
234237 @pointer-down-outside =" handleClickOutside"
@@ -273,14 +276,12 @@ function handleAnimationEnd() {
273276 <DialogTitle />
274277 <DialogDescription />
275278 </VisuallyHidden >
276- <FaScrollArea v-if =" !!slots.default" ref =" dialogAreaRef" class =" flex-1" >
277- <div :class =" cn('min-h-40 p-4', props.contentClass)" >
278- <slot />
279- </div >
280- <div v-show =" props.loading" class =" absolute inset-0 z-1000 size-full flex-center bg-popover/75" >
281- <FaIcon name =" i-line-md:loading-twotone-loop" class =" size-10" />
282- </div >
283- </FaScrollArea >
279+ <div v-if =" !!slots.default" :class =" cn('relative flex-1 min-h-40 p-4 overflow-y-auto', props.contentClass)" >
280+ <slot />
281+ </div >
282+ <div v-show =" props.loading" class =" absolute inset-0 z-1000 size-full flex-center bg-popover/75" >
283+ <FaIcon name =" i-line-md:loading-twotone-loop" class =" size-10" />
284+ </div >
284285 <DialogFooter
285286 v-if =" footer" :class =" cn('p-3 gap-y-2', props.footerClass, {
286287 'md:justify-center': props.center,
0 commit comments