@@ -101,7 +101,7 @@ export function useDrawer(props: UseDrawerProps & DialogEmitHandlers): DrawerRoo
101
101
emitRelease,
102
102
emitClose,
103
103
emitOpenChange,
104
- open : isOpen ,
104
+ open,
105
105
dismissible,
106
106
nested,
107
107
fixed,
@@ -113,6 +113,7 @@ export function useDrawer(props: UseDrawerProps & DialogEmitHandlers): DrawerRoo
113
113
fadeFromIndex,
114
114
} = props
115
115
116
+ const isOpen = ref ( open . value ?? false )
116
117
const hasBeenOpened = ref ( false )
117
118
const isVisible = ref ( false )
118
119
const isDragging = ref ( false )
@@ -372,7 +373,7 @@ export function useDrawer(props: UseDrawerProps & DialogEmitHandlers): DrawerRoo
372
373
} )
373
374
374
375
// Don't reset background if swiped upwards
375
- if ( shouldScaleBackground . value && currentSwipeAmount && currentSwipeAmount > 0 && isOpen ) {
376
+ if ( shouldScaleBackground . value && currentSwipeAmount && currentSwipeAmount > 0 && isOpen . value ) {
376
377
set (
377
378
wrapper ,
378
379
{
@@ -407,10 +408,9 @@ export function useDrawer(props: UseDrawerProps & DialogEmitHandlers): DrawerRoo
407
408
scaleBackground ( false )
408
409
restorePositionSetting ( )
409
410
410
- isVisible . value = false
411
411
window . setTimeout ( ( ) => {
412
- emitOpenChange ( false )
413
- // isOpen.value = false
412
+ isVisible . value = false
413
+ isOpen . value = false
414
414
} , 300 )
415
415
416
416
window . setTimeout ( ( ) => {
@@ -491,13 +491,23 @@ export function useDrawer(props: UseDrawerProps & DialogEmitHandlers): DrawerRoo
491
491
resetDrawer ( )
492
492
}
493
493
494
- watch ( isOpen , ( open ) => {
495
- if ( open ) {
494
+ watch ( isOpen , ( o ) => {
495
+ if ( o ) {
496
496
openTime . value = new Date ( )
497
497
scaleBackground ( true )
498
498
}
499
- emitOpenChange ( open )
500
- } )
499
+ emitOpenChange ( o )
500
+ } , { immediate : true } )
501
+
502
+ watch ( open , ( o ) => {
503
+ if ( o ) {
504
+ isOpen . value = o
505
+ hasBeenOpened . value = true
506
+ }
507
+ else {
508
+ closeDrawer ( )
509
+ }
510
+ } , { immediate : true } )
501
511
502
512
function scaleBackground ( open : boolean ) {
503
513
const wrapper = document . querySelector ( '[vaul-drawer-wrapper]' )
@@ -587,6 +597,7 @@ export function useDrawer(props: UseDrawerProps & DialogEmitHandlers): DrawerRoo
587
597
}
588
598
589
599
return {
600
+ open,
590
601
isOpen,
591
602
modal,
592
603
keyboardIsOpen,
0 commit comments