Files
novalon-website/src/components/effects/gradient-flow.tsx
T
张翔 016b7cfb91 feat(a11y,ux): implement comprehensive accessibility and UX optimizations
Phase 1: Accessibility Optimizations
- Add proper label associations and ARIA attributes to form inputs
- Implement aria-required, aria-invalid, aria-describedby for better form accessibility
- Add role='alert' for error messages
- Enhance keyboard navigation with aria-expanded, aria-controls
- Add aria-label for mobile menu button
- Implement aria-current for active navigation items
- Add semantic HTML with aria-labelledby for sections

Phase 2: UX Optimizations
- Create loading skeleton components for better loading states
- Add FormSkeleton, SectionSkeleton, and LoadingSkeleton components
- Prepare for lazy loading implementation

Files modified:
- src/components/ui/input.tsx: Enhanced with ARIA attributes
- src/components/ui/textarea.tsx: Enhanced with ARIA attributes
- src/components/layout/header.tsx: Added navigation ARIA labels
- src/components/sections/hero-section.tsx: Added section labels
- src/components/sections/services-section.tsx: Added section labels
- src/components/ui/loading-skeleton.tsx: New loading state components

Impact:
- WCAG 2.1 AA compliance improvements
- Better screen reader support
- Enhanced keyboard navigation
- Improved user feedback during loading
2026-02-24 00:40:19 +08:00

35 lines
731 B
TypeScript

'use client';
import { motion } from 'framer-motion';
interface GradientFlowProps {
className?: string;
colors?: string[];
duration?: number;
}
export function GradientFlow({
className = '',
colors = ['#C41E3A', '#D4A574', '#8B4513', '#2F4F4F'],
duration = 15
}: GradientFlowProps) {
return (
<motion.div
className={`absolute inset-0 ${className}`}
style={{
background: `linear-gradient(-45deg, ${colors.join(', ')})`,
backgroundSize: '400% 400%'
}}
animate={{
backgroundPosition: ['0% 50%', '100% 50%', '0% 50%']
}}
transition={{
duration,
repeat: Infinity,
ease: 'linear'
}}
/>
);
}
export default GradientFlow;