festive-effects 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +163 -0
- package/dist/animations/index.d.ts +91 -0
- package/dist/components/FestiveEffects.d.ts +19 -0
- package/dist/config/index.d.ts +18 -0
- package/dist/effects/ChineseNewYearEffect.d.ts +32 -0
- package/dist/effects/ChristmasEffect.d.ts +32 -0
- package/dist/effects/DiwaliEffect.d.ts +32 -0
- package/dist/effects/EasterEffect.d.ts +32 -0
- package/dist/effects/EidEffect.d.ts +32 -0
- package/dist/effects/HalloweenEffect.d.ts +32 -0
- package/dist/effects/HoliEffect.d.ts +32 -0
- package/dist/effects/IndependenceEffect.d.ts +32 -0
- package/dist/effects/NewYearEffect.d.ts +31 -0
- package/dist/effects/StPatricksEffect.d.ts +32 -0
- package/dist/effects/ThanksgivingEffect.d.ts +32 -0
- package/dist/effects/ValentineEffect.d.ts +32 -0
- package/dist/effects/index.d.ts +15 -0
- package/dist/hooks/index.d.ts +70 -0
- package/dist/index.d.ts +754 -0
- package/dist/index.esm.js +2009 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +2074 -0
- package/dist/index.js.map +1 -0
- package/dist/particles/index.d.ts +37 -0
- package/dist/registry/index.d.ts +69 -0
- package/dist/types/index.d.ts +144 -0
- package/package.json +85 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/types/index.ts","../src/config/index.ts","../src/hooks/index.ts","../src/particles/index.ts","../src/components/FestiveEffects.tsx","../src/animations/index.ts","../src/registry/index.ts","../src/effects/ChristmasEffect.tsx","../src/effects/NewYearEffect.tsx","../src/effects/ValentineEffect.tsx","../src/effects/EasterEffect.tsx","../src/effects/HalloweenEffect.tsx","../src/effects/ThanksgivingEffect.tsx","../src/effects/DiwaliEffect.tsx","../src/effects/ChineseNewYearEffect.tsx","../src/effects/HoliEffect.tsx","../src/effects/EidEffect.tsx","../src/effects/StPatricksEffect.tsx","../src/effects/IndependenceEffect.tsx","../src/effects/index.ts"],"sourcesContent":["// Core types for Festive Effects library\r\n\r\n/**\r\n * Union type of all supported festival effects\r\n */\r\nexport type FestivalType =\r\n | 'christmas'\r\n | 'newyear'\r\n | 'valentine'\r\n | 'easter'\r\n | 'halloween'\r\n | 'thanksgiving'\r\n | 'diwali'\r\n | 'chinesenewyear'\r\n | 'holi'\r\n | 'eid'\r\n | 'stpatricks'\r\n | 'independence';\r\n\r\n/**\r\n * Array of all valid festival types for validation\r\n */\r\nexport const FESTIVAL_TYPES: FestivalType[] = [\r\n 'christmas',\r\n 'newyear',\r\n 'valentine',\r\n 'easter',\r\n 'halloween',\r\n 'thanksgiving',\r\n 'diwali',\r\n 'chinesenewyear',\r\n 'holi',\r\n 'eid',\r\n 'stpatricks',\r\n 'independence',\r\n];\r\n\r\n/**\r\n * Intensity levels for particle effects\r\n */\r\nexport type IntensityLevel = 'low' | 'medium' | 'high';\r\n\r\n/**\r\n * Props for the main FestiveEffects component\r\n */\r\nexport interface FestiveEffectsProps {\r\n /** The festival effect to display */\r\n festival: FestivalType;\r\n /** Intensity of the effect (particle count) */\r\n intensity?: IntensityLevel;\r\n /** Duration in milliseconds before effect stops */\r\n duration?: number;\r\n /** CSS z-index for the overlay */\r\n zIndex?: number;\r\n /** Whether to respect prefers-reduced-motion setting */\r\n respectReducedMotion?: boolean;\r\n /** Custom colors to override default festival colors */\r\n colors?: string[];\r\n}\r\n\r\n/**\r\n * Settings for each intensity level\r\n */\r\nexport interface IntensitySettings {\r\n /** Multiplier for base particle count */\r\n particleMultiplier: number;\r\n /** Maximum number of particles allowed */\r\n maxParticles: number;\r\n}\r\n\r\n/**\r\n * Physics configuration for particle animations\r\n */\r\nexport interface PhysicsConfig {\r\n /** Base animation speed */\r\n speed: number;\r\n /** Horizontal drift amount in pixels */\r\n drift: number;\r\n /** Rotation amount in degrees */\r\n rotation: number;\r\n /** Min/max scale range */\r\n scale: [number, number];\r\n}\r\n\r\n/**\r\n * All particle types available for effects\r\n */\r\nexport type ParticleType =\r\n | 'snowflake'\r\n | 'firework'\r\n | 'confetti'\r\n | 'spark'\r\n | 'heart'\r\n | 'egg'\r\n | 'flower'\r\n | 'bat'\r\n | 'pumpkin'\r\n | 'spider'\r\n | 'leaf'\r\n | 'diya'\r\n | 'rangoli'\r\n | 'lantern'\r\n | 'dragon'\r\n | 'color-splash'\r\n | 'moon'\r\n | 'star'\r\n | 'shamrock'\r\n | 'rainbow';\r\n\r\n/**\r\n * Animation types for particle effects\r\n */\r\nexport type AnimationType = 'fall' | 'rise' | 'explode' | 'float' | 'scatter';\r\n\r\n/**\r\n * Configuration for a festival effect\r\n */\r\nexport interface FestivalConfig {\r\n /** Base number of particles before intensity multiplier */\r\n baseParticleCount: number;\r\n /** Color palette for the effect */\r\n colors: string[];\r\n /** Types of particles used in this effect */\r\n particleTypes: ParticleType[];\r\n /** Primary animation type */\r\n animationType: AnimationType;\r\n /** Physics settings for animations */\r\n physics: PhysicsConfig;\r\n}\r\n\r\n/**\r\n * Viewport dimensions\r\n */\r\nexport interface Viewport {\r\n width: number;\r\n height: number;\r\n}\r\n\r\n/**\r\n * Data for a single particle instance\r\n */\r\nexport interface ParticleData {\r\n /** Unique identifier */\r\n id: string;\r\n /** Initial X position */\r\n x: number;\r\n /** Initial Y position */\r\n y: number;\r\n /** Particle size in pixels */\r\n size: number;\r\n /** Particle color */\r\n color: string;\r\n /** Type of particle shape */\r\n type: ParticleType;\r\n /** Animation delay in seconds */\r\n delay: number;\r\n /** Animation duration in seconds */\r\n duration: number;\r\n /** Additional custom properties for animation */\r\n custom: Record<string, unknown>;\r\n}\r\n\r\n/**\r\n * Framer Motion animation configuration\r\n */\r\nexport interface AnimationConfig {\r\n /** Animation target values */\r\n animate: {\r\n x?: number | number[];\r\n y?: number | number[];\r\n rotate?: number | number[];\r\n scale?: number | number[];\r\n opacity?: number | number[];\r\n };\r\n /** Transition settings */\r\n transition: {\r\n duration: number;\r\n ease?: string | number[];\r\n repeat?: number;\r\n repeatType?: 'loop' | 'reverse' | 'mirror';\r\n delay?: number;\r\n };\r\n}\r\n\r\n/**\r\n * Props for individual particle components\r\n */\r\nexport interface ParticleProps {\r\n /** Unique identifier */\r\n id: string;\r\n /** Initial X position */\r\n initialX: number;\r\n /** Initial Y position */\r\n initialY: number;\r\n /** Particle size */\r\n size: number;\r\n /** Particle color */\r\n color: string;\r\n /** Type of particle */\r\n type: ParticleType;\r\n /** Animation configuration */\r\n animationConfig: AnimationConfig;\r\n}\r\n","// Configuration for Festive Effects library\r\n\r\nimport type {\r\n IntensityLevel,\r\n IntensitySettings,\r\n FestivalType,\r\n FestivalConfig,\r\n} from '../types';\r\n\r\n/**\r\n * Intensity configuration for particle effects\r\n * Defines particle multipliers and max counts for each intensity level\r\n */\r\nexport const INTENSITY_CONFIG: Record<IntensityLevel, IntensitySettings> = {\r\n low: { particleMultiplier: 0.5, maxParticles: 30 },\r\n medium: { particleMultiplier: 1.0, maxParticles: 60 },\r\n high: { particleMultiplier: 2.0, maxParticles: 120 },\r\n};\r\n\r\n/**\r\n * Calculate the actual particle count based on base count and intensity\r\n * @param baseCount - The base particle count from festival config\r\n * @param intensity - The intensity level\r\n * @returns The calculated particle count, capped at maxParticles\r\n */\r\nexport function getParticleCount(\r\n baseCount: number,\r\n intensity: IntensityLevel = 'medium'\r\n): number {\r\n const settings = INTENSITY_CONFIG[intensity];\r\n const calculated = Math.floor(baseCount * settings.particleMultiplier);\r\n return Math.min(calculated, settings.maxParticles);\r\n}\r\n\r\n/**\r\n * Festival configurations for all 12 supported festivals\r\n * Each config defines colors, particle types, animation style, and physics\r\n */\r\nexport const FESTIVAL_CONFIGS: Record<FestivalType, FestivalConfig> = {\r\n christmas: {\r\n baseParticleCount: 50,\r\n colors: ['#FFFFFF', '#E8F4FF', '#B8D4E8', '#87CEEB'],\r\n particleTypes: ['snowflake'],\r\n animationType: 'fall',\r\n physics: { speed: 3, drift: 50, rotation: 360, scale: [0.5, 1.5] },\r\n },\r\n\r\n newyear: {\r\n baseParticleCount: 40,\r\n colors: ['#FFD700', '#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4', '#FFEAA7'],\r\n particleTypes: ['firework', 'confetti', 'spark'],\r\n animationType: 'explode',\r\n physics: { speed: 5, drift: 100, rotation: 720, scale: [0.3, 1.2] },\r\n },\r\n\r\n valentine: {\r\n baseParticleCount: 35,\r\n colors: ['#FF6B6B', '#EE5A5A', '#FF8E8E', '#FFB6C1', '#FF69B4'],\r\n particleTypes: ['heart'],\r\n animationType: 'rise',\r\n physics: { speed: 2, drift: 30, rotation: 15, scale: [0.6, 1.4] },\r\n },\r\n\r\n easter: {\r\n baseParticleCount: 30,\r\n colors: ['#FFB6C1', '#98FB98', '#87CEEB', '#DDA0DD', '#F0E68C'],\r\n particleTypes: ['egg', 'flower'],\r\n animationType: 'float',\r\n physics: { speed: 1.5, drift: 20, rotation: 10, scale: [0.7, 1.3] },\r\n },\r\n\r\n halloween: {\r\n baseParticleCount: 35,\r\n colors: ['#FF6600', '#8B008B', '#000000', '#FFD700', '#32CD32'],\r\n particleTypes: ['bat', 'pumpkin', 'spider'],\r\n animationType: 'float',\r\n physics: { speed: 2, drift: 60, rotation: 30, scale: [0.5, 1.5] },\r\n },\r\n\r\n thanksgiving: {\r\n baseParticleCount: 40,\r\n colors: ['#D2691E', '#FF8C00', '#B8860B', '#CD853F', '#8B4513'],\r\n particleTypes: ['leaf'],\r\n animationType: 'fall',\r\n physics: { speed: 2, drift: 80, rotation: 540, scale: [0.6, 1.4] },\r\n },\r\n\r\n diwali: {\r\n baseParticleCount: 45,\r\n colors: ['#FFD700', '#FF8C00', '#FF4500', '#FFA500', '#FFFF00'],\r\n particleTypes: ['diya', 'spark', 'rangoli'],\r\n animationType: 'float',\r\n physics: { speed: 1, drift: 15, rotation: 5, scale: [0.5, 1.2] },\r\n },\r\n\r\n chinesenewyear: {\r\n baseParticleCount: 40,\r\n colors: ['#FF0000', '#FFD700', '#FF4500', '#DC143C'],\r\n particleTypes: ['lantern', 'firework', 'dragon'],\r\n animationType: 'rise',\r\n physics: { speed: 1.5, drift: 25, rotation: 10, scale: [0.6, 1.3] },\r\n },\r\n\r\n holi: {\r\n baseParticleCount: 50,\r\n colors: ['#FF1493', '#00FF00', '#FFFF00', '#FF4500', '#9400D3', '#00BFFF'],\r\n particleTypes: ['color-splash'],\r\n animationType: 'scatter',\r\n physics: { speed: 4, drift: 150, rotation: 180, scale: [0.4, 2.0] },\r\n },\r\n\r\n eid: {\r\n baseParticleCount: 35,\r\n colors: ['#FFD700', '#C0C0C0', '#228B22', '#FFFFFF'],\r\n particleTypes: ['moon', 'star'],\r\n animationType: 'float',\r\n physics: { speed: 0.8, drift: 10, rotation: 5, scale: [0.5, 1.5] },\r\n },\r\n\r\n stpatricks: {\r\n baseParticleCount: 40,\r\n colors: ['#228B22', '#32CD32', '#00FF00', '#FFD700'],\r\n particleTypes: ['shamrock', 'rainbow'],\r\n animationType: 'fall',\r\n physics: { speed: 2, drift: 40, rotation: 180, scale: [0.6, 1.3] },\r\n },\r\n\r\n independence: {\r\n baseParticleCount: 45,\r\n colors: ['#FF0000', '#FFFFFF', '#0000FF'], // Default US colors, customizable\r\n particleTypes: ['firework', 'spark', 'confetti'],\r\n animationType: 'explode',\r\n physics: { speed: 5, drift: 120, rotation: 360, scale: [0.3, 1.5] },\r\n },\r\n};\r\n","// Custom hooks for Festive Effects\r\n// Contains accessibility and utility hooks\r\n\r\nimport { useState, useEffect, useRef, useCallback } from 'react';\r\n\r\n/**\r\n * Hook to detect if the user prefers reduced motion\r\n * Listens to the prefers-reduced-motion media query\r\n * \r\n * @returns boolean - true if user prefers reduced motion, false otherwise\r\n * \r\n * @example\r\n * ```tsx\r\n * const prefersReducedMotion = useReducedMotion();\r\n * if (prefersReducedMotion) {\r\n * // Don't render animations\r\n * return null;\r\n * }\r\n * ```\r\n */\r\nexport function useReducedMotion(): boolean {\r\n // Default to false for SSR\r\n const [prefersReducedMotion, setPrefersReducedMotion] = useState(false);\r\n\r\n useEffect(() => {\r\n // Check if window is available (client-side)\r\n if (typeof window === 'undefined') {\r\n return;\r\n }\r\n\r\n // Create media query for prefers-reduced-motion\r\n const mediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)');\r\n\r\n // Set initial value\r\n setPrefersReducedMotion(mediaQuery.matches);\r\n\r\n // Handler for media query changes\r\n const handleChange = (event: MediaQueryListEvent) => {\r\n setPrefersReducedMotion(event.matches);\r\n };\r\n\r\n // Add listener for changes\r\n // Use addEventListener for modern browsers, addListener for older ones\r\n if (mediaQuery.addEventListener) {\r\n mediaQuery.addEventListener('change', handleChange);\r\n } else {\r\n // Fallback for older browsers\r\n mediaQuery.addListener(handleChange);\r\n }\r\n\r\n // Cleanup listener on unmount\r\n return () => {\r\n if (mediaQuery.removeEventListener) {\r\n mediaQuery.removeEventListener('change', handleChange);\r\n } else {\r\n // Fallback for older browsers\r\n mediaQuery.removeListener(handleChange);\r\n }\r\n };\r\n }, []);\r\n\r\n return prefersReducedMotion;\r\n}\r\n\r\n/**\r\n * Hook to detect document visibility changes\r\n * Returns true when the document is visible, false when hidden\r\n * \r\n * This is useful for pausing animations when the user switches tabs\r\n * to save resources and improve performance.\r\n * \r\n * @returns boolean - true if document is visible, false if hidden\r\n * \r\n * @example\r\n * ```tsx\r\n * const isVisible = useDocumentVisibility();\r\n * if (!isVisible) {\r\n * // Pause animations\r\n * }\r\n * ```\r\n */\r\nexport function useDocumentVisibility(): boolean {\r\n // Default to true for SSR (assume visible)\r\n const [isVisible, setIsVisible] = useState(true);\r\n\r\n useEffect(() => {\r\n // Check if document is available (client-side)\r\n if (typeof document === 'undefined') {\r\n return;\r\n }\r\n\r\n // Set initial value based on current visibility state\r\n setIsVisible(!document.hidden);\r\n\r\n // Handler for visibility changes\r\n const handleVisibilityChange = () => {\r\n setIsVisible(!document.hidden);\r\n };\r\n\r\n // Add listener for visibility changes\r\n document.addEventListener('visibilitychange', handleVisibilityChange);\r\n\r\n // Cleanup listener on unmount\r\n return () => {\r\n document.removeEventListener('visibilitychange', handleVisibilityChange);\r\n };\r\n }, []);\r\n\r\n return isVisible;\r\n}\r\n\r\n/**\r\n * Hook to manage cleanup of timeouts\r\n * Returns a function to set a timeout that will be automatically cleared on unmount\r\n * \r\n * @returns Object with setTimeout and clearAllTimeouts functions\r\n * \r\n * @example\r\n * ```tsx\r\n * const { setTimeout: setManagedTimeout, clearAllTimeouts } = useTimeoutManager();\r\n * setManagedTimeout(() => console.log('done'), 1000);\r\n * // Timeout will be automatically cleared on unmount\r\n * ```\r\n */\r\nexport function useTimeoutManager() {\r\n const timeoutsRef = useRef<Set<ReturnType<typeof setTimeout>>>(new Set());\r\n\r\n const setManagedTimeout = useCallback((callback: () => void, delay: number) => {\r\n const timeoutId = setTimeout(() => {\r\n callback();\r\n timeoutsRef.current.delete(timeoutId);\r\n }, delay);\r\n timeoutsRef.current.add(timeoutId);\r\n return timeoutId;\r\n }, []);\r\n\r\n const clearManagedTimeout = useCallback((timeoutId: ReturnType<typeof setTimeout>) => {\r\n clearTimeout(timeoutId);\r\n timeoutsRef.current.delete(timeoutId);\r\n }, []);\r\n\r\n const clearAllTimeouts = useCallback(() => {\r\n timeoutsRef.current.forEach((timeoutId) => {\r\n clearTimeout(timeoutId);\r\n });\r\n timeoutsRef.current.clear();\r\n }, []);\r\n\r\n // Cleanup all timeouts on unmount\r\n useEffect(() => {\r\n return () => {\r\n timeoutsRef.current.forEach((timeoutId) => {\r\n clearTimeout(timeoutId);\r\n });\r\n timeoutsRef.current.clear();\r\n };\r\n }, []);\r\n\r\n return {\r\n setTimeout: setManagedTimeout,\r\n clearTimeout: clearManagedTimeout,\r\n clearAllTimeouts,\r\n };\r\n}\r\n\r\n/**\r\n * Hook to manage cleanup of animation frame requests\r\n * Returns a function to request animation frame that will be automatically cancelled on unmount\r\n * \r\n * @returns Object with requestAnimationFrame and cancelAllAnimationFrames functions\r\n * \r\n * @example\r\n * ```tsx\r\n * const { requestAnimationFrame: requestFrame, cancelAllAnimationFrames } = useAnimationFrameManager();\r\n * requestFrame(() => console.log('frame'));\r\n * // Animation frame will be automatically cancelled on unmount\r\n * ```\r\n */\r\nexport function useAnimationFrameManager() {\r\n const framesRef = useRef<Set<number>>(new Set());\r\n\r\n const requestManagedAnimationFrame = useCallback((callback: FrameRequestCallback) => {\r\n if (typeof window === 'undefined') {\r\n return 0;\r\n }\r\n const frameId = window.requestAnimationFrame((time) => {\r\n framesRef.current.delete(frameId);\r\n callback(time);\r\n });\r\n framesRef.current.add(frameId);\r\n return frameId;\r\n }, []);\r\n\r\n const cancelManagedAnimationFrame = useCallback((frameId: number) => {\r\n if (typeof window === 'undefined') {\r\n return;\r\n }\r\n window.cancelAnimationFrame(frameId);\r\n framesRef.current.delete(frameId);\r\n }, []);\r\n\r\n const cancelAllAnimationFrames = useCallback(() => {\r\n if (typeof window === 'undefined') {\r\n return;\r\n }\r\n framesRef.current.forEach((frameId) => {\r\n window.cancelAnimationFrame(frameId);\r\n });\r\n framesRef.current.clear();\r\n }, []);\r\n\r\n // Cleanup all animation frames on unmount\r\n useEffect(() => {\r\n return () => {\r\n if (typeof window === 'undefined') {\r\n return;\r\n }\r\n framesRef.current.forEach((frameId) => {\r\n window.cancelAnimationFrame(frameId);\r\n });\r\n framesRef.current.clear();\r\n };\r\n }, []);\r\n\r\n return {\r\n requestAnimationFrame: requestManagedAnimationFrame,\r\n cancelAnimationFrame: cancelManagedAnimationFrame,\r\n cancelAllAnimationFrames,\r\n };\r\n}\r\n","// SVG Particle System for Festive Effects\r\n// Contains all particle SVG shapes and the Particle component\r\n\r\nimport React from 'react';\r\nimport { motion } from 'framer-motion';\r\nimport type { ParticleType, ParticleData, AnimationType, PhysicsConfig, Viewport, IntensityLevel } from '../types';\r\nimport { INTENSITY_CONFIG } from '../config';\r\n\r\n/**\r\n * SVG definitions for all 18 particle types\r\n * Each SVG is designed to work with currentColor for dynamic coloring\r\n */\r\nexport const PARTICLE_SVGS: Record<ParticleType, string> = {\r\n snowflake: `<svg viewBox=\"0 0 24 24\"><path d=\"M12 0L12 24M0 12L24 12M4 4L20 20M20 4L4 20\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\"/></svg>`,\r\n\r\n heart: `<svg viewBox=\"0 0 24 24\"><path d=\"M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z\" fill=\"currentColor\"/></svg>`,\r\n\r\n bat: `<svg viewBox=\"0 0 24 24\"><path d=\"M12 4C8 4 4 8 2 12c2-2 4-2 6 0-1 2-1 4 0 6 1-2 3-3 4-3s3 1 4 3c1-2 1-4 0-6 2-2 4-2 6 0-2-4-6-8-10-8z\" fill=\"currentColor\"/></svg>`,\r\n\r\n pumpkin: `<svg viewBox=\"0 0 24 24\"><ellipse cx=\"12\" cy=\"14\" rx=\"8\" ry=\"7\" fill=\"currentColor\"/><path d=\"M12 7V4M10 4h4\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\"/></svg>`,\r\n\r\n leaf: `<svg viewBox=\"0 0 24 24\"><path d=\"M12 2C6 8 4 14 4 18c0 2 2 4 8 4s8-2 8-4c0-4-2-10-8-16z\" fill=\"currentColor\"/><path d=\"M12 22V8\" stroke=\"rgba(0,0,0,0.3)\" stroke-width=\"1\" fill=\"none\"/></svg>`,\r\n\r\n diya: `<svg viewBox=\"0 0 24 24\"><ellipse cx=\"12\" cy=\"18\" rx=\"8\" ry=\"4\" fill=\"currentColor\"/><path d=\"M12 14c-2 0-3-2-3-4s1-4 3-4 3 2 3 4-1 4-3 4z\" fill=\"#FFD700\"/></svg>`,\r\n\r\n lantern: `<svg viewBox=\"0 0 24 24\"><rect x=\"6\" y=\"6\" width=\"12\" height=\"14\" rx=\"2\" fill=\"currentColor\"/><path d=\"M8 4h8M12 4V2\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\"/></svg>`,\r\n\r\n moon: `<svg viewBox=\"0 0 24 24\"><path d=\"M12 3a9 9 0 109 9c0-5-4-9-9-9z\" fill=\"currentColor\"/></svg>`,\r\n\r\n star: `<svg viewBox=\"0 0 24 24\"><path d=\"M12 2l3 7h7l-5.5 4.5 2 7L12 16l-6.5 4.5 2-7L2 9h7z\" fill=\"currentColor\"/></svg>`,\r\n\r\n shamrock: `<svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"8\" r=\"4\" fill=\"currentColor\"/><circle cx=\"7\" cy=\"14\" r=\"4\" fill=\"currentColor\"/><circle cx=\"17\" cy=\"14\" r=\"4\" fill=\"currentColor\"/><path d=\"M12 16v6\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\"/></svg>`,\r\n\r\n egg: `<svg viewBox=\"0 0 24 24\"><ellipse cx=\"12\" cy=\"14\" rx=\"7\" ry=\"9\" fill=\"currentColor\"/></svg>`,\r\n\r\n flower: `<svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"3\" fill=\"#FFD700\"/><circle cx=\"12\" cy=\"6\" r=\"3\" fill=\"currentColor\"/><circle cx=\"18\" cy=\"12\" r=\"3\" fill=\"currentColor\"/><circle cx=\"12\" cy=\"18\" r=\"3\" fill=\"currentColor\"/><circle cx=\"6\" cy=\"12\" r=\"3\" fill=\"currentColor\"/></svg>`,\r\n\r\n confetti: `<svg viewBox=\"0 0 24 24\"><rect x=\"8\" y=\"4\" width=\"8\" height=\"16\" rx=\"1\" fill=\"currentColor\"/></svg>`,\r\n\r\n spark: `<svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"4\" fill=\"currentColor\"/></svg>`,\r\n\r\n firework: `<svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"2\" fill=\"currentColor\"/><path d=\"M12 2v4M12 18v4M2 12h4M18 12h4M4 4l3 3M17 17l3 3M4 20l3-3M17 7l3-3\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\"/></svg>`,\r\n\r\n 'color-splash': `<svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"currentColor\" opacity=\"0.8\"/></svg>`,\r\n\r\n spider: `<svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"4\" fill=\"currentColor\"/><path d=\"M8 8L4 4M16 8L20 4M8 16L4 20M16 16L20 20M6 12H2M18 12h4\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\"/></svg>`,\r\n\r\n rainbow: `<svg viewBox=\"0 0 24 24\"><path d=\"M2 20a10 10 0 0120 0\" stroke=\"currentColor\" stroke-width=\"4\" fill=\"none\"/></svg>`,\r\n\r\n dragon: `<svg viewBox=\"0 0 24 24\"><path d=\"M4 12c2-4 6-6 10-4 2 1 4 4 6 4-1 2-3 4-6 4-4 0-8-2-10-4z\" fill=\"currentColor\"/></svg>`,\r\n\r\n rangoli: `<svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"8\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\"/><circle cx=\"12\" cy=\"12\" r=\"4\" fill=\"currentColor\"/></svg>`,\r\n};\r\n\r\n/**\r\n * Props for the Particle component\r\n */\r\nexport interface ParticleComponentProps {\r\n particle: ParticleData;\r\n animationType: AnimationType;\r\n physics: PhysicsConfig;\r\n}\r\n\r\n/**\r\n * Get animation variants based on animation type\r\n */\r\nfunction getAnimationProps(\r\n particle: ParticleData,\r\n animationType: AnimationType,\r\n physics: PhysicsConfig\r\n) {\r\n const { delay, duration, custom } = particle;\r\n const driftAmount = (custom.drift as number) ?? physics.drift * (Math.random() - 0.5) * 2;\r\n const rotationAmount = (custom.rotation as number) ?? physics.rotation * (Math.random() - 0.5) * 2;\r\n\r\n switch (animationType) {\r\n case 'fall':\r\n return {\r\n initial: { y: -50, x: particle.x, opacity: 0, rotate: 0 },\r\n animate: {\r\n y: typeof window !== 'undefined' ? window.innerHeight + 50 : 1000,\r\n x: particle.x + driftAmount,\r\n opacity: [0, 1, 1, 0],\r\n rotate: rotationAmount,\r\n },\r\n transition: {\r\n duration,\r\n ease: 'linear',\r\n repeat: Infinity,\r\n delay,\r\n },\r\n };\r\n\r\n case 'rise':\r\n return {\r\n initial: { y: typeof window !== 'undefined' ? window.innerHeight + 50 : 1000, x: particle.x, opacity: 0, scale: 0 },\r\n animate: {\r\n y: -50,\r\n x: [particle.x, particle.x + driftAmount / 2, particle.x - driftAmount / 2, particle.x],\r\n opacity: [0, 1, 1, 0],\r\n scale: [0, 1, 1.2, 1, 0],\r\n },\r\n transition: {\r\n duration,\r\n ease: 'easeOut',\r\n repeat: Infinity,\r\n delay,\r\n },\r\n };\r\n\r\n case 'explode':\r\n const angle = (custom.angle as number) ?? Math.random() * Math.PI * 2;\r\n const distance = (custom.distance as number) ?? 100 + Math.random() * 150;\r\n return {\r\n initial: { x: particle.x, y: particle.y, scale: 0, opacity: 1 },\r\n animate: {\r\n x: particle.x + Math.cos(angle) * distance,\r\n y: particle.y + Math.sin(angle) * distance,\r\n scale: [0, 1.5, 0],\r\n opacity: [1, 1, 0],\r\n },\r\n transition: {\r\n duration: duration * 0.5,\r\n ease: [0.25, 0.46, 0.45, 0.94],\r\n repeat: Infinity,\r\n repeatDelay: duration * 0.5,\r\n delay,\r\n },\r\n };\r\n\r\n case 'float':\r\n return {\r\n initial: { x: particle.x, y: particle.y, opacity: 0, scale: 0.8 },\r\n animate: {\r\n x: [particle.x, particle.x + driftAmount, particle.x - driftAmount, particle.x],\r\n y: [particle.y, particle.y - 20, particle.y + 10, particle.y],\r\n opacity: [0, 1, 1, 0],\r\n scale: [0.8, 1, 1.1, 1, 0.8],\r\n rotate: [0, rotationAmount / 4, -rotationAmount / 4, 0],\r\n },\r\n transition: {\r\n duration,\r\n ease: 'easeInOut',\r\n repeat: Infinity,\r\n delay,\r\n },\r\n };\r\n\r\n case 'scatter':\r\n const scatterAngle = (custom.angle as number) ?? Math.random() * Math.PI * 2;\r\n const scatterDistance = (custom.distance as number) ?? 50 + Math.random() * 100;\r\n return {\r\n initial: { x: particle.x, y: particle.y, scale: 0, opacity: 0.8 },\r\n animate: {\r\n x: particle.x + Math.cos(scatterAngle) * scatterDistance,\r\n y: particle.y + Math.sin(scatterAngle) * scatterDistance + 50,\r\n scale: [0, 2, 0],\r\n opacity: [0.8, 0.6, 0],\r\n rotate: rotationAmount,\r\n },\r\n transition: {\r\n duration: duration * 0.7,\r\n ease: 'easeOut',\r\n repeat: Infinity,\r\n repeatDelay: duration * 0.3,\r\n delay,\r\n },\r\n };\r\n\r\n default:\r\n return {\r\n initial: { opacity: 0 },\r\n animate: { opacity: 1 },\r\n transition: { duration: 1 },\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Particle component that renders an SVG particle with Framer Motion animations\r\n */\r\nexport const Particle: React.FC<ParticleComponentProps> = ({\r\n particle,\r\n animationType,\r\n physics,\r\n}) => {\r\n const svgString = PARTICLE_SVGS[particle.type];\r\n const animationProps = getAnimationProps(particle, animationType, physics);\r\n\r\n return React.createElement(motion.div, {\r\n key: particle.id,\r\n style: {\r\n position: 'absolute',\r\n width: particle.size,\r\n height: particle.size,\r\n color: particle.color,\r\n pointerEvents: 'none',\r\n },\r\n initial: animationProps.initial,\r\n animate: animationProps.animate,\r\n transition: animationProps.transition,\r\n dangerouslySetInnerHTML: { __html: svgString },\r\n });\r\n};\r\n\r\n\r\n/**\r\n * Generate a unique ID for a particle\r\n */\r\nfunction generateId(): string {\r\n return `particle-${Math.random().toString(36).substring(2, 11)}`;\r\n}\r\n\r\n/**\r\n * Get a random item from an array\r\n */\r\nfunction randomFromArray<T>(arr: T[]): T {\r\n return arr[Math.floor(Math.random() * arr.length)];\r\n}\r\n\r\n/**\r\n * Get a random number within a range\r\n */\r\nfunction randomInRange(min: number, max: number): number {\r\n return min + Math.random() * (max - min);\r\n}\r\n\r\n/**\r\n * Generate particles for a festival effect\r\n * @param count - Number of particles to generate\r\n * @param viewport - Viewport dimensions\r\n * @param particleTypes - Array of particle types to use\r\n * @param colors - Array of colors to use\r\n * @param physics - Physics configuration\r\n * @param animationType - Type of animation\r\n * @returns Array of ParticleData objects\r\n */\r\nexport function generateParticles(\r\n count: number,\r\n viewport: Viewport,\r\n particleTypes: ParticleType[],\r\n colors: string[],\r\n physics: PhysicsConfig,\r\n animationType: AnimationType\r\n): ParticleData[] {\r\n const particles: ParticleData[] = [];\r\n\r\n for (let i = 0; i < count; i++) {\r\n const type = randomFromArray(particleTypes);\r\n const color = randomFromArray(colors);\r\n const size = randomInRange(physics.scale[0] * 20, physics.scale[1] * 20);\r\n \r\n // Position calculation based on animation type\r\n let x: number;\r\n let y: number;\r\n\r\n switch (animationType) {\r\n case 'fall':\r\n // Start from random x position at top\r\n x = randomInRange(0, viewport.width);\r\n y = randomInRange(-100, -20);\r\n break;\r\n case 'rise':\r\n // Start from random x position at bottom\r\n x = randomInRange(0, viewport.width);\r\n y = viewport.height + randomInRange(20, 100);\r\n break;\r\n case 'explode':\r\n // Start from random positions across viewport\r\n x = randomInRange(viewport.width * 0.2, viewport.width * 0.8);\r\n y = randomInRange(viewport.height * 0.2, viewport.height * 0.6);\r\n break;\r\n case 'float':\r\n // Random positions across viewport\r\n x = randomInRange(0, viewport.width);\r\n y = randomInRange(0, viewport.height);\r\n break;\r\n case 'scatter':\r\n // Start from center-ish positions\r\n x = randomInRange(viewport.width * 0.3, viewport.width * 0.7);\r\n y = randomInRange(viewport.height * 0.3, viewport.height * 0.7);\r\n break;\r\n default:\r\n x = randomInRange(0, viewport.width);\r\n y = randomInRange(0, viewport.height);\r\n }\r\n\r\n // Calculate delay and duration based on physics speed\r\n const baseDelay = i * (1 / count) * 3; // Stagger particles\r\n const delay = baseDelay + randomInRange(0, 0.5);\r\n const baseDuration = 10 / physics.speed;\r\n const duration = baseDuration + randomInRange(-1, 1);\r\n\r\n // Custom properties for animation variations\r\n const custom: Record<string, unknown> = {\r\n drift: physics.drift * (Math.random() - 0.5) * 2,\r\n rotation: physics.rotation * (Math.random() - 0.5) * 2,\r\n angle: Math.random() * Math.PI * 2,\r\n distance: 50 + Math.random() * 150,\r\n };\r\n\r\n particles.push({\r\n id: generateId(),\r\n x,\r\n y,\r\n size,\r\n color,\r\n type,\r\n delay,\r\n duration,\r\n custom,\r\n });\r\n }\r\n\r\n return particles;\r\n}\r\n\r\n/**\r\n * Calculate the actual particle count based on base count and intensity\r\n * @param baseCount - The base particle count from festival config\r\n * @param intensity - The intensity level\r\n * @returns The calculated particle count, capped at maxParticles\r\n */\r\nexport function calculateParticleCount(\r\n baseCount: number,\r\n intensity: IntensityLevel = 'medium'\r\n): number {\r\n const settings = INTENSITY_CONFIG[intensity];\r\n const calculated = Math.floor(baseCount * settings.particleMultiplier);\r\n return Math.min(calculated, settings.maxParticles);\r\n}\r\n","import React, { useState, useEffect, useRef, useCallback } from 'react';\r\nimport { AnimatePresence } from 'framer-motion';\r\nimport type { FestiveEffectsProps, ParticleData } from '../types';\r\nimport { FESTIVAL_TYPES } from '../types';\r\nimport { FESTIVAL_CONFIGS, getParticleCount } from '../config';\r\nimport { useReducedMotion, useDocumentVisibility } from '../hooks';\r\nimport { Particle, generateParticles } from '../particles';\r\n\r\n/**\r\n * Check if a festival type is valid\r\n */\r\nfunction isValidFestival(festival: string): boolean {\r\n return FESTIVAL_TYPES.includes(festival as typeof FESTIVAL_TYPES[number]);\r\n}\r\n\r\n/**\r\n * FestiveEffects - Main component for rendering festival-themed visual effects\r\n * \r\n * Renders a full-screen overlay with animated particles for various festivals.\r\n * Uses Framer Motion for smooth, GPU-accelerated animations.\r\n * \r\n * Features:\r\n * - Automatic cleanup of timeouts and event listeners on unmount\r\n * - Pauses animations when browser tab is not visible (performance optimization)\r\n * - Respects user's reduced motion preferences\r\n * \r\n * @example\r\n * ```tsx\r\n * <FestiveEffects festival=\"christmas\" intensity=\"medium\" />\r\n * ```\r\n */\r\nexport const FestiveEffects: React.FC<FestiveEffectsProps> = ({\r\n festival,\r\n intensity = 'medium',\r\n duration,\r\n zIndex = 9999,\r\n respectReducedMotion = true,\r\n colors,\r\n}) => {\r\n const [particles, setParticles] = useState<ParticleData[]>([]);\r\n const [isActive, setIsActive] = useState(true);\r\n const [viewport, setViewport] = useState({ width: 0, height: 0 });\r\n const prefersReducedMotion = useReducedMotion();\r\n const isDocumentVisible = useDocumentVisibility();\r\n \r\n // Refs for cleanup tracking\r\n const durationTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n const animationFrameRef = useRef<number | null>(null);\r\n const isMountedRef = useRef(true);\r\n\r\n // Cleanup function to cancel all pending operations\r\n const cleanup = useCallback(() => {\r\n // Clear duration timeout\r\n if (durationTimeoutRef.current) {\r\n clearTimeout(durationTimeoutRef.current);\r\n durationTimeoutRef.current = null;\r\n }\r\n \r\n // Cancel any pending animation frames\r\n if (animationFrameRef.current) {\r\n cancelAnimationFrame(animationFrameRef.current);\r\n animationFrameRef.current = null;\r\n }\r\n }, []);\r\n\r\n // Track mounted state for async operations\r\n useEffect(() => {\r\n isMountedRef.current = true;\r\n \r\n return () => {\r\n isMountedRef.current = false;\r\n cleanup();\r\n };\r\n }, [cleanup]);\r\n\r\n // Update viewport dimensions with cleanup\r\n useEffect(() => {\r\n if (typeof window === 'undefined') return;\r\n\r\n const updateViewport = () => {\r\n if (isMountedRef.current) {\r\n setViewport({\r\n width: window.innerWidth,\r\n height: window.innerHeight,\r\n });\r\n }\r\n };\r\n\r\n updateViewport();\r\n window.addEventListener('resize', updateViewport);\r\n\r\n return () => {\r\n window.removeEventListener('resize', updateViewport);\r\n };\r\n }, []);\r\n\r\n // Handle duration timeout with proper cleanup\r\n useEffect(() => {\r\n if (duration && duration > 0) {\r\n durationTimeoutRef.current = setTimeout(() => {\r\n if (isMountedRef.current) {\r\n setIsActive(false);\r\n }\r\n }, duration);\r\n }\r\n\r\n return () => {\r\n if (durationTimeoutRef.current) {\r\n clearTimeout(durationTimeoutRef.current);\r\n durationTimeoutRef.current = null;\r\n }\r\n };\r\n }, [duration]);\r\n\r\n // Generate particles when viewport is ready and effect is active\r\n useEffect(() => {\r\n if (!isActive || viewport.width === 0 || viewport.height === 0) {\r\n return;\r\n }\r\n\r\n if (!isValidFestival(festival)) {\r\n return;\r\n }\r\n\r\n const config = FESTIVAL_CONFIGS[festival];\r\n const effectColors = colors && colors.length > 0 ? colors : config.colors;\r\n const particleCount = getParticleCount(config.baseParticleCount, intensity);\r\n\r\n const newParticles = generateParticles(\r\n particleCount,\r\n viewport,\r\n config.particleTypes,\r\n effectColors,\r\n config.physics,\r\n config.animationType\r\n );\r\n\r\n if (isMountedRef.current) {\r\n setParticles(newParticles);\r\n }\r\n }, [festival, intensity, colors, viewport, isActive]);\r\n\r\n // Validate festival prop\r\n if (!isValidFestival(festival)) {\r\n console.warn(\r\n `[FestiveEffects] Invalid festival prop: \"${festival}\". ` +\r\n `Valid options are: ${FESTIVAL_TYPES.join(', ')}`\r\n );\r\n return null;\r\n }\r\n\r\n // Respect reduced motion preference\r\n if (respectReducedMotion && prefersReducedMotion) {\r\n return null;\r\n }\r\n\r\n // Don't render if effect is not active\r\n if (!isActive) {\r\n return null;\r\n }\r\n\r\n // Don't render if viewport is not ready\r\n if (viewport.width === 0 || viewport.height === 0) {\r\n return null;\r\n }\r\n\r\n // Pause animations when document is not visible (tab is in background)\r\n // This improves performance by not rendering animations that can't be seen\r\n const shouldRenderParticles = isDocumentVisible;\r\n\r\n const config = FESTIVAL_CONFIGS[festival];\r\n\r\n return (\r\n <div\r\n data-testid=\"festive-effects-overlay\"\r\n style={{\r\n position: 'fixed',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n pointerEvents: 'none',\r\n zIndex,\r\n overflow: 'hidden',\r\n }}\r\n >\r\n <AnimatePresence>\r\n {shouldRenderParticles && particles.map((particle) => (\r\n <Particle\r\n key={particle.id}\r\n particle={particle}\r\n animationType={config.animationType}\r\n physics={config.physics}\r\n />\r\n ))}\r\n </AnimatePresence>\r\n </div>\r\n );\r\n};\r\n","// Animation System for Festive Effects\r\n// Contains Framer Motion variants for each animation type\r\n\r\nimport type { Variants, Transition } from 'framer-motion';\r\nimport type { AnimationType, PhysicsConfig } from '../types';\r\n\r\n/**\r\n * Custom data passed to animation variants\r\n */\r\nexport interface AnimationCustomData {\r\n /** Horizontal drift amount */\r\n drift: number;\r\n /** Rotation amount in degrees */\r\n rotation: number;\r\n /** Animation delay in seconds */\r\n delay: number;\r\n /** Animation duration in seconds */\r\n duration: number;\r\n /** Angle for radial animations (explode, scatter) */\r\n angle: number;\r\n /** Distance for radial animations */\r\n distance: number;\r\n /** Initial X position */\r\n x: number;\r\n /** Initial Y position */\r\n y: number;\r\n /** Viewport height for calculations */\r\n viewportHeight: number;\r\n}\r\n\r\n/**\r\n * Fall animation variants - used for snow, leaves, shamrocks\r\n * Particles fall from top to bottom with horizontal drift and rotation\r\n */\r\nexport const fallVariants: Variants = {\r\n initial: {\r\n y: -50,\r\n opacity: 0,\r\n rotate: 0,\r\n },\r\n animate: (custom: AnimationCustomData) => ({\r\n y: custom.viewportHeight + 50,\r\n x: custom.drift,\r\n opacity: [0, 1, 1, 0],\r\n rotate: custom.rotation,\r\n }),\r\n};\r\n\r\n/**\r\n * Get transition for fall animation\r\n */\r\nexport function getFallTransition(custom: AnimationCustomData): Transition {\r\n return {\r\n duration: custom.duration,\r\n ease: 'linear',\r\n repeat: Infinity,\r\n delay: custom.delay,\r\n };\r\n}\r\n\r\n/**\r\n * Rise animation variants - used for hearts, lanterns\r\n * Particles rise from bottom to top with gentle sway\r\n */\r\nexport const riseVariants: Variants = {\r\n initial: (custom: AnimationCustomData) => ({\r\n y: custom.viewportHeight + 50,\r\n opacity: 0,\r\n scale: 0,\r\n }),\r\n animate: (custom: AnimationCustomData) => ({\r\n y: -50,\r\n x: [0, custom.drift / 2, -custom.drift / 2, 0],\r\n opacity: [0, 1, 1, 0],\r\n scale: [0, 1, 1.2, 1, 0],\r\n }),\r\n};\r\n\r\n/**\r\n * Get transition for rise animation\r\n */\r\nexport function getRiseTransition(custom: AnimationCustomData): Transition {\r\n return {\r\n duration: custom.duration,\r\n ease: 'easeOut',\r\n repeat: Infinity,\r\n delay: custom.delay,\r\n };\r\n}\r\n\r\n/**\r\n * Explode animation variants - used for fireworks, confetti\r\n * Particles burst outward from center point\r\n */\r\nexport const explodeVariants: Variants = {\r\n initial: {\r\n scale: 0,\r\n opacity: 1,\r\n },\r\n animate: (custom: AnimationCustomData) => ({\r\n x: Math.cos(custom.angle) * custom.distance,\r\n y: Math.sin(custom.angle) * custom.distance,\r\n scale: [0, 1.5, 0],\r\n opacity: [1, 1, 0],\r\n }),\r\n};\r\n\r\n/**\r\n * Get transition for explode animation\r\n */\r\nexport function getExplodeTransition(custom: AnimationCustomData): Transition {\r\n return {\r\n duration: custom.duration * 0.5,\r\n ease: [0.25, 0.46, 0.45, 0.94],\r\n repeat: Infinity,\r\n repeatDelay: custom.duration * 0.5,\r\n delay: custom.delay,\r\n };\r\n}\r\n\r\n/**\r\n * Float animation variants - used for bats, diyas, moons\r\n * Particles float with gentle bobbing motion\r\n */\r\nexport const floatVariants: Variants = {\r\n initial: {\r\n opacity: 0,\r\n scale: 0.8,\r\n },\r\n animate: (custom: AnimationCustomData) => ({\r\n x: [0, custom.drift, -custom.drift, 0],\r\n y: [0, -20, 10, 0],\r\n opacity: [0, 1, 1, 0],\r\n scale: [0.8, 1, 1.1, 1, 0.8],\r\n rotate: [0, custom.rotation / 4, -custom.rotation / 4, 0],\r\n }),\r\n};\r\n\r\n/**\r\n * Get transition for float animation\r\n */\r\nexport function getFloatTransition(custom: AnimationCustomData): Transition {\r\n return {\r\n duration: custom.duration,\r\n ease: 'easeInOut',\r\n repeat: Infinity,\r\n delay: custom.delay,\r\n };\r\n}\r\n\r\n/**\r\n * Scatter animation variants - used for holi colors\r\n * Particles scatter outward with fading effect\r\n */\r\nexport const scatterVariants: Variants = {\r\n initial: {\r\n scale: 0,\r\n opacity: 0.8,\r\n },\r\n animate: (custom: AnimationCustomData) => ({\r\n x: Math.cos(custom.angle) * custom.distance,\r\n y: Math.sin(custom.angle) * custom.distance + 50,\r\n scale: [0, 2, 0],\r\n opacity: [0.8, 0.6, 0],\r\n rotate: custom.rotation,\r\n }),\r\n};\r\n\r\n/**\r\n * Get transition for scatter animation\r\n */\r\nexport function getScatterTransition(custom: AnimationCustomData): Transition {\r\n return {\r\n duration: custom.duration * 0.7,\r\n ease: 'easeOut',\r\n repeat: Infinity,\r\n repeatDelay: custom.duration * 0.3,\r\n delay: custom.delay,\r\n };\r\n}\r\n\r\n/**\r\n * Map of animation types to their variants\r\n */\r\nexport const ANIMATION_VARIANTS: Record<AnimationType, Variants> = {\r\n fall: fallVariants,\r\n rise: riseVariants,\r\n explode: explodeVariants,\r\n float: floatVariants,\r\n scatter: scatterVariants,\r\n};\r\n\r\n/**\r\n * Get the appropriate transition function for an animation type\r\n */\r\nexport function getTransitionForType(\r\n animationType: AnimationType,\r\n custom: AnimationCustomData\r\n): Transition {\r\n switch (animationType) {\r\n case 'fall':\r\n return getFallTransition(custom);\r\n case 'rise':\r\n return getRiseTransition(custom);\r\n case 'explode':\r\n return getExplodeTransition(custom);\r\n case 'float':\r\n return getFloatTransition(custom);\r\n case 'scatter':\r\n return getScatterTransition(custom);\r\n default:\r\n return { duration: 1 };\r\n }\r\n}\r\n\r\n/**\r\n * Create custom animation data from particle properties\r\n */\r\nexport function createAnimationCustomData(\r\n x: number,\r\n y: number,\r\n physics: PhysicsConfig,\r\n delay: number,\r\n duration: number,\r\n viewportHeight: number\r\n): AnimationCustomData {\r\n return {\r\n drift: physics.drift * (Math.random() - 0.5) * 2,\r\n rotation: physics.rotation * (Math.random() - 0.5) * 2,\r\n delay,\r\n duration,\r\n angle: Math.random() * Math.PI * 2,\r\n distance: 50 + Math.random() * 150,\r\n x,\r\n y,\r\n viewportHeight,\r\n };\r\n}\r\n\r\n/**\r\n * Get animation props for a particle based on animation type\r\n * Returns initial, animate, and transition properties for Framer Motion\r\n */\r\nexport function getAnimationPropsForType(\r\n animationType: AnimationType,\r\n custom: AnimationCustomData\r\n): {\r\n initial: Record<string, unknown>;\r\n animate: Record<string, unknown>;\r\n transition: Transition;\r\n} {\r\n const transition = getTransitionForType(animationType, custom);\r\n\r\n // Get initial and animate values based on animation type\r\n // We compute these directly rather than using variant functions\r\n // to avoid TypeScript issues with Framer Motion's TargetResolver signature\r\n let initial: Record<string, unknown>;\r\n let animate: Record<string, unknown>;\r\n\r\n switch (animationType) {\r\n case 'fall':\r\n initial = { y: -50, opacity: 0, rotate: 0 };\r\n animate = {\r\n y: custom.viewportHeight + 50,\r\n x: custom.drift,\r\n opacity: [0, 1, 1, 0],\r\n rotate: custom.rotation,\r\n };\r\n break;\r\n case 'rise':\r\n initial = { y: custom.viewportHeight + 50, opacity: 0, scale: 0 };\r\n animate = {\r\n y: -50,\r\n x: [0, custom.drift / 2, -custom.drift / 2, 0],\r\n opacity: [0, 1, 1, 0],\r\n scale: [0, 1, 1.2, 1, 0],\r\n };\r\n break;\r\n case 'explode':\r\n initial = { scale: 0, opacity: 1 };\r\n animate = {\r\n x: Math.cos(custom.angle) * custom.distance,\r\n y: Math.sin(custom.angle) * custom.distance,\r\n scale: [0, 1.5, 0],\r\n opacity: [1, 1, 0],\r\n };\r\n break;\r\n case 'float':\r\n initial = { opacity: 0, scale: 0.8 };\r\n animate = {\r\n x: [0, custom.drift, -custom.drift, 0],\r\n y: [0, -20, 10, 0],\r\n opacity: [0, 1, 1, 0],\r\n scale: [0.8, 1, 1.1, 1, 0.8],\r\n rotate: [0, custom.rotation / 4, -custom.rotation / 4, 0],\r\n };\r\n break;\r\n case 'scatter':\r\n initial = { scale: 0, opacity: 0.8 };\r\n animate = {\r\n x: Math.cos(custom.angle) * custom.distance,\r\n y: Math.sin(custom.angle) * custom.distance + 50,\r\n scale: [0, 2, 0],\r\n opacity: [0.8, 0.6, 0],\r\n rotate: custom.rotation,\r\n };\r\n break;\r\n default:\r\n initial = { opacity: 0 };\r\n animate = { opacity: 1 };\r\n }\r\n\r\n return {\r\n initial,\r\n animate,\r\n transition,\r\n };\r\n}\r\n","// Festival Registry for Festive Effects\r\n// Manages registration and retrieval of festival effects\r\n\r\nimport React from 'react';\r\nimport type { FestivalType, ParticleData, Viewport, FestivalConfig } from '../types';\r\nimport { FESTIVAL_CONFIGS } from '../config';\r\nimport { generateParticles, Particle, type ParticleComponentProps } from '../particles';\r\n\r\n/**\r\n * Interface for a festival effect\r\n * Each effect provides particle generation and rendering capabilities\r\n */\r\nexport interface FestivalEffect {\r\n /** The festival type identifier */\r\n name: FestivalType;\r\n /** Generate particles for this effect */\r\n generateParticles(count: number, viewport: Viewport): ParticleData[];\r\n /** Get the festival configuration */\r\n getConfig(): FestivalConfig;\r\n /** Render a single particle */\r\n renderParticle(particle: ParticleData): React.ReactNode;\r\n}\r\n\r\n/**\r\n * Create a festival effect from a festival type\r\n * @param festivalType - The type of festival\r\n * @returns A FestivalEffect instance\r\n */\r\nfunction createFestivalEffect(festivalType: FestivalType): FestivalEffect {\r\n const config = FESTIVAL_CONFIGS[festivalType];\r\n\r\n return {\r\n name: festivalType,\r\n\r\n generateParticles(count: number, viewport: Viewport): ParticleData[] {\r\n return generateParticles(\r\n count,\r\n viewport,\r\n config.particleTypes,\r\n config.colors,\r\n config.physics,\r\n config.animationType\r\n );\r\n },\r\n\r\n getConfig(): FestivalConfig {\r\n return config;\r\n },\r\n\r\n renderParticle(particle: ParticleData): React.ReactNode {\r\n const props: ParticleComponentProps = {\r\n particle,\r\n animationType: config.animationType,\r\n physics: config.physics,\r\n };\r\n return React.createElement(Particle, { key: particle.id, ...props });\r\n },\r\n };\r\n}\r\n\r\n\r\n/**\r\n * Registry for managing festival effects\r\n * Provides methods to register, retrieve, and list festival effects\r\n */\r\nexport class FestivalRegistry {\r\n private effects: Map<FestivalType, FestivalEffect> = new Map();\r\n\r\n /**\r\n * Register a festival effect\r\n * @param effect - The festival effect to register\r\n */\r\n register(effect: FestivalEffect): void {\r\n this.effects.set(effect.name, effect);\r\n }\r\n\r\n /**\r\n * Get a festival effect by type\r\n * @param festival - The festival type to retrieve\r\n * @returns The festival effect or undefined if not found\r\n */\r\n get(festival: FestivalType): FestivalEffect | undefined {\r\n return this.effects.get(festival);\r\n }\r\n\r\n /**\r\n * Check if a festival effect is registered\r\n * @param festival - The festival type to check\r\n * @returns True if the effect is registered\r\n */\r\n has(festival: FestivalType): boolean {\r\n return this.effects.has(festival);\r\n }\r\n\r\n /**\r\n * List all registered festival types\r\n * @returns Array of registered festival types\r\n */\r\n list(): FestivalType[] {\r\n return Array.from(this.effects.keys());\r\n }\r\n\r\n /**\r\n * Get the number of registered effects\r\n * @returns The count of registered effects\r\n */\r\n get size(): number {\r\n return this.effects.size;\r\n }\r\n\r\n /**\r\n * Clear all registered effects\r\n */\r\n clear(): void {\r\n this.effects.clear();\r\n }\r\n}\r\n\r\n/**\r\n * Default registry instance with all 12 festival effects pre-registered\r\n */\r\nexport const defaultRegistry = new FestivalRegistry();\r\n\r\n// Register all 12 festival effects\r\nconst ALL_FESTIVALS: FestivalType[] = [\r\n 'christmas',\r\n 'newyear',\r\n 'valentine',\r\n 'easter',\r\n 'halloween',\r\n 'thanksgiving',\r\n 'diwali',\r\n 'chinesenewyear',\r\n 'holi',\r\n 'eid',\r\n 'stpatricks',\r\n 'independence',\r\n];\r\n\r\nALL_FESTIVALS.forEach((festivalType) => {\r\n defaultRegistry.register(createFestivalEffect(festivalType));\r\n});\r\n\r\n/**\r\n * Factory function to create a festival effect\r\n * Useful for creating custom effects or testing\r\n */\r\nexport { createFestivalEffect };\r\n","// Christmas Effect - Falling snowflakes with drift and rotation\r\n// White/blue color palette\r\n\r\nimport React from 'react';\r\nimport { motion } from 'framer-motion';\r\nimport type { ParticleData, Viewport } from '../types';\r\nimport { PARTICLE_SVGS } from '../particles';\r\n\r\n/**\r\n * Christmas effect configuration\r\n */\r\nexport const CHRISTMAS_CONFIG = {\r\n baseParticleCount: 50,\r\n colors: ['#FFFFFF', '#E8F4FF', '#B8D4E8', '#87CEEB'],\r\n particleTypes: ['snowflake'] as const,\r\n animationType: 'fall' as const,\r\n physics: {\r\n speed: 3,\r\n drift: 50,\r\n rotation: 360,\r\n scale: [0.5, 1.5] as [number, number],\r\n },\r\n};\r\n\r\ninterface ChristmasParticleProps {\r\n particle: ParticleData;\r\n viewportHeight: number;\r\n}\r\n\r\n/**\r\n * Individual snowflake particle with falling animation\r\n */\r\nconst ChristmasParticle: React.FC<ChristmasParticleProps> = ({ particle, viewportHeight }) => {\r\n const { drift, rotation } = particle.custom as { drift: number; rotation: number };\r\n\r\n return (\r\n <motion.div\r\n style={{\r\n position: 'absolute',\r\n left: particle.x,\r\n width: particle.size,\r\n height: particle.size,\r\n color: particle.color,\r\n pointerEvents: 'none',\r\n }}\r\n initial={{ y: -50, opacity: 0, rotate: 0 }}\r\n animate={{\r\n y: viewportHeight + 50,\r\n x: drift,\r\n opacity: [0, 1, 1, 0],\r\n rotate: rotation,\r\n }}\r\n transition={{\r\n duration: particle.duration,\r\n ease: 'linear',\r\n repeat: Infinity,\r\n delay: particle.delay,\r\n }}\r\n dangerouslySetInnerHTML={{ __html: PARTICLE_SVGS.snowflake }}\r\n />\r\n );\r\n};\r\n\r\n/**\r\n * Generate snowflake particles for Christmas effect\r\n */\r\nexport function generateChristmasParticles(\r\n count: number,\r\n viewport: Viewport,\r\n colors?: string[]\r\n): ParticleData[] {\r\n const effectColors = colors && colors.length > 0 ? colors : CHRISTMAS_CONFIG.colors;\r\n const physics = CHRISTMAS_CONFIG.physics;\r\n const particles: ParticleData[] = [];\r\n\r\n for (let i = 0; i < count; i++) {\r\n const size = physics.scale[0] * 20 + Math.random() * (physics.scale[1] - physics.scale[0]) * 20;\r\n const baseDelay = i * (1 / count) * 3;\r\n\r\n particles.push({\r\n id: `christmas-${i}-${Math.random().toString(36).substring(2, 9)}`,\r\n x: Math.random() * viewport.width,\r\n y: -50 - Math.random() * 80,\r\n size,\r\n color: effectColors[Math.floor(Math.random() * effectColors.length)],\r\n type: 'snowflake',\r\n delay: baseDelay + Math.random() * 0.5,\r\n duration: 10 / physics.speed + (Math.random() - 0.5) * 2,\r\n custom: {\r\n drift: physics.drift * (Math.random() - 0.5) * 2,\r\n rotation: physics.rotation * (Math.random() - 0.5) * 2,\r\n },\r\n });\r\n }\r\n\r\n return particles;\r\n}\r\n\r\ninterface ChristmasEffectProps {\r\n particles: ParticleData[];\r\n viewport: Viewport;\r\n}\r\n\r\n/**\r\n * Christmas Effect Component\r\n * Renders falling snowflakes with drift and rotation\r\n * White/blue color palette\r\n */\r\nexport const ChristmasEffect: React.FC<ChristmasEffectProps> = ({ particles, viewport }) => {\r\n return (\r\n <>\r\n {particles.map((particle) => (\r\n <ChristmasParticle\r\n key={particle.id}\r\n particle={particle}\r\n viewportHeight={viewport.height}\r\n />\r\n ))}\r\n </>\r\n );\r\n};\r\n\r\nexport default ChristmasEffect;\r\n","// New Year Effect - Exploding fireworks with sparks and falling confetti\r\n// Vibrant multi-color palette\r\n\r\nimport React from 'react';\r\nimport { motion } from 'framer-motion';\r\nimport type { ParticleData, Viewport, ParticleType } from '../types';\r\nimport { PARTICLE_SVGS } from '../particles';\r\n\r\n/**\r\n * New Year effect configuration\r\n */\r\nexport const NEWYEAR_CONFIG = {\r\n baseParticleCount: 40,\r\n colors: ['#FFD700', '#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4', '#FFEAA7'],\r\n particleTypes: ['firework', 'confetti', 'spark'] as ParticleType[],\r\n animationType: 'explode' as const,\r\n physics: {\r\n speed: 5,\r\n drift: 100,\r\n rotation: 720,\r\n scale: [0.3, 1.2] as [number, number],\r\n },\r\n};\r\n\r\ninterface NewYearParticleProps {\r\n particle: ParticleData;\r\n}\r\n\r\n/**\r\n * Individual particle with explode animation for fireworks/confetti/sparks\r\n */\r\nconst NewYearParticle: React.FC<NewYearParticleProps> = ({ particle }) => {\r\n const { angle, distance } = particle.custom as { angle: number; distance: number };\r\n const svgString = PARTICLE_SVGS[particle.type];\r\n\r\n return (\r\n <motion.div\r\n style={{\r\n position: 'absolute',\r\n left: particle.x,\r\n top: particle.y,\r\n width: particle.size,\r\n height: particle.size,\r\n color: particle.color,\r\n pointerEvents: 'none',\r\n }}\r\n initial={{ scale: 0, opacity: 1 }}\r\n animate={{\r\n x: Math.cos(angle) * distance,\r\n y: Math.sin(angle) * distance,\r\n scale: [0, 1.5, 0],\r\n opacity: [1, 1, 0],\r\n }}\r\n transition={{\r\n duration: particle.duration * 0.5,\r\n ease: [0.25, 0.46, 0.45, 0.94],\r\n repeat: Infinity,\r\n repeatDelay: particle.duration * 0.5,\r\n delay: particle.delay,\r\n }}\r\n dangerouslySetInnerHTML={{ __html: svgString }}\r\n />\r\n );\r\n};\r\n\r\n/**\r\n * Generate particles for New Year effect\r\n */\r\nexport function generateNewYearParticles(\r\n count: number,\r\n viewport: Viewport,\r\n colors?: string[]\r\n): ParticleData[] {\r\n const effectColors = colors && colors.length > 0 ? colors : NEWYEAR_CONFIG.colors;\r\n const physics = NEWYEAR_CONFIG.physics;\r\n const particles: ParticleData[] = [];\r\n const particleTypes = NEWYEAR_CONFIG.particleTypes;\r\n\r\n for (let i = 0; i < count; i++) {\r\n const size = physics.scale[0] * 20 + Math.random() * (physics.scale[1] - physics.scale[0]) * 20;\r\n const baseDelay = i * (1 / count) * 3;\r\n const type = particleTypes[Math.floor(Math.random() * particleTypes.length)];\r\n\r\n particles.push({\r\n id: `newyear-${i}-${Math.random().toString(36).substring(2, 9)}`,\r\n x: viewport.width * 0.2 + Math.random() * viewport.width * 0.6,\r\n y: viewport.height * 0.2 + Math.random() * viewport.height * 0.4,\r\n size,\r\n color: effectColors[Math.floor(Math.random() * effectColors.length)],\r\n type,\r\n delay: baseDelay + Math.random() * 0.5,\r\n duration: 10 / physics.speed + (Math.random() - 0.5) * 2,\r\n custom: {\r\n angle: Math.random() * Math.PI * 2,\r\n distance: 100 + Math.random() * 150,\r\n rotation: physics.rotation * (Math.random() - 0.5) * 2,\r\n },\r\n });\r\n }\r\n\r\n return particles;\r\n}\r\n\r\ninterface NewYearEffectProps {\r\n particles: ParticleData[];\r\n viewport: Viewport;\r\n}\r\n\r\n/**\r\n * New Year Effect Component\r\n * Renders exploding fireworks with sparks and falling confetti\r\n */\r\nexport const NewYearEffect: React.FC<NewYearEffectProps> = ({ particles }) => {\r\n return (\r\n <>\r\n {particles.map((particle) => (\r\n <NewYearParticle key={particle.id} particle={particle} />\r\n ))}\r\n </>\r\n );\r\n};\r\n\r\nexport default NewYearEffect;\r\n","// Valentine Effect - Rising hearts with gentle sway\r\n// Pink/red color palette\r\n\r\nimport React from 'react';\r\nimport { motion } from 'framer-motion';\r\nimport type { ParticleData, Viewport } from '../types';\r\nimport { PARTICLE_SVGS } from '../particles';\r\n\r\n/**\r\n * Valentine effect configuration\r\n */\r\nexport const VALENTINE_CONFIG = {\r\n baseParticleCount: 35,\r\n colors: ['#FF6B6B', '#EE5A5A', '#FF8E8E', '#FFB6C1', '#FF69B4'],\r\n particleTypes: ['heart'] as const,\r\n animationType: 'rise' as const,\r\n physics: {\r\n speed: 2,\r\n drift: 30,\r\n rotation: 15,\r\n scale: [0.6, 1.4] as [number, number],\r\n },\r\n};\r\n\r\ninterface ValentineParticleProps {\r\n particle: ParticleData;\r\n viewportHeight: number;\r\n}\r\n\r\n/**\r\n * Individual heart particle with rising animation and gentle sway\r\n */\r\nconst ValentineParticle: React.FC<ValentineParticleProps> = ({ particle, viewportHeight }) => {\r\n const { drift } = particle.custom as { drift: number };\r\n\r\n return (\r\n <motion.div\r\n style={{\r\n position: 'absolute',\r\n left: particle.x,\r\n width: particle.size,\r\n height: particle.size,\r\n color: particle.color,\r\n pointerEvents: 'none',\r\n }}\r\n initial={{ y: viewportHeight + 50, opacity: 0, scale: 0 }}\r\n animate={{\r\n y: -50,\r\n x: [0, drift / 2, -drift / 2, 0],\r\n opacity: [0, 1, 1, 0],\r\n scale: [0, 1, 1.2, 1, 0],\r\n }}\r\n transition={{\r\n duration: particle.duration,\r\n ease: 'easeOut',\r\n repeat: Infinity,\r\n delay: particle.delay,\r\n }}\r\n dangerouslySetInnerHTML={{ __html: PARTICLE_SVGS.heart }}\r\n />\r\n );\r\n};\r\n\r\n/**\r\n * Generate heart particles for Valentine effect\r\n */\r\nexport function generateValentineParticles(\r\n count: number,\r\n viewport: Viewport,\r\n colors?: string[]\r\n): ParticleData[] {\r\n const effectColors = colors && colors.length > 0 ? colors : VALENTINE_CONFIG.colors;\r\n const physics = VALENTINE_CONFIG.physics;\r\n const particles: ParticleData[] = [];\r\n\r\n for (let i = 0; i < count; i++) {\r\n const size = physics.scale[0] * 20 + Math.random() * (physics.scale[1] - physics.scale[0]) * 20;\r\n const baseDelay = i * (1 / count) * 3;\r\n\r\n particles.push({\r\n id: `valentine-${i}-${Math.random().toString(36).substring(2, 9)}`,\r\n x: Math.random() * viewport.width,\r\n y: viewport.height + 50 + Math.random() * 80,\r\n size,\r\n color: effectColors[Math.floor(Math.random() * effectColors.length)],\r\n type: 'heart',\r\n delay: baseDelay + Math.random() * 0.5,\r\n duration: 10 / physics.speed + (Math.random() - 0.5) * 2,\r\n custom: {\r\n drift: physics.drift * (Math.random() - 0.5) * 2,\r\n rotation: physics.rotation * (Math.random() - 0.5) * 2,\r\n },\r\n });\r\n }\r\n\r\n return particles;\r\n}\r\n\r\ninterface ValentineEffectProps {\r\n particles: ParticleData[];\r\n viewport: Viewport;\r\n}\r\n\r\n/**\r\n * Valentine Effect Component\r\n * Renders rising hearts with gentle sway\r\n * Pink/red color palette\r\n */\r\nexport const ValentineEffect: React.FC<ValentineEffectProps> = ({ particles, viewport }) => {\r\n return (\r\n <>\r\n {particles.map((particle) => (\r\n <ValentineParticle\r\n key={particle.id}\r\n particle={particle}\r\n viewportHeight={viewport.height}\r\n />\r\n ))}\r\n </>\r\n );\r\n};\r\n\r\nexport default ValentineEffect;\r\n","// Easter Effect - Floating eggs and spring flowers\r\n// Pastel color palette\r\n\r\nimport React from 'react';\r\nimport { motion } from 'framer-motion';\r\nimport type { ParticleData, Viewport, ParticleType } from '../types';\r\nimport { PARTICLE_SVGS } from '../particles';\r\n\r\n/**\r\n * Easter effect configuration\r\n */\r\nexport const EASTER_CONFIG = {\r\n baseParticleCount: 30,\r\n colors: ['#FFB6C1', '#98FB98', '#87CEEB', '#DDA0DD', '#F0E68C'],\r\n particleTypes: ['egg', 'flower'] as ParticleType[],\r\n animationType: 'float' as const,\r\n physics: {\r\n speed: 1.5,\r\n drift: 20,\r\n rotation: 10,\r\n scale: [0.7, 1.3] as [number, number],\r\n },\r\n};\r\n\r\ninterface EasterParticleProps {\r\n particle: ParticleData;\r\n}\r\n\r\n/**\r\n * Individual egg/flower particle with floating animation\r\n */\r\nconst EasterParticle: React.FC<EasterParticleProps> = ({ particle }) => {\r\n const { drift, rotation } = particle.custom as { drift: number; rotation: number };\r\n const svgString = PARTICLE_SVGS[particle.type];\r\n\r\n return (\r\n <motion.div\r\n style={{\r\n position: 'absolute',\r\n left: particle.x,\r\n top: particle.y,\r\n width: particle.size,\r\n height: particle.size,\r\n color: particle.color,\r\n pointerEvents: 'none',\r\n }}\r\n initial={{ opacity: 0, scale: 0.8 }}\r\n animate={{\r\n x: [0, drift, -drift, 0],\r\n y: [0, -20, 10, 0],\r\n opacity: [0, 1, 1, 0],\r\n scale: [0.8, 1, 1.1, 1, 0.8],\r\n rotate: [0, rotation / 4, -rotation / 4, 0],\r\n }}\r\n transition={{\r\n duration: particle.duration,\r\n ease: 'easeInOut',\r\n repeat: Infinity,\r\n delay: particle.delay,\r\n }}\r\n dangerouslySetInnerHTML={{ __html: svgString }}\r\n />\r\n );\r\n};\r\n\r\n/**\r\n * Generate particles for Easter effect\r\n */\r\nexport function generateEasterParticles(\r\n count: number,\r\n viewport: Viewport,\r\n colors?: string[]\r\n): ParticleData[] {\r\n const effectColors = colors && colors.length > 0 ? colors : EASTER_CONFIG.colors;\r\n const physics = EASTER_CONFIG.physics;\r\n const particles: ParticleData[] = [];\r\n const particleTypes = EASTER_CONFIG.particleTypes;\r\n\r\n for (let i = 0; i < count; i++) {\r\n const size = physics.scale[0] * 20 + Math.random() * (physics.scale[1] - physics.scale[0]) * 20;\r\n const baseDelay = i * (1 / count) * 3;\r\n const type = particleTypes[Math.floor(Math.random() * particleTypes.length)];\r\n\r\n particles.push({\r\n id: `easter-${i}-${Math.random().toString(36).substring(2, 9)}`,\r\n x: Math.random() * viewport.width,\r\n y: Math.random() * viewport.height,\r\n size,\r\n color: effectColors[Math.floor(Math.random() * effectColors.length)],\r\n type,\r\n delay: baseDelay + Math.random() * 0.5,\r\n duration: 10 / physics.speed + (Math.random() - 0.5) * 2,\r\n custom: {\r\n drift: physics.drift * (Math.random() - 0.5) * 2,\r\n rotation: physics.rotation * (Math.random() - 0.5) * 2,\r\n },\r\n });\r\n }\r\n\r\n return particles;\r\n}\r\n\r\ninterface EasterEffectProps {\r\n particles: ParticleData[];\r\n viewport: Viewport;\r\n}\r\n\r\n/**\r\n * Easter Effect Component\r\n * Renders floating eggs and spring flowers\r\n * Pastel color palette\r\n */\r\nexport const EasterEffect: React.FC<EasterEffectProps> = ({ particles }) => {\r\n return (\r\n <>\r\n {particles.map((particle) => (\r\n <EasterParticle key={particle.id} particle={particle} />\r\n ))}\r\n </>\r\n );\r\n};\r\n\r\nexport default EasterEffect;\r\n","// Halloween Effect - Flying bats with erratic movement, floating pumpkins and spiders\r\n// Orange/purple/black color palette\r\n\r\nimport React from 'react';\r\nimport { motion } from 'framer-motion';\r\nimport type { ParticleData, Viewport, ParticleType } from '../types';\r\nimport { PARTICLE_SVGS } from '../particles';\r\n\r\n/**\r\n * Halloween effect configuration\r\n */\r\nexport const HALLOWEEN_CONFIG = {\r\n baseParticleCount: 35,\r\n colors: ['#FF6600', '#8B008B', '#000000', '#FFD700', '#32CD32'],\r\n particleTypes: ['bat', 'pumpkin', 'spider'] as ParticleType[],\r\n animationType: 'float' as const,\r\n physics: {\r\n speed: 2,\r\n drift: 60,\r\n rotation: 30,\r\n scale: [0.5, 1.5] as [number, number],\r\n },\r\n};\r\n\r\ninterface HalloweenParticleProps {\r\n particle: ParticleData;\r\n}\r\n\r\n/**\r\n * Individual bat/pumpkin/spider particle with erratic floating animation\r\n */\r\nconst HalloweenParticle: React.FC<HalloweenParticleProps> = ({ particle }) => {\r\n const { drift, rotation } = particle.custom as { drift: number; rotation: number };\r\n const svgString = PARTICLE_SVGS[particle.type];\r\n \r\n // Bats have more erratic movement\r\n const isBat = particle.type === 'bat';\r\n const driftMultiplier = isBat ? 1.5 : 1;\r\n const rotationMultiplier = isBat ? 2 : 1;\r\n\r\n return (\r\n <motion.div\r\n style={{\r\n position: 'absolute',\r\n left: particle.x,\r\n top: particle.y,\r\n width: particle.size,\r\n height: particle.size,\r\n color: particle.color,\r\n pointerEvents: 'none',\r\n }}\r\n initial={{ opacity: 0, scale: 0.8 }}\r\n animate={{\r\n x: [0, drift * driftMultiplier, -drift * driftMultiplier, drift * 0.5, 0],\r\n y: [0, -30, 15, -20, 0],\r\n opacity: [0, 1, 1, 1, 0],\r\n scale: [0.8, 1, 1.1, 1, 0.8],\r\n rotate: [0, rotation * rotationMultiplier / 4, -rotation * rotationMultiplier / 4, rotation / 8, 0],\r\n }}\r\n transition={{\r\n duration: particle.duration,\r\n ease: 'easeInOut',\r\n repeat: Infinity,\r\n delay: particle.delay,\r\n }}\r\n dangerouslySetInnerHTML={{ __html: svgString }}\r\n />\r\n );\r\n};\r\n\r\n/**\r\n * Generate particles for Halloween effect\r\n */\r\nexport function generateHalloweenParticles(\r\n count: number,\r\n viewport: Viewport,\r\n colors?: string[]\r\n): ParticleData[] {\r\n const effectColors = colors && colors.length > 0 ? colors : HALLOWEEN_CONFIG.colors;\r\n const physics = HALLOWEEN_CONFIG.physics;\r\n const particles: ParticleData[] = [];\r\n const particleTypes = HALLOWEEN_CONFIG.particleTypes;\r\n\r\n for (let i = 0; i < count; i++) {\r\n const size = physics.scale[0] * 20 + Math.random() * (physics.scale[1] - physics.scale[0]) * 20;\r\n const baseDelay = i * (1 / count) * 3;\r\n const type = particleTypes[Math.floor(Math.random() * particleTypes.length)];\r\n\r\n particles.push({\r\n id: `halloween-${i}-${Math.random().toString(36).substring(2, 9)}`,\r\n x: Math.random() * viewport.width,\r\n y: Math.random() * viewport.height,\r\n size,\r\n color: effectColors[Math.floor(Math.random() * effectColors.length)],\r\n type,\r\n delay: baseDelay + Math.random() * 0.5,\r\n duration: 10 / physics.speed + (Math.random() - 0.5) * 2,\r\n custom: {\r\n drift: physics.drift * (Math.random() - 0.5) * 2,\r\n rotation: physics.rotation * (Math.random() - 0.5) * 2,\r\n },\r\n });\r\n }\r\n\r\n return particles;\r\n}\r\n\r\ninterface HalloweenEffectProps {\r\n particles: ParticleData[];\r\n viewport: Viewport;\r\n}\r\n\r\n/**\r\n * Halloween Effect Component\r\n * Renders flying bats with erratic movement, floating pumpkins and spiders\r\n * Orange/purple/black color palette\r\n */\r\nexport const HalloweenEffect: React.FC<HalloweenEffectProps> = ({ particles }) => {\r\n return (\r\n <>\r\n {particles.map((particle) => (\r\n <HalloweenParticle key={particle.id} particle={particle} />\r\n ))}\r\n </>\r\n );\r\n};\r\n\r\nexport default HalloweenEffect;\r\n","// Thanksgiving Effect - Falling autumn leaves with tumbling rotation\r\n// Orange/brown color palette\r\n\r\nimport React from 'react';\r\nimport { motion } from 'framer-motion';\r\nimport type { ParticleData, Viewport } from '../types';\r\nimport { PARTICLE_SVGS } from '../particles';\r\n\r\n/**\r\n * Thanksgiving effect configuration\r\n */\r\nexport const THANKSGIVING_CONFIG = {\r\n baseParticleCount: 40,\r\n colors: ['#D2691E', '#FF8C00', '#B8860B', '#CD853F', '#8B4513'],\r\n particleTypes: ['leaf'] as const,\r\n animationType: 'fall' as const,\r\n physics: {\r\n speed: 2,\r\n drift: 80,\r\n rotation: 540,\r\n scale: [0.6, 1.4] as [number, number],\r\n },\r\n};\r\n\r\ninterface ThanksgivingParticleProps {\r\n particle: ParticleData;\r\n viewportHeight: number;\r\n}\r\n\r\n/**\r\n * Individual leaf particle with tumbling fall animation\r\n */\r\nconst ThanksgivingParticle: React.FC<ThanksgivingParticleProps> = ({ particle, viewportHeight }) => {\r\n const { drift, rotation } = particle.custom as { drift: number; rotation: number };\r\n\r\n return (\r\n <motion.div\r\n style={{\r\n position: 'absolute',\r\n left: particle.x,\r\n width: particle.size,\r\n height: particle.size,\r\n color: particle.color,\r\n pointerEvents: 'none',\r\n }}\r\n initial={{ y: -50, opacity: 0, rotate: 0 }}\r\n animate={{\r\n y: viewportHeight + 50,\r\n x: [0, drift * 0.3, -drift * 0.2, drift * 0.4, drift],\r\n opacity: [0, 1, 1, 1, 0],\r\n rotate: rotation,\r\n }}\r\n transition={{\r\n duration: particle.duration,\r\n ease: 'linear',\r\n repeat: Infinity,\r\n delay: particle.delay,\r\n }}\r\n dangerouslySetInnerHTML={{ __html: PARTICLE_SVGS.leaf }}\r\n />\r\n );\r\n};\r\n\r\n/**\r\n * Generate leaf particles for Thanksgiving effect\r\n */\r\nexport function generateThanksgivingParticles(\r\n count: number,\r\n viewport: Viewport,\r\n colors?: string[]\r\n): ParticleData[] {\r\n const effectColors = colors && colors.length > 0 ? colors : THANKSGIVING_CONFIG.colors;\r\n const physics = THANKSGIVING_CONFIG.physics;\r\n const particles: ParticleData[] = [];\r\n\r\n for (let i = 0; i < count; i++) {\r\n const size = physics.scale[0] * 20 + Math.random() * (physics.scale[1] - physics.scale[0]) * 20;\r\n const baseDelay = i * (1 / count) * 3;\r\n\r\n particles.push({\r\n id: `thanksgiving-${i}-${Math.random().toString(36).substring(2, 9)}`,\r\n x: Math.random() * viewport.width,\r\n y: -50 - Math.random() * 80,\r\n size,\r\n color: effectColors[Math.floor(Math.random() * effectColors.length)],\r\n type: 'leaf',\r\n delay: baseDelay + Math.random() * 0.5,\r\n duration: 10 / physics.speed + (Math.random() - 0.5) * 2,\r\n custom: {\r\n drift: physics.drift * (Math.random() - 0.5) * 2,\r\n rotation: physics.rotation * (Math.random() - 0.5) * 2,\r\n },\r\n });\r\n }\r\n\r\n return particles;\r\n}\r\n\r\ninterface ThanksgivingEffectProps {\r\n particles: ParticleData[];\r\n viewport: Viewport;\r\n}\r\n\r\n/**\r\n * Thanksgiving Effect Component\r\n * Renders falling autumn leaves with tumbling rotation\r\n * Orange/brown color palette\r\n */\r\nexport const ThanksgivingEffect: React.FC<ThanksgivingEffectProps> = ({ particles, viewport }) => {\r\n return (\r\n <>\r\n {particles.map((particle) => (\r\n <ThanksgivingParticle\r\n key={particle.id}\r\n particle={particle}\r\n viewportHeight={viewport.height}\r\n />\r\n ))}\r\n </>\r\n );\r\n};\r\n\r\nexport default ThanksgivingEffect;\r\n","// Diwali Effect - Glowing diyas with flickering, golden sparkles and rangoli patterns\r\n// Golden/orange color palette\r\n\r\nimport React from 'react';\r\nimport { motion } from 'framer-motion';\r\nimport type { ParticleData, Viewport, ParticleType } from '../types';\r\nimport { PARTICLE_SVGS } from '../particles';\r\n\r\n/**\r\n * Diwali effect configuration\r\n */\r\nexport const DIWALI_CONFIG = {\r\n baseParticleCount: 45,\r\n colors: ['#FFD700', '#FF8C00', '#FF4500', '#FFA500', '#FFFF00'],\r\n particleTypes: ['diya', 'spark', 'rangoli'] as ParticleType[],\r\n animationType: 'float' as const,\r\n physics: {\r\n speed: 1,\r\n drift: 15,\r\n rotation: 5,\r\n scale: [0.5, 1.2] as [number, number],\r\n },\r\n};\r\n\r\ninterface DiwaliParticleProps {\r\n particle: ParticleData;\r\n}\r\n\r\n/**\r\n * Individual diya/spark/rangoli particle with glowing float animation\r\n */\r\nconst DiwaliParticle: React.FC<DiwaliParticleProps> = ({ particle }) => {\r\n const { drift, rotation } = particle.custom as { drift: number; rotation: number };\r\n const svgString = PARTICLE_SVGS[particle.type];\r\n \r\n // Diyas have flickering effect, sparks have more movement\r\n const isDiya = particle.type === 'diya';\r\n const isSpark = particle.type === 'spark';\r\n\r\n return (\r\n <motion.div\r\n style={{\r\n position: 'absolute',\r\n left: particle.x,\r\n top: particle.y,\r\n width: particle.size,\r\n height: particle.size,\r\n color: particle.color,\r\n pointerEvents: 'none',\r\n filter: isDiya ? 'drop-shadow(0 0 8px #FFD700)' : isSpark ? 'drop-shadow(0 0 4px #FFA500)' : undefined,\r\n }}\r\n initial={{ opacity: 0, scale: 0.8 }}\r\n animate={{\r\n x: [0, drift, -drift, 0],\r\n y: [0, -10, 5, 0],\r\n opacity: isDiya ? [0, 1, 0.8, 1, 0] : [0, 1, 1, 0],\r\n scale: isDiya ? [0.8, 1, 0.95, 1.05, 0.8] : [0.8, 1, 1.1, 1, 0.8],\r\n rotate: [0, rotation / 4, -rotation / 4, 0],\r\n }}\r\n transition={{\r\n duration: particle.duration,\r\n ease: 'easeInOut',\r\n repeat: Infinity,\r\n delay: particle.delay,\r\n }}\r\n dangerouslySetInnerHTML={{ __html: svgString }}\r\n />\r\n );\r\n};\r\n\r\n/**\r\n * Generate particles for Diwali effect\r\n */\r\nexport function generateDiwaliParticles(\r\n count: number,\r\n viewport: Viewport,\r\n colors?: string[]\r\n): ParticleData[] {\r\n const effectColors = colors && colors.length > 0 ? colors : DIWALI_CONFIG.colors;\r\n const physics = DIWALI_CONFIG.physics;\r\n const particles: ParticleData[] = [];\r\n const particleTypes = DIWALI_CONFIG.particleTypes;\r\n\r\n for (let i = 0; i < count; i++) {\r\n const size = physics.scale[0] * 20 + Math.random() * (physics.scale[1] - physics.scale[0]) * 20;\r\n const baseDelay = i * (1 / count) * 3;\r\n const type = particleTypes[Math.floor(Math.random() * particleTypes.length)];\r\n\r\n particles.push({\r\n id: `diwali-${i}-${Math.random().toString(36).substring(2, 9)}`,\r\n x: Math.random() * viewport.width,\r\n y: Math.random() * viewport.height,\r\n size,\r\n color: effectColors[Math.floor(Math.random() * effectColors.length)],\r\n type,\r\n delay: baseDelay + Math.random() * 0.5,\r\n duration: 10 / physics.speed + (Math.random() - 0.5) * 2,\r\n custom: {\r\n drift: physics.drift * (Math.random() - 0.5) * 2,\r\n rotation: physics.rotation * (Math.random() - 0.5) * 2,\r\n },\r\n });\r\n }\r\n\r\n return particles;\r\n}\r\n\r\ninterface DiwaliEffectProps {\r\n particles: ParticleData[];\r\n viewport: Viewport;\r\n}\r\n\r\n/**\r\n * Diwali Effect Component\r\n * Renders glowing diyas with flickering, golden sparkles and rangoli patterns\r\n * Golden/orange color palette\r\n */\r\nexport const DiwaliEffect: React.FC<DiwaliEffectProps> = ({ particles }) => {\r\n return (\r\n <>\r\n {particles.map((particle) => (\r\n <DiwaliParticle key={particle.id} particle={particle} />\r\n ))}\r\n </>\r\n );\r\n};\r\n\r\nexport default DiwaliEffect;\r\n","// Chinese New Year Effect - Rising red lanterns and golden fireworks\r\n// Red/gold color palette\r\n\r\nimport React from 'react';\r\nimport { motion } from 'framer-motion';\r\nimport type { ParticleData, Viewport, ParticleType } from '../types';\r\nimport { PARTICLE_SVGS } from '../particles';\r\n\r\n/**\r\n * Chinese New Year effect configuration\r\n */\r\nexport const CHINESENEWYEAR_CONFIG = {\r\n baseParticleCount: 40,\r\n colors: ['#FF0000', '#FFD700', '#FF4500', '#DC143C'],\r\n particleTypes: ['lantern', 'firework', 'dragon'] as ParticleType[],\r\n animationType: 'rise' as const,\r\n physics: {\r\n speed: 1.5,\r\n drift: 25,\r\n rotation: 10,\r\n scale: [0.6, 1.3] as [number, number],\r\n },\r\n};\r\n\r\ninterface ChineseNewYearParticleProps {\r\n particle: ParticleData;\r\n viewportHeight: number;\r\n}\r\n\r\n/**\r\n * Individual lantern/firework/dragon particle with rising animation\r\n */\r\nconst ChineseNewYearParticle: React.FC<ChineseNewYearParticleProps> = ({ particle, viewportHeight }) => {\r\n const { drift, angle, distance } = particle.custom as { drift: number; angle: number; distance: number };\r\n const svgString = PARTICLE_SVGS[particle.type];\r\n \r\n // Fireworks explode, lanterns and dragons rise\r\n const isFirework = particle.type === 'firework';\r\n const isLantern = particle.type === 'lantern';\r\n\r\n if (isFirework) {\r\n return (\r\n <motion.div\r\n style={{\r\n position: 'absolute',\r\n left: particle.x,\r\n top: particle.y,\r\n width: particle.size,\r\n height: particle.size,\r\n color: particle.color,\r\n pointerEvents: 'none',\r\n }}\r\n initial={{ scale: 0, opacity: 1 }}\r\n animate={{\r\n x: Math.cos(angle) * distance,\r\n y: Math.sin(angle) * distance,\r\n scale: [0, 1.5, 0],\r\n opacity: [1, 1, 0],\r\n }}\r\n transition={{\r\n duration: particle.duration * 0.5,\r\n ease: [0.25, 0.46, 0.45, 0.94],\r\n repeat: Infinity,\r\n repeatDelay: particle.duration * 0.5,\r\n delay: particle.delay,\r\n }}\r\n dangerouslySetInnerHTML={{ __html: svgString }}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <motion.div\r\n style={{\r\n position: 'absolute',\r\n left: particle.x,\r\n width: particle.size,\r\n height: particle.size,\r\n color: particle.color,\r\n pointerEvents: 'none',\r\n filter: isLantern ? 'drop-shadow(0 0 6px #FF0000)' : undefined,\r\n }}\r\n initial={{ y: viewportHeight + 50, opacity: 0, scale: 0 }}\r\n animate={{\r\n y: -50,\r\n x: [0, drift / 2, -drift / 2, 0],\r\n opacity: [0, 1, 1, 0],\r\n scale: [0, 1, 1.1, 1, 0],\r\n }}\r\n transition={{\r\n duration: particle.duration,\r\n ease: 'easeOut',\r\n repeat: Infinity,\r\n delay: particle.delay,\r\n }}\r\n dangerouslySetInnerHTML={{ __html: svgString }}\r\n />\r\n );\r\n};\r\n\r\n/**\r\n * Generate particles for Chinese New Year effect\r\n */\r\nexport function generateChineseNewYearParticles(\r\n count: number,\r\n viewport: Viewport,\r\n colors?: string[]\r\n): ParticleData[] {\r\n const effectColors = colors && colors.length > 0 ? colors : CHINESENEWYEAR_CONFIG.colors;\r\n const physics = CHINESENEWYEAR_CONFIG.physics;\r\n const particles: ParticleData[] = [];\r\n const particleTypes = CHINESENEWYEAR_CONFIG.particleTypes;\r\n\r\n for (let i = 0; i < count; i++) {\r\n const size = physics.scale[0] * 20 + Math.random() * (physics.scale[1] - physics.scale[0]) * 20;\r\n const baseDelay = i * (1 / count) * 3;\r\n const type = particleTypes[Math.floor(Math.random() * particleTypes.length)];\r\n \r\n // Position based on particle type\r\n const isFirework = type === 'firework';\r\n const x = isFirework \r\n ? viewport.width * 0.2 + Math.random() * viewport.width * 0.6\r\n : Math.random() * viewport.width;\r\n const y = isFirework\r\n ? viewport.height * 0.2 + Math.random() * viewport.height * 0.4\r\n : viewport.height + 50 + Math.random() * 80;\r\n\r\n particles.push({\r\n id: `chinesenewyear-${i}-${Math.random().toString(36).substring(2, 9)}`,\r\n x,\r\n y,\r\n size,\r\n color: effectColors[Math.floor(Math.random() * effectColors.length)],\r\n type,\r\n delay: baseDelay + Math.random() * 0.5,\r\n duration: 10 / physics.speed + (Math.random() - 0.5) * 2,\r\n custom: {\r\n drift: physics.drift * (Math.random() - 0.5) * 2,\r\n rotation: physics.rotation * (Math.random() - 0.5) * 2,\r\n angle: Math.random() * Math.PI * 2,\r\n distance: 80 + Math.random() * 120,\r\n },\r\n });\r\n }\r\n\r\n return particles;\r\n}\r\n\r\ninterface ChineseNewYearEffectProps {\r\n particles: ParticleData[];\r\n viewport: Viewport;\r\n}\r\n\r\n/**\r\n * Chinese New Year Effect Component\r\n * Renders rising red lanterns and golden fireworks\r\n * Red/gold color palette\r\n */\r\nexport const ChineseNewYearEffect: React.FC<ChineseNewYearEffectProps> = ({ particles, viewport }) => {\r\n return (\r\n <>\r\n {particles.map((particle) => (\r\n <ChineseNewYearParticle\r\n key={particle.id}\r\n particle={particle}\r\n viewportHeight={viewport.height}\r\n />\r\n ))}\r\n </>\r\n );\r\n};\r\n\r\nexport default ChineseNewYearEffect;\r\n","// Holi Effect - Scattered color powder bursts\r\n// Vibrant multi-color palette\r\n\r\nimport React from 'react';\r\nimport { motion } from 'framer-motion';\r\nimport type { ParticleData, Viewport } from '../types';\r\nimport { PARTICLE_SVGS } from '../particles';\r\n\r\n/**\r\n * Holi effect configuration\r\n */\r\nexport const HOLI_CONFIG = {\r\n baseParticleCount: 50,\r\n colors: ['#FF1493', '#00FF00', '#FFFF00', '#FF4500', '#9400D3', '#00BFFF'],\r\n particleTypes: ['color-splash'] as const,\r\n animationType: 'scatter' as const,\r\n physics: {\r\n speed: 4,\r\n drift: 150,\r\n rotation: 180,\r\n scale: [0.4, 2.0] as [number, number],\r\n },\r\n};\r\n\r\ninterface HoliParticleProps {\r\n particle: ParticleData;\r\n}\r\n\r\n/**\r\n * Individual color splash particle with scatter animation\r\n */\r\nconst HoliParticle: React.FC<HoliParticleProps> = ({ particle }) => {\r\n const { angle, distance, rotation } = particle.custom as { angle: number; distance: number; rotation: number };\r\n\r\n return (\r\n <motion.div\r\n style={{\r\n position: 'absolute',\r\n left: particle.x,\r\n top: particle.y,\r\n width: particle.size,\r\n height: particle.size,\r\n color: particle.color,\r\n pointerEvents: 'none',\r\n filter: `drop-shadow(0 0 10px ${particle.color})`,\r\n }}\r\n initial={{ scale: 0, opacity: 0.8 }}\r\n animate={{\r\n x: Math.cos(angle) * distance,\r\n y: Math.sin(angle) * distance + 50,\r\n scale: [0, 2, 0],\r\n opacity: [0.8, 0.6, 0],\r\n rotate: rotation,\r\n }}\r\n transition={{\r\n duration: particle.duration * 0.7,\r\n ease: 'easeOut',\r\n repeat: Infinity,\r\n repeatDelay: particle.duration * 0.3,\r\n delay: particle.delay,\r\n }}\r\n dangerouslySetInnerHTML={{ __html: PARTICLE_SVGS['color-splash'] }}\r\n />\r\n );\r\n};\r\n\r\n/**\r\n * Generate particles for Holi effect\r\n */\r\nexport function generateHoliParticles(\r\n count: number,\r\n viewport: Viewport,\r\n colors?: string[]\r\n): ParticleData[] {\r\n const effectColors = colors && colors.length > 0 ? colors : HOLI_CONFIG.colors;\r\n const physics = HOLI_CONFIG.physics;\r\n const particles: ParticleData[] = [];\r\n\r\n for (let i = 0; i < count; i++) {\r\n const size = physics.scale[0] * 20 + Math.random() * (physics.scale[1] - physics.scale[0]) * 20;\r\n const baseDelay = i * (1 / count) * 3;\r\n\r\n particles.push({\r\n id: `holi-${i}-${Math.random().toString(36).substring(2, 9)}`,\r\n x: viewport.width * 0.3 + Math.random() * viewport.width * 0.4,\r\n y: viewport.height * 0.3 + Math.random() * viewport.height * 0.4,\r\n size,\r\n color: effectColors[Math.floor(Math.random() * effectColors.length)],\r\n type: 'color-splash',\r\n delay: baseDelay + Math.random() * 0.5,\r\n duration: 10 / physics.speed + (Math.random() - 0.5) * 2,\r\n custom: {\r\n angle: Math.random() * Math.PI * 2,\r\n distance: 50 + Math.random() * 100,\r\n rotation: physics.rotation * (Math.random() - 0.5) * 2,\r\n },\r\n });\r\n }\r\n\r\n return particles;\r\n}\r\n\r\ninterface HoliEffectProps {\r\n particles: ParticleData[];\r\n viewport: Viewport;\r\n}\r\n\r\n/**\r\n * Holi Effect Component\r\n * Renders scattered color powder bursts\r\n * Vibrant multi-color palette\r\n */\r\nexport const HoliEffect: React.FC<HoliEffectProps> = ({ particles }) => {\r\n return (\r\n <>\r\n {particles.map((particle) => (\r\n <HoliParticle key={particle.id} particle={particle} />\r\n ))}\r\n </>\r\n );\r\n};\r\n\r\nexport default HoliEffect;\r\n","// Eid Effect - Floating crescent moons and twinkling stars\r\n// Gold/silver/green color palette\r\n\r\nimport React from 'react';\r\nimport { motion } from 'framer-motion';\r\nimport type { ParticleData, Viewport, ParticleType } from '../types';\r\nimport { PARTICLE_SVGS } from '../particles';\r\n\r\n/**\r\n * Eid effect configuration\r\n */\r\nexport const EID_CONFIG = {\r\n baseParticleCount: 35,\r\n colors: ['#FFD700', '#C0C0C0', '#228B22', '#FFFFFF'],\r\n particleTypes: ['moon', 'star'] as ParticleType[],\r\n animationType: 'float' as const,\r\n physics: {\r\n speed: 0.8,\r\n drift: 10,\r\n rotation: 5,\r\n scale: [0.5, 1.5] as [number, number],\r\n },\r\n};\r\n\r\ninterface EidParticleProps {\r\n particle: ParticleData;\r\n}\r\n\r\n/**\r\n * Individual moon/star particle with gentle floating animation\r\n */\r\nconst EidParticle: React.FC<EidParticleProps> = ({ particle }) => {\r\n const { drift, rotation } = particle.custom as { drift: number; rotation: number };\r\n const svgString = PARTICLE_SVGS[particle.type];\r\n \r\n // Stars twinkle, moons glow\r\n const isStar = particle.type === 'star';\r\n const isMoon = particle.type === 'moon';\r\n\r\n return (\r\n <motion.div\r\n style={{\r\n position: 'absolute',\r\n left: particle.x,\r\n top: particle.y,\r\n width: particle.size,\r\n height: particle.size,\r\n color: particle.color,\r\n pointerEvents: 'none',\r\n filter: isMoon \r\n ? 'drop-shadow(0 0 8px #FFD700)' \r\n : isStar \r\n ? 'drop-shadow(0 0 4px #FFFFFF)' \r\n : undefined,\r\n }}\r\n initial={{ opacity: 0, scale: 0.8 }}\r\n animate={{\r\n x: [0, drift, -drift, 0],\r\n y: [0, -15, 8, 0],\r\n opacity: isStar ? [0, 1, 0.5, 1, 0] : [0, 1, 1, 0],\r\n scale: isStar ? [0.8, 1, 0.9, 1.1, 0.8] : [0.8, 1, 1.05, 1, 0.8],\r\n rotate: [0, rotation / 4, -rotation / 4, 0],\r\n }}\r\n transition={{\r\n duration: particle.duration,\r\n ease: 'easeInOut',\r\n repeat: Infinity,\r\n delay: particle.delay,\r\n }}\r\n dangerouslySetInnerHTML={{ __html: svgString }}\r\n />\r\n );\r\n};\r\n\r\n/**\r\n * Generate particles for Eid effect\r\n */\r\nexport function generateEidParticles(\r\n count: number,\r\n viewport: Viewport,\r\n colors?: string[]\r\n): ParticleData[] {\r\n const effectColors = colors && colors.length > 0 ? colors : EID_CONFIG.colors;\r\n const physics = EID_CONFIG.physics;\r\n const particles: ParticleData[] = [];\r\n const particleTypes = EID_CONFIG.particleTypes;\r\n\r\n for (let i = 0; i < count; i++) {\r\n const size = physics.scale[0] * 20 + Math.random() * (physics.scale[1] - physics.scale[0]) * 20;\r\n const baseDelay = i * (1 / count) * 3;\r\n const type = particleTypes[Math.floor(Math.random() * particleTypes.length)];\r\n\r\n particles.push({\r\n id: `eid-${i}-${Math.random().toString(36).substring(2, 9)}`,\r\n x: Math.random() * viewport.width,\r\n y: Math.random() * viewport.height,\r\n size,\r\n color: effectColors[Math.floor(Math.random() * effectColors.length)],\r\n type,\r\n delay: baseDelay + Math.random() * 0.5,\r\n duration: 10 / physics.speed + (Math.random() - 0.5) * 2,\r\n custom: {\r\n drift: physics.drift * (Math.random() - 0.5) * 2,\r\n rotation: physics.rotation * (Math.random() - 0.5) * 2,\r\n },\r\n });\r\n }\r\n\r\n return particles;\r\n}\r\n\r\ninterface EidEffectProps {\r\n particles: ParticleData[];\r\n viewport: Viewport;\r\n}\r\n\r\n/**\r\n * Eid Effect Component\r\n * Renders floating crescent moons and twinkling stars\r\n * Gold/silver/green color palette\r\n */\r\nexport const EidEffect: React.FC<EidEffectProps> = ({ particles }) => {\r\n return (\r\n <>\r\n {particles.map((particle) => (\r\n <EidParticle key={particle.id} particle={particle} />\r\n ))}\r\n </>\r\n );\r\n};\r\n\r\nexport default EidEffect;\r\n","// St. Patrick's Effect - Falling shamrocks with spin\r\n// Green color palette with gold accents\r\n\r\nimport React from 'react';\r\nimport { motion } from 'framer-motion';\r\nimport type { ParticleData, Viewport, ParticleType } from '../types';\r\nimport { PARTICLE_SVGS } from '../particles';\r\n\r\n/**\r\n * St. Patrick's effect configuration\r\n */\r\nexport const STPATRICKS_CONFIG = {\r\n baseParticleCount: 40,\r\n colors: ['#228B22', '#32CD32', '#00FF00', '#FFD700'],\r\n particleTypes: ['shamrock', 'rainbow'] as ParticleType[],\r\n animationType: 'fall' as const,\r\n physics: {\r\n speed: 2,\r\n drift: 40,\r\n rotation: 180,\r\n scale: [0.6, 1.3] as [number, number],\r\n },\r\n};\r\n\r\ninterface StPatricksParticleProps {\r\n particle: ParticleData;\r\n viewportHeight: number;\r\n}\r\n\r\n/**\r\n * Individual shamrock/rainbow particle with spinning fall animation\r\n */\r\nconst StPatricksParticle: React.FC<StPatricksParticleProps> = ({ particle, viewportHeight }) => {\r\n const { drift, rotation } = particle.custom as { drift: number; rotation: number };\r\n const svgString = PARTICLE_SVGS[particle.type];\r\n \r\n // Shamrocks spin more, rainbows drift gently\r\n const isShamrock = particle.type === 'shamrock';\r\n\r\n return (\r\n <motion.div\r\n style={{\r\n position: 'absolute',\r\n left: particle.x,\r\n width: particle.size,\r\n height: particle.size,\r\n color: particle.color,\r\n pointerEvents: 'none',\r\n }}\r\n initial={{ y: -50, opacity: 0, rotate: 0 }}\r\n animate={{\r\n y: viewportHeight + 50,\r\n x: isShamrock ? [0, drift * 0.5, -drift * 0.3, drift] : drift,\r\n opacity: [0, 1, 1, 0],\r\n rotate: isShamrock ? rotation * 2 : rotation * 0.5,\r\n }}\r\n transition={{\r\n duration: particle.duration,\r\n ease: 'linear',\r\n repeat: Infinity,\r\n delay: particle.delay,\r\n }}\r\n dangerouslySetInnerHTML={{ __html: svgString }}\r\n />\r\n );\r\n};\r\n\r\n/**\r\n * Generate particles for St. Patrick's effect\r\n */\r\nexport function generateStPatricksParticles(\r\n count: number,\r\n viewport: Viewport,\r\n colors?: string[]\r\n): ParticleData[] {\r\n const effectColors = colors && colors.length > 0 ? colors : STPATRICKS_CONFIG.colors;\r\n const physics = STPATRICKS_CONFIG.physics;\r\n const particles: ParticleData[] = [];\r\n\r\n for (let i = 0; i < count; i++) {\r\n const size = physics.scale[0] * 20 + Math.random() * (physics.scale[1] - physics.scale[0]) * 20;\r\n const baseDelay = i * (1 / count) * 3;\r\n // More shamrocks than rainbows\r\n const type = Math.random() < 0.8 ? 'shamrock' : 'rainbow';\r\n\r\n particles.push({\r\n id: `stpatricks-${i}-${Math.random().toString(36).substring(2, 9)}`,\r\n x: Math.random() * viewport.width,\r\n y: -50 - Math.random() * 80,\r\n size,\r\n color: effectColors[Math.floor(Math.random() * effectColors.length)],\r\n type,\r\n delay: baseDelay + Math.random() * 0.5,\r\n duration: 10 / physics.speed + (Math.random() - 0.5) * 2,\r\n custom: {\r\n drift: physics.drift * (Math.random() - 0.5) * 2,\r\n rotation: physics.rotation * (Math.random() - 0.5) * 2,\r\n },\r\n });\r\n }\r\n\r\n return particles;\r\n}\r\n\r\ninterface StPatricksEffectProps {\r\n particles: ParticleData[];\r\n viewport: Viewport;\r\n}\r\n\r\n/**\r\n * St. Patrick's Effect Component\r\n * Renders falling shamrocks with spin\r\n * Green color palette with gold accents\r\n */\r\nexport const StPatricksEffect: React.FC<StPatricksEffectProps> = ({ particles, viewport }) => {\r\n return (\r\n <>\r\n {particles.map((particle) => (\r\n <StPatricksParticle\r\n key={particle.id}\r\n particle={particle}\r\n viewportHeight={viewport.height}\r\n />\r\n ))}\r\n </>\r\n );\r\n};\r\n\r\nexport default StPatricksEffect;\r\n","// Independence Day Effect - Customizable color fireworks and patriotic confetti\r\n// Default US colors (red, white, blue), customizable\r\n\r\nimport React from 'react';\r\nimport { motion } from 'framer-motion';\r\nimport type { ParticleData, Viewport, ParticleType } from '../types';\r\nimport { PARTICLE_SVGS } from '../particles';\r\n\r\n/**\r\n * Independence Day effect configuration\r\n */\r\nexport const INDEPENDENCE_CONFIG = {\r\n baseParticleCount: 45,\r\n colors: ['#FF0000', '#FFFFFF', '#0000FF'], // Default US colors, customizable\r\n particleTypes: ['firework', 'spark', 'confetti'] as ParticleType[],\r\n animationType: 'explode' as const,\r\n physics: {\r\n speed: 5,\r\n drift: 120,\r\n rotation: 360,\r\n scale: [0.3, 1.5] as [number, number],\r\n },\r\n};\r\n\r\ninterface IndependenceParticleProps {\r\n particle: ParticleData;\r\n}\r\n\r\n/**\r\n * Individual firework/spark/confetti particle with explode animation\r\n */\r\nconst IndependenceParticle: React.FC<IndependenceParticleProps> = ({ particle }) => {\r\n const { angle, distance, rotation } = particle.custom as { angle: number; distance: number; rotation: number };\r\n const svgString = PARTICLE_SVGS[particle.type];\r\n \r\n // Fireworks have bigger explosions, confetti falls after burst\r\n const isFirework = particle.type === 'firework';\r\n const isConfetti = particle.type === 'confetti';\r\n\r\n return (\r\n <motion.div\r\n style={{\r\n position: 'absolute',\r\n left: particle.x,\r\n top: particle.y,\r\n width: particle.size,\r\n height: particle.size,\r\n color: particle.color,\r\n pointerEvents: 'none',\r\n filter: isFirework ? `drop-shadow(0 0 6px ${particle.color})` : undefined,\r\n }}\r\n initial={{ scale: 0, opacity: 1 }}\r\n animate={{\r\n x: Math.cos(angle) * distance * (isFirework ? 1.2 : 1),\r\n y: isConfetti \r\n ? [Math.sin(angle) * distance * 0.5, Math.sin(angle) * distance + 100]\r\n : Math.sin(angle) * distance,\r\n scale: isFirework ? [0, 1.8, 0] : [0, 1.5, 0],\r\n opacity: [1, 1, 0],\r\n rotate: isConfetti ? rotation * 2 : rotation,\r\n }}\r\n transition={{\r\n duration: particle.duration * (isConfetti ? 0.7 : 0.5),\r\n ease: isConfetti ? 'easeIn' : [0.25, 0.46, 0.45, 0.94],\r\n repeat: Infinity,\r\n repeatDelay: particle.duration * (isConfetti ? 0.3 : 0.5),\r\n delay: particle.delay,\r\n }}\r\n dangerouslySetInnerHTML={{ __html: svgString }}\r\n />\r\n );\r\n};\r\n\r\n/**\r\n * Generate particles for Independence Day effect\r\n */\r\nexport function generateIndependenceParticles(\r\n count: number,\r\n viewport: Viewport,\r\n colors?: string[]\r\n): ParticleData[] {\r\n const effectColors = colors && colors.length > 0 ? colors : INDEPENDENCE_CONFIG.colors;\r\n const physics = INDEPENDENCE_CONFIG.physics;\r\n const particles: ParticleData[] = [];\r\n const particleTypes = INDEPENDENCE_CONFIG.particleTypes;\r\n\r\n for (let i = 0; i < count; i++) {\r\n const size = physics.scale[0] * 20 + Math.random() * (physics.scale[1] - physics.scale[0]) * 20;\r\n const baseDelay = i * (1 / count) * 3;\r\n const type = particleTypes[Math.floor(Math.random() * particleTypes.length)];\r\n\r\n particles.push({\r\n id: `independence-${i}-${Math.random().toString(36).substring(2, 9)}`,\r\n x: viewport.width * 0.2 + Math.random() * viewport.width * 0.6,\r\n y: viewport.height * 0.2 + Math.random() * viewport.height * 0.4,\r\n size,\r\n color: effectColors[Math.floor(Math.random() * effectColors.length)],\r\n type,\r\n delay: baseDelay + Math.random() * 0.5,\r\n duration: 10 / physics.speed + (Math.random() - 0.5) * 2,\r\n custom: {\r\n angle: Math.random() * Math.PI * 2,\r\n distance: 100 + Math.random() * 150,\r\n rotation: physics.rotation * (Math.random() - 0.5) * 2,\r\n },\r\n });\r\n }\r\n\r\n return particles;\r\n}\r\n\r\ninterface IndependenceEffectProps {\r\n particles: ParticleData[];\r\n viewport: Viewport;\r\n}\r\n\r\n/**\r\n * Independence Day Effect Component\r\n * Renders customizable color fireworks and patriotic confetti\r\n * Default US colors (red, white, blue), customizable via colors prop\r\n */\r\nexport const IndependenceEffect: React.FC<IndependenceEffectProps> = ({ particles }) => {\r\n return (\r\n <>\r\n {particles.map((particle) => (\r\n <IndependenceParticle key={particle.id} particle={particle} />\r\n ))}\r\n </>\r\n );\r\n};\r\n\r\nexport default IndependenceEffect;\r\n","// Individual Festival Effects\r\n// Each effect provides dedicated components and particle generators\r\n\r\n// Christmas - Falling snowflakes\r\nexport { ChristmasEffect, generateChristmasParticles, CHRISTMAS_CONFIG } from './ChristmasEffect';\r\n\r\n// New Year - Fireworks and confetti\r\nexport { NewYearEffect, generateNewYearParticles, NEWYEAR_CONFIG } from './NewYearEffect';\r\n\r\n// Valentine - Rising hearts\r\nexport { ValentineEffect, generateValentineParticles, VALENTINE_CONFIG } from './ValentineEffect';\r\n\r\n// Easter - Floating eggs and flowers\r\nexport { EasterEffect, generateEasterParticles, EASTER_CONFIG } from './EasterEffect';\r\n\r\n// Halloween - Bats, pumpkins, and spiders\r\nexport { HalloweenEffect, generateHalloweenParticles, HALLOWEEN_CONFIG } from './HalloweenEffect';\r\n\r\n// Thanksgiving - Falling autumn leaves\r\nexport { ThanksgivingEffect, generateThanksgivingParticles, THANKSGIVING_CONFIG } from './ThanksgivingEffect';\r\n\r\n// Diwali - Glowing diyas and sparkles\r\nexport { DiwaliEffect, generateDiwaliParticles, DIWALI_CONFIG } from './DiwaliEffect';\r\n\r\n// Chinese New Year - Lanterns and fireworks\r\nexport { ChineseNewYearEffect, generateChineseNewYearParticles, CHINESENEWYEAR_CONFIG } from './ChineseNewYearEffect';\r\n\r\n// Holi - Color splashes\r\nexport { HoliEffect, generateHoliParticles, HOLI_CONFIG } from './HoliEffect';\r\n\r\n// Eid - Moons and stars\r\nexport { EidEffect, generateEidParticles, EID_CONFIG } from './EidEffect';\r\n\r\n// St. Patrick's - Shamrocks\r\nexport { StPatricksEffect, generateStPatricksParticles, STPATRICKS_CONFIG } from './StPatricksEffect';\r\n\r\n// Independence Day - Fireworks\r\nexport { IndependenceEffect, generateIndependenceParticles, INDEPENDENCE_CONFIG } from './IndependenceEffect';\r\n\r\n// Effect generator map for easy access\r\nimport type { FestivalType, ParticleData, Viewport } from '../types';\r\n\r\nexport type EffectGenerator = (count: number, viewport: Viewport, colors?: string[]) => ParticleData[];\r\n\r\nexport const EFFECT_GENERATORS: Record<FestivalType, EffectGenerator> = {\r\n christmas: generateChristmasParticles,\r\n newyear: generateNewYearParticles,\r\n valentine: generateValentineParticles,\r\n easter: generateEasterParticles,\r\n halloween: generateHalloweenParticles,\r\n thanksgiving: generateThanksgivingParticles,\r\n diwali: generateDiwaliParticles,\r\n chinesenewyear: generateChineseNewYearParticles,\r\n holi: generateHoliParticles,\r\n eid: generateEidParticles,\r\n stpatricks: generateStPatricksParticles,\r\n independence: generateIndependenceParticles,\r\n};\r\n\r\n// Import generators\r\nimport { generateChristmasParticles } from './ChristmasEffect';\r\nimport { generateNewYearParticles } from './NewYearEffect';\r\nimport { generateValentineParticles } from './ValentineEffect';\r\nimport { generateEasterParticles } from './EasterEffect';\r\nimport { generateHalloweenParticles } from './HalloweenEffect';\r\nimport { generateThanksgivingParticles } from './ThanksgivingEffect';\r\nimport { generateDiwaliParticles } from './DiwaliEffect';\r\nimport { generateChineseNewYearParticles } from './ChineseNewYearEffect';\r\nimport { generateHoliParticles } from './HoliEffect';\r\nimport { generateEidParticles } from './EidEffect';\r\nimport { generateStPatricksParticles } from './StPatricksEffect';\r\nimport { generateIndependenceParticles } from './IndependenceEffect';\r\n"],"names":["_jsx","_Fragment"],"mappings":"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"}
|