import React, { useState } from 'react' import { useCurveAnimation } from '../../core/hooks/useCurveAnimation' import { useStyles } from '../../core/hooks/useStyles' import { useTheme } from '../../core/theme/ThemeProvider' import { CurveType } from '../../core/animation/CurveContextAnimation' interface AnimatedBlockProps { className?: string } export const AnimatedBlock: React.FC = ({ className = '' }) => { const { theme } = useTheme() const createStyle = useStyles('animated-block') const [curveType, setCurveType] = useState('easeInOut') const animation = useCurveAnimation({ duration: 1000, type: curveType, bounceStrength: 3, elasticity: 0.3 }) const blockClass = createStyle({ width: '100px', height: '100px', backgroundColor: theme.colors.primary, borderRadius: '8px', transition: 'background-color 0.3s' }) const containerClass = createStyle({ padding: theme.spacing.lg, display: 'grid', gap: theme.spacing.md }) const controlsClass = createStyle({ display: 'grid', gap: theme.spacing.sm, gridTemplateColumns: 'repeat(auto-fill, minmax(80px, 1fr))' }) const buttonClass = createStyle({ padding: `${theme.spacing.sm} ${theme.spacing.md}`, backgroundColor: theme.colors.secondary, color: theme.colors.background, border: 'none', borderRadius: '4px', cursor: 'pointer', '&:hover': { opacity: 0.9 } }) const curveTypes: CurveType[] = ['linear', 'easeIn', 'easeOut', 'easeInOut', 'bounce', 'elastic'] return (
{curveTypes.map(type => ( ))}
Progress: {Math.round(animation.progress * 100)}%
) } export default AnimatedBlock