diff options
author | Samuel Newman <mozzius@protonmail.com> | 2025-03-21 18:29:14 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-03-21 09:29:14 -0700 |
commit | c4785ef96e13d02b217dce4e777269c0e895507d (patch) | |
tree | 785b8f00ded8dbdb6cd167a280141faad8873e3b /src/components/ContextMenu/Backdrop.tsx | |
parent | f6f253b4c93f5166648615d03f38ede40135f646 (diff) | |
download | voidsky-c4785ef96e13d02b217dce4e777269c0e895507d.tar.zst |
New `ContextMenu` menu type for DM messages (#8014)
* get context menu somewhat working ish * take screenshot rather than double rendering * get animations somewhat working * get transform animation working * rm log * upwards safe area * get working on android * get android working once and for all * fix positioning on both platforms * use dark blur on ios always, fix dark mode * allow closing with hardware back press * try and fix type error * add note about ts-ignore * round post * add image capture error handling * extract magic numbers * set explicit embed width, rm top margin * Message embed width tweaks * Format * fix position of embeds * same as above for web --------- Co-authored-by: Eric Bailey <git@esb.lol>
Diffstat (limited to 'src/components/ContextMenu/Backdrop.tsx')
-rw-r--r-- | src/components/ContextMenu/Backdrop.tsx | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/components/ContextMenu/Backdrop.tsx b/src/components/ContextMenu/Backdrop.tsx new file mode 100644 index 000000000..857be7c44 --- /dev/null +++ b/src/components/ContextMenu/Backdrop.tsx @@ -0,0 +1,45 @@ +import {Pressable} from 'react-native' +import Animated, { + Extrapolation, + interpolate, + SharedValue, + useAnimatedStyle, +} from 'react-native-reanimated' +import {msg} from '@lingui/macro' +import {useLingui} from '@lingui/react' + +import {atoms as a, useTheme} from '#/alf' + +export function Backdrop({ + animation, + intensity = 50, + onPress, +}: { + animation: SharedValue<number> + intensity?: number + onPress?: () => void +}) { + const t = useTheme() + const {_} = useLingui() + + const animatedStyle = useAnimatedStyle(() => ({ + opacity: interpolate( + animation.get(), + [0, 1], + [0, intensity / 100], + Extrapolation.CLAMP, + ), + })) + + return ( + <Animated.View + style={[a.absolute, a.inset_0, t.atoms.bg_contrast_975, animatedStyle]}> + <Pressable + style={a.flex_1} + accessibilityLabel={_(msg`Close menu`)} + accessibilityHint={_(msg`Tap to close context menu`)} + onPress={onPress} + /> + </Animated.View> + ) +} |