diff --git a/src/components/Dialog/index.tsx b/src/components/Dialog/index.tsx
index b96d1f83..ef4f4741 100644
--- a/src/components/Dialog/index.tsx
+++ b/src/components/Dialog/index.tsx
@@ -1,12 +1,15 @@
import React, {useImperativeHandle} from 'react'
-import {View, Dimensions, Keyboard} from 'react-native'
+import {View, Dimensions, Keyboard, Pressable} from 'react-native'
import BottomSheet, {
- BottomSheetBackdrop,
+ BottomSheetBackdropProps,
BottomSheetScrollView,
BottomSheetTextInput,
BottomSheetView,
+ useBottomSheet,
+ WINDOW_HEIGHT,
} from '@gorhom/bottom-sheet'
import {useSafeAreaInsets} from 'react-native-safe-area-context'
+import Animated, {useAnimatedStyle} from 'react-native-reanimated'
import {useTheme, atoms as a, flatten} from '#/alf'
import {Portal} from '#/components/Portal'
@@ -26,6 +29,47 @@ export * from '#/components/Dialog/types'
// @ts-ignore
export const Input = createInput(BottomSheetTextInput)
+function Backdrop(props: BottomSheetBackdropProps) {
+ const t = useTheme()
+ const bottomSheet = useBottomSheet()
+
+ const animatedStyle = useAnimatedStyle(() => {
+ const opacity =
+ (Math.abs(WINDOW_HEIGHT - props.animatedPosition.value) - 50) / 1000
+
+ return {
+ opacity: Math.min(Math.max(opacity, 0), 0.55),
+ }
+ })
+
+ const onPress = React.useCallback(() => {
+ bottomSheet.close()
+ }, [bottomSheet])
+
+ return (
+
+
+
+ )
+}
+
export function Outer({
children,
control,
@@ -114,15 +158,7 @@ export function Outer({
ref={sheet}
index={openIndex}
backgroundStyle={{backgroundColor: 'transparent'}}
- backdropComponent={props => (
-
- )}
+ backdropComponent={Backdrop}
handleIndicatorStyle={{backgroundColor: t.palette.primary_500}}
handleStyle={{display: 'none'}}
onChange={onChange}>