diff options
author | Samuel Newman <mozzius@protonmail.com> | 2025-01-14 12:53:13 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-01-14 12:53:13 +0000 |
commit | 479a4a92e10e8d12d3e164a65970bd2de4abfe8a (patch) | |
tree | d73c7c5db743d50c7e43528dc37e1f2a0ca0e24d /src/components/Button.tsx | |
parent | 1fc889b883ffd666b4c439738f1f5e97496d55e6 (diff) | |
download | voidsky-479a4a92e10e8d12d3e164a65970bd2de4abfe8a.tar.zst |
Account quick switch on web (#7190)
* account quick switch on web * dont show line if one account * switch account label text * add chevron hover state * swagged up hover state * add icons * tune scale anim and respect prefers-reduced-motion * fix reduced motion * fix placeholder position * move menu components out to separate component * Pipe through outer handlers to Button * Abstract lag in control.isOpen state * add profile info into empty space * fix tablet * Alternative * Revert "Alternative" This reverts commit 050ab9595ef3bbc32529ad6588e4690d37539fbe. * maybe fix flicker issue * just do 50ms when not active * delay other animations --------- Co-authored-by: Eric Bailey <git@esb.lol>
Diffstat (limited to 'src/components/Button.tsx')
-rw-r--r-- | src/components/Button.tsx | 46 |
1 files changed, 30 insertions, 16 deletions
diff --git a/src/components/Button.tsx b/src/components/Button.tsx index 871c17ed5..123e6ee42 100644 --- a/src/components/Button.tsx +++ b/src/components/Button.tsx @@ -3,10 +3,12 @@ import { AccessibilityProps, GestureResponderEvent, MouseEvent, + NativeSyntheticEvent, Pressable, PressableProps, StyleProp, StyleSheet, + TargetedEvent, TextProps, TextStyle, View, @@ -76,6 +78,8 @@ export type ButtonProps = Pick< | 'onHoverOut' | 'onPressIn' | 'onPressOut' + | 'onFocus' + | 'onBlur' > & AccessibilityProps & VariantProps & { @@ -116,6 +120,12 @@ export const Button = React.forwardRef<View, ButtonProps>( style, hoverStyle: hoverStyleProp, PressableComponent = Pressable, + onPressIn: onPressInOuter, + onPressOut: onPressOutOuter, + onHoverIn: onHoverInOuter, + onHoverOut: onHoverOutOuter, + onFocus: onFocusOuter, + onBlur: onBlurOuter, ...rest }, ref, @@ -127,7 +137,6 @@ export const Button = React.forwardRef<View, ButtonProps>( focused: false, }) - const onPressInOuter = rest.onPressIn const onPressIn = React.useCallback( (e: GestureResponderEvent) => { setState(s => ({ @@ -138,7 +147,6 @@ export const Button = React.forwardRef<View, ButtonProps>( }, [setState, onPressInOuter], ) - const onPressOutOuter = rest.onPressOut const onPressOut = React.useCallback( (e: GestureResponderEvent) => { setState(s => ({ @@ -149,7 +157,6 @@ export const Button = React.forwardRef<View, ButtonProps>( }, [setState, onPressOutOuter], ) - const onHoverInOuter = rest.onHoverIn const onHoverIn = React.useCallback( (e: MouseEvent) => { setState(s => ({ @@ -160,7 +167,6 @@ export const Button = React.forwardRef<View, ButtonProps>( }, [setState, onHoverInOuter], ) - const onHoverOutOuter = rest.onHoverOut const onHoverOut = React.useCallback( (e: MouseEvent) => { setState(s => ({ @@ -171,18 +177,26 @@ export const Button = React.forwardRef<View, ButtonProps>( }, [setState, onHoverOutOuter], ) - const onFocus = React.useCallback(() => { - setState(s => ({ - ...s, - focused: true, - })) - }, [setState]) - const onBlur = React.useCallback(() => { - setState(s => ({ - ...s, - focused: false, - })) - }, [setState]) + const onFocus = React.useCallback( + (e: NativeSyntheticEvent<TargetedEvent>) => { + setState(s => ({ + ...s, + focused: true, + })) + onFocusOuter?.(e) + }, + [setState, onFocusOuter], + ) + const onBlur = React.useCallback( + (e: NativeSyntheticEvent<TargetedEvent>) => { + setState(s => ({ + ...s, + focused: false, + })) + onBlurOuter?.(e) + }, + [setState, onBlurOuter], + ) const {baseStyles, hoverStyles} = React.useMemo(() => { const baseStyles: ViewStyle[] = [] |