@@ -13,16 +13,23 @@ const drawer = useDrawer();
1313const props = withDefaults (defineProps <DrawerProps >(), { direction: ' bottom' });
1414const swipeDirections = ref <SwipeDirection []>([props .direction ]);
1515
16+ const closeDrawer = () => {
17+ drawer .close ();
18+ emit (' close' );
19+ };
20+
1621const { offset, isSwiping, onPointerDown, onPointerMove, onPointerUp, onPointerCancel, isTapGesture } = useSwipeHandler ({
1722 directions: swipeDirections ,
1823 swipeThreshold: { px: SWIPE_THRESHOLD },
1924 velocityThreshold: VELOCITY_THRESHOLD ,
20- onSwipeOut: drawer . close ,
25+ onSwipeOut: closeDrawer ,
2126});
27+
28+ const emit = defineEmits <(e : ' close' ) => void >();
2229 </script >
2330<template >
2431 <RootDrawer
25- @keydown .esc =" drawer . close "
32+ @keydown .esc =" closeDrawer "
2633 @pointerdown =" onPointerDown "
2734 @pointermove =" onPointerMove "
2835 @pointerup =" onPointerUp "
@@ -35,25 +42,29 @@ const { offset, isSwiping, onPointerDown, onPointerMove, onPointerUp, onPointerC
3542 } "
3643 id="drawer"
3744 >
38- <div class =" flex flex-col items-center justify-center" >
39- <div class =" group flex w-full cursor-pointer pt-4 " >
45+ <div class =" flex flex-col items-center justify-center gap-3 p-4 md:p-3 " >
46+ <div class =" group flex w-full cursor-pointer pb-1 sm:p-0 " >
4047 <slot name =" handle" >
4148 <DrawerHandle
4249 :aria-expanded =" drawer .isOpen .value "
4350 @keydown .enter .prevent =" drawer .close "
4451 @keydown .space .prevent =" drawer .close "
52+ @pointerdown =" onPointerDown "
53+ @pointermove =" onPointerMove "
54+ @dragend =" onPointerUp "
55+ @pointercancel =" onPointerCancel "
4556 @pointerup ="
4657 () => {
4758 onPointerUp ();
48- if (isTapGesture ()) drawer . close ();
59+ if (isTapGesture ()) closeDrawer ();
4960 }
5061 "
5162 />
5263 </slot >
5364 </div >
54- <div class =" flex w-full flex-col gap-3 p-3 " >
65+ <div class =" flex w-full flex-col gap-3" v-if = " $slots.header || drawer.props.value.title || drawer.props.value.description " >
5566 <slot name =" header" >
56- <div class =" flex w-full flex-col gap-1.5" >
67+ <div class =" flex w-full flex-col gap-1.5" v-if = " drawer.props.value.title || drawer.props.value.description " >
5768 <h2 id =" drawerTitle" class =" text-foreground flex-1 text-xl font-semibold" >
5869 <slot name =" title" >
5970 {{ drawer.props.value.title ?? title ?? 'Title' }}
@@ -65,12 +76,12 @@ const { offset, isSwiping, onPointerDown, onPointerMove, onPointerUp, onPointerC
6576 </div >
6677 </slot >
6778 </div >
68- <div v-if =" $slots.default" class =" scrollbar-hide flex max-h-[60vh] w-full flex-col gap-3 overflow-y-scroll p-3 " >
79+ <div v-if =" $slots.default" class =" scrollbar-hide flex max-h-[60vh] w-full flex-col gap-3 overflow-y-scroll" >
6980 <slot > </slot >
7081 </div >
71- <div v-if =" $slots.footer || !$slots.default" class =" flex w-full flex-col gap-3 p-3 " >
82+ <div v-if =" $slots.footer || !$slots.default" class =" flex w-full flex-col gap-3" >
7283 <slot name =" footer" >
73- <ButtonText :class =" ' h-8 w-full text-sm capitalize ring-1' " :variant =" ' default' " @click =" drawer . close () " > Close Drawer </ButtonText >
84+ <ButtonText :class =" ' h-8 w-full text-sm capitalize ring-1' " :variant =" ' default' " @click =" closeDrawer " > Close Drawer </ButtonText >
7485 </slot >
7586 </div >
7687 </div >
0 commit comments