import * as NavigationMenuPrimitive from '@rn-primitives/navigation-menu'; import { cva } from 'class-variance-authority'; import * as React from 'react'; import { Platform, View } from 'react-native'; import Animated, { Extrapolation, FadeInLeft, FadeOutLeft, interpolate, useAnimatedStyle, useDerivedValue, withTiming, } from 'react-native-reanimated'; import { ChevronDown } from '../../lib/icons/ChevronDown'; import { cn } from '../../lib/utils'; function NavigationMenu({ className, children, ...props }: NavigationMenuPrimitive.RootProps & { ref?: React.RefObject; }) { return ( {children} {Platform.OS === 'web' && } ); } function NavigationMenuList({ className, ...props }: NavigationMenuPrimitive.ListProps & { ref?: React.RefObject; }) { return ( ); } const NavigationMenuItem = NavigationMenuPrimitive.Item; const navigationMenuTriggerStyle = cva( 'web:group web:inline-flex flex-row h-10 native:h-12 native:px-3 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium web:transition-colors web:hover:bg-accent active:bg-accent web:hover:text-accent-foreground web:focus:bg-accent web:focus:text-accent-foreground web:focus:outline-none web:disabled:pointer-events-none disabled:opacity-50 web:data-[active]:bg-accent/50 web:data-[state=open]:bg-accent/50', ); function NavigationMenuTrigger({ className, children, ...props }: Omit & { children?: React.ReactNode; ref?: React.RefObject; }) { const { value } = NavigationMenuPrimitive.useRootContext(); const { value: itemValue } = NavigationMenuPrimitive.useItemContext(); const progress = useDerivedValue(() => value === itemValue ? withTiming(1, { duration: 250 }) : withTiming(0, { duration: 200 }), ); const chevronStyle = useAnimatedStyle(() => ({ transform: [{ rotate: `${progress.value * 180}deg` }], opacity: interpolate(progress.value, [0, 1], [1, 0.8], Extrapolation.CLAMP), })); return ( {children} ); } function NavigationMenuContent({ className, children, portalHost, ...props }: NavigationMenuPrimitive.ContentProps & { portalHost?: string; ref?: React.RefObject; }) { const { value } = NavigationMenuPrimitive.useRootContext(); const { value: itemValue } = NavigationMenuPrimitive.useItemContext(); return ( {children} ); } const NavigationMenuLink = NavigationMenuPrimitive.Link; function NavigationMenuViewport({ className, ...props }: NavigationMenuPrimitive.ViewportProps & { ref?: React.RefObject; }) { return ( ); } function NavigationMenuIndicator({ ref, className, ...props }: NavigationMenuPrimitive.IndicatorProps & { ref?: React.RefObject; }) { const { value } = NavigationMenuPrimitive.useRootContext(); const { value: itemValue } = NavigationMenuPrimitive.useItemContext(); return ( ); } export { NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, navigationMenuTriggerStyle, NavigationMenuViewport, };