import React from 'react' import { Box } from '@mui/joy' import { CSSTransition, TransitionGroup } from 'react-transition-group' import { useStaggeredAnimation, useReducedMotion } from '../../hooks/useAnimations' import './PageTransition.css' const AnimatedList = ({ children, staggerDelay = 50, animationType = 'stagger', // 'stagger', 'fade', 'slide' direction = 'up', // 'up', 'down', 'left', 'right' renderItem, keyExtractor, items, ...boxProps }) => { // Handle both children and items patterns let childrenArray if (items && renderItem) { childrenArray = items.map((item, index) => React.cloneElement(renderItem(item, index), { key: keyExtractor ? keyExtractor(item, index) : index }) ) } else { childrenArray = React.Children.toArray(children) } const visibleItems = useStaggeredAnimation(childrenArray.length, staggerDelay) const prefersReducedMotion = useReducedMotion() // If user prefers reduced motion, render without animations if (prefersReducedMotion) { return ( {items && renderItem ? childrenArray : children} ) } const getAnimationClass = () => { switch (animationType) { case 'fade': return 'fade' case 'slide': return direction === 'up' ? 'slide-up' : 'page' case 'stagger': default: return 'stagger' } } return ( {childrenArray.map((child, index) => { const isVisible = visibleItems.has(index) return ( {child} ) })} ) } export default AnimatedList