partycles 1.2.3 → 1.2.4
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 +7 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +6 -6
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils.ts","../src/particlePool.ts","../src/animations/confetti.tsx","../src/animations/sparkles.tsx","../src/animations/hearts.tsx","../src/animations/fireworks.tsx","../src/animations/bubbles.tsx","../src/animations/stars.tsx","../src/animations/snow.tsx","../src/animations/emoji.tsx","../src/animations/coins.tsx","../src/animations/petals.tsx","../src/animations/aurora.tsx","../src/animations/fireflies.tsx","../src/animations/paint.tsx","../src/animations/balloons.tsx","../src/animations/galaxy.tsx","../src/animations/glitch.tsx","../src/animations/magicdust.tsx","../src/animations/crystals.tsx","../src/animations/leaves.tsx","../src/animations/mortar.tsx","../src/animations/bokeh.tsx","../src/animations/index.ts","../src/mobileOptimizations.ts","../src/animationManager.ts","../src/useReward.tsx"],"names":["randomInRange","min","max","degreesToRadians","degrees","generateId","getRandomColor","colors","createParticleStyle","particle","_containerRect","ParticlePool","maxSize","particles","p","particlePool","createPooledParticle","props","createPooledParticles","count","factory","i","defaultColors","createConfettiParticles","origin","config","particleCount","startVelocity","elementSize","angle","velocity","color","renderConfettiParticle","_a","_b","flutterTransform","React","createSparkleParticles","spread","velocityScale","renderSparkleParticle","scale","twinkle","heartColors","createHeartParticles","horizontalDrift","renderHeartParticle","pulse","fireworkColors","createFireworkParticles","renderFireworkParticle","bubbleColors","createBubbleParticles","renderBubbleParticle","starColors","createStarParticles","renderStarParticle","snowColors","createSnowParticles","x","y","renderSnowParticle","defaultEmojis","celebrationEmojis","loveEmojis","happyEmojis","natureEmojis","foodEmojis","createEmojiParticles","emojis","renderEmojiParticle","emojiPresets","coinColors","createCoinParticles","renderCoinParticle","_c","_d","spinSpeed","currentRotation","petalColors","createPetalParticles","renderPetalParticle","spiralPhase","spiralX","wobble","auroraColors","createAuroraParticles","offset","renderAuroraParticle","wave","baseOpacity","fadeIn","fadeOut","opacity","fireflyColors","createFireflyParticles","renderFireflyParticle","floatX","floatY","glowIntensity","baseFade","paintColors","createPaintParticles","isMainSplat","renderPaintParticle","stretch","squish","isDripping","dripLength","balloonColors","createBalloonParticles","renderBalloonParticle","sway","bob","galaxyColors","createGalaxyParticles","progress","spiralAngle","radius","angleOffset","radiusOffset","finalAngle","finalRadius","offsetX","offsetY","tangentAngle","speed","renderGalaxyParticle","expansionRate","createGlitchParticles","channels","isHorizontal","channelIndex","channel","width","height","glitchOffset","encodedData","renderGlitchParticle","distortionAmount","mixBlendMode","createMagicDustParticles","offsetAngle","offsetDistance","renderMagicDustParticle","sparkleSize","createCrystalParticles","renderCrystalParticle","hue","createLeafParticles","renderLeafParticle","tumblePhase","swayPhase","swayAmount","rotationSpeed","tumble","swayX","rotation","mortarColors","createMortarParticles","shells","index","angleStep","targetColor","rad","timeToExplode","sparkArray","renderMortarParticle","elementData","e","trailOpacity","burstOpacity","twinkleOpacity","bokehColors","createBokehParticles","lifetime","distance","depth","size","renderBokehParticle","pulseAmount","currentSize","animations","isMobileDevice","userAgent","isMobileUA","isMobileWidth","hasTouch","optimizeConfigForMobile","__spreadProps","__spreadValues","shouldSkipFrame","frameCount","AnimationManager","animation","id","currentTime","deltaTime","completedAnimations","skipFrame","activeParticles","newParticles","effects","animationType","trailParticle","isMobile","burstCount","explosionParticles","burstParticle","coreCount","coreParticle","flashParticle","sum","anim","fps","animationManager","useReward","elementIdOrRef","isAnimating","setIsAnimating","useState","animationIdRef","useRef","containerRef","rootRef","internalRef","isUsingStringId","targetRef","animate","useCallback","resolve","_e","_f","_g","_h","_i","_j","_k","_l","_m","element","rect","animationHandler","optimizedConfig","container","root","createRoot","defaultGravity","gravity","friction","wind","animationId","updateCallback","updatedParticles","reward","pause","resume","replay","setAnimationId","useEffect","isPaused","useMemo"],"mappings":"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","file":"index.js","sourcesContent":["import { Particle } from './types';\n\nexport const randomInRange = (min: number, max: number): number => {\n return Math.random() * (max - min) + min;\n};\n\nexport const degreesToRadians = (degrees: number): number => {\n return (degrees * Math.PI) / 180;\n};\n\nexport const generateId = (): string => {\n return Math.random().toString(36).substring(2, 9);\n};\n\nexport const getRandomColor = (colors: string[]): string => {\n return (\n colors[Math.floor(Math.random() * colors.length)] || colors[0] || '#ffffff'\n );\n};\n\nexport const createParticleStyle = (\n particle: Particle,\n _containerRect: DOMRect\n): React.CSSProperties => {\n return {\n position: 'absolute',\n left: `${particle.x}px`,\n top: `${particle.y}px`,\n width: `${particle.size}px`,\n height: `${particle.size}px`,\n transform: `rotate(${particle.rotation}deg) translateX(-50%) translateY(-50%)`,\n opacity: particle.opacity,\n pointerEvents: 'none',\n transition: 'none',\n willChange: 'transform, opacity',\n };\n};\n","import { Particle } from './types';\n\nexport interface PooledParticle extends Particle {\n _pooled?: boolean;\n}\n\nexport class ParticlePool {\n private pool: PooledParticle[] = [];\n private maxSize: number;\n private created: number = 0;\n\n constructor(maxSize: number = 1000) {\n this.maxSize = maxSize;\n }\n\n acquire(): PooledParticle {\n // Try to get a particle from the pool\n const particle = this.pool.pop();\n\n if (particle) {\n particle._pooled = false;\n return particle;\n }\n\n // Create a new particle if pool is empty\n this.created++;\n return {\n id: `p${this.created}`,\n x: 0,\n y: 0,\n vx: 0,\n vy: 0,\n life: 0,\n opacity: 0,\n size: 0,\n rotation: 0,\n color: '',\n _pooled: false,\n };\n }\n\n release(particle: PooledParticle): void {\n // Don't add to pool if already pooled or pool is full\n if (particle._pooled || this.pool.length >= this.maxSize) {\n return;\n }\n\n // Reset particle properties\n particle._pooled = true;\n particle.element = undefined;\n particle.config = undefined;\n\n // Add back to pool\n this.pool.push(particle);\n }\n\n releaseAll(particles: PooledParticle[]): void {\n particles.forEach((p) => this.release(p));\n }\n\n clear(): void {\n this.pool = [];\n }\n\n getStats() {\n return {\n poolSize: this.pool.length,\n totalCreated: this.created,\n maxSize: this.maxSize,\n };\n }\n}\n\n// Create a singleton instance\nexport const particlePool = new ParticlePool();\n\n// Helper function to create particles using the pool\nexport function createPooledParticle(props: Partial<Particle>): PooledParticle {\n const particle = particlePool.acquire();\n\n // Apply properties\n Object.assign(particle, props);\n\n // Ensure id is unique if not provided\n if (!props.id) {\n particle.id = `p${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }\n\n return particle;\n}\n\n// Helper function to create multiple particles\nexport function createPooledParticles(\n count: number,\n factory: (index: number) => Partial<Particle>\n): PooledParticle[] {\n const particles: PooledParticle[] = [];\n\n for (let i = 0; i < count; i++) {\n particles.push(createPooledParticle(factory(i)));\n }\n\n return particles;\n}\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport {\n randomInRange,\n degreesToRadians,\n generateId,\n getRandomColor,\n} from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst defaultColors = [\n '#f44336',\n '#e91e63',\n '#9c27b0',\n '#673ab7',\n '#3f51b5',\n '#2196f3',\n '#03a9f4',\n '#00bcd4',\n '#009688',\n '#4caf50',\n '#8bc34a',\n '#cddc39',\n '#ffeb3b',\n '#ffc107',\n '#ff9800',\n '#ff5722',\n];\n\nexport const createConfettiParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 50,\n startVelocity = 20,\n colors = defaultColors,\n elementSize = 20,\n } = config;\n\n return createPooledParticles(particleCount, () => {\n const angle = randomInRange(0, 360);\n const velocity = randomInRange(startVelocity * 0.5, startVelocity);\n const color = getRandomColor(colors);\n\n return {\n id: generateId(),\n x: origin.x,\n y: origin.y,\n vx: Math.cos(degreesToRadians(angle)) * velocity,\n vy: Math.sin(degreesToRadians(angle)) * velocity - 30,\n life: config.lifetime || 150,\n opacity: 1,\n size: randomInRange(elementSize * 0.7, elementSize * 1.5),\n rotation: randomInRange(0, 360),\n color,\n };\n });\n};\n\nexport const renderConfettiParticle = (particle: Particle): React.ReactNode => {\n const particleWithEffects = particle as Particle & {\n config?: AnimationConfig;\n };\n const flutterEffect = particleWithEffects.config?.effects?.flutter;\n\n // Apply flutter transform if enabled\n const flutterTransform =\n flutterEffect && particle.life > 0\n ? `rotateY(${Math.sin(particle.life * 0.1) * 360}deg)`\n : '';\n\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '60%',\n backgroundColor: particle.color,\n borderRadius: '3px',\n boxShadow: '0 2px 4px rgba(0,0,0,0.2)',\n transform: flutterTransform,\n transformStyle: 'preserve-3d',\n perspective: '1000px',\n }}\n />\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nexport const createSparkleParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 35,\n spread = 120,\n startVelocity = 15,\n elementSize = 25,\n colors = ['#FFD700', '#FFFFFF'],\n } = config;\n\n return createPooledParticles(particleCount, () => {\n const velocityScale = startVelocity / 45; // Scale based on default\n return {\n id: generateId(),\n x: origin.x + randomInRange(-spread, spread),\n y: origin.y + randomInRange(-spread, spread),\n vx: randomInRange(-3, 3) * velocityScale,\n vy: randomInRange(-3, 3) * velocityScale,\n life: config.lifetime || 120,\n opacity: 0,\n size: randomInRange(elementSize * 0.4, elementSize * 1.2),\n rotation: randomInRange(0, 360),\n color:\n colors[Math.floor(Math.random() * colors.length)] ||\n colors[0] ||\n '#ffffff',\n };\n });\n};\n\nexport const renderSparkleParticle = (\n particle: Particle & { config?: AnimationConfig }\n): React.ReactNode => {\n const scale = particle.opacity;\n\n // Calculate twinkle effect if enabled\n const twinkle = particle.config?.effects?.twinkle\n ? 0.3 + Math.abs(Math.sin(particle.life * 0.2)) * 0.7\n : 1;\n\n return (\n <svg\n key={particle.id}\n width=\"100%\"\n height=\"100%\"\n viewBox=\"0 0 24 24\"\n style={{\n transform: `scale(${scale}) rotate(${particle.rotation}deg)`,\n filter: 'drop-shadow(0 0 6px rgba(255, 215, 0, 0.8))',\n opacity: twinkle,\n transition: 'opacity 0.1s ease-out',\n }}\n >\n <path\n d=\"M12 0L14.59 8.41L23 11L14.59 13.59L12 22L9.41 13.59L1 11L9.41 8.41L12 0Z\"\n fill={particle.color}\n />\n </svg>\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId, getRandomColor } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst heartColors = ['#ff1744', '#e91e63', '#ff4569', '#ff6b6b', '#ee5a70'];\n\nexport const createHeartParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 25,\n startVelocity = 12,\n colors = heartColors,\n elementSize = 30,\n } = config;\n\n return createPooledParticles(particleCount, () => {\n const angle = randomInRange(-45, -135);\n const velocity = randomInRange(startVelocity * 0.7, startVelocity * 1.3);\n const horizontalDrift = randomInRange(-2, 2);\n\n return {\n id: generateId(),\n x: origin.x + randomInRange(-10, 10),\n y: origin.y,\n vx: Math.cos((angle * Math.PI) / 180) * velocity + horizontalDrift,\n vy: Math.sin((angle * Math.PI) / 180) * velocity,\n life: config.lifetime || 180,\n opacity: 1,\n size: randomInRange(elementSize * 0.6, elementSize * 1.2),\n rotation: randomInRange(-20, 20),\n color: getRandomColor(colors),\n };\n });\n};\n\nexport const renderHeartParticle = (\n particle: Particle & { config?: AnimationConfig }\n): React.ReactNode => {\n // Calculate pulse effect if enabled\n const pulse = particle.config?.effects?.pulse\n ? 1 + Math.sin(particle.life * 0.2) * 0.1\n : 1;\n\n return (\n <svg\n key={particle.id}\n width=\"100%\"\n height=\"100%\"\n viewBox=\"0 0 24 24\"\n fill={particle.color}\n style={{\n filter: `drop-shadow(0 0 ${particle.size * 0.15}px ${particle.color})`,\n transform: `scale(${pulse})`,\n transition: 'transform 0.1s ease-out',\n }}\n >\n <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\" />\n </svg>\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport {\n randomInRange,\n degreesToRadians,\n generateId,\n getRandomColor,\n} from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst fireworkColors = [\n '#ff0000',\n '#00ff00',\n '#0000ff',\n '#ffff00',\n '#ff00ff',\n '#00ffff',\n '#ffffff',\n];\n\nexport const createFireworkParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 60,\n startVelocity = 25,\n colors = fireworkColors,\n elementSize = 8,\n } = config;\n\n return createPooledParticles(particleCount, (i) => {\n const angle = (360 / particleCount) * i + randomInRange(-5, 5);\n const velocity = randomInRange(startVelocity * 0.5, startVelocity * 1.2);\n const color = getRandomColor(colors);\n\n return {\n id: generateId(),\n x: origin.x,\n y: origin.y,\n vx: Math.cos(degreesToRadians(angle)) * velocity,\n vy: Math.sin(degreesToRadians(angle)) * velocity - 10,\n life: config.lifetime || 140,\n opacity: 1,\n size: randomInRange(elementSize * 0.6, elementSize * 1.4),\n rotation: 0,\n color,\n };\n });\n};\n\nexport const renderFireworkParticle = (particle: Particle): React.ReactNode => {\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '100%',\n backgroundColor: '#ffffff',\n borderRadius: '50%',\n boxShadow: `\n 0 0 ${particle.size}px ${particle.color},\n 0 0 ${particle.size * 2}px ${particle.color},\n 0 0 ${particle.size * 3}px ${particle.color},\n 0 0 ${particle.size * 4}px ${particle.color}\n `,\n background: `radial-gradient(circle, #ffffff 0%, ${particle.color} 40%, transparent 70%)`,\n }}\n />\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst bubbleColors = [\n 'rgba(66, 165, 245, 0.4)',\n 'rgba(41, 182, 246, 0.4)',\n 'rgba(38, 198, 218, 0.4)',\n 'rgba(129, 212, 250, 0.4)',\n];\n\nexport const createBubbleParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 30,\n spread = 80,\n startVelocity = 8,\n colors = bubbleColors,\n elementSize = 40,\n } = config;\n\n return createPooledParticles(particleCount, () => {\n return {\n id: generateId(),\n x: origin.x + randomInRange(-spread, spread),\n y: origin.y,\n vx: randomInRange(-3, 3),\n vy: -randomInRange(startVelocity * 0.7, startVelocity * 1.2),\n life: config.lifetime || 160,\n opacity: 0.7,\n size: randomInRange(elementSize * 0.4, elementSize * 1.2),\n rotation: 0,\n color:\n colors[Math.floor(Math.random() * colors.length)] ||\n colors[0] ||\n '#ffffff',\n };\n });\n};\n\nexport const renderBubbleParticle = (particle: Particle): React.ReactNode => {\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '100%',\n backgroundColor: particle.color,\n borderRadius: '50%',\n border: '2px solid rgba(255, 255, 255, 0.6)',\n backgroundImage:\n 'radial-gradient(circle at 30% 30%, rgba(255, 255, 255, 0.8), transparent)',\n boxShadow: `\n inset 0 0 ${particle.size * 0.3}px rgba(255, 255, 255, 0.4),\n 0 0 ${particle.size * 0.5}px ${particle.color}\n `,\n }}\n />\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst starColors = ['#FFD700', '#FFA500', '#FF6347', '#FFE4B5'];\n\nexport const createStarParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 40,\n startVelocity = 18,\n colors = starColors,\n elementSize = 30,\n } = config;\n\n return createPooledParticles(particleCount, () => {\n const angle = randomInRange(0, 360);\n const velocity = randomInRange(startVelocity * 0.5, startVelocity);\n\n return {\n id: generateId(),\n x: origin.x,\n y: origin.y,\n vx: Math.cos((angle * Math.PI) / 180) * velocity,\n vy: Math.sin((angle * Math.PI) / 180) * velocity - 15,\n life: config.lifetime || 150,\n opacity: 1,\n size: randomInRange(elementSize * 0.5, elementSize * 1.3),\n rotation: randomInRange(0, 360),\n color:\n colors[Math.floor(Math.random() * colors.length)] ||\n colors[0] ||\n '#ffffff',\n };\n });\n};\n\nexport const renderStarParticle = (\n particle: Particle & { config?: AnimationConfig }\n): React.ReactNode => {\n // Calculate twinkle effect if enabled\n const twinkle = particle.config?.effects?.twinkle\n ? 0.3 + Math.abs(Math.sin(particle.life * 0.15)) * 0.7\n : 1;\n\n return (\n <svg\n key={particle.id}\n width=\"100%\"\n height=\"100%\"\n viewBox=\"0 0 24 24\"\n fill={particle.color}\n style={{\n filter: `drop-shadow(0 0 ${particle.size * 0.2}px ${particle.color})`,\n opacity: twinkle,\n transition: 'opacity 0.1s ease-out',\n }}\n >\n <path d=\"M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z\" />\n </svg>\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst snowColors = ['#FFFFFF', '#F0F8FF', '#F5F5F5', '#FAFAFA'];\n\nexport const createSnowParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 50,\n spread = 200,\n startVelocity = 3,\n colors = snowColors,\n elementSize = 15,\n } = config;\n\n return createPooledParticles(particleCount, () => {\n // Spread particles across the width, starting from above viewport\n const x = origin.x + randomInRange(-spread * 2, spread * 2);\n const y = origin.y - randomInRange(100, 300); // Start above the trigger point\n\n return {\n id: generateId(),\n x,\n y,\n vx: randomInRange(-0.5, 0.5), // Gentle horizontal drift\n vy: randomInRange(startVelocity * 0.5, startVelocity * 1.2),\n life: config.lifetime || 300, // Longer lifetime for snow\n opacity: randomInRange(0.4, 0.9),\n size: randomInRange(elementSize * 0.3, elementSize),\n rotation: randomInRange(0, 360),\n color:\n colors[Math.floor(Math.random() * colors.length)] ||\n colors[0] ||\n '#ffffff',\n };\n });\n};\n\nexport const renderSnowParticle = (particle: Particle): React.ReactNode => {\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '100%',\n backgroundColor: particle.color,\n borderRadius: '50%',\n boxShadow: `\n 0 0 ${particle.size * 0.5}px rgba(255, 255, 255, 0.8),\n inset 0 0 ${particle.size * 0.3}px rgba(255, 255, 255, 0.5)\n `,\n filter: 'blur(0.5px)',\n }}\n />\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\n// Default emoji sets for different moods\nconst defaultEmojis = ['🎉', '🎊', '🎈', '🎁', '✨', '🌟', '💫', '🎯'];\nconst celebrationEmojis = ['🎉', '🎊', '🥳', '🎈', '🎁', '🍾', '🥂', '🎆'];\nconst loveEmojis = ['❤️', '💕', '💖', '💝', '💗', '💓', '💞', '💘'];\nconst happyEmojis = ['😊', '😄', '🥰', '😍', '🤗', '😘', '😁', '🤩'];\nconst natureEmojis = ['🌸', '🌺', '🌻', '🌹', '🌷', '🌼', '🍀', '🌿'];\nconst foodEmojis = ['🍕', '🍔', '🍟', '🌮', '🍿', '🍩', '🍪', '🧁'];\n\nexport interface EmojiAnimationConfig extends AnimationConfig {\n emojis?: string[];\n}\n\nexport const createEmojiParticles = (\n origin: { x: number; y: number },\n config: EmojiAnimationConfig\n): Particle[] => {\n const {\n particleCount = 30,\n spread = 100,\n startVelocity = 15,\n elementSize = 35,\n emojis = defaultEmojis,\n } = config;\n\n return createPooledParticles(particleCount, () => {\n const angle = randomInRange(-45, -135);\n const velocity = randomInRange(startVelocity * 0.5, startVelocity * 1.2);\n\n return {\n id: generateId(),\n x: origin.x + randomInRange(-spread, spread),\n y: origin.y,\n vx: Math.cos((angle * Math.PI) / 180) * velocity,\n vy: Math.sin((angle * Math.PI) / 180) * velocity,\n life: config.lifetime || 180,\n opacity: 1,\n size: randomInRange(elementSize * 0.7, elementSize * 1.3),\n rotation: randomInRange(-45, 45),\n color: '', // Not used for emojis\n element: emojis[Math.floor(Math.random() * emojis.length)],\n };\n });\n};\n\nexport const renderEmojiParticle = (particle: Particle): React.ReactNode => {\n return (\n <div\n key={particle.id}\n style={{\n fontSize: `${particle.size}px`,\n lineHeight: 1,\n userSelect: 'none',\n filter: particle.opacity < 0.5 ? 'blur(1px)' : undefined,\n }}\n >\n {particle.element}\n </div>\n );\n};\n\n// Export preset emoji sets for easy use\nexport const emojiPresets = {\n celebration: celebrationEmojis,\n love: loveEmojis,\n happy: happyEmojis,\n nature: natureEmojis,\n food: foodEmojis,\n default: defaultEmojis,\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst coinColors = ['#FFD700', '#FFA500', '#FFB300', '#FFC700'];\n\nexport const createCoinParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 30,\n spread = 70,\n startVelocity = 25,\n colors = coinColors,\n elementSize = 25,\n } = config;\n\n return createPooledParticles(particleCount, () => {\n const angle = randomInRange(-spread / 2, spread / 2) * (Math.PI / 180);\n const velocity = randomInRange(startVelocity * 0.5, startVelocity);\n\n return {\n id: generateId(),\n x: origin.x,\n y: origin.y,\n vx: Math.sin(angle) * velocity,\n vy: -Math.cos(angle) * velocity,\n life: config.lifetime || 120,\n opacity: 1,\n size: randomInRange(elementSize * 0.8, elementSize * 1.2),\n rotation: randomInRange(0, 360),\n color:\n colors[Math.floor(Math.random() * colors.length)] ||\n colors[0] ||\n '#ffffff',\n };\n });\n};\n\nexport const renderCoinParticle = (\n particle: Particle & { config?: AnimationConfig }\n): React.ReactNode => {\n const spinSpeed = particle.config?.effects?.spin3D ? 8 : 2; // Faster spin with 3D effect\n const currentRotation = (120 - particle.life) * spinSpeed;\n\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '100%',\n background: `radial-gradient(ellipse at 30% 30%, ${particle.color}, #B8860B)`,\n borderRadius: '50%',\n transform: particle.config?.effects?.spin3D\n ? `rotateY(${currentRotation}deg)`\n : `rotate(${currentRotation}deg)`,\n transformStyle: 'preserve-3d',\n perspective: '1000px',\n boxShadow: `\n inset -2px -2px 4px rgba(0, 0, 0, 0.3),\n inset 2px 2px 4px rgba(255, 255, 255, 0.5),\n 0 2px 4px rgba(0, 0, 0, 0.3)\n `,\n border: `1px solid ${particle.color}`,\n position: 'relative',\n overflow: 'hidden',\n }}\n >\n {/* Dollar sign - hide when flipped */}\n <div\n style={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n fontSize: `${particle.size * 0.5}px`,\n fontWeight: 'bold',\n color: '#B8860B',\n textShadow: '1px 1px 1px rgba(0, 0, 0, 0.3)',\n fontFamily: 'Arial, sans-serif',\n opacity: 1,\n }}\n >\n $\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst petalColors = ['#FFB6C1', '#FFC0CB', '#FF69B4', '#FF1493', '#FFF0F5'];\n\nexport const createPetalParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 40,\n spread = 100,\n startVelocity = 8,\n colors = petalColors,\n elementSize = 20,\n } = config;\n\n return createPooledParticles(particleCount, () => {\n const angle = randomInRange(-spread / 2, spread / 2) * (Math.PI / 180);\n const velocity = randomInRange(startVelocity * 0.3, startVelocity);\n\n return {\n id: generateId(),\n x: origin.x + randomInRange(-20, 20),\n y: origin.y - randomInRange(0, 30),\n vx: Math.sin(angle) * velocity,\n vy: randomInRange(2, 5), // Gentle fall\n life: config.lifetime || 200,\n opacity: randomInRange(0.7, 1),\n size: randomInRange(elementSize * 0.7, elementSize * 1.3),\n rotation: randomInRange(0, 360),\n color:\n colors[Math.floor(Math.random() * colors.length)] ||\n colors[0] ||\n '#ffffff',\n };\n });\n};\n\nexport const renderPetalParticle = (particle: Particle): React.ReactNode => {\n // Create spiral motion\n const spiralPhase = (200 - particle.life) * 0.1;\n const spiralX = Math.sin(spiralPhase) * 15;\n const wobble = Math.sin(particle.life * 0.1) * 10;\n\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '120%',\n position: 'relative',\n transform: `translateX(${spiralX}px) rotate(${wobble}deg)`,\n transformStyle: 'preserve-3d',\n }}\n >\n {/* Petal shape */}\n <div\n style={{\n width: '100%',\n height: '100%',\n background: `radial-gradient(ellipse at 50% 30%, ${particle.color}, ${particle.color}DD)`,\n borderRadius: '0% 100% 0% 100%',\n position: 'absolute',\n boxShadow: `\n inset 1px 1px 3px rgba(255, 255, 255, 0.5),\n 0 2px 4px rgba(0, 0, 0, 0.1)\n `,\n border: `1px solid ${particle.color}CC`,\n transform: 'rotateY(45deg)',\n }}\n />\n {/* Second petal for depth */}\n <div\n style={{\n width: '100%',\n height: '100%',\n background: `radial-gradient(ellipse at 50% 30%, ${particle.color}EE, ${particle.color}BB)`,\n borderRadius: '0% 100% 0% 100%',\n position: 'absolute',\n transform: 'rotate(45deg) scale(0.9)',\n opacity: 0.8,\n }}\n />\n </div>\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst auroraColors = [\n '#00ff88',\n '#00ffaa',\n '#00ddff',\n '#0099ff',\n '#0066ff',\n '#9933ff',\n '#ff00ff',\n];\n\nexport const createAuroraParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 20,\n spread = 300,\n startVelocity = 0.8,\n colors = auroraColors,\n elementSize = 100,\n } = config;\n\n return createPooledParticles(particleCount, (i) => {\n const angle = (i / particleCount) * spread - spread / 2;\n const offset = randomInRange(-30, 30);\n\n return {\n id: generateId(),\n x: origin.x + angle + offset,\n y: origin.y,\n vx: randomInRange(-0.5, 0.5),\n vy: -startVelocity,\n life: config.lifetime || 250,\n opacity: 1,\n size: randomInRange(elementSize * 0.8, elementSize * 1.2),\n rotation: randomInRange(-15, 15),\n color:\n colors[Math.floor(Math.random() * colors.length)] ||\n colors[0] ||\n '#ffffff',\n };\n });\n};\n\nexport const renderAuroraParticle = (particle: Particle): React.ReactNode => {\n // Create gentle flowing wave motion - reduced amplitude\n const wave = Math.sin(particle.life * 0.02) * 10;\n // Use the actual particle opacity set by animationManager\n const baseOpacity = particle.opacity;\n // Add fade in/out effect\n const fadeIn = particle.life > 350 ? (400 - particle.life) / 50 : 1;\n const fadeOut = particle.life < 50 ? particle.life / 50 : 1;\n const opacity = baseOpacity * fadeIn * fadeOut * 0.4;\n\n return (\n <div\n key={particle.id}\n style={{\n width: `${particle.size}px`,\n height: `${particle.size * 0.3}px`,\n position: 'relative',\n transform: `translateX(${wave}px)`,\n filter: 'blur(2px)',\n }}\n >\n {/* Aurora ribbon */}\n <div\n style={{\n width: '100%',\n height: '100%',\n background: `linear-gradient(90deg, transparent, ${particle.color}, transparent)`,\n borderRadius: '50%',\n opacity,\n boxShadow: `0 0 ${particle.size * 0.5}px ${particle.color}`,\n animation: 'shimmer 2s infinite',\n }}\n />\n {/* Secondary layer for depth */}\n <div\n style={{\n position: 'absolute',\n top: '20%',\n left: '10%',\n width: '80%',\n height: '60%',\n background: `radial-gradient(ellipse at center, ${particle.color}44, transparent)`,\n borderRadius: '50%',\n opacity: opacity * 0.5,\n filter: 'blur(4px)',\n }}\n />\n </div>\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst fireflyColors = ['#FFFF99', '#FFFFCC', '#FFFF66', '#FFFFAA'];\n\nexport const createFireflyParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 20,\n spread = 150,\n startVelocity = 2,\n colors = fireflyColors,\n elementSize = 8,\n } = config;\n\n return createPooledParticles(particleCount, () => {\n const angle = randomInRange(0, 360) * (Math.PI / 180);\n const velocity = randomInRange(startVelocity * 0.3, startVelocity);\n\n return {\n id: generateId(),\n x: origin.x + randomInRange(-spread / 2, spread / 2),\n y: origin.y + randomInRange(-20, 20),\n vx: Math.cos(angle) * velocity,\n vy: Math.sin(angle) * velocity * 0.5, // More horizontal movement\n life: config.lifetime || 300,\n opacity: 0,\n size: randomInRange(elementSize * 0.6, elementSize),\n rotation: randomInRange(0, 360), // Used for blink timing\n color:\n colors[Math.floor(Math.random() * colors.length)] ||\n colors[0] ||\n '#ffffff',\n };\n });\n};\n\nexport const renderFireflyParticle = (particle: Particle): React.ReactNode => {\n // Create organic floating motion\n const floatX = Math.sin(particle.life * 0.02 + particle.rotation) * 15;\n const floatY = Math.cos(particle.life * 0.03 + particle.rotation) * 10;\n\n // Blinking effect - each firefly has its own rhythm based on rotation\n const blinkCycle = Math.sin(particle.life * 0.1 + particle.rotation * 0.1);\n const isBlinking = blinkCycle > 0.3;\n const glowIntensity = isBlinking ? 1 : 0.1;\n\n // Fade in/out\n const fadeIn = Math.min(1, (300 - particle.life) / 30);\n const fadeOut = particle.life / 300;\n const baseFade = Math.min(fadeIn, fadeOut);\n\n return (\n <div\n key={particle.id}\n style={{\n width: `${particle.size}px`,\n height: `${particle.size}px`,\n position: 'relative',\n transform: `translate(${floatX}px, ${floatY}px)`,\n }}\n >\n {/* Firefly body */}\n <div\n style={{\n width: '100%',\n height: '100%',\n background: particle.color,\n borderRadius: '50%',\n opacity: baseFade * glowIntensity,\n boxShadow: `\n 0 0 ${particle.size}px ${particle.color},\n 0 0 ${particle.size * 2}px ${particle.color},\n 0 0 ${particle.size * 3}px ${particle.color}88\n `,\n transition: 'opacity 0.3s ease',\n }}\n />\n {/* Glow aura */}\n <div\n style={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: `${particle.size * 4}px`,\n height: `${particle.size * 4}px`,\n background: `radial-gradient(circle, ${particle.color}44 0%, transparent 70%)`,\n borderRadius: '50%',\n transform: 'translate(-50%, -50%)',\n opacity: baseFade * glowIntensity * 0.5,\n transition: 'opacity 0.3s ease',\n }}\n />\n </div>\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst paintColors = [\n '#FF006E',\n '#FB5607',\n '#FFBE0B',\n '#8338EC',\n '#3A86FF',\n '#06FFB4',\n];\n\nexport const createPaintParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 25,\n spread = 120,\n startVelocity = 35,\n colors = paintColors,\n elementSize = 30,\n } = config;\n\n return createPooledParticles(particleCount, (i) => {\n const angle = randomInRange(-spread / 2, spread / 2) * (Math.PI / 180);\n const velocity = randomInRange(startVelocity * 0.5, startVelocity);\n const isMainSplat = i < 5; // First few particles are bigger splats\n\n return {\n id: generateId(),\n x: origin.x,\n y: origin.y,\n vx: Math.sin(angle) * velocity * (isMainSplat ? 0.3 : 1),\n vy: -Math.cos(angle) * velocity * 0.7 + (isMainSplat ? 5 : 0),\n life: config.lifetime || 150,\n opacity: 1,\n size: isMainSplat\n ? randomInRange(elementSize * 1.5, elementSize * 2.5)\n : randomInRange(elementSize * 0.3, elementSize),\n rotation: randomInRange(0, 360),\n color:\n colors[Math.floor(Math.random() * colors.length)] ||\n colors[0] ||\n '#ffffff',\n };\n });\n};\n\nexport const renderPaintParticle = (particle: Particle): React.ReactNode => {\n // Paint splatter gets more stretched as it flies\n const stretch = 1 + (Math.abs(particle.vx) + Math.abs(particle.vy)) * 0.01;\n const squish = 1 / stretch;\n\n // Drip effect for some particles\n const isDripping = particle.size > 15 && particle.rotation > 180;\n const dripLength = isDripping ? particle.size * 0.5 : 0;\n\n return (\n <div\n key={particle.id}\n style={{\n width: `${particle.size}px`,\n height: `${particle.size}px`,\n position: 'relative',\n transform: `\n scaleX(${stretch}) \n scaleY(${squish}) \n rotate(${(Math.atan2(particle.vy, particle.vx) * 180) / Math.PI}deg)\n `,\n }}\n >\n {/* Main paint splat */}\n <div\n style={{\n width: '100%',\n height: '100%',\n background: particle.color,\n borderRadius: '50%',\n position: 'relative',\n boxShadow: `inset -2px -2px 4px rgba(0,0,0,0.2)`,\n }}\n >\n {/* Splatter details */}\n <div\n style={{\n position: 'absolute',\n top: '20%',\n left: '20%',\n width: '30%',\n height: '30%',\n background: particle.color,\n borderRadius: '50%',\n opacity: 0.8,\n transform: `translate(${randomInRange(-5, 5)}px, ${randomInRange(-5, 5)}px)`,\n }}\n />\n <div\n style={{\n position: 'absolute',\n bottom: '15%',\n right: '15%',\n width: '25%',\n height: '25%',\n background: particle.color,\n borderRadius: '50%',\n opacity: 0.7,\n }}\n />\n </div>\n\n {/* Paint drip */}\n {isDripping && (\n <div\n style={{\n position: 'absolute',\n bottom: `-${dripLength}px`,\n left: '40%',\n width: '20%',\n height: `${dripLength}px`,\n background: particle.color,\n borderRadius: '0 0 50% 50%',\n opacity: 0.9,\n }}\n />\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst balloonColors = [\n '#FF006E',\n '#FB5607',\n '#FFBE0B',\n '#8338EC',\n '#3A86FF',\n '#06FFB4',\n '#FF4081',\n];\n\nexport const createBalloonParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 15,\n spread = 80,\n startVelocity = 10,\n colors = balloonColors,\n elementSize = 35,\n } = config;\n\n return createPooledParticles(particleCount, () => {\n const angle = randomInRange(-spread / 2, spread / 2) * (Math.PI / 180);\n const velocity = randomInRange(startVelocity * 0.7, startVelocity);\n\n return {\n id: generateId(),\n x: origin.x + randomInRange(-spread * 0.8, spread * 0.8), // Spread balloons out more\n y: origin.y + randomInRange(-10, 30),\n vx: Math.sin(angle) * velocity * 0.3 + randomInRange(-1, 1), // Add horizontal drift\n vy: -velocity * 0.4, // Balloons float up slowly\n life: config.lifetime || 250,\n opacity: 0.9,\n size: randomInRange(elementSize * 0.8, elementSize * 1.2),\n rotation: randomInRange(-10, 10),\n color:\n colors[Math.floor(Math.random() * colors.length)] ||\n colors[0] ||\n '#ffffff',\n };\n });\n};\n\nexport const renderBalloonParticle = (particle: Particle): React.ReactNode => {\n // Gentle swaying motion\n const sway = Math.sin(particle.life * 0.03) * 15;\n const bob = Math.sin(particle.life * 0.05) * 5;\n\n // Fade out near the end\n const fadeOut = particle.life > 50 ? 1 : particle.life / 50;\n\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '120%',\n position: 'relative',\n transform: `\n translateX(${sway}px) \n translateY(${bob}px)\n rotate(${sway * 0.2}deg)\n `,\n opacity: particle.opacity * fadeOut,\n }}\n >\n {/* Balloon body */}\n <div\n style={{\n width: '100%',\n height: '100%',\n background: `radial-gradient(circle at 30% 30%, ${particle.color}ee, ${particle.color})`,\n borderRadius: '50% 50% 50% 50% / 60% 60% 40% 40%',\n position: 'relative',\n boxShadow: `\n inset -5px -5px 10px rgba(0,0,0,0.2),\n 0 4px 8px rgba(0,0,0,0.2)\n `,\n }}\n >\n {/* Highlight */}\n <div\n style={{\n position: 'absolute',\n top: '15%',\n left: '20%',\n width: '25%',\n height: '30%',\n background:\n 'radial-gradient(circle, rgba(255,255,255,0.8) 0%, transparent 70%)',\n borderRadius: '50%',\n transform: 'rotate(-20deg)',\n }}\n />\n\n {/* Balloon knot */}\n <div\n style={{\n position: 'absolute',\n bottom: '-5px',\n left: '50%',\n transform: 'translateX(-50%)',\n width: '0',\n height: '0',\n borderLeft: '4px solid transparent',\n borderRight: '4px solid transparent',\n borderTop: `8px solid ${particle.color}`,\n }}\n />\n </div>\n\n {/* String */}\n <svg\n style={{\n position: 'absolute',\n top: '100%',\n left: '50%',\n transform: 'translateX(-50%)',\n width: '2px',\n height: `${particle.size * 2}px`,\n opacity: 0.6,\n }}\n >\n <path\n d={`M1 0 Q ${1 + Math.sin(particle.life * 0.1) * 3} ${particle.size} 1 ${particle.size * 2}`}\n stroke={particle.color}\n strokeWidth=\"1.5\"\n fill=\"none\"\n opacity=\"0.4\"\n />\n </svg>\n </div>\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst galaxyColors = [\n '#FFFFFF',\n '#FFF9C4',\n '#BBDEFB',\n '#C5CAE9',\n '#D1C4E9',\n '#FFE082',\n '#FFCCBC',\n];\n\nexport const createGalaxyParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 60,\n spread = 200,\n startVelocity = 15,\n colors = galaxyColors,\n elementSize = 8,\n } = config;\n\n return createPooledParticles(particleCount, (i) => {\n // Create spiral distribution\n const progress = i / particleCount;\n const spiralAngle = progress * Math.PI * 4; // 2 full rotations\n const radius = progress * spread;\n\n // Add some randomness to make it look natural\n const angleOffset = randomInRange(-0.3, 0.3);\n const radiusOffset = randomInRange(-10, 10);\n\n const finalAngle = spiralAngle + angleOffset;\n const finalRadius = radius + radiusOffset;\n\n // Position based on spiral\n const offsetX = Math.cos(finalAngle) * finalRadius;\n const offsetY = Math.sin(finalAngle) * finalRadius;\n\n // Velocity follows the spiral tangent\n const tangentAngle = finalAngle + Math.PI / 2;\n const speed = startVelocity * (1 - progress * 0.5); // Outer stars move slower\n\n return {\n id: generateId(),\n x: origin.x,\n y: origin.y,\n vx: Math.cos(tangentAngle) * speed * 0.3 + offsetX * 0.02,\n vy: Math.sin(tangentAngle) * speed * 0.3 + offsetY * 0.02,\n life: config.lifetime || 250,\n opacity: 0,\n size:\n randomInRange(elementSize * 0.3, elementSize) * (1 - progress * 0.5), // Smaller at edges\n rotation: randomInRange(0, 360),\n color:\n colors[Math.floor(Math.random() * colors.length)] ||\n colors[0] ||\n '#ffffff',\n };\n });\n};\n\nexport const renderGalaxyParticle = (particle: Particle): React.ReactNode => {\n // Particles slowly rotate around center while expanding\n const age = (250 - particle.life) / 250;\n const expansionRate = 1 + age * 0.5;\n\n // Fade in quickly, fade out slowly\n const fadeIn = Math.min(1, (250 - particle.life) / 30);\n const fadeOut = particle.life / 250;\n const opacity = Math.min(fadeIn, fadeOut);\n\n // Twinkle effect\n const twinkle = Math.sin(particle.life * 0.2 + particle.rotation) * 0.3 + 0.7;\n\n return (\n <div\n key={particle.id}\n style={{\n width: `${particle.size}px`,\n height: `${particle.size}px`,\n position: 'relative',\n transform: `scale(${expansionRate})`,\n opacity: opacity * twinkle,\n }}\n >\n {/* Star core */}\n <div\n style={{\n width: '100%',\n height: '100%',\n background: particle.color,\n borderRadius: '50%',\n boxShadow: `\n 0 0 ${particle.size}px ${particle.color},\n 0 0 ${particle.size * 2}px ${particle.color}88,\n 0 0 ${particle.size * 3}px ${particle.color}44\n `,\n position: 'relative',\n }}\n >\n {/* Star spikes */}\n <div\n style={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: `${particle.size * 3}px`,\n height: '1px',\n background: `linear-gradient(90deg, transparent, ${particle.color}, transparent)`,\n transform: `translate(-50%, -50%) rotate(${particle.rotation}deg)`,\n opacity: twinkle,\n }}\n />\n <div\n style={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: '1px',\n height: `${particle.size * 3}px`,\n background: `linear-gradient(180deg, transparent, ${particle.color}, transparent)`,\n transform: `translate(-50%, -50%) rotate(${particle.rotation}deg)`,\n opacity: twinkle,\n }}\n />\n </div>\n\n {/* Nebula dust for larger stars */}\n {particle.size > 5 && (\n <div\n style={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: `${particle.size * 6}px`,\n height: `${particle.size * 6}px`,\n background: `radial-gradient(circle, ${particle.color}22 0%, transparent 70%)`,\n borderRadius: '50%',\n transform: 'translate(-50%, -50%)',\n opacity: opacity * 0.3,\n filter: 'blur(3px)',\n }}\n />\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\n\nexport const createGlitchParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const { particleCount = 20, elementSize = 200 } = config;\n\n const particles: Particle[] = [];\n const channels = ['r', 'g', 'b'];\n\n for (let i = 0; i < particleCount; i++) {\n const isHorizontal = Math.random() > 0.3;\n const channelIndex = i % 3;\n const channel = channels[channelIndex];\n\n // Encode all data in rotation:\n // bits 0-1: channel (0=r, 1=g, 2=b)\n // bit 2: isHorizontal (0=false, 1=true)\n // bits 3-10: width (0-255)\n // bits 11-18: height (0-255)\n // bits 19-24: glitchOffset + 32 (to make positive)\n const width = isHorizontal ? randomInRange(50, 200) : randomInRange(2, 8);\n const height = isHorizontal ? randomInRange(2, 8) : randomInRange(50, 200);\n const glitchOffset = randomInRange(-20, 20);\n\n const encodedData =\n channelIndex +\n (isHorizontal ? 4 : 0) +\n (Math.floor(width) << 3) +\n (Math.floor(height) << 11) +\n ((glitchOffset + 32) << 19);\n\n particles.push({\n id: generateId(),\n x: origin.x + randomInRange(-elementSize / 2, elementSize / 2),\n y: origin.y + randomInRange(-elementSize / 2, elementSize / 2),\n vx: randomInRange(-50, 50),\n vy: randomInRange(-30, 30),\n life: config.lifetime || 150,\n opacity: randomInRange(0.3, 1),\n size: randomInRange(5, 20), // Store distortionAmount\n rotation: encodedData,\n color:\n channel === 'r' ? '#ff0000' : channel === 'g' ? '#00ff00' : '#0000ff',\n });\n }\n\n return particles;\n};\n\nexport const renderGlitchParticle = (particle: Particle): React.ReactNode => {\n // Decode data from rotation\n const channelIndex = particle.rotation & 3;\n const width = (particle.rotation >> 3) & 255;\n const height = (particle.rotation >> 11) & 255;\n const glitchOffset = ((particle.rotation >> 19) & 63) - 32;\n\n const channel = ['r', 'g', 'b'][channelIndex];\n const distortionAmount = particle.size;\n\n const colors = {\n r: channel === 'r' ? 255 : 0,\n g: channel === 'g' ? 255 : 0,\n b: channel === 'b' ? 255 : 0,\n };\n\n const mixBlendMode =\n channel === 'r' ? 'screen' : channel === 'g' ? 'multiply' : 'difference';\n\n return (\n <div\n key={particle.id}\n style={{\n width: `${width}px`,\n height: `${height}px`,\n backgroundColor: `rgba(${colors.r}, ${colors.g}, ${colors.b}, ${particle.opacity})`,\n mixBlendMode,\n filter: `blur(${randomInRange(0, 2)}px)`,\n boxShadow: `${glitchOffset}px 0 ${distortionAmount}px rgba(${colors.r}, ${colors.g}, ${colors.b}, ${particle.opacity * 0.5})`,\n }}\n />\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport {\n randomInRange,\n degreesToRadians,\n generateId,\n getRandomColor,\n} from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst defaultColors = [\n '#9C27B0',\n '#E91E63',\n '#FF00FF',\n '#00FFFF',\n '#FFD700',\n '#FF69B4',\n '#DA70D6',\n '#9370DB',\n];\n\nexport const createMagicDustParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 40,\n startVelocity = 8,\n colors = defaultColors,\n elementSize = 12,\n } = config;\n\n return createPooledParticles(particleCount, (i) => {\n // Create particles in a circular pattern with some randomness\n const angle = (i / particleCount) * 360 + randomInRange(-30, 30);\n const velocity = randomInRange(startVelocity * 0.3, startVelocity);\n const color = getRandomColor(colors);\n\n // Add some particles that trail behind cursor movement\n const offsetAngle = randomInRange(0, 360);\n const offsetDistance = randomInRange(0, 30);\n\n return {\n id: generateId(),\n x: origin.x + Math.cos(degreesToRadians(offsetAngle)) * offsetDistance,\n y: origin.y + Math.sin(degreesToRadians(offsetAngle)) * offsetDistance,\n vx: Math.cos(degreesToRadians(angle)) * velocity + randomInRange(-2, 2),\n vy: Math.sin(degreesToRadians(angle)) * velocity + randomInRange(-2, 2),\n life: config.lifetime || 120,\n opacity: randomInRange(0.4, 1),\n size: randomInRange(elementSize * 0.3, elementSize),\n rotation: randomInRange(0, 360),\n color,\n };\n });\n};\n\nexport const renderMagicDustParticle = (\n particle: Particle\n): React.ReactNode => {\n const sparkleSize = particle.size * 0.7;\n\n return (\n <div\n key={particle.id}\n style={{\n width: `${particle.size}px`,\n height: `${particle.size}px`,\n position: 'relative',\n }}\n >\n {/* Central glow */}\n <div\n style={{\n position: 'absolute',\n width: '100%',\n height: '100%',\n backgroundColor: particle.color,\n borderRadius: '50%',\n boxShadow: `0 0 ${particle.size}px ${particle.color}, 0 0 ${particle.size * 2}px ${particle.color}`,\n filter: 'blur(1px)',\n }}\n />\n {/* Sparkle effect */}\n <div\n style={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: `${sparkleSize}px`,\n height: `${sparkleSize}px`,\n transform: `translate(-50%, -50%) rotate(${particle.rotation}deg)`,\n }}\n >\n <div\n style={{\n position: 'absolute',\n width: '100%',\n height: '2px',\n backgroundColor: 'white',\n top: '50%',\n left: '0',\n transform: 'translateY(-50%)',\n boxShadow: '0 0 4px white',\n }}\n />\n <div\n style={{\n position: 'absolute',\n width: '2px',\n height: '100%',\n backgroundColor: 'white',\n left: '50%',\n top: '0',\n transform: 'translateX(-50%)',\n boxShadow: '0 0 4px white',\n }}\n />\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport {\n randomInRange,\n degreesToRadians,\n generateId,\n getRandomColor,\n} from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst defaultColors = [\n '#FF1493',\n '#00CED1',\n '#FFD700',\n '#FF69B4',\n '#7B68EE',\n '#00FA9A',\n '#FF6347',\n '#4169E1',\n];\n\nexport const createCrystalParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 15,\n startVelocity = 15,\n colors = defaultColors,\n elementSize = 25,\n } = config;\n\n return createPooledParticles(particleCount, () => {\n // Crystals explode outward and fall with gravity\n const angle = randomInRange(0, 360);\n const velocity = randomInRange(startVelocity * 0.5, startVelocity);\n const color = getRandomColor(colors);\n\n return {\n id: generateId(),\n x: origin.x,\n y: origin.y,\n vx: Math.cos(degreesToRadians(angle)) * velocity,\n vy: Math.sin(degreesToRadians(angle)) * velocity - 10,\n life: config.lifetime || 150,\n opacity: randomInRange(0.7, 1),\n size: randomInRange(elementSize * 0.6, elementSize),\n rotation: randomInRange(0, 360),\n color,\n };\n });\n};\n\nexport const renderCrystalParticle = (particle: Particle): React.ReactNode => {\n // Create rainbow refraction effect\n const hue = (Date.now() * 0.5 + particle.x + particle.y) % 360;\n\n return (\n <div\n key={particle.id}\n style={{\n width: `${particle.size}px`,\n height: `${particle.size * 1.5}px`,\n position: 'relative',\n transform: `rotate(${particle.rotation}deg)`,\n }}\n >\n {/* Crystal shape with gradient */}\n <div\n style={{\n position: 'absolute',\n width: '100%',\n height: '100%',\n background: `linear-gradient(135deg, ${particle.color}, ${particle.color}88, transparent)`,\n clipPath: 'polygon(50% 0%, 100% 40%, 75% 100%, 25% 100%, 0% 40%)',\n boxShadow: `0 0 ${particle.size}px ${particle.color}44`,\n }}\n />\n\n {/* Inner facets */}\n <div\n style={{\n position: 'absolute',\n width: '80%',\n height: '80%',\n top: '10%',\n left: '10%',\n background: `linear-gradient(45deg, transparent, rgba(255, 255, 255, 0.4), transparent)`,\n clipPath: 'polygon(50% 10%, 90% 45%, 65% 90%, 35% 90%, 10% 45%)',\n }}\n />\n\n {/* Rainbow refraction overlay */}\n <div\n style={{\n position: 'absolute',\n width: '100%',\n height: '100%',\n background: `linear-gradient(${hue}deg, \n hsla(${hue}, 100%, 50%, 0.3),\n hsla(${(hue + 60) % 360}, 100%, 50%, 0.3),\n hsla(${(hue + 120) % 360}, 100%, 50%, 0.3)\n )`,\n clipPath: 'polygon(50% 0%, 100% 40%, 75% 100%, 25% 100%, 0% 40%)',\n mixBlendMode: 'screen',\n }}\n />\n\n {/* Shine effect */}\n <div\n style={{\n position: 'absolute',\n width: '30%',\n height: '30%',\n top: '20%',\n left: '35%',\n background:\n 'radial-gradient(circle, rgba(255, 255, 255, 0.8), transparent)',\n borderRadius: '50%',\n filter: 'blur(2px)',\n }}\n />\n </div>\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId, getRandomColor } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst defaultColors = [\n '#D2691E',\n '#CD853F',\n '#8B4513',\n '#A0522D',\n '#FF8C00',\n '#FF6347',\n];\n\nexport const createLeafParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 10,\n colors = defaultColors,\n elementSize = 25,\n } = config;\n\n return createPooledParticles(particleCount, () => {\n return {\n id: generateId(),\n x: origin.x + randomInRange(-100, 100),\n y: origin.y + randomInRange(-50, 0),\n vx: randomInRange(-1, 1),\n vy: randomInRange(0.5, 2),\n life: config.lifetime || 300,\n opacity: 1,\n size: randomInRange(elementSize * 0.6, elementSize),\n // Encode tumble phase (0-360), sway phase (0-360), and sway amount (20-40) + rotation speed (-3 to 3)\n rotation:\n Math.floor(randomInRange(0, 360)) +\n Math.floor(randomInRange(0, 360)) * 1000 +\n Math.floor(randomInRange(20, 40)) * 1000000 +\n (Math.floor(randomInRange(-3, 3)) + 3) * 100000000,\n color: getRandomColor(colors),\n };\n });\n};\n\nexport const renderLeafParticle = (particle: Particle): React.ReactNode => {\n // Extract encoded values\n const tumblePhase = particle.rotation % 1000;\n const swayPhase = Math.floor((particle.rotation % 1000000) / 1000);\n const swayAmount = Math.floor((particle.rotation % 100000000) / 1000000);\n const rotationSpeed = Math.floor(particle.rotation / 100000000) - 3;\n\n // Calculate tumbling and swaying\n const tumble =\n Math.sin(((Date.now() * 0.002 + tumblePhase) * Math.PI) / 180) * 30;\n const swayX =\n Math.sin(((Date.now() * 0.001 + swayPhase) * Math.PI) / 180) * swayAmount;\n const rotation = (Date.now() * rotationSpeed * 0.01 + tumble) % 360;\n\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '100%',\n position: 'relative',\n transform: `translateX(${swayX}px) rotate(${rotation}deg)`,\n }}\n >\n <svg\n width=\"100%\"\n height=\"100%\"\n viewBox={`-${particle.size / 2} -${particle.size / 2} ${particle.size} ${particle.size}`}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n }}\n >\n {/* Leaf shape */}\n <path\n d={`\n M 0,-${particle.size / 2}\n C -${particle.size / 3},-${particle.size / 3} -${particle.size / 3},${particle.size / 3} 0,${particle.size / 2}\n C ${particle.size / 3},${particle.size / 3} ${particle.size / 3},-${particle.size / 3} 0,-${particle.size / 2}\n `}\n fill={particle.color}\n opacity=\"0.9\"\n />\n\n {/* Leaf vein */}\n <line\n x1=\"0\"\n y1={-particle.size / 2}\n x2=\"0\"\n y2={particle.size / 2}\n stroke=\"#8B4513\"\n strokeWidth=\"1\"\n opacity=\"0.5\"\n />\n\n {/* Side veins */}\n <line\n x1=\"0\"\n y1={-particle.size / 4}\n x2={-particle.size / 4}\n y2={-particle.size / 8}\n stroke=\"#8B4513\"\n strokeWidth=\"0.5\"\n opacity=\"0.5\"\n />\n <line\n x1=\"0\"\n y1={-particle.size / 4}\n x2={particle.size / 4}\n y2={-particle.size / 8}\n stroke=\"#8B4513\"\n strokeWidth=\"0.5\"\n opacity=\"0.5\"\n />\n <line\n x1=\"0\"\n y1={particle.size / 4}\n x2={-particle.size / 4}\n y2={particle.size / 8}\n stroke=\"#8B4513\"\n strokeWidth=\"0.5\"\n opacity=\"0.5\"\n />\n <line\n x1=\"0\"\n y1={particle.size / 4}\n x2={particle.size / 4}\n y2={particle.size / 8}\n stroke=\"#8B4513\"\n strokeWidth=\"0.5\"\n opacity=\"0.5\"\n />\n </svg>\n </div>\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId, degreesToRadians } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst mortarColors = [\n '#ff6b6b',\n '#4ecdc4',\n '#45b7d1',\n '#f7dc6f',\n '#bb8fce',\n '#85c1f5',\n '#ffd93d',\n '#6bcf7f',\n];\n\nexport const createMortarParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 3, // Number of firework shells\n spread = 60, // Total spread angle\n startVelocity = 12, // Much lower velocity\n colors = mortarColors,\n elementSize = 8,\n } = config;\n\n const particles: Particle[] = [];\n\n // Create firework shells that fire at angles\n const shells = createPooledParticles(particleCount, (index) => {\n // Distribute shells across the spread angle - more horizontal\n const baseAngle = -90; // Start from straight up\n const angleStep = particleCount > 1 ? spread / (particleCount - 1) : 0;\n const angle = baseAngle - spread / 2 + angleStep * index;\n\n const velocity = randomInRange(startVelocity * 0.9, startVelocity * 1.1);\n const targetColor = colors[Math.floor(Math.random() * colors.length)];\n const rad = degreesToRadians(angle);\n\n // Calculate when to explode based on trajectory\n const timeToExplode = randomInRange(20, 35); // Explode much earlier\n\n return {\n id: generateId(),\n x: origin.x,\n y: origin.y,\n vx: Math.cos(rad) * velocity,\n vy: Math.sin(rad) * velocity,\n life: config.lifetime || 200,\n opacity: 1,\n size: elementSize,\n rotation: 0,\n color: targetColor,\n config: config, // Add config to particle\n // Store explosion data\n element: JSON.stringify({\n isShell: true,\n hasExploded: false,\n timeToExplode: timeToExplode, // Fixed explosion time\n burstCount: randomInRange(30, 45),\n burstColor: targetColor,\n }),\n };\n });\n\n particles.push(...shells);\n\n // Create launch sparks at the base\n for (let i = 0; i < 8; i++) {\n const sparkArray = createPooledParticles(1, () => ({\n id: generateId(),\n x: origin.x + randomInRange(-5, 5),\n y: origin.y,\n vx: randomInRange(-2, 2),\n vy: randomInRange(-10, -3),\n life: randomInRange(10, 20),\n opacity: 1,\n size: randomInRange(2, 3),\n rotation: 0,\n color: '#ffaa00',\n element: JSON.stringify({\n isLaunchSpark: true,\n }),\n }));\n particles.push(...sparkArray);\n }\n\n return particles;\n};\n\ninterface MortarElementData {\n isShell?: boolean;\n hasExploded?: boolean;\n timeToExplode?: number;\n burstCount?: number;\n burstColor?: string;\n isTrail?: boolean;\n isBurst?: boolean;\n isLaunchSpark?: boolean;\n isGalaxy?: boolean;\n isCore?: boolean;\n twinkle?: boolean;\n}\n\nexport const renderMortarParticle = (\n particle: Particle & { config?: AnimationConfig }\n): React.ReactNode => {\n let elementData: MortarElementData = {};\n try {\n if (particle.element && typeof particle.element === 'string') {\n elementData = JSON.parse(particle.element);\n }\n } catch (e) {\n // Fallback\n }\n\n // Render launch sparks\n if (elementData.isLaunchSpark) {\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '100%',\n backgroundColor: particle.color,\n borderRadius: '50%',\n opacity: particle.opacity,\n boxShadow: `0 0 3px ${particle.color}`,\n }}\n />\n );\n }\n\n // Render trail particles\n if (elementData.isTrail) {\n const trailOpacity = particle.opacity * (particle.life / 30) * 0.4;\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '100%',\n background: `radial-gradient(circle, ${particle.color}88 0%, transparent 60%)`,\n borderRadius: '50%',\n opacity: trailOpacity,\n filter: 'blur(1px)',\n }}\n />\n );\n }\n\n // Render burst particles\n if (elementData.isBurst) {\n const burstOpacity = particle.opacity * Math.pow(particle.life / 120, 0.5);\n\n // Galaxy-style burst particles\n if (elementData.isGalaxy) {\n const twinkleOpacity = elementData.twinkle\n ? 0.3 + Math.sin(particle.life * 0.3) * 0.7\n : 1;\n\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '100%',\n backgroundColor: particle.color,\n borderRadius: '50%',\n opacity: burstOpacity * twinkleOpacity,\n boxShadow: `0 0 ${particle.size * 2}px ${particle.color}`,\n transform: `rotate(${particle.rotation}deg)`,\n }}\n />\n );\n }\n\n // Core particles\n if (elementData.isCore) {\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '100%',\n backgroundColor: '#FFFFFF',\n borderRadius: '50%',\n opacity: burstOpacity,\n boxShadow: `0 0 ${particle.size * 3}px #FFFFFF`,\n }}\n />\n );\n }\n\n // Default burst (shouldn't reach here with new code)\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '100%',\n backgroundColor: particle.color,\n borderRadius: '50%',\n opacity: burstOpacity,\n boxShadow: `\n 0 0 ${particle.size}px ${particle.color},\n 0 0 ${particle.size * 2}px ${particle.color}88\n `,\n filter: particle.life > 80 ? 'blur(0px)' : 'blur(1px)',\n }}\n />\n );\n }\n\n // Render shell\n if (elementData.isShell) {\n // Hide shell after explosion\n if (elementData.hasExploded) {\n return null;\n }\n\n // Calculate rotation based on movement direction\n const rotation = (Math.atan2(particle.vy, particle.vx) * 180) / Math.PI;\n\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '100%',\n position: 'relative',\n transform: `rotate(${rotation}deg)`,\n }}\n >\n {/* Glowing shell */}\n <div\n style={{\n width: '100%',\n height: '100%',\n backgroundColor: '#ffffff',\n borderRadius: '50%',\n boxShadow: `\n 0 0 ${particle.size * 0.5}px #ffffff,\n 0 0 ${particle.size}px ${particle.color},\n 0 0 ${particle.size * 2}px ${particle.color}88\n `,\n }}\n />\n </div>\n );\n }\n\n // Default particle\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '100%',\n backgroundColor: particle.color,\n borderRadius: '50%',\n opacity: particle.opacity,\n }}\n />\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\n// Inspired by Sergio A. Carrasco Chavez's bokeh effect\n// Original: https://codepen.io/sergio-carrasco/pen/bokeh\n\nconst bokehColors = [\n '#FFFFFF', // Pure white\n '#FFF8DC', // Cornsilk\n '#FFFACD', // LemonChiffon\n '#FFE4B5', // Moccasin\n '#FFDEAD', // NavajoWhite\n '#F0E68C', // Khaki\n '#FFD700', // Gold\n];\n\nexport const createBokehParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 50,\n spread = 300,\n startVelocity = 1,\n colors = bokehColors,\n elementSize = 40,\n lifetime = 200,\n } = config;\n\n return createPooledParticles(particleCount, (i) => {\n // Create particles at various distances from origin for depth effect\n const angle = Math.random() * Math.PI * 2;\n const distance = randomInRange(0, spread);\n\n // Vary sizes for depth perception\n const depth = Math.random(); // 0 = close, 1 = far\n const size = elementSize * (0.3 + depth * 0.7); // Bigger = closer\n\n return {\n id: generateId(),\n x: origin.x + Math.cos(angle) * distance,\n y: origin.y + Math.sin(angle) * distance,\n vx: randomInRange(-0.5, 0.5) * startVelocity,\n vy: randomInRange(-0.5, -1.5) * startVelocity, // Gentle upward drift\n life: lifetime,\n opacity: 0.1 + depth * 0.5, // Closer = more transparent (out of focus)\n size: size,\n rotation: 0,\n color: colors[Math.floor(Math.random() * colors.length)],\n element: JSON.stringify({\n depth: depth,\n pulsePhase: Math.random() * Math.PI * 2, // Random starting phase for pulse\n baseSize: size,\n }),\n };\n });\n};\n\nexport const renderBokehParticle = (particle: Particle): React.ReactNode => {\n let elementData: any = {};\n try {\n if (particle.element && typeof particle.element === 'string') {\n elementData = JSON.parse(particle.element);\n }\n } catch (e) {\n // Fallback\n }\n\n // Create gentle pulsing effect\n const pulseAmount =\n Math.sin(particle.life * 0.05 + (elementData.pulsePhase || 0)) * 0.1 + 1;\n const currentSize = (elementData.baseSize || particle.size) * pulseAmount;\n\n // Fade in at start, fade out at end\n const fadeIn = Math.min(\n 1,\n (particle.config?.lifetime || 200 - particle.life) / 20\n );\n const fadeOut = Math.min(1, particle.life / 40);\n const opacity = particle.opacity * fadeIn * fadeOut;\n\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '100%',\n position: 'relative',\n }}\n >\n {/* Outer glow */}\n <div\n style={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: `${currentSize * 3}px`,\n height: `${currentSize * 3}px`,\n transform: 'translate(-50%, -50%)',\n background: `radial-gradient(circle, ${particle.color}22 0%, transparent 50%)`,\n filter: 'blur(20px)',\n opacity: opacity * 0.6,\n }}\n />\n\n {/* Middle glow */}\n <div\n style={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: `${currentSize * 2}px`,\n height: `${currentSize * 2}px`,\n transform: 'translate(-50%, -50%)',\n background: `radial-gradient(circle, ${particle.color}44 0%, transparent 60%)`,\n filter: 'blur(10px)',\n opacity: opacity * 0.8,\n }}\n />\n\n {/* Inner core */}\n <div\n style={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: `${currentSize}px`,\n height: `${currentSize}px`,\n transform: 'translate(-50%, -50%)',\n background: `radial-gradient(circle, ${particle.color}88 0%, ${particle.color}44 50%, transparent 100%)`,\n borderRadius: '50%',\n filter: 'blur(2px)',\n opacity: opacity,\n }}\n />\n </div>\n );\n};\n","import { AnimationType, AnimationConfig, Particle } from '../types';\nimport { createConfettiParticles, renderConfettiParticle } from './confetti';\nimport { createSparkleParticles, renderSparkleParticle } from './sparkles';\nimport { createHeartParticles, renderHeartParticle } from './hearts';\nimport { createFireworkParticles, renderFireworkParticle } from './fireworks';\nimport { createBubbleParticles, renderBubbleParticle } from './bubbles';\nimport { createStarParticles, renderStarParticle } from './stars';\nimport { createSnowParticles, renderSnowParticle } from './snow';\nimport { createEmojiParticles, renderEmojiParticle } from './emoji';\nimport { createCoinParticles, renderCoinParticle } from './coins';\nimport { createPetalParticles, renderPetalParticle } from './petals';\nimport { createAuroraParticles, renderAuroraParticle } from './aurora';\nimport { createFireflyParticles, renderFireflyParticle } from './fireflies';\nimport { createPaintParticles, renderPaintParticle } from './paint';\nimport { createBalloonParticles, renderBalloonParticle } from './balloons';\nimport { createGalaxyParticles, renderGalaxyParticle } from './galaxy';\nimport { createGlitchParticles, renderGlitchParticle } from './glitch';\nimport { createMagicDustParticles, renderMagicDustParticle } from './magicdust';\nimport { createCrystalParticles, renderCrystalParticle } from './crystals';\nimport { createLeafParticles, renderLeafParticle } from './leaves';\nimport { createMortarParticles, renderMortarParticle } from './mortar';\nimport { createBokehParticles, renderBokehParticle } from './bokeh';\n\nexport type ParticleCreator = (\n origin: { x: number; y: number },\n config: AnimationConfig\n) => Particle[];\nexport type ParticleRenderer = (particle: Particle) => React.ReactNode;\n\ninterface AnimationHandler {\n createParticles: ParticleCreator;\n renderParticle: ParticleRenderer;\n}\n\nexport const animations: Record<AnimationType, AnimationHandler> = {\n confetti: {\n createParticles: createConfettiParticles,\n renderParticle: renderConfettiParticle,\n },\n sparkles: {\n createParticles: createSparkleParticles,\n renderParticle: renderSparkleParticle,\n },\n hearts: {\n createParticles: createHeartParticles,\n renderParticle: renderHeartParticle,\n },\n fireworks: {\n createParticles: createFireworkParticles,\n renderParticle: renderFireworkParticle,\n },\n bubbles: {\n createParticles: createBubbleParticles,\n renderParticle: renderBubbleParticle,\n },\n stars: {\n createParticles: createStarParticles,\n renderParticle: renderStarParticle,\n },\n snow: {\n createParticles: createSnowParticles,\n renderParticle: renderSnowParticle,\n },\n emoji: {\n createParticles: createEmojiParticles,\n renderParticle: renderEmojiParticle,\n },\n coins: {\n createParticles: createCoinParticles,\n renderParticle: renderCoinParticle,\n },\n petals: {\n createParticles: createPetalParticles,\n renderParticle: renderPetalParticle,\n },\n aurora: {\n createParticles: createAuroraParticles,\n renderParticle: renderAuroraParticle,\n },\n fireflies: {\n createParticles: createFireflyParticles,\n renderParticle: renderFireflyParticle,\n },\n paint: {\n createParticles: createPaintParticles,\n renderParticle: renderPaintParticle,\n },\n balloons: {\n createParticles: createBalloonParticles,\n renderParticle: renderBalloonParticle,\n },\n galaxy: {\n createParticles: createGalaxyParticles,\n renderParticle: renderGalaxyParticle,\n },\n glitch: {\n createParticles: createGlitchParticles,\n renderParticle: renderGlitchParticle,\n },\n magicdust: {\n createParticles: createMagicDustParticles,\n renderParticle: renderMagicDustParticle,\n },\n crystals: {\n createParticles: createCrystalParticles,\n renderParticle: renderCrystalParticle,\n },\n leaves: {\n createParticles: createLeafParticles,\n renderParticle: renderLeafParticle,\n },\n mortar: {\n createParticles: createMortarParticles,\n renderParticle: renderMortarParticle,\n },\n bokeh: {\n createParticles: createBokehParticles,\n renderParticle: renderBokehParticle,\n },\n};\n","import { AnimationConfig } from './types';\n\nexport const isMobileDevice = (): boolean => {\n if (typeof window === 'undefined') return false;\n\n // Check user agent\n const userAgent =\n navigator.userAgent ||\n navigator.vendor ||\n (window as Window & { opera?: string }).opera ||\n '';\n const isMobileUA =\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n userAgent\n );\n\n // Check viewport width\n const isMobileWidth = window.innerWidth <= 768;\n\n // Check touch support\n const hasTouch = 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n\n return isMobileUA || (isMobileWidth && hasTouch);\n};\n\nexport const optimizeConfigForMobile = (\n config: AnimationConfig\n): AnimationConfig => {\n if (!isMobileDevice()) return config;\n\n return {\n ...config,\n // Reduce particle count by 40%\n particleCount: Math.floor((config.particleCount || 50) * 0.6),\n // Reduce element size by 20%\n elementSize: Math.floor((config.elementSize || 20) * 0.8),\n // Reduce lifetime by 20%\n lifetime: Math.floor((config.lifetime || 150) * 0.8),\n // Simplify physics\n physics: {\n ...config.physics,\n // Reduce precision for mobile\n gravity: Math.round((config.physics?.gravity || 0) * 100) / 100,\n wind: Math.round((config.physics?.wind || 0) * 100) / 100,\n friction: Math.round((config.physics?.friction || 0.98) * 100) / 100,\n },\n };\n};\n\n// Frame skipping for mobile\nexport const shouldSkipFrame = (frameCount: number): boolean => {\n if (!isMobileDevice()) return false;\n // Skip every 3rd frame on mobile\n return frameCount % 3 === 0;\n};\n\n// Reduce visual complexity for mobile\nexport const simplifyVisualEffects = (animationType: string): boolean => {\n if (!isMobileDevice()) return false;\n // These animations have heavy visual effects\n const heavyAnimations = [\n 'fireflies',\n 'galaxy',\n 'aurora',\n 'crystals',\n 'glitch',\n ];\n return heavyAnimations.includes(animationType);\n};\n","import { Particle } from './types';\nimport { particlePool, PooledParticle } from './particlePool';\nimport { shouldSkipFrame } from './mobileOptimizations';\nimport { randomInRange } from './utils';\n\nexport interface AnimationInstance {\n id: string;\n particles: Particle[];\n containerElement: HTMLDivElement;\n renderFunction: (particle: Particle) => React.ReactNode;\n updateCallback?: (particles: Particle[]) => void;\n onComplete?: () => void;\n physics: {\n gravity: number;\n friction: number;\n wind: number;\n };\n animationType: string;\n config?: {\n effects?: {\n flutter?: boolean;\n windDrift?: boolean;\n wobble?: boolean;\n twinkle?: boolean;\n };\n };\n frameCount: number;\n isPaused?: boolean;\n pausedAt?: number;\n}\n\nclass AnimationManager {\n private animations: Map<string, AnimationInstance> = new Map();\n private rafId: number | null = null;\n private isRunning: boolean = false;\n private lastFrameTime: number = 0;\n private frameInterval: number = 1000 / 60; // 60 FPS target\n\n // Performance metrics\n private frameCount: number = 0;\n private fpsUpdateInterval: number = 1000; // Update FPS every second\n private lastFpsUpdate: number = 0;\n private currentFps: number = 0;\n\n constructor() {\n // Bind methods\n this.update = this.update.bind(this);\n }\n\n addAnimation(animation: AnimationInstance): void {\n this.animations.set(animation.id, animation);\n\n // Start the loop if not already running\n if (!this.isRunning && this.animations.size > 0) {\n this.start();\n }\n }\n\n removeAnimation(id: string): void {\n const animation = this.animations.get(id);\n if (animation) {\n // Release particles back to pool\n particlePool.releaseAll(animation.particles as Particle[]);\n\n // Remove container\n if (\n animation.containerElement &&\n document.body.contains(animation.containerElement)\n ) {\n document.body.removeChild(animation.containerElement);\n }\n\n this.animations.delete(id);\n }\n\n // Stop the loop if no more animations\n if (this.animations.size === 0) {\n this.stop();\n }\n }\n\n private start(): void {\n if (this.isRunning) return;\n\n this.isRunning = true;\n this.lastFrameTime = performance.now();\n this.lastFpsUpdate = this.lastFrameTime;\n this.frameCount = 0;\n this.rafId = requestAnimationFrame(this.update);\n }\n\n private stop(): void {\n if (!this.isRunning) return;\n\n this.isRunning = false;\n if (this.rafId !== null) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n }\n\n private update(currentTime: number): void {\n // Calculate delta time\n const deltaTime = currentTime - this.lastFrameTime;\n\n // Frame rate limiting\n if (deltaTime < this.frameInterval) {\n this.rafId = requestAnimationFrame(this.update);\n return;\n }\n\n this.lastFrameTime = currentTime - (deltaTime % this.frameInterval);\n this.frameCount++;\n\n // Update FPS counter\n if (currentTime - this.lastFpsUpdate >= this.fpsUpdateInterval) {\n this.currentFps = this.frameCount;\n this.frameCount = 0;\n this.lastFpsUpdate = currentTime;\n }\n\n // Check if tab is visible\n const isTabVisible = !document.hidden;\n if (!isTabVisible) {\n this.rafId = requestAnimationFrame(this.update);\n return;\n }\n\n // Update all animations\n const completedAnimations: string[] = [];\n\n this.animations.forEach((animation, id) => {\n // Skip update if animation is paused\n if (animation.isPaused) {\n return;\n }\n\n animation.frameCount++;\n const skipFrame = shouldSkipFrame(animation.frameCount);\n\n let activeParticles = 0;\n const newParticles: PooledParticle[] = []; // Collect new particles to add\n\n // Update particles\n animation.particles = animation.particles.map((particle) => {\n if (particle.life <= 0) return particle;\n\n activeParticles++;\n\n // Physics update\n particle.x += particle.vx;\n particle.y += particle.vy;\n particle.vy += animation.physics.gravity;\n particle.vx += animation.physics.wind;\n particle.vx *= animation.physics.friction;\n particle.vy *= animation.physics.friction;\n\n // Update rotation - make sparkles spin more\n if (animation.animationType === 'sparkles') {\n particle.rotation += 5; // Constant spin for sparkles\n } else {\n particle.rotation += particle.vx * 2;\n }\n\n particle.life -= 1.2;\n\n // Apply animation-specific effects\n this.applyEffects(particle, animation);\n\n // Handle mortar explosions\n this.handleMortarExplosion(particle, animation, newParticles);\n\n // Update opacity\n this.updateOpacity(particle, animation);\n\n return particle;\n });\n\n // Add any new particles created during the update (e.g., explosion particles)\n if (newParticles.length > 0) {\n animation.particles.push(...newParticles);\n }\n\n // Call update callback if provided\n if (animation.updateCallback && !skipFrame) {\n animation.updateCallback(animation.particles);\n }\n\n // Mark for removal if no active particles\n if (activeParticles === 0) {\n completedAnimations.push(id);\n if (animation.onComplete) {\n animation.onComplete();\n }\n }\n });\n\n // Remove completed animations\n completedAnimations.forEach((id) => this.removeAnimation(id));\n\n // Continue loop if animations remain\n if (this.isRunning) {\n this.rafId = requestAnimationFrame(this.update);\n }\n }\n\n private applyEffects(particle: Particle, animation: AnimationInstance): void {\n const effects = animation.config?.effects;\n if (!effects) return;\n\n const { animationType } = animation;\n\n // Flutter effect for confetti\n if (effects.flutter && animationType === 'confetti') {\n particle.x += Math.sin(particle.life * 0.1) * 0.5;\n particle.rotation += Math.sin(particle.life * 0.05) * 2;\n }\n\n // Wind drift for snow/leaves\n if (\n effects.windDrift &&\n (animationType === 'snow' || animationType === 'leaves')\n ) {\n particle.x +=\n Math.sin(particle.life * 0.05 + particle.id.charCodeAt(0)) * 0.8;\n }\n\n // Wobble effect for bubbles\n if (effects.wobble && animationType === 'bubbles') {\n particle.x += Math.sin(particle.life * 0.08) * 0.3;\n particle.y += Math.cos(particle.life * 0.08) * 0.2;\n }\n }\n\n private handleMortarExplosion(\n particle: Particle,\n animation: AnimationInstance,\n newParticles: PooledParticle[]\n ): void {\n if (animation.animationType !== 'mortar' || !particle.element) return;\n\n try {\n const elementData = JSON.parse(particle.element as string);\n\n // Handle shell particles\n if (elementData.isShell && !elementData.hasExploded) {\n // Create trail particles as the shell rises\n if (animation.frameCount % 3 === 0) {\n const trailParticle = particlePool.acquire();\n Object.assign(trailParticle, {\n id: `${particle.id}-trail-${Date.now()}`,\n x: particle.x + randomInRange(-2, 2),\n y: particle.y + randomInRange(-2, 2),\n vx: randomInRange(-1, 1),\n vy: randomInRange(0, 2),\n life: 30,\n opacity: 0.8,\n size: particle.size * 0.7,\n rotation: 0,\n color: particle.color,\n element: JSON.stringify({ isTrail: true }),\n config: particle.config,\n });\n newParticles.push(trailParticle);\n }\n\n // Check if it's time to explode based on fixed timer\n const totalLife = particle.config?.lifetime ?? 200;\n const flightTime = totalLife - particle.life;\n const shouldExplode = flightTime >= (elementData.timeToExplode || 25);\n\n if (shouldExplode) {\n // Mark as exploded\n elementData.hasExploded = true;\n particle.element = JSON.stringify(elementData);\n\n // Create galaxy-style explosion with fewer particles for performance\n const isMobile = window.innerWidth < 768;\n const burstCount = isMobile ? 20 : 30; // Reduced particle count\n const explosionParticles: PooledParticle[] = [];\n\n // Galaxy colors for the explosion\n const galaxyColors = [\n '#FFFFFF',\n '#FFF9C4',\n '#BBDEFB',\n '#C5CAE9',\n '#D1C4E9',\n '#FFE082',\n '#FFCCBC',\n ];\n\n // Create spiral galaxy explosion\n for (let i = 0; i < burstCount; i++) {\n const progress = i / burstCount;\n const spiralAngle = progress * Math.PI * 6; // 3 full rotations\n const radius = progress * 80; // Explosion radius\n\n // Add randomness for natural look\n const angleOffset = randomInRange(-0.4, 0.4);\n const radiusOffset = randomInRange(-15, 15);\n\n const finalAngle = spiralAngle + angleOffset;\n const finalRadius = (radius + radiusOffset) * 0.5; // Smaller explosion\n\n // Velocity follows spiral tangent\n const tangentAngle = finalAngle + Math.PI / 2;\n const speed = 3 * (1 - progress * 0.3); // Outer particles slower\n\n const burstParticle = particlePool.acquire();\n Object.assign(burstParticle, {\n id: `${particle.id}-burst-${i}`,\n x: particle.x + Math.cos(finalAngle) * finalRadius * 0.1,\n y: particle.y + Math.sin(finalAngle) * finalRadius * 0.1,\n vx: Math.cos(tangentAngle) * speed + Math.cos(finalAngle) * 2,\n vy: Math.sin(tangentAngle) * speed + Math.sin(finalAngle) * 2,\n life: 120 - progress * 40, // Inner particles live longer\n opacity: 1,\n size: randomInRange(2, 5) * (1 - progress * 0.5),\n rotation: randomInRange(0, 360),\n color:\n galaxyColors[Math.floor(Math.random() * galaxyColors.length)],\n element: JSON.stringify({\n isBurst: true,\n isGalaxy: true,\n twinkle: Math.random() > 0.7,\n }),\n config: particle.config,\n });\n explosionParticles.push(burstParticle);\n }\n\n // Add fewer bright core particles\n const coreCount = isMobile ? 5 : 8;\n for (let i = 0; i < coreCount; i++) {\n const angle = (Math.PI * 2 * i) / coreCount;\n const coreParticle = particlePool.acquire();\n Object.assign(coreParticle, {\n id: `${particle.id}-core-${i}`,\n x: particle.x,\n y: particle.y,\n vx: Math.cos(angle) * randomInRange(1, 2),\n vy: Math.sin(angle) * randomInRange(1, 2),\n life: 60, // Shorter life\n opacity: 1,\n size: randomInRange(3, 5),\n rotation: 0,\n color: '#FFFFFF',\n element: JSON.stringify({\n isBurst: true,\n isCore: true,\n }),\n config: particle.config,\n });\n explosionParticles.push(coreParticle);\n }\n\n // Add center flash\n const flashParticle = particlePool.acquire();\n Object.assign(flashParticle, {\n id: `${particle.id}-flash`,\n x: particle.x,\n y: particle.y,\n vx: 0,\n vy: 0,\n life: 20,\n opacity: 1,\n size: 30,\n rotation: 0,\n color: '#ffffff',\n element: JSON.stringify({ isBurst: true }),\n config: particle.config,\n });\n explosionParticles.push(flashParticle);\n\n newParticles.push(...explosionParticles);\n }\n }\n } catch (e) {\n // Ignore parse errors\n }\n }\n\n private updateOpacity(\n particle: Particle,\n animation: AnimationInstance\n ): void {\n const { animationType, config } = animation;\n const effects = config?.effects;\n\n if (animationType === 'sparkles') {\n if (particle.life > 70) {\n particle.opacity = (100 - particle.life) / 30;\n } else if (particle.life < 30) {\n particle.opacity = particle.life / 30;\n }\n // Twinkle effect\n if (effects?.twinkle) {\n particle.opacity *= 0.5 + Math.sin(particle.life * 0.3) * 0.5;\n }\n } else if (animationType === 'stars' && effects?.twinkle) {\n // Twinkle effect for stars\n particle.opacity =\n (particle.life / 100) * (0.5 + Math.sin(particle.life * 0.3) * 0.5);\n } else {\n particle.opacity = particle.life / 100;\n }\n }\n\n getStats() {\n return {\n activeAnimations: this.animations.size,\n currentFps: this.currentFps,\n isRunning: this.isRunning,\n totalParticles: Array.from(this.animations.values()).reduce(\n (sum, anim) => sum + anim.particles.filter((p) => p.life > 0).length,\n 0\n ),\n };\n }\n\n // Adjust target frame rate for performance\n setTargetFPS(fps: number): void {\n this.frameInterval = 1000 / fps;\n }\n\n // Pause a specific animation\n pauseAnimation(id: string): void {\n const animation = this.animations.get(id);\n if (animation && !animation.isPaused) {\n animation.isPaused = true;\n animation.pausedAt = performance.now();\n }\n }\n\n // Resume a specific animation\n resumeAnimation(id: string): void {\n const animation = this.animations.get(id);\n if (animation && animation.isPaused) {\n animation.isPaused = false;\n\n // Restart RAF loop if needed\n if (this.animations.size > 0 && !this.isRunning) {\n this.start();\n }\n }\n }\n\n // Check if an animation is paused\n isAnimationPaused(id: string): boolean {\n const animation = this.animations.get(id);\n return animation ? !!animation.isPaused : false;\n }\n\n // Get animation by ID\n getAnimation(id: string): AnimationInstance | undefined {\n return this.animations.get(id);\n }\n}\n\n// Singleton instance\nexport const animationManager = new AnimationManager();\n","import {\n useCallback,\n useRef,\n useState,\n useEffect,\n RefObject,\n useMemo,\n} from 'react';\nimport React from 'react';\nimport { createRoot, Root } from 'react-dom/client';\nimport {\n AnimationType,\n AnimationConfig,\n Particle,\n AnimationControls,\n} from './types';\nimport { animations } from './animations';\nimport { createParticleStyle } from './utils';\nimport { optimizeConfigForMobile } from './mobileOptimizations';\nimport { animationManager } from './animationManager';\n\ninterface UseRewardReturn extends AnimationControls {\n reward: () => Promise<void>;\n isAnimating: boolean;\n targetRef?: RefObject<HTMLElement>;\n}\n\n// Overload signatures for better TypeScript support\nexport function useReward(\n elementId: string,\n animationType: AnimationType,\n config?: AnimationConfig\n): UseRewardReturn;\n\nexport function useReward(\n targetRef: RefObject<HTMLElement>,\n animationType: AnimationType,\n config?: AnimationConfig\n): UseRewardReturn;\n\nexport function useReward(\n elementIdOrRef: string | RefObject<HTMLElement>,\n animationType: AnimationType,\n config?: AnimationConfig\n): UseRewardReturn {\n const [isAnimating, setIsAnimating] = useState(false);\n const animationIdRef = useRef<string | null>(null);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const rootRef = useRef<Root | null>(null);\n\n // Create internal ref if string ID is provided\n const internalRef = useRef<HTMLElement>(null);\n const isUsingStringId = typeof elementIdOrRef === 'string';\n const targetRef = isUsingStringId ? internalRef : elementIdOrRef;\n\n const animate = useCallback(() => {\n return new Promise<void>((resolve) => {\n // Get element from ref or ID\n let element: HTMLElement | null = null;\n\n if (isUsingStringId) {\n // SSR safety check\n if (typeof document === 'undefined') return;\n element = document.getElementById(elementIdOrRef as string);\n } else {\n element = targetRef.current;\n }\n\n if (!element) {\n // Development warning - will be stripped by minifiers in production\n console.warn?.(\n `[Partycles] Element ${isUsingStringId ? `with ID \"${elementIdOrRef}\"` : 'from ref'} not found. ` +\n 'Make sure the element exists when reward() is called.'\n );\n resolve();\n return;\n }\n\n const rect = element.getBoundingClientRect();\n const origin = {\n x: rect.left + rect.width / 2,\n y: rect.top + rect.height / 2,\n };\n\n const animationHandler = animations[animationType];\n if (!animationHandler) {\n console.error(`Animation type \"${animationType}\" not found`);\n resolve();\n return;\n }\n\n // Apply mobile performance optimizations\n const optimizedConfig = config\n ? optimizeConfigForMobile(config)\n : undefined;\n\n // Create particles\n const particles = animationHandler\n .createParticles(origin, optimizedConfig || {})\n .map((particle) => ({\n ...particle,\n config: optimizedConfig || config, // Store config in particle for render functions\n }));\n\n // Create container\n // SSR safety check\n if (typeof document === 'undefined') {\n resolve();\n return;\n }\n\n const container = document.createElement('div');\n container.style.position = 'fixed';\n container.style.top = '0';\n container.style.left = '0';\n container.style.width = '100%';\n container.style.height = '100%';\n container.style.pointerEvents = 'none';\n container.style.zIndex = '9999';\n document.body.appendChild(container);\n containerRef.current = container;\n\n // Create React root\n const root = createRoot(container);\n rootRef.current = root;\n\n const containerRect = container.getBoundingClientRect();\n\n // Default gravity varies by animation type\n const defaultGravity =\n animationType === 'bubbles'\n ? -0.1\n : animationType === 'snow'\n ? 0.05\n : 0.35;\n const gravity =\n optimizedConfig?.physics?.gravity ??\n config?.physics?.gravity ??\n defaultGravity;\n const friction =\n optimizedConfig?.physics?.friction ?? config?.physics?.friction ?? 0.98;\n const wind = optimizedConfig?.physics?.wind ?? config?.physics?.wind ?? 0;\n\n // Create animation instance ID\n const animationId = `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n animationIdRef.current = animationId;\n\n // Update callback to render particles\n const updateCallback = (updatedParticles: Particle[]) => {\n if (rootRef.current) {\n rootRef.current.render(\n <React.Fragment>\n {updatedParticles\n .filter((p) => p.life > 0)\n .map((particle) => (\n <div\n key={particle.id}\n style={createParticleStyle(particle, containerRect)}\n >\n {animationHandler.renderParticle(particle)}\n </div>\n ))}\n </React.Fragment>\n );\n }\n };\n\n // Add animation to manager\n animationManager.addAnimation({\n id: animationId,\n particles,\n containerElement: container,\n renderFunction: animationHandler.renderParticle,\n updateCallback,\n onComplete: () => {\n // Cleanup\n if (rootRef.current) {\n rootRef.current.unmount();\n rootRef.current = null;\n }\n containerRef.current = null;\n animationIdRef.current = null;\n setIsAnimating(false);\n resolve();\n },\n physics: { gravity, friction, wind },\n animationType,\n config: optimizedConfig || config,\n frameCount: 0,\n });\n\n setIsAnimating(true);\n });\n }, [elementIdOrRef, animationType, config, isUsingStringId, targetRef]);\n\n const reward = useCallback(() => {\n if (!isAnimating) {\n return animate();\n }\n return Promise.resolve();\n }, [animate, isAnimating]);\n\n // Imperative control methods\n const pause = useCallback(() => {\n if (animationIdRef.current) {\n animationManager.pauseAnimation(animationIdRef.current);\n }\n }, []);\n\n const resume = useCallback(() => {\n if (animationIdRef.current) {\n animationManager.resumeAnimation(animationIdRef.current);\n }\n }, []);\n\n const replay = useCallback(() => {\n // First clean up existing animation if any\n if (animationIdRef.current) {\n animationManager.removeAnimation(animationIdRef.current);\n animationIdRef.current = null;\n }\n setIsAnimating(false);\n\n // Then start a new animation\n return animate();\n }, [animate]);\n\n const [animationId, setAnimationId] = useState<string | null>(null);\n\n // Update animation ID in state when it changes\n useEffect(() => {\n setAnimationId(animationIdRef.current);\n }, [isAnimating]);\n\n const isPaused = useMemo(() => {\n if (!animationId) return false;\n return animationManager.isAnimationPaused(animationId);\n }, [animationId]); // Re-compute when animation ID changes\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (animationIdRef.current) {\n animationManager.removeAnimation(animationIdRef.current);\n }\n if (rootRef.current) {\n rootRef.current.unmount();\n rootRef.current = null;\n }\n if (\n containerRef.current &&\n document.body.contains(containerRef.current)\n ) {\n document.body.removeChild(containerRef.current);\n containerRef.current = null;\n }\n };\n }, []);\n\n // Return ref only for ref-based API\n if (!isUsingStringId) {\n return { reward, isAnimating, targetRef, pause, resume, replay, isPaused };\n }\n\n return { reward, isAnimating, pause, resume, replay, isPaused };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils.ts","../src/particlePool.ts","../src/animations/confetti.tsx","../src/animations/sparkles.tsx","../src/animations/hearts.tsx","../src/animations/fireworks.tsx","../src/animations/bubbles.tsx","../src/animations/stars.tsx","../src/animations/snow.tsx","../src/animations/emoji.tsx","../src/animations/coins.tsx","../src/animations/petals.tsx","../src/animations/aurora.tsx","../src/animations/fireflies.tsx","../src/animations/paint.tsx","../src/animations/balloons.tsx","../src/animations/galaxy.tsx","../src/animations/glitch.tsx","../src/animations/magicdust.tsx","../src/animations/crystals.tsx","../src/animations/leaves.tsx","../src/animations/mortar.tsx","../src/animations/bokeh.tsx","../src/animations/index.ts","../src/mobileOptimizations.ts","../src/animationManager.ts","../src/useReward.tsx"],"names":["randomInRange","min","max","degreesToRadians","degrees","generateId","getRandomColor","colors","createParticleStyle","particle","_containerRect","ParticlePool","maxSize","particles","p","particlePool","createPooledParticle","props","createPooledParticles","count","factory","i","defaultColors","createConfettiParticles","origin","config","particleCount","startVelocity","elementSize","angle","velocity","color","renderConfettiParticle","_a","_b","flutterTransform","React","createSparkleParticles","spread","velocityScale","renderSparkleParticle","scale","twinkle","heartColors","createHeartParticles","horizontalDrift","renderHeartParticle","pulse","fireworkColors","createFireworkParticles","renderFireworkParticle","bubbleColors","createBubbleParticles","renderBubbleParticle","starColors","createStarParticles","renderStarParticle","snowColors","createSnowParticles","x","y","renderSnowParticle","defaultEmojis","celebrationEmojis","loveEmojis","happyEmojis","natureEmojis","foodEmojis","createEmojiParticles","emojis","renderEmojiParticle","emojiPresets","coinColors","createCoinParticles","renderCoinParticle","_c","_d","spinSpeed","currentRotation","petalColors","createPetalParticles","renderPetalParticle","spiralPhase","spiralX","wobble","auroraColors","createAuroraParticles","offset","renderAuroraParticle","wave","baseOpacity","fadeIn","fadeOut","opacity","fireflyColors","createFireflyParticles","renderFireflyParticle","floatX","floatY","glowIntensity","baseFade","paintColors","createPaintParticles","isMainSplat","renderPaintParticle","stretch","squish","isDripping","dripLength","balloonColors","createBalloonParticles","renderBalloonParticle","sway","bob","galaxyColors","createGalaxyParticles","progress","spiralAngle","radius","angleOffset","radiusOffset","finalAngle","finalRadius","offsetX","offsetY","tangentAngle","speed","renderGalaxyParticle","expansionRate","createGlitchParticles","channels","isHorizontal","channelIndex","channel","width","height","glitchOffset","encodedData","renderGlitchParticle","distortionAmount","mixBlendMode","createMagicDustParticles","offsetAngle","offsetDistance","renderMagicDustParticle","sparkleSize","createCrystalParticles","renderCrystalParticle","hue","createLeafParticles","renderLeafParticle","tumblePhase","swayPhase","swayAmount","rotationSpeed","tumble","swayX","rotation","mortarColors","createMortarParticles","shells","index","angleStep","targetColor","rad","timeToExplode","sparkArray","renderMortarParticle","elementData","e","trailOpacity","burstOpacity","twinkleOpacity","bokehColors","createBokehParticles","lifetime","distance","depth","size","renderBokehParticle","pulseAmount","currentSize","animations","isMobileDevice","userAgent","isMobileUA","isMobileWidth","hasTouch","optimizeConfigForMobile","__spreadProps","__spreadValues","shouldSkipFrame","frameCount","AnimationManager","animation","id","currentTime","deltaTime","completedAnimations","skipFrame","activeParticles","newParticles","effects","animationType","trailParticle","isMobile","burstCount","explosionParticles","burstParticle","coreCount","coreParticle","flashParticle","sum","anim","fps","animationManager","useReward","elementIdOrRef","isAnimating","setIsAnimating","useState","animationIdRef","useRef","containerRef","rootRef","internalRef","isUsingStringId","targetRef","animate","useCallback","resolve","_e","_f","_g","_h","_i","_j","_k","_l","_m","element","rect","animationHandler","optimizedConfig","container","root","createRoot","defaultGravity","gravity","friction","wind","animationId","updateCallback","updatedParticles","reward","pause","resume","replay","setAnimationId","useEffect","isPaused","useMemo"],"mappings":";mcAEO,IAAMA,CAAgB,CAAA,CAACC,CAAaC,CAAAA,CAAAA,GAClC,IAAK,CAAA,MAAA,IAAYA,CAAMD,CAAAA,CAAAA,CAAAA,CAAOA,CAG1BE,CAAAA,CAAAA,CAAoBC,CACvBA,EAAAA,CAAAA,CAAU,IAAK,CAAA,EAAA,CAAM,GAGlBC,CAAAA,CAAAA,CAAa,IACjB,IAAA,CAAK,MAAO,EAAA,CAAE,SAAS,EAAE,CAAA,CAAE,SAAU,CAAA,CAAA,CAAG,CAAC,CAAA,CAGrCC,CAAkBC,CAAAA,CAAAA,EAE3BA,CAAO,CAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAK,MAAO,EAAA,CAAIA,EAAO,MAAM,CAAC,CAAKA,EAAAA,CAAAA,CAAO,CAAC,CAAA,EAAK,SAIzDC,CAAAA,EAAAA,CAAsB,CACjCC,CAAAA,CACAC,CAEO,IAAA,CACL,QAAU,CAAA,UAAA,CACV,KAAM,CAAGD,EAAAA,CAAAA,CAAS,CAAC,CAAA,EAAA,CAAA,CACnB,GAAK,CAAA,CAAA,EAAGA,CAAS,CAAA,CAAC,CAClB,EAAA,CAAA,CAAA,KAAA,CAAO,CAAGA,EAAAA,CAAAA,CAAS,IAAI,CAAA,EAAA,CAAA,CACvB,OAAQ,CAAGA,EAAAA,CAAAA,CAAS,IAAI,CAAA,EAAA,CAAA,CACxB,SAAW,CAAA,CAAA,OAAA,EAAUA,CAAS,CAAA,QAAQ,CACtC,sCAAA,CAAA,CAAA,OAAA,CAASA,CAAS,CAAA,OAAA,CAClB,aAAe,CAAA,MAAA,CACf,UAAY,CAAA,MAAA,CACZ,UAAY,CAAA,oBACd,CC7BK,CAAA,CAAA,IAAME,CAAN,CAAA,KAAmB,CAKxB,WAAA,CAAYC,CAAkB,CAAA,GAAA,CAAM,CAJpC,IAAA,CAAQ,IAAyB,CAAA,GAEjC,IAAQ,CAAA,OAAA,CAAkB,CAGxB,CAAA,IAAA,CAAK,OAAUA,CAAAA,EACjB,CAEA,OAAA,EAA0B,CAExB,IAAMH,CAAW,CAAA,IAAA,CAAK,IAAK,CAAA,GAAA,GAE3B,OAAIA,CAAAA,EACFA,CAAS,CAAA,OAAA,CAAU,KACZA,CAAAA,CAAAA,GAIT,IAAK,CAAA,OAAA,EAAA,CACE,CACL,EAAA,CAAI,CAAI,CAAA,EAAA,IAAA,CAAK,OAAO,CAAA,CAAA,CACpB,EAAG,CACH,CAAA,CAAA,CAAG,CACH,CAAA,EAAA,CAAI,CACJ,CAAA,EAAA,CAAI,CACJ,CAAA,IAAA,CAAM,CACN,CAAA,OAAA,CAAS,CACT,CAAA,IAAA,CAAM,CACN,CAAA,QAAA,CAAU,EACV,KAAO,CAAA,EAAA,CACP,OAAS,CAAA,KACX,CACF,CAAA,CAEA,OAAQA,CAAAA,CAAAA,CAAgC,CAElCA,CAAAA,CAAS,OAAW,EAAA,IAAA,CAAK,IAAK,CAAA,MAAA,EAAU,KAAK,OAKjDA,GAAAA,CAAAA,CAAS,OAAU,CAAA,IAAA,CACnBA,CAAS,CAAA,OAAA,CAAU,MACnBA,CAAAA,CAAAA,CAAS,MAAS,CAAA,MAAA,CAGlB,IAAK,CAAA,IAAA,CAAK,IAAKA,CAAAA,CAAQ,GACzB,CAEA,UAAA,CAAWI,CAAmC,CAAA,CAC5CA,CAAU,CAAA,OAAA,CAASC,CAAM,EAAA,IAAA,CAAK,OAAQA,CAAAA,CAAC,CAAC,EAC1C,CAEA,KAAA,EAAc,CACZ,IAAK,CAAA,IAAA,CAAO,GACd,CAEA,QAAA,EAAW,CACT,OAAO,CACL,QAAA,CAAU,IAAK,CAAA,IAAA,CAAK,MACpB,CAAA,YAAA,CAAc,IAAK,CAAA,OAAA,CACnB,OAAS,CAAA,IAAA,CAAK,OAChB,CACF,CACF,CAAA,CAGaC,CAAe,CAAA,IAAIJ,EAGzB,SAASK,EAAqBC,CAAAA,CAAAA,CAA0C,CAC7E,IAAMR,EAAWM,CAAa,CAAA,OAAA,EAG9B,CAAA,OAAA,MAAA,CAAO,MAAON,CAAAA,CAAAA,CAAUQ,CAAK,CAAA,CAGxBA,CAAM,CAAA,EAAA,GACTR,CAAS,CAAA,EAAA,CAAK,CAAI,CAAA,EAAA,IAAA,CAAK,KAAK,CAAA,CAAA,EAAI,IAAK,CAAA,MAAA,EAAS,CAAA,QAAA,CAAS,EAAE,CAAA,CAAE,MAAO,CAAA,CAAA,CAAG,CAAC,CAAC,CAGlEA,CAAAA,CAAAA,CAAAA,CACT,CAGO,SAASS,CAAAA,CACdC,CACAC,CAAAA,CAAAA,CACkB,CAClB,IAAMP,CAA8B,CAAA,EAEpC,CAAA,IAAA,IAASQ,CAAI,CAAA,CAAA,CAAGA,CAAIF,CAAAA,CAAAA,CAAOE,IACzBR,CAAU,CAAA,IAAA,CAAKG,EAAqBI,CAAAA,CAAAA,CAAQC,CAAC,CAAC,CAAC,CAAA,CAGjD,OAAOR,CACT,CC7FA,IAAMS,EAAgB,CAAA,CACpB,UACA,SACA,CAAA,SAAA,CACA,SACA,CAAA,SAAA,CACA,SACA,CAAA,SAAA,CACA,SACA,CAAA,SAAA,CACA,SACA,CAAA,SAAA,CACA,SACA,CAAA,SAAA,CACA,SACA,CAAA,SAAA,CACA,SACF,CAEaC,CAAAA,EAAAA,CAA0B,CACrCC,CAAAA,CACAC,CACe,GAAA,CACf,GAAM,CACJ,aAAAC,CAAAA,CAAAA,CAAgB,EAChB,CAAA,aAAA,CAAAC,CAAgB,CAAA,EAAA,CAChB,OAAApB,CAASe,CAAAA,EAAAA,CACT,WAAAM,CAAAA,CAAAA,CAAc,EAChB,CAAA,CAAIH,CAEJ,CAAA,OAAOP,CAAsBQ,CAAAA,CAAAA,CAAe,IAAM,CAChD,IAAMG,CAAAA,CAAQ7B,CAAc,CAAA,CAAA,CAAG,GAAG,CAAA,CAC5B8B,CAAW9B,CAAAA,CAAAA,CAAc2B,CAAgB,CAAA,EAAA,CAAKA,CAAa,CAAA,CAC3DI,CAAQzB,CAAAA,CAAAA,CAAeC,CAAM,CAAA,CAEnC,OAAO,CACL,GAAIF,CAAW,EAAA,CACf,CAAGmB,CAAAA,CAAAA,CAAO,CACV,CAAA,CAAA,CAAGA,CAAO,CAAA,CAAA,CACV,EAAI,CAAA,IAAA,CAAK,GAAIrB,CAAAA,CAAAA,CAAiB0B,CAAK,CAAC,EAAIC,CACxC,CAAA,EAAA,CAAI,IAAK,CAAA,GAAA,CAAI3B,CAAiB0B,CAAAA,CAAK,CAAC,CAAA,CAAIC,CAAW,CAAA,EAAA,CACnD,IAAML,CAAAA,CAAAA,CAAO,QAAY,EAAA,GAAA,CACzB,QAAS,CACT,CAAA,IAAA,CAAMzB,CAAc4B,CAAAA,CAAAA,CAAc,EAAKA,CAAAA,CAAAA,CAAc,GAAG,CAAA,CACxD,QAAU5B,CAAAA,CAAAA,CAAc,CAAG,CAAA,GAAG,CAC9B,CAAA,KAAA,CAAA+B,CACF,CACF,CAAC,CACH,CAEaC,CAAAA,EAAAA,CAA0BvB,CAAwC,EAAA,CA5D/E,IAAAwB,CAAAA,CAAAC,CAmEE,CAAA,IAAMC,CAHgBD,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAD,CAHMxB,CAAAA,CAAAA,CAGc,SAApB,IAAAwB,CAAAA,MAAAA,CAAAA,CAAAA,CAA4B,OAA5B,GAAA,IAAA,CAAA,MAAA,CAAAC,CAAqC,CAAA,OAAA,GAIxCzB,CAAS,CAAA,IAAA,CAAO,CAC7B,CAAA,CAAA,QAAA,EAAW,IAAK,CAAA,GAAA,CAAIA,CAAS,CAAA,IAAA,CAAO,EAAG,CAAI,CAAA,GAAG,CAC9C,IAAA,CAAA,CAAA,EAAA,CAEN,OACE2B,kBAAAA,CAAA,aAAC,CAAA,KAAA,CAAA,CACC,GAAK3B,CAAAA,CAAAA,CAAS,EACd,CAAA,KAAA,CAAO,CACL,KAAA,CAAO,OACP,MAAQ,CAAA,KAAA,CACR,eAAiBA,CAAAA,CAAAA,CAAS,KAC1B,CAAA,YAAA,CAAc,KACd,CAAA,SAAA,CAAW,2BACX,CAAA,SAAA,CAAW0B,CACX,CAAA,cAAA,CAAgB,aAChB,CAAA,WAAA,CAAa,QACf,CAAA,CACF,CAEJ,CAAA,CClFO,IAAME,EAAyB,CAAA,CACpCb,CACAC,CAAAA,CAAAA,GACe,CACf,GAAM,CACJ,aAAA,CAAAC,EAAgB,EAChB,CAAA,MAAA,CAAAY,CAAS,CAAA,GAAA,CACT,aAAAX,CAAAA,CAAAA,CAAgB,EAChB,CAAA,WAAA,CAAAC,CAAc,CAAA,EAAA,CACd,MAAArB,CAAAA,CAAAA,CAAS,CAAC,SAAA,CAAW,SAAS,CAChC,CAAA,CAAIkB,CAEJ,CAAA,OAAOP,CAAsBQ,CAAAA,CAAAA,CAAe,IAAM,CAChD,IAAMa,CAAAA,CAAgBZ,CAAgB,CAAA,EAAA,CACtC,OAAO,CACL,GAAItB,CAAW,EAAA,CACf,CAAGmB,CAAAA,CAAAA,CAAO,CAAIxB,CAAAA,CAAAA,CAAc,CAACsC,CAAAA,CAAQA,CAAM,CAAA,CAC3C,CAAGd,CAAAA,CAAAA,CAAO,CAAIxB,CAAAA,CAAAA,CAAc,CAACsC,CAAQA,CAAAA,CAAM,CAC3C,CAAA,EAAA,CAAItC,CAAc,CAAA,EAAA,CAAI,CAAC,CAAA,CAAIuC,CAC3B,CAAA,EAAA,CAAIvC,CAAc,CAAA,EAAA,CAAI,CAAC,CAAA,CAAIuC,EAC3B,IAAMd,CAAAA,CAAAA,CAAO,QAAY,EAAA,GAAA,CACzB,OAAS,CAAA,CAAA,CACT,IAAMzB,CAAAA,CAAAA,CAAc4B,CAAc,CAAA,EAAA,CAAKA,CAAc,CAAA,GAAG,CACxD,CAAA,QAAA,CAAU5B,EAAc,CAAG,CAAA,GAAG,CAC9B,CAAA,KAAA,CACEO,CAAO,CAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAK,MAAO,EAAA,CAAIA,CAAO,CAAA,MAAM,CAAC,CAAA,EAChDA,EAAO,CAAC,CAAA,EACR,SACJ,CACF,CAAC,CACH,CAEaiC,CAAAA,EAAAA,CACX/B,CACoB,EAAA,CAvCtB,IAAAwB,CAAAA,CAAAC,CAwCE,CAAA,IAAMO,CAAQhC,CAAAA,CAAAA,CAAS,OAGjBiC,CAAAA,CAAAA,CAAAA,CAAUR,CAAAD,CAAAA,CAAAA,CAAAA,CAAAxB,CAAS,CAAA,MAAA,GAAT,IAAAwB,CAAAA,MAAAA,CAAAA,CAAAA,CAAiB,OAAjB,GAAA,IAAA,EAAAC,CAA0B,CAAA,OAAA,CACtC,EAAM,CAAA,IAAA,CAAK,IAAI,IAAK,CAAA,GAAA,CAAIzB,CAAS,CAAA,IAAA,CAAO,EAAG,CAAC,CAAI,CAAA,EAAA,CAChD,CAEJ,CAAA,OACE2B,kBAAA,CAAA,aAAA,CAAC,KACC,CAAA,CAAA,GAAA,CAAK3B,EAAS,EACd,CAAA,KAAA,CAAM,MACN,CAAA,MAAA,CAAO,MACP,CAAA,OAAA,CAAQ,WACR,CAAA,KAAA,CAAO,CACL,SAAA,CAAW,CAASgC,MAAAA,EAAAA,CAAK,CAAYhC,SAAAA,EAAAA,CAAAA,CAAS,QAAQ,CACtD,IAAA,CAAA,CAAA,MAAA,CAAQ,6CACR,CAAA,OAAA,CAASiC,CACT,CAAA,UAAA,CAAY,uBACd,CAAA,CAAA,CAEAN,kBAAA,CAAA,aAAA,CAAC,MACC,CAAA,CAAA,CAAA,CAAE,0EACF,CAAA,IAAA,CAAM3B,EAAS,KACjB,CAAA,CACF,CAEJ,CAAA,CC7DA,IAAMkC,EAAc,CAAA,CAAC,SAAW,CAAA,SAAA,CAAW,SAAW,CAAA,SAAA,CAAW,SAAS,CAE7DC,CAAAA,EAAAA,CAAuB,CAClCpB,CAAAA,CACAC,CACe,GAAA,CACf,GAAM,CACJ,aAAAC,CAAAA,CAAAA,CAAgB,EAChB,CAAA,aAAA,CAAAC,CAAgB,CAAA,EAAA,CAChB,OAAApB,CAASoC,CAAAA,EAAAA,CACT,WAAAf,CAAAA,CAAAA,CAAc,EAChB,CAAA,CAAIH,CAEJ,CAAA,OAAOP,CAAsBQ,CAAAA,CAAAA,CAAe,IAAM,CAChD,IAAMG,CAAAA,CAAQ7B,EAAc,GAAK,CAAA,IAAI,CAC/B8B,CAAAA,CAAAA,CAAW9B,CAAc2B,CAAAA,CAAAA,CAAgB,EAAKA,CAAAA,CAAAA,CAAgB,GAAG,CAAA,CACjEkB,CAAkB7C,CAAAA,CAAAA,CAAc,EAAI,CAAA,CAAC,CAE3C,CAAA,OAAO,CACL,EAAA,CAAIK,CAAW,EAAA,CACf,CAAGmB,CAAAA,CAAAA,CAAO,CAAIxB,CAAAA,CAAAA,CAAc,GAAK,CAAA,EAAE,CACnC,CAAA,CAAA,CAAGwB,CAAO,CAAA,CAAA,CACV,GAAI,IAAK,CAAA,GAAA,CAAKK,CAAQ,CAAA,IAAA,CAAK,EAAM,CAAA,GAAG,CAAIC,CAAAA,CAAAA,CAAWe,CACnD,CAAA,EAAA,CAAI,IAAK,CAAA,GAAA,CAAKhB,CAAQ,CAAA,IAAA,CAAK,GAAM,GAAG,CAAA,CAAIC,CACxC,CAAA,IAAA,CAAML,CAAO,CAAA,QAAA,EAAY,GACzB,CAAA,OAAA,CAAS,CACT,CAAA,IAAA,CAAMzB,CAAc4B,CAAAA,CAAAA,CAAc,EAAKA,CAAAA,CAAAA,CAAc,GAAG,CACxD,CAAA,QAAA,CAAU5B,CAAc,CAAA,GAAA,CAAK,EAAE,CAAA,CAC/B,KAAOM,CAAAA,CAAAA,CAAeC,CAAM,CAC9B,CACF,CAAC,CACH,CAAA,CAEauC,GACXrC,CACoB,EAAA,CAxCtB,IAAAwB,CAAAA,CAAAC,CA0CE,CAAA,IAAMa,CAAQb,CAAAA,CAAAA,CAAAA,CAAAA,CAAAD,CAAAxB,CAAAA,CAAAA,CAAS,MAAT,GAAA,IAAA,CAAA,MAAA,CAAAwB,CAAiB,CAAA,OAAA,GAAjB,MAAAC,CAA0B,CAAA,KAAA,CACpC,CAAI,CAAA,IAAA,CAAK,GAAIzB,CAAAA,CAAAA,CAAS,IAAO,CAAA,EAAG,CAAI,CAAA,EAAA,CACpC,CAEJ,CAAA,OACE2B,kBAAA,CAAA,aAAA,CAAC,OACC,GAAK3B,CAAAA,CAAAA,CAAS,EACd,CAAA,KAAA,CAAM,MACN,CAAA,MAAA,CAAO,MACP,CAAA,OAAA,CAAQ,WACR,CAAA,IAAA,CAAMA,CAAS,CAAA,KAAA,CACf,KAAO,CAAA,CACL,OAAQ,CAAmBA,gBAAAA,EAAAA,CAAAA,CAAS,IAAO,CAAA,GAAI,CAAMA,GAAAA,EAAAA,CAAAA,CAAS,KAAK,CAAA,CAAA,CAAA,CACnE,SAAW,CAAA,CAAA,MAAA,EAASsC,CAAK,CAAA,CAAA,CAAA,CACzB,UAAY,CAAA,yBACd,CAEAX,CAAAA,CAAAA,kBAAAA,CAAA,aAAC,CAAA,MAAA,CAAA,CAAK,CAAE,CAAA,gLAAA,CAAiL,CAC3L,CAEJ,CC9DA,CAUA,IAAMY,EAAAA,CAAiB,CACrB,SAAA,CACA,UACA,SACA,CAAA,SAAA,CACA,SACA,CAAA,SAAA,CACA,SACF,CAAA,CAEaC,EAA0B,CAAA,CACrCzB,CACAC,CAAAA,CAAAA,GACe,CACf,GAAM,CACJ,aAAA,CAAAC,EAAgB,EAChB,CAAA,aAAA,CAAAC,CAAgB,CAAA,EAAA,CAChB,MAAApB,CAAAA,CAAAA,CAASyC,EACT,CAAA,WAAA,CAAApB,CAAc,CAAA,CAChB,CAAIH,CAAAA,CAAAA,CAEJ,OAAOP,CAAAA,CAAsBQ,EAAgBL,CAAM,EAAA,CACjD,IAAMQ,CAAAA,CAAS,GAAMH,CAAAA,CAAAA,CAAiBL,CAAIrB,CAAAA,CAAAA,CAAc,EAAI,CAAA,CAAC,CACvD8B,CAAAA,CAAAA,CAAW9B,CAAc2B,CAAAA,CAAAA,CAAgB,EAAKA,CAAAA,CAAAA,CAAgB,GAAG,CAAA,CACjEI,CAAQzB,CAAAA,CAAAA,CAAeC,CAAM,CAAA,CAEnC,OAAO,CACL,EAAIF,CAAAA,CAAAA,EACJ,CAAA,CAAA,CAAGmB,CAAO,CAAA,CAAA,CACV,EAAGA,CAAO,CAAA,CAAA,CACV,EAAI,CAAA,IAAA,CAAK,GAAIrB,CAAAA,CAAAA,CAAiB0B,CAAK,CAAC,CAAIC,CAAAA,CAAAA,CACxC,EAAI,CAAA,IAAA,CAAK,GAAI3B,CAAAA,CAAAA,CAAiB0B,CAAK,CAAC,CAAA,CAAIC,CAAW,CAAA,EAAA,CACnD,IAAML,CAAAA,CAAAA,CAAO,QAAY,EAAA,GAAA,CACzB,OAAS,CAAA,CAAA,CACT,IAAMzB,CAAAA,CAAAA,CAAc4B,CAAc,CAAA,EAAA,CAAKA,EAAc,GAAG,CAAA,CACxD,QAAU,CAAA,CAAA,CACV,KAAAG,CAAAA,CACF,CACF,CAAC,CACH,CAAA,CAEamB,EAA0BzC,CAAAA,CAAAA,EAEnC2B,kBAAA,CAAA,aAAA,CAAC,KACC,CAAA,CAAA,GAAA,CAAK3B,CAAS,CAAA,EAAA,CACd,KAAO,CAAA,CACL,KAAO,CAAA,MAAA,CACP,MAAQ,CAAA,MAAA,CACR,eAAiB,CAAA,SAAA,CACjB,YAAc,CAAA,KAAA,CACd,SAAW,CAAA;AAAA,cAAA,EACHA,CAAS,CAAA,IAAI,CAAMA,GAAAA,EAAAA,CAAAA,CAAS,KAAK,CAAA;AAAA,cAAA,EACjCA,CAAS,CAAA,IAAA,CAAO,CAAC,CAAA,GAAA,EAAMA,EAAS,KAAK,CAAA;AAAA,cAAA,EACrCA,CAAS,CAAA,IAAA,CAAO,CAAC,CAAA,GAAA,EAAMA,EAAS,KAAK,CAAA;AAAA,cAAA,EACrCA,CAAS,CAAA,IAAA,CAAO,CAAC,CAAA,GAAA,EAAMA,EAAS,KAAK;AAAA,QAAA,CAAA,CAE7C,UAAY,CAAA,CAAA,oCAAA,EAAuCA,CAAS,CAAA,KAAK,CACnE,sBAAA,CAAA,CAAA,CACF,CCpEJ,CAKA,IAAM0C,EAAAA,CAAe,CACnB,yBAAA,CACA,yBACA,CAAA,yBAAA,CACA,0BACF,CAAA,CAEaC,EAAwB,CAAA,CACnC5B,CACAC,CAAAA,CAAAA,GACe,CACf,GAAM,CACJ,aAAA,CAAAC,CAAgB,CAAA,EAAA,CAChB,OAAAY,CAAS,CAAA,EAAA,CACT,aAAAX,CAAAA,CAAAA,CAAgB,CAChB,CAAA,MAAA,CAAApB,CAAS4C,CAAAA,EAAAA,CACT,WAAAvB,CAAAA,CAAAA,CAAc,EAChB,CAAA,CAAIH,CAEJ,CAAA,OAAOP,CAAsBQ,CAAAA,CAAAA,CAAe,KACnC,CACL,EAAA,CAAIrB,CAAW,EAAA,CACf,CAAGmB,CAAAA,CAAAA,CAAO,CAAIxB,CAAAA,CAAAA,CAAc,CAACsC,CAAAA,CAAQA,CAAM,CAAA,CAC3C,CAAGd,CAAAA,CAAAA,CAAO,CACV,CAAA,EAAA,CAAIxB,EAAc,EAAI,CAAA,CAAC,CACvB,CAAA,EAAA,CAAI,CAACA,CAAAA,CAAc2B,CAAgB,CAAA,EAAA,CAAKA,CAAgB,CAAA,GAAG,CAC3D,CAAA,IAAA,CAAMF,CAAO,CAAA,QAAA,EAAY,GACzB,CAAA,OAAA,CAAS,EACT,CAAA,IAAA,CAAMzB,CAAc4B,CAAAA,CAAAA,CAAc,EAAKA,CAAAA,CAAAA,CAAc,GAAG,CAAA,CACxD,QAAU,CAAA,CAAA,CACV,KACErB,CAAAA,CAAAA,CAAO,IAAK,CAAA,KAAA,CAAM,IAAK,CAAA,MAAA,GAAWA,CAAO,CAAA,MAAM,CAAC,CAAA,EAChDA,CAAO,CAAA,CAAC,CACR,EAAA,SACJ,CACD,CAAA,CACH,CAEa8C,CAAAA,EAAAA,CAAwB5C,CAEjC2B,EAAAA,kBAAAA,CAAA,aAAC,CAAA,KAAA,CAAA,CACC,IAAK3B,CAAS,CAAA,EAAA,CACd,KAAO,CAAA,CACL,KAAO,CAAA,MAAA,CACP,MAAQ,CAAA,MAAA,CACR,eAAiBA,CAAAA,CAAAA,CAAS,KAC1B,CAAA,YAAA,CAAc,KACd,CAAA,MAAA,CAAQ,oCACR,CAAA,eAAA,CACE,4EACF,SAAW,CAAA;AAAA,oBACGA,EAAAA,CAAAA,CAAS,KAAO,EAAG,CAAA;AAAA,cAAA,EACzBA,CAAS,CAAA,IAAA,CAAO,EAAG,CAAA,GAAA,EAAMA,EAAS,KAAK;AAAA,QAAA,CAEjD,EACF,CC5DJ,CAKA,IAAM6C,EAAa,CAAA,CAAC,SAAW,CAAA,SAAA,CAAW,UAAW,SAAS,CAAA,CAEjDC,EAAsB,CAAA,CACjC/B,EACAC,CACe,GAAA,CACf,GAAM,CACJ,cAAAC,CAAgB,CAAA,EAAA,CAChB,aAAAC,CAAAA,CAAAA,CAAgB,GAChB,MAAApB,CAAAA,CAAAA,CAAS+C,EACT,CAAA,WAAA,CAAA1B,EAAc,EAChB,CAAA,CAAIH,EAEJ,OAAOP,CAAAA,CAAsBQ,EAAe,IAAM,CAChD,IAAMG,CAAAA,CAAQ7B,EAAc,CAAG,CAAA,GAAG,CAC5B8B,CAAAA,CAAAA,CAAW9B,EAAc2B,CAAgB,CAAA,EAAA,CAAKA,CAAa,CAAA,CAEjE,OAAO,CACL,EAAA,CAAItB,CAAW,EAAA,CACf,EAAGmB,CAAO,CAAA,CAAA,CACV,CAAGA,CAAAA,CAAAA,CAAO,EACV,EAAI,CAAA,IAAA,CAAK,GAAKK,CAAAA,CAAAA,CAAQ,KAAK,EAAM,CAAA,GAAG,CAAIC,CAAAA,CAAAA,CACxC,GAAI,IAAK,CAAA,GAAA,CAAKD,EAAQ,IAAK,CAAA,EAAA,CAAM,GAAG,CAAIC,CAAAA,CAAAA,CAAW,EACnD,CAAA,IAAA,CAAML,EAAO,QAAY,EAAA,GAAA,CACzB,OAAS,CAAA,CAAA,CACT,KAAMzB,CAAc4B,CAAAA,CAAAA,CAAc,EAAKA,CAAAA,CAAAA,CAAc,GAAG,CACxD,CAAA,QAAA,CAAU5B,CAAc,CAAA,CAAA,CAAG,GAAG,CAC9B,CAAA,KAAA,CACEO,CAAO,CAAA,IAAA,CAAK,MAAM,IAAK,CAAA,MAAA,EAAWA,CAAAA,CAAAA,CAAO,MAAM,CAAC,CAAA,EAChDA,CAAO,CAAA,CAAC,GACR,SACJ,CACF,CAAC,CACH,CAAA,CAEaiD,GACX/C,CACoB,EAAA,CA1CtB,IAAAwB,CAAAA,CAAAC,EA4CE,IAAMQ,CAAAA,CAAAA,CAAUR,CAAAD,CAAAA,CAAAA,CAAAA,CAAAxB,EAAS,MAAT,GAAA,IAAA,CAAA,MAAA,CAAAwB,CAAiB,CAAA,OAAA,GAAjB,MAAAC,CAA0B,CAAA,OAAA,CACtC,EAAM,CAAA,IAAA,CAAK,IAAI,IAAK,CAAA,GAAA,CAAIzB,CAAS,CAAA,IAAA,CAAO,GAAI,CAAC,CAAA,CAAI,EACjD,CAAA,CAAA,CAEJ,OACE2B,kBAAA,CAAA,aAAA,CAAC,KACC,CAAA,CAAA,GAAA,CAAK3B,EAAS,EACd,CAAA,KAAA,CAAM,OACN,MAAO,CAAA,MAAA,CACP,QAAQ,WACR,CAAA,IAAA,CAAMA,CAAS,CAAA,KAAA,CACf,MAAO,CACL,MAAA,CAAQ,CAAmBA,gBAAAA,EAAAA,CAAAA,CAAS,KAAO,EAAG,CAAA,GAAA,EAAMA,CAAS,CAAA,KAAK,IAClE,OAASiC,CAAAA,CAAAA,CACT,UAAY,CAAA,uBACd,GAEAN,kBAAA,CAAA,aAAA,CAAC,MAAK,CAAA,CAAA,CAAA,CAAE,uGAAuG,CACjH,CAEJ,CChEA,CAKA,IAAMqB,EAAa,CAAA,CAAC,UAAW,SAAW,CAAA,SAAA,CAAW,SAAS,CAEjDC,CAAAA,EAAAA,CAAsB,CACjClC,CACAC,CAAAA,CAAAA,GACe,CACf,GAAM,CACJ,aAAAC,CAAAA,CAAAA,CAAgB,EAChB,CAAA,MAAA,CAAAY,EAAS,GACT,CAAA,aAAA,CAAAX,CAAgB,CAAA,CAAA,CAChB,OAAApB,CAASkD,CAAAA,EAAAA,CACT,WAAA7B,CAAAA,CAAAA,CAAc,EAChB,CAAIH,CAAAA,CAAAA,CAEJ,OAAOP,CAAAA,CAAsBQ,EAAe,IAAM,CAEhD,IAAMiC,CAAAA,CAAInC,EAAO,CAAIxB,CAAAA,CAAAA,CAAc,CAACsC,CAAAA,CAAS,EAAGA,CAAS,CAAA,CAAC,EACpDsB,CAAIpC,CAAAA,CAAAA,CAAO,EAAIxB,CAAc,CAAA,GAAA,CAAK,GAAG,CAAA,CAE3C,OAAO,CACL,EAAA,CAAIK,CAAW,EAAA,CACf,EAAAsD,CACA,CAAA,CAAA,CAAAC,CACA,CAAA,EAAA,CAAI5D,EAAc,IAAM,CAAA,EAAG,CAC3B,CAAA,EAAA,CAAIA,EAAc2B,CAAgB,CAAA,EAAA,CAAKA,CAAgB,CAAA,GAAG,EAC1D,IAAMF,CAAAA,CAAAA,CAAO,QAAY,EAAA,GAAA,CACzB,QAASzB,CAAc,CAAA,EAAA,CAAK,EAAG,CAAA,CAC/B,KAAMA,CAAc4B,CAAAA,CAAAA,CAAc,GAAKA,CAAW,CAAA,CAClD,SAAU5B,CAAc,CAAA,CAAA,CAAG,GAAG,CAAA,CAC9B,MACEO,CAAO,CAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAK,QAAWA,CAAAA,CAAAA,CAAO,MAAM,CAAC,GAChDA,CAAO,CAAA,CAAC,GACR,SACJ,CACF,CAAC,CACH,CAAA,CAEasD,EAAsBpD,CAAAA,CAAAA,EAE/B2B,mBAAA,aAAC,CAAA,KAAA,CAAA,CACC,GAAK3B,CAAAA,CAAAA,CAAS,GACd,KAAO,CAAA,CACL,KAAO,CAAA,MAAA,CACP,OAAQ,MACR,CAAA,eAAA,CAAiBA,EAAS,KAC1B,CAAA,YAAA,CAAc,MACd,SAAW,CAAA;AAAA,cACHA,EAAAA,CAAAA,CAAS,KAAO,EAAG,CAAA;AAAA,oBACbA,EAAAA,CAAAA,CAAS,KAAO,EAAG,CAAA;AAAA,QAEjC,CAAA,CAAA,MAAA,CAAQ,aACV,CACF,CAAA,CAAA,CCnDEqD,IAAAA,EAAAA,CAAgB,CAAC,WAAA,CAAM,YAAM,WAAM,CAAA,WAAA,CAAM,SAAK,WAAM,CAAA,WAAA,CAAM,WAAI,CAC9DC,CAAAA,EAAAA,CAAoB,CAAC,WAAA,CAAM,WAAM,CAAA,WAAA,CAAM,YAAM,WAAM,CAAA,WAAA,CAAM,YAAM,WAAI,CAAA,CACnEC,GAAa,CAAC,cAAA,CAAM,WAAM,CAAA,WAAA,CAAM,WAAM,CAAA,WAAA,CAAM,YAAM,WAAM,CAAA,WAAI,EAC5DC,EAAc,CAAA,CAAC,YAAM,WAAM,CAAA,WAAA,CAAM,WAAM,CAAA,WAAA,CAAM,WAAM,CAAA,WAAA,CAAM,WAAI,CAC7DC,CAAAA,EAAAA,CAAe,CAAC,WAAM,CAAA,WAAA,CAAM,YAAM,WAAM,CAAA,WAAA,CAAM,WAAM,CAAA,WAAA,CAAM,WAAI,CAAA,CAC9DC,GAAa,CAAC,WAAA,CAAM,YAAM,WAAM,CAAA,WAAA,CAAM,YAAM,WAAM,CAAA,WAAA,CAAM,WAAI,CAAA,CAMrDC,EAAuB,CAAA,CAClC5C,EACAC,CACe,GAAA,CACf,GAAM,CACJ,aAAA,CAAAC,EAAgB,EAChB,CAAA,MAAA,CAAAY,CAAS,CAAA,GAAA,CACT,aAAAX,CAAAA,CAAAA,CAAgB,GAChB,WAAAC,CAAAA,CAAAA,CAAc,EACd,CAAA,MAAA,CAAAyC,CAASP,CAAAA,EACX,EAAIrC,CAEJ,CAAA,OAAOP,CAAsBQ,CAAAA,CAAAA,CAAe,IAAM,CAChD,IAAMG,CAAQ7B,CAAAA,CAAAA,CAAc,IAAK,IAAI,CAAA,CAC/B8B,EAAW9B,CAAc2B,CAAAA,CAAAA,CAAgB,EAAKA,CAAAA,CAAAA,CAAgB,GAAG,CAAA,CAEvE,OAAO,CACL,EAAA,CAAItB,GACJ,CAAA,CAAA,CAAGmB,EAAO,CAAIxB,CAAAA,CAAAA,CAAc,CAACsC,CAAAA,CAAQA,CAAM,CAAA,CAC3C,EAAGd,CAAO,CAAA,CAAA,CACV,GAAI,IAAK,CAAA,GAAA,CAAKK,EAAQ,IAAK,CAAA,EAAA,CAAM,GAAG,CAAA,CAAIC,CACxC,CAAA,EAAA,CAAI,KAAK,GAAKD,CAAAA,CAAAA,CAAQ,KAAK,EAAM,CAAA,GAAG,EAAIC,CACxC,CAAA,IAAA,CAAML,CAAO,CAAA,QAAA,EAAY,GACzB,CAAA,OAAA,CAAS,EACT,IAAMzB,CAAAA,CAAAA,CAAc4B,EAAc,EAAKA,CAAAA,CAAAA,CAAc,GAAG,CACxD,CAAA,QAAA,CAAU5B,CAAc,CAAA,GAAA,CAAK,EAAE,CAAA,CAC/B,MAAO,EACP,CAAA,OAAA,CAASqE,EAAO,IAAK,CAAA,KAAA,CAAM,KAAK,MAAO,EAAA,CAAIA,CAAO,CAAA,MAAM,CAAC,CAC3D,CACF,CAAC,CACH,EAEaC,EAAuB7D,CAAAA,CAAAA,EAEhC2B,mBAAA,aAAC,CAAA,KAAA,CAAA,CACC,GAAK3B,CAAAA,CAAAA,CAAS,EACd,CAAA,KAAA,CAAO,CACL,QAAU,CAAA,CAAA,EAAGA,CAAS,CAAA,IAAI,CAC1B,EAAA,CAAA,CAAA,UAAA,CAAY,EACZ,UAAY,CAAA,MAAA,CACZ,MAAQA,CAAAA,CAAAA,CAAS,OAAU,CAAA,EAAA,CAAM,YAAc,MACjD,CAAA,CAAA,CAECA,EAAS,OACZ,CAAA,CAKS8D,GAAe,CAC1B,WAAA,CAAaR,EACb,CAAA,IAAA,CAAMC,EACN,CAAA,KAAA,CAAOC,GACP,MAAQC,CAAAA,EAAAA,CACR,KAAMC,EACN,CAAA,OAAA,CAASL,EACX,ECpEA,IAAMU,EAAAA,CAAa,CAAC,SAAW,CAAA,SAAA,CAAW,UAAW,SAAS,CAAA,CAEjDC,GAAsB,CACjCjD,CAAAA,CACAC,CACe,GAAA,CACf,GAAM,CACJ,cAAAC,CAAgB,CAAA,EAAA,CAChB,OAAAY,CAAS,CAAA,EAAA,CACT,cAAAX,CAAgB,CAAA,EAAA,CAChB,MAAApB,CAAAA,CAAAA,CAASiE,EACT,CAAA,WAAA,CAAA5C,EAAc,EAChB,CAAA,CAAIH,EAEJ,OAAOP,CAAAA,CAAsBQ,EAAe,IAAM,CAChD,IAAMG,CAAAA,CAAQ7B,CAAc,CAAA,CAACsC,EAAS,CAAGA,CAAAA,CAAAA,CAAS,CAAC,CAAK,EAAA,IAAA,CAAK,GAAK,GAC5DR,CAAAA,CAAAA,CAAAA,CAAW9B,CAAc2B,CAAAA,CAAAA,CAAgB,EAAKA,CAAAA,CAAa,EAEjE,OAAO,CACL,GAAItB,CAAW,EAAA,CACf,EAAGmB,CAAO,CAAA,CAAA,CACV,CAAGA,CAAAA,CAAAA,CAAO,CACV,CAAA,EAAA,CAAI,KAAK,GAAIK,CAAAA,CAAK,CAAIC,CAAAA,CAAAA,CACtB,EAAI,CAAA,CAAC,KAAK,GAAID,CAAAA,CAAK,CAAIC,CAAAA,CAAAA,CACvB,IAAML,CAAAA,CAAAA,CAAO,UAAY,GACzB,CAAA,OAAA,CAAS,EACT,IAAMzB,CAAAA,CAAAA,CAAc4B,EAAc,EAAKA,CAAAA,CAAAA,CAAc,GAAG,CAAA,CACxD,QAAU5B,CAAAA,CAAAA,CAAc,EAAG,GAAG,CAAA,CAC9B,MACEO,CAAO,CAAA,IAAA,CAAK,MAAM,IAAK,CAAA,MAAA,EAAWA,CAAAA,CAAAA,CAAO,MAAM,CAAC,GAChDA,CAAO,CAAA,CAAC,GACR,SACJ,CACF,CAAC,CACH,CAAA,CAEamE,EACXjE,CAAAA,CAAAA,EACoB,CA3CtB,IAAAwB,EAAAC,CAAAyC,CAAAA,CAAAA,CAAAC,EA4CE,IAAMC,CAAAA,CAAAA,CAAY3C,GAAAD,CAAAxB,CAAAA,CAAAA,CAAS,MAAT,GAAA,IAAA,CAAA,MAAA,CAAAwB,CAAiB,CAAA,OAAA,GAAjB,MAAAC,CAA0B,CAAA,MAAA,CAAS,EAAI,CACnD4C,CAAAA,CAAAA,CAAAA,CAAmB,IAAMrE,CAAS,CAAA,IAAA,EAAQoE,CAEhD,CAAA,OACEzC,kBAAA,CAAA,aAAA,CAAC,OACC,GAAK3B,CAAAA,CAAAA,CAAS,GACd,KAAO,CAAA,CACL,MAAO,MACP,CAAA,MAAA,CAAQ,MACR,CAAA,UAAA,CAAY,CAAuCA,oCAAAA,EAAAA,CAAAA,CAAS,KAAK,CACjE,UAAA,CAAA,CAAA,YAAA,CAAc,MACd,SAAWmE,CAAAA,CAAAA,CAAAA,CAAAA,CAAAD,EAAAlE,CAAS,CAAA,MAAA,GAAT,IAAAkE,CAAAA,MAAAA,CAAAA,CAAAA,CAAiB,OAAjB,GAAA,IAAA,EAAAC,EAA0B,MACjC,CAAA,CAAA,QAAA,EAAWE,CAAe,CAAA,IAAA,CAAA,CAC1B,CAAUA,OAAAA,EAAAA,CAAe,OAC7B,cAAgB,CAAA,aAAA,CAChB,WAAa,CAAA,QAAA,CACb,SAAW,CAAA;AAAA;AAAA;AAAA;AAAA,QAKX,CAAA,CAAA,MAAA,CAAQ,CAAarE,UAAAA,EAAAA,CAAAA,CAAS,KAAK,CAAA,CAAA,CACnC,QAAU,CAAA,UAAA,CACV,QAAU,CAAA,QACZ,CAGA2B,CAAAA,CAAAA,kBAAAA,CAAA,aAAC,CAAA,KAAA,CAAA,CACC,MAAO,CACL,QAAA,CAAU,UACV,CAAA,GAAA,CAAK,KACL,CAAA,IAAA,CAAM,KACN,CAAA,SAAA,CAAW,uBACX,CAAA,QAAA,CAAU,CAAG3B,EAAAA,CAAAA,CAAS,IAAO,CAAA,EAAG,KAChC,UAAY,CAAA,MAAA,CACZ,KAAO,CAAA,SAAA,CACP,UAAY,CAAA,gCAAA,CACZ,UAAY,CAAA,mBAAA,CACZ,OAAS,CAAA,CACX,CACD,CAAA,CAAA,GAED,CACF,CAEJ,CCzFA,CAKA,IAAMsE,EAAAA,CAAc,CAAC,SAAA,CAAW,SAAW,CAAA,SAAA,CAAW,SAAW,CAAA,SAAS,CAE7DC,CAAAA,EAAAA,CAAuB,CAClCxD,CAAAA,CACAC,IACe,CACf,GAAM,CACJ,aAAA,CAAAC,CAAgB,CAAA,EAAA,CAChB,MAAAY,CAAAA,CAAAA,CAAS,GACT,CAAA,aAAA,CAAAX,CAAgB,CAAA,CAAA,CAChB,MAAApB,CAAAA,CAAAA,CAASwE,GACT,WAAAnD,CAAAA,CAAAA,CAAc,EAChB,CAAA,CAAIH,CAEJ,CAAA,OAAOP,CAAsBQ,CAAAA,CAAAA,CAAe,IAAM,CAChD,IAAMG,CAAAA,CAAQ7B,CAAc,CAAA,CAACsC,EAAS,CAAGA,CAAAA,CAAAA,CAAS,CAAC,CAAA,EAAK,IAAK,CAAA,EAAA,CAAK,GAC5DR,CAAAA,CAAAA,CAAAA,CAAW9B,CAAc2B,CAAAA,CAAAA,CAAgB,EAAKA,CAAAA,CAAa,CAEjE,CAAA,OAAO,CACL,EAAA,CAAItB,CAAW,EAAA,CACf,CAAGmB,CAAAA,CAAAA,CAAO,CAAIxB,CAAAA,CAAAA,CAAc,GAAK,CAAA,EAAE,CACnC,CAAA,CAAA,CAAGwB,CAAO,CAAA,CAAA,CAAIxB,CAAc,CAAA,CAAA,CAAG,EAAE,CACjC,CAAA,EAAA,CAAI,IAAK,CAAA,GAAA,CAAI6B,CAAK,CAAA,CAAIC,CACtB,CAAA,EAAA,CAAI9B,CAAc,CAAA,CAAA,CAAG,CAAC,CAAA,CACtB,IAAMyB,CAAAA,CAAAA,CAAO,UAAY,GACzB,CAAA,OAAA,CAASzB,CAAc,CAAA,EAAA,CAAK,CAAC,CAAA,CAC7B,IAAMA,CAAAA,CAAAA,CAAc4B,CAAc,CAAA,EAAA,CAAKA,CAAc,CAAA,GAAG,CACxD,CAAA,QAAA,CAAU5B,EAAc,CAAG,CAAA,GAAG,CAC9B,CAAA,KAAA,CACEO,CAAO,CAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAK,MAAO,EAAA,CAAIA,CAAO,CAAA,MAAM,CAAC,CAAA,EAChDA,CAAO,CAAA,CAAC,CACR,EAAA,SACJ,CACF,CAAC,CACH,CAAA,CAEa0E,EAAuBxE,CAAAA,CAAAA,EAAwC,CAE1E,IAAMyE,CAAe,CAAA,CAAA,GAAA,CAAMzE,CAAS,CAAA,IAAA,EAAQ,GACtC0E,CAAU,CAAA,IAAA,CAAK,GAAID,CAAAA,CAAW,CAAI,CAAA,EAAA,CAClCE,CAAS,CAAA,IAAA,CAAK,GAAI3E,CAAAA,CAAAA,CAAS,IAAO,CAAA,EAAG,CAAI,CAAA,EAAA,CAE/C,OACE2B,kBAAAA,CAAA,aAAC,CAAA,KAAA,CAAA,CACC,GAAK3B,CAAAA,CAAAA,CAAS,EACd,CAAA,KAAA,CAAO,CACL,KAAA,CAAO,MACP,CAAA,MAAA,CAAQ,MACR,CAAA,QAAA,CAAU,UACV,CAAA,SAAA,CAAW,cAAc0E,CAAO,CAAA,WAAA,EAAcC,CAAM,CAAA,IAAA,CAAA,CACpD,cAAgB,CAAA,aAClB,CAGAhD,CAAAA,CAAAA,kBAAAA,CAAA,aAAC,CAAA,KAAA,CAAA,CACC,KAAO,CAAA,CACL,KAAO,CAAA,MAAA,CACP,MAAQ,CAAA,MAAA,CACR,UAAY,CAAA,CAAA,oCAAA,EAAuC3B,CAAS,CAAA,KAAK,CAAKA,EAAAA,EAAAA,CAAAA,CAAS,KAAK,CAAA,GAAA,CAAA,CACpF,YAAc,CAAA,iBAAA,CACd,QAAU,CAAA,UAAA,CACV,SAAW,CAAA;AAAA;AAAA;AAAA,UAIX,CAAA,CAAA,MAAA,CAAQ,CAAaA,UAAAA,EAAAA,CAAAA,CAAS,KAAK,CAAA,EAAA,CAAA,CACnC,SAAW,CAAA,gBACb,CACF,CAAA,CAAA,CAEA2B,kBAAA,CAAA,aAAA,CAAC,KACC,CAAA,CAAA,KAAA,CAAO,CACL,KAAA,CAAO,MACP,CAAA,MAAA,CAAQ,MACR,CAAA,UAAA,CAAY,CAAuC3B,oCAAAA,EAAAA,CAAAA,CAAS,KAAK,CAAA,IAAA,EAAOA,CAAS,CAAA,KAAK,CACtF,GAAA,CAAA,CAAA,YAAA,CAAc,iBACd,CAAA,QAAA,CAAU,UACV,CAAA,SAAA,CAAW,0BACX,CAAA,OAAA,CAAS,EACX,CAAA,CACF,CACF,CAEJ,CCxFA,CAKA,IAAM4E,EAAAA,CAAe,CACnB,SAAA,CACA,SACA,CAAA,SAAA,CACA,SACA,CAAA,SAAA,CACA,SACA,CAAA,SACF,CAEaC,CAAAA,EAAAA,CAAwB,CACnC9D,CAAAA,CACAC,CACe,GAAA,CACf,GAAM,CACJ,aAAAC,CAAAA,CAAAA,CAAgB,EAChB,CAAA,MAAA,CAAAY,CAAS,CAAA,GAAA,CACT,aAAAX,CAAAA,CAAAA,CAAgB,EAChB,CAAA,MAAA,CAAApB,CAAS8E,CAAAA,EAAAA,CACT,WAAAzD,CAAAA,CAAAA,CAAc,GAChB,CAAA,CAAIH,CAEJ,CAAA,OAAOP,CAAsBQ,CAAAA,CAAAA,CAAgBL,CAAM,EAAA,CACjD,IAAMQ,CAAAA,CAASR,CAAIK,CAAAA,CAAAA,CAAiBY,CAASA,CAAAA,CAAAA,CAAS,CAChDiD,CAAAA,CAAAA,CAASvF,CAAc,CAAA,GAAA,CAAK,EAAE,CAAA,CAEpC,OAAO,CACL,EAAIK,CAAAA,CAAAA,EACJ,CAAA,CAAA,CAAGmB,CAAO,CAAA,CAAA,CAAIK,CAAQ0D,CAAAA,CAAAA,CACtB,CAAG/D,CAAAA,CAAAA,CAAO,CACV,CAAA,EAAA,CAAIxB,CAAc,CAAA,IAAA,CAAM,EAAG,CAAA,CAC3B,EAAI,CAAA,CAAC2B,CACL,CAAA,IAAA,CAAMF,CAAO,CAAA,QAAA,EAAY,GACzB,CAAA,OAAA,CAAS,CACT,CAAA,IAAA,CAAMzB,CAAc4B,CAAAA,CAAAA,CAAc,EAAKA,CAAAA,CAAAA,CAAc,GAAG,CAAA,CACxD,QAAU5B,CAAAA,CAAAA,CAAc,GAAK,CAAA,EAAE,CAC/B,CAAA,KAAA,CACEO,CAAO,CAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAK,MAAO,EAAA,CAAIA,CAAO,CAAA,MAAM,CAAC,CAAA,EAChDA,CAAO,CAAA,CAAC,CACR,EAAA,SACJ,CACF,CAAC,CACH,CAAA,CAEaiF,EAAwB/E,CAAAA,CAAAA,EAAwC,CAE3E,IAAMgF,CAAO,CAAA,IAAA,CAAK,GAAIhF,CAAAA,CAAAA,CAAS,IAAO,CAAA,GAAI,CAAI,CAAA,EAAA,CAExCiF,CAAcjF,CAAAA,CAAAA,CAAS,OAEvBkF,CAAAA,CAAAA,CAASlF,CAAS,CAAA,IAAA,CAAO,GAAO,CAAA,CAAA,GAAA,CAAMA,CAAS,CAAA,IAAA,EAAQ,EAAK,CAAA,CAAA,CAC5DmF,CAAUnF,CAAAA,CAAAA,CAAS,IAAO,CAAA,EAAA,CAAKA,CAAS,CAAA,IAAA,CAAO,EAAK,CAAA,CAAA,CACpDoF,CAAUH,CAAAA,CAAAA,CAAcC,CAASC,CAAAA,CAAAA,CAAU,EAEjD,CAAA,OACExD,kBAAA,CAAA,aAAA,CAAC,KACC,CAAA,CAAA,GAAA,CAAK3B,CAAS,CAAA,EAAA,CACd,KAAO,CAAA,CACL,KAAO,CAAA,CAAA,EAAGA,CAAS,CAAA,IAAI,CACvB,EAAA,CAAA,CAAA,MAAA,CAAQ,CAAGA,EAAAA,CAAAA,CAAS,IAAO,CAAA,EAAG,CAC9B,EAAA,CAAA,CAAA,QAAA,CAAU,UACV,CAAA,SAAA,CAAW,CAAcgF,WAAAA,EAAAA,CAAI,CAC7B,GAAA,CAAA,CAAA,MAAA,CAAQ,WACV,CAAA,CAAA,CAGArD,kBAAA,CAAA,aAAA,CAAC,KACC,CAAA,CAAA,KAAA,CAAO,CACL,KAAA,CAAO,MACP,CAAA,MAAA,CAAQ,MACR,CAAA,UAAA,CAAY,CAAuC3B,oCAAAA,EAAAA,CAAAA,CAAS,KAAK,CAAA,cAAA,CAAA,CACjE,YAAc,CAAA,KAAA,CACd,OAAAoF,CAAAA,CAAAA,CACA,SAAW,CAAA,CAAA,IAAA,EAAOpF,CAAS,CAAA,IAAA,CAAO,EAAG,CAAA,GAAA,EAAMA,CAAS,CAAA,KAAK,CACzD,CAAA,CAAA,SAAA,CAAW,qBACb,CAAA,CACF,CAEA2B,CAAAA,kBAAAA,CAAA,aAAC,CAAA,KAAA,CAAA,CACC,KAAO,CAAA,CACL,SAAU,UACV,CAAA,GAAA,CAAK,KACL,CAAA,IAAA,CAAM,KACN,CAAA,KAAA,CAAO,KACP,CAAA,MAAA,CAAQ,KACR,CAAA,UAAA,CAAY,CAAsC3B,mCAAAA,EAAAA,CAAAA,CAAS,KAAK,CAAA,gBAAA,CAAA,CAChE,YAAc,CAAA,KAAA,CACd,OAASoF,CAAAA,CAAAA,CAAU,EACnB,CAAA,MAAA,CAAQ,WACV,CAAA,CACF,CACF,CAEJ,CClGA,CAKA,IAAMC,EAAAA,CAAgB,CAAC,SAAA,CAAW,SAAW,CAAA,SAAA,CAAW,SAAS,CAAA,CAEpDC,EAAyB,CAAA,CACpCvE,CACAC,CAAAA,CAAAA,GACe,CACf,GAAM,CACJ,aAAA,CAAAC,CAAgB,CAAA,EAAA,CAChB,MAAAY,CAAAA,CAAAA,CAAS,GACT,CAAA,aAAA,CAAAX,CAAgB,CAAA,CAAA,CAChB,MAAApB,CAAAA,CAAAA,CAASuF,EACT,CAAA,WAAA,CAAAlE,CAAc,CAAA,CAChB,CAAIH,CAAAA,CAAAA,CAEJ,OAAOP,CAAAA,CAAsBQ,CAAe,CAAA,IAAM,CAChD,IAAMG,CAAQ7B,CAAAA,CAAAA,CAAc,CAAG,CAAA,GAAG,CAAK,EAAA,IAAA,CAAK,EAAK,CAAA,GAAA,CAAA,CAC3C8B,CAAW9B,CAAAA,CAAAA,CAAc2B,CAAgB,CAAA,EAAA,CAAKA,CAAa,CAAA,CAEjE,OAAO,CACL,EAAItB,CAAAA,CAAAA,EACJ,CAAA,CAAA,CAAGmB,CAAO,CAAA,CAAA,CAAIxB,CAAc,CAAA,CAACsC,CAAS,CAAA,CAAA,CAAGA,CAAS,CAAA,CAAC,CACnD,CAAA,CAAA,CAAGd,CAAO,CAAA,CAAA,CAAIxB,CAAc,CAAA,GAAA,CAAK,EAAE,CAAA,CACnC,EAAI,CAAA,IAAA,CAAK,GAAI6B,CAAAA,CAAK,CAAIC,CAAAA,CAAAA,CACtB,EAAI,CAAA,IAAA,CAAK,GAAID,CAAAA,CAAK,CAAIC,CAAAA,CAAAA,CAAW,EACjC,CAAA,IAAA,CAAML,CAAO,CAAA,QAAA,EAAY,GACzB,CAAA,OAAA,CAAS,CACT,CAAA,IAAA,CAAMzB,CAAc4B,CAAAA,CAAAA,CAAc,EAAKA,CAAAA,CAAW,CAClD,CAAA,QAAA,CAAU5B,CAAc,CAAA,CAAA,CAAG,GAAG,CAAA,CAC9B,KACEO,CAAAA,CAAAA,CAAO,IAAK,CAAA,KAAA,CAAM,IAAK,CAAA,MAAA,EAAWA,CAAAA,CAAAA,CAAO,MAAM,CAAC,CAChDA,EAAAA,CAAAA,CAAO,CAAC,CAAA,EACR,SACJ,CACF,CAAC,CACH,CAEayF,CAAAA,EAAAA,CAAyBvF,CAAwC,EAAA,CAE5E,IAAMwF,CAAAA,CAAS,IAAK,CAAA,GAAA,CAAIxF,CAAS,CAAA,IAAA,CAAO,GAAOA,CAAAA,CAAAA,CAAS,QAAQ,CAAA,CAAI,EAC9DyF,CAAAA,CAAAA,CAAS,IAAK,CAAA,GAAA,CAAIzF,CAAS,CAAA,IAAA,CAAO,GAAOA,CAAAA,CAAAA,CAAS,QAAQ,CAAA,CAAI,EAK9D0F,CAAAA,CAAAA,CAFa,IAAK,CAAA,GAAA,CAAI1F,CAAS,CAAA,IAAA,CAAO,EAAMA,CAAAA,CAAAA,CAAS,QAAW,CAAA,EAAG,CACzC,CAAA,EAAA,CACG,CAAI,CAAA,EAAA,CAGjCkF,CAAS,CAAA,IAAA,CAAK,GAAI,CAAA,CAAA,CAAA,CAAI,GAAMlF,CAAAA,CAAAA,CAAS,IAAQ,EAAA,EAAE,CAC/CmF,CAAAA,CAAAA,CAAUnF,CAAS,CAAA,IAAA,CAAO,GAC1B2F,CAAAA,CAAAA,CAAW,IAAK,CAAA,GAAA,CAAIT,CAAQC,CAAAA,CAAO,CAEzC,CAAA,OACExD,kBAAA,CAAA,aAAA,CAAC,KACC,CAAA,CAAA,GAAA,CAAK3B,CAAS,CAAA,EAAA,CACd,KAAO,CAAA,CACL,KAAO,CAAA,CAAA,EAAGA,CAAS,CAAA,IAAI,CACvB,EAAA,CAAA,CAAA,MAAA,CAAQ,CAAGA,EAAAA,CAAAA,CAAS,IAAI,CAAA,EAAA,CAAA,CACxB,QAAU,CAAA,UAAA,CACV,SAAW,CAAA,CAAA,UAAA,EAAawF,CAAM,CAAA,IAAA,EAAOC,CAAM,CAAA,GAAA,CAC7C,CAGA9D,CAAAA,CAAAA,kBAAAA,CAAA,aAAC,CAAA,KAAA,CAAA,CACC,KAAO,CAAA,CACL,KAAO,CAAA,MAAA,CACP,MAAQ,CAAA,MAAA,CACR,UAAY3B,CAAAA,CAAAA,CAAS,KACrB,CAAA,YAAA,CAAc,KACd,CAAA,OAAA,CAAS2F,CAAWD,CAAAA,CAAAA,CACpB,SAAW,CAAA;AAAA,gBAAA,EACH1F,CAAS,CAAA,IAAI,CAAMA,GAAAA,EAAAA,CAAAA,CAAS,KAAK,CAAA;AAAA,gBAAA,EACjCA,CAAS,CAAA,IAAA,CAAO,CAAC,CAAA,GAAA,EAAMA,EAAS,KAAK,CAAA;AAAA,gBAAA,EACrCA,CAAS,CAAA,IAAA,CAAO,CAAC,CAAA,GAAA,EAAMA,EAAS,KAAK,CAAA;AAAA,UAE7C,CAAA,CAAA,UAAA,CAAY,mBACd,CAAA,CACF,CAEA2B,CAAAA,kBAAAA,CAAA,aAAC,CAAA,KAAA,CAAA,CACC,KAAO,CAAA,CACL,QAAU,CAAA,UAAA,CACV,GAAK,CAAA,KAAA,CACL,KAAM,KACN,CAAA,KAAA,CAAO,CAAG3B,EAAAA,CAAAA,CAAS,IAAO,CAAA,CAAC,CAC3B,EAAA,CAAA,CAAA,MAAA,CAAQ,CAAGA,EAAAA,CAAAA,CAAS,IAAO,CAAA,CAAC,CAC5B,EAAA,CAAA,CAAA,UAAA,CAAY,2BAA2BA,CAAS,CAAA,KAAK,CACrD,uBAAA,CAAA,CAAA,YAAA,CAAc,KACd,CAAA,SAAA,CAAW,uBACX,CAAA,OAAA,CAAS2F,CAAWD,CAAAA,CAAAA,CAAgB,EACpC,CAAA,UAAA,CAAY,mBACd,CAAA,CACF,CACF,CAEJ,CAAA,CC9FA,IAAME,EAAc,CAAA,CAClB,SACA,CAAA,SAAA,CACA,SACA,CAAA,SAAA,CACA,SACA,CAAA,SACF,EAEaC,EAAuB,CAAA,CAClC9E,CACAC,CAAAA,CAAAA,GACe,CACf,GAAM,CACJ,aAAA,CAAAC,CAAgB,CAAA,EAAA,CAChB,MAAAY,CAAAA,CAAAA,CAAS,GACT,CAAA,aAAA,CAAAX,EAAgB,EAChB,CAAA,MAAA,CAAApB,CAAS8F,CAAAA,EAAAA,CACT,WAAAzE,CAAAA,CAAAA,CAAc,EAChB,CAAA,CAAIH,CAEJ,CAAA,OAAOP,CAAsBQ,CAAAA,CAAAA,CAAgBL,CAAM,EAAA,CACjD,IAAMQ,CAAQ7B,CAAAA,CAAAA,CAAc,CAACsC,CAAAA,CAAS,CAAGA,CAAAA,CAAAA,CAAS,CAAC,CAAA,EAAK,IAAK,CAAA,EAAA,CAAK,GAC5DR,CAAAA,CAAAA,CAAAA,CAAW9B,CAAc2B,CAAAA,CAAAA,CAAgB,GAAKA,CAAa,CAAA,CAC3D4E,CAAclF,CAAAA,CAAAA,CAAI,CAExB,CAAA,OAAO,CACL,EAAA,CAAIhB,CAAW,EAAA,CACf,CAAGmB,CAAAA,CAAAA,CAAO,CACV,CAAA,CAAA,CAAGA,EAAO,CACV,CAAA,EAAA,CAAI,IAAK,CAAA,GAAA,CAAIK,CAAK,CAAA,CAAIC,CAAYyE,EAAAA,CAAAA,CAAc,EAAM,CAAA,CAAA,CAAA,CACtD,EAAI,CAAA,CAAC,IAAK,CAAA,GAAA,CAAI1E,CAAK,CAAIC,CAAAA,CAAAA,CAAW,EAAOyE,EAAAA,CAAAA,CAAc,CAAI,CAAA,CAAA,CAAA,CAC3D,IAAM9E,CAAAA,CAAAA,CAAO,QAAY,EAAA,GAAA,CACzB,OAAS,CAAA,CAAA,CACT,IAAM8E,CAAAA,CAAAA,CACFvG,EAAc4B,CAAc,CAAA,GAAA,CAAKA,CAAc,CAAA,GAAG,CAClD5B,CAAAA,CAAAA,CAAc4B,CAAc,CAAA,EAAA,CAAKA,CAAW,CAAA,CAChD,QAAU5B,CAAAA,CAAAA,CAAc,CAAG,CAAA,GAAG,EAC9B,KACEO,CAAAA,CAAAA,CAAO,IAAK,CAAA,KAAA,CAAM,IAAK,CAAA,MAAA,EAAWA,CAAAA,CAAAA,CAAO,MAAM,CAAC,CAChDA,EAAAA,CAAAA,CAAO,CAAC,CAAA,EACR,SACJ,CACF,CAAC,CACH,CAAA,CAEaiG,EAAuB/F,CAAAA,CAAAA,EAAwC,CAE1E,IAAMgG,CAAU,CAAA,CAAA,CAAA,CAAK,IAAK,CAAA,GAAA,CAAIhG,CAAS,CAAA,EAAE,EAAI,IAAK,CAAA,GAAA,CAAIA,CAAS,CAAA,EAAE,CAAK,EAAA,GAAA,CAChEiG,CAAS,CAAA,CAAA,CAAID,CAGbE,CAAAA,CAAAA,CAAalG,CAAS,CAAA,IAAA,CAAO,EAAMA,EAAAA,CAAAA,CAAS,SAAW,GACvDmG,CAAAA,CAAAA,CAAaD,CAAalG,CAAAA,CAAAA,CAAS,IAAO,CAAA,EAAA,CAAM,CAEtD,CAAA,OACE2B,kBAAA,CAAA,aAAA,CAAC,KACC,CAAA,CAAA,GAAA,CAAK3B,CAAS,CAAA,EAAA,CACd,KAAO,CAAA,CACL,KAAO,CAAA,CAAA,EAAGA,CAAS,CAAA,IAAI,CACvB,EAAA,CAAA,CAAA,MAAA,CAAQ,CAAGA,EAAAA,CAAAA,CAAS,IAAI,CAAA,EAAA,CAAA,CACxB,QAAU,CAAA,UAAA,CACV,SAAW,CAAA;AAAA,iBAAA,EACAgG,CAAO,CAAA;AAAA,iBAAA,EACPC,CAAM,CAAA;AAAA,iBACL,EAAA,IAAA,CAAK,MAAMjG,CAAS,CAAA,EAAA,CAAIA,EAAS,EAAE,CAAA,CAAI,GAAO,CAAA,IAAA,CAAK,EAAE,CAAA;AAAA,QAAA,CAEnE,CAGA2B,CAAAA,CAAAA,kBAAAA,CAAA,aAAC,CAAA,KAAA,CAAA,CACC,MAAO,CACL,KAAA,CAAO,MACP,CAAA,MAAA,CAAQ,MACR,CAAA,UAAA,CAAY3B,CAAS,CAAA,KAAA,CACrB,aAAc,KACd,CAAA,QAAA,CAAU,UACV,CAAA,SAAA,CAAW,qCACb,CAAA,CAAA,CAGA2B,kBAAA,CAAA,aAAA,CAAC,OACC,KAAO,CAAA,CACL,QAAU,CAAA,UAAA,CACV,GAAK,CAAA,KAAA,CACL,IAAM,CAAA,KAAA,CACN,MAAO,KACP,CAAA,MAAA,CAAQ,KACR,CAAA,UAAA,CAAY3B,CAAS,CAAA,KAAA,CACrB,YAAc,CAAA,KAAA,CACd,QAAS,EACT,CAAA,SAAA,CAAW,CAAaT,UAAAA,EAAAA,CAAAA,CAAc,EAAI,CAAA,CAAC,CAAC,CAAA,IAAA,EAAOA,EAAc,EAAI,CAAA,CAAC,CAAC,CAAA,GAAA,CACzE,CACF,CAAA,CAAA,CACAoC,kBAAA,CAAA,aAAA,CAAC,OACC,KAAO,CAAA,CACL,QAAU,CAAA,UAAA,CACV,OAAQ,KACR,CAAA,KAAA,CAAO,KACP,CAAA,KAAA,CAAO,MACP,MAAQ,CAAA,KAAA,CACR,UAAY3B,CAAAA,CAAAA,CAAS,KACrB,CAAA,YAAA,CAAc,KACd,CAAA,OAAA,CAAS,EACX,CACF,CAAA,CACF,CAGCkG,CAAAA,CAAAA,EACCvE,kBAAA,CAAA,aAAA,CAAC,KACC,CAAA,CAAA,KAAA,CAAO,CACL,QAAU,CAAA,UAAA,CACV,MAAQ,CAAA,CAAA,CAAA,EAAIwE,CAAU,CAAA,EAAA,CAAA,CACtB,IAAM,CAAA,KAAA,CACN,MAAO,KACP,CAAA,MAAA,CAAQ,CAAGA,EAAAA,CAAU,KACrB,UAAYnG,CAAAA,CAAAA,CAAS,KACrB,CAAA,YAAA,CAAc,cACd,OAAS,CAAA,EACX,CACF,CAAA,CAEJ,CAEJ,CAAA,CC7HA,IAAMoG,EAAAA,CAAgB,CACpB,SAAA,CACA,SACA,CAAA,SAAA,CACA,SACA,CAAA,SAAA,CACA,UACA,SACF,CAAA,CAEaC,EAAyB,CAAA,CACpCtF,CACAC,CAAAA,CAAAA,GACe,CACf,GAAM,CACJ,aAAAC,CAAAA,CAAAA,CAAgB,EAChB,CAAA,MAAA,CAAAY,EAAS,EACT,CAAA,aAAA,CAAAX,CAAgB,CAAA,EAAA,CAChB,OAAApB,CAASsG,CAAAA,EAAAA,CACT,WAAAjF,CAAAA,CAAAA,CAAc,EAChB,CAAA,CAAIH,CAEJ,CAAA,OAAOP,EAAsBQ,CAAe,CAAA,IAAM,CAChD,IAAMG,CAAQ7B,CAAAA,CAAAA,CAAc,CAACsC,CAAAA,CAAS,EAAGA,CAAS,CAAA,CAAC,CAAK,EAAA,IAAA,CAAK,EAAK,CAAA,GAAA,CAAA,CAC5DR,CAAW9B,CAAAA,CAAAA,CAAc2B,EAAgB,EAAKA,CAAAA,CAAa,CAEjE,CAAA,OAAO,CACL,EAAA,CAAItB,CAAW,EAAA,CACf,EAAGmB,CAAO,CAAA,CAAA,CAAIxB,CAAc,CAAA,CAACsC,CAAS,CAAA,EAAA,CAAKA,CAAS,CAAA,EAAG,EACvD,CAAGd,CAAAA,CAAAA,CAAO,CAAIxB,CAAAA,CAAAA,CAAc,GAAK,CAAA,EAAE,CACnC,CAAA,EAAA,CAAI,KAAK,GAAI6B,CAAAA,CAAK,CAAIC,CAAAA,CAAAA,CAAW,EAAM9B,CAAAA,CAAAA,CAAc,EAAI,CAAA,CAAC,EAC1D,EAAI,CAAA,CAAC8B,CAAW,CAAA,EAAA,CAChB,KAAML,CAAO,CAAA,QAAA,EAAY,GACzB,CAAA,OAAA,CAAS,GACT,IAAMzB,CAAAA,CAAAA,CAAc4B,CAAc,CAAA,EAAA,CAAKA,CAAc,CAAA,GAAG,CACxD,CAAA,QAAA,CAAU5B,EAAc,GAAK,CAAA,EAAE,CAC/B,CAAA,KAAA,CACEO,CAAO,CAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAK,QAAWA,CAAAA,CAAAA,CAAO,MAAM,CAAC,CAChDA,EAAAA,CAAAA,CAAO,CAAC,CAAA,EACR,SACJ,CACF,CAAC,CACH,CAAA,CAEawG,GAAyBtG,CAAwC,EAAA,CAE5E,IAAMuG,CAAAA,CAAO,KAAK,GAAIvG,CAAAA,CAAAA,CAAS,IAAO,CAAA,GAAI,CAAI,CAAA,EAAA,CACxCwG,CAAM,CAAA,IAAA,CAAK,IAAIxG,CAAS,CAAA,IAAA,CAAO,GAAI,CAAA,CAAI,CAGvCmF,CAAAA,CAAAA,CAAUnF,CAAS,CAAA,IAAA,CAAO,GAAK,CAAIA,CAAAA,CAAAA,CAAS,IAAO,CAAA,EAAA,CAEzD,OACE2B,kBAAAA,CAAA,aAAC,CAAA,KAAA,CAAA,CACC,IAAK3B,CAAS,CAAA,EAAA,CACd,KAAO,CAAA,CACL,MAAO,MACP,CAAA,MAAA,CAAQ,MACR,CAAA,QAAA,CAAU,WACV,SAAW,CAAA;AAAA,qBAAA,EACIuG,CAAI,CAAA;AAAA,qBAAA,EACJC,CAAG,CAAA;AAAA,iBAAA,EACPD,EAAO,EAAG,CAAA;AAAA,QAErB,CAAA,CAAA,OAAA,CAASvG,CAAS,CAAA,OAAA,CAAUmF,CAC9B,CAAA,CAAA,CAGAxD,kBAAA,CAAA,aAAA,CAAC,KACC,CAAA,CAAA,KAAA,CAAO,CACL,KAAA,CAAO,MACP,CAAA,MAAA,CAAQ,OACR,UAAY,CAAA,CAAA,mCAAA,EAAsC3B,CAAS,CAAA,KAAK,CAAOA,IAAAA,EAAAA,CAAAA,CAAS,KAAK,CAAA,CAAA,CAAA,CACrF,YAAc,CAAA,mCAAA,CACd,QAAU,CAAA,UAAA,CACV,SAAW,CAAA;AAAA;AAAA;AAAA,UAAA,CAIb,GAGA2B,kBAAA,CAAA,aAAA,CAAC,OACC,KAAO,CAAA,CACL,SAAU,UACV,CAAA,GAAA,CAAK,KACL,CAAA,IAAA,CAAM,MACN,KAAO,CAAA,KAAA,CACP,OAAQ,KACR,CAAA,UAAA,CACE,qEACF,YAAc,CAAA,KAAA,CACd,SAAW,CAAA,gBACb,EACF,CAGAA,CAAAA,kBAAAA,CAAA,cAAC,KACC,CAAA,CAAA,KAAA,CAAO,CACL,QAAU,CAAA,UAAA,CACV,OAAQ,MACR,CAAA,IAAA,CAAM,MACN,SAAW,CAAA,kBAAA,CACX,MAAO,GACP,CAAA,MAAA,CAAQ,IACR,UAAY,CAAA,uBAAA,CACZ,WAAa,CAAA,uBAAA,CACb,UAAW,CAAa3B,UAAAA,EAAAA,CAAAA,CAAS,KAAK,CACxC,CAAA,CAAA,CACF,CACF,CAGA2B,CAAAA,kBAAAA,CAAA,aAAC,CAAA,KAAA,CAAA,CACC,MAAO,CACL,QAAA,CAAU,WACV,GAAK,CAAA,MAAA,CACL,KAAM,KACN,CAAA,SAAA,CAAW,kBACX,CAAA,KAAA,CAAO,MACP,MAAQ,CAAA,CAAA,EAAG3B,EAAS,IAAO,CAAA,CAAC,KAC5B,OAAS,CAAA,EACX,GAEA2B,kBAAA,CAAA,aAAA,CAAC,QACC,CAAG,CAAA,CAAA,OAAA,EAAU,EAAI,IAAK,CAAA,GAAA,CAAI3B,EAAS,IAAO,CAAA,EAAG,CAAI,CAAA,CAAC,IAAIA,CAAS,CAAA,IAAI,MAAMA,CAAS,CAAA,IAAA,CAAO,CAAC,CAC1F,CAAA,CAAA,MAAA,CAAQA,CAAS,CAAA,KAAA,CACjB,YAAY,KACZ,CAAA,IAAA,CAAK,OACL,OAAQ,CAAA,KAAA,CACV,CACF,CACF,CAEJ,CC3IA,CAKA,IAAMyG,GAAe,CACnB,SAAA,CACA,UACA,SACA,CAAA,SAAA,CACA,UACA,SACA,CAAA,SACF,EAEaC,EAAwB,CAAA,CACnC3F,EACAC,CACe,GAAA,CACf,GAAM,CACJ,aAAA,CAAAC,CAAgB,CAAA,EAAA,CAChB,OAAAY,CAAS,CAAA,GAAA,CACT,cAAAX,CAAgB,CAAA,EAAA,CAChB,OAAApB,CAAS2G,CAAAA,EAAAA,CACT,WAAAtF,CAAAA,CAAAA,CAAc,CAChB,CAAIH,CAAAA,CAAAA,CAEJ,OAAOP,CAAsBQ,CAAAA,CAAAA,CAAgBL,GAAM,CAEjD,IAAM+F,CAAW/F,CAAAA,CAAAA,CAAIK,EACf2F,CAAcD,CAAAA,CAAAA,CAAW,KAAK,EAAK,CAAA,CAAA,CACnCE,EAASF,CAAW9E,CAAAA,CAAAA,CAGpBiF,EAAcvH,CAAc,CAAA,IAAA,CAAM,EAAG,CACrCwH,CAAAA,CAAAA,CAAexH,EAAc,GAAK,CAAA,EAAE,EAEpCyH,CAAaJ,CAAAA,CAAAA,CAAcE,CAC3BG,CAAAA,CAAAA,CAAcJ,EAASE,CAGvBG,CAAAA,CAAAA,CAAU,KAAK,GAAIF,CAAAA,CAAU,EAAIC,CACjCE,CAAAA,CAAAA,CAAU,IAAK,CAAA,GAAA,CAAIH,CAAU,CAAIC,CAAAA,CAAAA,CAGjCG,EAAeJ,CAAa,CAAA,IAAA,CAAK,GAAK,CACtCK,CAAAA,CAAAA,CAAQnG,CAAiB,EAAA,CAAA,CAAIyF,EAAW,EAE9C,CAAA,CAAA,OAAO,CACL,EAAI/G,CAAAA,CAAAA,GACJ,CAAGmB,CAAAA,CAAAA,CAAO,EACV,CAAGA,CAAAA,CAAAA,CAAO,EACV,EAAI,CAAA,IAAA,CAAK,IAAIqG,CAAY,CAAA,CAAIC,EAAQ,EAAMH,CAAAA,CAAAA,CAAU,GACrD,CAAA,EAAA,CAAI,KAAK,GAAIE,CAAAA,CAAY,EAAIC,CAAQ,CAAA,EAAA,CAAMF,EAAU,GACrD,CAAA,IAAA,CAAMnG,CAAO,CAAA,QAAA,EAAY,IACzB,OAAS,CAAA,CAAA,CACT,KACEzB,CAAc4B,CAAAA,CAAAA,CAAc,GAAKA,CAAW,CAAA,EAAK,CAAIwF,CAAAA,CAAAA,CAAW,IAClE,QAAUpH,CAAAA,CAAAA,CAAc,EAAG,GAAG,CAAA,CAC9B,MACEO,CAAO,CAAA,IAAA,CAAK,MAAM,IAAK,CAAA,MAAA,GAAWA,CAAO,CAAA,MAAM,CAAC,CAChDA,EAAAA,CAAAA,CAAO,CAAC,CACR,EAAA,SACJ,CACF,CAAC,CACH,CAEawH,CAAAA,EAAAA,CAAwBtH,GAAwC,CAG3E,IAAMuH,EAAgB,CADT,CAAA,CAAA,GAAA,CAAMvH,CAAS,CAAA,IAAA,EAAQ,IACJ,EAG1BkF,CAAAA,CAAAA,CAAS,KAAK,GAAI,CAAA,CAAA,CAAA,CAAI,IAAMlF,CAAS,CAAA,IAAA,EAAQ,EAAE,CAAA,CAC/CmF,EAAUnF,CAAS,CAAA,IAAA,CAAO,IAC1BoF,CAAU,CAAA,IAAA,CAAK,IAAIF,CAAQC,CAAAA,CAAO,EAGlClD,CAAU,CAAA,IAAA,CAAK,IAAIjC,CAAS,CAAA,IAAA,CAAO,GAAMA,CAAS,CAAA,QAAQ,EAAI,EAAM,CAAA,EAAA,CAE1E,OACE2B,kBAAAA,CAAA,cAAC,KACC,CAAA,CAAA,GAAA,CAAK3B,EAAS,EACd,CAAA,KAAA,CAAO,CACL,KAAO,CAAA,CAAA,EAAGA,CAAS,CAAA,IAAI,KACvB,MAAQ,CAAA,CAAA,EAAGA,EAAS,IAAI,CAAA,EAAA,CAAA,CACxB,SAAU,UACV,CAAA,SAAA,CAAW,CAASuH,MAAAA,EAAAA,CAAa,IACjC,OAASnC,CAAAA,CAAAA,CAAUnD,CACrB,CAGAN,CAAAA,CAAAA,kBAAAA,CAAA,cAAC,KACC,CAAA,CAAA,KAAA,CAAO,CACL,KAAO,CAAA,MAAA,CACP,OAAQ,MACR,CAAA,UAAA,CAAY3B,EAAS,KACrB,CAAA,YAAA,CAAc,MACd,SAAW,CAAA;AAAA,gBAAA,EACHA,CAAS,CAAA,IAAI,CAAMA,GAAAA,EAAAA,CAAAA,CAAS,KAAK,CAAA;AAAA,gBAAA,EACjCA,CAAS,CAAA,IAAA,CAAO,CAAC,CAAA,GAAA,EAAMA,EAAS,KAAK,CAAA;AAAA,gBAAA,EACrCA,CAAS,CAAA,IAAA,CAAO,CAAC,CAAA,GAAA,EAAMA,EAAS,KAAK,CAAA;AAAA,UAE7C,CAAA,CAAA,QAAA,CAAU,UACZ,CAAA,CAAA,CAGA2B,kBAAA,CAAA,aAAA,CAAC,OACC,KAAO,CAAA,CACL,QAAU,CAAA,UAAA,CACV,GAAK,CAAA,KAAA,CACL,KAAM,KACN,CAAA,KAAA,CAAO,CAAG3B,EAAAA,CAAAA,CAAS,IAAO,CAAA,CAAC,KAC3B,MAAQ,CAAA,KAAA,CACR,UAAY,CAAA,CAAA,oCAAA,EAAuCA,CAAS,CAAA,KAAK,iBACjE,SAAW,CAAA,CAAA,6BAAA,EAAgCA,CAAS,CAAA,QAAQ,CAC5D,IAAA,CAAA,CAAA,OAAA,CAASiC,CACX,CACF,CAAA,CAAA,CACAN,kBAAA,CAAA,aAAA,CAAC,KACC,CAAA,CAAA,KAAA,CAAO,CACL,QAAU,CAAA,UAAA,CACV,GAAK,CAAA,KAAA,CACL,IAAM,CAAA,KAAA,CACN,MAAO,KACP,CAAA,MAAA,CAAQ,CAAG3B,EAAAA,CAAAA,CAAS,IAAO,CAAA,CAAC,KAC5B,UAAY,CAAA,CAAA,qCAAA,EAAwCA,CAAS,CAAA,KAAK,CAClE,cAAA,CAAA,CAAA,SAAA,CAAW,gCAAgCA,CAAS,CAAA,QAAQ,CAC5D,IAAA,CAAA,CAAA,OAAA,CAASiC,CACX,CAAA,CACF,CACF,CAGCjC,CAAAA,CAAAA,CAAS,IAAO,CAAA,CAAA,EACf2B,kBAAA,CAAA,aAAA,CAAC,OACC,KAAO,CAAA,CACL,QAAU,CAAA,UAAA,CACV,GAAK,CAAA,KAAA,CACL,KAAM,KACN,CAAA,KAAA,CAAO,CAAG3B,EAAAA,CAAAA,CAAS,IAAO,CAAA,CAAC,KAC3B,MAAQ,CAAA,CAAA,EAAGA,CAAS,CAAA,IAAA,CAAO,CAAC,CAAA,EAAA,CAAA,CAC5B,WAAY,CAA2BA,wBAAAA,EAAAA,CAAAA,CAAS,KAAK,CAAA,uBAAA,CAAA,CACrD,YAAc,CAAA,KAAA,CACd,UAAW,uBACX,CAAA,OAAA,CAASoF,CAAU,CAAA,EAAA,CACnB,MAAQ,CAAA,WACV,EACF,CAEJ,CAEJ,CCxJA,CAIO,IAAMoC,EAAwB,CAAA,CACnCzG,CACAC,CAAAA,CAAAA,GACe,CACf,GAAM,CAAE,aAAAC,CAAAA,CAAAA,CAAgB,EAAI,CAAA,WAAA,CAAAE,CAAc,CAAA,GAAI,EAAIH,CAE5CZ,CAAAA,CAAAA,CAAwB,EAAC,CACzBqH,CAAW,CAAA,CAAC,IAAK,GAAK,CAAA,GAAG,CAE/B,CAAA,IAAA,IAAS7G,CAAI,CAAA,CAAA,CAAGA,EAAIK,CAAeL,CAAAA,CAAAA,EAAAA,CAAK,CACtC,IAAM8G,CAAe,CAAA,IAAA,CAAK,QAAW,CAAA,EAAA,CAC/BC,CAAe/G,CAAAA,CAAAA,CAAI,CACnBgH,CAAAA,CAAAA,CAAUH,EAASE,CAAY,CAAA,CAQ/BE,CAAQH,CAAAA,CAAAA,CAAenI,CAAc,CAAA,EAAA,CAAI,GAAG,CAAIA,CAAAA,CAAAA,CAAc,CAAG,CAAA,CAAC,CAClEuI,CAAAA,CAAAA,CAASJ,EAAenI,CAAc,CAAA,CAAA,CAAG,CAAC,CAAA,CAAIA,CAAc,CAAA,EAAA,CAAI,GAAG,CACnEwI,CAAAA,CAAAA,CAAexI,CAAc,CAAA,GAAA,CAAK,EAAE,CAAA,CAEpCyI,EACJL,CACCD,EAAAA,CAAAA,CAAe,CAAI,CAAA,CAAA,CAAA,EACnB,IAAK,CAAA,KAAA,CAAMG,CAAK,CAAK,EAAA,CAAA,CAAA,EACrB,IAAK,CAAA,KAAA,CAAMC,CAAM,CAAA,EAAK,KACrBC,CAAe,CAAA,EAAA,EAAO,EAE1B3H,CAAAA,CAAAA,CAAAA,CAAU,IAAK,CAAA,CACb,GAAIR,CAAW,EAAA,CACf,CAAGmB,CAAAA,CAAAA,CAAO,CAAIxB,CAAAA,CAAAA,CAAc,CAAC4B,CAAAA,CAAc,CAAGA,CAAAA,CAAAA,CAAc,CAAC,CAAA,CAC7D,CAAGJ,CAAAA,CAAAA,CAAO,EAAIxB,CAAc,CAAA,CAAC4B,CAAc,CAAA,CAAA,CAAGA,CAAc,CAAA,CAAC,EAC7D,EAAI5B,CAAAA,CAAAA,CAAc,GAAK,CAAA,EAAE,CACzB,CAAA,EAAA,CAAIA,EAAc,GAAK,CAAA,EAAE,CACzB,CAAA,IAAA,CAAMyB,CAAO,CAAA,QAAA,EAAY,IACzB,OAASzB,CAAAA,CAAAA,CAAc,EAAK,CAAA,CAAC,CAC7B,CAAA,IAAA,CAAMA,EAAc,CAAG,CAAA,EAAE,CACzB,CAAA,QAAA,CAAUyI,CACV,CAAA,KAAA,CACEJ,IAAY,GAAM,CAAA,SAAA,CAAYA,CAAY,GAAA,GAAA,CAAM,SAAY,CAAA,SAChE,CAAC,EACH,CAEA,OAAOxH,CACT,CAEa6H,CAAAA,EAAAA,CAAwBjI,GAAwC,CAE3E,IAAM2H,CAAe3H,CAAAA,CAAAA,CAAS,QAAW,CAAA,CAAA,CACnC6H,EAAS7H,CAAS,CAAA,QAAA,EAAY,CAAK,CAAA,GAAA,CACnC8H,CAAU9H,CAAAA,CAAAA,CAAS,UAAY,EAAM,CAAA,GAAA,CACrC+H,CAAiB/H,CAAAA,CAAAA,CAAAA,CAAS,QAAY,EAAA,EAAA,CAAM,IAAM,EAElD4H,CAAAA,CAAAA,CAAU,CAAC,GAAA,CAAK,GAAK,CAAA,GAAG,EAAED,CAAY,CAAA,CACtCO,CAAmBlI,CAAAA,CAAAA,CAAS,IAE5BF,CAAAA,CAAAA,CAAS,CACb,CAAG8H,CAAAA,CAAAA,GAAY,GAAM,CAAA,GAAA,CAAM,CAC3B,CAAA,CAAA,CAAGA,IAAY,GAAM,CAAA,GAAA,CAAM,CAC3B,CAAA,CAAA,CAAGA,CAAY,GAAA,GAAA,CAAM,IAAM,CAC7B,CAAA,CAEMO,CACJP,CAAAA,CAAAA,GAAY,GAAM,CAAA,QAAA,CAAWA,IAAY,GAAM,CAAA,UAAA,CAAa,YAE9D,CAAA,OACEjG,kBAAA,CAAA,aAAA,CAAC,OACC,GAAK3B,CAAAA,CAAAA,CAAS,EACd,CAAA,KAAA,CAAO,CACL,KAAA,CAAO,GAAG6H,CAAK,CAAA,EAAA,CAAA,CACf,MAAQ,CAAA,CAAA,EAAGC,CAAM,CAAA,EAAA,CAAA,CACjB,gBAAiB,CAAQhI,KAAAA,EAAAA,CAAAA,CAAO,CAAC,CAAA,EAAA,EAAKA,CAAO,CAAA,CAAC,KAAKA,CAAO,CAAA,CAAC,CAAKE,EAAAA,EAAAA,CAAAA,CAAS,OAAO,CAAA,CAAA,CAAA,CAChF,aAAAmI,CACA,CAAA,MAAA,CAAQ,CAAQ5I,KAAAA,EAAAA,CAAAA,CAAc,CAAG,CAAA,CAAC,CAAC,CACnC,GAAA,CAAA,CAAA,SAAA,CAAW,CAAGwI,EAAAA,CAAY,CAAQG,KAAAA,EAAAA,CAAgB,WAAWpI,CAAO,CAAA,CAAC,CAAKA,EAAAA,EAAAA,CAAAA,CAAO,CAAC,CAAA,EAAA,EAAKA,EAAO,CAAC,CAAA,EAAA,EAAKE,CAAS,CAAA,OAAA,CAAU,EAAG,CAAA,CAAA,CAC5H,EACF,CAEJ,CAAA,CC3EA,IAAMa,GAAgB,CACpB,SAAA,CACA,SACA,CAAA,SAAA,CACA,SACA,CAAA,SAAA,CACA,UACA,SACA,CAAA,SACF,CAEauH,CAAAA,EAAAA,CAA2B,CACtCrH,CAAAA,CACAC,IACe,CACf,GAAM,CACJ,aAAA,CAAAC,CAAgB,CAAA,EAAA,CAChB,cAAAC,CAAgB,CAAA,CAAA,CAChB,MAAApB,CAAAA,CAAAA,CAASe,EACT,CAAA,WAAA,CAAAM,EAAc,EAChB,CAAA,CAAIH,CAEJ,CAAA,OAAOP,CAAsBQ,CAAAA,CAAAA,CAAgBL,GAAM,CAEjD,IAAMQ,CAASR,CAAAA,CAAAA,CAAIK,CAAiB,CAAA,GAAA,CAAM1B,CAAc,CAAA,GAAA,CAAK,EAAE,CAAA,CACzD8B,CAAW9B,CAAAA,CAAAA,CAAc2B,CAAgB,CAAA,EAAA,CAAKA,CAAa,CAC3DI,CAAAA,CAAAA,CAAQzB,CAAeC,CAAAA,CAAM,CAG7BuI,CAAAA,CAAAA,CAAc9I,EAAc,CAAG,CAAA,GAAG,CAClC+I,CAAAA,CAAAA,CAAiB/I,CAAc,CAAA,CAAA,CAAG,EAAE,CAE1C,CAAA,OAAO,CACL,EAAA,CAAIK,CAAW,EAAA,CACf,EAAGmB,CAAO,CAAA,CAAA,CAAI,IAAK,CAAA,GAAA,CAAIrB,CAAiB2I,CAAAA,CAAW,CAAC,CAAIC,CAAAA,CAAAA,CACxD,CAAGvH,CAAAA,CAAAA,CAAO,CAAI,CAAA,IAAA,CAAK,IAAIrB,CAAiB2I,CAAAA,CAAW,CAAC,CAAA,CAAIC,CACxD,CAAA,EAAA,CAAI,KAAK,GAAI5I,CAAAA,CAAAA,CAAiB0B,CAAK,CAAC,CAAIC,CAAAA,CAAAA,CAAW9B,EAAc,EAAI,CAAA,CAAC,CACtE,CAAA,EAAA,CAAI,IAAK,CAAA,GAAA,CAAIG,EAAiB0B,CAAK,CAAC,CAAIC,CAAAA,CAAAA,CAAW9B,CAAc,CAAA,EAAA,CAAI,CAAC,CACtE,CAAA,IAAA,CAAMyB,CAAO,CAAA,QAAA,EAAY,GACzB,CAAA,OAAA,CAASzB,EAAc,EAAK,CAAA,CAAC,CAC7B,CAAA,IAAA,CAAMA,CAAc4B,CAAAA,CAAAA,CAAc,GAAKA,CAAW,CAAA,CAClD,QAAU5B,CAAAA,CAAAA,CAAc,CAAG,CAAA,GAAG,EAC9B,KAAA+B,CAAAA,CACF,CACF,CAAC,CACH,CAAA,CAEaiH,GACXvI,CACoB,EAAA,CACpB,IAAMwI,CAAAA,CAAcxI,CAAS,CAAA,IAAA,CAAO,GAEpC,OACE2B,kBAAAA,CAAA,aAAC,CAAA,KAAA,CAAA,CACC,GAAK3B,CAAAA,CAAAA,CAAS,GACd,KAAO,CAAA,CACL,KAAO,CAAA,CAAA,EAAGA,CAAS,CAAA,IAAI,KACvB,MAAQ,CAAA,CAAA,EAAGA,CAAS,CAAA,IAAI,CACxB,EAAA,CAAA,CAAA,QAAA,CAAU,UACZ,CAGA2B,CAAAA,CAAAA,kBAAAA,CAAA,aAAC,CAAA,KAAA,CAAA,CACC,KAAO,CAAA,CACL,SAAU,UACV,CAAA,KAAA,CAAO,MACP,CAAA,MAAA,CAAQ,MACR,CAAA,eAAA,CAAiB3B,EAAS,KAC1B,CAAA,YAAA,CAAc,KACd,CAAA,SAAA,CAAW,CAAOA,IAAAA,EAAAA,CAAAA,CAAS,IAAI,CAAMA,GAAAA,EAAAA,CAAAA,CAAS,KAAK,CAAA,MAAA,EAASA,CAAS,CAAA,IAAA,CAAO,CAAC,CAAMA,GAAAA,EAAAA,CAAAA,CAAS,KAAK,CAAA,CAAA,CACjG,MAAQ,CAAA,WACV,EACF,CAEA2B,CAAAA,kBAAAA,CAAA,aAAC,CAAA,KAAA,CAAA,CACC,KAAO,CAAA,CACL,SAAU,UACV,CAAA,GAAA,CAAK,KACL,CAAA,IAAA,CAAM,KACN,CAAA,KAAA,CAAO,GAAG6G,CAAW,CAAA,EAAA,CAAA,CACrB,MAAQ,CAAA,CAAA,EAAGA,CAAW,CAAA,EAAA,CAAA,CACtB,UAAW,CAAgCxI,6BAAAA,EAAAA,CAAAA,CAAS,QAAQ,CAAA,IAAA,CAC9D,CAEA2B,CAAAA,CAAAA,kBAAAA,CAAA,cAAC,KACC,CAAA,CAAA,KAAA,CAAO,CACL,QAAA,CAAU,UACV,CAAA,KAAA,CAAO,OACP,MAAQ,CAAA,KAAA,CACR,eAAiB,CAAA,OAAA,CACjB,GAAK,CAAA,KAAA,CACL,KAAM,GACN,CAAA,SAAA,CAAW,kBACX,CAAA,SAAA,CAAW,eACb,CAAA,CACF,EACAA,kBAAA,CAAA,aAAA,CAAC,KACC,CAAA,CAAA,KAAA,CAAO,CACL,QAAA,CAAU,WACV,KAAO,CAAA,KAAA,CACP,MAAQ,CAAA,MAAA,CACR,eAAiB,CAAA,OAAA,CACjB,IAAM,CAAA,KAAA,CACN,GAAK,CAAA,GAAA,CACL,SAAW,CAAA,kBAAA,CACX,SAAW,CAAA,eACb,EACF,CACF,CACF,CAEJ,CAAA,CC/GA,IAAMd,EAAAA,CAAgB,CACpB,SAAA,CACA,SACA,CAAA,SAAA,CACA,UACA,SACA,CAAA,SAAA,CACA,SACA,CAAA,SACF,CAEa4H,CAAAA,EAAAA,CAAyB,CACpC1H,CACAC,CAAAA,CAAAA,GACe,CACf,GAAM,CACJ,aAAA,CAAAC,EAAgB,EAChB,CAAA,aAAA,CAAAC,CAAgB,CAAA,EAAA,CAChB,MAAApB,CAAAA,CAAAA,CAASe,GACT,WAAAM,CAAAA,CAAAA,CAAc,EAChB,CAAA,CAAIH,CAEJ,CAAA,OAAOP,EAAsBQ,CAAe,CAAA,IAAM,CAEhD,IAAMG,CAAQ7B,CAAAA,CAAAA,CAAc,EAAG,GAAG,CAAA,CAC5B8B,CAAW9B,CAAAA,CAAAA,CAAc2B,CAAgB,CAAA,EAAA,CAAKA,CAAa,CAC3DI,CAAAA,CAAAA,CAAQzB,CAAeC,CAAAA,CAAM,CAEnC,CAAA,OAAO,CACL,EAAIF,CAAAA,CAAAA,EACJ,CAAA,CAAA,CAAGmB,CAAO,CAAA,CAAA,CACV,EAAGA,CAAO,CAAA,CAAA,CACV,EAAI,CAAA,IAAA,CAAK,GAAIrB,CAAAA,CAAAA,CAAiB0B,CAAK,CAAC,CAAA,CAAIC,CACxC,CAAA,EAAA,CAAI,IAAK,CAAA,GAAA,CAAI3B,EAAiB0B,CAAK,CAAC,CAAIC,CAAAA,CAAAA,CAAW,EACnD,CAAA,IAAA,CAAML,EAAO,QAAY,EAAA,GAAA,CACzB,OAASzB,CAAAA,CAAAA,CAAc,EAAK,CAAA,CAAC,EAC7B,IAAMA,CAAAA,CAAAA,CAAc4B,CAAc,CAAA,EAAA,CAAKA,CAAW,CAAA,CAClD,SAAU5B,CAAc,CAAA,CAAA,CAAG,GAAG,CAAA,CAC9B,KAAA+B,CAAAA,CACF,CACF,CAAC,CACH,CAEaoH,CAAAA,EAAAA,CAAyB1I,CAAwC,EAAA,CAE5E,IAAM2I,CAAO,CAAA,CAAA,IAAA,CAAK,GAAI,EAAA,CAAI,EAAM3I,CAAAA,CAAAA,CAAS,EAAIA,CAAS,CAAA,CAAA,EAAK,GAE3D,CAAA,OACE2B,kBAAA,CAAA,aAAA,CAAC,OACC,GAAK3B,CAAAA,CAAAA,CAAS,EACd,CAAA,KAAA,CAAO,CACL,KAAA,CAAO,GAAGA,CAAS,CAAA,IAAI,CACvB,EAAA,CAAA,CAAA,MAAA,CAAQ,CAAGA,EAAAA,CAAAA,CAAS,KAAO,GAAG,CAAA,EAAA,CAAA,CAC9B,QAAU,CAAA,UAAA,CACV,SAAW,CAAA,CAAA,OAAA,EAAUA,EAAS,QAAQ,CAAA,IAAA,CACxC,CAGA2B,CAAAA,CAAAA,kBAAAA,CAAA,aAAC,CAAA,KAAA,CAAA,CACC,MAAO,CACL,QAAA,CAAU,UACV,CAAA,KAAA,CAAO,MACP,CAAA,MAAA,CAAQ,OACR,UAAY,CAAA,CAAA,wBAAA,EAA2B3B,CAAS,CAAA,KAAK,CAAKA,EAAAA,EAAAA,CAAAA,CAAS,KAAK,CACxE,gBAAA,CAAA,CAAA,QAAA,CAAU,uDACV,CAAA,SAAA,CAAW,CAAOA,IAAAA,EAAAA,CAAAA,CAAS,IAAI,CAAMA,GAAAA,EAAAA,CAAAA,CAAS,KAAK,CAAA,EAAA,CACrD,CACF,CAAA,CAAA,CAGA2B,mBAAA,aAAC,CAAA,KAAA,CAAA,CACC,KAAO,CAAA,CACL,QAAU,CAAA,UAAA,CACV,MAAO,KACP,CAAA,MAAA,CAAQ,KACR,CAAA,GAAA,CAAK,KACL,CAAA,IAAA,CAAM,MACN,UAAY,CAAA,4EAAA,CACZ,QAAU,CAAA,sDACZ,CACF,CAAA,CAAA,CAGAA,mBAAA,aAAC,CAAA,KAAA,CAAA,CACC,KAAO,CAAA,CACL,QAAU,CAAA,UAAA,CACV,KAAO,CAAA,MAAA,CACP,MAAQ,CAAA,MAAA,CACR,UAAY,CAAA,CAAA,gBAAA,EAAmBgH,CAAG,CAAA;AAAA,iBAAA,EACzBA,CAAG,CAAA;AAAA,iBACFA,EAAAA,CAAAA,CAAAA,CAAM,IAAM,GAAG,CAAA;AAAA,iBACfA,EAAAA,CAAAA,CAAAA,CAAM,KAAO,GAAG,CAAA;AAAA,WAAA,CAAA,CAE1B,QAAU,CAAA,uDAAA,CACV,YAAc,CAAA,QAChB,CACF,CAAA,CAAA,CAGAhH,kBAAA,CAAA,aAAA,CAAC,KACC,CAAA,CAAA,KAAA,CAAO,CACL,QAAA,CAAU,WACV,KAAO,CAAA,KAAA,CACP,MAAQ,CAAA,KAAA,CACR,GAAK,CAAA,KAAA,CACL,IAAM,CAAA,KAAA,CACN,UACE,CAAA,gEAAA,CACF,YAAc,CAAA,KAAA,CACd,MAAQ,CAAA,WACV,CACF,CAAA,CACF,CAEJ,CC5HA,CAKA,IAAMd,EAAAA,CAAgB,CACpB,SAAA,CACA,SACA,CAAA,SAAA,CACA,SACA,CAAA,SAAA,CACA,SACF,CAAA,CAEa+H,EAAsB,CAAA,CACjC7H,EACAC,CACe,GAAA,CACf,GAAM,CACJ,aAAAC,CAAAA,CAAAA,CAAgB,EAChB,CAAA,MAAA,CAAAnB,CAASe,CAAAA,EAAAA,CACT,WAAAM,CAAAA,CAAAA,CAAc,EAChB,CAAA,CAAIH,CAEJ,CAAA,OAAOP,EAAsBQ,CAAe,CAAA,KACnC,CACL,EAAA,CAAIrB,CAAW,EAAA,CACf,CAAGmB,CAAAA,CAAAA,CAAO,CAAIxB,CAAAA,CAAAA,CAAc,IAAM,CAAA,GAAG,CACrC,CAAA,CAAA,CAAGwB,CAAO,CAAA,CAAA,CAAIxB,EAAc,GAAK,CAAA,CAAC,CAClC,CAAA,EAAA,CAAIA,CAAc,CAAA,EAAA,CAAI,CAAC,CAAA,CACvB,EAAIA,CAAAA,CAAAA,CAAc,EAAK,CAAA,CAAC,CACxB,CAAA,IAAA,CAAMyB,CAAO,CAAA,QAAA,EAAY,IACzB,OAAS,CAAA,CAAA,CACT,IAAMzB,CAAAA,CAAAA,CAAc4B,CAAc,CAAA,EAAA,CAAKA,CAAW,CAAA,CAElD,QACE,CAAA,IAAA,CAAK,KAAM5B,CAAAA,CAAAA,CAAc,CAAG,CAAA,GAAG,CAAC,CAAA,CAChC,KAAK,KAAMA,CAAAA,CAAAA,CAAc,CAAG,CAAA,GAAG,CAAC,CAAA,CAAI,GACpC,CAAA,IAAA,CAAK,KAAMA,CAAAA,CAAAA,CAAc,EAAI,CAAA,EAAE,CAAC,CAAA,CAAI,GACnC,CAAA,CAAA,IAAA,CAAK,MAAMA,CAAc,CAAA,EAAA,CAAI,CAAC,CAAC,CAAI,CAAA,CAAA,EAAK,GAC3C,CAAA,KAAA,CAAOM,CAAeC,CAAAA,CAAM,CAC9B,CAAA,CACD,CACH,CAAA,CAEa+I,EAAsB7I,CAAAA,CAAAA,EAAwC,CAEzE,IAAM8I,CAAAA,CAAc9I,CAAS,CAAA,QAAA,CAAW,GAClC+I,CAAAA,CAAAA,CAAY,IAAK,CAAA,KAAA,CAAO/I,CAAS,CAAA,QAAA,CAAW,GAAW,CAAA,GAAI,CAC3DgJ,CAAAA,CAAAA,CAAa,IAAK,CAAA,KAAA,CAAOhJ,EAAS,QAAW,CAAA,GAAA,CAAa,GAAO,CAAA,CACjEiJ,CAAgB,CAAA,IAAA,CAAK,KAAMjJ,CAAAA,CAAAA,CAAS,QAAW,CAAA,GAAS,CAAI,CAAA,CAAA,CAG5DkJ,CACJ,CAAA,IAAA,CAAK,GAAM,CAAA,CAAA,IAAA,CAAK,KAAQ,CAAA,IAAA,CAAQJ,CAAe,EAAA,IAAA,CAAK,EAAM,CAAA,GAAG,CAAI,CAAA,EAAA,CAC7DK,CACJ,CAAA,IAAA,CAAK,GAAM,CAAA,CAAA,IAAA,CAAK,GAAI,EAAA,CAAI,IAAQJ,CAAAA,CAAAA,EAAa,KAAK,EAAM,CAAA,GAAG,CAAIC,CAAAA,CAAAA,CAC3DI,CAAY,CAAA,CAAA,IAAA,CAAK,GAAI,EAAA,CAAIH,CAAgB,CAAA,GAAA,CAAOC,CAAU,EAAA,GAAA,CAEhE,OACEvH,kBAAAA,CAAA,aAAC,CAAA,KAAA,CAAA,CACC,IAAK3B,CAAS,CAAA,EAAA,CACd,KAAO,CAAA,CACL,KAAO,CAAA,MAAA,CACP,MAAQ,CAAA,MAAA,CACR,QAAU,CAAA,UAAA,CACV,SAAW,CAAA,CAAA,WAAA,EAAcmJ,CAAK,CAAA,WAAA,EAAcC,CAAQ,CAAA,IAAA,CACtD,GAEAzH,kBAAA,CAAA,aAAA,CAAC,KACC,CAAA,CAAA,KAAA,CAAM,MACN,CAAA,MAAA,CAAO,MACP,CAAA,OAAA,CAAS,CAAI3B,CAAAA,EAAAA,CAAAA,CAAS,IAAO,CAAA,CAAC,CAAKA,EAAAA,EAAAA,CAAAA,CAAS,IAAO,CAAA,CAAC,IAAIA,CAAS,CAAA,IAAI,CAAIA,CAAAA,EAAAA,CAAAA,CAAS,IAAI,CAAA,CAAA,CACtF,KAAO,CAAA,CACL,SAAU,UACV,CAAA,GAAA,CAAK,CACL,CAAA,IAAA,CAAM,CACR,CAAA,CAAA,CAGA2B,kBAAA,CAAA,aAAA,CAAC,QACC,CAAG,CAAA;AAAA,iBACM3B,EAAAA,CAAAA,CAAS,KAAO,CAAC;AAAA,eAAA,EACnBA,EAAS,IAAO,CAAA,CAAC,KAAKA,CAAS,CAAA,IAAA,CAAO,CAAC,CAAKA,EAAAA,EAAAA,CAAAA,CAAS,IAAO,CAAA,CAAC,IAAIA,CAAS,CAAA,IAAA,CAAO,CAAC,CAAMA,GAAAA,EAAAA,CAAAA,CAAS,KAAO,CAAC;AAAA,cAAA,EAC1GA,EAAS,IAAO,CAAA,CAAC,IAAIA,CAAS,CAAA,IAAA,CAAO,CAAC,CAAIA,CAAAA,EAAAA,CAAAA,CAAS,IAAO,CAAA,CAAC,KAAKA,CAAS,CAAA,IAAA,CAAO,CAAC,CAAOA,IAAAA,EAAAA,CAAAA,CAAS,KAAO,CAAC;AAAA,UAAA,CAAA,CAE/G,IAAMA,CAAAA,CAAAA,CAAS,KACf,CAAA,OAAA,CAAQ,KACV,CAAA,CAAA,CAGA2B,kBAAA,CAAA,aAAA,CAAC,MACC,CAAA,CAAA,EAAA,CAAG,GACH,CAAA,EAAA,CAAI,CAAC3B,CAAS,CAAA,IAAA,CAAO,CACrB,CAAA,EAAA,CAAG,GACH,CAAA,EAAA,CAAIA,CAAS,CAAA,IAAA,CAAO,EACpB,MAAO,CAAA,SAAA,CACP,WAAY,CAAA,GAAA,CACZ,OAAQ,CAAA,KAAA,CACV,CAGA2B,CAAAA,kBAAAA,CAAA,cAAC,MACC,CAAA,CAAA,EAAA,CAAG,GACH,CAAA,EAAA,CAAI,CAAC3B,CAAAA,CAAS,IAAO,CAAA,CAAA,CACrB,GAAI,CAACA,CAAAA,CAAS,IAAO,CAAA,CAAA,CACrB,EAAI,CAAA,CAACA,CAAS,CAAA,IAAA,CAAO,EACrB,MAAO,CAAA,SAAA,CACP,WAAY,CAAA,KAAA,CACZ,OAAQ,CAAA,KAAA,CACV,CACA2B,CAAAA,kBAAAA,CAAA,cAAC,MACC,CAAA,CAAA,EAAA,CAAG,GACH,CAAA,EAAA,CAAI,CAAC3B,CAAAA,CAAS,IAAO,CAAA,CAAA,CACrB,GAAIA,CAAS,CAAA,IAAA,CAAO,CACpB,CAAA,EAAA,CAAI,CAACA,CAAAA,CAAS,IAAO,CAAA,CAAA,CACrB,OAAO,SACP,CAAA,WAAA,CAAY,KACZ,CAAA,OAAA,CAAQ,KACV,CAAA,CAAA,CACA2B,kBAAA,CAAA,aAAA,CAAC,QACC,EAAG,CAAA,GAAA,CACH,EAAI3B,CAAAA,CAAAA,CAAS,IAAO,CAAA,CAAA,CACpB,EAAI,CAAA,CAACA,EAAS,IAAO,CAAA,CAAA,CACrB,EAAIA,CAAAA,CAAAA,CAAS,IAAO,CAAA,CAAA,CACpB,MAAO,CAAA,SAAA,CACP,YAAY,KACZ,CAAA,OAAA,CAAQ,KACV,CAAA,CAAA,CACA2B,kBAAA,CAAA,aAAA,CAAC,MACC,CAAA,CAAA,EAAA,CAAG,IACH,EAAI3B,CAAAA,CAAAA,CAAS,IAAO,CAAA,CAAA,CACpB,EAAIA,CAAAA,CAAAA,CAAS,IAAO,CAAA,CAAA,CACpB,GAAIA,CAAS,CAAA,IAAA,CAAO,CACpB,CAAA,MAAA,CAAO,SACP,CAAA,WAAA,CAAY,KACZ,CAAA,OAAA,CAAQ,MACV,CACF,CACF,CAEJ,CAAA,CCxIA,IAAMqJ,GAAe,CACnB,SAAA,CACA,SACA,CAAA,SAAA,CACA,SACA,CAAA,SAAA,CACA,SACA,CAAA,SAAA,CACA,SACF,CAEaC,CAAAA,EAAAA,CAAwB,CACnCvI,CAAAA,CACAC,CACe,GAAA,CACf,GAAM,CACJ,cAAAC,CAAgB,CAAA,CAAA,CAChB,MAAAY,CAAAA,CAAAA,CAAS,EACT,CAAA,aAAA,CAAAX,CAAgB,CAAA,EAAA,CAChB,OAAApB,CAASuJ,CAAAA,EAAAA,CACT,WAAAlI,CAAAA,CAAAA,CAAc,CAChB,CAAA,CAAIH,CAEEZ,CAAAA,CAAAA,CAAwB,EAGxBmJ,CAAAA,CAAAA,CAAS9I,CAAsBQ,CAAAA,CAAAA,CAAgBuI,CAAU,EAAA,CAG7D,IAAMC,CAAAA,CAAYxI,EAAgB,CAAIY,CAAAA,CAAAA,EAAUZ,CAAgB,CAAA,CAAA,CAAA,CAAK,CAC/DG,CAAAA,CAAAA,CAAQ,GAAYS,CAAAA,CAAAA,CAAS,EAAI4H,CAAYD,CAAAA,CAAAA,CAE7CnI,CAAW9B,CAAAA,CAAAA,CAAc2B,CAAgB,CAAA,EAAA,CAAKA,CAAgB,CAAA,GAAG,EACjEwI,CAAc5J,CAAAA,CAAAA,CAAO,IAAK,CAAA,KAAA,CAAM,IAAK,CAAA,MAAA,EAAWA,CAAAA,CAAAA,CAAO,MAAM,CAAC,CAAA,CAC9D6J,CAAMjK,CAAAA,CAAAA,CAAiB0B,CAAK,CAAA,CAG5BwI,CAAgBrK,CAAAA,CAAAA,CAAc,GAAI,EAAE,CAAA,CAE1C,OAAO,CACL,EAAIK,CAAAA,CAAAA,EACJ,CAAA,CAAA,CAAGmB,EAAO,CACV,CAAA,CAAA,CAAGA,CAAO,CAAA,CAAA,CACV,EAAI,CAAA,IAAA,CAAK,GAAI4I,CAAAA,CAAG,EAAItI,CACpB,CAAA,EAAA,CAAI,IAAK,CAAA,GAAA,CAAIsI,CAAG,CAAA,CAAItI,CACpB,CAAA,IAAA,CAAML,EAAO,QAAY,EAAA,GAAA,CACzB,OAAS,CAAA,CAAA,CACT,IAAMG,CAAAA,CAAAA,CACN,QAAU,CAAA,CAAA,CACV,MAAOuI,CACP,CAAA,MAAA,CAAQ1I,CAER,CAAA,OAAA,CAAS,IAAK,CAAA,SAAA,CAAU,CACtB,OAAA,CAAS,KACT,WAAa,CAAA,KAAA,CACb,aAAe4I,CAAAA,CAAAA,CACf,UAAYrK,CAAAA,CAAAA,CAAc,EAAI,CAAA,EAAE,EAChC,UAAYmK,CAAAA,CACd,CAAC,CACH,CACF,CAAC,CAEDtJ,CAAAA,CAAAA,CAAU,KAAK,GAAGmJ,CAAM,CAGxB,CAAA,IAAA,IAAS3I,CAAI,CAAA,CAAA,CAAGA,CAAI,CAAA,CAAA,CAAGA,CAAK,EAAA,CAAA,CAC1B,IAAMiJ,CAAAA,CAAapJ,CAAsB,CAAA,CAAA,CAAG,KAAO,CACjD,GAAIb,CAAW,EAAA,CACf,CAAGmB,CAAAA,CAAAA,CAAO,CAAIxB,CAAAA,CAAAA,CAAc,EAAI,CAAA,CAAC,EACjC,CAAGwB,CAAAA,CAAAA,CAAO,CACV,CAAA,EAAA,CAAIxB,CAAc,CAAA,EAAA,CAAI,CAAC,CAAA,CACvB,GAAIA,CAAc,CAAA,GAAA,CAAK,EAAE,CAAA,CACzB,IAAMA,CAAAA,CAAAA,CAAc,EAAI,CAAA,EAAE,EAC1B,OAAS,CAAA,CAAA,CACT,IAAMA,CAAAA,CAAAA,CAAc,CAAG,CAAA,CAAC,CACxB,CAAA,QAAA,CAAU,EACV,KAAO,CAAA,SAAA,CACP,OAAS,CAAA,IAAA,CAAK,SAAU,CAAA,CACtB,aAAe,CAAA,IACjB,CAAC,CACH,CAAA,CAAE,CACFa,CAAAA,CAAAA,CAAU,IAAK,CAAA,GAAGyJ,CAAU,EAC9B,CAEA,OAAOzJ,CACT,CAgBa0J,CAAAA,EAAAA,CACX9J,CACoB,EAAA,CACpB,IAAI+J,CAAAA,CAAiC,EACrC,CAAA,GAAI,CACE/J,CAAAA,CAAS,OAAW,EAAA,OAAOA,CAAS,CAAA,OAAA,EAAY,WAClD+J,CAAc,CAAA,IAAA,CAAK,KAAM/J,CAAAA,CAAAA,CAAS,OAAO,CAAA,EAE7C,CAASgK,MAAAA,CAAAA,CAAG,EAKZ,GAAID,CAAY,CAAA,aAAA,CACd,OACEpI,kBAAAA,CAAA,aAAC,CAAA,KAAA,CAAA,CACC,IAAK3B,CAAS,CAAA,EAAA,CACd,KAAO,CAAA,CACL,KAAO,CAAA,MAAA,CACP,MAAQ,CAAA,MAAA,CACR,gBAAiBA,CAAS,CAAA,KAAA,CAC1B,YAAc,CAAA,KAAA,CACd,OAASA,CAAAA,CAAAA,CAAS,OAClB,CAAA,SAAA,CAAW,WAAWA,CAAS,CAAA,KAAK,CACtC,CAAA,CAAA,CACF,CAKJ,CAAA,GAAI+J,CAAY,CAAA,OAAA,CAAS,CACvB,IAAME,CAAAA,CAAejK,CAAS,CAAA,OAAA,EAAWA,CAAS,CAAA,IAAA,CAAO,EAAM,CAAA,CAAA,EAAA,CAC/D,OACE2B,kBAAA,CAAA,aAAA,CAAC,KACC,CAAA,CAAA,GAAA,CAAK3B,CAAS,CAAA,EAAA,CACd,KAAO,CAAA,CACL,MAAO,MACP,CAAA,MAAA,CAAQ,MACR,CAAA,UAAA,CAAY,CAA2BA,wBAAAA,EAAAA,CAAAA,CAAS,KAAK,CAAA,uBAAA,CAAA,CACrD,aAAc,KACd,CAAA,OAAA,CAASiK,CACT,CAAA,MAAA,CAAQ,WACV,CAAA,CACF,CAEJ,CAGA,GAAIF,CAAY,CAAA,OAAA,CAAS,CACvB,IAAMG,CAAelK,CAAAA,CAAAA,CAAS,OAAU,CAAA,IAAA,CAAK,IAAIA,CAAS,CAAA,IAAA,CAAO,GAAK,CAAA,EAAG,CAGzE,CAAA,GAAI+J,CAAY,CAAA,QAAA,CAAU,CACxB,IAAMI,CAAAA,CAAiBJ,CAAY,CAAA,OAAA,CAC/B,EAAM,CAAA,IAAA,CAAK,GAAI/J,CAAAA,CAAAA,CAAS,KAAO,EAAG,CAAA,CAAI,EACtC,CAAA,CAAA,CAEJ,OACE2B,kBAAAA,CAAA,aAAC,CAAA,KAAA,CAAA,CACC,IAAK3B,CAAS,CAAA,EAAA,CACd,KAAO,CAAA,CACL,KAAO,CAAA,MAAA,CACP,MAAQ,CAAA,MAAA,CACR,gBAAiBA,CAAS,CAAA,KAAA,CAC1B,YAAc,CAAA,KAAA,CACd,OAASkK,CAAAA,CAAAA,CAAeC,CACxB,CAAA,SAAA,CAAW,OAAOnK,CAAS,CAAA,IAAA,CAAO,CAAC,CAAA,GAAA,EAAMA,CAAS,CAAA,KAAK,CACvD,CAAA,CAAA,SAAA,CAAW,UAAUA,CAAS,CAAA,QAAQ,CACxC,IAAA,CAAA,CAAA,CACF,CAEJ,CAGA,OAAI+J,CAAAA,CAAY,OAEZpI,kBAAA,CAAA,aAAA,CAAC,KACC,CAAA,CAAA,GAAA,CAAK3B,CAAS,CAAA,EAAA,CACd,KAAO,CAAA,CACL,MAAO,MACP,CAAA,MAAA,CAAQ,MACR,CAAA,eAAA,CAAiB,SACjB,CAAA,YAAA,CAAc,KACd,CAAA,OAAA,CAASkK,EACT,SAAW,CAAA,CAAA,IAAA,EAAOlK,CAAS,CAAA,IAAA,CAAO,CAAC,CAAA,UAAA,CACrC,CACF,CAAA,CAAA,CAMF2B,mBAAA,aAAC,CAAA,KAAA,CAAA,CACC,GAAK3B,CAAAA,CAAAA,CAAS,EACd,CAAA,KAAA,CAAO,CACL,KAAA,CAAO,OACP,MAAQ,CAAA,MAAA,CACR,eAAiBA,CAAAA,CAAAA,CAAS,KAC1B,CAAA,YAAA,CAAc,KACd,CAAA,OAAA,CAASkK,EACT,SAAW,CAAA;AAAA,gBAAA,EACHlK,CAAS,CAAA,IAAI,CAAMA,GAAAA,EAAAA,CAAAA,CAAS,KAAK,CAAA;AAAA,gBAAA,EACjCA,CAAS,CAAA,IAAA,CAAO,CAAC,CAAA,GAAA,EAAMA,EAAS,KAAK,CAAA;AAAA,UAAA,CAAA,CAE7C,MAAQA,CAAAA,CAAAA,CAAS,IAAO,CAAA,EAAA,CAAK,WAAc,CAAA,WAC7C,CACF,CAAA,CAEJ,CAGA,GAAI+J,CAAY,CAAA,OAAA,CAAS,CAEvB,GAAIA,CAAY,CAAA,WAAA,CACd,OAAO,IAAA,CAIT,IAAMX,CAAAA,CAAY,IAAK,CAAA,KAAA,CAAMpJ,CAAS,CAAA,EAAA,CAAIA,CAAS,CAAA,EAAE,CAAI,CAAA,GAAA,CAAO,KAAK,EAErE,CAAA,OACE2B,kBAAA,CAAA,aAAA,CAAC,KACC,CAAA,CAAA,GAAA,CAAK3B,CAAS,CAAA,EAAA,CACd,KAAO,CAAA,CACL,KAAO,CAAA,MAAA,CACP,MAAQ,CAAA,MAAA,CACR,QAAU,CAAA,UAAA,CACV,UAAW,CAAUoJ,OAAAA,EAAAA,CAAQ,CAC/B,IAAA,CAAA,CAAA,CAAA,CAGAzH,kBAAA,CAAA,aAAA,CAAC,KACC,CAAA,CAAA,KAAA,CAAO,CACL,KAAA,CAAO,MACP,CAAA,MAAA,CAAQ,MACR,CAAA,eAAA,CAAiB,SACjB,CAAA,YAAA,CAAc,MACd,SAAW,CAAA;AAAA,kBACH3B,EAAAA,CAAAA,CAAS,KAAO,EAAG,CAAA;AAAA,kBAAA,EACnBA,CAAS,CAAA,IAAI,CAAMA,GAAAA,EAAAA,CAAAA,CAAS,KAAK,CAAA;AAAA,kBAAA,EACjCA,CAAS,CAAA,IAAA,CAAO,CAAC,CAAA,GAAA,EAAMA,EAAS,KAAK,CAAA;AAAA,YAAA,CAE/C,CACF,CAAA,CACF,CAEJ,CAGA,OACE2B,kBAAA,CAAA,aAAA,CAAC,KACC,CAAA,CAAA,GAAA,CAAK3B,CAAS,CAAA,EAAA,CACd,KAAO,CAAA,CACL,MAAO,MACP,CAAA,MAAA,CAAQ,MACR,CAAA,eAAA,CAAiBA,CAAS,CAAA,KAAA,CAC1B,YAAc,CAAA,KAAA,CACd,QAASA,CAAS,CAAA,OACpB,CACF,CAAA,CAEJ,ECnQA,IAAMoK,GAAc,CAClB,SAAA,CACA,SACA,CAAA,SAAA,CACA,SACA,CAAA,SAAA,CACA,SACA,CAAA,SACF,EAEaC,EAAuB,CAAA,CAClCtJ,CACAC,CAAAA,CAAAA,GACe,CACf,GAAM,CACJ,aAAA,CAAAC,EAAgB,EAChB,CAAA,MAAA,CAAAY,CAAS,CAAA,GAAA,CACT,aAAAX,CAAAA,CAAAA,CAAgB,CAChB,CAAA,MAAA,CAAApB,EAASsK,EACT,CAAA,WAAA,CAAAjJ,CAAc,CAAA,EAAA,CACd,SAAAmJ,CAAW,CAAA,GACb,CAAItJ,CAAAA,CAAAA,CAEJ,OAAOP,CAAsBQ,CAAAA,CAAAA,CAAe,IAAM,CAEhD,IAAMG,CAAAA,CAAQ,IAAK,CAAA,MAAA,GAAW,IAAK,CAAA,EAAA,CAAK,CAClCmJ,CAAAA,CAAAA,CAAWhL,CAAc,CAAA,CAAA,CAAGsC,CAAM,CAAA,CAGlC2I,EAAQ,IAAK,CAAA,MAAA,EACbC,CAAAA,CAAAA,CAAOtJ,CAAe,EAAA,EAAA,CAAMqJ,CAAQ,CAAA,EAAA,CAAA,CAE1C,OAAO,CACL,EAAA,CAAI5K,CAAW,EAAA,CACf,EAAGmB,CAAO,CAAA,CAAA,CAAI,IAAK,CAAA,GAAA,CAAIK,CAAK,CAAImJ,CAAAA,CAAAA,CAChC,CAAGxJ,CAAAA,CAAAA,CAAO,CAAI,CAAA,IAAA,CAAK,GAAIK,CAAAA,CAAK,EAAImJ,CAChC,CAAA,EAAA,CAAIhL,CAAc,CAAA,IAAA,CAAM,EAAG,CAAI2B,CAAAA,CAAAA,CAC/B,EAAI3B,CAAAA,CAAAA,CAAc,KAAM,IAAI,CAAA,CAAI2B,CAChC,CAAA,IAAA,CAAMoJ,CACN,CAAA,OAAA,CAAS,EAAME,CAAAA,CAAAA,CAAQ,GACvB,IAAMC,CAAAA,CAAAA,CACN,QAAU,CAAA,CAAA,CACV,MAAO3K,CAAO,CAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAK,QAAWA,CAAAA,CAAAA,CAAO,MAAM,CAAC,CACvD,CAAA,OAAA,CAAS,IAAK,CAAA,SAAA,CAAU,CACtB,KAAO0K,CAAAA,CAAAA,CACP,UAAY,CAAA,IAAA,CAAK,MAAO,EAAA,CAAI,IAAK,CAAA,EAAA,CAAK,EACtC,QAAUC,CAAAA,CACZ,CAAC,CACH,CACF,CAAC,CACH,CAAA,CAEaC,GAAuB1K,CAAwC,EAAA,CA5D5E,IAAAwB,CAAAA,CA6DE,IAAIuI,CACF,CAAA,EACF,CAAA,GAAI,CACE/J,CAAS,CAAA,OAAA,EAAW,OAAOA,CAAAA,CAAS,OAAY,EAAA,QAAA,GAClD+J,CAAc,CAAA,IAAA,CAAK,MAAM/J,CAAS,CAAA,OAAO,CAE7C,EAAA,CAAA,MAASgK,CAAG,CAAA,EAKZ,IAAMW,EACJ,IAAK,CAAA,GAAA,CAAI3K,CAAS,CAAA,IAAA,CAAO,GAAQ+J,EAAAA,CAAAA,CAAY,UAAc,EAAA,CAAA,CAAE,EAAI,EAAM,CAAA,CAAA,CACnEa,CAAeb,CAAAA,CAAAA,CAAAA,CAAY,UAAY/J,CAAS,CAAA,IAAA,EAAQ2K,CAGxDzF,CAAAA,CAAAA,CAAS,KAAK,GAClB,CAAA,CAAA,CAAA,CAAA,CAAA,CACC1D,CAAAxB,CAAAA,CAAAA,CAAS,MAAT,GAAA,IAAA,CAAA,MAAA,CAAAwB,CAAiB,CAAA,QAAA,GAAY,IAAMxB,CAAS,CAAA,IAAA,EAAQ,EACvD,CAAA,CACMmF,CAAU,CAAA,IAAA,CAAK,GAAI,CAAA,CAAA,CAAGnF,EAAS,IAAO,CAAA,EAAE,CACxCoF,CAAAA,CAAAA,CAAUpF,CAAS,CAAA,OAAA,CAAUkF,CAASC,CAAAA,CAAAA,CAE5C,OACExD,kBAAA,CAAA,aAAA,CAAC,KACC,CAAA,CAAA,GAAA,CAAK3B,EAAS,EACd,CAAA,KAAA,CAAO,CACL,KAAA,CAAO,OACP,MAAQ,CAAA,MAAA,CACR,QAAU,CAAA,UACZ,CAGA2B,CAAAA,CAAAA,kBAAAA,CAAA,aAAC,CAAA,KAAA,CAAA,CACC,MAAO,CACL,QAAA,CAAU,UACV,CAAA,GAAA,CAAK,MACL,IAAM,CAAA,KAAA,CACN,KAAO,CAAA,CAAA,EAAGiJ,EAAc,CAAC,CAAA,EAAA,CAAA,CACzB,MAAQ,CAAA,CAAA,EAAGA,CAAc,CAAA,CAAC,CAC1B,EAAA,CAAA,CAAA,SAAA,CAAW,wBACX,UAAY,CAAA,CAAA,wBAAA,EAA2B5K,CAAS,CAAA,KAAK,0BACrD,MAAQ,CAAA,YAAA,CACR,OAASoF,CAAAA,CAAAA,CAAU,EACrB,CACF,CAAA,CAAA,CAGAzD,kBAAA,CAAA,aAAA,CAAC,KACC,CAAA,CAAA,KAAA,CAAO,CACL,QAAA,CAAU,WACV,GAAK,CAAA,KAAA,CACL,IAAM,CAAA,KAAA,CACN,KAAO,CAAA,CAAA,EAAGiJ,CAAc,CAAA,CAAC,KACzB,MAAQ,CAAA,CAAA,EAAGA,CAAc,CAAA,CAAC,CAC1B,EAAA,CAAA,CAAA,SAAA,CAAW,uBACX,CAAA,UAAA,CAAY,2BAA2B5K,CAAS,CAAA,KAAK,CACrD,uBAAA,CAAA,CAAA,MAAA,CAAQ,aACR,OAASoF,CAAAA,CAAAA,CAAU,EACrB,CAAA,CACF,EAGAzD,kBAAA,CAAA,aAAA,CAAC,KACC,CAAA,CAAA,KAAA,CAAO,CACL,QAAA,CAAU,UACV,CAAA,GAAA,CAAK,MACL,IAAM,CAAA,KAAA,CACN,KAAO,CAAA,CAAA,EAAGiJ,CAAW,CAAA,EAAA,CAAA,CACrB,MAAQ,CAAA,CAAA,EAAGA,CAAW,CACtB,EAAA,CAAA,CAAA,SAAA,CAAW,uBACX,CAAA,UAAA,CAAY,CAA2B5K,wBAAAA,EAAAA,CAAAA,CAAS,KAAK,CAAA,OAAA,EAAUA,EAAS,KAAK,CAAA,yBAAA,CAAA,CAC7E,YAAc,CAAA,KAAA,CACd,OAAQ,WACR,CAAA,OAAA,CAASoF,CACX,CAAA,CACF,CACF,CAEJ,CAAA,CC1GO,IAAMyF,EAAAA,CAAsD,CACjE,QAAA,CAAU,CACR,eAAA,CAAiB/J,GACjB,cAAgBS,CAAAA,EAClB,CACA,CAAA,QAAA,CAAU,CACR,eAAA,CAAiBK,EACjB,CAAA,cAAA,CAAgBG,EAClB,CACA,CAAA,MAAA,CAAQ,CACN,eAAA,CAAiBI,EACjB,CAAA,cAAA,CAAgBE,EAClB,CAAA,CACA,UAAW,CACT,eAAA,CAAiBG,EACjB,CAAA,cAAA,CAAgBC,EAClB,CACA,CAAA,OAAA,CAAS,CACP,eAAA,CAAiBE,GACjB,cAAgBC,CAAAA,EAClB,CACA,CAAA,KAAA,CAAO,CACL,eAAA,CAAiBE,EACjB,CAAA,cAAA,CAAgBC,EAClB,CACA,CAAA,IAAA,CAAM,CACJ,eAAA,CAAiBE,GACjB,cAAgBG,CAAAA,EAClB,CACA,CAAA,KAAA,CAAO,CACL,eAAiBO,CAAAA,EAAAA,CACjB,cAAgBE,CAAAA,EAClB,CACA,CAAA,KAAA,CAAO,CACL,eAAA,CAAiBG,GACjB,cAAgBC,CAAAA,EAClB,CACA,CAAA,MAAA,CAAQ,CACN,eAAiBM,CAAAA,EAAAA,CACjB,cAAgBC,CAAAA,EAClB,EACA,MAAQ,CAAA,CACN,eAAiBK,CAAAA,EAAAA,CACjB,cAAgBE,CAAAA,EAClB,CACA,CAAA,SAAA,CAAW,CACT,eAAiBO,CAAAA,EAAAA,CACjB,cAAgBC,CAAAA,EAClB,CACA,CAAA,KAAA,CAAO,CACL,eAAA,CAAiBM,GACjB,cAAgBE,CAAAA,EAClB,CACA,CAAA,QAAA,CAAU,CACR,eAAA,CAAiBM,EACjB,CAAA,cAAA,CAAgBC,EAClB,CACA,CAAA,MAAA,CAAQ,CACN,eAAA,CAAiBI,GACjB,cAAgBY,CAAAA,EAClB,CACA,CAAA,MAAA,CAAQ,CACN,eAAiBE,CAAAA,EAAAA,CACjB,cAAgBS,CAAAA,EAClB,CACA,CAAA,SAAA,CAAW,CACT,eAAA,CAAiBG,GACjB,cAAgBG,CAAAA,EAClB,CACA,CAAA,QAAA,CAAU,CACR,eAAiBE,CAAAA,EAAAA,CACjB,cAAgBC,CAAAA,EAClB,EACA,MAAQ,CAAA,CACN,eAAiBE,CAAAA,EAAAA,CACjB,cAAgBC,CAAAA,EAClB,CACA,CAAA,MAAA,CAAQ,CACN,eAAiBS,CAAAA,EAAAA,CACjB,cAAgBQ,CAAAA,EAClB,EACA,KAAO,CAAA,CACL,eAAiBO,CAAAA,EAAAA,CACjB,eAAgBK,EAClB,CACF,CCrHO,CAAA,IAAMI,CAAiB,CAAA,IAAe,CAC3C,GAAI,OAAO,MAAW,EAAA,WAAA,CAAa,OAAO,MAAA,CAG1C,IAAMC,CAAAA,CACJ,SAAU,CAAA,SAAA,EACV,UAAU,MACT,EAAA,MAAA,CAAuC,KACxC,EAAA,EAAA,CACIC,CACJ,CAAA,gEAAA,CAAiE,IAC/DD,CAAAA,CACF,EAGIE,CAAgB,CAAA,MAAA,CAAO,UAAc,EAAA,GAAA,CAGrCC,EAAW,cAAkB,GAAA,MAAA,EAAU,SAAU,CAAA,cAAA,CAAiB,EAExE,OAAOF,CAAAA,EAAeC,CAAiBC,EAAAA,CACzC,CAEaC,CAAAA,CAAAA,CACXnK,CACoB,EAAA,CA3BtB,IAAAQ,CAAAC,CAAAA,CAAAA,CAAAyC,CA4BE,CAAA,OAAK4G,GAEEM,CAAAA,CAAAA,CAAAC,CAAA,CAAA,EAAA,CACFrK,GADE,CAGL,aAAA,CAAe,IAAK,CAAA,KAAA,CAAA,CAAOA,CAAO,CAAA,aAAA,EAAiB,EAAM,EAAA,EAAG,EAE5D,WAAa,CAAA,IAAA,CAAK,KAAOA,CAAAA,CAAAA,CAAAA,CAAO,aAAe,EAAM,EAAA,EAAG,CAExD,CAAA,QAAA,CAAU,KAAK,KAAOA,CAAAA,CAAAA,CAAAA,CAAO,QAAY,EAAA,GAAA,EAAO,EAAG,CAAA,CAEnD,OAASoK,CAAAA,CAAAA,CAAAC,EAAA,EACJrK,CAAAA,CAAAA,CAAO,OADH,CAAA,CAAA,CAGP,OAAS,CAAA,IAAA,CAAK,KAAOQ,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAR,EAAO,OAAP,GAAA,IAAA,CAAA,MAAA,CAAAQ,CAAgB,CAAA,OAAA,GAAW,CAAK,EAAA,GAAG,CAAI,CAAA,GAAA,CAC5D,KAAM,IAAK,CAAA,KAAA,CAAA,CAAA,CAAA,CAAOC,CAAAT,CAAAA,CAAAA,CAAO,UAAP,IAAAS,CAAAA,MAAAA,CAAAA,CAAAA,CAAgB,IAAQ,GAAA,CAAA,EAAK,GAAG,CAAI,CAAA,GAAA,CACtD,QAAU,CAAA,IAAA,CAAK,KAAOyC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAlD,CAAO,CAAA,OAAA,GAAP,YAAAkD,CAAgB,CAAA,QAAA,GAAY,GAAQ,EAAA,GAAG,CAAI,CAAA,GACnE,CACF,CAAA,CAAA,CAAA,CAlB8BlD,CAmBhC,CAGasK,CAAAA,EAAAA,CAAmBC,CACzBT,EAAAA,CAAAA,EAEES,CAAAA,CAAAA,CAAa,CAAM,GAAA,CAAA,CAFI,MCpB1BC,IAAAA,EAAAA,CAAN,KAAuB,CAarB,aAAc,CAZd,IAAA,CAAQ,UAA6C,CAAA,IAAI,IACzD,IAAQ,CAAA,KAAA,CAAuB,IAC/B,CAAA,IAAA,CAAQ,SAAqB,CAAA,KAAA,CAC7B,IAAQ,CAAA,aAAA,CAAwB,EAChC,IAAQ,CAAA,aAAA,CAAwB,GAAO,CAAA,EAAA,CAGvC,IAAQ,CAAA,UAAA,CAAqB,CAC7B,CAAA,IAAA,CAAQ,kBAA4B,GACpC,CAAA,IAAA,CAAQ,aAAwB,CAAA,CAAA,CAChC,IAAQ,CAAA,UAAA,CAAqB,CAI3B,CAAA,IAAA,CAAK,OAAS,IAAK,CAAA,MAAA,CAAO,IAAK,CAAA,IAAI,EACrC,CAEA,YAAA,CAAaC,CAAoC,CAAA,CAC/C,KAAK,UAAW,CAAA,GAAA,CAAIA,CAAU,CAAA,EAAA,CAAIA,CAAS,CAAA,CAGvC,CAAC,IAAA,CAAK,WAAa,IAAK,CAAA,UAAA,CAAW,IAAO,CAAA,CAAA,EAC5C,KAAK,KAAM,GAEf,CAEA,eAAA,CAAgBC,EAAkB,CAChC,IAAMD,CAAY,CAAA,IAAA,CAAK,UAAW,CAAA,GAAA,CAAIC,CAAE,CAAA,CACpCD,IAEFnL,CAAa,CAAA,UAAA,CAAWmL,CAAU,CAAA,SAAuB,EAIvDA,CAAU,CAAA,gBAAA,EACV,QAAS,CAAA,IAAA,CAAK,SAASA,CAAU,CAAA,gBAAgB,CAEjD,EAAA,QAAA,CAAS,IAAK,CAAA,WAAA,CAAYA,CAAU,CAAA,gBAAgB,EAGtD,IAAK,CAAA,UAAA,CAAW,MAAOC,CAAAA,CAAE,CAIvB,CAAA,CAAA,IAAA,CAAK,UAAW,CAAA,IAAA,GAAS,GAC3B,IAAK,CAAA,IAAA,GAET,CAEQ,KAAc,EAAA,CAChB,IAAK,CAAA,SAAA,GAET,KAAK,SAAY,CAAA,IAAA,CACjB,IAAK,CAAA,aAAA,CAAgB,YAAY,GAAI,EAAA,CACrC,IAAK,CAAA,aAAA,CAAgB,KAAK,aAC1B,CAAA,IAAA,CAAK,UAAa,CAAA,CAAA,CAClB,IAAK,CAAA,KAAA,CAAQ,qBAAsB,CAAA,IAAA,CAAK,MAAM,CAChD,EAAA,CAEQ,IAAa,EAAA,CACd,KAAK,SAEV,GAAA,IAAA,CAAK,SAAY,CAAA,KAAA,CACb,KAAK,KAAU,GAAA,IAAA,GACjB,oBAAqB,CAAA,IAAA,CAAK,KAAK,CAAA,CAC/B,IAAK,CAAA,KAAA,CAAQ,OAEjB,CAEQ,MAAA,CAAOC,CAA2B,CAAA,CAExC,IAAMC,CAAYD,CAAAA,CAAAA,CAAc,IAAK,CAAA,aAAA,CAGrC,GAAIC,CAAY,CAAA,IAAA,CAAK,aAAe,CAAA,CAClC,IAAK,CAAA,KAAA,CAAQ,qBAAsB,CAAA,IAAA,CAAK,MAAM,CAC9C,CAAA,MACF,CAcA,GAZA,IAAK,CAAA,aAAA,CAAgBD,CAAeC,CAAAA,CAAAA,CAAY,KAAK,aACrD,CAAA,IAAA,CAAK,UAGDD,EAAAA,CAAAA,CAAAA,CAAc,IAAK,CAAA,aAAA,EAAiB,IAAK,CAAA,iBAAA,GAC3C,KAAK,UAAa,CAAA,IAAA,CAAK,UACvB,CAAA,IAAA,CAAK,WAAa,CAClB,CAAA,IAAA,CAAK,aAAgBA,CAAAA,CAAAA,CAAAA,CAKnB,CADiB,CAAC,QAAA,CAAS,MACZ,CAAA,CACjB,IAAK,CAAA,KAAA,CAAQ,qBAAsB,CAAA,IAAA,CAAK,MAAM,CAC9C,CAAA,MACF,CAGA,IAAME,EAAgC,EAAC,CAEvC,IAAK,CAAA,UAAA,CAAW,QAAQ,CAACJ,CAAAA,CAAWC,CAAO,GAAA,CAEzC,GAAID,CAAAA,CAAU,QACZ,CAAA,OAGFA,EAAU,UACV,EAAA,CAAA,IAAMK,CAAYR,CAAAA,EAAAA,CAAgBG,EAAU,UAAU,CAAA,CAElDM,CAAkB,CAAA,CAAA,CAChBC,EAAiC,EAAC,CAGxCP,CAAU,CAAA,SAAA,CAAYA,CAAU,CAAA,SAAA,CAAU,GAAKzL,CAAAA,CAAAA,GACzCA,EAAS,IAAQ,EAAA,CAAA,GAErB+L,CAGA/L,EAAAA,CAAAA,CAAAA,CAAS,CAAKA,EAAAA,CAAAA,CAAS,EACvBA,CAAAA,CAAAA,CAAS,GAAKA,CAAS,CAAA,EAAA,CACvBA,CAAS,CAAA,EAAA,EAAMyL,CAAU,CAAA,OAAA,CAAQ,OACjCzL,CAAAA,CAAAA,CAAS,IAAMyL,CAAU,CAAA,OAAA,CAAQ,IACjCzL,CAAAA,CAAAA,CAAS,IAAMyL,CAAU,CAAA,OAAA,CAAQ,QACjCzL,CAAAA,CAAAA,CAAS,IAAMyL,CAAU,CAAA,OAAA,CAAQ,QAG7BA,CAAAA,CAAAA,CAAU,aAAkB,GAAA,UAAA,CAC9BzL,CAAS,CAAA,QAAA,EAAY,EAErBA,CAAS,CAAA,QAAA,EAAYA,CAAS,CAAA,EAAA,CAAK,CAGrCA,CAAAA,CAAAA,CAAS,IAAQ,EAAA,GAAA,CAGjB,KAAK,YAAaA,CAAAA,CAAAA,CAAUyL,CAAS,CAAA,CAGrC,IAAK,CAAA,qBAAA,CAAsBzL,CAAUyL,CAAAA,CAAAA,CAAWO,CAAY,CAG5D,CAAA,IAAA,CAAK,aAAchM,CAAAA,CAAAA,CAAUyL,CAAS,CAE/BzL,CAAAA,CAAAA,CAAAA,CACR,CAGGgM,CAAAA,CAAAA,CAAa,OAAS,CACxBP,EAAAA,CAAAA,CAAU,SAAU,CAAA,IAAA,CAAK,GAAGO,CAAY,CAItCP,CAAAA,CAAAA,CAAU,gBAAkB,CAACK,CAAAA,EAC/BL,CAAU,CAAA,cAAA,CAAeA,CAAU,CAAA,SAAS,CAI1CM,CAAAA,CAAAA,GAAoB,IACtBF,CAAoB,CAAA,IAAA,CAAKH,CAAE,CAAA,CACvBD,CAAU,CAAA,UAAA,EACZA,CAAU,CAAA,UAAA,IAGhB,CAAC,CAAA,CAGDI,CAAoB,CAAA,OAAA,CAASH,GAAO,IAAK,CAAA,eAAA,CAAgBA,CAAE,CAAC,EAGxD,IAAK,CAAA,SAAA,GACP,IAAK,CAAA,KAAA,CAAQ,qBAAsB,CAAA,IAAA,CAAK,MAAM,CAAA,EAElD,CAEQ,YAAa1L,CAAAA,CAAAA,CAAoByL,CAAoC,CAAA,CA9M/E,IAAAjK,CA+MI,CAAA,IAAMyK,CAAUzK,CAAAA,CAAAA,CAAAA,CAAAiK,EAAU,MAAV,GAAA,IAAA,CAAA,MAAA,CAAAjK,CAAkB,CAAA,OAAA,CAClC,GAAI,CAACyK,CAAS,CAAA,OAEd,GAAM,CAAE,aAAA,CAAAC,CAAc,CAAA,CAAIT,EAGtBQ,CAAQ,CAAA,OAAA,EAAWC,CAAkB,GAAA,UAAA,GACvClM,EAAS,CAAK,EAAA,IAAA,CAAK,GAAIA,CAAAA,CAAAA,CAAS,IAAO,CAAA,EAAG,CAAI,CAAA,EAAA,CAC9CA,EAAS,QAAY,EAAA,IAAA,CAAK,GAAIA,CAAAA,CAAAA,CAAS,IAAO,CAAA,GAAI,CAAI,CAAA,CAAA,CAAA,CAKtDiM,EAAQ,SACPC,GAAAA,CAAAA,GAAkB,MAAUA,EAAAA,CAAAA,GAAkB,QAE/ClM,CAAAA,GAAAA,CAAAA,CAAS,CACP,EAAA,IAAA,CAAK,IAAIA,CAAS,CAAA,IAAA,CAAO,GAAOA,CAAAA,CAAAA,CAAS,GAAG,UAAW,CAAA,CAAC,CAAC,CAAA,CAAI,IAI7DiM,CAAQ,CAAA,MAAA,EAAUC,CAAkB,GAAA,SAAA,GACtClM,CAAS,CAAA,CAAA,EAAK,IAAK,CAAA,GAAA,CAAIA,EAAS,IAAO,CAAA,GAAI,CAAI,CAAA,EAAA,CAC/CA,EAAS,CAAK,EAAA,IAAA,CAAK,GAAIA,CAAAA,CAAAA,CAAS,KAAO,GAAI,CAAA,CAAI,EAEnD,EAAA,CAEQ,qBACNA,CAAAA,CAAAA,CACAyL,CACAO,CAAAA,CAAAA,CACM,CA9OV,IAAAxK,CAAAA,CAAAC,CA+OI,CAAA,GAAI,EAAAgK,CAAU,CAAA,aAAA,GAAkB,QAAY,EAAA,CAACzL,EAAS,OAEtD,CAAA,CAAA,GAAI,CACF,IAAM+J,CAAc,CAAA,IAAA,CAAK,KAAM/J,CAAAA,CAAAA,CAAS,OAAiB,CAGzD,CAAA,GAAI+J,CAAY,CAAA,OAAA,EAAW,CAACA,CAAAA,CAAY,WAAa,CAAA,CAEnD,GAAI0B,CAAU,CAAA,UAAA,CAAa,CAAM,GAAA,CAAA,CAAG,CAClC,IAAMU,CAAgB7L,CAAAA,CAAAA,CAAa,SACnC,CAAA,MAAA,CAAO,MAAO6L,CAAAA,CAAAA,CAAe,CAC3B,EAAI,CAAA,CAAA,EAAGnM,CAAS,CAAA,EAAE,UAAU,IAAK,CAAA,GAAA,EAAK,CAAA,CAAA,CACtC,CAAGA,CAAAA,CAAAA,CAAS,CAAIT,CAAAA,CAAAA,CAAc,GAAI,CAAC,CAAA,CACnC,CAAGS,CAAAA,CAAAA,CAAS,EAAIT,CAAc,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CACnC,GAAIA,CAAc,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CACvB,EAAIA,CAAAA,CAAAA,CAAc,CAAG,CAAA,CAAC,EACtB,IAAM,CAAA,EAAA,CACN,OAAS,CAAA,EAAA,CACT,KAAMS,CAAS,CAAA,IAAA,CAAO,EACtB,CAAA,QAAA,CAAU,EACV,KAAOA,CAAAA,CAAAA,CAAS,KAChB,CAAA,OAAA,CAAS,IAAK,CAAA,SAAA,CAAU,CAAE,OAAA,CAAS,EAAK,CAAC,CAAA,CACzC,MAAQA,CAAAA,CAAAA,CAAS,MACnB,CAAC,CACDgM,CAAAA,CAAAA,CAAa,KAAKG,CAAa,EACjC,CAOA,GAAA,CAAA,CAJkB1K,CAAAD,CAAAA,CAAAA,CAAAA,CAAAxB,CAAS,CAAA,MAAA,GAAT,YAAAwB,CAAiB,CAAA,QAAA,GAAjB,IAAAC,CAAAA,CAAAA,CAA6B,KAChBzB,CAAS,CAAA,IAAA,GACH+J,CAAY,CAAA,aAAA,EAAiB,IAE/C,CAEjBA,CAAAA,CAAY,WAAc,CAAA,CAAA,CAAA,CAC1B/J,CAAS,CAAA,OAAA,CAAU,IAAK,CAAA,SAAA,CAAU+J,CAAW,CAG7C,CAAA,IAAMqC,CAAW,CAAA,MAAA,CAAO,UAAa,CAAA,GAAA,CAC/BC,CAAaD,CAAAA,CAAAA,CAAW,GAAK,EAC7BE,CAAAA,CAAAA,CAAuC,EAAC,CAGxC7F,CAAe,CAAA,CACnB,SACA,CAAA,SAAA,CACA,UACA,SACA,CAAA,SAAA,CACA,SACA,CAAA,SACF,EAGA,IAAS7F,IAAAA,CAAAA,CAAI,CAAGA,CAAAA,CAAAA,CAAIyL,EAAYzL,CAAK,EAAA,CAAA,CACnC,IAAM+F,CAAAA,CAAW/F,CAAIyL,CAAAA,CAAAA,CACfzF,CAAcD,CAAAA,CAAAA,CAAW,KAAK,EAAK,CAAA,CAAA,CACnCE,CAASF,CAAAA,CAAAA,CAAW,EAGpBG,CAAAA,CAAAA,CAAcvH,CAAc,CAAA,CAAA,EAAA,CAAM,EAAG,CACrCwH,CAAAA,CAAAA,CAAexH,CAAc,CAAA,CAAA,EAAA,CAAK,EAAE,CAAA,CAEpCyH,CAAaJ,CAAAA,CAAAA,CAAcE,EAC3BG,CAAeJ,CAAAA,CAAAA,CAAAA,CAASE,CAAgB,EAAA,EAAA,CAGxCK,EAAeJ,CAAa,CAAA,IAAA,CAAK,EAAK,CAAA,CAAA,CACtCK,EAAQ,CAAK,EAAA,CAAA,CAAIV,CAAW,CAAA,EAAA,CAAA,CAE5B4F,CAAgBjM,CAAAA,CAAAA,CAAa,OAAQ,EAAA,CAC3C,OAAO,MAAOiM,CAAAA,CAAAA,CAAe,CAC3B,EAAA,CAAI,GAAGvM,CAAS,CAAA,EAAE,CAAUY,OAAAA,EAAAA,CAAC,GAC7B,CAAGZ,CAAAA,CAAAA,CAAS,CAAI,CAAA,IAAA,CAAK,GAAIgH,CAAAA,CAAU,CAAIC,CAAAA,CAAAA,CAAc,GACrD,CAAGjH,CAAAA,CAAAA,CAAS,CAAI,CAAA,IAAA,CAAK,IAAIgH,CAAU,CAAA,CAAIC,CAAc,CAAA,EAAA,CACrD,GAAI,IAAK,CAAA,GAAA,CAAIG,CAAY,CAAA,CAAIC,CAAQ,CAAA,IAAA,CAAK,GAAIL,CAAAA,CAAU,EAAI,CAC5D,CAAA,EAAA,CAAI,IAAK,CAAA,GAAA,CAAII,CAAY,CAAA,CAAIC,CAAQ,CAAA,IAAA,CAAK,IAAIL,CAAU,CAAA,CAAI,CAC5D,CAAA,IAAA,CAAM,GAAML,CAAAA,CAAAA,CAAW,EACvB,CAAA,OAAA,CAAS,EACT,IAAMpH,CAAAA,CAAAA,CAAc,CAAG,CAAA,CAAC,GAAK,CAAIoH,CAAAA,CAAAA,CAAW,EAC5C,CAAA,CAAA,QAAA,CAAUpH,EAAc,CAAG,CAAA,GAAG,CAC9B,CAAA,KAAA,CACEkH,CAAa,CAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAK,QAAWA,CAAAA,CAAAA,CAAa,MAAM,CAAC,EAC9D,OAAS,CAAA,IAAA,CAAK,SAAU,CAAA,CACtB,QAAS,CACT,CAAA,CAAA,QAAA,CAAU,CACV,CAAA,CAAA,OAAA,CAAS,IAAK,CAAA,MAAA,EAAW,CAAA,EAC3B,CAAC,CACD,CAAA,MAAA,CAAQzG,CAAS,CAAA,MACnB,CAAC,CACDsM,CAAAA,CAAAA,CAAmB,IAAKC,CAAAA,CAAa,EACvC,CAGA,IAAMC,CAAYJ,CAAAA,CAAAA,CAAW,CAAI,CAAA,CAAA,CACjC,IAASxL,IAAAA,CAAAA,CAAI,EAAGA,CAAI4L,CAAAA,CAAAA,CAAW5L,CAAK,EAAA,CAAA,CAClC,IAAMQ,CAAAA,CAAS,IAAK,CAAA,EAAA,CAAK,EAAIR,CAAK4L,CAAAA,CAAAA,CAC5BC,CAAenM,CAAAA,CAAAA,CAAa,OAAQ,EAAA,CAC1C,MAAO,CAAA,MAAA,CAAOmM,EAAc,CAC1B,EAAA,CAAI,CAAGzM,EAAAA,CAAAA,CAAS,EAAE,CAASY,MAAAA,EAAAA,CAAC,CAC5B,CAAA,CAAA,CAAA,CAAGZ,EAAS,CACZ,CAAA,CAAA,CAAGA,CAAS,CAAA,CAAA,CACZ,EAAI,CAAA,IAAA,CAAK,GAAIoB,CAAAA,CAAK,EAAI7B,CAAc,CAAA,CAAA,CAAG,CAAC,CAAA,CACxC,GAAI,IAAK,CAAA,GAAA,CAAI6B,CAAK,CAAA,CAAI7B,EAAc,CAAG,CAAA,CAAC,CACxC,CAAA,IAAA,CAAM,EACN,CAAA,OAAA,CAAS,CACT,CAAA,IAAA,CAAMA,EAAc,CAAG,CAAA,CAAC,CACxB,CAAA,QAAA,CAAU,EACV,KAAO,CAAA,SAAA,CACP,OAAS,CAAA,IAAA,CAAK,UAAU,CACtB,OAAA,CAAS,CACT,CAAA,CAAA,MAAA,CAAQ,CACV,CAAA,CAAC,CACD,CAAA,MAAA,CAAQS,EAAS,MACnB,CAAC,CACDsM,CAAAA,CAAAA,CAAmB,IAAKG,CAAAA,CAAY,EACtC,CAGA,IAAMC,CAAgBpM,CAAAA,CAAAA,CAAa,OAAQ,EAAA,CAC3C,MAAO,CAAA,MAAA,CAAOoM,CAAe,CAAA,CAC3B,GAAI,CAAG1M,EAAAA,CAAAA,CAAS,EAAE,CAAA,MAAA,CAAA,CAClB,EAAGA,CAAS,CAAA,CAAA,CACZ,CAAGA,CAAAA,CAAAA,CAAS,EACZ,EAAI,CAAA,CAAA,CACJ,EAAI,CAAA,CAAA,CACJ,IAAM,CAAA,EAAA,CACN,OAAS,CAAA,CAAA,CACT,KAAM,EACN,CAAA,QAAA,CAAU,CACV,CAAA,KAAA,CAAO,SACP,CAAA,OAAA,CAAS,IAAK,CAAA,SAAA,CAAU,CAAE,OAAS,CAAA,CAAA,CAAK,CAAC,CAAA,CACzC,MAAQA,CAAAA,CAAAA,CAAS,MACnB,CAAC,EACDsM,CAAmB,CAAA,IAAA,CAAKI,CAAa,CAAA,CAErCV,EAAa,IAAK,CAAA,GAAGM,CAAkB,EACzC,CACF,CACF,CAAA,MAAStC,CAAG,CAAA,EAGd,CAEQ,aACNhK,CAAAA,CAAAA,CACAyL,EACM,CACN,GAAM,CAAE,aAAA,CAAAS,CAAe,CAAA,MAAA,CAAAlL,CAAO,CAAA,CAAIyK,EAC5BQ,CAAUjL,CAAAA,CAAAA,EAAA,IAAAA,CAAAA,MAAAA,CAAAA,CAAAA,CAAQ,OAEpBkL,CAAAA,CAAAA,GAAkB,UAChBlM,EAAAA,CAAAA,CAAS,KAAO,EAClBA,CAAAA,CAAAA,CAAS,OAAW,CAAA,CAAA,GAAA,CAAMA,EAAS,IAAQ,EAAA,EAAA,CAClCA,CAAS,CAAA,IAAA,CAAO,KACzBA,CAAS,CAAA,OAAA,CAAUA,CAAS,CAAA,IAAA,CAAO,EAGjCiM,CAAAA,CAAAA,CAAAA,EAAA,IAAAA,EAAAA,CAAAA,CAAS,UACXjM,CAAS,CAAA,OAAA,EAAW,EAAM,CAAA,IAAA,CAAK,IAAIA,CAAS,CAAA,IAAA,CAAO,EAAG,CAAA,CAAI,KAEnDkM,CAAkB,GAAA,OAAA,GAAWD,CAAA,EAAA,IAAA,EAAAA,CAAS,CAAA,OAAA,CAAA,CAE/CjM,CAAS,CAAA,OAAA,CACNA,EAAS,IAAO,CAAA,GAAA,EAAQ,EAAM,CAAA,IAAA,CAAK,IAAIA,CAAS,CAAA,IAAA,CAAO,EAAG,CAAA,CAAI,IAEjEA,CAAS,CAAA,OAAA,CAAUA,CAAS,CAAA,IAAA,CAAO,IAEvC,CAEA,QAAW,EAAA,CACT,OAAO,CACL,gBAAA,CAAkB,IAAK,CAAA,UAAA,CAAW,IAClC,CAAA,UAAA,CAAY,IAAK,CAAA,UAAA,CACjB,UAAW,IAAK,CAAA,SAAA,CAChB,cAAgB,CAAA,KAAA,CAAM,IAAK,CAAA,IAAA,CAAK,UAAW,CAAA,MAAA,EAAQ,CAAE,CAAA,MAAA,CACnD,CAAC2M,CAAAA,CAAKC,IAASD,CAAMC,CAAAA,CAAAA,CAAK,SAAU,CAAA,MAAA,CAAQvM,GAAMA,CAAE,CAAA,IAAA,CAAO,CAAC,CAAA,CAAE,MAC9D,CAAA,CACF,CACF,CACF,CAGA,YAAawM,CAAAA,CAAAA,CAAmB,CAC9B,IAAA,CAAK,cAAgB,GAAOA,CAAAA,EAC9B,CAGA,cAAA,CAAenB,EAAkB,CAC/B,IAAMD,CAAY,CAAA,IAAA,CAAK,UAAW,CAAA,GAAA,CAAIC,CAAE,CAAA,CACpCD,GAAa,CAACA,CAAAA,CAAU,QAC1BA,GAAAA,CAAAA,CAAU,SAAW,IACrBA,CAAAA,CAAAA,CAAU,QAAW,CAAA,WAAA,CAAY,KAErC,EAAA,CAGA,eAAgBC,CAAAA,CAAAA,CAAkB,CAChC,IAAMD,CAAY,CAAA,IAAA,CAAK,WAAW,GAAIC,CAAAA,CAAE,CACpCD,CAAAA,CAAAA,EAAaA,CAAU,CAAA,QAAA,GACzBA,CAAU,CAAA,QAAA,CAAW,MAGjB,IAAK,CAAA,UAAA,CAAW,IAAO,CAAA,CAAA,EAAK,CAAC,IAAA,CAAK,SACpC,EAAA,IAAA,CAAK,OAGX,EAAA,CAGA,iBAAkBC,CAAAA,CAAAA,CAAqB,CACrC,IAAMD,CAAAA,CAAY,IAAK,CAAA,UAAA,CAAW,IAAIC,CAAE,CAAA,CACxC,OAAOD,CAAAA,CAAY,CAAC,CAACA,CAAU,CAAA,QAAA,CAAW,KAC5C,CAGA,YAAA,CAAaC,CAA2C,CAAA,CACtD,OAAO,IAAK,CAAA,UAAA,CAAW,GAAIA,CAAAA,CAAE,CAC/B,CACF,CAAA,CAGaoB,CAAmB,CAAA,IAAItB,GCra7B,SAASuB,EACdC,CAAAA,CAAAA,CACAd,EACAlL,CACiB,CAAA,CACjB,GAAM,CAACiM,EAAaC,CAAc,CAAA,CAAIC,UAAS,CAAA,KAAK,EAC9CC,CAAiBC,CAAAA,QAAAA,CAAsB,IAAI,CAAA,CAC3CC,CAAeD,CAAAA,QAAAA,CAA8B,IAAI,CAAA,CACjDE,EAAUF,QAAoB,CAAA,IAAI,CAGlCG,CAAAA,CAAAA,CAAcH,QAAoB,CAAA,IAAI,CACtCI,CAAAA,CAAAA,CAAkB,OAAOT,CAAmB,EAAA,QAAA,CAC5CU,CAAYD,CAAAA,CAAAA,CAAkBD,CAAcR,CAAAA,CAAAA,CAE5CW,CAAUC,CAAAA,aAAAA,CAAY,IACnB,IAAI,OAAA,CAAeC,CAAY,EAAA,CAxD1C,IAAArM,EAAAC,CAAAA,EAAAA,CAAAyC,EAAAC,CAAAA,EAAAA,CAAA2J,GAAAC,EAAAC,CAAAA,EAAAA,CAAAC,EAAAC,CAAAA,EAAAA,CAAAC,EAAAC,CAAAA,EAAAA,CAAAC,EAAAC,CAAAA,EAAAA,CA0DM,IAAIC,CAA8B,CAAA,IAAA,CAElC,GAAId,CAAAA,CAAiB,CAEnB,GAAI,OAAO,QAAA,EAAa,YAAa,OACrCc,CAAAA,CAAU,QAAS,CAAA,cAAA,CAAevB,CAAwB,EAC5D,CACEuB,KAAAA,CAAAA,CAAUb,EAAU,OAGtB,CAAA,GAAI,CAACa,CAAAA,CAAS,EAEZ/M,EAAA,CAAA,OAAA,CAAQ,IAAR,GAAA,IAAA,EAAAA,GAAA,IACE,CAAA,OAAA,CAAA,CAAA,oBAAA,EAAuBiM,CAAkB,CAAA,CAAA,SAAA,EAAYT,CAAc,CAAA,CAAA,CAAA,CAAM,UAAU,CAAA,iEAAA,CAAA,CAAA,CAGrFa,GACA,CAAA,MACF,CAEA,IAAMW,CAAOD,CAAAA,CAAAA,CAAQ,qBAAsB,EAAA,CACrCxN,EAAS,CACb,CAAA,CAAGyN,CAAK,CAAA,IAAA,CAAOA,CAAK,CAAA,KAAA,CAAQ,CAC5B,CAAA,CAAA,CAAGA,EAAK,GAAMA,CAAAA,CAAAA,CAAK,MAAS,CAAA,CAC9B,EAEMC,CAAmB5D,CAAAA,EAAAA,CAAWqB,CAAa,CAAA,CACjD,GAAI,CAACuC,CAAAA,CAAkB,CACrB,OAAA,CAAQ,KAAM,CAAA,CAAA,gBAAA,EAAmBvC,CAAa,CAAA,WAAA,CAAa,EAC3D2B,CAAQ,EAAA,CACR,MACF,CAGA,IAAMa,CAAkB1N,CAAAA,CAAAA,CACpBmK,CAAwBnK,CAAAA,CAAM,EAC9B,MAGEZ,CAAAA,CAAAA,CAAYqO,CACf,CAAA,eAAA,CAAgB1N,CAAQ2N,CAAAA,CAAAA,EAAmB,EAAE,EAC7C,GAAK1O,CAAAA,CAAAA,EAAcoL,CAAAC,CAAAA,CAAAA,CAAA,GACfrL,CADe,CAAA,CAAA,CAElB,MAAQ0O,CAAAA,CAAAA,EAAmB1N,CAC7B,CAAE,CAAA,CAAA,CAIJ,GAAI,OAAO,QAAa,EAAA,WAAA,CAAa,CACnC6M,CAAAA,GACA,MACF,CAEA,IAAMc,CAAAA,CAAY,QAAS,CAAA,aAAA,CAAc,KAAK,CAAA,CAC9CA,EAAU,KAAM,CAAA,QAAA,CAAW,OAC3BA,CAAAA,CAAAA,CAAU,KAAM,CAAA,GAAA,CAAM,GACtBA,CAAAA,CAAAA,CAAU,MAAM,IAAO,CAAA,GAAA,CACvBA,CAAU,CAAA,KAAA,CAAM,MAAQ,MACxBA,CAAAA,CAAAA,CAAU,KAAM,CAAA,MAAA,CAAS,OACzBA,CAAU,CAAA,KAAA,CAAM,aAAgB,CAAA,MAAA,CAChCA,CAAU,CAAA,KAAA,CAAM,MAAS,CAAA,MAAA,CACzB,SAAS,IAAK,CAAA,WAAA,CAAYA,CAAS,CAAA,CACnCrB,EAAa,OAAUqB,CAAAA,CAAAA,CAGvB,IAAMC,EAAAA,CAAOC,kBAAWF,CAAS,CAAA,CACjCpB,CAAQ,CAAA,OAAA,CAAUqB,EAElB,CAAsBD,CAAAA,CAAU,uBAG1BG,KAAAA,EAAAA,CACJ5C,CAAkB,GAAA,SAAA,CACd,KACAA,CAAkB,GAAA,MAAA,CAChB,GACA,CAAA,GAAA,CACF6C,IACJjB,EAAA3J,CAAAA,CAAAA,EAAAA,CAAAA,CAAA1C,EAAAiN,CAAAA,CAAAA,EAAA,IAAAA,CAAAA,MAAAA,CAAAA,CAAAA,CAAiB,OAAjB,GAAA,IAAA,CAAA,MAAA,CAAAjN,GAA0B,OAA1B,GAAA,IAAA,CAAA0C,EACAD,CAAAA,CAAAA,EAAAA,CAAAlD,CAAA,EAAA,IAAA,CAAA,MAAA,CAAAA,CAAQ,CAAA,OAAA,GAAR,YAAAkD,EAAiB,CAAA,OAAA,GADjB,IAAA4J,CAAAA,EAAAA,CAEAgB,EACIE,CAAAA,EAAAA,CAAAA,CACJd,EAAAD,CAAAA,CAAAA,EAAAA,CAAAA,CAAAF,GAAAW,CAAA,EAAA,IAAA,CAAA,MAAA,CAAAA,CAAiB,CAAA,OAAA,GAAjB,YAAAX,EAA0B,CAAA,QAAA,GAA1B,IAAAE,CAAAA,EAAAA,CAAAA,CAAsCD,GAAAhN,CAAA,EAAA,IAAA,CAAA,MAAA,CAAAA,CAAQ,CAAA,OAAA,GAAR,IAAAgN,CAAAA,MAAAA,CAAAA,EAAAA,CAAiB,QAAvD,GAAA,IAAA,CAAAE,GAAmE,GAC/De,CAAAA,EAAAA,CAAAA,CAAOX,EAAAD,CAAAA,CAAAA,EAAAA,CAAAA,CAAAF,GAAAO,CAAA,EAAA,IAAA,CAAA,MAAA,CAAAA,CAAiB,CAAA,OAAA,GAAjB,YAAAP,EAA0B,CAAA,IAAA,GAA1B,IAAAE,CAAAA,EAAAA,CAAAA,CAAkCD,EAAApN,CAAAA,CAAAA,EAAA,IAAAA,CAAAA,MAAAA,CAAAA,CAAAA,CAAQ,UAAR,IAAAoN,CAAAA,MAAAA,CAAAA,EAAAA,CAAiB,IAAnD,GAAA,IAAA,CAAAE,GAA2D,CAGlEY,CAAAA,EAAAA,CAAc,CAAG,EAAA,IAAA,CAAK,KAAK,CAAA,CAAA,EAAI,IAAK,CAAA,MAAA,EAAS,CAAA,QAAA,CAAS,EAAE,CAAA,CAAE,OAAO,CAAG,CAAA,CAAC,CAAC,CAAA,EAC5E9B,CAAe,CAAA,OAAA,CAAU8B,EAGzB,CAAA,IAAMC,GAAkBC,CAAiC,EAAA,CACnD7B,CAAQ,CAAA,OAAA,EACVA,CAAQ,CAAA,OAAA,CAAQ,MACd5L,CAAAA,kBAAAA,CAAA,cAACA,kBAAM,CAAA,QAAA,CAAN,IACEyN,CAAAA,CAAAA,CACE,OAAQ/O,CAAMA,EAAAA,CAAAA,CAAE,IAAO,CAAA,CAAC,EACxB,GAAKL,CAAAA,CAAAA,EACJ2B,kBAAA,CAAA,aAAA,CAAC,KACC,CAAA,CAAA,GAAA,CAAK3B,CAAS,CAAA,EAAA,CACd,MAAOD,EAAoBC,CAAAA,CAAuB,CAAA,CAAA,CAEjDyO,CAAiB,CAAA,cAAA,CAAezO,CAAQ,CAC3C,CACD,CACL,CACF,EAEJ,CAAA,CAGA8M,CAAiB,CAAA,YAAA,CAAa,CAC5B,EAAA,CAAIoC,GACJ,SAAA9O,CAAAA,CAAAA,CACA,gBAAkBuO,CAAAA,CAAAA,CAClB,eAAgBF,CAAiB,CAAA,cAAA,CACjC,cAAAU,CAAAA,EAAAA,CACA,WAAY,IAAM,CAEZ5B,CAAQ,CAAA,OAAA,GACVA,CAAQ,CAAA,OAAA,CAAQ,OAAQ,EAAA,CACxBA,EAAQ,OAAU,CAAA,IAAA,CAAA,CAEpBD,CAAa,CAAA,OAAA,CAAU,IACvBF,CAAAA,CAAAA,CAAe,OAAU,CAAA,IAAA,CACzBF,EAAe,KAAK,CAAA,CACpBW,CAAQ,GACV,CACA,CAAA,OAAA,CAAS,CAAE,OAAA,CAAAkB,GAAS,QAAAC,CAAAA,EAAAA,CAAU,IAAAC,CAAAA,EAAK,EACnC,aAAA/C,CAAAA,CAAAA,CACA,MAAQwC,CAAAA,CAAAA,EAAmB1N,EAC3B,UAAY,CAAA,CACd,CAAC,CAAA,CAEDkM,CAAe,CAAA,IAAI,EACrB,CAAC,EACA,CAACF,CAAAA,CAAgBd,CAAelL,CAAAA,CAAAA,CAAQyM,EAAiBC,CAAS,CAAC,CAEhE2B,CAAAA,CAAAA,CAASzB,cAAY,IACpBX,CAAAA,CAGE,OAAQ,CAAA,OAAA,EAFNU,CAAAA,CAAAA,EAGR,CAAA,CAACA,EAASV,CAAW,CAAC,CAGnBqC,CAAAA,CAAAA,CAAQ1B,cAAY,IAAM,CAC1BR,CAAe,CAAA,OAAA,EACjBN,EAAiB,cAAeM,CAAAA,CAAAA,CAAe,OAAO,EAE1D,CAAG,CAAA,EAAE,CAAA,CAECmC,EAAS3B,aAAY,CAAA,IAAM,CAC3BR,CAAAA,CAAe,OACjBN,EAAAA,CAAAA,CAAiB,eAAgBM,CAAAA,CAAAA,CAAe,OAAO,EAE3D,CAAA,CAAG,EAAE,CAECoC,CAAAA,CAAAA,CAAS5B,aAAY,CAAA,KAErBR,EAAe,OACjBN,GAAAA,CAAAA,CAAiB,eAAgBM,CAAAA,CAAAA,CAAe,OAAO,CACvDA,CAAAA,CAAAA,CAAe,OAAU,CAAA,IAAA,CAAA,CAE3BF,EAAe,KAAK,CAAA,CAGbS,CAAQ,EAAA,CAAA,CACd,CAACA,CAAO,CAAC,CAAA,CAEN,CAACuB,CAAaO,CAAAA,CAAc,CAAItC,CAAAA,UAAAA,CAAwB,IAAI,CAGlEuC,CAAAA,WAAAA,CAAU,IAAM,CACdD,EAAerC,CAAe,CAAA,OAAO,EACvC,CAAA,CAAG,CAACH,CAAW,CAAC,CAAA,CAEhB,IAAM0C,CAAWC,CAAAA,SAAAA,CAAQ,IAClBV,CAAAA,CACEpC,EAAiB,iBAAkBoC,CAAAA,CAAW,CAD5B,CAAA,KAAA,CAExB,CAACA,CAAW,CAAC,CAuBhB,CAAA,OApBAQ,WAAU,CAAA,IACD,IAAM,CACPtC,EAAe,OACjBN,EAAAA,CAAAA,CAAiB,eAAgBM,CAAAA,CAAAA,CAAe,OAAO,CAAA,CAErDG,CAAQ,CAAA,OAAA,GACVA,EAAQ,OAAQ,CAAA,OAAA,EAChBA,CAAAA,CAAAA,CAAQ,OAAU,CAAA,IAAA,CAAA,CAGlBD,CAAa,CAAA,OAAA,EACb,SAAS,IAAK,CAAA,QAAA,CAASA,CAAa,CAAA,OAAO,IAE3C,QAAS,CAAA,IAAA,CAAK,WAAYA,CAAAA,CAAAA,CAAa,OAAO,CAC9CA,CAAAA,CAAAA,CAAa,OAAU,CAAA,IAAA,EAE3B,CACC,CAAA,EAAE,CAAA,CAGAG,EAIE,CAAE,MAAA,CAAA4B,CAAQ,CAAA,WAAA,CAAApC,EAAa,KAAAqC,CAAAA,CAAAA,CAAO,MAAAC,CAAAA,CAAAA,CAAQ,OAAAC,CAAQ,CAAA,QAAA,CAAAG,CAAS,CAAA,CAHrD,CAAE,MAAA,CAAAN,CAAQ,CAAA,WAAA,CAAApC,EAAa,SAAAS,CAAAA,CAAAA,CAAW,KAAA4B,CAAAA,CAAAA,CAAO,OAAAC,CAAQ,CAAA,MAAA,CAAAC,CAAQ,CAAA,QAAA,CAAAG,CAAS,CAI7E","file":"index.js","sourcesContent":["import { Particle } from './types';\n\nexport const randomInRange = (min: number, max: number): number => {\n return Math.random() * (max - min) + min;\n};\n\nexport const degreesToRadians = (degrees: number): number => {\n return (degrees * Math.PI) / 180;\n};\n\nexport const generateId = (): string => {\n return Math.random().toString(36).substring(2, 9);\n};\n\nexport const getRandomColor = (colors: string[]): string => {\n return (\n colors[Math.floor(Math.random() * colors.length)] || colors[0] || '#ffffff'\n );\n};\n\nexport const createParticleStyle = (\n particle: Particle,\n _containerRect: DOMRect\n): React.CSSProperties => {\n return {\n position: 'absolute',\n left: `${particle.x}px`,\n top: `${particle.y}px`,\n width: `${particle.size}px`,\n height: `${particle.size}px`,\n transform: `rotate(${particle.rotation}deg) translateX(-50%) translateY(-50%)`,\n opacity: particle.opacity,\n pointerEvents: 'none',\n transition: 'none',\n willChange: 'transform, opacity',\n };\n};\n","import { Particle } from './types';\n\nexport interface PooledParticle extends Particle {\n _pooled?: boolean;\n}\n\nexport class ParticlePool {\n private pool: PooledParticle[] = [];\n private maxSize: number;\n private created: number = 0;\n\n constructor(maxSize: number = 1000) {\n this.maxSize = maxSize;\n }\n\n acquire(): PooledParticle {\n // Try to get a particle from the pool\n const particle = this.pool.pop();\n\n if (particle) {\n particle._pooled = false;\n return particle;\n }\n\n // Create a new particle if pool is empty\n this.created++;\n return {\n id: `p${this.created}`,\n x: 0,\n y: 0,\n vx: 0,\n vy: 0,\n life: 0,\n opacity: 0,\n size: 0,\n rotation: 0,\n color: '',\n _pooled: false,\n };\n }\n\n release(particle: PooledParticle): void {\n // Don't add to pool if already pooled or pool is full\n if (particle._pooled || this.pool.length >= this.maxSize) {\n return;\n }\n\n // Reset particle properties\n particle._pooled = true;\n particle.element = undefined;\n particle.config = undefined;\n\n // Add back to pool\n this.pool.push(particle);\n }\n\n releaseAll(particles: PooledParticle[]): void {\n particles.forEach((p) => this.release(p));\n }\n\n clear(): void {\n this.pool = [];\n }\n\n getStats() {\n return {\n poolSize: this.pool.length,\n totalCreated: this.created,\n maxSize: this.maxSize,\n };\n }\n}\n\n// Create a singleton instance\nexport const particlePool = new ParticlePool();\n\n// Helper function to create particles using the pool\nexport function createPooledParticle(props: Partial<Particle>): PooledParticle {\n const particle = particlePool.acquire();\n\n // Apply properties\n Object.assign(particle, props);\n\n // Ensure id is unique if not provided\n if (!props.id) {\n particle.id = `p${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }\n\n return particle;\n}\n\n// Helper function to create multiple particles\nexport function createPooledParticles(\n count: number,\n factory: (index: number) => Partial<Particle>\n): PooledParticle[] {\n const particles: PooledParticle[] = [];\n\n for (let i = 0; i < count; i++) {\n particles.push(createPooledParticle(factory(i)));\n }\n\n return particles;\n}\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport {\n randomInRange,\n degreesToRadians,\n generateId,\n getRandomColor,\n} from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst defaultColors = [\n '#f44336',\n '#e91e63',\n '#9c27b0',\n '#673ab7',\n '#3f51b5',\n '#2196f3',\n '#03a9f4',\n '#00bcd4',\n '#009688',\n '#4caf50',\n '#8bc34a',\n '#cddc39',\n '#ffeb3b',\n '#ffc107',\n '#ff9800',\n '#ff5722',\n];\n\nexport const createConfettiParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 50,\n startVelocity = 20,\n colors = defaultColors,\n elementSize = 20,\n } = config;\n\n return createPooledParticles(particleCount, () => {\n const angle = randomInRange(0, 360);\n const velocity = randomInRange(startVelocity * 0.5, startVelocity);\n const color = getRandomColor(colors);\n\n return {\n id: generateId(),\n x: origin.x,\n y: origin.y,\n vx: Math.cos(degreesToRadians(angle)) * velocity,\n vy: Math.sin(degreesToRadians(angle)) * velocity - 30,\n life: config.lifetime || 150,\n opacity: 1,\n size: randomInRange(elementSize * 0.7, elementSize * 1.5),\n rotation: randomInRange(0, 360),\n color,\n };\n });\n};\n\nexport const renderConfettiParticle = (particle: Particle): React.ReactNode => {\n const particleWithEffects = particle as Particle & {\n config?: AnimationConfig;\n };\n const flutterEffect = particleWithEffects.config?.effects?.flutter;\n\n // Apply flutter transform if enabled\n const flutterTransform =\n flutterEffect && particle.life > 0\n ? `rotateY(${Math.sin(particle.life * 0.1) * 360}deg)`\n : '';\n\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '60%',\n backgroundColor: particle.color,\n borderRadius: '3px',\n boxShadow: '0 2px 4px rgba(0,0,0,0.2)',\n transform: flutterTransform,\n transformStyle: 'preserve-3d',\n perspective: '1000px',\n }}\n />\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nexport const createSparkleParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 35,\n spread = 120,\n startVelocity = 15,\n elementSize = 25,\n colors = ['#FFD700', '#FFFFFF'],\n } = config;\n\n return createPooledParticles(particleCount, () => {\n const velocityScale = startVelocity / 45; // Scale based on default\n return {\n id: generateId(),\n x: origin.x + randomInRange(-spread, spread),\n y: origin.y + randomInRange(-spread, spread),\n vx: randomInRange(-3, 3) * velocityScale,\n vy: randomInRange(-3, 3) * velocityScale,\n life: config.lifetime || 120,\n opacity: 0,\n size: randomInRange(elementSize * 0.4, elementSize * 1.2),\n rotation: randomInRange(0, 360),\n color:\n colors[Math.floor(Math.random() * colors.length)] ||\n colors[0] ||\n '#ffffff',\n };\n });\n};\n\nexport const renderSparkleParticle = (\n particle: Particle & { config?: AnimationConfig }\n): React.ReactNode => {\n const scale = particle.opacity;\n\n // Calculate twinkle effect if enabled\n const twinkle = particle.config?.effects?.twinkle\n ? 0.3 + Math.abs(Math.sin(particle.life * 0.2)) * 0.7\n : 1;\n\n return (\n <svg\n key={particle.id}\n width=\"100%\"\n height=\"100%\"\n viewBox=\"0 0 24 24\"\n style={{\n transform: `scale(${scale}) rotate(${particle.rotation}deg)`,\n filter: 'drop-shadow(0 0 6px rgba(255, 215, 0, 0.8))',\n opacity: twinkle,\n transition: 'opacity 0.1s ease-out',\n }}\n >\n <path\n d=\"M12 0L14.59 8.41L23 11L14.59 13.59L12 22L9.41 13.59L1 11L9.41 8.41L12 0Z\"\n fill={particle.color}\n />\n </svg>\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId, getRandomColor } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst heartColors = ['#ff1744', '#e91e63', '#ff4569', '#ff6b6b', '#ee5a70'];\n\nexport const createHeartParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 25,\n startVelocity = 12,\n colors = heartColors,\n elementSize = 30,\n } = config;\n\n return createPooledParticles(particleCount, () => {\n const angle = randomInRange(-45, -135);\n const velocity = randomInRange(startVelocity * 0.7, startVelocity * 1.3);\n const horizontalDrift = randomInRange(-2, 2);\n\n return {\n id: generateId(),\n x: origin.x + randomInRange(-10, 10),\n y: origin.y,\n vx: Math.cos((angle * Math.PI) / 180) * velocity + horizontalDrift,\n vy: Math.sin((angle * Math.PI) / 180) * velocity,\n life: config.lifetime || 180,\n opacity: 1,\n size: randomInRange(elementSize * 0.6, elementSize * 1.2),\n rotation: randomInRange(-20, 20),\n color: getRandomColor(colors),\n };\n });\n};\n\nexport const renderHeartParticle = (\n particle: Particle & { config?: AnimationConfig }\n): React.ReactNode => {\n // Calculate pulse effect if enabled\n const pulse = particle.config?.effects?.pulse\n ? 1 + Math.sin(particle.life * 0.2) * 0.1\n : 1;\n\n return (\n <svg\n key={particle.id}\n width=\"100%\"\n height=\"100%\"\n viewBox=\"0 0 24 24\"\n fill={particle.color}\n style={{\n filter: `drop-shadow(0 0 ${particle.size * 0.15}px ${particle.color})`,\n transform: `scale(${pulse})`,\n transition: 'transform 0.1s ease-out',\n }}\n >\n <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\" />\n </svg>\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport {\n randomInRange,\n degreesToRadians,\n generateId,\n getRandomColor,\n} from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst fireworkColors = [\n '#ff0000',\n '#00ff00',\n '#0000ff',\n '#ffff00',\n '#ff00ff',\n '#00ffff',\n '#ffffff',\n];\n\nexport const createFireworkParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 60,\n startVelocity = 25,\n colors = fireworkColors,\n elementSize = 8,\n } = config;\n\n return createPooledParticles(particleCount, (i) => {\n const angle = (360 / particleCount) * i + randomInRange(-5, 5);\n const velocity = randomInRange(startVelocity * 0.5, startVelocity * 1.2);\n const color = getRandomColor(colors);\n\n return {\n id: generateId(),\n x: origin.x,\n y: origin.y,\n vx: Math.cos(degreesToRadians(angle)) * velocity,\n vy: Math.sin(degreesToRadians(angle)) * velocity - 10,\n life: config.lifetime || 140,\n opacity: 1,\n size: randomInRange(elementSize * 0.6, elementSize * 1.4),\n rotation: 0,\n color,\n };\n });\n};\n\nexport const renderFireworkParticle = (particle: Particle): React.ReactNode => {\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '100%',\n backgroundColor: '#ffffff',\n borderRadius: '50%',\n boxShadow: `\n 0 0 ${particle.size}px ${particle.color},\n 0 0 ${particle.size * 2}px ${particle.color},\n 0 0 ${particle.size * 3}px ${particle.color},\n 0 0 ${particle.size * 4}px ${particle.color}\n `,\n background: `radial-gradient(circle, #ffffff 0%, ${particle.color} 40%, transparent 70%)`,\n }}\n />\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst bubbleColors = [\n 'rgba(66, 165, 245, 0.4)',\n 'rgba(41, 182, 246, 0.4)',\n 'rgba(38, 198, 218, 0.4)',\n 'rgba(129, 212, 250, 0.4)',\n];\n\nexport const createBubbleParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 30,\n spread = 80,\n startVelocity = 8,\n colors = bubbleColors,\n elementSize = 40,\n } = config;\n\n return createPooledParticles(particleCount, () => {\n return {\n id: generateId(),\n x: origin.x + randomInRange(-spread, spread),\n y: origin.y,\n vx: randomInRange(-3, 3),\n vy: -randomInRange(startVelocity * 0.7, startVelocity * 1.2),\n life: config.lifetime || 160,\n opacity: 0.7,\n size: randomInRange(elementSize * 0.4, elementSize * 1.2),\n rotation: 0,\n color:\n colors[Math.floor(Math.random() * colors.length)] ||\n colors[0] ||\n '#ffffff',\n };\n });\n};\n\nexport const renderBubbleParticle = (particle: Particle): React.ReactNode => {\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '100%',\n backgroundColor: particle.color,\n borderRadius: '50%',\n border: '2px solid rgba(255, 255, 255, 0.6)',\n backgroundImage:\n 'radial-gradient(circle at 30% 30%, rgba(255, 255, 255, 0.8), transparent)',\n boxShadow: `\n inset 0 0 ${particle.size * 0.3}px rgba(255, 255, 255, 0.4),\n 0 0 ${particle.size * 0.5}px ${particle.color}\n `,\n }}\n />\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst starColors = ['#FFD700', '#FFA500', '#FF6347', '#FFE4B5'];\n\nexport const createStarParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 40,\n startVelocity = 18,\n colors = starColors,\n elementSize = 30,\n } = config;\n\n return createPooledParticles(particleCount, () => {\n const angle = randomInRange(0, 360);\n const velocity = randomInRange(startVelocity * 0.5, startVelocity);\n\n return {\n id: generateId(),\n x: origin.x,\n y: origin.y,\n vx: Math.cos((angle * Math.PI) / 180) * velocity,\n vy: Math.sin((angle * Math.PI) / 180) * velocity - 15,\n life: config.lifetime || 150,\n opacity: 1,\n size: randomInRange(elementSize * 0.5, elementSize * 1.3),\n rotation: randomInRange(0, 360),\n color:\n colors[Math.floor(Math.random() * colors.length)] ||\n colors[0] ||\n '#ffffff',\n };\n });\n};\n\nexport const renderStarParticle = (\n particle: Particle & { config?: AnimationConfig }\n): React.ReactNode => {\n // Calculate twinkle effect if enabled\n const twinkle = particle.config?.effects?.twinkle\n ? 0.3 + Math.abs(Math.sin(particle.life * 0.15)) * 0.7\n : 1;\n\n return (\n <svg\n key={particle.id}\n width=\"100%\"\n height=\"100%\"\n viewBox=\"0 0 24 24\"\n fill={particle.color}\n style={{\n filter: `drop-shadow(0 0 ${particle.size * 0.2}px ${particle.color})`,\n opacity: twinkle,\n transition: 'opacity 0.1s ease-out',\n }}\n >\n <path d=\"M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z\" />\n </svg>\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst snowColors = ['#FFFFFF', '#F0F8FF', '#F5F5F5', '#FAFAFA'];\n\nexport const createSnowParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 50,\n spread = 200,\n startVelocity = 3,\n colors = snowColors,\n elementSize = 15,\n } = config;\n\n return createPooledParticles(particleCount, () => {\n // Spread particles across the width, starting from above viewport\n const x = origin.x + randomInRange(-spread * 2, spread * 2);\n const y = origin.y - randomInRange(100, 300); // Start above the trigger point\n\n return {\n id: generateId(),\n x,\n y,\n vx: randomInRange(-0.5, 0.5), // Gentle horizontal drift\n vy: randomInRange(startVelocity * 0.5, startVelocity * 1.2),\n life: config.lifetime || 300, // Longer lifetime for snow\n opacity: randomInRange(0.4, 0.9),\n size: randomInRange(elementSize * 0.3, elementSize),\n rotation: randomInRange(0, 360),\n color:\n colors[Math.floor(Math.random() * colors.length)] ||\n colors[0] ||\n '#ffffff',\n };\n });\n};\n\nexport const renderSnowParticle = (particle: Particle): React.ReactNode => {\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '100%',\n backgroundColor: particle.color,\n borderRadius: '50%',\n boxShadow: `\n 0 0 ${particle.size * 0.5}px rgba(255, 255, 255, 0.8),\n inset 0 0 ${particle.size * 0.3}px rgba(255, 255, 255, 0.5)\n `,\n filter: 'blur(0.5px)',\n }}\n />\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\n// Default emoji sets for different moods\nconst defaultEmojis = ['🎉', '🎊', '🎈', '🎁', '✨', '🌟', '💫', '🎯'];\nconst celebrationEmojis = ['🎉', '🎊', '🥳', '🎈', '🎁', '🍾', '🥂', '🎆'];\nconst loveEmojis = ['❤️', '💕', '💖', '💝', '💗', '💓', '💞', '💘'];\nconst happyEmojis = ['😊', '😄', '🥰', '😍', '🤗', '😘', '😁', '🤩'];\nconst natureEmojis = ['🌸', '🌺', '🌻', '🌹', '🌷', '🌼', '🍀', '🌿'];\nconst foodEmojis = ['🍕', '🍔', '🍟', '🌮', '🍿', '🍩', '🍪', '🧁'];\n\nexport interface EmojiAnimationConfig extends AnimationConfig {\n emojis?: string[];\n}\n\nexport const createEmojiParticles = (\n origin: { x: number; y: number },\n config: EmojiAnimationConfig\n): Particle[] => {\n const {\n particleCount = 30,\n spread = 100,\n startVelocity = 15,\n elementSize = 35,\n emojis = defaultEmojis,\n } = config;\n\n return createPooledParticles(particleCount, () => {\n const angle = randomInRange(-45, -135);\n const velocity = randomInRange(startVelocity * 0.5, startVelocity * 1.2);\n\n return {\n id: generateId(),\n x: origin.x + randomInRange(-spread, spread),\n y: origin.y,\n vx: Math.cos((angle * Math.PI) / 180) * velocity,\n vy: Math.sin((angle * Math.PI) / 180) * velocity,\n life: config.lifetime || 180,\n opacity: 1,\n size: randomInRange(elementSize * 0.7, elementSize * 1.3),\n rotation: randomInRange(-45, 45),\n color: '', // Not used for emojis\n element: emojis[Math.floor(Math.random() * emojis.length)],\n };\n });\n};\n\nexport const renderEmojiParticle = (particle: Particle): React.ReactNode => {\n return (\n <div\n key={particle.id}\n style={{\n fontSize: `${particle.size}px`,\n lineHeight: 1,\n userSelect: 'none',\n filter: particle.opacity < 0.5 ? 'blur(1px)' : undefined,\n }}\n >\n {particle.element}\n </div>\n );\n};\n\n// Export preset emoji sets for easy use\nexport const emojiPresets = {\n celebration: celebrationEmojis,\n love: loveEmojis,\n happy: happyEmojis,\n nature: natureEmojis,\n food: foodEmojis,\n default: defaultEmojis,\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst coinColors = ['#FFD700', '#FFA500', '#FFB300', '#FFC700'];\n\nexport const createCoinParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 30,\n spread = 70,\n startVelocity = 25,\n colors = coinColors,\n elementSize = 25,\n } = config;\n\n return createPooledParticles(particleCount, () => {\n const angle = randomInRange(-spread / 2, spread / 2) * (Math.PI / 180);\n const velocity = randomInRange(startVelocity * 0.5, startVelocity);\n\n return {\n id: generateId(),\n x: origin.x,\n y: origin.y,\n vx: Math.sin(angle) * velocity,\n vy: -Math.cos(angle) * velocity,\n life: config.lifetime || 120,\n opacity: 1,\n size: randomInRange(elementSize * 0.8, elementSize * 1.2),\n rotation: randomInRange(0, 360),\n color:\n colors[Math.floor(Math.random() * colors.length)] ||\n colors[0] ||\n '#ffffff',\n };\n });\n};\n\nexport const renderCoinParticle = (\n particle: Particle & { config?: AnimationConfig }\n): React.ReactNode => {\n const spinSpeed = particle.config?.effects?.spin3D ? 8 : 2; // Faster spin with 3D effect\n const currentRotation = (120 - particle.life) * spinSpeed;\n\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '100%',\n background: `radial-gradient(ellipse at 30% 30%, ${particle.color}, #B8860B)`,\n borderRadius: '50%',\n transform: particle.config?.effects?.spin3D\n ? `rotateY(${currentRotation}deg)`\n : `rotate(${currentRotation}deg)`,\n transformStyle: 'preserve-3d',\n perspective: '1000px',\n boxShadow: `\n inset -2px -2px 4px rgba(0, 0, 0, 0.3),\n inset 2px 2px 4px rgba(255, 255, 255, 0.5),\n 0 2px 4px rgba(0, 0, 0, 0.3)\n `,\n border: `1px solid ${particle.color}`,\n position: 'relative',\n overflow: 'hidden',\n }}\n >\n {/* Dollar sign - hide when flipped */}\n <div\n style={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n fontSize: `${particle.size * 0.5}px`,\n fontWeight: 'bold',\n color: '#B8860B',\n textShadow: '1px 1px 1px rgba(0, 0, 0, 0.3)',\n fontFamily: 'Arial, sans-serif',\n opacity: 1,\n }}\n >\n $\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst petalColors = ['#FFB6C1', '#FFC0CB', '#FF69B4', '#FF1493', '#FFF0F5'];\n\nexport const createPetalParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 40,\n spread = 100,\n startVelocity = 8,\n colors = petalColors,\n elementSize = 20,\n } = config;\n\n return createPooledParticles(particleCount, () => {\n const angle = randomInRange(-spread / 2, spread / 2) * (Math.PI / 180);\n const velocity = randomInRange(startVelocity * 0.3, startVelocity);\n\n return {\n id: generateId(),\n x: origin.x + randomInRange(-20, 20),\n y: origin.y - randomInRange(0, 30),\n vx: Math.sin(angle) * velocity,\n vy: randomInRange(2, 5), // Gentle fall\n life: config.lifetime || 200,\n opacity: randomInRange(0.7, 1),\n size: randomInRange(elementSize * 0.7, elementSize * 1.3),\n rotation: randomInRange(0, 360),\n color:\n colors[Math.floor(Math.random() * colors.length)] ||\n colors[0] ||\n '#ffffff',\n };\n });\n};\n\nexport const renderPetalParticle = (particle: Particle): React.ReactNode => {\n // Create spiral motion\n const spiralPhase = (200 - particle.life) * 0.1;\n const spiralX = Math.sin(spiralPhase) * 15;\n const wobble = Math.sin(particle.life * 0.1) * 10;\n\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '120%',\n position: 'relative',\n transform: `translateX(${spiralX}px) rotate(${wobble}deg)`,\n transformStyle: 'preserve-3d',\n }}\n >\n {/* Petal shape */}\n <div\n style={{\n width: '100%',\n height: '100%',\n background: `radial-gradient(ellipse at 50% 30%, ${particle.color}, ${particle.color}DD)`,\n borderRadius: '0% 100% 0% 100%',\n position: 'absolute',\n boxShadow: `\n inset 1px 1px 3px rgba(255, 255, 255, 0.5),\n 0 2px 4px rgba(0, 0, 0, 0.1)\n `,\n border: `1px solid ${particle.color}CC`,\n transform: 'rotateY(45deg)',\n }}\n />\n {/* Second petal for depth */}\n <div\n style={{\n width: '100%',\n height: '100%',\n background: `radial-gradient(ellipse at 50% 30%, ${particle.color}EE, ${particle.color}BB)`,\n borderRadius: '0% 100% 0% 100%',\n position: 'absolute',\n transform: 'rotate(45deg) scale(0.9)',\n opacity: 0.8,\n }}\n />\n </div>\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst auroraColors = [\n '#00ff88',\n '#00ffaa',\n '#00ddff',\n '#0099ff',\n '#0066ff',\n '#9933ff',\n '#ff00ff',\n];\n\nexport const createAuroraParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 20,\n spread = 300,\n startVelocity = 0.8,\n colors = auroraColors,\n elementSize = 100,\n } = config;\n\n return createPooledParticles(particleCount, (i) => {\n const angle = (i / particleCount) * spread - spread / 2;\n const offset = randomInRange(-30, 30);\n\n return {\n id: generateId(),\n x: origin.x + angle + offset,\n y: origin.y,\n vx: randomInRange(-0.5, 0.5),\n vy: -startVelocity,\n life: config.lifetime || 250,\n opacity: 1,\n size: randomInRange(elementSize * 0.8, elementSize * 1.2),\n rotation: randomInRange(-15, 15),\n color:\n colors[Math.floor(Math.random() * colors.length)] ||\n colors[0] ||\n '#ffffff',\n };\n });\n};\n\nexport const renderAuroraParticle = (particle: Particle): React.ReactNode => {\n // Create gentle flowing wave motion - reduced amplitude\n const wave = Math.sin(particle.life * 0.02) * 10;\n // Use the actual particle opacity set by animationManager\n const baseOpacity = particle.opacity;\n // Add fade in/out effect\n const fadeIn = particle.life > 350 ? (400 - particle.life) / 50 : 1;\n const fadeOut = particle.life < 50 ? particle.life / 50 : 1;\n const opacity = baseOpacity * fadeIn * fadeOut * 0.4;\n\n return (\n <div\n key={particle.id}\n style={{\n width: `${particle.size}px`,\n height: `${particle.size * 0.3}px`,\n position: 'relative',\n transform: `translateX(${wave}px)`,\n filter: 'blur(2px)',\n }}\n >\n {/* Aurora ribbon */}\n <div\n style={{\n width: '100%',\n height: '100%',\n background: `linear-gradient(90deg, transparent, ${particle.color}, transparent)`,\n borderRadius: '50%',\n opacity,\n boxShadow: `0 0 ${particle.size * 0.5}px ${particle.color}`,\n animation: 'shimmer 2s infinite',\n }}\n />\n {/* Secondary layer for depth */}\n <div\n style={{\n position: 'absolute',\n top: '20%',\n left: '10%',\n width: '80%',\n height: '60%',\n background: `radial-gradient(ellipse at center, ${particle.color}44, transparent)`,\n borderRadius: '50%',\n opacity: opacity * 0.5,\n filter: 'blur(4px)',\n }}\n />\n </div>\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst fireflyColors = ['#FFFF99', '#FFFFCC', '#FFFF66', '#FFFFAA'];\n\nexport const createFireflyParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 20,\n spread = 150,\n startVelocity = 2,\n colors = fireflyColors,\n elementSize = 8,\n } = config;\n\n return createPooledParticles(particleCount, () => {\n const angle = randomInRange(0, 360) * (Math.PI / 180);\n const velocity = randomInRange(startVelocity * 0.3, startVelocity);\n\n return {\n id: generateId(),\n x: origin.x + randomInRange(-spread / 2, spread / 2),\n y: origin.y + randomInRange(-20, 20),\n vx: Math.cos(angle) * velocity,\n vy: Math.sin(angle) * velocity * 0.5, // More horizontal movement\n life: config.lifetime || 300,\n opacity: 0,\n size: randomInRange(elementSize * 0.6, elementSize),\n rotation: randomInRange(0, 360), // Used for blink timing\n color:\n colors[Math.floor(Math.random() * colors.length)] ||\n colors[0] ||\n '#ffffff',\n };\n });\n};\n\nexport const renderFireflyParticle = (particle: Particle): React.ReactNode => {\n // Create organic floating motion\n const floatX = Math.sin(particle.life * 0.02 + particle.rotation) * 15;\n const floatY = Math.cos(particle.life * 0.03 + particle.rotation) * 10;\n\n // Blinking effect - each firefly has its own rhythm based on rotation\n const blinkCycle = Math.sin(particle.life * 0.1 + particle.rotation * 0.1);\n const isBlinking = blinkCycle > 0.3;\n const glowIntensity = isBlinking ? 1 : 0.1;\n\n // Fade in/out\n const fadeIn = Math.min(1, (300 - particle.life) / 30);\n const fadeOut = particle.life / 300;\n const baseFade = Math.min(fadeIn, fadeOut);\n\n return (\n <div\n key={particle.id}\n style={{\n width: `${particle.size}px`,\n height: `${particle.size}px`,\n position: 'relative',\n transform: `translate(${floatX}px, ${floatY}px)`,\n }}\n >\n {/* Firefly body */}\n <div\n style={{\n width: '100%',\n height: '100%',\n background: particle.color,\n borderRadius: '50%',\n opacity: baseFade * glowIntensity,\n boxShadow: `\n 0 0 ${particle.size}px ${particle.color},\n 0 0 ${particle.size * 2}px ${particle.color},\n 0 0 ${particle.size * 3}px ${particle.color}88\n `,\n transition: 'opacity 0.3s ease',\n }}\n />\n {/* Glow aura */}\n <div\n style={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: `${particle.size * 4}px`,\n height: `${particle.size * 4}px`,\n background: `radial-gradient(circle, ${particle.color}44 0%, transparent 70%)`,\n borderRadius: '50%',\n transform: 'translate(-50%, -50%)',\n opacity: baseFade * glowIntensity * 0.5,\n transition: 'opacity 0.3s ease',\n }}\n />\n </div>\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst paintColors = [\n '#FF006E',\n '#FB5607',\n '#FFBE0B',\n '#8338EC',\n '#3A86FF',\n '#06FFB4',\n];\n\nexport const createPaintParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 25,\n spread = 120,\n startVelocity = 35,\n colors = paintColors,\n elementSize = 30,\n } = config;\n\n return createPooledParticles(particleCount, (i) => {\n const angle = randomInRange(-spread / 2, spread / 2) * (Math.PI / 180);\n const velocity = randomInRange(startVelocity * 0.5, startVelocity);\n const isMainSplat = i < 5; // First few particles are bigger splats\n\n return {\n id: generateId(),\n x: origin.x,\n y: origin.y,\n vx: Math.sin(angle) * velocity * (isMainSplat ? 0.3 : 1),\n vy: -Math.cos(angle) * velocity * 0.7 + (isMainSplat ? 5 : 0),\n life: config.lifetime || 150,\n opacity: 1,\n size: isMainSplat\n ? randomInRange(elementSize * 1.5, elementSize * 2.5)\n : randomInRange(elementSize * 0.3, elementSize),\n rotation: randomInRange(0, 360),\n color:\n colors[Math.floor(Math.random() * colors.length)] ||\n colors[0] ||\n '#ffffff',\n };\n });\n};\n\nexport const renderPaintParticle = (particle: Particle): React.ReactNode => {\n // Paint splatter gets more stretched as it flies\n const stretch = 1 + (Math.abs(particle.vx) + Math.abs(particle.vy)) * 0.01;\n const squish = 1 / stretch;\n\n // Drip effect for some particles\n const isDripping = particle.size > 15 && particle.rotation > 180;\n const dripLength = isDripping ? particle.size * 0.5 : 0;\n\n return (\n <div\n key={particle.id}\n style={{\n width: `${particle.size}px`,\n height: `${particle.size}px`,\n position: 'relative',\n transform: `\n scaleX(${stretch}) \n scaleY(${squish}) \n rotate(${(Math.atan2(particle.vy, particle.vx) * 180) / Math.PI}deg)\n `,\n }}\n >\n {/* Main paint splat */}\n <div\n style={{\n width: '100%',\n height: '100%',\n background: particle.color,\n borderRadius: '50%',\n position: 'relative',\n boxShadow: `inset -2px -2px 4px rgba(0,0,0,0.2)`,\n }}\n >\n {/* Splatter details */}\n <div\n style={{\n position: 'absolute',\n top: '20%',\n left: '20%',\n width: '30%',\n height: '30%',\n background: particle.color,\n borderRadius: '50%',\n opacity: 0.8,\n transform: `translate(${randomInRange(-5, 5)}px, ${randomInRange(-5, 5)}px)`,\n }}\n />\n <div\n style={{\n position: 'absolute',\n bottom: '15%',\n right: '15%',\n width: '25%',\n height: '25%',\n background: particle.color,\n borderRadius: '50%',\n opacity: 0.7,\n }}\n />\n </div>\n\n {/* Paint drip */}\n {isDripping && (\n <div\n style={{\n position: 'absolute',\n bottom: `-${dripLength}px`,\n left: '40%',\n width: '20%',\n height: `${dripLength}px`,\n background: particle.color,\n borderRadius: '0 0 50% 50%',\n opacity: 0.9,\n }}\n />\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst balloonColors = [\n '#FF006E',\n '#FB5607',\n '#FFBE0B',\n '#8338EC',\n '#3A86FF',\n '#06FFB4',\n '#FF4081',\n];\n\nexport const createBalloonParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 15,\n spread = 80,\n startVelocity = 10,\n colors = balloonColors,\n elementSize = 35,\n } = config;\n\n return createPooledParticles(particleCount, () => {\n const angle = randomInRange(-spread / 2, spread / 2) * (Math.PI / 180);\n const velocity = randomInRange(startVelocity * 0.7, startVelocity);\n\n return {\n id: generateId(),\n x: origin.x + randomInRange(-spread * 0.8, spread * 0.8), // Spread balloons out more\n y: origin.y + randomInRange(-10, 30),\n vx: Math.sin(angle) * velocity * 0.3 + randomInRange(-1, 1), // Add horizontal drift\n vy: -velocity * 0.4, // Balloons float up slowly\n life: config.lifetime || 250,\n opacity: 0.9,\n size: randomInRange(elementSize * 0.8, elementSize * 1.2),\n rotation: randomInRange(-10, 10),\n color:\n colors[Math.floor(Math.random() * colors.length)] ||\n colors[0] ||\n '#ffffff',\n };\n });\n};\n\nexport const renderBalloonParticle = (particle: Particle): React.ReactNode => {\n // Gentle swaying motion\n const sway = Math.sin(particle.life * 0.03) * 15;\n const bob = Math.sin(particle.life * 0.05) * 5;\n\n // Fade out near the end\n const fadeOut = particle.life > 50 ? 1 : particle.life / 50;\n\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '120%',\n position: 'relative',\n transform: `\n translateX(${sway}px) \n translateY(${bob}px)\n rotate(${sway * 0.2}deg)\n `,\n opacity: particle.opacity * fadeOut,\n }}\n >\n {/* Balloon body */}\n <div\n style={{\n width: '100%',\n height: '100%',\n background: `radial-gradient(circle at 30% 30%, ${particle.color}ee, ${particle.color})`,\n borderRadius: '50% 50% 50% 50% / 60% 60% 40% 40%',\n position: 'relative',\n boxShadow: `\n inset -5px -5px 10px rgba(0,0,0,0.2),\n 0 4px 8px rgba(0,0,0,0.2)\n `,\n }}\n >\n {/* Highlight */}\n <div\n style={{\n position: 'absolute',\n top: '15%',\n left: '20%',\n width: '25%',\n height: '30%',\n background:\n 'radial-gradient(circle, rgba(255,255,255,0.8) 0%, transparent 70%)',\n borderRadius: '50%',\n transform: 'rotate(-20deg)',\n }}\n />\n\n {/* Balloon knot */}\n <div\n style={{\n position: 'absolute',\n bottom: '-5px',\n left: '50%',\n transform: 'translateX(-50%)',\n width: '0',\n height: '0',\n borderLeft: '4px solid transparent',\n borderRight: '4px solid transparent',\n borderTop: `8px solid ${particle.color}`,\n }}\n />\n </div>\n\n {/* String */}\n <svg\n style={{\n position: 'absolute',\n top: '100%',\n left: '50%',\n transform: 'translateX(-50%)',\n width: '2px',\n height: `${particle.size * 2}px`,\n opacity: 0.6,\n }}\n >\n <path\n d={`M1 0 Q ${1 + Math.sin(particle.life * 0.1) * 3} ${particle.size} 1 ${particle.size * 2}`}\n stroke={particle.color}\n strokeWidth=\"1.5\"\n fill=\"none\"\n opacity=\"0.4\"\n />\n </svg>\n </div>\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst galaxyColors = [\n '#FFFFFF',\n '#FFF9C4',\n '#BBDEFB',\n '#C5CAE9',\n '#D1C4E9',\n '#FFE082',\n '#FFCCBC',\n];\n\nexport const createGalaxyParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 60,\n spread = 200,\n startVelocity = 15,\n colors = galaxyColors,\n elementSize = 8,\n } = config;\n\n return createPooledParticles(particleCount, (i) => {\n // Create spiral distribution\n const progress = i / particleCount;\n const spiralAngle = progress * Math.PI * 4; // 2 full rotations\n const radius = progress * spread;\n\n // Add some randomness to make it look natural\n const angleOffset = randomInRange(-0.3, 0.3);\n const radiusOffset = randomInRange(-10, 10);\n\n const finalAngle = spiralAngle + angleOffset;\n const finalRadius = radius + radiusOffset;\n\n // Position based on spiral\n const offsetX = Math.cos(finalAngle) * finalRadius;\n const offsetY = Math.sin(finalAngle) * finalRadius;\n\n // Velocity follows the spiral tangent\n const tangentAngle = finalAngle + Math.PI / 2;\n const speed = startVelocity * (1 - progress * 0.5); // Outer stars move slower\n\n return {\n id: generateId(),\n x: origin.x,\n y: origin.y,\n vx: Math.cos(tangentAngle) * speed * 0.3 + offsetX * 0.02,\n vy: Math.sin(tangentAngle) * speed * 0.3 + offsetY * 0.02,\n life: config.lifetime || 250,\n opacity: 0,\n size:\n randomInRange(elementSize * 0.3, elementSize) * (1 - progress * 0.5), // Smaller at edges\n rotation: randomInRange(0, 360),\n color:\n colors[Math.floor(Math.random() * colors.length)] ||\n colors[0] ||\n '#ffffff',\n };\n });\n};\n\nexport const renderGalaxyParticle = (particle: Particle): React.ReactNode => {\n // Particles slowly rotate around center while expanding\n const age = (250 - particle.life) / 250;\n const expansionRate = 1 + age * 0.5;\n\n // Fade in quickly, fade out slowly\n const fadeIn = Math.min(1, (250 - particle.life) / 30);\n const fadeOut = particle.life / 250;\n const opacity = Math.min(fadeIn, fadeOut);\n\n // Twinkle effect\n const twinkle = Math.sin(particle.life * 0.2 + particle.rotation) * 0.3 + 0.7;\n\n return (\n <div\n key={particle.id}\n style={{\n width: `${particle.size}px`,\n height: `${particle.size}px`,\n position: 'relative',\n transform: `scale(${expansionRate})`,\n opacity: opacity * twinkle,\n }}\n >\n {/* Star core */}\n <div\n style={{\n width: '100%',\n height: '100%',\n background: particle.color,\n borderRadius: '50%',\n boxShadow: `\n 0 0 ${particle.size}px ${particle.color},\n 0 0 ${particle.size * 2}px ${particle.color}88,\n 0 0 ${particle.size * 3}px ${particle.color}44\n `,\n position: 'relative',\n }}\n >\n {/* Star spikes */}\n <div\n style={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: `${particle.size * 3}px`,\n height: '1px',\n background: `linear-gradient(90deg, transparent, ${particle.color}, transparent)`,\n transform: `translate(-50%, -50%) rotate(${particle.rotation}deg)`,\n opacity: twinkle,\n }}\n />\n <div\n style={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: '1px',\n height: `${particle.size * 3}px`,\n background: `linear-gradient(180deg, transparent, ${particle.color}, transparent)`,\n transform: `translate(-50%, -50%) rotate(${particle.rotation}deg)`,\n opacity: twinkle,\n }}\n />\n </div>\n\n {/* Nebula dust for larger stars */}\n {particle.size > 5 && (\n <div\n style={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: `${particle.size * 6}px`,\n height: `${particle.size * 6}px`,\n background: `radial-gradient(circle, ${particle.color}22 0%, transparent 70%)`,\n borderRadius: '50%',\n transform: 'translate(-50%, -50%)',\n opacity: opacity * 0.3,\n filter: 'blur(3px)',\n }}\n />\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\n\nexport const createGlitchParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const { particleCount = 20, elementSize = 200 } = config;\n\n const particles: Particle[] = [];\n const channels = ['r', 'g', 'b'];\n\n for (let i = 0; i < particleCount; i++) {\n const isHorizontal = Math.random() > 0.3;\n const channelIndex = i % 3;\n const channel = channels[channelIndex];\n\n // Encode all data in rotation:\n // bits 0-1: channel (0=r, 1=g, 2=b)\n // bit 2: isHorizontal (0=false, 1=true)\n // bits 3-10: width (0-255)\n // bits 11-18: height (0-255)\n // bits 19-24: glitchOffset + 32 (to make positive)\n const width = isHorizontal ? randomInRange(50, 200) : randomInRange(2, 8);\n const height = isHorizontal ? randomInRange(2, 8) : randomInRange(50, 200);\n const glitchOffset = randomInRange(-20, 20);\n\n const encodedData =\n channelIndex +\n (isHorizontal ? 4 : 0) +\n (Math.floor(width) << 3) +\n (Math.floor(height) << 11) +\n ((glitchOffset + 32) << 19);\n\n particles.push({\n id: generateId(),\n x: origin.x + randomInRange(-elementSize / 2, elementSize / 2),\n y: origin.y + randomInRange(-elementSize / 2, elementSize / 2),\n vx: randomInRange(-50, 50),\n vy: randomInRange(-30, 30),\n life: config.lifetime || 150,\n opacity: randomInRange(0.3, 1),\n size: randomInRange(5, 20), // Store distortionAmount\n rotation: encodedData,\n color:\n channel === 'r' ? '#ff0000' : channel === 'g' ? '#00ff00' : '#0000ff',\n });\n }\n\n return particles;\n};\n\nexport const renderGlitchParticle = (particle: Particle): React.ReactNode => {\n // Decode data from rotation\n const channelIndex = particle.rotation & 3;\n const width = (particle.rotation >> 3) & 255;\n const height = (particle.rotation >> 11) & 255;\n const glitchOffset = ((particle.rotation >> 19) & 63) - 32;\n\n const channel = ['r', 'g', 'b'][channelIndex];\n const distortionAmount = particle.size;\n\n const colors = {\n r: channel === 'r' ? 255 : 0,\n g: channel === 'g' ? 255 : 0,\n b: channel === 'b' ? 255 : 0,\n };\n\n const mixBlendMode =\n channel === 'r' ? 'screen' : channel === 'g' ? 'multiply' : 'difference';\n\n return (\n <div\n key={particle.id}\n style={{\n width: `${width}px`,\n height: `${height}px`,\n backgroundColor: `rgba(${colors.r}, ${colors.g}, ${colors.b}, ${particle.opacity})`,\n mixBlendMode,\n filter: `blur(${randomInRange(0, 2)}px)`,\n boxShadow: `${glitchOffset}px 0 ${distortionAmount}px rgba(${colors.r}, ${colors.g}, ${colors.b}, ${particle.opacity * 0.5})`,\n }}\n />\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport {\n randomInRange,\n degreesToRadians,\n generateId,\n getRandomColor,\n} from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst defaultColors = [\n '#9C27B0',\n '#E91E63',\n '#FF00FF',\n '#00FFFF',\n '#FFD700',\n '#FF69B4',\n '#DA70D6',\n '#9370DB',\n];\n\nexport const createMagicDustParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 40,\n startVelocity = 8,\n colors = defaultColors,\n elementSize = 12,\n } = config;\n\n return createPooledParticles(particleCount, (i) => {\n // Create particles in a circular pattern with some randomness\n const angle = (i / particleCount) * 360 + randomInRange(-30, 30);\n const velocity = randomInRange(startVelocity * 0.3, startVelocity);\n const color = getRandomColor(colors);\n\n // Add some particles that trail behind cursor movement\n const offsetAngle = randomInRange(0, 360);\n const offsetDistance = randomInRange(0, 30);\n\n return {\n id: generateId(),\n x: origin.x + Math.cos(degreesToRadians(offsetAngle)) * offsetDistance,\n y: origin.y + Math.sin(degreesToRadians(offsetAngle)) * offsetDistance,\n vx: Math.cos(degreesToRadians(angle)) * velocity + randomInRange(-2, 2),\n vy: Math.sin(degreesToRadians(angle)) * velocity + randomInRange(-2, 2),\n life: config.lifetime || 120,\n opacity: randomInRange(0.4, 1),\n size: randomInRange(elementSize * 0.3, elementSize),\n rotation: randomInRange(0, 360),\n color,\n };\n });\n};\n\nexport const renderMagicDustParticle = (\n particle: Particle\n): React.ReactNode => {\n const sparkleSize = particle.size * 0.7;\n\n return (\n <div\n key={particle.id}\n style={{\n width: `${particle.size}px`,\n height: `${particle.size}px`,\n position: 'relative',\n }}\n >\n {/* Central glow */}\n <div\n style={{\n position: 'absolute',\n width: '100%',\n height: '100%',\n backgroundColor: particle.color,\n borderRadius: '50%',\n boxShadow: `0 0 ${particle.size}px ${particle.color}, 0 0 ${particle.size * 2}px ${particle.color}`,\n filter: 'blur(1px)',\n }}\n />\n {/* Sparkle effect */}\n <div\n style={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: `${sparkleSize}px`,\n height: `${sparkleSize}px`,\n transform: `translate(-50%, -50%) rotate(${particle.rotation}deg)`,\n }}\n >\n <div\n style={{\n position: 'absolute',\n width: '100%',\n height: '2px',\n backgroundColor: 'white',\n top: '50%',\n left: '0',\n transform: 'translateY(-50%)',\n boxShadow: '0 0 4px white',\n }}\n />\n <div\n style={{\n position: 'absolute',\n width: '2px',\n height: '100%',\n backgroundColor: 'white',\n left: '50%',\n top: '0',\n transform: 'translateX(-50%)',\n boxShadow: '0 0 4px white',\n }}\n />\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport {\n randomInRange,\n degreesToRadians,\n generateId,\n getRandomColor,\n} from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst defaultColors = [\n '#FF1493',\n '#00CED1',\n '#FFD700',\n '#FF69B4',\n '#7B68EE',\n '#00FA9A',\n '#FF6347',\n '#4169E1',\n];\n\nexport const createCrystalParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 15,\n startVelocity = 15,\n colors = defaultColors,\n elementSize = 25,\n } = config;\n\n return createPooledParticles(particleCount, () => {\n // Crystals explode outward and fall with gravity\n const angle = randomInRange(0, 360);\n const velocity = randomInRange(startVelocity * 0.5, startVelocity);\n const color = getRandomColor(colors);\n\n return {\n id: generateId(),\n x: origin.x,\n y: origin.y,\n vx: Math.cos(degreesToRadians(angle)) * velocity,\n vy: Math.sin(degreesToRadians(angle)) * velocity - 10,\n life: config.lifetime || 150,\n opacity: randomInRange(0.7, 1),\n size: randomInRange(elementSize * 0.6, elementSize),\n rotation: randomInRange(0, 360),\n color,\n };\n });\n};\n\nexport const renderCrystalParticle = (particle: Particle): React.ReactNode => {\n // Create rainbow refraction effect\n const hue = (Date.now() * 0.5 + particle.x + particle.y) % 360;\n\n return (\n <div\n key={particle.id}\n style={{\n width: `${particle.size}px`,\n height: `${particle.size * 1.5}px`,\n position: 'relative',\n transform: `rotate(${particle.rotation}deg)`,\n }}\n >\n {/* Crystal shape with gradient */}\n <div\n style={{\n position: 'absolute',\n width: '100%',\n height: '100%',\n background: `linear-gradient(135deg, ${particle.color}, ${particle.color}88, transparent)`,\n clipPath: 'polygon(50% 0%, 100% 40%, 75% 100%, 25% 100%, 0% 40%)',\n boxShadow: `0 0 ${particle.size}px ${particle.color}44`,\n }}\n />\n\n {/* Inner facets */}\n <div\n style={{\n position: 'absolute',\n width: '80%',\n height: '80%',\n top: '10%',\n left: '10%',\n background: `linear-gradient(45deg, transparent, rgba(255, 255, 255, 0.4), transparent)`,\n clipPath: 'polygon(50% 10%, 90% 45%, 65% 90%, 35% 90%, 10% 45%)',\n }}\n />\n\n {/* Rainbow refraction overlay */}\n <div\n style={{\n position: 'absolute',\n width: '100%',\n height: '100%',\n background: `linear-gradient(${hue}deg, \n hsla(${hue}, 100%, 50%, 0.3),\n hsla(${(hue + 60) % 360}, 100%, 50%, 0.3),\n hsla(${(hue + 120) % 360}, 100%, 50%, 0.3)\n )`,\n clipPath: 'polygon(50% 0%, 100% 40%, 75% 100%, 25% 100%, 0% 40%)',\n mixBlendMode: 'screen',\n }}\n />\n\n {/* Shine effect */}\n <div\n style={{\n position: 'absolute',\n width: '30%',\n height: '30%',\n top: '20%',\n left: '35%',\n background:\n 'radial-gradient(circle, rgba(255, 255, 255, 0.8), transparent)',\n borderRadius: '50%',\n filter: 'blur(2px)',\n }}\n />\n </div>\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId, getRandomColor } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst defaultColors = [\n '#D2691E',\n '#CD853F',\n '#8B4513',\n '#A0522D',\n '#FF8C00',\n '#FF6347',\n];\n\nexport const createLeafParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 10,\n colors = defaultColors,\n elementSize = 25,\n } = config;\n\n return createPooledParticles(particleCount, () => {\n return {\n id: generateId(),\n x: origin.x + randomInRange(-100, 100),\n y: origin.y + randomInRange(-50, 0),\n vx: randomInRange(-1, 1),\n vy: randomInRange(0.5, 2),\n life: config.lifetime || 300,\n opacity: 1,\n size: randomInRange(elementSize * 0.6, elementSize),\n // Encode tumble phase (0-360), sway phase (0-360), and sway amount (20-40) + rotation speed (-3 to 3)\n rotation:\n Math.floor(randomInRange(0, 360)) +\n Math.floor(randomInRange(0, 360)) * 1000 +\n Math.floor(randomInRange(20, 40)) * 1000000 +\n (Math.floor(randomInRange(-3, 3)) + 3) * 100000000,\n color: getRandomColor(colors),\n };\n });\n};\n\nexport const renderLeafParticle = (particle: Particle): React.ReactNode => {\n // Extract encoded values\n const tumblePhase = particle.rotation % 1000;\n const swayPhase = Math.floor((particle.rotation % 1000000) / 1000);\n const swayAmount = Math.floor((particle.rotation % 100000000) / 1000000);\n const rotationSpeed = Math.floor(particle.rotation / 100000000) - 3;\n\n // Calculate tumbling and swaying\n const tumble =\n Math.sin(((Date.now() * 0.002 + tumblePhase) * Math.PI) / 180) * 30;\n const swayX =\n Math.sin(((Date.now() * 0.001 + swayPhase) * Math.PI) / 180) * swayAmount;\n const rotation = (Date.now() * rotationSpeed * 0.01 + tumble) % 360;\n\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '100%',\n position: 'relative',\n transform: `translateX(${swayX}px) rotate(${rotation}deg)`,\n }}\n >\n <svg\n width=\"100%\"\n height=\"100%\"\n viewBox={`-${particle.size / 2} -${particle.size / 2} ${particle.size} ${particle.size}`}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n }}\n >\n {/* Leaf shape */}\n <path\n d={`\n M 0,-${particle.size / 2}\n C -${particle.size / 3},-${particle.size / 3} -${particle.size / 3},${particle.size / 3} 0,${particle.size / 2}\n C ${particle.size / 3},${particle.size / 3} ${particle.size / 3},-${particle.size / 3} 0,-${particle.size / 2}\n `}\n fill={particle.color}\n opacity=\"0.9\"\n />\n\n {/* Leaf vein */}\n <line\n x1=\"0\"\n y1={-particle.size / 2}\n x2=\"0\"\n y2={particle.size / 2}\n stroke=\"#8B4513\"\n strokeWidth=\"1\"\n opacity=\"0.5\"\n />\n\n {/* Side veins */}\n <line\n x1=\"0\"\n y1={-particle.size / 4}\n x2={-particle.size / 4}\n y2={-particle.size / 8}\n stroke=\"#8B4513\"\n strokeWidth=\"0.5\"\n opacity=\"0.5\"\n />\n <line\n x1=\"0\"\n y1={-particle.size / 4}\n x2={particle.size / 4}\n y2={-particle.size / 8}\n stroke=\"#8B4513\"\n strokeWidth=\"0.5\"\n opacity=\"0.5\"\n />\n <line\n x1=\"0\"\n y1={particle.size / 4}\n x2={-particle.size / 4}\n y2={particle.size / 8}\n stroke=\"#8B4513\"\n strokeWidth=\"0.5\"\n opacity=\"0.5\"\n />\n <line\n x1=\"0\"\n y1={particle.size / 4}\n x2={particle.size / 4}\n y2={particle.size / 8}\n stroke=\"#8B4513\"\n strokeWidth=\"0.5\"\n opacity=\"0.5\"\n />\n </svg>\n </div>\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId, degreesToRadians } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\nconst mortarColors = [\n '#ff6b6b',\n '#4ecdc4',\n '#45b7d1',\n '#f7dc6f',\n '#bb8fce',\n '#85c1f5',\n '#ffd93d',\n '#6bcf7f',\n];\n\nexport const createMortarParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 3, // Number of firework shells\n spread = 60, // Total spread angle\n startVelocity = 12, // Much lower velocity\n colors = mortarColors,\n elementSize = 8,\n } = config;\n\n const particles: Particle[] = [];\n\n // Create firework shells that fire at angles\n const shells = createPooledParticles(particleCount, (index) => {\n // Distribute shells across the spread angle - more horizontal\n const baseAngle = -90; // Start from straight up\n const angleStep = particleCount > 1 ? spread / (particleCount - 1) : 0;\n const angle = baseAngle - spread / 2 + angleStep * index;\n\n const velocity = randomInRange(startVelocity * 0.9, startVelocity * 1.1);\n const targetColor = colors[Math.floor(Math.random() * colors.length)];\n const rad = degreesToRadians(angle);\n\n // Calculate when to explode based on trajectory\n const timeToExplode = randomInRange(20, 35); // Explode much earlier\n\n return {\n id: generateId(),\n x: origin.x,\n y: origin.y,\n vx: Math.cos(rad) * velocity,\n vy: Math.sin(rad) * velocity,\n life: config.lifetime || 200,\n opacity: 1,\n size: elementSize,\n rotation: 0,\n color: targetColor,\n config: config, // Add config to particle\n // Store explosion data\n element: JSON.stringify({\n isShell: true,\n hasExploded: false,\n timeToExplode: timeToExplode, // Fixed explosion time\n burstCount: randomInRange(30, 45),\n burstColor: targetColor,\n }),\n };\n });\n\n particles.push(...shells);\n\n // Create launch sparks at the base\n for (let i = 0; i < 8; i++) {\n const sparkArray = createPooledParticles(1, () => ({\n id: generateId(),\n x: origin.x + randomInRange(-5, 5),\n y: origin.y,\n vx: randomInRange(-2, 2),\n vy: randomInRange(-10, -3),\n life: randomInRange(10, 20),\n opacity: 1,\n size: randomInRange(2, 3),\n rotation: 0,\n color: '#ffaa00',\n element: JSON.stringify({\n isLaunchSpark: true,\n }),\n }));\n particles.push(...sparkArray);\n }\n\n return particles;\n};\n\ninterface MortarElementData {\n isShell?: boolean;\n hasExploded?: boolean;\n timeToExplode?: number;\n burstCount?: number;\n burstColor?: string;\n isTrail?: boolean;\n isBurst?: boolean;\n isLaunchSpark?: boolean;\n isGalaxy?: boolean;\n isCore?: boolean;\n twinkle?: boolean;\n}\n\nexport const renderMortarParticle = (\n particle: Particle & { config?: AnimationConfig }\n): React.ReactNode => {\n let elementData: MortarElementData = {};\n try {\n if (particle.element && typeof particle.element === 'string') {\n elementData = JSON.parse(particle.element);\n }\n } catch (e) {\n // Fallback\n }\n\n // Render launch sparks\n if (elementData.isLaunchSpark) {\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '100%',\n backgroundColor: particle.color,\n borderRadius: '50%',\n opacity: particle.opacity,\n boxShadow: `0 0 3px ${particle.color}`,\n }}\n />\n );\n }\n\n // Render trail particles\n if (elementData.isTrail) {\n const trailOpacity = particle.opacity * (particle.life / 30) * 0.4;\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '100%',\n background: `radial-gradient(circle, ${particle.color}88 0%, transparent 60%)`,\n borderRadius: '50%',\n opacity: trailOpacity,\n filter: 'blur(1px)',\n }}\n />\n );\n }\n\n // Render burst particles\n if (elementData.isBurst) {\n const burstOpacity = particle.opacity * Math.pow(particle.life / 120, 0.5);\n\n // Galaxy-style burst particles\n if (elementData.isGalaxy) {\n const twinkleOpacity = elementData.twinkle\n ? 0.3 + Math.sin(particle.life * 0.3) * 0.7\n : 1;\n\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '100%',\n backgroundColor: particle.color,\n borderRadius: '50%',\n opacity: burstOpacity * twinkleOpacity,\n boxShadow: `0 0 ${particle.size * 2}px ${particle.color}`,\n transform: `rotate(${particle.rotation}deg)`,\n }}\n />\n );\n }\n\n // Core particles\n if (elementData.isCore) {\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '100%',\n backgroundColor: '#FFFFFF',\n borderRadius: '50%',\n opacity: burstOpacity,\n boxShadow: `0 0 ${particle.size * 3}px #FFFFFF`,\n }}\n />\n );\n }\n\n // Default burst (shouldn't reach here with new code)\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '100%',\n backgroundColor: particle.color,\n borderRadius: '50%',\n opacity: burstOpacity,\n boxShadow: `\n 0 0 ${particle.size}px ${particle.color},\n 0 0 ${particle.size * 2}px ${particle.color}88\n `,\n filter: particle.life > 80 ? 'blur(0px)' : 'blur(1px)',\n }}\n />\n );\n }\n\n // Render shell\n if (elementData.isShell) {\n // Hide shell after explosion\n if (elementData.hasExploded) {\n return null;\n }\n\n // Calculate rotation based on movement direction\n const rotation = (Math.atan2(particle.vy, particle.vx) * 180) / Math.PI;\n\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '100%',\n position: 'relative',\n transform: `rotate(${rotation}deg)`,\n }}\n >\n {/* Glowing shell */}\n <div\n style={{\n width: '100%',\n height: '100%',\n backgroundColor: '#ffffff',\n borderRadius: '50%',\n boxShadow: `\n 0 0 ${particle.size * 0.5}px #ffffff,\n 0 0 ${particle.size}px ${particle.color},\n 0 0 ${particle.size * 2}px ${particle.color}88\n `,\n }}\n />\n </div>\n );\n }\n\n // Default particle\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '100%',\n backgroundColor: particle.color,\n borderRadius: '50%',\n opacity: particle.opacity,\n }}\n />\n );\n};\n","import React from 'react';\nimport { AnimationConfig, Particle } from '../types';\nimport { randomInRange, generateId } from '../utils';\nimport { createPooledParticles } from '../particlePool';\n\n// Inspired by Sergio A. Carrasco Chavez's bokeh effect\n// Original: https://codepen.io/sergio-carrasco/pen/bokeh\n\nconst bokehColors = [\n '#FFFFFF', // Pure white\n '#FFF8DC', // Cornsilk\n '#FFFACD', // LemonChiffon\n '#FFE4B5', // Moccasin\n '#FFDEAD', // NavajoWhite\n '#F0E68C', // Khaki\n '#FFD700', // Gold\n];\n\nexport const createBokehParticles = (\n origin: { x: number; y: number },\n config: AnimationConfig\n): Particle[] => {\n const {\n particleCount = 50,\n spread = 300,\n startVelocity = 1,\n colors = bokehColors,\n elementSize = 40,\n lifetime = 200,\n } = config;\n\n return createPooledParticles(particleCount, () => {\n // Create particles at various distances from origin for depth effect\n const angle = Math.random() * Math.PI * 2;\n const distance = randomInRange(0, spread);\n\n // Vary sizes for depth perception\n const depth = Math.random(); // 0 = close, 1 = far\n const size = elementSize * (0.3 + depth * 0.7); // Bigger = closer\n\n return {\n id: generateId(),\n x: origin.x + Math.cos(angle) * distance,\n y: origin.y + Math.sin(angle) * distance,\n vx: randomInRange(-0.5, 0.5) * startVelocity,\n vy: randomInRange(-0.5, -1.5) * startVelocity, // Gentle upward drift\n life: lifetime,\n opacity: 0.1 + depth * 0.5, // Closer = more transparent (out of focus)\n size: size,\n rotation: 0,\n color: colors[Math.floor(Math.random() * colors.length)],\n element: JSON.stringify({\n depth: depth,\n pulsePhase: Math.random() * Math.PI * 2, // Random starting phase for pulse\n baseSize: size,\n }),\n };\n });\n};\n\nexport const renderBokehParticle = (particle: Particle): React.ReactNode => {\n let elementData: { depth?: number; pulsePhase?: number; baseSize?: number } =\n {};\n try {\n if (particle.element && typeof particle.element === 'string') {\n elementData = JSON.parse(particle.element);\n }\n } catch (e) {\n // Fallback\n }\n\n // Create gentle pulsing effect\n const pulseAmount =\n Math.sin(particle.life * 0.05 + (elementData.pulsePhase || 0)) * 0.1 + 1;\n const currentSize = (elementData.baseSize || particle.size) * pulseAmount;\n\n // Fade in at start, fade out at end\n const fadeIn = Math.min(\n 1,\n (particle.config?.lifetime || 200 - particle.life) / 20\n );\n const fadeOut = Math.min(1, particle.life / 40);\n const opacity = particle.opacity * fadeIn * fadeOut;\n\n return (\n <div\n key={particle.id}\n style={{\n width: '100%',\n height: '100%',\n position: 'relative',\n }}\n >\n {/* Outer glow */}\n <div\n style={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: `${currentSize * 3}px`,\n height: `${currentSize * 3}px`,\n transform: 'translate(-50%, -50%)',\n background: `radial-gradient(circle, ${particle.color}22 0%, transparent 50%)`,\n filter: 'blur(20px)',\n opacity: opacity * 0.6,\n }}\n />\n\n {/* Middle glow */}\n <div\n style={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: `${currentSize * 2}px`,\n height: `${currentSize * 2}px`,\n transform: 'translate(-50%, -50%)',\n background: `radial-gradient(circle, ${particle.color}44 0%, transparent 60%)`,\n filter: 'blur(10px)',\n opacity: opacity * 0.8,\n }}\n />\n\n {/* Inner core */}\n <div\n style={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: `${currentSize}px`,\n height: `${currentSize}px`,\n transform: 'translate(-50%, -50%)',\n background: `radial-gradient(circle, ${particle.color}88 0%, ${particle.color}44 50%, transparent 100%)`,\n borderRadius: '50%',\n filter: 'blur(2px)',\n opacity: opacity,\n }}\n />\n </div>\n );\n};\n","import { AnimationType, AnimationConfig, Particle } from '../types';\nimport { createConfettiParticles, renderConfettiParticle } from './confetti';\nimport { createSparkleParticles, renderSparkleParticle } from './sparkles';\nimport { createHeartParticles, renderHeartParticle } from './hearts';\nimport { createFireworkParticles, renderFireworkParticle } from './fireworks';\nimport { createBubbleParticles, renderBubbleParticle } from './bubbles';\nimport { createStarParticles, renderStarParticle } from './stars';\nimport { createSnowParticles, renderSnowParticle } from './snow';\nimport { createEmojiParticles, renderEmojiParticle } from './emoji';\nimport { createCoinParticles, renderCoinParticle } from './coins';\nimport { createPetalParticles, renderPetalParticle } from './petals';\nimport { createAuroraParticles, renderAuroraParticle } from './aurora';\nimport { createFireflyParticles, renderFireflyParticle } from './fireflies';\nimport { createPaintParticles, renderPaintParticle } from './paint';\nimport { createBalloonParticles, renderBalloonParticle } from './balloons';\nimport { createGalaxyParticles, renderGalaxyParticle } from './galaxy';\nimport { createGlitchParticles, renderGlitchParticle } from './glitch';\nimport { createMagicDustParticles, renderMagicDustParticle } from './magicdust';\nimport { createCrystalParticles, renderCrystalParticle } from './crystals';\nimport { createLeafParticles, renderLeafParticle } from './leaves';\nimport { createMortarParticles, renderMortarParticle } from './mortar';\nimport { createBokehParticles, renderBokehParticle } from './bokeh';\n\nexport type ParticleCreator = (\n origin: { x: number; y: number },\n config: AnimationConfig\n) => Particle[];\nexport type ParticleRenderer = (particle: Particle) => React.ReactNode;\n\ninterface AnimationHandler {\n createParticles: ParticleCreator;\n renderParticle: ParticleRenderer;\n}\n\nexport const animations: Record<AnimationType, AnimationHandler> = {\n confetti: {\n createParticles: createConfettiParticles,\n renderParticle: renderConfettiParticle,\n },\n sparkles: {\n createParticles: createSparkleParticles,\n renderParticle: renderSparkleParticle,\n },\n hearts: {\n createParticles: createHeartParticles,\n renderParticle: renderHeartParticle,\n },\n fireworks: {\n createParticles: createFireworkParticles,\n renderParticle: renderFireworkParticle,\n },\n bubbles: {\n createParticles: createBubbleParticles,\n renderParticle: renderBubbleParticle,\n },\n stars: {\n createParticles: createStarParticles,\n renderParticle: renderStarParticle,\n },\n snow: {\n createParticles: createSnowParticles,\n renderParticle: renderSnowParticle,\n },\n emoji: {\n createParticles: createEmojiParticles,\n renderParticle: renderEmojiParticle,\n },\n coins: {\n createParticles: createCoinParticles,\n renderParticle: renderCoinParticle,\n },\n petals: {\n createParticles: createPetalParticles,\n renderParticle: renderPetalParticle,\n },\n aurora: {\n createParticles: createAuroraParticles,\n renderParticle: renderAuroraParticle,\n },\n fireflies: {\n createParticles: createFireflyParticles,\n renderParticle: renderFireflyParticle,\n },\n paint: {\n createParticles: createPaintParticles,\n renderParticle: renderPaintParticle,\n },\n balloons: {\n createParticles: createBalloonParticles,\n renderParticle: renderBalloonParticle,\n },\n galaxy: {\n createParticles: createGalaxyParticles,\n renderParticle: renderGalaxyParticle,\n },\n glitch: {\n createParticles: createGlitchParticles,\n renderParticle: renderGlitchParticle,\n },\n magicdust: {\n createParticles: createMagicDustParticles,\n renderParticle: renderMagicDustParticle,\n },\n crystals: {\n createParticles: createCrystalParticles,\n renderParticle: renderCrystalParticle,\n },\n leaves: {\n createParticles: createLeafParticles,\n renderParticle: renderLeafParticle,\n },\n mortar: {\n createParticles: createMortarParticles,\n renderParticle: renderMortarParticle,\n },\n bokeh: {\n createParticles: createBokehParticles,\n renderParticle: renderBokehParticle,\n },\n};\n","import { AnimationConfig } from './types';\n\nexport const isMobileDevice = (): boolean => {\n if (typeof window === 'undefined') return false;\n\n // Check user agent\n const userAgent =\n navigator.userAgent ||\n navigator.vendor ||\n (window as Window & { opera?: string }).opera ||\n '';\n const isMobileUA =\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n userAgent\n );\n\n // Check viewport width\n const isMobileWidth = window.innerWidth <= 768;\n\n // Check touch support\n const hasTouch = 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n\n return isMobileUA || (isMobileWidth && hasTouch);\n};\n\nexport const optimizeConfigForMobile = (\n config: AnimationConfig\n): AnimationConfig => {\n if (!isMobileDevice()) return config;\n\n return {\n ...config,\n // Reduce particle count by 40%\n particleCount: Math.floor((config.particleCount || 50) * 0.6),\n // Reduce element size by 20%\n elementSize: Math.floor((config.elementSize || 20) * 0.8),\n // Reduce lifetime by 20%\n lifetime: Math.floor((config.lifetime || 150) * 0.8),\n // Simplify physics\n physics: {\n ...config.physics,\n // Reduce precision for mobile\n gravity: Math.round((config.physics?.gravity || 0) * 100) / 100,\n wind: Math.round((config.physics?.wind || 0) * 100) / 100,\n friction: Math.round((config.physics?.friction || 0.98) * 100) / 100,\n },\n };\n};\n\n// Frame skipping for mobile\nexport const shouldSkipFrame = (frameCount: number): boolean => {\n if (!isMobileDevice()) return false;\n // Skip every 3rd frame on mobile\n return frameCount % 3 === 0;\n};\n\n// Reduce visual complexity for mobile\nexport const simplifyVisualEffects = (animationType: string): boolean => {\n if (!isMobileDevice()) return false;\n // These animations have heavy visual effects\n const heavyAnimations = [\n 'fireflies',\n 'galaxy',\n 'aurora',\n 'crystals',\n 'glitch',\n ];\n return heavyAnimations.includes(animationType);\n};\n","import { Particle } from './types';\nimport { particlePool, PooledParticle } from './particlePool';\nimport { shouldSkipFrame } from './mobileOptimizations';\nimport { randomInRange } from './utils';\n\nexport interface AnimationInstance {\n id: string;\n particles: Particle[];\n containerElement: HTMLDivElement;\n renderFunction: (particle: Particle) => React.ReactNode;\n updateCallback?: (particles: Particle[]) => void;\n onComplete?: () => void;\n physics: {\n gravity: number;\n friction: number;\n wind: number;\n };\n animationType: string;\n config?: {\n effects?: {\n flutter?: boolean;\n windDrift?: boolean;\n wobble?: boolean;\n twinkle?: boolean;\n };\n };\n frameCount: number;\n isPaused?: boolean;\n pausedAt?: number;\n}\n\nclass AnimationManager {\n private animations: Map<string, AnimationInstance> = new Map();\n private rafId: number | null = null;\n private isRunning: boolean = false;\n private lastFrameTime: number = 0;\n private frameInterval: number = 1000 / 60; // 60 FPS target\n\n // Performance metrics\n private frameCount: number = 0;\n private fpsUpdateInterval: number = 1000; // Update FPS every second\n private lastFpsUpdate: number = 0;\n private currentFps: number = 0;\n\n constructor() {\n // Bind methods\n this.update = this.update.bind(this);\n }\n\n addAnimation(animation: AnimationInstance): void {\n this.animations.set(animation.id, animation);\n\n // Start the loop if not already running\n if (!this.isRunning && this.animations.size > 0) {\n this.start();\n }\n }\n\n removeAnimation(id: string): void {\n const animation = this.animations.get(id);\n if (animation) {\n // Release particles back to pool\n particlePool.releaseAll(animation.particles as Particle[]);\n\n // Remove container\n if (\n animation.containerElement &&\n document.body.contains(animation.containerElement)\n ) {\n document.body.removeChild(animation.containerElement);\n }\n\n this.animations.delete(id);\n }\n\n // Stop the loop if no more animations\n if (this.animations.size === 0) {\n this.stop();\n }\n }\n\n private start(): void {\n if (this.isRunning) return;\n\n this.isRunning = true;\n this.lastFrameTime = performance.now();\n this.lastFpsUpdate = this.lastFrameTime;\n this.frameCount = 0;\n this.rafId = requestAnimationFrame(this.update);\n }\n\n private stop(): void {\n if (!this.isRunning) return;\n\n this.isRunning = false;\n if (this.rafId !== null) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n }\n\n private update(currentTime: number): void {\n // Calculate delta time\n const deltaTime = currentTime - this.lastFrameTime;\n\n // Frame rate limiting\n if (deltaTime < this.frameInterval) {\n this.rafId = requestAnimationFrame(this.update);\n return;\n }\n\n this.lastFrameTime = currentTime - (deltaTime % this.frameInterval);\n this.frameCount++;\n\n // Update FPS counter\n if (currentTime - this.lastFpsUpdate >= this.fpsUpdateInterval) {\n this.currentFps = this.frameCount;\n this.frameCount = 0;\n this.lastFpsUpdate = currentTime;\n }\n\n // Check if tab is visible\n const isTabVisible = !document.hidden;\n if (!isTabVisible) {\n this.rafId = requestAnimationFrame(this.update);\n return;\n }\n\n // Update all animations\n const completedAnimations: string[] = [];\n\n this.animations.forEach((animation, id) => {\n // Skip update if animation is paused\n if (animation.isPaused) {\n return;\n }\n\n animation.frameCount++;\n const skipFrame = shouldSkipFrame(animation.frameCount);\n\n let activeParticles = 0;\n const newParticles: PooledParticle[] = []; // Collect new particles to add\n\n // Update particles\n animation.particles = animation.particles.map((particle) => {\n if (particle.life <= 0) return particle;\n\n activeParticles++;\n\n // Physics update\n particle.x += particle.vx;\n particle.y += particle.vy;\n particle.vy += animation.physics.gravity;\n particle.vx += animation.physics.wind;\n particle.vx *= animation.physics.friction;\n particle.vy *= animation.physics.friction;\n\n // Update rotation - make sparkles spin more\n if (animation.animationType === 'sparkles') {\n particle.rotation += 5; // Constant spin for sparkles\n } else {\n particle.rotation += particle.vx * 2;\n }\n\n particle.life -= 1.2;\n\n // Apply animation-specific effects\n this.applyEffects(particle, animation);\n\n // Handle mortar explosions\n this.handleMortarExplosion(particle, animation, newParticles);\n\n // Update opacity\n this.updateOpacity(particle, animation);\n\n return particle;\n });\n\n // Add any new particles created during the update (e.g., explosion particles)\n if (newParticles.length > 0) {\n animation.particles.push(...newParticles);\n }\n\n // Call update callback if provided\n if (animation.updateCallback && !skipFrame) {\n animation.updateCallback(animation.particles);\n }\n\n // Mark for removal if no active particles\n if (activeParticles === 0) {\n completedAnimations.push(id);\n if (animation.onComplete) {\n animation.onComplete();\n }\n }\n });\n\n // Remove completed animations\n completedAnimations.forEach((id) => this.removeAnimation(id));\n\n // Continue loop if animations remain\n if (this.isRunning) {\n this.rafId = requestAnimationFrame(this.update);\n }\n }\n\n private applyEffects(particle: Particle, animation: AnimationInstance): void {\n const effects = animation.config?.effects;\n if (!effects) return;\n\n const { animationType } = animation;\n\n // Flutter effect for confetti\n if (effects.flutter && animationType === 'confetti') {\n particle.x += Math.sin(particle.life * 0.1) * 0.5;\n particle.rotation += Math.sin(particle.life * 0.05) * 2;\n }\n\n // Wind drift for snow/leaves\n if (\n effects.windDrift &&\n (animationType === 'snow' || animationType === 'leaves')\n ) {\n particle.x +=\n Math.sin(particle.life * 0.05 + particle.id.charCodeAt(0)) * 0.8;\n }\n\n // Wobble effect for bubbles\n if (effects.wobble && animationType === 'bubbles') {\n particle.x += Math.sin(particle.life * 0.08) * 0.3;\n particle.y += Math.cos(particle.life * 0.08) * 0.2;\n }\n }\n\n private handleMortarExplosion(\n particle: Particle,\n animation: AnimationInstance,\n newParticles: PooledParticle[]\n ): void {\n if (animation.animationType !== 'mortar' || !particle.element) return;\n\n try {\n const elementData = JSON.parse(particle.element as string);\n\n // Handle shell particles\n if (elementData.isShell && !elementData.hasExploded) {\n // Create trail particles as the shell rises\n if (animation.frameCount % 3 === 0) {\n const trailParticle = particlePool.acquire();\n Object.assign(trailParticle, {\n id: `${particle.id}-trail-${Date.now()}`,\n x: particle.x + randomInRange(-2, 2),\n y: particle.y + randomInRange(-2, 2),\n vx: randomInRange(-1, 1),\n vy: randomInRange(0, 2),\n life: 30,\n opacity: 0.8,\n size: particle.size * 0.7,\n rotation: 0,\n color: particle.color,\n element: JSON.stringify({ isTrail: true }),\n config: particle.config,\n });\n newParticles.push(trailParticle);\n }\n\n // Check if it's time to explode based on fixed timer\n const totalLife = particle.config?.lifetime ?? 200;\n const flightTime = totalLife - particle.life;\n const shouldExplode = flightTime >= (elementData.timeToExplode || 25);\n\n if (shouldExplode) {\n // Mark as exploded\n elementData.hasExploded = true;\n particle.element = JSON.stringify(elementData);\n\n // Create galaxy-style explosion with fewer particles for performance\n const isMobile = window.innerWidth < 768;\n const burstCount = isMobile ? 20 : 30; // Reduced particle count\n const explosionParticles: PooledParticle[] = [];\n\n // Galaxy colors for the explosion\n const galaxyColors = [\n '#FFFFFF',\n '#FFF9C4',\n '#BBDEFB',\n '#C5CAE9',\n '#D1C4E9',\n '#FFE082',\n '#FFCCBC',\n ];\n\n // Create spiral galaxy explosion\n for (let i = 0; i < burstCount; i++) {\n const progress = i / burstCount;\n const spiralAngle = progress * Math.PI * 6; // 3 full rotations\n const radius = progress * 80; // Explosion radius\n\n // Add randomness for natural look\n const angleOffset = randomInRange(-0.4, 0.4);\n const radiusOffset = randomInRange(-15, 15);\n\n const finalAngle = spiralAngle + angleOffset;\n const finalRadius = (radius + radiusOffset) * 0.5; // Smaller explosion\n\n // Velocity follows spiral tangent\n const tangentAngle = finalAngle + Math.PI / 2;\n const speed = 3 * (1 - progress * 0.3); // Outer particles slower\n\n const burstParticle = particlePool.acquire();\n Object.assign(burstParticle, {\n id: `${particle.id}-burst-${i}`,\n x: particle.x + Math.cos(finalAngle) * finalRadius * 0.1,\n y: particle.y + Math.sin(finalAngle) * finalRadius * 0.1,\n vx: Math.cos(tangentAngle) * speed + Math.cos(finalAngle) * 2,\n vy: Math.sin(tangentAngle) * speed + Math.sin(finalAngle) * 2,\n life: 120 - progress * 40, // Inner particles live longer\n opacity: 1,\n size: randomInRange(2, 5) * (1 - progress * 0.5),\n rotation: randomInRange(0, 360),\n color:\n galaxyColors[Math.floor(Math.random() * galaxyColors.length)],\n element: JSON.stringify({\n isBurst: true,\n isGalaxy: true,\n twinkle: Math.random() > 0.7,\n }),\n config: particle.config,\n });\n explosionParticles.push(burstParticle);\n }\n\n // Add fewer bright core particles\n const coreCount = isMobile ? 5 : 8;\n for (let i = 0; i < coreCount; i++) {\n const angle = (Math.PI * 2 * i) / coreCount;\n const coreParticle = particlePool.acquire();\n Object.assign(coreParticle, {\n id: `${particle.id}-core-${i}`,\n x: particle.x,\n y: particle.y,\n vx: Math.cos(angle) * randomInRange(1, 2),\n vy: Math.sin(angle) * randomInRange(1, 2),\n life: 60, // Shorter life\n opacity: 1,\n size: randomInRange(3, 5),\n rotation: 0,\n color: '#FFFFFF',\n element: JSON.stringify({\n isBurst: true,\n isCore: true,\n }),\n config: particle.config,\n });\n explosionParticles.push(coreParticle);\n }\n\n // Add center flash\n const flashParticle = particlePool.acquire();\n Object.assign(flashParticle, {\n id: `${particle.id}-flash`,\n x: particle.x,\n y: particle.y,\n vx: 0,\n vy: 0,\n life: 20,\n opacity: 1,\n size: 30,\n rotation: 0,\n color: '#ffffff',\n element: JSON.stringify({ isBurst: true }),\n config: particle.config,\n });\n explosionParticles.push(flashParticle);\n\n newParticles.push(...explosionParticles);\n }\n }\n } catch (e) {\n // Ignore parse errors\n }\n }\n\n private updateOpacity(\n particle: Particle,\n animation: AnimationInstance\n ): void {\n const { animationType, config } = animation;\n const effects = config?.effects;\n\n if (animationType === 'sparkles') {\n if (particle.life > 70) {\n particle.opacity = (100 - particle.life) / 30;\n } else if (particle.life < 30) {\n particle.opacity = particle.life / 30;\n }\n // Twinkle effect\n if (effects?.twinkle) {\n particle.opacity *= 0.5 + Math.sin(particle.life * 0.3) * 0.5;\n }\n } else if (animationType === 'stars' && effects?.twinkle) {\n // Twinkle effect for stars\n particle.opacity =\n (particle.life / 100) * (0.5 + Math.sin(particle.life * 0.3) * 0.5);\n } else {\n particle.opacity = particle.life / 100;\n }\n }\n\n getStats() {\n return {\n activeAnimations: this.animations.size,\n currentFps: this.currentFps,\n isRunning: this.isRunning,\n totalParticles: Array.from(this.animations.values()).reduce(\n (sum, anim) => sum + anim.particles.filter((p) => p.life > 0).length,\n 0\n ),\n };\n }\n\n // Adjust target frame rate for performance\n setTargetFPS(fps: number): void {\n this.frameInterval = 1000 / fps;\n }\n\n // Pause a specific animation\n pauseAnimation(id: string): void {\n const animation = this.animations.get(id);\n if (animation && !animation.isPaused) {\n animation.isPaused = true;\n animation.pausedAt = performance.now();\n }\n }\n\n // Resume a specific animation\n resumeAnimation(id: string): void {\n const animation = this.animations.get(id);\n if (animation && animation.isPaused) {\n animation.isPaused = false;\n\n // Restart RAF loop if needed\n if (this.animations.size > 0 && !this.isRunning) {\n this.start();\n }\n }\n }\n\n // Check if an animation is paused\n isAnimationPaused(id: string): boolean {\n const animation = this.animations.get(id);\n return animation ? !!animation.isPaused : false;\n }\n\n // Get animation by ID\n getAnimation(id: string): AnimationInstance | undefined {\n return this.animations.get(id);\n }\n}\n\n// Singleton instance\nexport const animationManager = new AnimationManager();\n","import {\n useCallback,\n useRef,\n useState,\n useEffect,\n RefObject,\n useMemo,\n} from 'react';\nimport React from 'react';\nimport { createRoot, Root } from 'react-dom/client';\nimport {\n AnimationType,\n AnimationConfig,\n Particle,\n AnimationControls,\n} from './types';\nimport { animations } from './animations';\nimport { createParticleStyle } from './utils';\nimport { optimizeConfigForMobile } from './mobileOptimizations';\nimport { animationManager } from './animationManager';\n\ninterface UseRewardReturn extends AnimationControls {\n reward: () => Promise<void>;\n isAnimating: boolean;\n targetRef?: RefObject<HTMLElement>;\n}\n\n// Overload signatures for better TypeScript support\nexport function useReward(\n elementId: string,\n animationType: AnimationType,\n config?: AnimationConfig\n): UseRewardReturn;\n\nexport function useReward(\n targetRef: RefObject<HTMLElement>,\n animationType: AnimationType,\n config?: AnimationConfig\n): UseRewardReturn;\n\nexport function useReward(\n elementIdOrRef: string | RefObject<HTMLElement>,\n animationType: AnimationType,\n config?: AnimationConfig\n): UseRewardReturn {\n const [isAnimating, setIsAnimating] = useState(false);\n const animationIdRef = useRef<string | null>(null);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const rootRef = useRef<Root | null>(null);\n\n // Create internal ref if string ID is provided\n const internalRef = useRef<HTMLElement>(null);\n const isUsingStringId = typeof elementIdOrRef === 'string';\n const targetRef = isUsingStringId ? internalRef : elementIdOrRef;\n\n const animate = useCallback(() => {\n return new Promise<void>((resolve) => {\n // Get element from ref or ID\n let element: HTMLElement | null = null;\n\n if (isUsingStringId) {\n // SSR safety check\n if (typeof document === 'undefined') return;\n element = document.getElementById(elementIdOrRef as string);\n } else {\n element = targetRef.current;\n }\n\n if (!element) {\n // Development warning - will be stripped by minifiers in production\n console.warn?.(\n `[Partycles] Element ${isUsingStringId ? `with ID \"${elementIdOrRef}\"` : 'from ref'} not found. ` +\n 'Make sure the element exists when reward() is called.'\n );\n resolve();\n return;\n }\n\n const rect = element.getBoundingClientRect();\n const origin = {\n x: rect.left + rect.width / 2,\n y: rect.top + rect.height / 2,\n };\n\n const animationHandler = animations[animationType];\n if (!animationHandler) {\n console.error(`Animation type \"${animationType}\" not found`);\n resolve();\n return;\n }\n\n // Apply mobile performance optimizations\n const optimizedConfig = config\n ? optimizeConfigForMobile(config)\n : undefined;\n\n // Create particles\n const particles = animationHandler\n .createParticles(origin, optimizedConfig || {})\n .map((particle) => ({\n ...particle,\n config: optimizedConfig || config, // Store config in particle for render functions\n }));\n\n // Create container\n // SSR safety check\n if (typeof document === 'undefined') {\n resolve();\n return;\n }\n\n const container = document.createElement('div');\n container.style.position = 'fixed';\n container.style.top = '0';\n container.style.left = '0';\n container.style.width = '100%';\n container.style.height = '100%';\n container.style.pointerEvents = 'none';\n container.style.zIndex = '9999';\n document.body.appendChild(container);\n containerRef.current = container;\n\n // Create React root\n const root = createRoot(container);\n rootRef.current = root;\n\n const containerRect = container.getBoundingClientRect();\n\n // Default gravity varies by animation type\n const defaultGravity =\n animationType === 'bubbles'\n ? -0.1\n : animationType === 'snow'\n ? 0.05\n : 0.35;\n const gravity =\n optimizedConfig?.physics?.gravity ??\n config?.physics?.gravity ??\n defaultGravity;\n const friction =\n optimizedConfig?.physics?.friction ?? config?.physics?.friction ?? 0.98;\n const wind = optimizedConfig?.physics?.wind ?? config?.physics?.wind ?? 0;\n\n // Create animation instance ID\n const animationId = `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n animationIdRef.current = animationId;\n\n // Update callback to render particles\n const updateCallback = (updatedParticles: Particle[]) => {\n if (rootRef.current) {\n rootRef.current.render(\n <React.Fragment>\n {updatedParticles\n .filter((p) => p.life > 0)\n .map((particle) => (\n <div\n key={particle.id}\n style={createParticleStyle(particle, containerRect)}\n >\n {animationHandler.renderParticle(particle)}\n </div>\n ))}\n </React.Fragment>\n );\n }\n };\n\n // Add animation to manager\n animationManager.addAnimation({\n id: animationId,\n particles,\n containerElement: container,\n renderFunction: animationHandler.renderParticle,\n updateCallback,\n onComplete: () => {\n // Cleanup\n if (rootRef.current) {\n rootRef.current.unmount();\n rootRef.current = null;\n }\n containerRef.current = null;\n animationIdRef.current = null;\n setIsAnimating(false);\n resolve();\n },\n physics: { gravity, friction, wind },\n animationType,\n config: optimizedConfig || config,\n frameCount: 0,\n });\n\n setIsAnimating(true);\n });\n }, [elementIdOrRef, animationType, config, isUsingStringId, targetRef]);\n\n const reward = useCallback(() => {\n if (!isAnimating) {\n return animate();\n }\n return Promise.resolve();\n }, [animate, isAnimating]);\n\n // Imperative control methods\n const pause = useCallback(() => {\n if (animationIdRef.current) {\n animationManager.pauseAnimation(animationIdRef.current);\n }\n }, []);\n\n const resume = useCallback(() => {\n if (animationIdRef.current) {\n animationManager.resumeAnimation(animationIdRef.current);\n }\n }, []);\n\n const replay = useCallback(() => {\n // First clean up existing animation if any\n if (animationIdRef.current) {\n animationManager.removeAnimation(animationIdRef.current);\n animationIdRef.current = null;\n }\n setIsAnimating(false);\n\n // Then start a new animation\n return animate();\n }, [animate]);\n\n const [animationId, setAnimationId] = useState<string | null>(null);\n\n // Update animation ID in state when it changes\n useEffect(() => {\n setAnimationId(animationIdRef.current);\n }, [isAnimating]);\n\n const isPaused = useMemo(() => {\n if (!animationId) return false;\n return animationManager.isAnimationPaused(animationId);\n }, [animationId]); // Re-compute when animation ID changes\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (animationIdRef.current) {\n animationManager.removeAnimation(animationIdRef.current);\n }\n if (rootRef.current) {\n rootRef.current.unmount();\n rootRef.current = null;\n }\n if (\n containerRef.current &&\n document.body.contains(containerRef.current)\n ) {\n document.body.removeChild(containerRef.current);\n containerRef.current = null;\n }\n };\n }, []);\n\n // Return ref only for ref-based API\n if (!isUsingStringId) {\n return { reward, isAnimating, targetRef, pause, resume, replay, isPaused };\n }\n\n return { reward, isAnimating, pause, resume, replay, isPaused };\n}\n"]}
|