"use client"; import React, { useState, useEffect } from "react"; import { animations, animationCombos, AnimationConfig } from "@/lib/animations/animations"; interface AnimatedComponentProps { children: React.ReactNode; animation?: keyof typeof animations; combo?: keyof typeof animationCombos; config?: AnimationConfig; trigger?: "mount" | "hover" | "click" | "visible"; delay?: number; className?: string; style?: React.CSSProperties; } export const AnimatedComponent: React.FC = ({ children, animation = "fadeIn", combo, config = {}, trigger = "mount", delay = 0, className = "", style = {}, }) => { const [isVisible, setIsVisible] = useState(false); const [isAnimating, setIsAnimating] = useState(false); useEffect(() => { if (trigger === "mount") { const timer = setTimeout(() => { setIsVisible(true); setIsAnimating(true); }, delay); return () => clearTimeout(timer); } }, [trigger, delay]); const handleMouseEnter = () => { if (trigger === "hover") { setIsAnimating(true); } }; const handleMouseLeave = () => { if (trigger === "hover") { setIsAnimating(false); } }; const handleClick = () => { if (trigger === "click") { setIsAnimating(true); setTimeout(() => setIsAnimating(false), config.duration || 300); } }; const getAnimationStyle = () => { if (combo) { return animationCombos[combo](); } if (animation) { return animations[animation](config); } return {}; }; const animationStyle = isAnimating ? getAnimationStyle() : {}; return (
{children}
); }; // 특화된 애니메이션 컴포넌트들 export const FadeIn: React.FC> = (props) => ( ); export const SlideInFromLeft: React.FC> = (props) => ( ); export const SlideInFromRight: React.FC> = (props) => ( ); export const SlideInFromTop: React.FC> = (props) => ( ); export const SlideInFromBottom: React.FC> = (props) => ( ); export const ScaleIn: React.FC> = (props) => ( ); export const Bounce: React.FC> = (props) => ( ); export const Pulse: React.FC> = (props) => ( ); export const Glow: React.FC> = (props) => ( ); // 조합 애니메이션 컴포넌트들 export const PageTransition: React.FC & { direction?: "left" | "right" | "up" | "down" }> = ({ direction, ...props }) => ( ); export const ModalEnter: React.FC> = (props) => ( ); export const ModalExit: React.FC> = (props) => ( ); export const ButtonClick: React.FC> = (props) => ( ); export const SuccessNotification: React.FC> = (props) => ( ); export const LoadingSpinner: React.FC> = (props) => ( ); export const HoverLift: React.FC> = (props) => ( );