import * as AccordionPrimitive from '@rn-primitives/accordion'; import * as React from 'react'; import { Platform, Pressable, View } from 'react-native'; import Animated, { Extrapolation, FadeIn, FadeOutUp, LayoutAnimationConfig, LinearTransition, interpolate, useAnimatedStyle, useDerivedValue, withTiming, } from 'react-native-reanimated'; import { ChevronDown } from '@/lib/icons/ChevronDown'; import { cn } from '@/lib/utils'; import { TextClassContext } from '@/components/ui/text'; const Accordion = React.forwardRef( ({ children, ...props }, ref) => { return ( {children} ); } ); Accordion.displayName = AccordionPrimitive.Root.displayName; const AccordionItem = React.forwardRef( ({ className, value, ...props }, ref) => { return ( ); } ); AccordionItem.displayName = AccordionPrimitive.Item.displayName; const Trigger = Platform.OS === 'web' ? View : Pressable; const AccordionTrigger = React.forwardRef< AccordionPrimitive.TriggerRef, AccordionPrimitive.TriggerProps >(({ className, children, ...props }, ref) => { const { isExpanded } = AccordionPrimitive.useItemContext(); const progress = useDerivedValue(() => isExpanded ? 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} ); }); AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName; const AccordionContent = React.forwardRef< AccordionPrimitive.ContentRef, AccordionPrimitive.ContentProps >(({ className, children, ...props }, ref) => { const { isExpanded } = AccordionPrimitive.useItemContext(); return ( {children} ); }); function InnerContent({ children, className }: { children: React.ReactNode; className?: string }) { if (Platform.OS === 'web') { return {children}; } return ( {children} ); } AccordionContent.displayName = AccordionPrimitive.Content.displayName; export { Accordion, AccordionContent, AccordionItem, AccordionTrigger };